PageRenderTime 49ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/modules/phreebooks/javascript/orders.js

http://phreedom.googlecode.com/
JavaScript | 1385 lines | 1311 code | 29 blank | 45 comment | 185 complexity | 8f2fc6e16b071e274ffbc2cc696dc1a7 MD5 | raw file
Possible License(s): GPL-3.0, LGPL-3.0

Large files files are truncated, but you can click here to view the full file

  1. // +-----------------------------------------------------------------+
  2. // | PhreeBooks Open Source ERP |
  3. // +-----------------------------------------------------------------+
  4. // | Copyright (c) 2008, 2009, 2010, 2011, 2012 PhreeSoft, LLC |
  5. // | http://www.PhreeSoft.com |
  6. // +-----------------------------------------------------------------+
  7. // | This program is free software: you can redistribute it and/or |
  8. // | modify it under the terms of the GNU General Public License as |
  9. // | published by the Free Software Foundation, either version 3 of |
  10. // | the License, or any later version. |
  11. // | |
  12. // | This program is distributed in the hope that it will be useful, |
  13. // | but WITHOUT ANY WARRANTY; without even the implied warranty of |
  14. // | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
  15. // | GNU General Public License for more details. |
  16. // +-----------------------------------------------------------------+
  17. // Path: /modules/phreebooks/javascript/orders.js
  18. //
  19. var bill_add = new Array(0);
  20. var ship_add = new Array(0);
  21. var force_clear = false;
  22. function ClearForm() {
  23. var numRows = 0;
  24. clearAddress('bill');
  25. clearAddress('ship');
  26. document.getElementById('search').value = text_search;
  27. document.getElementById('search').style.color = inactive_text_color;
  28. document.getElementById('purchase_invoice_id').value= '';
  29. document.getElementById('id').value = '';
  30. document.getElementById('recur_id').value = '0';
  31. document.getElementById('recur_frequency').value = '0';
  32. document.getElementById('terms').value = '0';
  33. document.getElementById('terms_text').value = text_terms;
  34. document.getElementById('item_count').value = '0';
  35. document.getElementById('weight').value = '0';
  36. document.getElementById('printed').value = '0';
  37. document.getElementById('so_po_ref_id').value = '0';
  38. document.getElementById('purch_order_id').value = '';
  39. document.getElementById('store_id').value = '';
  40. document.getElementById('post_date').value = defaultPostDate;
  41. document.getElementById('terminal_date').value = defaultTerminalDate;
  42. document.getElementById('gl_acct_id').value = default_GL_acct;
  43. document.getElementById('disc_gl_acct_id').value = default_disc_acct;
  44. document.getElementById('disc_percent').value = formatted_zero;
  45. document.getElementById('discount').value = formatted_zero;
  46. document.getElementById('ship_gl_acct_id').value = default_freight_acct;
  47. document.getElementById('ship_carrier').value = '';
  48. document.getElementById('ship_service').value = '';
  49. document.getElementById('freight').value = formatted_zero;
  50. document.getElementById('sales_tax').value = formatted_zero;
  51. document.getElementById('total').value = formatted_zero;
  52. document.getElementById('display_currency').value = defaultCurrency;
  53. document.getElementById('currencies_code').value = defaultCurrency;
  54. document.getElementById('currencies_value').value = '1';
  55. // handle checkboxes
  56. document.getElementById('waiting').checked = false;
  57. document.getElementById('drop_ship').checked = false;
  58. document.getElementById('closed').checked = false;
  59. document.getElementById('bill_add_update').checked = false;
  60. document.getElementById('ship_add_update').checked = false;
  61. $("#closed_text").hide();
  62. document.getElementById('ship_to_search').innerHTML = ' '; // turn off ship to id search
  63. document.getElementById('purchase_invoice_id').readOnly = false;
  64. // remove all item rows and add a new blank one
  65. var desc = document.getElementById('desc_1').value;
  66. var sku = document.getElementById('sku_1').value;
  67. if ((sku != '' && sku != text_search) || desc != '') {
  68. if (force_clear || confirm(warn_form_has_data)) {
  69. while (document.getElementById('item_table').rows.length > 0) removeInvRow(1);
  70. addInvRow();
  71. } else {
  72. if (single_line_list == '1') {
  73. numRows = document.getElementById('item_table').rows.length;
  74. } else {
  75. numRows = document.getElementById('item_table').rows.length/2;
  76. }
  77. for (var i=1; i<=numRows; i++) {
  78. document.getElementById('id_'+i).value = 0;
  79. document.getElementById('so_po_item_ref_id_'+i).value = 0;
  80. }
  81. }
  82. }
  83. }
  84. function clearAddress(type) {
  85. for (var i=0; i<add_array.length; i++) {
  86. var add_id = add_array[i];
  87. document.getElementById(type+'_acct_id').value = '';
  88. document.getElementById(type+'_address_id').value = '';
  89. document.getElementById(type+'_country_code').value = store_country_code;
  90. if (type=='bill') {
  91. if (add_id != 'country_code') document.getElementById(type+'_'+add_id).style.color = inactive_text_color;
  92. document.getElementById(type+'_'+add_id).value = default_array[i];
  93. }
  94. document.getElementById(type+'_to_select').style.visibility = 'hidden';
  95. if (document.getElementById(type+'_to_select')) {
  96. while (document.getElementById(type+'_to_select').options.length) {
  97. document.getElementById(type+'_to_select').remove(0);
  98. }
  99. }
  100. if (type=='ship') {
  101. switch (journalID) {
  102. case '3':
  103. case '4':
  104. case '6':
  105. case '7':
  106. case '20':
  107. case '21':
  108. document.getElementById(type+'_'+add_id).style.color = '';
  109. document.getElementById(type+'_'+add_id).value = company_array[i];
  110. break;
  111. case '9':
  112. case '10':
  113. case '12':
  114. case '13':
  115. case '18':
  116. case '19':
  117. if (add_id != 'country_code') document.getElementById(type+'_'+add_id).style.color = inactive_text_color;
  118. document.getElementById(type+'_'+add_id).value = default_array[i];
  119. break;
  120. default:
  121. }
  122. }
  123. }
  124. }
  125. function ajaxOrderData(cID, oID, jID, open_order, ship_only) {
  126. var open_so_po = (open_order) ? '1' : '0';
  127. var only_ship = (ship_only) ? '1' : '0';
  128. $.ajax({
  129. type: "GET",
  130. url: 'index.php?module=phreebooks&page=ajax&op=load_order&cID='+cID+'&oID='+oID+'&jID='+jID+'&so_po='+open_so_po+'&ship_only='+only_ship,
  131. dataType: ($.browser.msie) ? "text" : "xml",
  132. error: function(XMLHttpRequest, textStatus, errorThrown) {
  133. alert ("Ajax Error: " + XMLHttpRequest.responseText + "\nTextStatus: " + textStatus + "\nErrorThrown: " + errorThrown);
  134. },
  135. success: fillOrderData
  136. });
  137. }
  138. function fillOrderData(sXml) { // edit response form fill
  139. var xml = parseXml(sXml);
  140. if (!xml) return;
  141. if ($(xml).find("OrderData").length) {
  142. orderFillAddress(xml, 'bill', false);
  143. orderFillAddress(xml, 'ship', false);
  144. fillOrder(xml);
  145. } else if ($(xml).find("BillContact").length) {
  146. orderFillAddress(xml, 'bill', true);
  147. orderFillAddress(xml, 'ship', false);
  148. } else if ($(xml).find("ShipContact").length) {
  149. orderFillAddress(xml, 'ship', true);
  150. }
  151. }
  152. function orderFillAddress(xml, type, fill_address) {
  153. var newOpt, mainType;
  154. while (document.getElementById(type+'_to_select').options.length) document.getElementById(type+'_to_select').remove(0);
  155. var cTag = (type == 'ship' ? 'ShipContact' : 'BillContact');
  156. $(xml).find(cTag).each(function() {
  157. var id = $(this).find("id").text();
  158. if (!id) return;
  159. mainType = $(this).find("type").first().text() + 'm';
  160. switch (type) {
  161. default:
  162. case 'bill':
  163. bill_add = this;
  164. default_sales_tax = $(this).find("tax_id").text();
  165. default_inv_acct = ($(this).find("gl_type_account").text()) ? $(this).find("gl_type_account").text() : default_inv_acct;
  166. insertValue('bill_acct_id', id);
  167. insertValue('terms', $(this).find("special_terms").text());
  168. insertValue('terms_text', $(this).find("terms_text").text());
  169. insertValue('search', $(this).find("short_name").text());
  170. insertValue('acct_1', default_inv_acct);
  171. if($(this).find("dept_rep_id").text() != '') insertValue('rep_id', $(this).find("dept_rep_id").text());
  172. if($(this).find("ship_gl_acct_id").text() != '') insertValue('ship_gl_acct_id', $(this).find("ship_gl_acct_id").text());
  173. custCreditLimit = $(this).find("credit_remaining").text();
  174. var rowCnt = 1;
  175. while(true) {
  176. if (!document.getElementById('tax_'+rowCnt)) break;
  177. document.getElementById('tax_'+rowCnt).value = $(this).find("tax_id").text();
  178. rowCnt++;
  179. }
  180. if (show_status == '1') {
  181. window.open("index.php?module=phreebooks&page=popup_status&form=orders&id="+id,"contact_status","width=500px,height=300px,resizable=0,scrollbars=1,top=150,left=200");
  182. }
  183. break;
  184. case 'ship':
  185. ship_add = this;
  186. insertValue('ship_acct_id', id);
  187. insertValue('ship_search', $(this).find("short_name").text());
  188. break;
  189. }
  190. //now fill the addresses
  191. var iIndex = 0;
  192. $(this).find("Address").each(function() {
  193. newOpt = document.createElement("option");
  194. newOpt.text = $(this).find("primary_name").text() + ', ' + $(this).find("city_town").text() + ', ' + $(this).find("postal_code").text();
  195. document.getElementById(type+'_to_select').options.add(newOpt);
  196. document.getElementById(type+'_to_select').options[iIndex].value = $(this).find("address_id").text();
  197. if (fill_address && $(this).find("type").text() == mainType) { // also fill the fields
  198. insertValue(type+'_address_id', $(this).find("address_id").text());
  199. $(this).children().each (function() {
  200. var tagName = this.tagName;
  201. if (document.getElementById(type+'_'+tagName)) {
  202. document.getElementById(type+'_'+tagName).value = $(this).text();
  203. document.getElementById(type+'_'+tagName).style.color = '';
  204. }
  205. });
  206. }
  207. iIndex++;
  208. });
  209. // add a option for creating a new address
  210. newOpt = document.createElement("option");
  211. newOpt.text = text_enter_new;
  212. document.getElementById(type+'_to_select').options.add(newOpt);
  213. document.getElementById(type+'_to_select').options[iIndex].value = '0';
  214. document.getElementById(type+'_to_select').style.visibility = 'visible';
  215. document.getElementById(type+'_to_select').disabled = false;
  216. });
  217. }
  218. function fillOrder(xml) {
  219. $(xml).find("OrderData").each(function() {
  220. $(this).children().each (function() {
  221. var tagName = this.tagName;
  222. if (document.getElementById(tagName)) {
  223. document.getElementById(tagName).value = $(this).first().text();
  224. document.getElementById(tagName).style.color = '';
  225. }
  226. });
  227. // fix some special cases, checkboxes, and active fields
  228. insertValue('bill_to_select', $(this).find("bill_address_id").text());
  229. insertValue('ship_to_select', $(this).find("ship_address_id").text());
  230. document.getElementById('display_currency').value = $(this).find("currencies_code").text();
  231. document.getElementById('closed').checked = $(this).find("cb_closed").text() == '1' ? true : false;
  232. document.getElementById('waiting').checked = $(this).find("cb_waiting").text() == '1' ? true : false;
  233. document.getElementById('drop_ship').checked = $(this).find("cb_drop_ship").text() == '1' ? true : false;
  234. if ($(this).find("cb_waiting").text() == '1') document.getElementById('waiting').value = '1'; // if hidden set value
  235. //
  236. // Uncomment to set Sales Invoice number = Sales Order number when invoicing a Sales Order
  237. // if (journalID=='12' && $(this).find("purch_order_num").text()) document.getElementById('purchase_invoice_id').value = $(this).find("purch_order_num").text();
  238. //
  239. if ($(this).find("id").first().text() && journalID != '6' && journalID != '7') document.getElementById('purchase_invoice_id').readOnly = true;
  240. buildFreightDropdown();
  241. insertValue('ship_service', $(this).find("ship_service").text());
  242. if ($(this).find("cb_closed").text() == '1') {
  243. switch (journalID) {
  244. case '6':
  245. case '7':
  246. case '12':
  247. case '13':
  248. $("#closed_text").show();
  249. removeElement('tb_main_0', 'tb_icon_payment');
  250. break;
  251. default:
  252. }
  253. }
  254. // disable the purchase_invoice_id field since it cannot change, except purchase/receive
  255. if ($(this).find("id").first().text() && journalID != '6' && journalID != '7' && journalID != '21') {
  256. document.getElementById('purchase_invoice_id').readOnly = true;
  257. }
  258. if ($(this).find("id").first().text() && $(this).find("attach_exist").text() == 1) {
  259. document.getElementById('show_attach').style.display = ''; // show attachment button and delete checkbox if it exists
  260. }
  261. if ($(this).find("id").first().text() && securityLevel < 3) { // turn off some icons
  262. removeElement('tb_main_0', 'tb_icon_print');
  263. removeElement('tb_main_0', 'tb_icon_save');
  264. removeElement('tb_main_0', 'tb_icon_payment');
  265. removeElement('tb_main_0', 'tb_icon_save_as_so');
  266. removeElement('tb_main_0', 'tb_icon_recur');
  267. removeElement('tb_main_0', 'tb_icon_ship_all');
  268. }
  269. // fill inventory rows and add a new blank one
  270. var order_discount = formatted_zero;
  271. var jIndex = 1;
  272. $(this).find("Item").each(function() {
  273. var gl_type = $(this).find("gl_type").text();
  274. switch (gl_type) {
  275. case 'ttl':
  276. case 'tax': // the total and tax will be recalculated when the form is loaded
  277. break;
  278. case 'dsc':
  279. order_discount = $(this).find("total").text();
  280. if ($(this).find("gl_account").text()) insertValue('disc_gl_acct_id', $(this).find("gl_account").text());
  281. break;
  282. case 'frt':
  283. insertValue('freight', $(this).find("total").text());
  284. if ($(this).find("gl_account").text()) insertValue('ship_gl_acct_id', $(this).find("gl_account").text());
  285. break;
  286. case 'soo':
  287. case 'sos':
  288. case 'poo':
  289. case 'por':
  290. if(action == 'prc_so' && $(this).find("purch_package_quantity").text() != '' ){
  291. quantity = $(this).find("qty").text() * $(this).find("purch_package_quantity").text();
  292. unitPrice = formatCurrency(cleanCurrency($(this).find("unit_price").text()) / $(this).find("purch_package_quantity").text());
  293. }else{
  294. quantity = $(this).find("qty").text();
  295. unitPrice = $(this).find("unit_price").text();
  296. }
  297. insertValue('id_' + jIndex, $(this).find("id").text());
  298. insertValue('item_cnt_' + jIndex, $(this).find("item_cnt").text());
  299. insertValue('so_po_item_ref_id_' + jIndex, $(this).find("so_po_item_ref_id").text());
  300. insertValue('qty_' + jIndex, quantity);
  301. insertValue('pstd_' + jIndex, $(this).find("pstd").text());
  302. insertValue('sku_' + jIndex, $(this).find("sku").text());
  303. insertValue('desc_' + jIndex, $(this).find("description").text());
  304. insertValue('proj_' + jIndex, $(this).find("proj_id").text());
  305. insertValue('date_1_' + jIndex, $(this).find("date_1").text());
  306. insertValue('acct_' + jIndex, $(this).find("gl_account").text());
  307. insertValue('tax_' + jIndex, $(this).find("taxable").text());
  308. insertValue('full_' + jIndex, $(this).find("full_price").text());
  309. insertValue('weight_' + jIndex, $(this).find("weight").text());
  310. insertValue('serial_' + jIndex, $(this).find("serialize").text());
  311. insertValue('stock_' + jIndex, $(this).find("stock").text());
  312. insertValue('inactive_' + jIndex, $(this).find("inactive").text());
  313. insertValue('lead_' + jIndex, $(this).find("lead").text());
  314. insertValue('price_' + jIndex, unitPrice);
  315. insertValue('total_' + jIndex, $(this).find("total").text());
  316. if ($(this).find("so_po_item_ref_id").text() || ((journalID == '04' || journalID == '10') && $(this).find("pstd").text())) {
  317. // don't allow sku to change, hide the sku search icon
  318. document.getElementById('sku_' + jIndex).readOnly = true;
  319. document.getElementById('sku_open_' + jIndex).style.display = 'none';
  320. // don't allow row to be removed, turn off the delete icon
  321. rowOffset = (single_line_list == '1') ? jIndex-1 : (jIndex*2)-2;
  322. document.getElementById("item_table").rows[rowOffset].cells[0].innerHTML = '&nbsp;';
  323. }
  324. updateRowTotal(jIndex, false);
  325. addInvRow();
  326. jIndex++;
  327. default: // do nothing
  328. }
  329. });
  330. insertValue('discount', order_discount);
  331. calculateDiscountPercent();
  332. });
  333. }
  334. function AccountList() {
  335. var guess = document.getElementById('search').value;
  336. var override = document.getElementById('bill_add_update').checked ? true : false; // force popup if Add/Update checked
  337. if (guess != text_search && guess != '' && !override) {
  338. $.ajax({
  339. type: "GET",
  340. url: 'index.php?module=phreebooks&page=ajax&op=load_searches&jID='+journalID+'&type='+account_type+'&guess='+guess,
  341. dataType: ($.browser.msie) ? "text" : "xml",
  342. error: function(XMLHttpRequest, textStatus, errorThrown) {
  343. alert ("Ajax Error: " + XMLHttpRequest.responseText + "\nTextStatus: " + textStatus + "\nErrorThrown: " + errorThrown);
  344. },
  345. success: AccountListResp
  346. });
  347. } else { // force the popup
  348. AccountListResp();
  349. }
  350. }
  351. function AccountListResp(sXml) {
  352. var xml = parseXml(sXml);
  353. // if (!xml) return;
  354. if ($(xml).find("result").text() == 'success') {
  355. var cID = $(xml).find("cID").text();
  356. ajaxOrderData(cID, 0, journalID, false, false);
  357. } else {
  358. var fill = '';
  359. switch (journalID) {
  360. case '3':
  361. case '4':
  362. case '6':
  363. case '7':
  364. case '20': fill = 'bill'; break;
  365. case '9':
  366. case '10':
  367. case '12':
  368. case '13':
  369. case '18': fill = 'both'; break;
  370. default:
  371. }
  372. window.open("index.php?module=contacts&page=popup_accts&type="+account_type+"&fill="+fill+"&jID="+journalID+"&search_text="+document.getElementById('search').value,"accounts","width=850px,height=550px,resizable=1,scrollbars=1,top=150,left=100");
  373. }
  374. }
  375. function DropShipList(currObj) {
  376. window.open("index.php?module=contacts&page=popup_accts&type=c&fill=ship&jID="+journalID+"&search_text="+document.getElementById('ship_search').value,"accounts","width=850px,height=550px,resizable=1,scrollbars=1,top=150,left=100");
  377. }
  378. function OpenOrdrList(currObj) {
  379. window.open("index.php?module=phreebooks&page=popup_orders&jID="+journalID,"search_po","width=700px,height=550px,resizable=1,scrollbars=1,top=150,left=200");
  380. }
  381. function OpenRecurList(currObj) {
  382. window.open("index.php?module=phreebooks&page=popup_recur&jID="+journalID,"recur","width=400px,height=300px,resizable=1,scrollbars=1,top=150,left=200");
  383. }
  384. function InventoryList(rowCnt) {
  385. var storeID = document.getElementById('store_id').value;
  386. var sku = document.getElementById('sku_'+rowCnt).value;
  387. var cID = document.getElementById('bill_acct_id').value;
  388. window.open("index.php?module=inventory&page=popup_inv&type="+account_type+"&rowID="+rowCnt+"&storeID="+storeID+"&cID="+cID+"&search_text="+sku,"inventory","width=700px,height=550px,resizable=1,scrollbars=1,top=150,left=200");
  389. }
  390. function PriceManagerList(elementID) {
  391. var sku = document.getElementById('sku_'+elementID).value;
  392. if (!sku || sku == text_search) {
  393. alert(warn_price_sheet);
  394. return;
  395. }
  396. window.open("index.php?module=inventory&page=popup_prices&rowId="+elementID+"&sku="+sku+"&type="+account_type,"prices","width=550px,height=550px,resizable=1,scrollbars=1,top=150,left=200");
  397. }
  398. function TermsList() {
  399. var terms = document.getElementById('terms').value;
  400. window.open("index.php?module=contacts&page=popup_terms&type="+account_type+"&form=orders&val="+terms,"terms","width=500px,height=300px,resizable=1,scrollbars=1,top=150,left=200");
  401. }
  402. function FreightList() {
  403. window.open("index.php?module=shipping&page=popup_shipping&form=orders","shipping","width=900px,height=650px,resizable=1,scrollbars=1,top=150,left=200");
  404. }
  405. function convertQuote() {
  406. var id = document.getElementById('id').value;
  407. if (id != '') {
  408. window.open("index.php?module=phreebooks&page=popup_convert&oID="+id,"popup_convert","width=500px,height=300px,resizable=1,scrollbars=1,top=150,left=200");
  409. } else {
  410. alert(cannot_convert_quote);
  411. }
  412. }
  413. function convertSO() {
  414. var id = document.getElementById('id').value;
  415. if (id != '') {
  416. window.open("index.php?module=phreebooks&page=popup_convert_po&oID="+id,"popup_convert_po","width=500px,height=300px,resizable=1,scrollbars=1,top=150,left=200");
  417. } else {
  418. alert(cannot_convert_so);
  419. }
  420. }
  421. function serialList(rowID) {
  422. var choice = document.getElementById(rowID).value;
  423. var newChoice = prompt(serial_num_prompt, choice);
  424. if (newChoice) document.getElementById(rowID).value = newChoice;
  425. }
  426. function openBarCode() {
  427. window.open("index.php?module=phreebooks&page=popup_bar_code&jID="+journalID,"bar_code","width=300px,height=150px,resizable=1,scrollbars=1,top=110,left=200");
  428. }
  429. function downloadAttachment() {
  430. document.getElementById('todo').value = 'dn_attach';
  431. document.getElementById('todo').form.submit();
  432. }
  433. function DropShipView(currObj) {
  434. var add_id;
  435. if (document.getElementById('drop_ship').checked) {
  436. for (var i=0; i<add_array.length; i++) {
  437. add_id = add_array[i];
  438. if (add_id != 'country_code') document.getElementById('ship_'+add_id).style.color = inactive_text_color;
  439. document.getElementById('ship_'+add_id).value = default_array[i];
  440. }
  441. document.getElementById('ship_country_code').value = store_country_code;
  442. document.getElementById('ship_add_update').checked = false;
  443. document.getElementById('ship_add_update').disabled = false;
  444. // turn on ship to id search
  445. document.getElementById('ship_to_search').innerHTML = ship_search_HTML;
  446. } else {
  447. while (document.getElementById('ship_to_select').options.length) {
  448. document.getElementById('ship_to_select').remove(0);
  449. }
  450. for (var i=0; i<add_array.length; i++) {
  451. add_id = add_array[i];
  452. switch (journalID) {
  453. case '3':
  454. case '4':
  455. case '6':
  456. case '7':
  457. case '20': // fill company address
  458. case '21':
  459. document.getElementById('ship_'+add_id).style.color = '';
  460. document.getElementById('ship_'+add_id).value = company_array[i];
  461. break;
  462. case '9':
  463. case '10':
  464. case '12':
  465. case '13':
  466. case '18': // fill default address text
  467. case '19':
  468. if (add_id != 'country_code') document.getElementById('ship_'+add_id).style.color = inactive_text_color;
  469. document.getElementById('ship_'+add_id).value = default_array[i];
  470. break;
  471. default:
  472. }
  473. }
  474. document.getElementById('ship_country_code').value = store_country_code;
  475. document.getElementById('ship_add_update').checked = false;
  476. document.getElementById('ship_add_update').disabled = false;
  477. document.getElementById('ship_to_select').style.visibility = 'hidden';
  478. document.getElementById('ship_to_search').innerHTML = '&nbsp;'; // turn off ship to id search
  479. }
  480. }
  481. function fillAddress(type) {
  482. var index = document.getElementById(type+'_to_select').value;
  483. var address = '';
  484. if (type == "bill") address = bill_add;
  485. if (type == "ship") address = ship_add;
  486. if (index == '0') { // set to defaults
  487. document.getElementById(type+'_acct_id').value = 0;
  488. document.getElementById(type+'_address_id').value = 0;
  489. for (var i=0; i<add_array.length; i++) {
  490. add_id = add_array[i];
  491. if (add_id != 'country_code') document.getElementById(type+'_'+add_id).style.color = inactive_text_color;
  492. document.getElementById(type+'_'+add_id).value = default_array[i];
  493. }
  494. return;
  495. }
  496. $(address).find("Address").each(function() {
  497. if ($(this).find("address_id").text() == index) {
  498. document.getElementById(type+'_acct_id').value = $(this).find("ref_id").text();
  499. document.getElementById(type+'_address_id').value = (index == 'new') ? '0' : $(this).find("address_id").text();
  500. var add_id;
  501. for (var i=0; i<add_array.length; i++) {
  502. add_id = add_array[i];
  503. if (index != '0' && $(this).find(add_id).text()) {
  504. document.getElementById(type+'_'+add_id).style.color = '';
  505. document.getElementById(type+'_'+add_id).value = $(this).find(add_id).text();
  506. } else {
  507. if (add_id != 'country_code') document.getElementById(type+'_'+add_id).style.color = inactive_text_color;
  508. document.getElementById(type+'_'+add_id).value = default_array[i];
  509. }
  510. }
  511. }
  512. });
  513. }
  514. function copyAddress() {
  515. document.getElementById('ship_address_id').value = document.getElementById('bill_address_id').value;
  516. document.getElementById('ship_acct_id').value = document.getElementById('bill_acct_id').value;
  517. var add_id;
  518. for (var i=0; i<add_array.length; i++) {
  519. add_id = add_array[i];
  520. if (document.getElementById('bill_'+add_id).value != default_array[i]) {
  521. document.getElementById('ship_'+add_id).style.color = '';
  522. document.getElementById('ship_'+add_id).value = document.getElementById('bill_'+add_id).value;
  523. } else {
  524. if (add_id != 'country_code') document.getElementById('ship_'+add_id).style.color = inactive_text_color;
  525. document.getElementById('ship_'+add_id).value = default_array[i];
  526. }
  527. }
  528. document.getElementById('ship_country_code').selectedIndex = document.getElementById('bill_country_code').selectedIndex;
  529. }
  530. function addInvRow() {
  531. var newCell = '';
  532. var cell = '';
  533. var rowCnt = 0;
  534. var newRow = document.getElementById('item_table').insertRow(-1);
  535. var newRow2 = '';
  536. if (single_line_list == '1') {
  537. rowCnt = newRow.rowIndex;
  538. } else {
  539. newRow2 = document.getElementById('item_table').insertRow(-1);
  540. rowCnt = (newRow2.rowIndex - 1)/2;
  541. }
  542. // NOTE: any change here also need to be made to template form for reload if action fails
  543. cell = buildIcon(icon_path+'16x16/emblems/emblem-unreadable.png', image_delete_text, 'onclick="if (confirm(\''+image_delete_msg+'\')) removeInvRow('+rowCnt+');"');
  544. newCell = newRow.insertCell(-1);
  545. newCell.innerHTML = cell;
  546. // if (single_line_list != '1') newCell.rowSpan = 2;
  547. if (single_line_list == '1') {
  548. cell = '<input type="text" name="item_cnt_'+rowCnt+'" id="item_cnt_'+rowCnt+'" value="'+rowCnt+'" size="3" maxlength="3" readonly="readonly" />';
  549. newCell = newRow.insertCell(-1);
  550. newCell.innerHTML = cell;
  551. newCell.align = 'center';
  552. }
  553. cell = '<input type="text" name="qty_'+rowCnt+'" id="qty_'+rowCnt+'"'+(item_col_1_enable == '1' ? " " : " readonly=\"readonly\"")+' size="7" maxlength="6" onchange="updateRowTotal('+rowCnt+', true)" style="text-align:right" />';
  554. newCell = newRow.insertCell(-1);
  555. newCell.innerHTML = cell;
  556. newCell.align = 'center';
  557. newCell.style.whiteSpace = 'nowrap';
  558. cell = '<input type="text" name="pstd_'+rowCnt+'" id="pstd_'+rowCnt+'"'+(item_col_2_enable == '1' ? " " : " readonly=\"readonly\"")+' size="7" maxlength="6" onchange="updateRowTotal('+rowCnt+', true)" style="text-align:right" />';
  559. switch (journalID) {
  560. case '6':
  561. case '7':
  562. case '12':
  563. case '13':
  564. case '19':
  565. case '21':
  566. cell += '&nbsp;' + buildIcon(icon_path+'16x16/actions/tab-new.png', image_ser_num, 'id="imgSerial_'+rowCnt+'" style="cursor:pointer; display:none;" onclick="serialList(\'serial_'+rowCnt+'\')"');
  567. default:
  568. }
  569. newCell = newRow.insertCell(-1);
  570. newCell.innerHTML = cell;
  571. newCell.align = 'center';
  572. newCell.style.whiteSpace = 'nowrap';
  573. cell = '<input type="text" name="sku_'+rowCnt+'" id="sku_'+rowCnt+'" size="'+(max_sku_len+1)+'" maxlength="'+max_sku_len+'" onfocus="clearField(\'sku_'+rowCnt+'\', \''+text_search+'\')" onblur="setField(\'sku_'+rowCnt+'\', \''+text_search+'\'); loadSkuDetails(0, '+rowCnt+')" />&nbsp;';
  574. cell += buildIcon(icon_path+'16x16/actions/system-search.png', text_search, 'id="sku_open_'+rowCnt+'" align="top" style="cursor:pointer" onclick="InventoryList('+rowCnt+')"');
  575. cell += buildIcon(icon_path+'16x16/actions/document-properties.png', text_properties, 'id="sku_prop_'+rowCnt+'" align="top" style="cursor:pointer" onclick="InventoryProp('+rowCnt+')"');
  576. newCell = newRow.insertCell(-1);
  577. newCell.innerHTML = cell;
  578. newCell.align = 'center';
  579. newCell.style.whiteSpace = 'nowrap';
  580. // for textarea uncomment below, (No control over input length, truncated to 255 by db) or ...
  581. // cell = '<textarea name="desc_'+rowCnt+'" id="desc_'+rowCnt+'" cols="'+((single_line_list=='1')?50:110)+'" rows="1" maxlength="255"></textarea>';
  582. // for standard controlled input, uncomment below
  583. cell = '<input name="desc_'+rowCnt+'" id="desc_'+rowCnt+'" size="'+((single_line_list=='1')?50:75)+'" maxlength="255" />';
  584. newCell = newRow.insertCell(-1);
  585. newCell.innerHTML = cell;
  586. if (single_line_list != '1') newCell.colSpan = 3;
  587. // Project field
  588. if (single_line_list != '1') {
  589. cell = '<select name="proj_'+rowCnt+'" id="proj_'+rowCnt+'"></select>';
  590. newCell = newRow.insertCell(-1);
  591. newCell.innerHTML = cell;
  592. newCell.colSpan = 2;
  593. newCell.align = 'center';
  594. newCell.style.whiteSpace = 'nowrap';
  595. }
  596. // second row ( or continued first row if option selected)
  597. if (single_line_list != '1') {
  598. cell = '<input type="text" name="item_cnt_'+rowCnt+'" id="item_cnt_'+rowCnt+'" value="'+rowCnt+'" size="3" maxlength="3" readonly="readonly" />';
  599. newCell = newRow2.insertCell(-1);
  600. newCell.innerHTML = cell;
  601. cell = '<select name="acct_'+rowCnt+'" id="acct_'+rowCnt+'"></select>';
  602. newCell = newRow2.insertCell(-1);
  603. } else {
  604. cell = htmlComboBox('acct_'+rowCnt, values = '', default_inv_acct, 'size="10"', '220px', '');
  605. newCell = newRow.insertCell(-1); }
  606. newCell.innerHTML = cell;
  607. newCell.align = 'center';
  608. newCell.style.whiteSpace = 'nowrap';
  609. if (single_line_list != '1') newCell.colSpan = 3;
  610. if (single_line_list != '1') {
  611. cell = '<input type="text" name="full_'+rowCnt+'" id="full_'+rowCnt+'" readonly="readonly" size="11" maxlength="10" style="text-align:right" />';
  612. newCell = newRow2.insertCell(-1);
  613. newCell.innerHTML = cell;
  614. newCell.align = 'center';
  615. newCell.style.whiteSpace = 'nowrap';
  616. cell = '<input type="text" name="disc_'+rowCnt+'" id="disc_'+rowCnt+'" readonly="readonly" size="11" maxlength="10" style="text-align:right" />';
  617. newCell = newRow2.insertCell(-1);
  618. newCell.innerHTML = cell;
  619. newCell.align = 'center';
  620. newCell.style.whiteSpace = 'nowrap';
  621. }
  622. cell = '<input type="text" name="price_'+rowCnt+'" id="price_'+rowCnt+'" size="10" maxlength="15" onchange="updateRowTotal('+rowCnt+', false)" style="text-align:right" />&nbsp;';
  623. cell += buildIcon(icon_path+'16x16/mimetypes/x-office-spreadsheet.png', text_price_manager, 'align="top" style="cursor:pointer" onclick="PriceManagerList('+rowCnt+')"');
  624. if (single_line_list != '1') {
  625. newCell = newRow2.insertCell(-1);
  626. } else {
  627. newCell = newRow.insertCell(-1);
  628. }
  629. newCell.innerHTML = cell;
  630. newCell.align = 'center';
  631. newCell.style.whiteSpace = 'nowrap';
  632. cell = '<select name="tax_'+rowCnt+'" id="tax_'+rowCnt+'" onchange="updateRowTotal('+rowCnt+', false)"></select>';
  633. if (single_line_list != '1') {
  634. newCell = newRow2.insertCell(-1);
  635. } else {
  636. newCell = newRow.insertCell(-1);
  637. }
  638. newCell.innerHTML = cell;
  639. newCell.align = 'center';
  640. newCell.style.whiteSpace = 'nowrap';
  641. // Hidden fields
  642. cell = '<input type="hidden" name="id_'+rowCnt+'" id="id_'+rowCnt+'" value="" />';
  643. cell += '<input type="hidden" name="so_po_item_ref_id_'+rowCnt+'" id="so_po_item_ref_id_'+rowCnt+'" value="" />';
  644. cell += '<input type="hidden" name="weight_'+rowCnt+'" id="weight_'+rowCnt+'" value="0" />';
  645. cell += '<input type="hidden" name="stock_'+rowCnt+'" id="stock_'+rowCnt+'" value="NA" />';
  646. cell += '<input type="hidden" name="inactive_'+rowCnt+'" id="inactive_'+rowCnt+'" value="0" />';
  647. cell += '<input type="hidden" name="lead_'+rowCnt+'" id="lead_'+rowCnt+'" value="0" />';
  648. cell += '<input type="hidden" name="serial_'+rowCnt+'" id="serial_'+rowCnt+'" value="" />';
  649. cell += '<input type="hidden" name="date_1_'+rowCnt+'" id="date_1_'+rowCnt+'" value="" />';
  650. if (single_line_list == '1') {
  651. cell += '<input type="hidden" name="proj_'+rowCnt+'" id="proj_'+rowCnt+'" value="" />';
  652. cell += '<input type="hidden" name="full_'+rowCnt+'" id="full_'+rowCnt+'" value="" />';
  653. cell += '<input type="hidden" name="disc_'+rowCnt+'" id="disc_'+rowCnt+'" value="" />';
  654. }
  655. // End hidden fields
  656. cell += '<input type="text" name="total_'+rowCnt+'" id="total_'+rowCnt+'" value="'+formatted_zero+'" size="11" maxlength="20" onchange="updateUnitPrice('+rowCnt+')" style="text-align:right" />';
  657. if (single_line_list != '1') {
  658. newCell = newRow2.insertCell(-1);
  659. } else {
  660. newCell = newRow.insertCell(-1);
  661. }
  662. newCell.innerHTML = cell;
  663. newCell.align = 'center';
  664. newCell.style.whiteSpace = 'nowrap';
  665. // populate the drop downs
  666. var selElement = (single_line_list == '1') ? ('comboselacct_'+rowCnt) : ('acct_'+rowCnt);
  667. if (js_gl_array) buildDropDown(selElement, js_gl_array, default_inv_acct);
  668. if (tax_rates) buildDropDown('tax_'+rowCnt, tax_rates, default_sales_tax);
  669. if (proj_list && single_line_list != '1') buildDropDown('proj_'+rowCnt, proj_list, false);
  670. setField('sku_'+rowCnt, text_search);
  671. setId = rowCnt; // set the upc auto-reader to the newest line added
  672. return rowCnt;
  673. }
  674. function removeInvRow(index) {
  675. var i, offset, newOffset;
  676. var numRows;
  677. if (single_line_list == '1') {
  678. numRows = document.getElementById('item_table').rows.length;
  679. } else {
  680. numRows = (document.getElementById('item_table').rows.length)/2;
  681. }
  682. // remove row from display by reindexing and then deleting last row
  683. for (i=index; i<numRows; i++) {
  684. // move the delete icon from the previous row
  685. offset = (single_line_list == '1') ? i : i*2;
  686. newOffset = (single_line_list == '1') ? i-1 : (i*2)-2;
  687. if (document.getElementById('item_table').rows[offset].cells[0].innerHTML == '&nbsp;') {
  688. document.getElementById('item_table').rows[newOffset].cells[0].innerHTML = '&nbsp;';
  689. } else {
  690. document.getElementById('item_table').rows[newOffset].cells[0].innerHTML = delete_icon_HTML + i + ');">';
  691. }
  692. document.getElementById('qty_'+i).value = document.getElementById('qty_'+(i+1)).value;
  693. document.getElementById('pstd_'+i).value = document.getElementById('pstd_'+(i+1)).value;
  694. document.getElementById('sku_'+i).value = document.getElementById('sku_'+(i+1)).value;
  695. document.getElementById('sku_'+i).readOnly =(document.getElementById('sku_'+(i+1)).readOnly) ? true : false;
  696. document.getElementById('sku_open_'+i).style.display =(document.getElementById('sku_'+(i+1)).readOnly) ? 'none' : '';
  697. document.getElementById('desc_'+i).value = document.getElementById('desc_'+(i+1)).value;
  698. document.getElementById('proj_'+i).value = document.getElementById('proj_'+(i+1)).value;
  699. document.getElementById('price_'+i).value = document.getElementById('price_'+(i+1)).value;
  700. document.getElementById('acct_'+i).value = document.getElementById('acct_'+(i+1)).value;
  701. document.getElementById('tax_'+i).selectedIndex = document.getElementById('tax_'+(i+1)).selectedIndex;
  702. // Hidden fields
  703. document.getElementById('id_'+i).value = document.getElementById('id_'+(i+1)).value;
  704. document.getElementById('so_po_item_ref_id_'+i).value = document.getElementById('so_po_item_ref_id_'+(i+1)).value;
  705. document.getElementById('weight_'+i).value = document.getElementById('weight_'+(i+1)).value;
  706. document.getElementById('stock_'+i).value = document.getElementById('stock_'+(i+1)).value;
  707. document.getElementById('inactive_'+i).value = document.getElementById('inactive_'+(i+1)).value;
  708. document.getElementById('lead_'+i).value = document.getElementById('lead_'+(i+1)).value;
  709. document.getElementById('serial_'+i).value = document.getElementById('serial_'+(i+1)).value;
  710. document.getElementById('full_'+i).value = document.getElementById('full_'+(i+1)).value;
  711. document.getElementById('disc_'+i).value = document.getElementById('disc_'+(i+1)).value;
  712. // End hidden fields
  713. document.getElementById('total_'+i).value = document.getElementById('total_'+(i+1)).value;
  714. document.getElementById('sku_'+i).style.color = (document.getElementById('sku_'+i).value == text_search) ? inactive_text_color : '';
  715. }
  716. document.getElementById('item_table').deleteRow(-1);
  717. if (single_line_list != '1') document.getElementById('item_table').deleteRow(-1);
  718. updateTotalPrices();
  719. }
  720. function updateRowTotal(rowCnt, useAjax) {
  721. var qty = 0;
  722. var unit_price = cleanCurrency(document.getElementById('price_'+rowCnt).value);
  723. var full_price = cleanCurrency(document.getElementById('full_' +rowCnt).value);
  724. switch (journalID) {
  725. case '3':
  726. case '4':
  727. case '9':
  728. case '10':
  729. qty = parseFloat(document.getElementById('qty_'+rowCnt).value);
  730. if (isNaN(qty)) qty = 0; // if blank or a non-numeric value is in the qty field, assume zero
  731. break;
  732. case '6':
  733. case '7':
  734. case '12':
  735. case '13':
  736. case '18':
  737. case '19':
  738. case '21':
  739. case '20':
  740. qty = parseFloat(document.getElementById('pstd_'+rowCnt).value);
  741. if (isNaN(qty)) qty = 0; // if blank or a non-numeric value is in the pstd field, assume zero
  742. break;
  743. default:
  744. }
  745. var total_line = qty * unit_price;
  746. var total_l = new String(total_line);
  747. document.getElementById('price_'+rowCnt).value = formatPrecise(unit_price);
  748. document.getElementById('total_'+rowCnt).value = formatCurrency(total_l);
  749. // calculate discount
  750. if (full_price > 0) {
  751. var discount = (full_price - unit_price)/full_price;
  752. document.getElementById('disc_'+rowCnt).value = new String(Math.round(1000*discount)/10) + ' %';
  753. }
  754. updateTotalPrices();
  755. // call the ajax price sheet update based on customer
  756. if (useAjax && qty != 0 && sku != '' && sku != text_search) {
  757. switch (journalID) {
  758. case '9': // only update prices for sales and if no SO was used
  759. case '10':
  760. case '12':
  761. case '19':
  762. var sku = document.getElementById('sku_'+rowCnt).value;
  763. var bill_acct_id = document.getElementById('bill_acct_id').value;
  764. so_exists = document.getElementById('so_po_item_ref_id_'+rowCnt).value;
  765. if (!so_exists && auto_load_sku) {
  766. $.ajax({
  767. type: "GET",
  768. url: 'index.php?module=inventory&page=ajax&op=inv_details&fID=skuPrice&cID='+bill_acct_id+'&sku='+sku+'&qty='+qty+'&rID='+rowCnt,
  769. dataType: ($.browser.msie) ? "text" : "xml",
  770. error: function(XMLHttpRequest, textStatus, errorThrown) {
  771. alert ("Ajax Error: " + XMLHttpRequest.responseText + "\nTextStatus: " + textStatus + "\nErrorThrown: " + errorThrown);
  772. },
  773. success: processSkuPrice
  774. });
  775. }
  776. break;
  777. default: // no AJAX
  778. }
  779. }
  780. }
  781. // ajax response to price sheet request
  782. function processSkuPrice(sXml) { // call back function
  783. var xml = parseXml(sXml);
  784. if (!xml) return;
  785. var rowCnt = $(xml).find("rID").text();
  786. if (!rowCnt) return;
  787. document.getElementById('price_'+rowCnt).value = formatPrecise($(xml).find("sales_price").text());
  788. updateRowTotal(rowCnt, false);
  789. }
  790. function updateUnitPrice(rowCnt) {
  791. var qty = 0;
  792. var total_line = cleanCurrency(document.getElementById('total_'+rowCnt).value);
  793. document.getElementById('total_'+rowCnt).value = formatCurrency(total_line);
  794. switch (journalID) {
  795. case '3':
  796. case '4':
  797. case '9':
  798. case '10':
  799. qty = parseFloat(document.getElementById('qty_'+rowCnt).value);
  800. if (isNaN(qty)) {
  801. qty = 1;
  802. document.getElementById('qty_'+rowCnt).value = qty;
  803. }
  804. break;
  805. case '6':
  806. case '7':
  807. case '12':
  808. case '13':
  809. case '18':
  810. case '19':
  811. case '20':
  812. case '21':
  813. qty = parseFloat(document.getElementById('pstd_'+rowCnt).value);
  814. if (isNaN(qty)) {
  815. qty = 1;
  816. document.getElementById('pstd_'+rowCnt).value = qty;
  817. }
  818. break;
  819. default:
  820. }
  821. var unit_price = total_line / qty;
  822. var unit_p = new String(unit_price);
  823. document.getElementById('price_'+rowCnt).value = formatPrecise(unit_p);
  824. updateTotalPrices();
  825. }
  826. function updateTotalPrices() {
  827. var numRows = 0;
  828. var discount = parseFloat(cleanCurrency(document.getElementById('discount').value));
  829. if (isNaN(discount)) discount = 0;
  830. var discountPercent = parseFloat(cleanCurrency(document.getElementById('disc_percent').value));
  831. if (isNaN(discountPercent)) discountPercent = 0;
  832. var item_count = 0;
  833. var shipment_weight = 0;
  834. var subtotal = 0;
  835. var taxable_subtotal = 0;
  836. var lineTotal = '';
  837. if (single_line_list == '1') {
  838. numRows = document.getElementById('item_table').rows.length;
  839. } else {
  840. numRows = document.getElementById('item_table').rows.length/2;
  841. }
  842. for (var i=1; i<numRows+1; i++) {
  843. switch (journalID) {
  844. case '3':
  845. case '4':
  846. case '9':
  847. case '10':
  848. item_count += document.getElementById('qty_'+i).value ? parseFloat(document.getElementById('qty_'+i).value) : 0;
  849. shipment_weight += document.getElementById('qty_'+i).value * document.getElementById('weight_'+i).value;
  850. break;
  851. case '6':
  852. case '7':
  853. case '12':
  854. case '13':
  855. case '18':
  856. case '19':
  857. case '20':
  858. case '21':
  859. item_count += document.getElementById('pstd_'+i).value ? parseFloat(document.getElementById('pstd_'+i).value) : 0;
  860. shipment_weight += document.getElementById('pstd_'+i).value * document.getElementById('weight_'+i).value;
  861. break;
  862. default:
  863. }
  864. lineTotal = parseFloat(cleanCurrency(document.getElementById('total_'+i).value));
  865. if (document.getElementById('tax_'+i).value != '0') {
  866. tax_index = document.getElementById('tax_'+i).selectedIndex;
  867. if (tax_index == -1) { // if the rate array index is not defined
  868. tax_index = 0;
  869. document.getElementById('tax_'+i).value = tax_index;
  870. }
  871. if (tax_before_discount == '0') { // tax after discount
  872. taxable_subtotal += lineTotal * (1-(discountPercent/100)) * (tax_rates[tax_index].rate / 100);
  873. } else {
  874. taxable_subtotal += lineTotal * (tax_rates[tax_index].rate / 100);
  875. }
  876. }
  877. subtotal += lineTotal;
  878. }
  879. // recalculate discount
  880. discount = subtotal * (discountPercent/100);
  881. var strDiscount = new String(discount);
  882. document.getElementById('discount').value = formatCurrency(strDiscount);
  883. // freight
  884. var strFreight = cleanCurrency(document.getElementById('freight').value);
  885. var freight = parseFloat(strFreight);
  886. if (isNaN(freight)) freight = 0;
  887. strFreight = new String(freight);
  888. document.getElementById('freight').value = formatCurrency(strFreight);
  889. if (tax_freight != 0 && default_sales_tax != 0) for (keyVar in tax_rates) {
  890. if (tax_rates[keyVar].id == tax_freight) taxable_subtotal += parseFloat(freight) * tax_rates[keyVar].rate / 100;
  891. }
  892. var nst = new String(taxable_subtotal);
  893. document.getElementById('sales_tax').value = formatCurrency(nst);
  894. document.getElementById('item_count').value = item_count;
  895. document.getElementById('weight').value = shipment_weight;
  896. var st = new String(subtotal);
  897. document.getElementById('subtotal').value = formatCurrency(st);
  898. var new_total = subtotal - discount + freight + taxable_subtotal;
  899. var tot = new String(new_total);
  900. document.getElementById('total').value = formatCurrency(tot);
  901. if (journalID == '12' && applyCreditLimit == '1') {
  902. if (tot > custCreditLimit && document.getElementById('override_user').value == '') showOverride();
  903. } else {
  904. if (document.getElementById('tb_icon_save')) document.getElementById('tb_icon_save').style.visibility = "";
  905. if (document.getElementById('tb_icon_print')) document.getElementById('tb_icon_print').style.visibility = "";
  906. if (document.getElementById('tb_icon_post_previous')) document.getElementById('tb_icon_post_previous').style.visibility = "";
  907. if (document.getElementById('tb_icon_post_next')) document.getElementById('tb_icon_post_next').style.visibility = "";
  908. }
  909. }
  910. function calculateDiscountPercent() {
  911. var percent = parseFloat(cleanCurrency(document.getElementById('disc_percent').value));
  912. var subTotal = parseFloat(cleanCurrency(document.getElementById('subtotal').value));
  913. var discount = new String((percent / 100) * subTotal);
  914. document.getElementById('discount').value = formatCurrency(discount);
  915. updateTotalPrices();
  916. }
  917. function calculateDiscount() {
  918. // determine the discount percent
  919. var discount = parseFloat(cleanCurrency(document.getElementById('discount').value));
  920. if (isNaN(discount)) discount = 0;
  921. var subTotal = parseFloat(cleanCurrency(document.getElementById('subtotal').value));
  922. if (subTotal != 0) {
  923. var percent = 100000 * (1 - ((subTotal - discount) / subTotal));
  924. document.getElementById('disc_percent').value = Math.round(percent) / 1000;
  925. } else {
  926. document.getElementById('disc_percent').value = '0.00';
  927. }
  928. updateTotalPrices();
  929. }
  930. function showOverride() {
  931. if (document.getElementById('tb_icon_save')) document.getElementById('tb_icon_save').style.visibility = "hidden";
  932. if (document.getElementById('tb_icon_print')) document.getElementById('tb_icon_print').style.visibility = "hidden";
  933. if (document.getElementById('tb_icon_post_previous')) document.getElementById('tb_icon_post_previous').style.visibility = "hidden";
  934. if (document.getElementById('tb_icon_post_next')) document.getElementById('tb_icon_post_next').style.visibility = "hidden";
  935. $('#override_order').dialog('open');
  936. }
  937. function checkOverride () {
  938. var user = document.getElementById('override_user').value;
  939. var pass = document.getElementById('override_pass').value;
  940. $.ajax({
  941. type: "GET",
  942. url: 'index.php?module=phreedom&page=ajax&op=validate&u='+user+'&p='+pass+'&level=4',
  943. dataType: ($.browser.msie) ? "text" : "xml",
  944. error: function(XMLHttpRequest, textStatus, errorThrown) {
  945. alert ("Ajax Error: " + XMLHttpRequest.responseText + "\nTextStatus: " + textStatus + "\nErrorThrown: " + errorThrown);
  946. },
  947. success: clearOverride
  948. });
  949. }
  950. function clearOverride(sXml) {
  951. var xml = parseXml(sXml);
  952. if (!xml) return;
  953. var result = $(xml).find("result").text();
  954. if (result == 'validated') {
  955. $('#override_order').dialog('close');
  956. if (document.getElementById('tb_icon_save')) document.getElementById('tb_icon_save').style.visibility = "";
  957. if (document.getElementById('tb_icon_print')) document.getElementById('tb_icon_print').style.visibility = "";
  958. if (document.getElementById('tb_icon_post_previous')) document.getElementById('tb_icon_post_previous').style.visibility = "";
  959. if (document.getElementById('tb_icon_post_next')) document.getElementById('tb_icon_post_next').style.visibility = "";
  960. } else {
  961. alert(adminNotValidated);
  962. }
  963. }
  964. function checkShipAll() {
  965. var numRows = 0;
  966. var item_count;
  967. if (single_line_list == '1') {
  968. numRows = document.getElementById('item_table').rows.length;
  969. } else {
  970. numRows = document.getElementById('item_table').rows.length/2;
  971. }
  972. for (var i=1; i<numRows; i++) {
  973. item_count = parseFloat(document.getElementById('qty_'+i).value);
  974. if (item_count != 0 && !isNaN(item_count)) {
  975. document.getElementById('pstd_'+i).value = item_count;
  976. }
  977. updateRowTotal(i, false);
  978. }
  979. }
  980. function activateFields() {
  981. if (payments_installed) {
  982. var index = document.getElementById('payment_method').selectedIndex;
  983. for (var i=0; i<document.getElementById('payment_method').options.length; i++) {
  984. document.getElementById('pm_'+i).style.visibility = 'hidden';
  985. }
  986. document.getElementById('pm_'+index).style.visibility = '';
  987. }
  988. }
  989. function updateDesc(rowID) {
  990. // this function not used - it sets the chart of accounts description if required by the form
  991. }
  992. function buildFreightDropdown() {
  993. // fetch the selection
  994. if (!freightCarriers) return;
  995. var selectedCarrier = document.getElementById('ship_carrier').value;
  996. for (var i=0; i<freightCarriers.length; i++) {
  997. if (freightCarriers[i] == selectedCarrier) break;
  998. }
  999. var selectedMethod = document.getElementById('ship_service').value;
  1000. for (var j=0; j<freightLevels.length; j++) {
  1001. if (freightLevels[j] == selectedMethod) break;
  1002. }
  1003. // erase the drop-down
  1004. while (document.getElementById('ship_service').options.length) document.getElementById('ship_service').remove(0);
  1005. // build the new one, first check to see if None was selected
  1006. if (i == freightCarriers.length) return; // None was selected, leave drop-down empty
  1007. var m = 0; // allows skip if method is not available
  1008. for (var k=0; k<freightLevels.length; k++) {
  1009. if (freightDetails[i][k] != '') {
  1010. var newOpt = document.createElement("option");
  1011. newOpt.text = freightDetails[i][k];
  1012. document.getElementById('ship_service').options.add(newOpt);
  1013. document.getElementById('ship_service').options[m].value = freightLevels[k];
  1014. m++;
  1015. }
  1016. }
  1017. // set the default choice
  1018. document.getElementById('ship_service').value = selectedMethod;
  1019. }
  1020. function recalculateCurrencies() {
  1021. var workingTotal = 0;
  1022. var workingUnitValue = 0;
  1023. var itemTotal = 0;
  1024. var numRows = 0;
  1025. v

Large files files are truncated, but you can click here to view the full file