/************************************* * SPDX-FileCopyrightText: 2009-2020 Vtenext S.r.l. * SPDX-License-Identifier: AGPL-3.0-only ************************************/ // crmv@42024 - many changes // crmv@150748 window.VTE = window.VTE || {}; VTE.Inventory = VTE.Inventory || { // crmv@162674 /** * @deprecated * Please use the more general VTE.submitForm */ saveRecord: function(self, options) { return VTE.submitCompressedForm(self, options); } // crmv@162674e } // crmv@150748e function copyAddressRight(form) { if(typeof(form.bill_street) != 'undefined' && typeof(form.ship_street) != 'undefined') form.ship_street.value = form.bill_street.value; if(typeof(form.bill_city) != 'undefined' && typeof(form.ship_city) != 'undefined') form.ship_city.value = form.bill_city.value; if(typeof(form.bill_state) != 'undefined' && typeof(form.ship_state) != 'undefined') form.ship_state.value = form.bill_state.value; if(typeof(form.bill_code) != 'undefined' && typeof(form.ship_code) != 'undefined') form.ship_code.value = form.bill_code.value; if(typeof(form.bill_country) != 'undefined' && typeof(form.ship_country) != 'undefined') form.ship_country.value = form.bill_country.value; if(typeof(form.bill_pobox) != 'undefined' && typeof(form.ship_pobox) != 'undefined') form.ship_pobox.value = form.bill_pobox.value; return true; } function copyAddressLeft(form) { if(typeof(form.bill_street) != 'undefined' && typeof(form.ship_street) != 'undefined') form.bill_street.value = form.ship_street.value; if(typeof(form.bill_city) != 'undefined' && typeof(form.ship_city) != 'undefined') form.bill_city.value = form.ship_city.value; if(typeof(form.bill_state) != 'undefined' && typeof(form.ship_state) != 'undefined') form.bill_state.value = form.ship_state.value; if(typeof(form.bill_code) != 'undefined' && typeof(form.ship_code) != 'undefined') form.bill_code.value = form.ship_code.value; if(typeof(form.bill_country) != 'undefined' && typeof(form.ship_country) != 'undefined') form.bill_country.value = form.ship_country.value; if(typeof(form.bill_pobox) != 'undefined' && typeof(form.ship_pobox) != 'undefined') form.bill_pobox.value = form.ship_pobox.value; return true; } function settotalnoofrows() { if (checkJSOverride(arguments)) return callJSOverride(arguments); //crmv@35654 if (checkJSExtension(arguments)) if (!callJSExtension(arguments)) return false; // crmv@65067 var max_row_count = document.getElementById('proTab').rows.length; max_row_count = eval(max_row_count)-2; //set the total number of products document.EditView.totalProductCount.value = max_row_count; } // crmv@83877 - moved user number funcs //crmv@54013 function alertInvalid(id, label) { alert(alert_arr.INVALID + label); window.setTimeout(function(){ jQuery('#'+id).focus(); }, 100); } //crmv@54013e function productPickList(currObj,module,row_no,autocomplete) { //crmv@29190 var record_id = '', currentRowId = parseInt(currObj.id.match(/([0-9]+)$/)[1]), // If we have mismatching rowId and currentRowId, it is due swapping of rows rowId = (rowId != currentRowId ? currentRowId : row_no), currencyid = document.getElementById("inventory_currency").value, popuptype = (module == 'PurchaseOrder' ? 'inventory_prod_po' : 'inventory_prod'); if (document.getElementsByName("account_id").length != 0) record_id = document.EditView.account_id.value; //crmv@21048m //crmv@29190 var options = "&return_module="+module+"¤cyid="+currencyid; if (record_id != '') options += "&relmod_id="+record_id+"&parent_module=Accounts"; var url = "module=Products&action=Popup&html=Popup_picker&select=enable&form=HelpDeskEditView&popuptype="+popuptype+"&curr_row="+rowId+options; if (autocomplete == 'yes') return url; else openPopup("index.php?"+url,"productWin","width=640,height=600,resizable=0,scrollbars=0,status=1,top=150,left=200"); //crmv@21048me //crmv@29190e } function priceBookPickList(currObj, row_no) { var rowId=row_no, currencyid = jQuery('#inventory_currency').val(), productId = jQuery("#hdnProductId"+rowId).val() || -1; //crmv@21048m openPopup("index.php?module=PriceBooks&action=Popup&html=Popup_picker&form=EditView&popuptype=inventory_pb&fldname=listPrice"+rowId+"&productid="+productId+"¤cyid="+currencyid,"priceBookWin","width=640,height=565,resizable=0,scrollbars=0,top=150,left=200"); //crmv@21048m e } function deleteRow(module,i,image_path) { if (checkJSOverride(arguments)) return callJSOverride(arguments); //crmv@35654 if (checkJSExtension(arguments)) if (!callJSExtension(arguments)) return false; // crmv@65067 var tableName = document.getElementById('proTab'); var prev = tableName.rows.length; var iCount; jQuery('#row'+i).hide(); image_path = document.getElementById("hidImagePath").value; iMax = tableName.rows.length; // find previous visible index for (iCount=i; iCount>=1; iCount--) { if (document.getElementById("row"+iCount) && document.getElementById("row"+iCount).style.display != 'none') { iPrevRowIndex = iCount; break; } } iPrevCount = iPrevRowIndex; oCurRow = eval(document.getElementById("row"+i)); sTemp = oCurRow.cells[0].innerHTML; ibFound = sTemp.indexOf("down_layout.gif"); if (i != 2 && ibFound == -1 && iPrevCount != 1) { oPrevRow = eval(document.getElementById("row"+iPrevCount)); iPrevCount = eval(iPrevCount); // add icon for recycle bin, deleted=0, arrow up (deletes DOWN arrow) oPrevRow.cells[0].innerHTML = 'delete

