Odyssey
salesOrder.prg
1 <?php
2 /* File: salesOrder.html
3  * Purpose: To initialize grid and CRUD calls on the salesOrder page
4  */
5 
6 $isInEditList = GetIsInEditList($dbh, $Hu);
7 ?>
8 
9 <script type="text/javascript">
10 
11 <?php
12 // Get common JS functions here.
13 getAddMinifiedActionStyleFunction();
14 getShowWaitFunctions();
15 ?>
16 
17 <?php
18 /* This function initializes the sales order grid.
19  */ ?>
20 var cuList = [];
21 function PopulateSalesOrderGrid() {
22  $.homecuValidator.setup({formValidate:'formMain', formStatusField: 'formValidateMainDiv'});
23 
24  var showAll = false;
25  var currentEmployeeId;
26  var tooltips = [];
27  var disallowAdd = false;
28  var grid = $("#salesOrderGrid").kendoGrid({
29  dataSource: {
30  transport: {
31  read: {
32  url: "index.prg?operation=salesOrderLoad",
33  dataType: "json",
34  type: "POST"
35  },
36  create: {
37  url: "index.prg?operation=salesOrderCreate",
38  dataType: "json",
39  type: "POST"
40  },
41  update: {
42  url: "index.prg?operation=salesOrderUpdate",
43  dataType: "json",
44  type: "POST"
45  },
46  parameterMap: function(data, type) {
47  showWaitWindow();
48  if (type === "read") {
49  return {initializeDDLs: cuList.length == 0 ? "Y" : "N"};
50  } else {
51  data.date = data.date == null || data.date == "Invalid Date" ? "" : kendo.toString(data.activeDate, "yyyy-MM-dd");
52  data.emailable = data.emailable ? "Y" : "N";
53  return data;
54  }
55  }
56  },
57  schema: {
58  parse: function (data) {
59  hideWaitWindow();
60 
61  if (data.operation == "read") {
62  $('#salesOrderGrid .simpleFilter').focus();
63  }
64 
65  if (data.status !== "000") {
66  $.homecuValidator.displayMessage(data.error, $.homecuValidator.settings.statusError );
67  return [];
68  } else {
69  if (data.cuList != null && data.cuList.length > 0) {
70  cuList = data.cuList;
71  }
72 
73  if (data.currentEmployeeId != null) {
74  currentEmployeeId = data.currentEmployeeId;
75  }
76 
77  return data.record;
78  }
79  },
80  model: {
81  id: "salesOrderId",
82  fields: {
83  salesOrderId: {type: "number", editable: false, nullable: false},
84  cuNumber: {type: "string"},
85  date: {type: "date", editable: false},
86  refNo: {type: "string"},
87  employee: {type: "string"},
88  cuName: {type: "string"},
89  isClosed: {type: "boolean"},
90  emailable: {type: "boolean"}
91  }
92  }
93  }
94  },
95  columns: [
96  {command: [<?php if ($isInEditList) { ?> {name: "edit", text: "", iconClass: "fa fa-edit"}, <?php } ?>
97  {name: "openDetails", text: "", iconClass: "fa fa-indent",
98  click: function (e) {
99  var row = $(e.target).closest("tr");
100  var dataItem = $("#salesOrderGrid").data("kendoGrid").dataItem(row);
101  var url = "<?php echo $produrl . GetBillingURL(); ?>?page=salesOrderDetails&salesOrderId="+ dataItem.salesOrderId;
102  showWaitWindow();
103  window.location.replace(url);
104  }
105  }], width: "10%"},
106  {command: [{name: "showInvoice", text: "Show Invoice",
107  click: function (e) {
108  var row = $(e.target).closest("tr");
109  var dataItem = $("#salesOrderGrid").data("kendoGrid").dataItem(row);
110  var url = "<?php echo $produrl . GetBillingURL(); ?>?page=invoiceView&cu="+ dataItem.cuNumber;
111  showWaitWindow();
112  window.location.replace(url);
113  return false;
114  }
115  }
116  ]},
117  {field: "isClosed", title: "Closed", template: "# if (isClosed) { # C # } else { # # } #", width: "10%"},
118  {field: "cuName", title: "CU Name"},
119  {field: "cuNumber", title: "CU", width: "15%"},
120  {field: "date", title: "Date", format: "{0:MM/dd/yyyy}", width: "10%"},
121  {field: "refNo", title: "Reference"},
122  {field: "emailable", title: "Email?"},
123  {field: "employee", title: "Employee", width: "13%"},
124 
125  ],
126  sortable: true,
127  filterable: {extra: false},
128  toolbar: [ <?php if ($isInEditList) { ?> {name: "addSingle", text: "", iconClass: "fa fa-plus"}, <?php } ?>
129  {name: "simpleFilter", template: "&nbsp; CU Filter: <input class=\"k-input simpleFilter\" type=\"text\">"}],
130  <?php if ($isInEditList) { ?>
131  editable: {
132  mode: "popup",
133  template: kendo.template($("#popupTemplate").html()),
134  window: {
135  draggable: false,
136  resizable: false,
137  actions: [],
138  width: 500
139  }
140  },
141  edit: function (e) {
142  disallowAdd = false;
143  $.homecuValidator.setup({formValidate:'popupForm', formStatusField: 'formValidatePopupDiv'});
144 
145  var popupWindow = e.sender.editable.element.data("kendoWindow");
146  popupWindow.title(e.model.isNew() ? "Add Sales Order" : "Edit Sales Order");
147 
148  if (e.model.isNew()) {
149  $("input[name='cuNumber']").show();
150  $("#cuLabel").hide();
151 
152  var cuKey = {};
153  var cuAvailable = [];
154  var gridData = $("#salesOrderGrid").data("kendoGrid").dataSource.data();
155  for(var i = 0, count = gridData.length; i != count; i++) {
156  var key = gridData[i].cuNumber.trim().toUpperCase();
157  cuKey[key] = true;
158  }
159  for(var i = 0, count = cuList.length; i != count; i++) {
160  var key = cuList[i].value.trim().toUpperCase();
161  if (cuKey[key] == null) {
162  cuAvailable.push(cuList[i]);
163  }
164  }
165  disallowAdd = cuAvailable.length == 1;
166 
167  var cuCombobox = $("input[name='cuNumber']").kendoDropDownList({
168  dataSource: cuAvailable,
169  filter: "startswith",
170  dataTextField: "text",
171  dataValueField: "value"
172  }).data("kendoDropDownList");
173 
174  <?php // Add won't have anything ?>
175  if (e.model.isNew()) {
176  e.model.cuNumber = cuCombobox.value();
177  }
178  } else {
179  $("input[name='cuNumber']").hide();
180  $("#cuLabel").show();
181  }
182 
183 
184  },
185  save: function (e) {
186  if (!$.homecuValidator.validate()) {
187  e.preventDefault();
188  return false;
189  } else {
190  $.homecuValidator.setup({formValidate:'formMain', formStatusField: 'formValidateMainDiv'});
191 
192  if (disallowAdd) {
193  $("#salesOrderGrid .k-grid-addSingle").data("kendoButton").enable(false);
194  }
195  }
196  },
197  <?php } ?>
198  dataBound: function (e) {
199  for (var i = 0; i != tooltips.length; i++) {
200  tooltips[i].destroy();
201  }
202  tooltips = addMinifiedActionStyle("#salesOrderGrid", true, [{filter: ".k-grid-openDetails", content: "Open Sales Details"},
203  {filter: ".k-grid-addSingle", content: "Add new record"}]);
204 
205  var cuKey = {};
206  var cuAvailable = [];
207  var gridData = $("#salesOrderGrid").data("kendoGrid").dataSource.data();
208  for(var i = 0, count = gridData.length; i != count; i++) {
209  var key = gridData[i].cuNumber.trim().toUpperCase();
210  cuKey[key] = true;
211  }
212  for(var i = 0, count = cuList.length; i != count; i++) {
213  var key = cuList[i].value.trim().toUpperCase();
214  if (cuKey[key] == null) {
215  cuAvailable.push(cuList[i]);
216  }
217  }
218 
219  if (cuAvailable.length == 0) {
220  $("#salesOrderGrid .k-grid-addSingle").data("kendoButton").enable(false);
221  }
222  }
223  }).data("kendoGrid");
224 
225 
226 
227  <?php if ($isInEditList) { ?>
228  $("#salesOrderGrid .k-grid-addSingle").kendoButton({
229  click: function () {
230  grid.addRow();
231  return false;
232  }
233  });
234  <?php } ?>
235 
236  $("#salesOrderGrid .simpleFilter").keyup(function (e) {
237  var text = $(this).val().trim();
238  if (text == "") {
239  grid.dataSource.filter({});
240  } else {
241  grid.dataSource.filter({ field: "cuNumber", operator: "contains", value: text});
242  }
243  });
244 }
245 
246 $(document).ready(function () {
247  PopulateSalesOrderGrid ();
248 });
249 </script>
250 <?php if ($isInEditList) { ?>
251 <script id="popupTemplate" type="text/x-kendo-template">
252  <div id="formValidatePopupDiv" style="display:none;"></div>
253  <div class="container_12" id="popupForm">
254  <div class="grid_12">
255  <div class="grid_4 alpha">
256  <label data-for="cuNumber">CU:</label>
257  </div>
258  <div class="grid_7">
259  <input type="text" name="cuNumber" style="width:100%; display: none;"
260  data-duplicate-msg="Contract for CU already exists">
261  <div id="cuLabel" style="display: none;">#: cuNumber #</div>
262  </div>
263  <div class="grid_1 omega">
264  <span data-for='cuNumber' class='k-invalid-msg'></span>
265  </div>
266  </div>
267  <div class="grid_12">
268  <div class="grid_4 alpha">
269  <label data-for="refNo">Reference:</label>
270  </div>
271  <div class="grid_7">
272  <input type="text" class="k-input" name="refNo" style="width:100%" maxlength=20>
273  </div>
274  <div class="grid_1 omega">
275  <span data-for='refNo' class='k-invalid-msg'></span>
276  </div>
277  </div>
278  <div class="grid_12">
279  <div class="grid_4 alpha">
280  <label data-for="emailable">Email?:</label>
281  </div>
282  <div class="grid_7">
283  <input type="checkbox" name="emailable">
284  </div>
285  <div class="grid_1 omega">
286  <span data-for='emailable' class='k-invalid-msg'></span>
287  </div>
288  </div>
289  </div>
290 </script>
291 <?php } ?>
292 <div class="container_12">
293  <div id="formMain"></div>
294  <div id="formValidateMainDiv" style="display:none;"></div>
295  <div class="grid_12">
296  <div id="salesOrderGrid"></div>
297  </div>
298 </div>