5 $isInEditList = GetIsInEditList($dbh, $Hu);
8 <script type=
"text/javascript">
12 getShowWaitFunctions();
19 var salesOrderId = <?php echo intval($SYSENV[
"BILL"][
"salesOrderId"]); ?>;
33 function SetupMainForm() {
34 $.homecuValidator.setup({formValidate:
'formMain', formStatusField:
'formValidateMainDiv'});
46 function SetupProductValidation(form, statusField) {
48 $.homecuValidator.setup({formValidate: form, formStatusField: statusField, homecuCustomRules: {
49 bhip:
function(input) {
50 if (!$(input).is(
"[name='halfBillDate']")) {
53 if (productObservable.get(
"bindOptions.billHalfDateRowVisible") !==
true) {
56 if (productObservable.get(
"bindOptions.billHalfRowVisible") !==
true) {
59 var billHalfDate = productObservable.get(
"source.partiallyBilledDate");
64 now.setHours(0,0,0,0);
66 if(billHalfDate !=
null && now.getTime() >= billHalfDate.getTime()) {
67 $(input).attr(
"data-bhip-msg",
"Cannot bill this month or before.");
73 crif:
function(input) {
74 if (!$(input).is(
"[name='checkReceived']")) {
77 if (productObservable.get(
"bindOptions.billHalfCheckReceivedRowVisible") !==
true) {
80 if (productObservable.get(
"bindOptions.billHalfRowVisible") !==
true) {
83 var checkReceivedDate = productObservable.get(
"source.partiallyBilledDate");
86 now.setHours(0,0,0,0);
88 if (checkReceivedDate !=
null) {
89 checkReceivedDate.setHours(0,0,0,0);
92 if(checkReceivedDate !=
null && now.getTime() < checkReceivedDate.getTime()) {
93 $(input).attr(
"data-crif-msg",
"Cannot receive a check in the future.");
99 bojip:
function(input) {
100 if (!$(input).is(
"[name='immediateBillDate']")) {
103 if (productObservable.get(
"bindOptions.immediateBillRowVisible") !==
true) {
106 if (productObservable.get(
"bindOptions.billHalfRowVisible") !==
true) {
109 if (productObservable.get(
"bindOptions.workflowRowVisible") !==
true) {
112 var immediateBillDate = productObservable.get(
"source.partiallyBilledDate");
115 var now =
new Date();
117 now.setHours(0,0,0,0);
119 if(immediateBillDate !=
null && now.getTime() >= immediateBillDate.getTime()) {
120 $(input).attr(
"data-bojip-msg",
"Cannot bill this month or before.");
138 function SetupLineItemValidation(form, statusField) {
139 $.homecuValidator.setup({formValidate: form, formStatusField: statusField, homecuCustomRules: {
140 bhip:
function(input) {
141 if (!$(input).is(
"[name='billHalfDate']")) {
144 if (lineItemObservable.get(
"bindOptions.billHalfDateRowVisible") !==
true) {
147 var billHalfDate = lineItemObservable.get(
"source.partiallyBilledDate");
150 var now =
new Date();
152 now.setHours(0,0,0,0);
154 if(billHalfDate !=
null && now.getTime() >= billHalfDate.getTime()) {
155 $(input).attr(
"data-bhip-msg",
"Cannot bill this month or before.");
161 crif:
function(input) {
162 if (!$(input).is(
"[name='checkReceived']")) {
165 if (lineItemObservable.get(
"bindOptions.billHalfCheckReceivedRowVisible") !==
true) {
168 var checkReceivedDate = lineItemObservable.get(
"source.partiallyBilledDate");
170 var now =
new Date();
171 now.setHours(0,0,0,0);
173 if (checkReceivedDate !=
null) {
174 checkReceivedDate.setHours(0,0,0,0);
177 if(checkReceivedDate !=
null && now.getTime() < checkReceivedDate.getTime()) {
178 $(input).attr(
"data-crif-msg",
"Cannot receive a check in the future.");
184 bojip:
function(input) {
185 if (!$(input).is(
"[name='immediateBillDate']")) {
188 if (lineItemObservable.get(
"bindOptions.immediateBillRowVisible") !==
true) {
191 var immediateBillDate = lineItemObservable.get(
"source.partiallyBilledDate");
194 var now =
new Date();
196 now.setHours(0,0,0,0);
198 if(immediateBillDate !=
null && now.getTime() >= immediateBillDate.getTime()) {
199 $(input).attr(
"data-bojip-msg",
"Cannot bill this month or before.");
205 crreq:
function(input) {
206 if (!$(input).is(
"[name='checkReceivedAmount']")) {
209 if (lineItemObservable.get(
"bindOptions.billHalfAmountRowVisible") !==
true) {
213 if ($(input).val().trim() ==
"") {
214 $(input).attr(
"data-crreq-msg",
"Check amount is required.");
220 vres:
function(input) {
221 if (!$(input).is(
"[name='qty2Range']")) {
225 var qty1 = lineItemObservable.get(
"source.qty1");
226 var qty2 = lineItemObservable.get(
"source.qty2");
229 if (qty1 !=
null && qty2 !=
null && qty2 < qty1) {
230 $(input).attr(
"data-vres-msg",
"Range is not valid.");
249 function SetupActiveGridDialogs() {
256 $(
"#activeGrid").on(
"click",
".k-grid-customDelete",
function() {
257 var activeGrid = $(
"#activeGrid").data(
"kendoGrid");
258 var activeTr = $(
this).closest(
"tr");
259 var activeDataItem = activeGrid.dataItem(activeTr);
260 var bottomId = activeDataItem.featureDetailId;
262 var deleteActiveDialog = $(
"#deleteActiveDialog").data(
"kendoDialog");
263 if (deleteActiveDialog ==
null) {
264 deleteActiveDialog = $(
"<div id='deleteActiveDialog'></div>").appendTo(
"body").kendoDialog({
265 title:
"Confirm Deletion",
268 {text:
"Delete", primary:
true, action:
function() {
270 var bottomId = $(
"#deleteActiveDialog").data(
"bottomId");
272 var parameters = {operation:
"removeBillingFeature", featureDetailId: bottomId};
274 activeGridHelperDs.read(parameters);
279 if (window.activeWindows !=
null) {
280 window.activeWindows.push(
this);
284 if (window.activeWindows !=
null) {
285 window.activeWindows.pop();
289 content:
"Are you sure that you want to delete this line item?" 290 }).data(
"kendoDialog");
293 $(
"#deleteActiveDialog").data({bottomId: bottomId});
294 deleteActiveDialog.open().center();
297 $(
"#activeGrid").on(
"click",
".k-grid-advanceWorkflow",
function() {
298 var grid = $(
"#activeGrid").data(
"kendoGrid");
299 var tr = $(
this).closest(
"tr");
300 var dataItem = grid.dataItem($(tr));
301 ShowActiveEndMonthWindow(dataItem.completeButtonText, dataItem.featureDetailId, dataItem.endDate);
305 $(
"#activeGrid").on(
"click",
".k-grid-changePrice",
function() {
306 var grid = $(
"#activeGrid").data(
"kendoGrid");
307 var tr = $(
this).closest(
"tr");
308 var dataItem = grid.dataItem($(tr));
309 var parameters = {operation:
"readSalesOrderActiveLineItem", featureDetailId: dataItem.featureDetailId};
311 activeGridHelperDs.read(parameters);
328 function ShowActiveChangePriceWindow(lineItemData, configuration, bindOptions, ddls) {
329 var activeChangePriceWindow = $(
"#activeChangePriceWindow").data(
"kendoWindow");
330 if (activeChangePriceWindow ==
null) {
339 activeChangePriceWindow = $(
"<div id='activeChangePriceWindow'></div>").appendTo(
"body").kendoWindow({
341 title:
"Change Price",
345 if (window.activeWindows !=
null) {
346 window.activeWindows.pop();
352 if (window.activeWindows !=
null) {
353 window.activeWindows.push(
this);
356 SetupLineItemValidation(
"activeChangePriceForm",
"formValidateChangePrice");
358 }).data(
"kendoWindow");
360 kendo.destroy($(
"#activeChangePriceWindow #activeChangePriceForm"));
363 lineItemObservable.setupValues(lineItemData, bindOptions);
366 var fullBindText = $(
"#activeChangePriceTemplate").html();
368 var
template = kendo.template($(
"#detailConfigTemplate").html());
370 configuration.addOrUpdate =
"update";
371 fullBindText = fullBindText.replace(
"<!-- configDiv -->",
template(configuration));
373 activeChangePriceWindow.content(fullBindText);
374 kendo.bind(activeChangePriceWindow.element, lineItemObservable);
375 activeChangePriceWindow.open().center();
378 $(
"#activeChangePriceWindow .continueBtn").on(
"click",
function() {
379 if ($.homecuValidator.validate()) {
380 $(
"#activeChangePriceWindow").data(
"kendoWindow").close();
382 var parameters = lineItemObservable.getSaveParameters();
384 parameters.operation =
"updateActiveBillingFeature";
386 activeGridHelperDs.read(parameters);
392 $(
"#activeChangePriceWindow .cancelBtn").on(
"click",
function() {
393 $(
"#activeChangePriceWindow").data(
"kendoWindow").close();
409 function ShowActiveEndMonthWindow(buttonText, featureId, endDate) {
410 var activeEndMonthWindow = $(
"#activeEndMonthWindow").data(
"kendoWindow");
411 var activeEndMonthDDL = $(
"#activeEndMonthDDL").data(
"kendoDropDownList");
413 if (activeEndMonthWindow ==
null) {
421 activeEndMonthWindow = $(
"<div id='activeEndMonthWindow'></div>").appendTo(
"body").kendoWindow({
423 title:
"Set End Month",
425 template: $(
"#changeEndMonthTemplate").html()
430 if (window.activeWindows !=
null) {
431 window.activeWindows.pop();
435 if (window.activeWindows !=
null) {
436 window.activeWindows.push(
this);
439 }).data(
"kendoWindow");
447 var activeEndMonthDDL = $(
"#activeEndMonthDDL").kendoDropDownList({
449 data: lineItemObservable.get(
"ddls.startMonthOptions"),
454 text: {type:
"string"},
455 value: {type:
"string"}
460 dataTextField:
"text",
461 dataValueField:
"value" 462 }).data(
"kendoDropDownList");
464 $(
"#activeEndMonthWindow .continueBtn").click(
function() {
465 $(
"#activeEndMonthWindow").data(
"kendoWindow").close();
468 parameters.childType = $(
"#activeEndMonthWindow").data(
"childType");
469 parameters.featureDetailId = $(
"#activeEndMonthWindow").data(
"featureDetailId");
470 parameters.operation =
"modifyStatus";
471 parameters.endDate = $(
"#activeEndMonthDDL").data(
"kendoDropDownList").value();
472 parameters.orderDetailId = $(
"#activeEndMonthWindow").data(
"orderDetailId");
474 activeGridHelperDs.read(parameters);
477 $(
"#activeEndMonthWindow .cancelBtn").click(
function() {
478 $(
"#activeEndMonthWindow").data(
"kendoWindow").close();
482 var openDialog =
true;
485 $(
"#activeEndMonthWindow").data(
"childType",
"completeActive");
486 $(
"#activeEndMonthWindow").data(
"featureDetailId", featureId);
488 if (endDate ==
null) {
489 activeEndMonthDDL.select(0);
491 activeEndMonthDDL.value(endDate);
496 parameters.childType =
"undoActive";
497 parameters.featureDetailId = featureId;
498 parameters.operation =
"modifyStatus";
500 activeGridHelperDs.read(parameters);
506 activeEndMonthWindow.open().center();
521 function SetupCompletedGridDialogs() {
522 $(
"#completedGrid").on(
"click",
".k-grid-advanceWorkflow",
function() {
523 var text = $(
this).text().trim();
524 var tr = $(
this).closest(
"tr");
525 var grid = $(
"#completedGrid").data(
"kendoGrid");
526 var dataItem = grid.dataItem($(tr));
528 parameters.operation =
"modifyStatus";
529 parameters.featureDetailId = dataItem.featureDetailId;
533 parameters.childType =
"reactivateCompleted";
536 parameters.childType =
"undoCompleted";
540 completedGridHelperDs.read(parameters);
554 function SetupPendingTopGridDialogs() {
561 $(
"#pendingGrid").on(
"click",
".k-master-row .k-grid-customDelete",
function() {
562 var topGrid = $(
"#pendingGrid").data(
"kendoGrid");
563 var topTr = $(
this).closest(
"tr");
564 var topDataItem = topGrid.dataItem(topTr);
565 var topId = topDataItem.orderDetailId;
567 var deletePendingTopDialog = $(
"#deletePendingTopDialog").data(
"kendoDialog");
568 if (deletePendingTopDialog ==
null) {
576 deletePendingTopDialog = $(
"<div id='deletePendingTopDialog'></div>").appendTo(
"body").kendoDialog({
577 title:
"Confirm Deletion",
580 {text:
"Delete", primary:
true, action:
function() {
582 var topId = $(
"#deletePendingTopDialog").data(
"topId");
584 var parameters = {operation:
"removeSalesOrderDetail", orderDetailId: topId};
586 pendingTopGridHelperDs.read(parameters);
591 if (window.activeWindows !=
null) {
592 window.activeWindows.push(
this);
596 if (window.activeWindows !=
null) {
597 window.activeWindows.pop();
601 content:
"Are you sure that you want to delete this product?" 602 }).data(
"kendoDialog");
605 $(
"#deletePendingTopDialog").data({topId: topId});
606 deletePendingTopDialog.open().center();
609 $(
"#pendingGrid").on(
"click",
".k-grid-addSingle",
function() {
610 ShowProductAddWindow();
613 $(
"#pendingGrid").on(
"click",
".k-grid-createBulk",
function() {
625 function OpenShuttleApplet() {
626 var shuttleApplet = $(
"#shuttleApplet").data(
"kendoWindow");
628 var productList = productObservable.get(
"ddls.productItems");
631 if (shuttleApplet ==
null) {
639 shuttleApplet = $(
"<div id='shuttleApplet'></div>").appendTo(
"body").kendoWindow({
641 template: $(
"#shuttleAppletTemplate").html()
644 title:
"Add Multiple Products",
650 if (window.activeWindows !=
null) {
651 window.activeWindows.pop();
655 if (window.activeWindows !=
null) {
656 window.activeWindows.push(
this);
659 }).data(
"kendoWindow");
667 var gridDefinition = {
674 value: {type:
"string", editable:
false},
675 text: {type:
"string", editable:
false},
676 hasSetup: {type:
"boolean"},
677 hasUnattachedJobs: {type:
"boolean", editable:
false},
678 productExists: {type:
"boolean", editable:
false},
679 selectedText: {type:
"string"},
680 productOption: {type:
"string"},
681 shownWorkflowDivValue: {type:
"string"},
682 shownWorkflowDivText: {type:
"string"}
688 {field:
"text", title:
"Product"},
689 {field:
"productOption", title:
"Type",
template:
"# if (selectedText == '') { # (default) # } else { # #: selectedText # # } #",
690 editor:
function (container, options) {
691 if (options.model.selectedText !=
"(default)") {
692 var productConfigData = productObservable.get(
"ddls.productOptions");
693 var productConfigData = $.grep(productConfigData,
function(n,i) {
return n.product == options.model.value; });
694 var input = $(
"<input name='" + options.field +
"'>").appendTo(container).kendoDropDownList({
696 data: productConfigData
698 dataTextField:
"text",
699 dataValueField:
"value",
700 filter:
"startswith",
701 change:
function () {
702 options.model.selectedText = this.text();
703 options.model.productOption = this.value();
704 options.model.hasSetup = this.dataItem().hasSetup;
706 }).data(
"kendoDropDownList");
708 $(container).text(
"(default)");
712 {field:
"shownWorkflowDivValue", title:
"Job",
713 template:
"# if (!hasSetup) { # (None) # } else { # #: shownWorkflowDivText # # } #",
714 editor:
function(container, options) {
715 if (!options.model.hasSetup) {
716 $(container).text(
"(None)");
718 var workflowData = productObservable.get(
"ddls.unattachedJobs");
719 workflowData = $.grep(workflowData,
function(n,i) {
return n.product == options.model.value; });
720 workflowData.unshift({text:
"(New)", value: -1});
721 workflowData.push({text:
"(None)", value: -2});
723 var input = $(
"<input name='" + options.field +
"'>").appendTo(container).kendoDropDownList({
727 dataTextField:
"text",
728 dataValueField:
"value",
729 filter:
"startswith",
730 change:
function () {
731 options.model.shownWorkflowDivText = this.text();
732 options.model.shownWorkflowDivValue = this.value();
734 }).data(
"kendoDropDownList");
741 dataBound:
function () {
742 this.tbody.find(
"tr").click(
function () {
743 if ($(
this).hasClass(
"k-state-selected")) {
744 $(
this).removeClass(
"k-state-selected");
746 $(
this).addClass(
"k-state-selected");
752 var selectedGrid = $(
"#selectedGrid").kendoGrid(gridDefinition).data(
"kendoGrid");
755 gridDefinition.toolbar = [{
template:
"Product Filter: <input id='prodFilter' text='text' class='k-input k-textbox' maxlength='50' style='width: 100px;'>"}];
756 var availableGrid = $(
"#availableGrid").kendoGrid(gridDefinition).data(
"kendoGrid");
758 $(
"#prodFilter").keyup(
function (e) {
759 var text = $(
this).val().trim();
761 availableGrid.dataSource.filter({});
763 availableGrid.dataSource.filter({ field:
"text",
operator:
"contains", value: text});
767 var okayBtn = $(
"#shuttleOkayBtn").kendoButton({
770 $(
"#shuttleApplet").data(
"kendoWindow").close();
772 var rawProductData = $(
"#selectedGrid").data(
"kendoGrid").dataSource.data();
773 var productData = [];
774 for (var i = 0, length = rawProductData.length; i != length; i++) {
775 var rawRecord = rawProductData[i];
777 record.productId = rawRecord.value;
778 record.productOption = rawRecord.productOption;
782 record.partiallyBilledDate =
null;
784 if (rawRecord.hasSetup) {
785 record.billHalfValue =
"full";
787 switch (rawRecord.shownWorkflowDivValue) {
789 record.workflowValue =
"create";
790 record.unattachedJobValue = -1;
793 record.workflowValue =
"without";
794 record.unattachedJobValue = -1;
797 record.workflowValue =
"associate";
798 record.unattachedJobValue = rawRecord.shownWorkflowDivValue;
802 record.billHalfValue =
"nosetup";
803 record.workflowValue =
"none";
804 record.unattachedJobValue = -1;
807 productData.push(record);
810 var parameters = {salesOrderId: salesOrderId, operation:
"createSalesOrderDetails", productsSelected: kendo.stringify(productData)};
811 pendingTopGridHelperDs.read(parameters);
816 }).data(
"kendoButton");
818 var cancelBtn = $(
"#shuttleCancelBtn").kendoButton({
820 $(
"#shuttleApplet").data(
"kendoWindow").close();
823 }).data(
"kendoButton");
825 var moveToAvailableBtn = $(
"#shuttleMoveToAvailableBtn").kendoButton({
827 MoveData(availableGrid, selectedGrid,
false);
828 if (selectedGrid.dataSource.data().length > 0)
830 okayBtn.enable(
true);
831 moveToAvailableBtn.enable(
true);
833 okayBtn.enable(
false);
834 moveToAvailableBtn.enable(
false);
836 if (availableGrid.dataSource.data().length > 0) {
837 moveToSelectedBtn.enable(
true);
839 moveToSelectedBtn.enable(
false);
844 }).data(
"kendoButton");
846 var moveToSelectedBtn = $(
"#shuttleMoveToSelectedBtn").kendoButton({
848 MoveData(availableGrid, selectedGrid,
true);
849 if (selectedGrid.dataSource.data().length > 0)
851 okayBtn.enable(
true);
852 moveToAvailableBtn.enable(
true);
854 okayBtn.enable(
false);
855 moveToAvailableBtn.enable(
false);
857 if (availableGrid.dataSource.data().length > 0) {
858 moveToSelectedBtn.enable(
true);
860 moveToSelectedBtn.enable(
false);
864 }).data(
"kendoButton");
868 var fullProductConfigData = productObservable.get(
"ddls.productOptions");
869 for (var i = 0; i != productList.length; i++) {
870 var record = productList[i];
871 if (!record.hasOptions) {
872 productList[i].productOption =
"";
873 productList[i].selectedText =
"(default)";
876 var productConfigData = $.grep(fullProductConfigData,
function(n,i) {
return n.product == record.value; });
877 productList[i].productOption = productConfigData[0].value;
878 productList[i].selectedText = productConfigData[0].text;
879 productList[i].hasSetup = productConfigData[0].hasSetup;
882 if (record.hasSetup) {
883 productList[i].shownWorkflowDivText =
"(New)";
884 productList[i].shownWorkflowDivValue = -1;
886 productList[i].shownWorkflowDivText =
"(None)";
887 productList[i].shownWorkflowDivValue = -2;
891 $(
"#availableGrid").data(
"kendoGrid").dataSource.data(productList);
892 $(
"#selectedGrid").data(
"kendoGrid").dataSource.data([]);
894 $(
"#shuttleOkayBtn").data(
"kendoButton").enable(
false);
895 $(
"#shuttleMoveToAvailableBtn").data(
"kendoButton").enable(
false);
896 $(
"#shuttleMoveToSelectedBtn").data(
"kendoButton").enable(
true);
899 shuttleApplet.open();
900 shuttleApplet.center();
903 $(
"#prodFilter").val(
null);
904 $(
"#availableGrid").data(
"kendoGrid").dataSource.filter({});
905 setTimeout(
function() {$(
'#prodFilter').focus();}, 0);
918 function MoveData(availableGrid, selectedGrid, toSelectedGrid) {
919 var selectedData = selectedGrid.dataSource.data().slice(0);
920 var availableData = availableGrid.dataSource.data().slice(0);
923 var preRemovedData = [];
924 var removedData = [];
928 if (toSelectedGrid) {
929 addedData = selectedData;
930 preRemovedData = availableData;
931 addedGrid = selectedGrid;
932 removedGrid = availableGrid;
934 addedData = availableData;
935 preRemovedData = selectedData;
936 addedGrid = availableGrid;
937 removedGrid = selectedGrid;
940 var selectedRows = removedGrid.tbody.find(
"tr.k-state-selected");
941 var uidsToRemove = {};
943 for (var i = 0; i != selectedRows.length; i++) {
944 var dataItem = removedGrid.dataItem($(selectedRows[i]));
945 uidsToRemove[dataItem.value] =
true;
946 addedData.push(dataItem);
948 if (dataItem.productExists) {
949 if (!toSelectedGrid) {
950 $(
"#formInfoShuttleDiv ." + dataItem.value).
remove();
951 if ($(
"#formInfoShuttleDiv li:visible").length == 0) {
952 $(
"#formInfoShuttleDiv").hide();
955 $(
"#formInfoShuttleDiv ul").append(
"<li class='" + dataItem.value +
"'>" + dataItem.text +
"</li>");
956 $(
"#formInfoShuttleDiv").show();
960 for (var i = 0; i != preRemovedData.length; i++) {
961 var dataItem = preRemovedData[i];
962 if (typeof(uidsToRemove[dataItem.value]) ==
"undefined") {
963 removedData.push(dataItem);
966 addedGrid.dataSource.data(addedData);
967 removedGrid.dataSource.data(removedData);
976 function ShowProductAddWindow() {
977 var productAddWindow = $(
"#productAddWindow").data(
"kendoWindow");
978 if (productAddWindow ==
null) {
986 productAddWindow = $(
"<div id='productAddWindow'></div>").appendTo(
"body").kendoWindow({
988 title:
"Add Product",
992 if (window.activeWindows !=
null) {
993 window.activeWindows.pop();
999 if (window.activeWindows !=
null) {
1000 window.activeWindows.push(
this);
1003 SetupProductValidation(
"productEditForm",
"formValidateAddProduct");
1005 }).data(
"kendoWindow");
1008 var fullBindText = $(
"#addProductWindowTemplate").html();
1010 var
template = kendo.template($(
"#productConfigTemplate").html());
1011 var configuration = {};
1015 var defaultOptions = productObservable.get(
"defaultProductOptions").toJSON();
1017 productObservable.set(
"bindOptions", defaultOptions.bindOptions);
1018 productObservable.set(
"source", defaultOptions.source);
1020 fullBindText = fullBindText.replace(
"<!-- configDiv -->",
template(configuration));
1022 productAddWindow.content(fullBindText);
1023 kendo.bind(productAddWindow.element, productObservable);
1026 $(
"#productAddWindow .continueBtn").on(
"click",
function() {
1027 if ($.homecuValidator.validate()) {
1028 $(
"#productAddWindow").data(
"kendoWindow").close();
1030 var productItem = productObservable.get(
"source").toJSON();
1031 productItem.billHalfValue = productObservable.get(
"bindOptions.billHalfValue");
1032 productItem.productId = productObservable.get(
"bindOptions.productId");
1033 productItem.productOption = productObservable.get(
"bindOptions.productOption");
1034 productItem.unattachedJobValue = productObservable.get(
"bindOptions.unattachedJobValue");
1035 productItem.workflowValue = productObservable.get(
"bindOptions.workflowValue");
1036 productItem.workflowValue = productItem.workflowValue ==
"" ?
"none" : productItem.workflowValue;
1038 var parameters = {};
1039 parameters.productsSelected = kendo.stringify([productItem]);
1040 parameters.salesOrderId = salesOrderId;
1041 parameters.operation =
"createSalesOrderDetails";
1043 pendingTopGridHelperDs.read(parameters);
1049 $(
"#productAddWindow .cancelBtn").on(
"click",
function() {
1050 $(
"#productAddWindow").data(
"kendoWindow").close();
1058 var defaultOptions = productObservable.get(
"defaultProductOptions").toJSON();
1060 productObservable.set(
"bindOptions", defaultOptions.bindOptions);
1061 productObservable.set(
"source", defaultOptions.source);
1063 productAddWindow.open().center();
1076 function SetupPendingBottomGridDialogs() {
1083 $(
"#pendingGrid").on(
"click",
".pendingBottomGrid .k-grid-customDelete",
function() {
1084 var topGrid = $(
"#pendingGrid").data(
"kendoGrid");
1085 var bottomTr = $(
this).closest(
"tr");
1086 var topTr = $(bottomTr).closest(
".k-detail-row").prev();
1087 var bottomGrid = $(bottomTr).closest(
".pendingBottomGrid").data(
"kendoGrid");
1089 var bottomDataItem = bottomGrid.dataItem(bottomTr);
1090 var topDataItem = topGrid.dataItem(topTr);
1092 var topId = topDataItem.orderDetailId;
1093 var feature = topDataItem.feature;
1094 var detailDescription = topDataItem.detailDescription;
1095 var bottomId = bottomDataItem.featureDetailId;
1097 var deletePendingBottomDialog = $(
"#deletePendingBottomDialog").data(
"kendoDialog");
1098 if (deletePendingBottomDialog ==
null) {
1099 deletePendingBottomDialog = $(
"<div id='deletePendingBottomDialog'></div>").appendTo(
"body").kendoDialog({
1100 title:
"Confirm Deletion",
1103 {text:
"Delete", primary:
true, action:
function() {
1105 var bottomId = $(
"#deletePendingBottomDialog").data(
"bottomId");
1107 var parameters = {operation:
"removeBillingFeature", featureDetailId: bottomId};
1109 pendingBottomGridHelperDs.read(parameters);
1115 if (window.activeWindows !=
null) {
1116 window.activeWindows.push(
this);
1120 if (window.activeWindows !=
null) {
1121 window.activeWindows.pop();
1125 content:
"Are you sure that you want to delete this line item?" 1126 }).data(
"kendoDialog");
1129 $(
"#deletePendingBottomDialog").data({topId: topId, bottomId: bottomId, bottomGrid: bottomGrid, feature: feature, detailDescription: detailDescription});
1130 deletePendingBottomDialog.open().center();
1133 $(
"#pendingGrid").on(
"click",
".pendingBottomGrid .k-grid-edit",
function() {
1134 var tr = $(
this).closest(
"tr");
1135 var grid = $(tr).closest(
".pendingBottomGrid").data(
"kendoGrid");
1136 var dataItem = grid.dataItem(tr);
1137 var parameters = {operation:
"readSalesOrderDetailLineItem", featureDetailId: dataItem.featureDetailId};
1139 pendingBottomGridHelperDs.read(parameters);
1143 $(
"#pendingGrid").on(
"click",
".pendingBottomGrid .k-grid-add",
function() {
1144 var productId = $(
this).closest(
".pendingBottomGrid").attr(
"data-productId");
1145 var orderDetailId = $(
this).closest(
".pendingBottomGrid").attr(
"data-orderDetailId");
1146 ShowDetailAddWindow(productId, orderDetailId);
1150 $(
"#pendingGrid").on(
"click",
".pendingBottomGrid .k-grid-advanceWorkflow",
function() {
1151 var tr = $(
this).closest(
"tr");
1152 var grid = $(tr).closest(
".pendingBottomGrid").data(
"kendoGrid");
1153 var dataItem = grid.dataItem(tr);
1154 ShowPendingStartMonthWindow(dataItem.advanceWorkflowText, dataItem.featureDetailId, dataItem.startDate);
1158 $(
"#pendingGrid").on(
"click",
".pendingBottomGrid .k-grid-startMonthlies",
function() {
1159 var orderDetailId = $(
this).closest(
".pendingBottomGrid").attr(
"data-orderDetailId");
1160 ShowPendingStartMonthWindow($(
this).text().trim(),
null,
null, orderDetailId);
1178 function ShowPendingStartMonthWindow(buttonText, featureId, startDate, orderDetailId) {
1179 var pendingStartMonthWindow = $(
"#pendingStartMonthWindow").data(
"kendoWindow");
1180 var pendingStartMonthDDL = $(
"#pendingStartMonthDDL").data(
"kendoDropDownList");
1182 if (pendingStartMonthWindow ==
null) {
1190 pendingStartMonthWindow = $(
"<div id='pendingStartMonthWindow'></div>").appendTo(
"body").kendoWindow({
1192 title:
"Set Start Month",
1194 template: $(
"#changeStartMonthTemplate").html()
1198 close:
function(e) {
1199 if (window.activeWindows !=
null) {
1200 window.activeWindows.pop();
1204 if (window.activeWindows !=
null) {
1205 window.activeWindows.push(
this);
1208 }).data(
"kendoWindow");
1216 var pendingStartMonthDDL = $(
"#pendingStartMonthDDL").kendoDropDownList({
1218 data: lineItemObservable.get(
"ddls.startMonthOptions"),
1223 text: {type:
"string"},
1224 value: {type:
"string"}
1229 dataTextField:
"text",
1230 dataValueField:
"value" 1231 }).data(
"kendoDropDownList");
1233 $(
"#pendingStartMonthWindow .continueBtn").click(
function() {
1234 $(
"#pendingStartMonthWindow").data(
"kendoWindow").close();
1236 var parameters = {};
1237 parameters.childType = $(
"#pendingStartMonthWindow").data(
"childType");
1238 parameters.featureDetailId = $(
"#pendingStartMonthWindow").data(
"featureDetailId");
1239 parameters.operation =
"modifyStatus";
1240 parameters.startDate = $(
"#pendingStartMonthDDL").data(
"kendoDropDownList").value();
1241 parameters.orderDetailId = $(
"#pendingStartMonthWindow").data(
"orderDetailId");
1243 pendingBottomGridHelperDs.read(parameters);
1246 $(
"#pendingStartMonthWindow .cancelBtn").click(
function() {
1247 $(
"#pendingStartMonthWindow").data(
"kendoWindow").close();
1251 var openDialog =
true;
1252 switch(buttonText) {
1255 $(
"#pendingStartMonthWindow").data(
"childType",
"startPending");
1256 $(
"#pendingStartMonthWindow").data(
"featureDetailId", featureId);
1258 if (startDate ==
null) {
1259 pendingStartMonthDDL.select(0);
1261 pendingStartMonthDDL.value(startDate);
1265 case "Undo Trigger":
1266 var parameters = {};
1267 parameters.childType =
"undoPending";
1268 parameters.featureDetailId = featureId;
1269 parameters.operation =
"modifyStatus";
1271 pendingBottomGridHelperDs.read(parameters);
1274 case "Start Recurring":
1275 $(
"#pendingStartMonthWindow").data(
"childType",
"startRecurring");
1276 $(
"#pendingStartMonthWindow").data(
"orderDetailId", orderDetailId);
1277 pendingStartMonthDDL.select(0);
1279 case "Undo Recurring":
1280 var parameters = {};
1281 parameters.childType =
"undoRecurring";
1285 parameters.includeIds = kendo.stringify(includeExcludeMap[
"detail#" + orderDetailId].include);
1286 parameters.orderDetailId = orderDetailId;
1287 parameters.operation =
"modifyStatus";
1289 pendingBottomGridHelperDs.read(parameters);
1292 case "Change Start":
1293 $(
"#pendingStartMonthWindow").data(
"childType",
"changeStart");
1294 $(
"#pendingStartMonthWindow").data(
"featureDetailId", featureId);
1296 if (startDate ==
null) {
1297 pendingStartMonthDDL.select(0);
1299 pendingStartMonthDDL.value(startDate);
1305 pendingStartMonthWindow.open().center();
1321 function ShowDetailAddWindow(productId, orderDetailId) {
1322 var detailAddWindow = $(
"#detailAddWindow").data(
"kendoWindow");
1323 var featureDetailDDL = $(
"#featureDetailDDL").data(
"kendoDropDownList");
1324 if (detailAddWindow ==
null) {
1332 detailAddWindow = $(
"<div id='detailAddWindow'></div>").appendTo(
"body").kendoWindow({
1335 template: $(
"#detailAddWindowTemplate").html()
1337 title:
"Add Product Feature",
1340 close:
function(e) {
1341 if (window.activeWindows !=
null) {
1342 window.activeWindows.pop();
1348 if (window.activeWindows !=
null) {
1349 window.activeWindows.push(
this);
1352 }).data(
"kendoWindow");
1361 featureDetailDDL = $(
"#featureDetailDDL").kendoDropDownList({
1366 id:
"salesItemValue",
1368 salesItemText: {type:
"string"},
1369 salesItemValue: {type:
"number"},
1370 configuration: {type:
"odata"},
1371 lineItemData: {type:
"odata"},
1372 bindOptions: {type:
"odata"},
1373 ddls: {type:
"odata"},
1374 orderDetailId: {type:
"number"},
1379 dataTextField:
"salesItemText",
1380 dataValueField:
"salesItemValue",
1381 change:
function(e) {
1382 var fullLineItemContent = this.dataItem();
1383 fullLineItemContent.configuration.addOrUpdate =
"add";
1385 lineItemObservable.set(
"source", fullLineItemContent.lineItemData);
1386 lineItemObservable.set(
"bindOptions", fullLineItemContent.bindOptions);
1387 lineItemObservable.set(
"ddls.workflowDDL", fullLineItemContent.ddls.workflows);
1388 lineItemObservable.set(
"ddls.unattachedJobDDL", fullLineItemContent.ddls.workflowUnattachedJobs);
1390 var bindDiv = $(
"#detailAddWindow .configDiv");
1391 kendo.destroy($(bindDiv));
1394 var
template = kendo.template($(
"#detailConfigTemplate").html());
1395 $(bindDiv).html(
template(fullLineItemContent.configuration));
1396 kendo.bind($(bindDiv), lineItemObservable);
1397 SetupLineItemValidation(
"detailAddForm",
"formValidateAddDetail");
1399 }).data(
"kendoDropDownList");
1401 $(
"#detailAddWindow").on(
"click",
".continueBtn",
function() {
1402 if ($.homecuValidator.validate()) {
1403 $(
"#detailAddWindow").data(
"kendoWindow").close();
1405 var parameters = lineItemObservable.getSaveParameters();
1407 parameters.operation =
"createBillingFeature";
1410 var dataItem = $(
"#featureDetailDDL").data(
"kendoDropDownList").dataItem();
1413 parameters.orderDetailId = $(
"#detailAddWindow").data(
"orderDetailId");
1414 parameters.salesItemId = dataItem.salesItemValue;
1416 pendingBottomGridHelperDs.read(parameters);
1422 $(
"#detailAddWindow").on(
"click",
".cancelBtn",
function() {
1423 $(
"#detailAddWindow").data(
"kendoWindow").close();
1428 var fullLineItems = lineItemObservable.get(
"ddls.billingTemplateItems");
1429 var lineItems = $.grep(fullLineItems,
function(n,i) {
return n.productId == productId });
1431 featureDetailDDL.dataSource.data(lineItems);
1432 featureDetailDDL.select(0);
1434 var fullLineItemContent = featureDetailDDL.dataItem();
1435 fullLineItemContent.configuration.addOrUpdate =
"add";
1437 lineItemObservable.setupValues(fullLineItemContent.lineItemData, fullLineItemContent.bindOptions);
1439 lineItemObservable.set(
"ddls.workflowDDL", fullLineItemContent.ddls.workflows);
1440 lineItemObservable.set(
"ddls.unattachedJobDDL", fullLineItemContent.ddls.workflowUnattachedJobs);
1442 var bindDiv = $(
"#detailAddWindow .configDiv");
1443 kendo.destroy($(bindDiv));
1446 var
template = kendo.template($(
"#detailConfigTemplate").html());
1447 $(bindDiv).html(
template(fullLineItemContent.configuration));
1448 kendo.bind($(bindDiv), lineItemObservable);
1450 detailAddWindow.open().center();
1451 SetupLineItemValidation(
"detailAddForm",
"formValidateAddDetail");
1453 $(
"#detailAddWindow").data(
"orderDetailId", orderDetailId);
1467 function ShowDetailEditWindow(lineItemData, configuration, bindOptions, ddls) {
1468 var detailEditWindow = $(
"#detailEditWindow").data(
"kendoWindow");
1469 if (detailEditWindow ==
null) {
1477 detailEditWindow = $(
"<div id='detailEditWindow'></div>").appendTo(
"body").kendoWindow({
1479 title:
"Edit Product Feature",
1482 close:
function(e) {
1483 if (window.activeWindows !=
null) {
1484 window.activeWindows.pop();
1490 if (window.activeWindows !=
null) {
1491 window.activeWindows.push(
this);
1494 SetupLineItemValidation(
"detailEditForm",
"formValidateEditDetail");
1496 }).data(
"kendoWindow");
1498 kendo.destroy($(
"#detailEditWindow #detailEditForm"));
1501 lineItemObservable.setupValues(lineItemData, bindOptions);
1503 lineItemObservable.set(
"ddls.workflowDDL", ddls.workflows);
1504 lineItemObservable.set(
"ddls.unattachedJobDDL", ddls.workflowUnattachedJobs);
1507 var fullBindText = $(
"#detailEditWindowTemplate").html();
1509 var
template = kendo.template($(
"#detailConfigTemplate").html());
1511 configuration.addOrUpdate =
"update";
1512 fullBindText = fullBindText.replace(
"<!-- configDiv -->",
template(configuration));
1514 detailEditWindow.content(fullBindText);
1515 kendo.bind(detailEditWindow.element, lineItemObservable);
1516 detailEditWindow.open().center();
1519 $(
"#detailEditWindow .continueBtn").on(
"click",
function() {
1520 if ($.homecuValidator.validate()) {
1521 $(
"#detailEditWindow").data(
"kendoWindow").close();
1523 var parameters = lineItemObservable.getSaveParameters();
1525 parameters.operation =
"updatePendingBillingFeature";
1527 pendingBottomGridHelperDs.read(parameters);
1533 $(
"#detailEditWindow .cancelBtn").on(
"click",
function() {
1534 $(
"#detailEditWindow").data(
"kendoWindow").close();
1548 function ShowWorkflowStatusWindow(workflowStatuses) {
1549 if (workflowStatuses.length > 0) {
1550 var
template =
"<ul>";
1551 for (var i = 0; i != workflowStatuses.length; i++) {
1552 var item = workflowStatuses[i];
1554 template +=
"<li class='k-success-colored'>Workflow created for " + item.text +
"</li>";
1557 template +=
"<li class='k-error-colored'>No workflow created for " + item.text +
"</li>";
1560 template +=
"</ul>";
1561 var workflowCreatedNotification = $(
"#workflowCreatedNotification").data(
"kendoWindow");
1562 if (workflowCreatedNotification ==
null) {
1570 workflowCreatedNotification = $(
"<div id='workflowCreatedNotification'></div>").appendTo(
"body").kendoWindow({
1574 close:
function(e) {
1575 if (window.activeWindows !=
null) {
1576 window.activeWindows.pop();
1580 if (window.activeWindows !=
null) {
1581 window.activeWindows.push(
this);
1584 }).data(
"kendoWindow");
1586 $(
"#workflowCreatedNotification").closest(
".k-window").click(
function() {
1587 workflowCreatedNotification.close();
1591 workflowCreatedNotification.content(
template).open().center();
1607 var includeExcludeMap = {
1625 function SetupGrids() {
1635 var activeGrid = $(
"#activeGrid").kendoGrid({
1643 operation:
"readActiveDetails",
1644 salesOrderId: salesOrderId
1647 parameterMap:
function (data, type) {
1649 data.includeIds = kendo.stringify(includeExcludeMap.active.include);
1650 data.excludeIds = kendo.stringify(includeExcludeMap.active.exclude);
1656 id:
"featureDetailId",
1658 featureDetailId: {type:
"number"},
1659 productName: {type:
"string"},
1660 featureName: {type:
"string"},
1661 featureDescription: {type:
"string"},
1662 partialBillingStatus: {type:
"string"},
1663 frequencyDescr: {type:
"string"},
1664 showCompleteButton: {type:
"boolean"},
1665 completeButtonText: {type:
"string"},
1666 endDate: {type:
"string"}
1669 parse:
function (data) {
1670 if (data.status !==
"000") {
1671 $.homecuValidator.displayMessage(data.error, $.homecuValidator.settings.statusError );
1674 var indexOf = toHideWindow.indexOf(
"active");
1675 if (indexOf != -1) {
1676 toHideWindow.splice(indexOf, 1);
1677 if (toHideWindow.length == 0) {
1687 <?php
if ($isInEditList) { ?>
1690 {title:
"Product", width:
"15%"},
1691 {title:
"Feature", width:
"15%"},
1692 {title:
"Bill Half Date", width:
"15%"},
1693 {title:
"Status", width:
"15%"},
1694 {title:
"Description"},
1695 {title:
"Frequency"}
1698 rowTemplate: $(
"#activeRowTemplate").html()
1699 }).data(
"kendoGrid");
1709 var pendingGrid = $(
"#pendingGrid").kendoGrid({
1717 operation:
"readPendingDetailsTop",
1718 salesOrderId: salesOrderId
1721 parameterMap:
function (data, type) {
1727 id:
"orderDetailId",
1729 orderDetailId: {type:
"number"},
1730 lastModifiedBy: {type:
"string"},
1731 lastModifiedDate: {type:
"date"},
1732 numDetails: {type:
"number"},
1733 opened: {type:
"boolean"}
1736 parse:
function (data) {
1737 if (data.status !==
"000") {
1738 $.homecuValidator.displayMessage(data.error, $.homecuValidator.settings.statusError );
1741 var indexOf = toHideWindow.indexOf(
"pending");
1742 if (indexOf != -1) {
1743 toHideWindow.splice(indexOf, 1);
1744 if (toHideWindow.length == 0) {
1754 <?php
if ($isInEditList) { ?> {width:
"5%"}, <?php } ?>
1756 {title:
"Last Modified"},
1757 {title:
"Last Modified By"}
1759 <?php
if ($isInEditList) { ?>
1760 toolbar: $(
"#pendingToolbarTemplate").html(),
1762 detailTemplate: $(
"#detailTemplate").html(),
1763 detailInit: SetupDetailGrid,
1764 detailExpand:
function(e) {
1765 e.detailRow.find(
".pendingBottomGrid").data(
"kendoGrid").dataSource.read();
1767 rowTemplate: $(
"#topRowTemplate").html(),
1768 dataBound:
function(e) {
1769 $(
"#pendingGrid .k-master-row.opened").each(
function() {
1770 $(
"#pendingGrid").data(
"kendoGrid").expandRow($(
this));
1773 }).data(
"kendoGrid");
1783 var completedGrid = $(
"#completedGrid").kendoGrid({
1791 operation:
"readCompletedDetails",
1792 salesOrderId: salesOrderId
1795 parameterMap:
function (data, type) {
1797 data.includeIds = kendo.stringify(includeExcludeMap.completed.include);
1798 data.excludeIds = kendo.stringify(includeExcludeMap.completed.exclude);
1804 id:
"featureDetailId",
1806 featureDetailId: {type:
"number"},
1807 productName: {type:
"string"},
1808 featureName: {type:
"string"},
1809 featureDescription: {type:
"string"},
1810 partialBillingStatus: {type:
"string"},
1811 frequencyDescr: {type:
"string"},
1812 showAdvanceWorkflow: {type:
"boolean"},
1813 advanceWorkflowText: {type:
"string"}
1816 parse:
function (data) {
1817 if (data.status !==
"000") {
1818 $.homecuValidator.displayMessage(data.error, $.homecuValidator.settings.statusError );
1821 var indexOf = toHideWindow.indexOf(
"completed");
1822 if (indexOf != -1) {
1823 toHideWindow.splice(indexOf, 1);
1824 if (toHideWindow.length == 0) {
1834 <?php
if ($isInEditList) { ?>
1837 {title:
"Product", width:
"15%"},
1838 {title:
"Feature", width:
"15%"},
1839 {title:
"Bill Half Date", width:
"15%"},
1840 {title:
"Status", width:
"15%"},
1841 {title:
"Description"},
1842 {title:
"Frequency"}
1844 toolbar:
"Completed:",
1845 rowTemplate: $(
"#completedRowTemplate").html()
1846 }).data(
"kendoGrid");
1858 function SetupDetailGrid(e) {
1860 var key =
"detail#" + e.data.orderDetailId;
1861 includeExcludeMap[key] = {};
1862 includeExcludeMap[key].include = [];
1863 includeExcludeMap[key].exclude = [];
1873 var detailGrid = e.detailRow.find(
".pendingBottomGrid").kendoGrid({
1881 operation:
"readPendingDetailsBottom",
1882 orderDetailId: e.data.orderDetailId
1885 parameterMap:
function(data, type) {
1887 data.includeIds = kendo.stringify(includeExcludeMap[key].include);
1888 data.excludeIds = kendo.stringify(includeExcludeMap[key].exclude);
1894 id:
"featureDetailId",
1896 featureDetailId: {type:
"number"},
1897 actualDescription: {type:
"string"},
1898 textDescription: {type:
"string"},
1899 billingStatusLabel: {type:
"string"},
1900 partialBillingStatus: {type:
"string"},
1901 frequencyDescr: {type:
"string"},
1902 deletable: {type:
"boolean"},
1903 showAdvanceWorkflow: {type:
"boolean"},
1904 advanceWorkflowText: {type:
"string"},
1905 startDate: {type:
"string"}
1908 parse:
function (data) {
1909 if (data.status !==
"000") {
1910 $.homecuValidator.displayMessage(data.error, $.homecuValidator.settings.statusError );
1913 var indexOf = toHideWindow.indexOf(key);
1914 if (indexOf != -1) {
1915 toHideWindow.splice(indexOf, 1);
1916 if (toHideWindow.length == 0) {
1927 <?php
if ($isInEditList) { ?>
1931 {title:
"Bill Half Date", width:
"15%"},
1932 {title:
"Status", width:
"15%"},
1933 {title:
"Title", width:
"20%"},
1934 {title:
"Description"},
1935 {title:
"Frequency"}
1937 <?php
if ($isInEditList) { ?>
1938 toolbar: $(
"#detailToolbarTemplate").html(),
1940 rowTemplate: $(
"#detailRowTemplate").html()
1941 }).data(
"kendoGrid");
1948 var activeGridHelperDs =
null;
1949 var completedGridHelperDs =
null;
1950 var pendingTopGridHelperDs =
null;
1951 var pendingBottomGridHelperDs =
null;
1952 var warningDs =
null;
1962 function SetupDataSources() {
1969 var setupDs =
new kendo.data.DataSource({
1976 operation:
"readSalesOrderDetailInit",
1977 salesOrderId: salesOrderId
1980 parameterMap:
function (data, type) {
1985 parse:
function (data) {
1986 if (data.status !==
"000") {
1987 $.homecuValidator.displayMessage(data.error, $.homecuValidator.settings.statusError );
1990 var indexOf = toHideWindow.indexOf(
"setup");
1991 if (indexOf != -1) {
1992 toHideWindow.splice(indexOf, 1);
1993 if (toHideWindow.length == 0) {
1998 $(
"#cuLabel").text(data.cuName +
" (" + data.cu +
")");
1999 $(
"#cu").text(data.cu);
2000 $(
"#cuName").text(data.cuName);
2002 var pendingBottomDDLData = {};
2003 pendingBottomDDLData.setupBillingDDL = $.grep(data.ddls.setupBillingOptions, function (n,i) {
return n.value !=
"nosetup"; });
2004 pendingBottomDDLData.monthDDL = data.ddls.monthDDL;
2005 pendingBottomDDLData.frequencyDDL = data.ddls.frequencyDDL;
2006 pendingBottomDDLData.billingTemplateItems = data.ddls.billingTemplateItems;
2007 pendingBottomDDLData.startMonthOptions = data.ddls.startMonthOptions;
2009 lineItemObservable.set(
"ddls", pendingBottomDDLData);
2013 var pendingTopDDLData = {};
2014 pendingTopDDLData.setupBillingDDL = data.ddls.setupBillingOptions;
2015 pendingTopDDLData.productItems = data.ddls.productItems;
2016 pendingTopDDLData.productWorkflowOptions = data.ddls.productWorkflowOptions;
2017 pendingTopDDLData.unattachedJobs = data.ddls.unattachedJobs;
2018 pendingTopDDLData.productOptions = data.ddls.productOptions;
2020 productObservable.set(
"ddls", pendingTopDDLData);
2021 productObservable.set(
"defaultProductOptions", data.defaultProductOptions);
2037 warningDs =
new kendo.data.DataSource({
2044 operation:
"readSalesOrderDetailWarnings",
2045 salesOrderId: salesOrderId
2048 parameterMap:
function (data, type) {
2053 parse:
function (data) {
2054 if (data.status !==
"000") {
2055 $.homecuValidator.displayMessage(data.error, $.homecuValidator.settings.statusError );
2058 var indexOf = toHideWindow.indexOf(
"warnings");
2059 if (indexOf != -1) {
2060 toHideWindow.splice(indexOf, 1);
2061 if (toHideWindow.length == 0) {
2066 if (data.warnings.length > 0) {
2067 $(
"#warningDiv").show();
2068 $(
"#warningDiv").html(data.warnings.join(
"<br>") +
"</div>");
2070 $(
"#warningDiv").hide();
2087 activeGridHelperDs =
new kendo.data.DataSource({
2097 parameterMap:
function (data, type) {
2103 parse:
function (data) {
2104 if (data.status !==
"000") {
2106 $.homecuValidator.displayMessage(data.error, $.homecuValidator.settings.statusError );
2110 toHideWindow = [
"active",
"warnings"];
2111 $(
"#activeGrid").data(
"kendoGrid").dataSource.read();
2114 case "advanceStatus":
2115 toHideWindow = [
"active"];
2117 includeExcludeMap.active.include = includeExcludeMap.active.include.concat(data.ids);
2118 includeExcludeMap.completed.exclude = includeExcludeMap.completed.exclude.concat(data.ids);
2119 $(
"#activeGrid").data(
"kendoGrid").dataSource.read();
2121 case "revertStatus":
2122 toHideWindow = [
"active"];
2124 var activeInclude = $.grep(includeExcludeMap.active.include,
function(n,i) { return data.ids.indexOf(n) === -1; });
2125 var completedExclude = $.grep(includeExcludeMap.completed.exclude,
function(n,i) { return data.ids.indexOf(n) === -1; });
2127 includeExcludeMap.active.include = activeInclude;
2128 includeExcludeMap.completed.exclude = completedExclude;
2129 $(
"#activeGrid").data(
"kendoGrid").dataSource.read();
2136 ShowActiveChangePriceWindow(data.lineItemData, data.configuration, data.bindOptions, data.ddls);
2140 toHideWindow = [
"active",
"warnings"];
2141 $(
"#activeGrid").data(
"kendoGrid").dataSource.read();
2158 pendingBottomGridHelperDs =
new kendo.data.DataSource({
2168 parameterMap:
function (data, type) {
2174 parse:
function (data) {
2176 if (data.status !==
"000") {
2178 $.homecuValidator.displayMessage(data.error, $.homecuValidator.settings.statusError );
2181 var key =
"detail#" + data.orderDetailId;
2185 if (data.removeContractDetail) {
2186 toHideWindow = [
"pending"];
2187 $(
"#pendingGrid").data(
"kendoGrid").dataSource.read();
2189 toHideWindow = [key];
2190 $(
"#pendingGrid .pendingBottomGrid[data-orderDetailId='" + data.orderDetailId +
"']:visible").data(
"kendoGrid").dataSource.read();
2199 ShowDetailEditWindow(data.lineItemData, data.configuration, data.bindOptions, data.ddls);
2203 toHideWindow = [key,
"warnings"];
2204 $(
"#pendingGrid .pendingBottomGrid[data-orderDetailId='" + data.orderDetailId +
"']:visible").data(
"kendoGrid").dataSource.read();
2208 var masterRow = $(
"#pendingGrid .k-master-row[data-orderDetailId='" + data.orderDetailId +
"']:visible");
2209 $(masterRow).find(
"td:eq(3)").text(kendo.toString(
new Date(),
"d"));
2210 $(masterRow).find(
"td:eq(4)").text(
"<?php echo $Hu; ?>");
2212 ShowWorkflowStatusWindow(data.workflowStatuses);
2214 case "advanceStatus":
2215 toHideWindow = [key];
2217 includeExcludeMap[key].include = includeExcludeMap[key].include.concat(data.ids);
2218 includeExcludeMap.active.exclude = includeExcludeMap.active.exclude.concat(data.ids);
2219 $(
"#pendingGrid .pendingBottomGrid[data-orderDetailId='" + data.orderDetailId +
"']:visible").data(
"kendoGrid").dataSource.read();
2221 if (data.isRecurringBtn) {
2222 $(
"#pendingGrid .pendingBottomGrid[data-orderDetailId='" + data.orderDetailId +
"']:visible .k-grid-startMonthlies").text(
"Undo Recurring");
2225 case "revertStatus":
2226 toHideWindow = [key];
2228 var keyInclude = $.grep(includeExcludeMap[key].include,
function(n,i) {
return data.ids.indexOf(n) === -1; });
2229 var activeExclude = $.grep(includeExcludeMap.active.exclude,
function(n,i) { return data.ids.indexOf(n) === -1; });
2231 includeExcludeMap[key].include = keyInclude;
2232 includeExcludeMap.active.exclude = activeExclude;
2233 $(
"#pendingGrid .pendingBottomGrid[data-orderDetailId='" + data.orderDetailId +
"']:visible").data(
"kendoGrid").dataSource.read();
2235 if (data.isRecurringBtn) {
2236 $(
"#pendingGrid .pendingBottomGrid[data-orderDetailId='" + data.orderDetailId +
"']:visible .k-grid-startMonthlies").text(
"Start Recurring");
2240 toHideWindow = [key];
2242 includeExcludeMap[key].include = includeExcludeMap[key].include.concat(data.ids);
2243 includeExcludeMap.active.exclude = includeExcludeMap.active.exclude.concat(data.ids);
2244 $(
"#pendingGrid .pendingBottomGrid[data-orderDetailId='" + data.orderDetailId +
"']:visible").data(
"kendoGrid").dataSource.read();
2260 pendingTopGridHelperDs =
new kendo.data.DataSource({
2270 parameterMap:
function (data, type) {
2276 parse:
function (data) {
2277 if (data.status !==
"000") {
2279 $.homecuValidator.displayMessage(data.error, $.homecuValidator.settings.statusError );
2283 toHideWindow = [
"pending",
"warnings"];
2284 $(
"#pendingGrid").data(
"kendoGrid").dataSource.read();
2288 toHideWindow = [
"pending",
"warnings"];
2289 $(
"#pendingGrid").data(
"kendoGrid").dataSource.read({orderDetailIds: kendo.stringify(data.orderDetailIds)});
2291 ShowWorkflowStatusWindow(data.workflowStatuses);
2309 completedGridHelperDs =
new kendo.data.DataSource({
2319 parameterMap:
function (data, type) {
2325 parse:
function (data) {
2326 if (data.status !==
"000") {
2328 $.homecuValidator.displayMessage(data.error, $.homecuValidator.settings.statusError );
2331 case "advanceStatus":
2332 toHideWindow = [
"completed"];
2334 includeExcludeMap.completed.include = includeExcludeMap.completed.include.concat(data.ids);
2335 includeExcludeMap.active.exclude = includeExcludeMap.active.exclude.concat(data.ids);
2336 $(
"#completedGrid").data(
"kendoGrid").dataSource.read();
2338 case "revertStatus":
2339 toHideWindow = [
"completed"];
2341 var completedInclude = $.grep(includeExcludeMap.completed.include,
function(n,i) { return data.ids.indexOf(n) === -1; });
2342 var activeExclude = $.grep(includeExcludeMap.active.exclude,
function(n,i) { return data.ids.indexOf(n) === -1; });
2344 includeExcludeMap.completed.include = completedInclude;
2345 includeExcludeMap.active.exclude = activeExclude;
2346 $(
"#completedGrid").data(
"kendoGrid").dataSource.read();
2362 var toHideWindow = [
"setup",
"completed",
"active",
"pending",
"warnings"];
2363 var lineItemObservable =
null;
2364 var productObservable =
null;
2372 function SetupObservables() {
2386 lineItemObservable =
new kendo.observable({
2391 setupValues:
function(lineItemData, bindOptions) {
2394 lineItemData.partiallyBilledDate = kendo.parseDate(lineItemData.partiallyBilledDate);
2397 lineItemData.qty2 = lineItemData.qty2 == -1 ? null : lineItemData.qty2;
2399 this.
set(
"source", lineItemData);
2400 this.
set(
"bindOptions", bindOptions);
2402 getSaveParameters:
function() {
2403 var json = lineItemObservable.toJSON();
2404 var parameters = {};
2405 for (var key in json.source) {
2406 parameters[key] = json.source[key];
2410 var showWorkflowDiv = $(
"#detailAddWindow .workflowDiv").length > 0;
2411 parameters.workflowValue = !showWorkflowDiv ?
"none" : json.bindOptions.workflowValue;
2412 parameters.frequencyValue = json.bindOptions.frequencyValue;
2413 parameters.billsOn1Value = json.bindOptions.billsOn1Value;
2414 parameters.billsOn2Value = json.bindOptions.billsOn2Value;
2415 parameters.billHalfValue = json.bindOptions.billHalfValue;
2418 parameters.partiallyBilledDate = kendo.toString(parameters.partiallyBilledDate,
"yyyy-MM-dd");
2421 parameters.qty2 = json.bindOptions.qtyRangeVisible && json.source.qty2 ==
null ? -1 : json.source.qty2;
2425 showOverride:
function(e) {
2426 this.
set(
"bindOptions.isOverrideCheckboxShown",
false);
2427 this.
set(
"bindOptions.isOverrideDescrShown",
true);
2429 billHalfChange:
function(e) {
2430 switch(this.bindOptions.billHalfValue) {
2432 this.
set(
"bindOptions.billHalfCheckReceivedRowVisible",
true);
2433 this.
set(
"bindOptions.billHalfDateRowVisible",
false);
2434 this.
set(
"bindOptions.billHalfAmountRowVisible",
true);
2435 this.
set(
"bindOptions.billHalfDateLabel",
"Check Received:");
2436 this.
set(
"source.partiallyBilledDate",
new Date());
2437 this.
set(
"source.partiallyBilledAmount", this.source.fixed / 2.0);
2440 this.
set(
"bindOptions.billHalfCheckReceivedRowVisible",
false);
2441 this.
set(
"bindOptions.billHalfDateRowVisible",
true);
2442 this.
set(
"bindOptions.billHalfAmountRowVisible",
false);
2443 this.
set(
"bindOptions.billHalfDateLabel",
"Date to Bill Half:");
2446 var nextMonth =
new Date();
2447 nextMonth.setDate(1);
2448 nextMonth.setMonth(nextMonth.getMonth() + 1);
2450 this.
set(
"source.partiallyBilledDate", nextMonth);
2454 this.
set(
"bindOptions.billHalfCheckReceivedRowVisible",
false);
2455 this.
set(
"bindOptions.billHalfDateRowVisible",
true);
2456 this.
set(
"bindOptions.billHalfAmountRowVisible",
false);
2457 this.
set(
"bindOptions.billHalfDateLabel",
"Date to Bill:");
2460 var nextMonth =
new Date();
2461 nextMonth.setDate(1);
2462 nextMonth.setMonth(nextMonth.getMonth() + 1);
2464 this.
set(
"source.partiallyBilledDate", nextMonth);
2468 this.
set(
"bindOptions.billHalfCheckReceivedRowVisible",
false);
2469 this.
set(
"bindOptions.billHalfDateRowVisible",
false);
2470 this.
set(
"bindOptions.billHalfAmountRowVisible",
false);
2474 workflowChange:
function(e) {
2475 switch(this.bindOptions.workflowValue) {
2477 this.
set(
"bindOptions.associateToJobRowVisible",
true);
2478 this.
set(
"bindOptions.immediateBillRowVisible",
false);
2479 this.
set(
"bindOptions.billHalfDDLEnabled",
true);
2482 this.
set(
"bindOptions.associateToJobRowVisible",
false);
2483 this.
set(
"bindOptions.immediateBillRowVisible",
true);
2486 var date =
new Date();
2487 date.setMonth(date.getMonth() + 1);
2490 this.
set(
"source.partiallyBilledDate", date);
2492 this.
set(
"bindOptions.billHalfDDLEnabled",
false);
2493 this.
set(
"bindOptions.billHalfValue",
"full");
2494 this.
set(
"bindOptions.billHalfDateRowVisible",
false);
2495 this.
set(
"bindOptions.billHalfCheckReceivedRowVisible",
false);
2496 this.
set(
"bindOptions.billHalfAmountRowVisible",
false);
2500 this.
set(
"bindOptions.associateToJobRowVisible",
false);
2501 this.
set(
"bindOptions.immediateBillRowVisible",
false);
2502 this.
set(
"bindOptions.billHalfDDLEnabled",
true);
2506 frequencyChange:
function(e) {
2507 var
id = $(e.sender.element).attr(
"id").trim();
2508 id =
id.split(
"_")[0];
2512 switch(this.bindOptions.frequencyValue) {
2514 this.
set(
"bindOptions.billsOn1Value", 0);
2515 this.
set(
"bindOptions.billsOn1RowVisible",
true);
2516 this.
set(
"bindOptions.billsOn2RowVisible",
false);
2519 this.
set(
"bindOptions.billsOn1Value", 0);
2520 this.
set(
"bindOptions.billsOn2Value", 6);
2521 this.
set(
"bindOptions.billsOn1RowVisible",
true);
2522 this.
set(
"bindOptions.billsOn2RowVisible",
true);
2526 this.
set(
"bindOptions.billsOn1RowVisible",
false);
2527 this.
set(
"bindOptions.billsOn2RowVisible",
false);
2532 var val1 = e.sender.value();
2533 var val2 = (val1 + 6) % 12;
2534 this.
set(
"bindOptions.billsOn2Value", val2);
2537 var val2 = e.sender.value();
2538 var val1 = (24 + val2 - 6) % 12;
2539 this.
set(
"bindOptions.billsOn1Value", val1);
2558 productObservable =
new kendo.observable({
2563 billHalfChange:
function(e) {
2564 switch(this.bindOptions.billHalfValue) {
2566 this.
set(
"bindOptions.billHalfCheckReceivedRowVisible",
true);
2567 this.
set(
"bindOptions.billHalfDateRowVisible",
false);
2568 this.
set(
"bindOptions.billHalfDateLabel",
"Check Received:");
2569 this.
set(
"source.partiallyBilledDate",
new Date());
2570 this.toggleWorkflowDivs(
true,
false);
2573 this.
set(
"bindOptions.billHalfCheckReceivedRowVisible",
false);
2574 this.
set(
"bindOptions.billHalfDateRowVisible",
true);
2575 this.
set(
"bindOptions.billHalfDateLabel",
"Date to Bill Half:");
2578 var nextMonth =
new Date();
2579 nextMonth.setDate(1);
2580 nextMonth.setMonth(nextMonth.getMonth() + 1);
2582 this.
set(
"source.partiallyBilledDate", nextMonth);
2583 this.toggleWorkflowDivs(
true,
false);
2586 this.
set(
"bindOptions.billHalfCheckReceivedRowVisible",
false);
2587 this.
set(
"bindOptions.billHalfDateRowVisible",
true);
2588 this.
set(
"bindOptions.billHalfDateLabel",
"Date to Bill:");
2591 var nextMonth =
new Date();
2592 nextMonth.setDate(1);
2593 nextMonth.setMonth(nextMonth.getMonth() + 1);
2595 this.
set(
"source.partiallyBilledDate", nextMonth);
2596 this.toggleWorkflowDivs(
true,
false);
2599 this.
set(
"bindOptions.billHalfCheckReceivedRowVisible",
false);
2600 this.
set(
"bindOptions.billHalfDateRowVisible",
false);
2601 this.toggleWorkflowDivs(
false,
false);
2605 this.
set(
"bindOptions.billHalfCheckReceivedRowVisible",
false);
2606 this.
set(
"bindOptions.billHalfDateRowVisible",
false);
2607 this.toggleWorkflowDivs(
true,
false);
2611 toggleWorkflowDivs(showThem, init) {
2617 if (this.
get(
"bindOptions.hasSetup") !==
true) {
2619 }
else if (showThem && this.
get(
"bindOptions.workflowRowVisible") !==
true) {
2621 }
else if (!showThem && this.
get(
"bindOptions.workflowRowVisible") ===
true) {
2626 if (toggle ===
true) {
2627 this.
set(
"bindOptions.workflowValue",
"create");
2628 this.
set(
"bindOptions.workflowRowVisible",
true);
2629 this.
set(
"bindOptions.associateToJobRowVisible",
false);
2630 this.
set(
"bindOptions.immediateBillRowVisible",
false);
2631 }
else if (toggle ===
false) {
2632 this.
set(
"bindOptions.workflowValue",
"none");
2633 this.
set(
"bindOptions.workflowRowVisible",
false);
2634 this.
set(
"bindOptions.associateToJobRowVisible",
false);
2635 this.
set(
"bindOptions.immediateBillRowVisible",
false);
2638 toggleBillHalfDivs(showThem, init) {
2644 if (this.
get(
"bindOptions.hasSetup") !==
true) {
2646 }
else if (showThem && this.
get(
"bindOptions.billHalfRowVisible") !==
true) {
2648 }
else if (!showThem && this.
get(
"bindOptions.billHalfRowVisible") ===
true) {
2653 if (toggle ===
true) {
2654 this.
set(
"bindOptions.billHalfRowVisible",
true);
2655 this.
set(
"bindOptions.billHalfValue",
"full");
2656 this.
set(
"bindOptions.billHalfCheckReceivedRowVisible",
false);
2657 this.
set(
"bindOptions.billHalfDateRowVisible",
false);
2658 this.
set(
"bindOptions.billHalfDDLEnabled",
true);
2659 }
else if (toggle ===
false) {
2660 this.
set(
"bindOptions.billHalfRowVisible",
false);
2661 this.
set(
"bindOptions.billHalfValue",
"full");
2662 this.
set(
"bindOptions.billHalfCheckReceivedRowVisible",
false);
2663 this.
set(
"bindOptions.billHalfDateRowVisible",
false);
2666 toggleProductExistsDiv(showIt) {
2668 if (this.
get(
"bindOptions.productWarningVisible") !==
true) {
2669 this.
set(
"bindOptions.productWarningVisible",
true);
2670 this.toggleWorkflowDivs(
false,
true);
2672 if (this.
get(
"bindOptions.billHalfRowVisible") ===
true) {
2673 this.
set(
"bindOptions.billHalfValue",
"nosetup");
2674 this.
set(
"bindOptions.billHalfCheckReceivedRowVisible",
false);
2675 this.
set(
"bindOptions.billHalfDateRowVisible",
false);
2676 this.
set(
"bindOptions.billHalfDDLEnabled",
true);
2681 if (this.
get(
"bindOptions.productWarningVisible") ===
true) {
2682 this.
set(
"bindOptions.productWarningVisible",
false);
2684 this.toggleWorkflowDivs(
true,
true);
2685 this.toggleBillHalfDivs(
true,
true);
2686 this.
set(
"bindOptions.billHalfValue",
"full");
2687 this.
set(
"bindOptions.billHalfCheckReceivedRowVisible",
false);
2688 this.
set(
"bindOptions.billHalfDateRowVisible",
false);
2692 workflowChange:
function(e) {
2693 switch(this.bindOptions.workflowValue) {
2695 this.
set(
"bindOptions.associateToJobRowVisible",
true);
2696 this.
set(
"bindOptions.immediateBillRowVisible",
false);
2697 this.
set(
"bindOptions.billHalfDDLEnabled",
true);
2700 this.
set(
"bindOptions.associateToJobRowVisible",
false);
2701 this.
set(
"bindOptions.immediateBillRowVisible",
true);
2704 var date =
new Date();
2705 date.setMonth(date.getMonth() + 1);
2708 this.
set(
"source.partiallyBilledDate", date);
2710 this.
set(
"bindOptions.billHalfDDLEnabled",
false);
2711 this.
set(
"bindOptions.billHalfValue",
"full");
2712 this.
set(
"bindOptions.billHalfDateRowVisible",
false);
2713 this.
set(
"bindOptions.billHalfCheckReceivedRowVisible",
false);
2714 this.
set(
"bindOptions.billHalfAmountRowVisible",
false);
2718 this.
set(
"bindOptions.associateToJobRowVisible",
false);
2719 this.
set(
"bindOptions.immediateBillRowVisible",
false);
2720 this.
set(
"bindOptions.billHalfDDLEnabled",
true);
2724 productChange:
function(e) {
2725 var dataItem = e.sender.dataItem();
2727 if (dataItem.hasOptions !==
true) {
2728 if (dataItem.hasSetup ===
true) {
2729 this.
set(
"bindOptions.hasSetup",
true);
2730 this.toggleBillHalfDivs(
true,
true);
2731 this.toggleWorkflowDivs(
true,
true);
2733 this.
set(
"bindOptions.hasSetup",
false);
2734 this.toggleBillHalfDivs(
false,
true);
2735 this.toggleWorkflowDivs(
false,
true);
2739 if (dataItem.useDNID ===
true) {
2740 this.
set(
"bindOptions.dnidRowVisible",
true);
2742 this.
set(
"bindOptions.dnidRowVisible",
false);
2745 if (dataItem.hasOptions ===
true) {
2746 this.
set(
"bindOptions.configRowVisible",
true);
2748 this.
set(
"bindOptions.configRowVisible",
false);
2751 this.toggleProductExistsDiv(dataItem.productExists);
2753 configChange:
function(e) {
2754 var dataItem = e.sender.dataItem();
2755 if (dataItem !=
null) {
2756 if (dataItem.hasSetup ===
true) {
2757 this.
set(
"bindOptions.hasSetup",
true);
2758 this.toggleBillHalfDivs(
true);
2759 this.toggleWorkflowDivs(
true);
2761 this.
set(
"bindOptions.hasSetup",
false);
2762 this.toggleBillHalfDivs(
false);
2763 this.toggleWorkflowDivs(
false);
2774 var activeWindows = [];
2775 $(document).ready(
function () {
2778 kendo.data.binders.widget.cascade = kendo.data.Binder.extend({
2779 init:
function (widget, bindings, options) {
2780 kendo.data.Binder.fn.init.call(
this, widget.element[0], bindings, options);
2782 this.widget = widget;
2784 this._cascade = $.proxy(this.cascade,
this);
2785 this.widget.bind(
"cascade", this._cascade);
2787 cascade:
function () {
2788 if (this.widget.options.cascadeFrom) {
2789 this.widget.trigger(
"change");
2792 refresh:
function () { },
2793 destroy:
function () {
2794 this.widget.unbind(
"cascade", this._cascade);
2803 SetupActiveGridDialogs();
2804 SetupCompletedGridDialogs();
2805 SetupPendingTopGridDialogs();
2806 SetupPendingBottomGridDialogs();
2808 $(
"body").on(
"click",
".k-overlay",
function() {
if (activeWindows.length > 0) activeWindows[activeWindows.length - 1].close();
return false; });
2823 <script type=
"k-kendo-template" id=
"topRowTemplate">
2824 <tr
class=
"k-master-row # if (opened) { # opened # } #" data-uid=
"#= uid #" data-orderDetailId=
"#: orderDetailId #">
2825 <td
class=
"k-hierarchy-cell" aria-expanded=
"false">
2826 # if (numDetails > 0) { # 2827 <a
class=
"k-icon k-i-expand" href=
"\\#" aria-label=
"Expand"></a>
2830 <?php
if ($isInEditList) { ?>
2832 # if (numDetails == 0) { # 2833 <a
class=
"k-button k-grid-customDelete" href=
"\\#">
2834 <span
class=
"fa fa-2x fa-trash"></span>
2839 <td>#: detailDescription #</td>
2840 <td>#
if (lastModifiedDate ==
null) { # # }
else { # #: kendo.toString(lastModifiedDate,
'd') # # } #</td>
2841 <td>#: lastModifiedBy #</td>
2851 <script type=
"k-kendo-template" id=
"detailTemplate">
2852 <div
class=
"detailGrid pendingBottomGrid" data-orderDetailId=
"#: orderDetailId #" data-productId=
"#: productId #"></div>
2861 <script type=
"k-kendo-template" id=
"addProductWindowTemplate">
2862 <div
class=
"k-edit-form-container">
2863 <div
id=
"formValidateAddProduct"></div>
2864 <form
id=
"productEditForm">
2865 <div
class=
"container_12">
2870 <div
class=
"k-edit-buttons k-state-default">
2871 <a
class=
"k-button k-button-icontext k-primary continueBtn" href=
"#">
2872 <span
class=
"k-icon k-update"></span>Okay
2874 <a
class=
"k-button k-button-icontext cancelBtn" href=
"#">
2875 <span
class=
"k-icon k-cancel"></span>Cancel
2888 <script type=
"k-kendo-template" id=
"productConfigTemplate">
2889 <div
class=
"grid_12" data-bind=
"visible: bindOptions.productWarningVisible">
2890 <div
id=
"formInfoPopupDiv" class=
"homecu-formStatus k-block k-info-colored">
2891 <b>Product already exists.</b>
2892 <br> A save here will append configured line items to the current product.
2896 <div
class=
"grid_12">
2897 <div
class=
"grid_4 alpha">
2898 <label>New Item:</label>
2900 <div
class=
"grid_7">
2901 <div
id=
"products_top" data-role=
"dropdownlist" data-text-field=
"text" data-value-field=
"value" 2902 data-bind=
"source: ddls.productItems, value: bindOptions.productId, events: { change: productChange }"></div>
2904 <div
class=
"grid_1 omega">
2905 <span
class=
'k-invalid-msg'></span>
2908 <div
class=
"grid_12" data-bind=
"visible: bindOptions.configRowVisible">
2909 <div
class=
"grid_4 alpha">
2910 <label>Configuration:</label>
2912 <div
class=
"grid_7">
2913 <div
id=
"productOptions_top" data-role=
"dropdownlist" data-text-field=
"text" data-value-field=
"value" 2914 data-cascade-from=
"products_top" data-cascade-from-field=
"product" 2915 data-bind=
"source: ddls.productOptions, value: bindOptions.productOption, cascade: bindOptions.productOption, 2916 events: { change: configChange }"></div>
2919 <div
class=
"grid_12" data-bind=
"visible: bindOptions.billHalfRowVisible">
2920 <div
class=
"grid_4 alpha">Setup Options:</div>
2921 <div
class=
"grid_7">
2922 <div
id=
"billHalfs_top" data-role=
"dropdownlist" data-text-field=
"text" data-value-field=
"value" 2923 data-bind=
"source: ddls.setupBillingDDL, value: bindOptions.billHalfValue, 2924 events: { change: billHalfChange }, 2925 enabled: bindOptions.billHalfDDLEnabled"></div>
2927 <div
class=
"grid_1 omega">
2931 <div
class=
"grid_12" data-bind=
"visible: bindOptions.billHalfCheckReceivedRowVisible">
2932 <div
class=
"grid_4 alpha">
2933 <span data-bind=
"text: bindOptions.billHalfDateLabel"></span>
2935 <div
class=
"grid_7">
2936 <input type=
"text" name=
"checkReceived" style=
"width: 100%" 2937 data-role=
"datepicker" data-bind=
"value: source.partiallyBilledDate">
2939 <div
class=
"grid_1 omega">
2940 <span data-
for=
'checkReceived' class=
'k-invalid-msg'></span>
2943 <div
class=
"grid_12" data-bind=
"visible: bindOptions.billHalfDateRowVisible">
2944 <div
class=
"grid_4 alpha">
2945 <span data-bind=
"text: bindOptions.billHalfDateLabel"></span>
2947 <div
class=
"grid_7">
2948 <input type=
"text" name=
"halfBillDate" style=
"width: 100%" 2949 data-role=
"datepicker" data-bind=
"value: source.partiallyBilledDate" data-depth=
"year" data-start=
"year" data-format=
"MMM yyyy">
2951 <div
class=
"grid_1 omega">
2952 <span data-
for=
'halfBillDate' class=
'k-invalid-msg'></span>
2955 <div
class=
"grid_12" data-bind=
"visible: bindOptions.workflowRowVisible">
2956 <div
class=
"grid_4 alpha">
2957 <label>Workflow:</label>
2959 <div
class=
"grid_7">
2960 <select
id=
"workflows_top" data-role=
"dropdownlist" data-text-field=
"text" data-value-field=
"value" 2961 data-cascade-from=
"products_top" data-cascade-from-field=
"product" 2962 data-bind=
"source: ddls.productWorkflowOptions, 2963 value: bindOptions.workflowValue, events: { change: workflowChange }, cascade: bindOptions.workflowValue"></select>
2965 <div
class=
"grid_1 omega">
2969 <div
class=
"grid_12" data-bind=
"visible: bindOptions.associateToJobRowVisible">
2970 <div
class=
"grid_4 alpha">
2971 <label>Associate to Job:</label>
2973 <div
class=
"grid_7">
2974 <div
id=
"unattacheds_top" data-role=
"dropdownlist" data-text-field=
"text" data-value-field=
"value" 2975 data-cascade-from=
"products_top" data-cascade-from-field=
"product" 2976 data-bind=
"source: ddls.unattachedJobs, value: bindOptions.unattachedJobValue", cascade: bindOptions.unattachedJobValue
"></div> 2978 <div class="grid_1 omega
"> 2982 <div class="grid_12
" data-bind="visible: bindOptions.immediateBillRowVisible
"> 2983 <div class="grid_4 alpha
"> 2984 <label>Starts:</label> 2986 <div class="grid_7
"> 2987 <input type="text
" name="immediateBillDate
" style="width: 100%
" 2988 data-role="datepicker
" data-bind="value: source.partiallyBilledDate
" data-depth="year
" data-start="year
" data-format="MMM yyyy
"> 2990 <div class="grid_1 omega
"> 2991 <span data-for='immediateBillDate' class='k-invalid-msg'></span> 2994 <div class="grid_12
" data-bind="visible: bindOptions.dnidRowVisible
"> 2995 <div class="grid_4 alpha
"> 2996 <label class="custLabel
">Long Code:</label> 2998 <div class="grid_4
"> 2999 <input name="aDNID
" style="width: 100%
" 3000 data-role="maskedtextbox
" data-mask="<?php echo str_repeat(
'0', 15); ?>
" data-bind="value: source.aDNID
" data-prompt-char=" "> 3002 <div class="grid_1 omega
"> 3003 <span data-for='aDNID' class='k-invalid-msg'></span> 3014 <script id="shuttleAppletTemplate
" type="k-kendo-
template"> 3015 <div class="k-edit-form-container
"> 3016 <div class="container_12
"> 3017 <div classs="grid_12
"> 3018 <div id="formInfoShuttleDiv
" class="homecu-formStatus k-block k-info-colored
" style="display:none;
"> 3019 <b>These Products already exist: </b> 3023 <div class="grid_12
"> 3024 <div class="grid_5
">Available</div> 3025 <div class="grid_2
"> </div> 3026 <div class="grid_5
">Selected</div> 3028 <div class="grid_12
"> 3029 <div class="grid_5
"> 3030 <div id="availableGrid
" style="width:100%
"></div> 3032 <div class="grid_2
"> 3033 <a class="k-button k-button-icontext
" id="shuttleMoveToSelectedBtn
" href="\\#
" style="width:60%
">--»</a> 3034 <a class="k-button k-button-icontext
" id="shuttleMoveToAvailableBtn
" href="\\#
" style="width:60%
">«--</a> 3036 <div class="grid_5
" style="min-height:100px
"> 3037 <div id="selectedGrid
" style="width:100%
"></div> 3041 <div class="k-edit-buttons k-state-
default"> 3042 <a class="k-button k-button-icontext k-primary
" id="shuttleOkayBtn
" href="\\#
"> 3043 <span class="k-icon k-update
"></span>Okay 3045 <a class="k-button k-button-icontext
" id="shuttleCancelBtn
" href="\\#
"> 3046 <span class="k-icon k-cancel
"></span>Cancel 3058 <script id="pendingToolbarTemplate
" type="k-kendo-
template"> 3059 <a class="k-button k-grid-addSingle
" href="\\#
"> 3060 <span class="fa fa-2x fa-plus
"></span> 3062 <a class="k-button k-grid-createBulk
" href="\\#
"> 3063 <span class="fa fa-2x fa-clipboard
"></span> 3067 <?php // ====================================== 3068 // PENDING BOTTOM GRID TEMPLATES 3069 // ====================================== ?> 3077 <script type="k-kendo-
template" id="detailRowTemplate
"> 3078 <tr data-uid="#= uid #
"> 3079 <?php if ($isInEditList) { ?> 3081 <a class="k-button k-grid-edit
" href="\\#
"> 3082 <span class="fa fa-2x fa-edit
"></span> 3084 # if (deletable) { # 3085 <a class="k-button k-grid-customDelete
" href="\\#
"> 3086 <span class="fa fa-2x fa-trash
"></span> 3091 # if (showAdvanceWorkflow) { # 3092 <a class="k-button k-grid-advanceWorkflow
" href="\\#
"> 3093 #: advanceWorkflowText # 3098 <td>#: partialBillingStatus #</td> 3099 <td>#: billingStatusLabel #</td> 3100 <td>#: actualDescription #</td> 3101 <td>#: textDescription #</td> 3102 <td>#: frequencyDescr #</td> 3112 <script type="k-kendo-
template" id="detailEditWindowTemplate
"> 3113 <div class="k-edit-form-container
"> 3114 <div id="formValidateEditDetail
" style="display:none;
"></div> 3115 <form id="detailEditForm
"> 3116 <div class="container_12
"> 3117 <div class="grid_12
"> 3118 <div class="grid_4 alpha
"> 3119 <label>Description:</label> 3121 <div class="grid_7 omega
"> 3122 <span data-bind="text: source.actualDescription
"></span> 3129 <div class="k-edit-buttons k-state-
default"> 3130 <a class="k-button k-button-icontext k-primary continueBtn
" href="#
"> 3131 <span class="k-icon k-update
"></span>Okay 3133 <a class="k-button k-button-icontext cancelBtn
" href="#
"> 3134 <span class="k-icon k-cancel
"></span>Cancel 3146 <script type="k-kendo-
template" id="detailAddWindowTemplate
"> 3147 <div class="k-edit-form-container
"> 3148 <div id="formValidateAddDetail
" style="display:none;
"></div> 3149 <form id="detailAddForm
"> 3150 <div class="container_12
"> 3151 <div class="grid_12
" id="descriptionLabelLine
"> 3152 <div class="grid_4 alpha
"> 3153 <label>Description:</label> 3155 <div class="grid_7 omega
"> 3156 <div id="featureDetailDDL
"></div> 3160 <div class="configDiv
"></div> 3163 <div class="k-edit-buttons k-state-
default"> 3164 <a class="k-button k-button-icontext k-primary continueBtn
" href="\\#
"> 3165 <span class="k-icon k-update
"></span>Okay 3167 <a class="k-button k-button-icontext cancelBtn
" href="\\#
"> 3168 <span class="k-icon k-cancel
"></span>Cancel 3182 <script type="k-kendo-
template" id="detailConfigTemplate
"> 3183 # if (showOverrideRow) { # 3184 <div class="grid_12
"> 3185 <div class="grid_4 alpha
">Override:</div> 3186 <div class="grid_7
"> 3187 <input type="checkbox
" data-bind="click: showOverride, visible: bindOptions.isOverrideCheckboxShown
"> 3188 <input class="k-input
" type="text
" name="descriptionOverride
" data-bind="value: source.overrideDescription, visible: bindOptions.isOverrideDescrShown
"> 3190 <div class="grid_1 omega
"> 3191 <span data-for='descriptionOverride' class='k-invalid-msg'></span> 3195 # if (showFixedRow) { # 3196 <div class="grid_12
"> 3197 <div class="grid_4 alpha
"> 3198 <label class="custLabel
" data-for="fixed
"># if (fixedLabel == "") { # # } else { # #: fixedLabel # # } #</label> 3200 <div class="grid_4
"> 3201 <input type="text
" name="fixed
" required data-required-msg="Fixed is required
" style="width: 100%
" 3202 data-role="numerictextbox
" data-format="#= format #
" data-decimals="#: decimals #
" data-bind="value: source.fixed
"> 3204 <div class="grid_1 omega
"> 3205 <span data-for='fixed' class='k-invalid-msg'></span> 3209 # if (showBillHalfDiv) { # 3210 <div class="grid_12
"> 3211 <div class="grid_4 alpha
">Setup Options:</div> 3212 <div class="grid_7
"> 3213 <div id="billHalfs_#: addOrUpdate #
" data-role="dropdownlist
" data-text-field="text
" data-value-field="value
" 3214 data-bind="source: ddls.setupBillingDDL, value: bindOptions.billHalfValue,
3215 events: { change: billHalfChange }, enabled: bindOptions.billHalfDDLEnabled
"></div> 3217 <div class="grid_1 omega
"> 3221 <div class="grid_12
" data-bind="visible: bindOptions.billHalfCheckReceivedRowVisible
"> 3222 <div class="grid_4 alpha
"> 3223 <span data-bind="text: bindOptions.billHalfDateLabel
"></span> 3225 <div class="grid_7
"> 3226 <input type="text
" name="checkReceived
" style="width: 100%
" 3227 data-role="datepicker
" data-bind="value: source.partiallyBilledDate
"> 3229 <div class="grid_1 omega
"> 3230 <span data-for='checkReceived' class='k-invalid-msg'></span> 3233 <div class="grid_12
" data-bind="visible: bindOptions.billHalfDateRowVisible
"> 3234 <div class="grid_4 alpha
"> 3235 <span data-bind="text: bindOptions.billHalfDateLabel
"></span> 3237 <div class="grid_7
"> 3238 <input type="text
" name="billHalfDate
" style="width: 100%
" 3239 data-role="datepicker
" data-bind="value: source.partiallyBilledDate
" data-depth="year
" data-start="year
" data-format="MMM yyyy
"> 3241 <div class="grid_1 omega
"> 3242 <span data-for='billHalfDate' class='k-invalid-msg'></span> 3245 <div class="grid_12
" data-bind="visible: bindOptions.billHalfAmountRowVisible
"> 3246 <div class="grid_4 alpha
"> 3247 <label>Amount Received:</label> 3249 <div class="grid_4
"> 3250 <input type="text
" name="checkReceivedAmount
" style="width: 100%
" 3251 data-role="numerictextbox
" data-min="0
" data-decimals="2
" data-format="{0:c}
" data-bind="value: source.partiallyBilledAmount
"> 3253 <div class="grid_1 omega
"> 3254 <span data-for='checkReceivedAmount' class='k-invalid-msg'></span> 3258 # if (showWorkflowDiv) { # 3259 <div class="grid_12 workflowDiv
"> 3260 <div class="grid_4 alpha
"> 3261 <label>Workflow:</label> 3263 <div class="grid_7
"> 3264 <select id="workflows_#: addOrUpdate #
" data-role="dropdownlist
" data-text-field="text
" data-value-field="value
" 3265 data-bind="source: ddls.workflowDDL, value: bindOptions.workflowValue, events: { change: workflowChange }
"></select> 3267 <div class="grid_1 omega
"> 3271 <div class="grid_12
" data-bind="visible: bindOptions.associateToJobRowVisible
"> 3272 <div class="grid_4 alpha
"> 3273 <label>Associate to Job:</label> 3275 <div class="grid_7
"> 3276 <div id="unattacheds_#: addOrUpdate #
" data-role="dropdownlist
" data-text-field="text
" data-value-field="value
" 3277 data-bind="source: ddls.unattachedJobDDL, value: bindOptions.unattachedJobValue
"></div> 3279 <div class="grid_1 omega
"> 3283 <div class="grid_12
" data-bind="visible: bindOptions.immediateBillRowVisible
"> 3284 <div class="grid_4 alpha
"> 3285 <label>Starts:</label> 3287 <div class="grid_7
"> 3288 <input type="text
" name="immediateBillDate
" style="width: 100%
" 3289 data-role="datepicker
" data-bind="value: source.partiallyBilledDate
" data-depth="year
" data-start="year
" data-format="MMM yyyy
"> 3291 <div class="grid_1 omega
"> 3292 <span data-for='immediateBillDate' class='k-invalid-msg'></span> 3296 # if (showVariableRow) { # 3297 <div class="grid_12
"> 3298 <div class="grid_4 alpha
"> 3299 <label class="custLabel
" data-for="variable
"># if (variableLabel == "") { # # } else { # #: variableLabel # # } #</label> 3301 <div class="grid_4
"> 3302 <input type="text
" name="variable
" required data-required-msg="Variable is required
" style="width: 100%
" 3303 data-role="numerictextbox
" data-decimals="#: decimals #
" data-format="#= format #
" data-bind="value: source.variable
"> 3305 <div class="grid_1 omega
"> 3306 <span data-for='variable' class='k-invalid-msg'></span> 3310 # if (showQuantity1Row) { # 3311 <div class="grid_12
"> 3312 <div class="grid_4 alpha
"> 3313 <label data-for="qty1
"># if (quantity1Label1 == "") { # # } else { # #: quantity1Label1 # # } #</label> 3315 <div class="grid_4
"> 3316 <input type="text
" name="qty1
" required data-required-msg="Quantity 1 is required
" style="width: 100%
" 3317 data-role="numerictextbox
" data-decimals="0
" data-format="\\#
" data-min="0
" data-bind="value: source.qty1
"> 3319 <div class="grid_3
"> 3320 <label data-for="qty1
"># if (quantity1Label2 == "") { # # } else { # #: quantity1Label2 # # } #</label> 3322 <div class="grid_1 omega
"> 3323 <span data-for='qty1' class='k-invalid-msg'></span> 3327 # if (showQuantity2Row) { # 3328 <div class="grid_12
"> 3329 <div class="grid_4 alpha
"> 3330 <label data-for="qty2
"># if (quantity2Label1 == "") { # # } else { # #: quantity2Label1 # # } #</label> 3332 <div class="grid_4
"> 3333 <input type="text
" name="qty2
" required data-required-msg="Quantity 2 is required
" style="width: 100%
" 3334 data-role="numerictextbox
" data-decimals="0
" data-format="\\#
" data-min="0
" data-bind="value: source.qty2
"> 3336 <div class="grid_3
"> 3337 <label data-for="qty2
"># if (quantity2Label2 == "") { # # } else { # #: quantity2Label2 # # } #</label> 3339 <div class="grid_1 omega
"> 3340 <span data-for='qty2' class='k-invalid-msg'></span> 3344 # if (showQuantityRangeRow) { # 3345 <div class="grid_12
"> 3346 <div class="grid_4 alpha
"> 3347 <label># if (quantityRangeLabel1 == "") { # # } else { # #: quantityRangeLabel1 # # } #</label> 3349 <div class="grid_3
"> 3350 <input type="text
" name="qty1Range
" required data-required-msg="Quantity 1 is required
" style="width: 100%
" 3351 data-role="numerictextbox
" data-decimals="0
" data-format="\\#
" data-min="0
" data-bind="value: source.qty1
"> 3353 <div class="grid_1
">To</div> 3354 <div class="grid_3
"> 3355 <input type="text
" name="qty2Range
" style="width: 100%
" 3356 data-role="numerictextbox
" data-decimals="0
" data-format="\\#
" data-min="0
" data-bind="value: source.qty2
" placeholder="∞
"> 3358 <div class="grid_1 omega
"> 3359 <span data-for='qty1Range' class='k-invalid-msg'></span> 3360 <span data-for='qty2Range' class='k-invalid-msg'></span> 3364 # if (showDNIDDiv) { # 3365 <div class="grid_12
"> 3366 <div class="grid_4 alpha
"> 3367 <label class="custLabel
" data-for="aDNID
">Long Code:</label> 3369 <div class="grid_4
"> 3370 <input name="aDNID
" style="width: 100%
" 3371 data-role="maskedtextbox
" data-mask="<?php echo str_repeat(
'0', 15); ?>
" data-bind="value: source.aDNID
" data-prompt-char=" "> 3373 <div class="grid_1 omega
"> 3374 <span data-for='aDNID' class='k-invalid-msg'></span> 3378 # if (showFrequencyDiv) { # 3379 <div class="grid_12
"> 3380 <div class="grid_4 alpha
"> 3381 <label>Frequency:</label> 3383 <div class="grid_3
"> 3384 <div id="frequencies_#: addOrUpdate #
" data-role="dropdownlist
" data-text-field="text
" data-value-field="value
" 3385 data-bind="source: ddls.frequencyDDL, value: bindOptions.frequencyValue, events: { change: frequencyChange }
"></div> 3387 <div class="grid_1 omega
"> 3391 <div class="grid_12
" data-bind="visible: bindOptions.billsOn1RowVisible
"> 3392 <div class="grid_4 alpha
"> 3393 <label>Bills On:</label> 3395 <div class="grid_3
"> 3396 <div id="billsOn1s_#: addOrUpdate #
" data-role="dropdownlist
" data-text-field="text
" data-value-field="value
" 3397 data-bind="source: ddls.monthDDL, value: bindOptions.billsOn1Value, events: { change: frequencyChange }
"></div> 3399 <div class="grid_1 omega
"> 3403 <div class="grid_12
" data-bind="visible: bindOptions.billsOn2RowVisible
"> 3404 <div class="grid_4 alpha
"> 3407 <div class="grid_3
"> 3408 <div id="billsOn2s_#: addOrUpdate #
" data-role="dropdownlist
" data-text-field="text
" data-value-field="value
" 3409 data-bind="source: ddls.monthDDL, value: bindOptions.billsOn2Value, events: { change: frequencyChange }
"></div> 3411 <div class="grid_1 omega
"> 3424 <script id="changeStartMonthTemplate
" type="k-kendo-
template"> 3425 <div class="k-edit-form-container added
"> 3426 <div class="container_12
"> 3427 <div class="grid_12
"> 3428 <div class="grid_4 alpha
">Start Date:</div> 3429 <div class="grid_7 omega
"><div id="pendingStartMonthDDL
"></div></div> 3432 <div class="k-edit-buttons k-state-
default"> 3433 <a class="k-button k-button-icontext k-primary continueBtn
" href="\\#
"> 3434 <span class="k-icon k-update
"></span>Okay 3436 <a class="k-button k-button-icontext cancelBtn
" href="\\#
"> 3437 <span class="k-icon k-cancel
"></span>Cancel 3449 <script id="detailToolbarTemplate
" type="k-kendo-
template"> 3450 <a class="k-button k-grid-add
" href="\\#
"> 3451 <span class="fa fa-2x fa-plus
"></span> 3453 <a class="k-button k-grid-startMonthlies
" href="\\#
"> 3458 <?php // ====================================== 3459 // ACTIVE GRID TEMPLATES 3460 // ====================================== ?> 3468 <script type="k-kendo-
template" id="activeRowTemplate
"> 3469 <tr data-uid="#= uid#
"> 3470 <?php if ($isInEditList) { ?> 3472 # if (showCompleteButton) { # 3473 <a class="k-button k-grid-advanceWorkflow
" href="\\#
">#: completeButtonText #</a> 3475 <a class="k-button k-grid-changePrice
" href="\\#
">Change Price</a> 3476 <a class="k-button k-grid-customDelete
" href="\\#
"> 3477 <span class="fa fa-2x fa-trash
"></span> 3481 <td>#: productName #</td> 3482 <td>#: featureName #</td> 3483 <td>#: partialBillingStatus #</td> 3484 <td>#: status #</td> 3485 <td>#: featureDescription #</td> 3486 <td>#: frequencyDescr #</td> 3496 <script id="changeEndMonthTemplate
" type="k-kendo-
template"> 3497 <div class="k-edit-form-container added
"> 3498 <div class="container_12
"> 3499 <div class="grid_12
"> 3500 <div class="grid_4 alpha
">End Date:</div> 3501 <div class="grid_7 omega
"><div id="activeEndMonthDDL
"></div></div> 3504 <div class="k-edit-buttons k-state-
default"> 3505 <a class="k-button k-button-icontext k-primary continueBtn
" href="\\#
"> 3506 <span class="k-icon k-update
"></span>Okay 3508 <a class="k-button k-button-icontext cancelBtn
" href="\\#
"> 3509 <span class="k-icon k-cancel
"></span>Cancel 3521 <script type="k-kendo-
template" id="activeChangePriceTemplate
"> 3522 <div class="k-edit-form-container
"> 3523 <div id="formValidateChangePrice
" style="display:none;
"></div> 3524 <form id="activeChangePriceForm
"> 3525 <div class="container_12
"> 3526 <div class="grid_12
"> 3527 <div class="grid_4 alpha
"> 3528 <label>Description:</label> 3530 <div class="grid_7 omega
"> 3531 <span data-bind="text: source.actualDescription
"></span> 3538 <div class="k-edit-buttons k-state-
default"> 3539 <a class="k-button k-button-icontext k-primary continueBtn
" href="#
"> 3540 <span class="k-icon k-update
"></span>Okay 3542 <a class="k-button k-button-icontext cancelBtn
" href="#
"> 3543 <span class="k-icon k-cancel
"></span>Cancel 3549 <?php // ====================================== 3550 // COMPLETED GRID TEMPLATES 3551 // ====================================== ?> 3559 <script type="k-kendo-
template" id="completedRowTemplate
"> 3560 <tr data-uid="#= uid#
"> 3561 <?php if ($isInEditList) { ?> 3563 # if (showAdvanceWorkflow) { # 3564 <a class="k-button k-grid-advanceWorkflow
" href="\\#
"> 3565 #: advanceWorkflowText # 3570 <td>#: productName #</td> 3571 <td>#: featureName #</td> 3572 <td>#: partialBillingStatus #</td> 3573 <td>#: status #</td> 3574 <td>#: featureDescription #</td> 3575 <td>#: frequencyDescr #</td> 3579 <?php // ====================================== 3581 // ====================================== ?> 3583 <div class="container_12
"> 3584 <div class="grid_12
"> 3585 <h2>Showing details for <span id="cuLabel
"></span></h2> 3586 <div id="cu
" style="display:none
"></div><div id="cuName
" style="display:none;
"></div> 3588 <div id="formMain
"></div> 3589 <div id="formValidateMainDiv
" style="display:none;
"></div> 3590 <div class="grid_12
"> 3591 <div id="warningDiv
" class="k-block
" style="display:none;
"></div> 3593 <div class="grid_12
"> 3594 <div id="activeGrid
" class="detailGrid minifiedActionGrid
"></div> 3596 <div class="grid_12
"> 3597 <div id="pendingGrid
" class="detailGrid minifiedActionGrid
"></div> 3599 <div class="grid_12
"> 3600 <div id="completedGrid
" class="detailGrid minifiedActionGrid
"></div>