arrow_upward'; } else if(iPrevCount == 1) { iSwapIndex = i; for(iCount=i;iCount<=iMax-2;iCount++) { if(document.getElementById("row"+iCount) && document.getElementById("row"+iCount).style.display != 'none') { iSwapIndex = iCount; break; } } if(iSwapIndex == i) { // enter here when only 1 prod is left oPrevRow = eval(document.getElementById("row"+iPrevCount)); iPrevCount = eval(iPrevCount); // delete all arrows and set deleted = 0 for first item oPrevRow.cells[0].innerHTML = ' '; } } jQuery("#hdnProductId"+i).val(""); jQuery("#deleted"+i).val(1); calcTotal(); } // Function to Calcuate the Inventory total including all products function calcTotal() { if (checkJSOverride(arguments)) return callJSOverride(arguments); //crmv@35654 if (checkJSExtension(arguments)) if (!callJSExtension(arguments)) return false; // crmv@65067 // validation if (!validateUserNumber(jQuery('#adjustment').val())) { alert(alert_arr.VALID_ADJUSTMENT); window.setTimeout(function(){ jQuery('#adjustment').focus(); }, 100); return; } var max_row_count = document.getElementById('proTab').rows.length; max_row_count = eval(max_row_count)-2; //Because the table has two header rows. so we will reduce two from row length var netprice = 0.00; for (var i=1; i<=max_row_count; ++i) { calcProductTotal(i); } calcGrandTotal(); } // Function to Calculate the Total for a particular product in an Inventory // calculate margin : crmv@44323 crmv@55228 function calcProductTotal(rowId) { if (checkJSOverride(arguments)) return callJSOverride(arguments); //crmv@35654 if (checkJSExtension(arguments)) if (!callJSExtension(arguments)) return false; // crmv@65067 // skip if deleted if (jQuery('#deleted'+rowId).val() != 0) return; // do the calculations (using float types) var quantity = parseUserNumber(jQuery("#qty"+rowId).val()), listprice = parseUserNumber(jQuery("#listPrice"+rowId).val()), total = quantity * listprice, discountTotal = parseUserNumber(jQuery("#discountTotal"+rowId).html()), totalAfterDiscount = total - discountTotal, taxTotal = 0.0, netprice = totalAfterDiscount, tax_type = jQuery('#taxtype').val(), unit_cost = jQuery('#unit_cost'+rowId).val(), total_cost = unit_cost * quantity, margin = ''; //if the tax type is individual then add the tax with net price if (tax_type == 'individual') { callTaxCalc(rowId); //crmv@23660 netprice += parseUserNumber(jQuery("#taxTotal"+rowId).html()); } // margin if (unit_cost != '' && totalAfterDiscount != 0) { var t_margin = (totalAfterDiscount - total_cost)/totalAfterDiscount; if (!isNaN(t_margin)) { margin = Math.round(t_margin * 100) + '%'; } } // now set the results (formatting them) jQuery("#productTotal"+rowId).html(formatUserNumber(total)); jQuery("#totalAfterDiscount"+rowId).html(formatUserNumber(totalAfterDiscount)); jQuery("#netPrice"+rowId).html(formatUserNumber(netprice)); jQuery("#netPriceInput"+rowId).val(netprice); // crmv@29686 jQuery("#margin"+rowId).html(margin); } // crmv@44323e crmv@55228e // Function to Calculate the Net and Grand total for all the products together of an Inventory function calcGrandTotal() { if (checkJSOverride(arguments)) return callJSOverride(arguments); //crmv@35654 if (checkJSExtension(arguments)) if (!callJSExtension(arguments)) return false; // crmv@65067 var i, netTotal = 0.0, grandTotal = 0.0, discountTotal_final = parseUserNumber(jQuery("#discountTotal_final").html()), sh_amount = parseUserNumber(jQuery("#shipping_handling_charge").val()), sh_tax = parseUserNumber(jQuery("#shipping_handling_tax").html()), adjustment = parseUserNumber(jQuery("#adjustment").val()), taxtype = jQuery('#taxtype').val(), adj_type = jQuery("#adjustmentType").val(), finalTax = (taxtype == 'group' ? parseUserNumber(jQuery("#tax_final").html()) : 0.0); // calculate the net total using non deleted products jQuery('#proTab input[id^=hdnProductId]').each(function(index, item) { var pid = item.id.replace('hdnProductId', ''); if (jQuery('#deleted'+pid).val() == 0) { netTotal += parseUserNumber(jQuery('#netPrice'+pid).html()); } }); setDiscount(this,'_final'); calcGroupTax(); // calc the total, minus discounts + taxes (if present) grandTotal = netTotal - discountTotal_final + finalTax; // add shipping charges if (sh_amount > 0 ) { grandTotal += sh_amount + sh_tax; } // add/subtract adjustment if (adjustment > 0) { if (adj_type == '+') { grandTotal += adjustment; } else { grandTotal -= adjustment; } } // set the output jQuery("#netTotal").html(formatUserNumber(netTotal)); jQuery("#subtotal").val(netTotal); jQuery("#grandTotal").html(formatUserNumber(grandTotal)); jQuery("#total").val(grandTotal); } //This function is used to validate the Inventory modules function validateInventory(module) { if (checkJSOverride(arguments)) return callJSOverride(arguments); //crmv@35654 if (checkJSExtension(arguments)) if (!callJSExtension(arguments)) return false; // crmv@65067 if (!formValidate()) return false //for products, vendors and pricebook modules we won't validate the product details. here return the control if (module == 'Products' || module == 'Vendors' || module == 'PriceBooks' || module == 'Services') { return true; } var max_row_count = document.getElementById('proTab').rows.length; max_row_count = eval(max_row_count)-2;//As the table has two header rows, we will reduce two from table row length //crmv@30721 if (max_row_count == 0) { alert(alert_arr.NO_LINE_ITEM_SELECTED); return false; } if(!FindDuplicate()) return false; //crmv@30721e for (var i=1;i<=max_row_count;i++) { var qty = jQuery("#qty"+i).val(), listPrice = jQuery('#listPrice'+i).val(); //if the row is deleted then avoid validate that row values if (jQuery("#deleted"+i).val() == '1') continue; if (jQuery('#hdnProductId'+i).val() <= 0) { alertInvalid('productName'+i, alert_arr.LINE_ITEM); return false; } if (!validateUserNumber(qty) || parseUserNumber(qty) <= 0) { alertInvalid('qty'+i, 'Qty'); return false } if (!validateUserNumber(listPrice)) { alertInvalid("listPrice"+i,alert_arr.LIST_PRICE); return false } } //Product - Discount validation if(!validateProductDiscounts()) return false; //Final Discount validation - not allow negative values discount_checks = document.getElementsByName("discount_final"); //Percentage selected, so validate the percentage if(discount_checks[1].checked == true) { //crmv@2539m var discount_percentage_value = jQuery("#discount_percentage_final").val() || '0', discount_percentage_values = trim(discount_percentage_value).split("+"); for (var j=0; j 0) { prodIds.push(item.id.replace('hdnProductId', '')); prodRealIds.push(item.value); } }); // scan the array for (i=0; i 0) { if (!confirm(alert_arr.SELECTED_MORE_THAN_ONCE + "\n" + duplicate_products + "\n" + alert_arr.WANT_TO_CONTINUE)) { return false; } } return true; } // crmv@192033 function loadTaxes_Ajax(curr_row) { //Retrieve all the tax values for the currently selected product var lineItemType = jQuery("#lineItemType"+curr_row).val(); jQuery.ajax({ url: 'index.php', method: 'POST', data: 'module='+lineItemType+'&action='+lineItemType+'Ajax&file=InventoryTaxAjax&productid='+jQuery("#hdnProductId"+curr_row).val()+'&curr_row='+curr_row+'&productTotal='+jQuery('#totalAfterDiscount'+curr_row).html(), success: function(result) { jQuery("#tax_div"+curr_row).html(result); jQuery("#taxTotal"+curr_row).html( formatUserNumber(jQuery('#hdnTaxTotal'+curr_row).val()) ); calcTotal(); callTaxCalc(curr_row); //crmv@65492 calcTotal(); // crmv@92378 - added to refresh the product total with the tax total } }); } // crmv@192033e function fnAddTaxConfigRow(sh) { var table_id = 'add_tax'; var td_id = 'td_add_tax'; var label_name = 'addTaxLabel'; var label_val = 'addTaxValue'; var add_tax_flag = 'add_tax_type'; if(sh != '' && sh == 'sh') { table_id = 'sh_add_tax'; td_id = 'td_sh_add_tax'; label_name = 'sh_addTaxLabel'; label_val = 'sh_addTaxValue'; add_tax_flag = 'sh_add_tax_type'; } var tableName = document.getElementById(table_id); var prev = tableName.rows.length; var row = tableName.insertRow(0); var colone = row.insertCell(0); var coltwo = row.insertCell(1); colone.className = "cellLabel small"; coltwo.className = "cellText small"; colone.innerHTML="
"; coltwo.innerHTML="
"; document.getElementById(td_id).innerHTML=" "; } function validateNewTaxType(fieldname, fieldvalue) { if (checkJSOverride(arguments)) return callJSOverride(arguments); //crmv@35654 if (checkJSExtension(arguments)) if (!callJSExtension(arguments)) return false; // crmv@65067 if(trim(document.getElementById(fieldname).value)== '') { alert(alert_arr.VALID_TAX_NAME); return false; } if(trim(document.getElementById(fieldvalue).value)== '') { alert(alert_arr.CORRECT_TAX_VALUE); return false; } else { if(!validateUserNumber(document.getElementById(fieldvalue).value)) // crmv@118512 { alert(alert_arr.NOT_VALID_ENTRY); //crmv@43358 return false; } } return true; } // crmv@118512 function validateTaxes(countname) { if (checkJSOverride(arguments)) return callJSOverride(arguments); //crmv@35654 if (checkJSExtension(arguments)) if (!callJSExtension(arguments)) return false; // crmv@65067 var taxcount = parseInt(jQuery('#'+countname).val())+1; // crmv@198415 if(countname == 'tax_count') { var taxprefix = 'tax'; var taxLabelPrefix = 'taxlabel_tax'; } else { var taxprefix = 'shtax'; var taxLabelPrefix = 'taxlabel_shtax'; } for (var i=1;i<=taxcount;i++) { var taxname = taxprefix + i; var labelname = taxLabelPrefix + i; var taxval = jQuery('#'+taxname).val(); var taxLabelVal = jQuery('#'+labelname).val(); // remove spaces from label jQuery('#'+labelname).val(taxLabelVal.replace(/\s+/g,'')); // check if label empty if (!jQuery('#'+(taxLabelPrefix+i)).val()) { alert(alert_arr.LABEL_SHOULDNOT_EMPTY); return false } //Tax value - numeric validation if(!validateUserNumber(taxval)) { alert("'"+taxval+"' "+alert_arr.NOT_VALID_ENTRY); return false; } } return true; } // crmv@118512e function decideTaxDiv() { var taxtype = document.getElementById("taxtype").value; calcTotal(); if (taxtype == 'group') { //if group tax selected then we have to hide the individual taxes and also calculate the group tax hideIndividualTaxes(); calcGroupTax(); } else if (taxtype == 'individual') { hideGroupTax(); } } function hideIndividualTaxes() { jQuery('#proTab tr[id^=individual_tax_row]').removeClass('TaxShow').addClass('TaxHide'); jQuery('#proTab td[id^=taxTotal]').hide(); jQuery('#finalProTab #group_tax_row').removeClass('TaxHide').addClass('TaxShow'); } function hideGroupTax() { jQuery('#proTab tr[id^=individual_tax_row]').removeClass('TaxHide').addClass('TaxShow'); jQuery('#proTab td[id^=taxTotal]').show(); jQuery('#finalProTab #group_tax_row').removeClass('TaxShow').addClass('TaxHide'); } function setDiscount(currObj,curr_row) { if (checkJSOverride(arguments)) return callJSOverride(arguments); //crmv@35654 if (checkJSExtension(arguments)) if (!callJSExtension(arguments)) return false; // crmv@65067 // validation if (curr_row != '_final') { if (!validateUserNumber(jQuery('#qty'+curr_row).val())) { alertInvalid('qty'+curr_row, 'Qty'); return; } if (!validateUserNumber(jQuery('#listPrice'+curr_row).val())) { alertInvalid('listPrice'+curr_row, alert_arr.LIST_PRICE); return; } } // stock check if (gVTModule == 'Invoice' && jQuery('#lineItemType'+curr_row).val() != 'Services') { stock_alert(curr_row); } var i, j, discount_amount = 0.0, discount_checks = document.getElementsByName("discount"+curr_row) || []; if (discount_checks[0].checked == true) { jQuery("#discount_type"+curr_row).val('zero'); jQuery("#discount_percentage"+curr_row).hide(); jQuery("#discount_amount"+curr_row).hide(); } else if(discount_checks[1].checked == true) { jQuery("#discount_type"+curr_row).val('percentage'); jQuery("#discount_percentage"+curr_row).show(); jQuery("#discount_amount"+curr_row).hide(); //This is to calculate the final discount //crmv@2539m var discount_percentage_final_value = trim(jQuery("#discount_percentage"+curr_row).val()) || '0', discount_percentage_final_values = discount_percentage_final_value.split("+"), totalName = (curr_row == '_final' ? 'netTotal' : "productTotal"+curr_row ), total_tmp = parseUserNumber(jQuery('#'+totalName).html()); if (discount_percentage_final_values.length > 5) { alert(alert_arr.VALID_DISCOUNT_PERCENT); return false; } // crmv@193848 - round the discount only at the end var new_total = total_tmp; for (i=0; i 100) { alert(alert_arr.VALID_DISCOUNT_PERCENT); return false; } new_total -= new_total * discountPerc / 100.0; } new_total = roundValueFloat(new_total); discount_amount = total_tmp - new_total; // crmv@193848e //crmv@2539me } else if(discount_checks[2].checked == true) { jQuery("#discount_type"+curr_row).val('amount'); jQuery("#discount_percentage"+curr_row).hide(); jQuery("#discount_amount"+curr_row).show(); if (!validateUserNumber(jQuery('#discount_amount'+curr_row).val())) { alertInvalid('discount_amount'+curr_row, alert_arr.VALID_DISCOUNT_AMOUNT); return; } discount_amount = parseUserNumber(jQuery("#discount_amount"+curr_row).val()); } jQuery("#discountTotal"+curr_row).html(formatUserNumber(discount_amount)); // Update product total as discount would have changed. if (curr_row != '_final') { calcProductTotal(curr_row); } } //This function is added to call the tax calculation function function callTaxCalc(curr_row) { if (checkJSOverride(arguments)) return callJSOverride(arguments); //crmv@35654 if (checkJSExtension(arguments)) if (!callJSExtension(arguments)) return false; // crmv@65067 //when we change discount or list price, we have to calculate the taxes again before calculate the total var tax_count = jQuery('#tax_table'+curr_row+' tr').length-1; //subtract the title tr length for (var i=0; i 100) { //crmv@43358 alert(alert_arr.VALID_TAX_PERCENT+' : '+group_tax_percentage); return false; } group_tax_total += tax_amount; jQuery("#group_tax_amount"+i).val(formatUserNumber(tax_amount)); } jQuery("#tax_final").html(formatUserNumber(group_tax_total)); } function calcSHTax() { if (checkJSOverride(arguments)) return callJSOverride(arguments); //crmv@35654 if (checkJSExtension(arguments)) if (!callJSExtension(arguments)) return false; // crmv@65067 // validation if (!validateUserNumber(jQuery('#shipping_handling_charge').val())) { alertInvalid('shipping_handling_charge', alert_arr.VALID_SHIPPING_CHARGE); return; } var sh_tax_count = jQuery("#sh_tax_count").val(), sh_charge = parseUserNumber(jQuery("#shipping_handling_charge").val()), sh_tax_total = 0.00, total_tax = 0.00; // ROUND NUMBERS AT EVERY ROUND for (var i=1; i<=sh_tax_count; ++i) { // validation if (!validateUserNumber(jQuery('#sh_tax_percentage'+i).val())) { alertInvalid('sh_tax_percentage'+i, alert_arr.VALID_SH_TAX); return; } var sh_tax_percentage = parseUserNumber(jQuery("#sh_tax_percentage"+i).val()), tax_amount = roundValueFloat(sh_charge * sh_tax_percentage / 100.0); if (sh_tax_percentage < -100 || sh_tax_percentage > 100) { //crmv@43358 alert(alert_arr.VALID_SH_TAX); return false; } sh_tax_total += tax_amount; jQuery("#sh_tax_amount"+i).val(formatUserNumber(tax_amount)); } jQuery("#shipping_handling_tax").html(formatUserNumber(sh_tax_total)); calcTotal(); } function validateProductDiscounts() { if (checkJSOverride(arguments)) return callJSOverride(arguments); //crmv@35654 if (checkJSExtension(arguments)) if (!callJSExtension(arguments)) return false; // crmv@65067 var max_row_count = document.getElementById('proTab').rows.length; max_row_count = eval(max_row_count)-2;//As the table has two header rows, we will reduce two from table row length for(var i=1; i<=max_row_count; ++i) { //if the row is deleted then avoid validate that row values if(jQuery("#deleted"+i).val() == '1') continue; discount_checks = document.getElementsByName("discount"+i); //Percentage selected, so validate the percentage if(discount_checks[1].checked == true) { //crmv@2539m var discount_percentage_value = jQuery("#discount_percentage"+i).val() || '0', discount_percentage_values = trim(discount_percentage_value).split("+"); for (var j=0; j eval(stock)) { jQuery("#stock_alert"+curr_row).html(''+alert_arr.STOCK_IS_NOT_ENOUGH+''); } else { jQuery("#stock_alert"+curr_row).html(''); } //getObj("stock_alert"+curr_row).innerHTML=''+alert_arr.INVALID_QTY+''; } // Function to Get the price for all the products of an Inventory based on the Currency choosen by the User function updatePrices() { if (checkJSOverride(arguments)) return callJSOverride(arguments); //crmv@35654 if (checkJSExtension(arguments)) if (!callJSExtension(arguments)) return false; // crmv@65067 var prev_cur = document.getElementById('prev_selected_currency_id'); var inventory_currency = document.getElementById('inventory_currency'); if(confirm(alert_arr.MSG_CHANGE_CURRENCY_REVISE_UNIT_PRICE)) { var productsListElem = document.getElementById('proTab'); if (productsListElem == null) return; var max_row_count = productsListElem.rows.length; max_row_count = eval(max_row_count)-2;//Because the table has two header rows. so we will reduce two from row length var products_list = ""; for(var i=1;i<=max_row_count;i++) { var productid = document.getElementById("hdnProductId"+i).value; if (i != 1) products_list = products_list + "::"; products_list = products_list + productid; } if (prev_cur != null && inventory_currency != null) prev_cur.value = inventory_currency.value; var currency_id = inventory_currency.value; //Retrieve all the prices for all the products in currently selected currency // crmv@192033 jQuery.ajax({ url: 'index.php', method: 'POST', data: 'module=Products&action=ProductsAjax&file=InventoryPriceAjax¤cyid='+currency_id+'&productsList='+products_list, success: function(result) { if(trim(result).indexOf('SUCCESS') == 0) { var res = trim(result).split("$"); updatePriceValues(res[1]); } else { alert(alert_arr.OPERATION_DENIED); } } }); // crmv@192033e } else { if (prev_cur != null && inventory_currency != null) inventory_currency.value = prev_cur.value; } } // Function to Update the price for the products in the Inventory Edit View based on the Currency choosen by the User. function updatePriceValues(pricesList) { if (checkJSOverride(arguments)) return callJSOverride(arguments); //crmv@35654 if (checkJSExtension(arguments)) if (!callJSExtension(arguments)) return false; // crmv@65067 if (pricesList == null || pricesList == '') return; var prices_list = pricesList.split("::"); var productsListElem = document.getElementById('proTab'); if (productsListElem == null) return; var max_row_count = productsListElem.rows.length; max_row_count = eval(max_row_count)-2;//Because the table has two header rows. so we will reduce two from row length var products_list = ""; for(var i=1;i<=max_row_count;i++) { var list_price_elem = document.getElementById("listPrice"+i); var unit_price = prices_list[i-1]; // Price values index starts from 0 list_price_elem.value = unit_price; // Set Direct Discout amount to 0 var discount_amount = document.getElementById("discount_amount"+i); if(discount_amount != null) discount_amount.value = '0'; calcProductTotal(i); setDiscount(list_price_elem,i); callTaxCalc(i); } resetSHandAdjValues(); calcTotal(); } // Function to Reset the S&H Charges and Adjustment value with change in Currency function resetSHandAdjValues() { if (checkJSOverride(arguments)) return callJSOverride(arguments); //crmv@35654 if (checkJSExtension(arguments)) if (!callJSExtension(arguments)) return false; // crmv@65067 var sh_amount = document.getElementById('shipping_handling_charge'); if (sh_amount != null) sh_amount.value = '0'; var sh_amount_tax = document.getElementById('shipping_handling_tax'); if (sh_amount_tax != null) sh_amount_tax.innerHTML = '0'; var adjustment = document.getElementById('adjustment'); if (adjustment != null) adjustment.value = '0'; var final_discount = document.getElementById('discount_amount_final'); if (final_discount != null) final_discount.value = '0'; } // End /** Function for Product Re-Ordering Feature Code Addition Starts * It will be responsible for moving record up/down, 1 step at a time */ function moveUpDown(sType,oModule,iIndex) { if (checkJSOverride(arguments)) return callJSOverride(arguments); //crmv@35654 if (checkJSExtension(arguments)) if (!callJSExtension(arguments)) return; // crmv@65067 /* crmv@16267 crmv@29686 crmv@55232 */ var aFieldIds = Array('hidtax_row_no','productName','subproduct_ids','comment','qty','listPrice','discount_type','discount_percentage','discount_amount','popup_tax_row','lineItemType','productDescription','hdnProductcode','netPriceInput','unit_cost','hdnProductId'); // crmv@102215 - hdnProductId va spostato in fondo var aContentIds = Array('qtyInStock','netPrice','subprod_names'); var aOnClickHandlerIds = Array('searchIcon'); iIndex = eval(iIndex) + 1; var oTable = document.getElementById('proTab'); iMax = oTable.rows.length; iSwapIndex = 1; if(sType == 'UP') { for(iCount=iIndex-2;iCount>=1;iCount--) { if(document.getElementById("row"+iCount)) { if(document.getElementById("row"+iCount).style.display != 'none' && document.getElementById('deleted'+iCount).value == 0) { iSwapIndex = iCount+1; break; } } } } else { for(iCount=iIndex;iCount<=iMax-2;iCount++) { if(document.getElementById("row"+iCount) && document.getElementById("row"+iCount).style.display != 'none' && document.getElementById('deleted'+iCount).value == 0) { iSwapIndex = iCount; break; } } iSwapIndex += 1; } var oCurTr = oTable.rows[iIndex]; var oSwapRow = oTable.rows[iSwapIndex]; iMaxCols = oCurTr.cells.length; iIndex -= 1; iSwapIndex -= 1; iCheckIndex = 0; iSwapCheckIndex = 0; for(j=0;j<=2;j++) { if(eval('document.getElementById(\'frmEditView\').discount'+iIndex+'['+j+']')) { sFormElement = eval('document.getElementById(\'frmEditView\').discount'+iIndex+'['+j+']'); if(sFormElement.checked) { iCheckIndex = j; break; } } } for(j=0;j<=2;j++) { if(eval('document.getElementById(\'frmEditView\').discount'+iSwapIndex+'['+j+']')) { sFormElement = eval('document.getElementById(\'frmEditView\').discount'+iSwapIndex+'['+j+']'); if(sFormElement.checked) { iSwapCheckIndex = j; break; } } } if(eval('document.getElementById(\'frmEditView\').discount'+iIndex+'['+iSwapCheckIndex+']')) { oElement = eval('document.getElementById(\'frmEditView\').discount'+iIndex+'['+iSwapCheckIndex+']'); oElement.checked = true; } if(eval('document.getElementById(\'frmEditView\').discount'+iSwapIndex+'['+iCheckIndex+']')) { oSwapElement = eval('document.getElementById(\'frmEditView\').discount'+iSwapIndex+'['+iCheckIndex+']'); oSwapElement.checked = true; } iMaxElement = aFieldIds.length; for(iCt=0;iCt 0) { for(i = 0; i < rowsTaxes; i++) { var tmp = jQuery('#hidden_tax'+(i+1)+'_percentage'+oldIndex).val(); tmp = tmp.split('_'); var taxname = tmp[0]; div = div .replace(new RegExp('hidden_tax'+(i+1)+'_percentage'+oldIndex,'g'), 'hidden_tax'+(i+1)+'_percentage'+newIndex) .replace("calcCurrentTax('"+taxname+"_percentage"+oldIndex+"',"+oldIndex, "calcCurrentTax('"+taxname+"_percentage"+newIndex+"',"+newIndex) .replace(new RegExp(taxname+'_percentage'+oldIndex,'g'), taxname+'_percentage'+newIndex) .replace(new RegExp('popup_tax_row'+oldIndex+'_'+i,'g'), 'popup_tax_row'+newIndex+'_'+i); tax_percentage[taxname+'_percentage'+newIndex] = jQuery('#'+taxname+'_percentage'+oldIndex).val(); } } if (j == 0) { var div1 = div; } else { var div2 = div; } } jQuery('#tax_div'+iIndex).html(div2); jQuery('#tax_div'+iSwapIndex).html(div1); jQuery("#taxTotal"+iIndex).html(formatUserNumber(jQuery('#hdnTaxTotal'+iIndex).val())); jQuery("#taxTotal"+iSwapIndex).html(formatUserNumber(jQuery('#hdnTaxTotal'+iSwapIndex).val())); for (k in tax_percentage) { jQuery('#'+k).val(tax_percentage[k]); } } //crmv@55228e crmv@55232e // crmv@107661 function InventorySelectAll(mod,image_pth) { if (checkJSOverride(arguments)) return callJSOverride(arguments); //crmv@35654 if (checkJSExtension(arguments)) if (!callJSExtension(arguments)) return false; // crmv@65067 function addFromRecordId(entityid, rowid, rawjson) { //crmv@32840 var prod_array = JSON.parse(rawjson || document.getElementById('popup_product_'+entityid).attributes['vt_prod_arr'].nodeValue, function (key, value) { // crmv@192033 if (key == 'desc') { value = value.replace(/\\r/g, '\r'); value = value.replace(/\\n/g, '\n'); } return value; }); //crmv@32840e if (!prod_array) return false; var prod_id = prod_array['entityid']; var prod_name = prod_array['prodname']; var prod_code = prod_array['prod_code']; //crmv@16267 var unit_price = prod_array['unitprice']; var taxstring = prod_array['taxstring']; var desc = prod_array['desc']; var row_id = rowid || prod_array['rowid']; var subprod_ids = prod_array['subprod_ids']; var unit_cost = prod_array['unit_cost']; // crmv@204432 // remove from the list of other pages if (window.otherPagesSelections) delete otherPagesSelections[prod_id]; // crmv@107661 if(mod!='PurchaseOrder') { var qtyinstk = prod_array['qtyinstk']; set_return_inventory(prod_id,prod_name,unit_price,qtyinstk,taxstring,parseInt(row_id),desc,subprod_ids,prod_code,unit_cost); //crmv@16267 crmv@204432 } else { set_return_inventory_po(prod_id,prod_name,unit_price,taxstring,parseInt(row_id),desc,subprod_ids,prod_code,unit_cost); //crmv@16267 crmv@204432 } return true; } if(document.selectall.selected_id != undefined) { var x = document.selectall.selected_id.length; var y = 0; var idstring = ""; if ( x == undefined) { if (document.selectall.selected_id.checked) { idstring = document.selectall.selected_id.value; var c = document.selectall.selected_id.value; addFromRecordId(c); y=1; } else { alert(alert_arr.SELECT); return false; } } else { var row_id = null; for(i = 0; i < x ; ++i) { if(document.selectall.selected_id[i].checked) { idstring = document.selectall.selected_id[i].value+";"+idstring; var c = document.selectall.selected_id[i].value; if (y>0) { row_id = parent.fnAddProductOrServiceRowNew(mod,image_pth, document.selectall.pmodule.value); //crmv@21048m //crmv@30721 } addFromRecordId(c, row_id); ++y; } } } // add items from other pages if (window.otherPagesSelections) { var row_id = null; for (c in window.otherPagesSelections) { if (y>0) { row_id = parent.fnAddProductOrServiceRowNew(mod,image_pth, document.selectall.pmodule.value); //crmv@21048m //crmv@30721 } addFromRecordId(c, row_id, window.otherPagesSelections[c]); ++y; } } if (y != 0) { document.selectall.idlist.value=idstring; return true; } else { alert(alert_arr.SELECT); return false; } } } // crmv@107661e //crmv@30721 function fnAddProductOrServiceRowNew(module,image_path,rel_module,mode){ if (checkJSOverride(arguments)) return callJSOverride(arguments); //crmv@35654 if (checkJSExtension(arguments)) if (!callJSExtension(arguments)) return false; // crmv@65067 var tableName = document.getElementById('proTab'); var prev = tableName.rows.length; var count = eval(prev)-1;//As the table has two headers, we should reduce the count var res = getFile('index.php?module=Utilities&action=UtilitiesAjax&file=getProductsOrServices&mode='+mode+'&rowid='+count+'&rel_module='+module+'&entityType='+rel_module); jQuery('#proTab > tbody').append(res); // crmv@126296 /* Product Re-Ordering Feature Code Addition Starts */ iMax = tableName.rows.length; for(iCount=1;iCount<=iMax-3;iCount++) { if(document.getElementById("row"+iCount) && document.getElementById("row"+iCount).style.display != 'none') { iPrevRowIndex = iCount; } } iPrevCount = eval(iPrevRowIndex); var oPrevRow = tableName.rows[iPrevRowIndex+1]; if(iPrevCount != 1) { oPrevRow.cells[0].innerHTML = 'delete

arrow_upward arrow_downward'; } else { oPrevRow.cells[0].innerHTML = '

arrow_downward'; } /* Product Re-Ordering Feature Code Addition ends */ decideTaxDiv(); calcTotal(); return count; } //crmv@30721e //crmv@29190 crmv@198024 function initAutocompleteInventoryRow(rel_module,field,display,icon,module,row_no,autocomplete, useCategories) { if (rel_module == 'Products') { initAutocomplete(field,display,encodeURIComponent(productPickList(icon,module,row_no,autocomplete)), '', useCategories); } else if (rel_module == 'Services') { initAutocomplete(field,display,encodeURIComponent(servicePickList(icon,module,row_no,autocomplete)), '', useCategories); } } //crmv@29190e crmv@198024e