PageRenderTime 29ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/modules/parts/checkout.php

https://github.com/MyITCRM/myitcrm1
PHP | 387 lines | 290 code | 70 blank | 27 comment | 106 complexity | d45b56a09af436f22c6f9e56bb66c2bd MD5 | raw file
  1. <?php
  2. ####################################################
  3. # IN #
  4. # #
  5. # #
  6. # This program is distributed under the terms and #
  7. # conditions of the GPL #
  8. # Parts Check Out file #
  9. # Version 0.0.1 Sat Nov 26 20:46:40 PST 2005 #
  10. # #
  11. ####################################################
  12. $q = "SELECT PARTS_LO,PARTS_LOGIN,PARTS_PASSWORD,SERVICE_CODE,PARTS_MARKUP,INVOICE_TAX FROM ".PRFX."SETUP ";
  13. if(!$rs = $db->execute($q)) {
  14. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1&type=database');
  15. exit;
  16. }
  17. $local = $rs->fields['PARTS_LO'];
  18. $login = $rs->fields['PARTS_LOGIN'];
  19. $passwd = $rs->fields['PARTS_PASSWORD'];
  20. $service_code = $rs->fields['SERVICE_CODE'];
  21. $tax = $rs->fields['INVOICE_TAX'];
  22. $tax = $tax * 0.01;
  23. $mark_up = $rs->fields['PARTS_MARKUP'];
  24. $mark_up = $mark_up * 0.01;
  25. $q = "SELECT COMPANY_ZIP FROM ".PRFX."TABLE_COMPANY";
  26. if(!$rs = $db->execute($q)) {
  27. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1&type=database');
  28. exit;
  29. }
  30. $from_zip = $rs->fields['COMPANY_ZIP'];
  31. $workorder_id = $VAR['wo_id'];
  32. $q = "SELECT CUSTOMER_ID FROM ".PRFX."TABLE_WORK_ORDER WHERE WORK_ORDER_ID=".$db->qstr($workorder_id);
  33. if(!$rs = $db->execute($q)) {
  34. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1&type=database');
  35. exit;
  36. }
  37. $customer_id = $rs->fields['CUSTOMER_ID'];
  38. $q = "SELECT SKU,AMOUNT FROM ".PRFX."CART";
  39. if(!$rs = $db->execute($q)) {
  40. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1&type=database');
  41. exit;
  42. }
  43. if($rs->fields['SKU'] == ''){
  44. force_page('parts', 'main&error_msg=You have no parts in your Cart. Please select the parts you wish to order and click add.&wo_id='.$VAR['wo_id'].'&page_title=Order%20Parts');
  45. exit;
  46. }
  47. $cc .= "
  48. <CRMPARTSREQUEST>
  49. <ACCOUNT>
  50. <LOGIN>$login</LOGIN>
  51. <PASSWORD>$passwd</PASSWORD>
  52. <FROMZIP>$from_zip</FROMZIP>
  53. <LOCAL>$local</LOCAL>
  54. <SERVICECODE>$service_code</SERVICECODE>
  55. <WORKORDER>$workorder_id</WORKORDER>
  56. </ACCOUNT>";
  57. $count=0;
  58. while ($arr = $rs->FetchRow()) {
  59. $cc .= "<ITEM>";
  60. $cc .= "<SKU>". $arr['SKU']. "</SKU>";
  61. $cc .= "<COUNT>".$arr['AMOUNT']."</COUNT>";
  62. $cc .= "</ITEM>";
  63. $count++;
  64. }
  65. $cc .="</CRMPARTSREQUEST>" ;
  66. $ch = curl_init();
  67. curl_setopt($ch, CURLOPT_URL, INCITCRM);
  68. curl_setopt ($ch, CURLOPT_POST, 1);
  69. curl_setopt ($ch, CURLOPT_POSTFIELDS, "page=parts:processes&xml=".$cc."&escape=1");
  70. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  71. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  72. $content = curl_exec ($ch); # This returns HTML
  73. curl_close ($ch);
  74. /*
  75. print_r($content);
  76. die;
  77. */
  78. if($content == '') {
  79. echo "No response from server";
  80. exit;
  81. } else if($content == '0') {
  82. echo "Error 0 -- Failed login";
  83. exit;
  84. } else if ($content == '1'){
  85. echo "Error 1 -- Could Not Get Warehouse Location";
  86. exit;
  87. } else if ($content == '2'){
  88. echo "Error 2 -- Could not get Shipping Service Type";
  89. exit;
  90. } else if ($content == '3'){
  91. echo "Error 3 -- Could get Shipping information";
  92. exit;
  93. } else if ($content == '4'){
  94. echo "Error 4 -- Server Error Could not complete request";
  95. exit;
  96. } else if ($content == '5'){
  97. echo "Error 5 -- No response from UPS Server";
  98. exit;
  99. } else if ($content == '6'){
  100. echo "Error 6 -- Credit Card On file Declined. Please Update your Account Information";
  101. exit;
  102. } if ($content == '7') {
  103. echo "Error 7 -- Error with Credit Card On file Declined. Please Update your Account Information";
  104. exit;
  105. } else {
  106. $parser = xml_parser_create();
  107. xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
  108. xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
  109. xml_parse_into_struct($parser, $content, $values, $tags);
  110. xml_parser_free($parser);
  111. foreach($values as $xml){
  112. if($xml['tag'] == "ORDER_ID" && $xml['value'] != ""){
  113. $crm_invoice_id = $xml['value'];
  114. }
  115. if($xml['tag'] == "CART_TOTAL" && $xml['value'] != ""){
  116. $cart_total = number_format( ($xml['value'] * $mark_up) + $xml['value'], 2,'.', '');
  117. }
  118. if($xml['tag'] == "SHIPPING" && $xml['value'] != ""){
  119. $shipping = $xml['value'];
  120. }
  121. if($xml['tag'] == "WEIGHT" && $xml['value'] != ""){
  122. $weight = $xml['value'];
  123. }
  124. if($xml['tag'] == "TOTAL_ITEMS" && $xml['value'] != ""){
  125. $total_items = $xml['value'];
  126. }
  127. if($xml['tag'] == "WORKORDER" && $xml['value'] != ""){
  128. $wo_id = $xml['value'];
  129. }
  130. /* get order details */
  131. if($xml['tag'] == "SKU" && $xml['value'] != ""){
  132. $sku= array('SKU'=> $xml['value']);
  133. }
  134. if($xml['tag'] == "COUNT" && $xml['value'] != ""){
  135. $count= array('COUNT'=> $xml['value']);
  136. }
  137. if($xml['tag'] == "PRICE" && $xml['value'] != ""){
  138. $price= array('PRICE'=> number_format( ($xml['value'] * $mark_up) + $xml['value'], 2,'.', '') );
  139. }
  140. if($xml['tag'] == "SUB_TOTAL" && $xml['value'] != ""){
  141. $sub_total= array('SUB_TOTAL'=> number_format( ($xml['value'] * $mark_up) + $xml['value'], 2,'.', '') );
  142. }
  143. if($xml['tag'] == "VENDOR" && $xml['value'] != ""){
  144. $vendor= array('VENDOR'=> $xml['value']);
  145. }
  146. if($xml['tag'] == "DESCRIPTION" && $xml['value'] != ""){
  147. $description= array('DESCRIPTION'=> $xml['value']);
  148. }
  149. if($xml['tag'] == "ITEM" && $xml['type'] == "close" ){
  150. $details[] = array_merge($sku,$count,$price,$sub_total,$vendor,$description);
  151. }
  152. }
  153. $total = $cart_total + $shipping;
  154. /* Insert Order */
  155. $q= "INSERT INTO ".PRFX."ORDERS SET
  156. INVOICE_ID =".$db->qstr($crm_invoice_id ).",
  157. WO_ID =".$db->qstr($wo_id ).",
  158. DATE_CREATE ='".time()."',
  159. DATE_LAST ='".time()."',
  160. SUB_TOTAL =".$db->qstr( number_format($cart_total, 2,'.', '') ).",
  161. SHIPPING =".$db->qstr( number_format($shipping, 2,'.', '') ).",
  162. TOTAL =".$db->qstr( number_format($total, 2,'.', '') ).",
  163. WEIGHT =".$db->qstr( number_format($weight, 2,'.', '') ).",
  164. ITEMS =".$db->qstr( $total_items ).",
  165. TRACKING_NO =".$db->qstr(0 ).",
  166. STATUS =".$db->qstr(1 );
  167. if(!$rs = $db->execute($q)) {
  168. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1&type=database');
  169. exit;
  170. }
  171. $order_id = $db->insert_id();
  172. /* Update Work Order status and record invoice created */
  173. if($wo_id != '') {
  174. /* create Invoice */
  175. $q = "SELECT count(*) as count FROM ".PRFX."TABLE_INVOICE WHERE WORKORDER_ID=".$db->qstr($wo_id);
  176. $rs = $db->Execute($q);
  177. $count = $rs->fields['count'];
  178. if($count == 0) {
  179. $tax_amount = number_format($total * $tax, 2, '.', ',');
  180. $total = $total + $tax_amount;
  181. $q = "INSERT INTO ".PRFX."TABLE_INVOICE SET
  182. INVOICE_DATE =".$db->qstr(time() ).",
  183. CUSTOMER_ID =".$db->qstr($customer_id ).",
  184. WORKORDER_ID =".$db->qstr($wo_id ).",
  185. EMPLOYEE_ID =".$db->qstr($_SESSION['login_id'] ).",
  186. INVOICE_PAID ='0',
  187. INVOICE_AMOUNT =".$db->qstr( number_format($total, 2, '.', ',') ).",
  188. SHIPPING =".$db->qstr( number_format($shipping, 2, '.', ',') ).",
  189. TAX =".$db->qstr( number_format($tax_amount, 2, '.', ',') ).",
  190. SUB_TOTAL =".$db->qstr( number_format($cart_total, 2, '.', ',') );
  191. if(!$rs = $db->Execute($q)) {
  192. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1');
  193. exit;
  194. }
  195. $invoice_id = $db->insert_id();
  196. /* Update Work Order status and record invoice created */
  197. $msg = "Invoice Created ID: ".$invoice_id;
  198. $sql = "INSERT INTO ".PRFX."TABLE_WORK_ORDER_STATUS SET
  199. WORK_ORDER_ID =".$db->qstr($wo_id).",
  200. WORK_ORDER_STATUS_DATE =".$db->qstr(time()).",
  201. WORK_ORDER_STATUS_NOTES =".$db->qstr($msg).",
  202. WORK_ORDER_STATUS_ENTER_BY =".$db->qstr($_SESSION['login_id']);
  203. if(!$result = $db->Execute($sql)) {
  204. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1&type=database');
  205. exit;
  206. }
  207. } else if($count == 1) {
  208. /* get curent Invoice details */
  209. $q = "SELECT INVOICE_ID,INVOICE_AMOUNT, SUB_TOTAL, TAX FROM ".PRFX."TABLE_INVOICE WHERE WORKORDER_ID=".$db->qstr($wo_id);
  210. $rs = $db->Execute($q);
  211. $invoice_id = $rs->fields['INVOICE_ID'];
  212. $tax_amount = number_format($total * $tax, 2, '.', ',');
  213. $total = $total + $tax_amount;
  214. $invoice_total = $total + $rs->fields['INVOICE_AMOUNT'];
  215. $invoice_sub_total = $total + $rs->fields['SUB_TOTAL'];
  216. $q = "UPDATE ".PRFX."TABLE_INVOICE SET
  217. INVOICE_AMOUNT =".$db->qstr( number_format($invoice_total, 2, '.', ',') ).",
  218. SUB_TOTAL =".$db->qstr( number_format($invoice_sub_total, 2, '.', ',') ).",
  219. SHIPPING =".$db->qstr( number_format($shipping, 2, '.', ',') ).",
  220. TAX =".$db->qstr( number_format($tax_amount, 2, '.', ',') )."
  221. WHERE INVOICE_ID =".$db->qstr($invoice_id);
  222. }
  223. /* update work order Status */
  224. $msg = "Parts Ordered. Cite CRM Orderd ID: ".$crm_invoice_id." Amount: $".number_format($cart_total, 2, '.', ',')." Shipping: $".number_format($shipping, 2, '.', ',')." Total: $".number_format($cart_total + $shipping, 2, '.', ',');
  225. $sql = "INSERT INTO ".PRFX."TABLE_WORK_ORDER_STATUS SET
  226. WORK_ORDER_ID =".$db->qstr($wo_id).",
  227. WORK_ORDER_STATUS_DATE =".$db->qstr(time()).",
  228. WORK_ORDER_STATUS_NOTES =".$db->qstr($msg).",
  229. WORK_ORDER_STATUS_ENTER_BY =".$db->qstr($_SESSION['login_id']);
  230. if(!$result = $db->Execute($sql)) {
  231. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1&type=database');
  232. exit;
  233. }
  234. /* mark work order waiting for parts */
  235. $sql = "UPDATE ".PRFX."TABLE_WORK_ORDER SET
  236. WORK_ORDER_CURRENT_STATUS ='3',
  237. LAST_ACTIVE =". $db->qstr(time())."
  238. WHERE WORK_ORDER_ID =". $db->qstr($wo_id);
  239. if(!$result = $db->Execute($sql)) {
  240. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1&type=database');
  241. exit;
  242. }
  243. $msg = "Work Order Changed status to Waiting For Parts";
  244. $sql = "INSERT INTO ".PRFX."TABLE_WORK_ORDER_STATUS SET
  245. WORK_ORDER_ID =". $db->qstr( $wo_id).",
  246. WORK_ORDER_STATUS_DATE =". $db->qstr( time()).",
  247. WORK_ORDER_STATUS_NOTES =". $db->qstr( $msg).",
  248. WORK_ORDER_STATUS_ENTER_BY =". $db->qstr( $_SESSION['login_id']);
  249. if(!$result = $db->Execute($sql)) {
  250. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1&type=database');
  251. exit;
  252. }
  253. }
  254. /* insert order details */
  255. $i = 0;
  256. foreach($details as $val) {
  257. $q = "INSERT INTO ".PRFX."ORDERS_DETAILS (DETAILS_ID ,ORDER_ID ,SKU,DESCRIPTION,VENDOR,COUNT,PRICE,SUB_TOTAL)
  258. VALUES ('',".$db->qstr($order_id).",".$db->qstr($details[$i]['SKU']).",".$db->qstr($details[$i]['DESCRIPTION']).",".$db->qstr($details[$i]['VENDOR']).",".$db->qstr($details[$i]['COUNT']).",".$db->qstr($details[$i]['PRICE']).",".$db->qstr($details[$i]['SUB_TOTAL']).")";
  259. if(!$rs = $db->execute($q)) {
  260. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1&type=database');
  261. exit;
  262. }
  263. if($wo_id != '') {
  264. /* insert into Invoice Parts */
  265. $q = "INSERT INTO ".PRFX."TABLE_INVOICE_PARTS SET
  266. INVOICE_ID =".$db->qstr($invoice_id).",
  267. INVOICE_PARTS_MANUF =".$db->qstr($details[$i]['VENDOR']).",
  268. INVOICE_PARTS_MFID =".$db->qstr($details[$i]['SKU']).",
  269. INVOICE_PARTS_DESCRIPTION =".$db->qstr($details[$i]['DESCRIPTION']).",
  270. INVOICE_PARTS_AMOUNT =".$db->qstr($details[$i]['PRICE']).",
  271. INVOICE_PARTS_SUBTOTAL =".$db->qstr($details[$i]['SUB_TOTAL']).",
  272. INVOICE_PARTS_COUNT =".$db->qstr($details[$i]['COUNT']);
  273. if(!$rs = $db->execute($q)) {
  274. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1&type=database');
  275. exit;
  276. }
  277. }
  278. $i++;
  279. }
  280. /* clear cart */
  281. $q = "TRUNCATE TABLE ".PRFX."CART";
  282. $rs = $db->execute($q);
  283. if(!$rs = $db->execute($q)) {
  284. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1&type=database');
  285. exit;
  286. }
  287. /* assign smarty and display page */
  288. $q = "SELECT * FROM ".PRFX."TABLE_COMPANY";
  289. if(!$rs = $db->execute($q)) {
  290. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1&type=database');
  291. exit;
  292. }
  293. $arr = $rs->GetArray();
  294. $smarty->assign('customer', $arr);
  295. if(!xml2php("parts")) {
  296. $smarty->assign('error_msg',"Error in language file");
  297. }
  298. /* get CRM ORDER details */
  299. $q = "SELECT * FROM ".PRFX."ORDERS WHERE INVOICE_ID=".$db->qstr($crm_invoice_id);
  300. if(!$rs = $db->execute($q)) {
  301. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1&type=database');
  302. exit;
  303. }
  304. $invoice_details = array('ORDER_ID'=>$rs->fields['INVOICE_ID'],
  305. 'CART_TOTAL'=>$rs->fields['SUB_TOTAL'],
  306. 'SHIPPING'=>$rs->fields['SHIPPING'],
  307. 'TAX'=>'0.00' ,
  308. 'TOTAL'=>$rs->fields['TOTAL'],
  309. 'WEIGHT'=>$rs->fields['WEIGHT'],
  310. 'TOTAL_ITEMS'=>$rs->fields['ITEMS'],
  311. 'WORKORDER'=>$rs->fields['WO_ID'],
  312. 'DATE'=>time());
  313. $smarty->assign('invoice_details',$invoice_details);
  314. $smarty->assign('details',$details);
  315. $smarty->display('parts'.SEP.'results.tpl');
  316. }
  317. ?>