/* TODO : revisit serialize() to see if the standard jquery works TODO : look at Fse.CLOS._loadProfileTab = function( bForce ) to figure out the purpose of force, etc... */ CallEntryPopup = function( options ) { let instance = this; instance.interactionID = options.interactionID ? parseInt( options.interactionID ) : 0; instance.objID = options.objID ? parseInt( options.objID ) : 0; instance.stfID = options.stfID ? parseInt( options.stfID ) : 0; instance.interactionEditable = options.intEditable == undefined ? true : options.intEditable ? true : false; instance.highlightSKUId = options.highlightSKUId ? parseInt( options.highlightSKUId ) : 0; instance.callback = options.fnCallback ? options.fnCallback : function() { /* empty call back */ } instance.recapEnabled = false; if( Fse.Portal.checkPermission( 'BCRMSendCallRecap') && Fse.Portal.getConfiguration( "CRM.SalesCallRecapEnabled" ) == "true" ) { instance.recapEnabled = true; } instance.loadPromise = $.Deferred(); instance.data = {}; instance.distributorPurchasingTabEnabled = Fse.Portal.getConfiguration( "102.profile.purchasingTabEnabled" ) == "true" ? true : false; if( instance.interactionID ) { let interactionInfoStore = Fse.Data.newDataSource( { object : "BCM.interactionInfo", keyField : "interactionId", paginate : false, objectParams : { interactionId : instance.interactionID } } ).store() interactionInfoStore.byKey(instance.interactionID).done( function( interactionData ) { //console.log( "interactionData", interactionData ); instance.data = interactionData; instance.partnerId = interactionData.partnerId; instance.partnerType = interactionData.partnerType; instance.companyType = interactionData.companyType; instance.oneFSId = interactionData.oneFSId; instance.intDisposition = instance.data.disposition; instance.loadPromise.resolve(); }) // let interactionDataSource = Fse.Data.newDataSource( { object : "CRM.interactions", keyField : "interactionId", paginate : false } ) // interactionDataSource.select( ["partnerId","partnerType","partnerName","territoryName","interactionDate","interactionId","disposition", "salesRepFullName" ]); // interactionDataSource.filter( [ "interactionId", "=", instance.interactionID ]); // interactionDataSource.load().done( function( interactionData ) { // console.log( "interactionData", interactionData ); // instance.data = interactionData[0]; // instance.intDisposition = instance.data.disposition; // instance.loadPromise.resolve(); // }) } else { instance.loadPromise.resolve(); } instance.baseURL = $("link#bcmHandlerLink").attr( "href" ); instance.callDetailsToolbarItems = []; instance._initializeTabPanelItems(); // process tracking variables instance.productsUpdated = true; instance.intDisposition = "?"; } CallEntryPopup.prototype.constructor = CallEntryPopup; CallEntryPopup.prototype._resetQuickAdd = function() { let instance = this; if( instance.quickAddToolbar ) { instance.quickAddToolbar.beginUpdate(); instance.quickAddToolbar.option( "items[0].visible", true ); // text box instance.quickAddToolbar.option( "items[1].visible", false ); // cancel link instance.quickAddToolbar.option( "items[2].visible", false ); // select box instance.quickAddSKUSelect.option( { dataSource : null, value : null } ); instance.quickAddSKUText.option( "value", null ); instance.quickAddToolbar.endUpdate(); } } CallEntryPopup.prototype.cancelQuickAdd = function() { let instance = this; document.forms.frmInteraction.elements.inProcess.value = 'yes'; instance._resetQuickAdd(); instance.quickAddStatusMsg.empty(); } CallEntryPopup.prototype.submitQuickAdd = function( skuId ) { let instance = this; let dataToSend = { interactionID : instance.interactionID, useJSON : true }; if( skuId ) { dataToSend.skuId = skuId; } else { let sku = instance.quickAddSKUText.option( "value" ); if( ! sku ) { return; } dataToSend.sku = sku; instance.quickAddStatusMsg.empty().text( "Searching..." ); document.forms.frmInteraction.elements.inProcess.value = 'yes'; } instance.saveBrief().done( function() { let ajaxOptions = { url : Fse.Util.updateURL( instance.baseURL, { do : "interaction-dialog-action-quick-add-product", mode : "direct" }), method : "POST", data : dataToSend, headers : { fseAjax : true } } $.ajax( ajaxOptions ).done( function( result ) { if( result.addStatus == "yes" ) { instance.refreshProductsDisplay(); instance._resetQuickAdd(); instance.quickAddStatusMsg.empty().text( "SKU Added" ); } else if( result.addStatus == "mult") { instance.quickAddStatusMsg.empty().text( "Multiple found" ); let dataSource = new DevExpress.data.DataSource( { store : { type : "array", data : result.data, key : "skuId" } }) instance.quickAddSKUSelect.option( { "dataSource" : dataSource } ); instance.quickAddToolbar.beginUpdate(); instance.quickAddToolbar.option( "items[0].visible", false ); // text box instance.quickAddToolbar.option( "items[1].visible", true ); // cancel link instance.quickAddToolbar.option( "items[2].visible", true ); // select box instance.quickAddToolbar.endUpdate(); } else { instance.quickAddStatusMsg.empty().text( result.msgText ); } }) }) // Spry.Utils.setInnerHTML( "divQuickAddStatus", "Searching..." ); // document.frmInteraction.inProcess.value = 'yes'; // document.frmQuickAddProd.interactionID.value = document.frmInteraction.interactionID.value; // set interaction id to h idden form field // Fse.CLOS.saveBrief(); //must do first - saves salesrep - important when linking to objectives // // submit add form // var oRequest1 = Fse.Ajax.sendForm( document.frmQuickAddProd ); // //if (oRequest1.getResponseHeader('addStatus') == 'yes') { // if (Fse.CLOS.parseResponse(oRequest1.responseText,1) == 'yes') { // var interactionID = document.frmInteraction.interactionID.value; // Spry.Utils.setInnerHTML( "divProductsForm", "" ); // var fnCallBack = function() { // Fse.DialogManager.initializePopupCalendarHandler(document.getElementById("divProductsForm")); // } // Fse.Ajax.updateContent( Fse.CLOS.baseURL+'?view=interaction-dialog-products-form&mode=direct&interactionID='+interactionID+'&editMode='+Fse.CLOS.interactionEditable, 'divProductsForm', null, fnCallBack ); // Fse.Ajax.updateContent( Fse.CLOS.baseURL+'?view=interaction-dialog-quickadd-input&mode=direct', 'divQuickAddSKU' ); // Spry.Utils.setInnerHTML( "divQuickAddStatus", "SKU Added" ); // } else if (Fse.CLOS.parseResponse(oRequest1.responseText,1) == 'mult') { // Fse.Ajax.updateContent( Fse.CLOS.baseURL+'?view=interaction-dialog-quickadd-select&mode=direct&sku='+document.frmQuickAddProd.sku.value, 'divQuickAddSKU' ); // Spry.Utils.setInnerHTML( "divQuickAddStatus", "Multiple Found" ); // } else { // Spry.Utils.setInnerHTML( "divQuickAddStatus", Fse.CLOS.parseResponse(oRequest1.responseText,0) ); // } } CallEntryPopup.prototype.convertPRDtoSKU = function( interactionDetailId, mfrId, prodId ) { let instance = this; instance.saveBrief().done( function() { let ppOptions = { mfr_id : mfrId, pick : [ "SKU" ], prodId : prodId, unlockL2 : true, selectMode : "multiple", onProductsPicked : function( ppe ) { // console.log( "productsPickedEvent", ppe ); if( ppe.selectedItems.length && ppe.selectedItems[0].catalogType == "SKU" ) { // let skuId = ppe.selectedItems[0].catalogId; let skuIds = []; ppe.selectedItems.forEach( function( si ) { if( si.catalogType == "SKU" ) { skuIds.push( si.catalogId ); } }) let skuId = skuIds.join( "," ); //Fse.CLOS.baseURL+"?do=interaction-dialog-convert-cat-to-sku&interactionId="+interactionId+"&itemDetailId="+itemDetailId, $.ajax( { url : Fse.Util.updateURL( instance.baseURL, { do : "interaction-dialog-convert-cat-to-sku", interactionId :instance.interactionID, itemDetailId : interactionDetailId }), method : "POST", data : { skuId : skuId }, headers : { fseAjax : true } }) // then refresh product list instance.refreshProductsDisplay(); } } } let pp = new ProductPicker( ppOptions ); pp.show(); }) return ; var currentList = ''; var listid = 0; var fndCallBack = function(oRequest) { var fnCallBack = function() { Fse.DialogManager.initializePopupCalendarHandler(document.getElementById("divProductsForm")); } var interactionID = document.frmInteraction.interactionID.value; Fse.Ajax.updateContent( Fse.CLOS.baseURL+'?view=interaction-dialog-products-form&mode=direct&interactionID='+interactionID+'&editMode='+Fse.CLOS.interactionEditable, 'divProductsForm', null, fnCallBack ); } var oOptions = { selectMode : "multiple", pickLevel : 1, closeAction : Fse.CLOS.baseURL+"?do=interaction-dialog-convert-cat-to-sku&interactionId="+interactionId+"&itemDetailId="+itemDetailId, onSuccess : fndCallBack, disabledIdList: currentList, xscope: 'mfr:'+mfrId, scope: 'prd:'+prodId+',mfr:'+mfrId, useLegacy : true }; Fse.CLOS.saveBrief(); Fse.FND.showProductLookup( oOptions ); }; CallEntryPopup.prototype.savePurchasingProfile = function() { let instance = this; let savePPPromise = $.Deferred(); if( instance.operatorPurchasing ) { instance.operatorPurchasing.saveUnconfirmed(); } else if ( instance.distributorPurchasing ) { alert( "Distributor Purchasing cannot be saved "); } else { /* savePPPromise.done( function() { instance.refreshTab( instance.PURCHASING_TAB ) }); Fse.OPR.savePurchasingProfile( function() { savePPPromise.resolve(); }) */ } return savePPPromise; } CallEntryPopup.prototype.updateAudit = function() { let instance = this; return instance.salesCallAudit.save().done( function() { instance.popup.hide(); instance.callbck(); }) // let updateAuditPromise = $.Deferred(); // updateAuditPromise.done( function() { // instance.popup.hide(); // instance.callback(); // }) // if( document.forms.frmInteractionAudit ) { // if ( Fse.FormManager.submit( document.forms.frmInteractionAudit, false )) { // document.forms.frmInteractionAudit.elements.saleConfirmedNotifyNote.disabled = false; // instance.setButtonAreaMessage( "Saving audit data..." ); // let frmInteractionAudit = $(document.forms.frmInteractionAudit); // let ajaxOptions = { // url : frmInteractionAudit.attr( "action" ), // method : frmInteractionAudit.attr( "method" ), // data : frmInteractionAudit.serialize(), // headers : { fseAjax : true } // } // $.ajax( ajaxOptions ).done( function( result ) { // updateAuditPromise.resolve(); // }) // } else { // updateAuditPromise.reject(); // } // } else { // updateAuditPromise.reject(); // } // return updateAuditPromise; } CallEntryPopup.prototype.ineractionDialogSaveProfile = function() { let saveProfilePromise = $.Deferred(); let instance = this; if( Fse.FormManager.submit( document.forms.frm_profileUpdatePanel, false )) { let frm_profileUpdatePanel = $(document.forms.frm_profileUpdatePanel); let ajaxOptions = { url : frm_profileUpdatePanel.attr( "action"), method : frm_profileUpdatePanel.attr( "method"), data : frm_profileUpdatePanel.serialize(), headers : { fseAjax : true } } $.ajax( ajaxOptions ).done( function( result ) { instance.refreshTab( instance.PROFILE_TAB ) saveProfilePromise.resolve(); }) } else { saveProfilePromise.reject(); } return saveProfilePromise; }; CallEntryPopup.prototype.interactionDialogSendEmail = function() { let instance = this; let sendEmailPromise = instance.emailSender.send(); sendEmailPromise.done( function() { alert('Sales Call Email Sent.'); }).fail( function( reason ) { if( reason ) { alert( reason ) } }) return sendEmailPromise; // let sendEmailPromise = $.Deferred(); // if (Fse.FormManager.submit( document.forms.frmEmailSalesCall, false )) { // let frmEmailSalesCall = $(document.frmEmailSalesCall); // let ajaxOptions = { // url : frmEmailSalesCall.attr( "action"), // method : frmEmailSalesCall.attr( "method"), // data : frmEmailSalesCall.serialize(), // headers : { fseAjax : true } // }; // $.ajax( ajaxOptions ).done( function( result, statusText, jqXHR ) { // if( jqXHR.getResponseHeader( "call-notify-status" ) == "good" ) { // alert('Sales Call Email Sent.'); // sendEmailPromise.resolve(); // } else { // alert('Invalid email format. Enter addresse(s) in this format: jsmith@abc.com; jjones@abc.com'); // sendEmailPromise.reject(); // } // }) // // var oRequest = Fse.Ajax.sendForm( document.frmEmailSalesCall ); // // if (oRequest.getResponseHeader('call-notify-status') == 'good') { // // alert('Sales Call Email Sent.'); // // } else { // // alert('Invalid email format. Enter addresse(s) in this format: jsmith@abc.com; jjones@abc.com'); // // } // } else { // sendEmailPromise.reject(); // } // return sendEmailPromise; } CallEntryPopup.prototype.submitAddProducts = function( continueSearch ) { let instance = this; continueSearch = continueSearch ? true : false; document.forms.frmInteraction.elements.inProcess.value = 'yes'; document.forms.frmAddProds.elements.interactionID.value = document.forms.frmInteraction.elements.interactionID.value; // set interaction id to hidden form field if ( continueSearch ) { document.forms.frmAddProds.elements.updateObjectiveLinks.value = 'false'; //document.getElementById( "divProductsForm" ).setAttribute( "FSE:productsUpdated", "false" ); instance.productsUpdated = false; } else { document.forms.frmAddProds.elements.updateObjectiveLinks.value = 'true'; // document.getElementById( "divProductsForm" ).setAttribute( "FSE:productsUpdated", "true" ); instance.productsUpdated = true; } // mandatory brief save instance.saveBrief().done( function() { // // submit form. FSE:addItemStatus is used by test software. // document.getElementById( "divProductsForm" ).setAttribute( "FSE:addItemStatus", "inprocess" ); // var oRequest = Fse.Ajax.sendForm( document.frmAddProds ); // document.getElementById( "divProductsForm" ).setAttribute( "FSE:addItemStatus", "complete" ); // save the products! instance.addItemStatus = "inprocess"; let addProductsForm = $( document.forms.frmAddProds ); let ajaxOptions = { url : addProductsForm.attr( "action" ), method : addProductsForm.attr( "method" ), data : Fse.Ajax.serialize( addProductsForm[0] ), headers : { fseAjax : true } } $.ajax( ajaxOptions ).done( function( result ) { // the save is complete instance.addItemStatus = "complete"; // var interactionID = document.frmInteraction.interactionID.value; // var fnCallBack = function() { // Fse.DialogManager.initializePopupCalendarHandler(document.getElementById("divProductsForm")); // } // if (continueSearch == false) { // Spry.Utils.setInnerHTML( "divProductsForm", "loading..." ); // Fse.Ajax.updateContent( Fse.CLOS.baseURL+'?view=interaction-dialog-products-form&mode=direct&interactionID='+interactionID+'&editMode='+Fse.CLOS.interactionEditable, 'divProductsForm', null, fnCallBack ); // } if( ! continueSearch ) { // not continuing the search, so refresh the products instance.refreshProductsDisplayRaw().done( function() { // async requires no follow up }); } // set checked items to disabled (replaces search submit to have server side disable checked items) var elements = document.getElementsByName("addProducts"); for (var i = 0 ; i < elements.length ; i++) { if(elements[i].checked == true) { elements[i].disabled = true; } } if (continueSearch == false) { // if (instance.intDisposition == '?') { // //Fse.Ajax.updateContent( Fse.CLOS.baseURL+'?view=interaction-dialog-buttons-detail-pend&edit='+Fse.CLOS.interactionEditable, 'divInteractionDialogButtonSet' ); // if (instance.interactionEditable) { // Fse.setInteractionButtons('interaction-dialog-buttons-detail-pend-edit'); // } else { // Fse.setInteractionButtons('interaction-dialog-buttons-close'); // } // } else { // //Fse.Ajax.updateContent( Fse.CLOS.baseURL+'?view=interaction-dialog-buttons-detail-closed&edit='+Fse.CLOS.interactionEditable, 'divInteractionDialogButtonSet' ); // if (instance.interactionEditable) { // Fse.setInteractionButtons('interaction-dialog-buttons-detail-closed-edit'); // } else { // Fse.setInteractionButtons('interaction-dialog-buttons-close'); // } // } // Fse.CLOS.interactionDialogTabs.set('activeIndex', 0); // Fse.CLOS.setHelpIcon(); instance.gotoCallDetailsTab(); } else { // must do focus() and select() before submit. causes IE crash otherwise if (document.getElementById("srchType-prod").checked) { document.frmInteractionSrchProds.srchKeyword.focus(); document.frmInteractionSrchProds.srchKeyword.select(); } var scrollPos = document.getElementById("divAddProductsResults").scrollTop; // save current top pos document.getElementById("divAddProductsResults").scrollTop = scrollPos; } }) }) } CallEntryPopup.prototype.submitInteraction = function() { let instance = this; let submitPromise = $.Deferred(); let frmInteraction = document.forms.frmInteraction; // document.frmInteraction.action = Fse.CLOS.baseURL+'?do=interaction-dialog-action-update'; let oItemsTable = document.getElementById( "call-products" ); // var _purchProfileLookback = oItemsTable.getAttribute( "FSE:purchProfileLookback" ); // if changing from open to closed, then check for follow up items, otherwise, updating a prev // closed interaction- don't bother with this process again // SCRUM 24885: we are now doing the follow up check on call update too. if ( true || instance.intDisposition == '?' ) { // var arSkus = YAHOO.util.Dom.getElementsByClassName('sku-status-fu-chk', 'select'); var arSkus = $("select.sku-status-fu-chk"); var fuFound = false; for (i=0;i<=arSkus.length-1;i=i+1) { if ((arSkus[i].value == 'FU' || arSkus[i].value == 'TODO') && arSkus[i].getAttribute("sourceType") != 'SPL' ) { fuFound = true; } } var emptyObjectives = instance.chkEmptyObjectives(); if ( frmInteraction.elements.followupDate.value == '' && (fuFound == true || emptyObjectives == true)) { var strFuMsg = 'This call requires a follow up date:'; if (fuFound==true) { strFuMsg = strFuMsg + '\n- At least one item was identified for Follow Up or To Do.'; } if (emptyObjectives == true) { strFuMsg = strFuMsg + '\n- At least one Objective was not addressed with the items presented.'; } alert(strFuMsg); frmInteraction.elements.followupDate.focus(); submitPromise.reject(); return submitPromise; } /* disabled purch profile warning. we are no handling this with the sale type selection (incremental or existing business). if ( Fse.CLOS.alreadyBuying() ) { //return false; if (!confirm('Warning! The red highlighted item(s) have already been reported as sold within the last '+_purchProfileLookback+' days.\nUnless you have sold additional cases, please delete the highlighted item(s), or you will be\noverstating sales on this item. If this is a new or incremental sale, you may proceed.\n\nClick OK if you wish to proceed as is, or Cancel to further review and edit this call.')) { return false; } } */ if ( instance.categoryLevelItemsExist() ) { submitPromise.reject(); return submitPromise; } var _followupDate = frmInteraction.elements.followupDate.value; var _followupDateDownloadReq = document.getElementById("followupDate").getAttribute("fse:followupDownloadRequired").toUpperCase(); var _followupDownloaded = document.getElementById("followupDate").getAttribute("fse:followupDownloaded").toUpperCase(); if ( _followupDate != "" && _followupDateDownloadReq == "TRUE" && _followupDownloaded == "FALSE") { alert("Follow up call has not been downloaded to your calendar."); submitPromise.reject(); return submitPromise; } } // make sure any new opportunities are fully defined if ( instance.chkNewOpportunities() == false ) { submitPromise.reject(); return submitPromise; } if ( instance.chkObjSelections() == false ) { submitPromise.reject(); return submitPromise; } if ( frmInteraction.elements.interactionPurposeId ) { if ( frmInteraction.elements.interactionPurposeId.options[frmInteraction.elements.interactionPurposeId.selectedIndex].getAttribute('fse:allowNoProducts') == 'N' && instance.chkEmptyItems() == true ) { alert('Selected call type requires at least one item presentation.'); submitPromise.reject(); return submitPromise; } } if ( !instance.soldItemsDatesMaxDateCheck() ) { submitPromise.reject(); return submitPromise; } // check sold item order dates if ( !instance.soldItemsDatesOk() ) { if ( !confirm('At least one sold item has an Est Order Date prior to Call Date. Click OK to continue, or Cancel to adjust.') ) { submitPromise.reject(); return submitPromise; } } // check for future call date var oSalesCallDate = new Date( frmInteraction.elements.interactionDate.value ); var oNow = new Date(); var oToday = new Date( oNow.getFullYear(), oNow.getMonth(), oNow.getDate() ); if( oSalesCallDate.getTime() > oToday.getTime() ) { alert( "You cannot close an interaction with a future Sales Call Date - " + frmInteraction.elements.interactionDate.value ); submitPromise.reject(); return submitPromise; } frmInteraction.elements.inProcess.value = 'no'; if (frmInteraction.elements.newFirstName.value == 'First Name') { frmInteraction.elements.newFirstName.value = ''; } if (frmInteraction.elements.newLastName.value == 'Last Name') { frmInteraction.elements.newLastName.value = ''; } frmInteraction.elements.currentObjective.value = instance.objID; if (Fse.FormManager.submit( frmInteraction, false )) { // distributor check - only gets here if client config says distributor not a required field if (frmInteraction.elements.cdrDistributorID.selectedIndex != undefined) { if (frmInteraction.elements.cdrDistributorID[frmInteraction.elements.cdrDistributorID.selectedIndex].value == '0') { if (confirm('No distributor selected. Click OK to continue, or Cancel to select distributor.') == false) { submitPromise.reject(); return submitPromise; } } } // submit let $frmInteraction = $( frmInteraction ); instance.setButtonAreaMessage( "Saving call data..."); $.ajax( { url : Fse.Util.updateURL( instance.baseURL, { do : "interaction-dialog-action-update" } ), method : $frmInteraction.attr( "method" ), data : Fse.Ajax.serialize( $frmInteraction[0] ), headers : { fseAjax : true } }).done( function( result ) { instance.setButtonAreaMessage( "" ); submitPromise.resolve(); }) } else { submitPromise.reject(); } return submitPromise; } CallEntryPopup.prototype.saveInteraction = function() { let instance = this; let savePromise = $.Deferred(); let _callDtStatus = Fse.FormManager.checkField(document.forms.frmInteraction.elements.interactionDate); let _followupDtStatus = Fse.FormManager.checkField(document.forms.frmInteraction.elements.followupDate); if (document.forms.frmInteraction.elements.newFirstName.value == 'First Name') { document.forms.frmInteraction.elements.newFirstName.value = ''; } if (document.forms.frmInteraction.elements.newLastName.value == 'Last Name') { document.forms.frmInteraction.elements.newLastName.value = ''; } if (_callDtStatus >= 2) { alert('Enter a valid call date in the format mm/dd/yyyy.'); savePromise.reject(); return savePromise; } if (_followupDtStatus >= 2) { alert('Enter a valid follow up date in the format mm/dd/yyyy.'); savePromise.reject(); return savePromise; } // other misc checks if ( instance.chkNewOpportunities() == false ) { savePromise.reject(); return savePromise; } if ( instance.chkObjSelections() == false ) { savePromise.reject(); return savePromise; } if (document.frmInteraction.dispositionUserID.selectedIndex == 0) { alert('You must select a Sales Rep.'); document.forms.frmInteraction.element.dispositionUserID.focus(); savePromise.reject(); return savePromise; } // attempt to save document.forms.frmInteraction.elements.inProcess.value = 'yes'; let frmInteraction = $(document.forms.frmInteraction); instance.setButtonAreaMessage( "Saving call data..." ); $.ajax( { url : Fse.Util.updateURL( instance.baseURL, { do : "interaction-dialog-action-update" } ), method : frmInteraction.attr( "method" ), data : Fse.Ajax.serialize( frmInteraction[0] ), headers : { fseAjax : true } }).done( function( result ) { //console.log( "saveInteraction", result ); instance.setButtonAreaMessage( "" ); savePromise.resolve(); }) return savePromise; } CallEntryPopup.prototype.setButtonAreaMessage = function( message ) { let instance = this; instance.buttonAreaMessage.empty(); if( message != "" ) instance.buttonAreaMessage.text( message ); } CallEntryPopup.prototype.saveBrief = function() { let instance = this; $.Deferred(); let saveBriefURL = Fse.Util.updateURL( instance.baseURL, { do : "interaction-dialog-action-update-brief" }); let saveBriefPromise = $.ajax( { url : saveBriefURL, method : "POST", data : Fse.Ajax.serialize( document.forms.frmInteraction ), }) saveBriefPromise.done( function( result, statusText, jqXhr ) { // console.log( "saveBrief", jqXhr ); }) return saveBriefPromise; } CallEntryPopup.prototype.categoryLevelItemsExist = function() { let codesReqSkuList = document.getElementById("call-products").getAttribute("FSE:stageCodesReqSku"); let arCodesReqSku = codesReqSkuList.split(","); // var arItmStatus = YAHOO.util.Dom.getElementsByClassName('sku-status-fu-chk', 'select'); let arItmStatus = $("select.sku-status-fu-chk"); for (i=0;i<=arItmStatus.length-1;i=i+1) { // check sale status sku requirement if ( arItmStatus[i].value == 'STD' && arItmStatus[i].getAttribute("fse:itemtype") == 'PRD' && arCodesReqSku.indexOf("C") >= 0 ) { alert('Sold items at a category level must be converted to a SKU.'); return true; } // check no sale status sku requirement if ( arItmStatus[i].value == 'NS' && arItmStatus[i].getAttribute("fse:itemtype") == 'PRD' && arCodesReqSku.indexOf("R") >= 0 ) { alert('No Sale items at a category level must be converted to a SKU.'); return true; } } return false; } CallEntryPopup.prototype.chkEmptyObjectives = function(objId) { // check for any objectives without items presented (make sure status not delete) //var objList = document.frmInteraction.objectiveList.value; let objList = document.forms.frmInteraction.elements.ActiveObjectiveList.value; if (objList != '') { let arObjectives = objList.split(","); for(let i=0; i < arObjectives.length; i++) { // check items with status selection let noItems = true; // var arItmStatus = YAHOO.util.Dom.getElementsByClassName('sku-status-fu-chk', 'select'); let arItmStatus = $("select.sku-status-fu-chk"); for (var j=0; j < arItmStatus.length; j++) { let itmObj = arItmStatus[j].getAttribute("FSE:obj"); let itmRef = arItmStatus[j].getAttribute("reference"); let itemStatus = document.getElementById("itemStatus_"+itmRef); if (itemStatus.value != 'DLT' && itmObj == arObjectives[i]) { noItems = false; } } if (noItems == true) { // if not found, check items without status selection - those identified as "multiple objectives" // reference back to original item status to make sure not set to delete // var arMultiItems = YAHOO.util.Dom.getElementsByClassName('multi-item-here', 'div'); let arMultiItems = $("div.multi-item-here" ); for (let k=0; k < arMultiItems.length; k++) { let multiItmObj = arMultiItems[k].getAttribute("FSE:obj"); let origItmRef = arMultiItems[k].getAttribute("reference"); let itemStatus = document.getElementById("itemStatus_"+origItmRef); if (itemStatus && itemStatus.value != 'DLT' && multiItmObj == arObjectives[i]) { noItems = false; } } if (noItems == true) { return true; } } } } return false; } CallEntryPopup.prototype.soldItemsDatesOk = function() { // if any sold items have an order date prior to call date, returns false // scrum 19029 // exit and return true if order date is not part of the client configuration let oItemsTable = document.getElementById( "call-products" ); let sConfig = oItemsTable.getAttribute( "FSE:statusConfig" ); if ( sConfig.indexOf("OD|") == -1 && sConfig.indexOf("|OD") == -1 ) { return true; } let dtSalesCallDate = new Date( document.forms.frmInteraction.elements.interactionDate.value ); // var arItmStatus = YAHOO.util.Dom.getElementsByClassName('sku-status-fu-chk', 'select'); let arItmStatus = $("select.sku-status-fu-chk"); for (i=0;i<=arItmStatus.length-1;i=i+1) { if ( arItmStatus[i].value == 'STD' ) { let itmRef = arItmStatus[i].getAttribute("reference"); let oAvailableDate = document.getElementById("availableDate_"+itmRef); if (oAvailableDate) { let dtAvailDate = new Date( oAvailableDate.value ); let tmAvailDate = dtAvailDate.getTime(); if (!isNaN(tmAvailDate) && tmAvailDate < dtSalesCallDate.getTime() ) { return false; } } } } return true; } CallEntryPopup.prototype.soldItemsDatesMaxDateCheck = function() { let oItemsTable = document.getElementById( "call-products" ); let maxDaysOutSetting = oItemsTable.getAttribute( "FSE:availableDateOffsetMax" ); let maxDaysOut = parseInt( maxDaysOutSetting ); if ( maxDaysOut == -1 ) { return true; } let dtSalesCallDate = new Date( document.forms.frmInteraction.elements.interactionDate.value ); // var arItmStatus = YAHOO.util.Dom.getElementsByClassName('sku-status-fu-chk', 'select'); let arItmStatus = $("select.sku-status-fu-chk"); for (i=0;i<=arItmStatus.length-1;i=i+1) { if ( arItmStatus[i].value == 'STD' ) { let itmRef = arItmStatus[i].getAttribute("reference"); let oAvailableDate = document.getElementById("availableDate_"+itmRef); if (oAvailableDate) { let dtAvailDate = new Date( oAvailableDate.value ); if (!isNaN(dtAvailDate) && parseInt((dtAvailDate - dtSalesCallDate) / (1000 * 60 * 60 * 24), 10) > maxDaysOut ) { if ( maxDaysOut == 0 ) { alert('Est order date cannot exceed the call date.'); } else { alert('Est order date cannot be more than ' + maxDaysOutSetting + ' days out from the call date.'); } oAvailableDate.focus(); return false; } } } } return true; } CallEntryPopup.prototype.chkEmptyItems = function() { //var arItmStatus = YAHOO.util.Dom.getElementsByClassName('sku-status-fu-chk', 'select'); let arItmStatus = $("select.sku-status-fu-chk" ); for (i=0;i<=arItmStatus.length-1;i=i+1) { // check to see if item was "presented" let _itemId = arItmStatus[i].getAttribute("id"); let _start = _itemId.indexOf("_"); let _len = _itemId.length; let _itemIdentifier = _itemId.slice(_start,_len) let e = document.getElementById("presented" + _itemIdentifier + "_y"); let _presented = true; if (e) { _presented = ( e.checked ); } else { _presented = true; } if ( arItmStatus[i].value != 'DLT' && _presented ) { return false; } } return true; } CallEntryPopup.prototype.chkObjSelections = function() { // var arObjStatus = YAHOO.util.Dom.getElementsByClassName('sku-objective-chk', 'select'); let arObjStatus = $("select.sku-objective-chk"); for (i=0;i<=arObjStatus.length-1;i=i+1) { if (arObjStatus[i].value == '0') { let itmRef = arObjStatus[i].getAttribute("reference"); let itemStatus = document.getElementById("itemStatus_"+itmRef); if (itemStatus.value != 'DLT') { alert('Select objective for item.'); arObjStatus[i].focus(); return false; } } } return true; } CallEntryPopup.prototype.chkNewOpportunities = function() { // var arItmStatus = YAHOO.util.Dom.getElementsByClassName('sku-status-fu-chk', 'select'); let arItmStatus = $( "select.sku-status-fu-chk" ); for (i=0;i<=arItmStatus.length-1;i=i+1) { // the opportunity options all start with OPP + the percent likelihood if (arItmStatus[i].value.substring(0,3) == 'OPP' ) { let itmRef = arItmStatus[i].getAttribute("reference"); // if idea stage (0 likelihood), then let slide on requirement for date and volume if (arItmStatus[i].value.substring(3) != '0' ) { let estCloseDate = document.getElementById("estclosedate_"+itmRef); if (estCloseDate.value == '') { alert('Est. Close Date must be specified for New Opportunities.'); estCloseDate.focus(); return false; } let casesWK = document.getElementById("casesWK_"+itmRef); if (casesWK.value == '' || casesWK.value == '0') { alert('Volume quantity must be specified for New Opportunities.'); casesWK.focus(); return false; } } let itemComment = document.getElementById("itemComment_"+itmRef); if (itemComment.value == '') { alert('Comment must be entered for New Opportunities.'); itemComment.focus(); return false; } } } return true; } CallEntryPopup.prototype.refreshProductsDisplay = function() { let instance = this; let refreshPromise = $.Deferred(); instance.saveBrief().done( function() { let scrollPos = document.getElementById("divProductsForm").scrollTop; // save current top pos instance.refreshProductsDisplayRaw().done( function() { document.getElementById("divProductsForm").scrollTop = scrollPos; refreshPromise.resolve(); }) }) return refreshPromise; } CallEntryPopup.prototype.refreshProductsDisplayRaw = function() { let instance = this; let divProductsForm = $("#divProductsForm"); divProductsForm.empty().text( "loading..." ); return $.ajax( { url : Fse.Util.updateURL( instance.baseURL, { view : "interaction-dialog-products-form", interactionID : instance.interactionID, editMode : instance.interactionEditable, updateObjectiveLinks : instance.productsUpdated ? 'false' : 'true', mode : "direct" }), headers : { fseAjax : true } }).done( function( result ) { divProductsForm.empty().append( result ); Fse.DialogManager.initializePopupDateBoxes( divProductsForm ) let expandLink = divProductsForm.find( "#prdlist-expand-lnk"); if( expandLink.length ) { expandLink.on( "click", function() { instance.toggleCallProductsDiv(); }) } instance._bindConvertPRDtoSKU( divProductsForm ); // document.getElementById( "divProductsForm" ).setAttribute( "FSE:productsUpdated", "true" ); instance.productsUpdated = true; }) } CallEntryPopup.prototype.getCallDetailsToolbarItems = function() { let instance = this; if (instance.intDisposition == '?') { if (instance.interactionEditable) { instance.buttonSet = 'interaction-dialog-buttons-detail-pend-edit'; } else { instance.buttonSet = 'interaction-dialog-buttons-close'; } } else { if (instance.interactionEditable) { instance.buttonSet = 'interaction-dialog-buttons-detail-closed-edit'; } else { instance.buttonSet = 'interaction-dialog-buttons-close'; } } let finalizeText = "Complete Call"; let saveAsOpenText = "Save as Planned"; let callDetailsToolbarItems = []; callDetailsToolbarItems.push( instance._helpToolbarItem() ); let buttonAreaMessageItem = { toolbar : "bottom", location : "before", template : function() { instance.buttonAreaMessage = $("