PageRenderTime 46ms CodeModel.GetById 18ms RepoModel.GetById 1ms app.codeStats 0ms

/modules/billing/proc_cc.php

https://github.com/MyITCRM/myitcrm1
PHP | 356 lines | 330 code | 17 blank | 9 comment | 7 complexity | 98b2ea919ef84a7f6dd3f6c9b08fb5d3 MD5 | raw file
  1. <?
  2. require('include.php');
  3. //print_r ($_POST);
  4. /* get vars */
  5. $card_type = $_POST['card_type'];
  6. $cc_number = $_POST['cc_number'];
  7. $cc_ccv = $_POST['cc_ccv'];
  8. $cc_expr_month = $_POST['StartDateMonth'];
  9. $cc_expr_year = $_POST['StartDateYear'];
  10. $customer_id = $_POST['customer_id'];
  11. $invoice_id = $_POST['invoice_id'];
  12. $workorder_id = $_POST['workorder_id'];
  13. $cc_amount = $_POST['cc_amount'];
  14. $cc_enc = encrypt($cc_number, $strKey);
  15. $cc_deenc = decrypt ($cc_enc, $strKey);
  16. $cc_num = safe_number($cc_number);
  17. $cc_expiry_date = $cc_expr_month.$cc_expr_year;
  18. /* get our excepted cards */
  19. $q = "SELECT CARD_TYPE, CARD_NAME FROM ".PRFX."CONFIG_CC_CARDS WHERE ACTIVE='1'";
  20. if(!$rs = $db->execute($q)) {
  21. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1');
  22. exit;
  23. }
  24. $card_type_accepted_arr = $rs->GetArray();
  25. /* validation */
  26. //Check to see if we are processing more then required
  27. if($invoice_details['BALANCE'] < $cc_amount){
  28. force_page('billing', 'new&wo_id='.$workorder_id.'&customer_id='.$customer_id.' &invoice_id='.$invoice_id.'&error_msg= You can not bill more than the amount of the invoice.');
  29. exit;
  30. }
  31. if(!validate_cc( $cc_number, $card_type, $card_type_accepted_arr )){
  32. force_page("billing", "new&error_msg=Card number is invalid.&wo_id=$workorder_id&customer_id=$customer_id&invoice_id=$invoice_id&page_title=Billing");
  33. exit;
  34. }
  35. if(!validate_cc_exp($cc_expr_month, $cc_expr_year)) {
  36. force_page("billing", "new&error_msg=Card expiration month or year is invalid.&wo_id=$workorder_id&customer_id=$customer_id&invoice_id=$invoice_id&page_title=Billing");
  37. exit;
  38. }
  39. /* get customer account */
  40. $q = "SELECT CUSTOMER_ID,CUSTOMER_DISPLAY_NAME,CUSTOMER_FIRST_NAME,CUSTOMER_LAST_NAME,CUSTOMER_ADDRESS,CUSTOMER_CITY,CUSTOMER_STATE,CUSTOMER_ZIP,CUSTOMER_EMAIL,CUSTOMER_PHONE FROM ".PRFX."TABLE_CUSTOMER WHERE CUSTOMER_ID=".$db->qstr($customer_id);
  41. if(!$rs = $db->execute($q)) {
  42. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1&type=database');
  43. exit;
  44. }
  45. $cust_id = $rs->fields['CUSTOMER_ID'];
  46. $first_name = $rs->fields['CUSTOMER_FIRST_NAME'];
  47. $last_name = $rs->fields['CUSTOMER_LAST_NAME'];
  48. $display_name = $rs->fields['CUSTOMER_DISPLAY_NAME'];
  49. $address = $rs->fields['CUSTOMER_ADDRESS'];
  50. $city = $rs->fields['CUSTOMER_CITY'];
  51. $state = $rs->fields['CUSTOMER_STATE'];
  52. $zip = $rs->fields['CUSTOMER_ZIP'];
  53. $cust_email = $rs->fields['CUSTOMER_EMAIL'];
  54. $cust_phone = $rs->fields['CUSTOMER_PHONE'];
  55. /* get cc Plug in information */
  56. $q = "SELECT AN_LOGIN_ID,AN_PASSWORD,AN_TRANS_KEY FROM ".PRFX."SETUP";
  57. if(!$rs = $db->execute($q)) {
  58. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1&type=database');
  59. exit;
  60. }
  61. $an_login = $rs->fields['AN_LOGIN_ID'];
  62. $an_password = ($rs->fields['AN_PASSWORD']);
  63. $an_key = $rs->fields['AN_TRANS_KEY'];
  64. /* get company Display Name for bill */
  65. $q = "SELECT * FROM ".PRFX."TABLE_COMPANY";
  66. if(!$rs = $db->execute($q)) {
  67. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1&type=database');
  68. exit;
  69. }
  70. $inv_msg = $rs->fields['COMPANY_NAME']."(Phone ".$rs->fields['COMPANY_PHONE'].") Repair Charge";
  71. $country = $rs->fields['COMPANY_COUNTRY'];
  72. $email = $rs->fields['COMPANY_EMAIL'];
  73. /* proccess CC card */
  74. $authnet_values = array
  75. (
  76. "x_ADC_Delim_Data" =>"TRUE",
  77. "x_ADC_Relay_Response" =>"TRUE",
  78. "x_ADC_URL" =>"FALSE",
  79. "x_Amount" =>$cc_amount,
  80. "x_currency_code" =>$curency_code,
  81. "x_Card_Num" =>$cc_number,
  82. "x_card_code" =>$cc_ccv,
  83. "x_Exp_Date" =>$cc_expiry_date,
  84. "x_Login" =>$an_login,
  85. "x_merchant_email" =>$email,
  86. "x_Method" =>"CC",
  87. "x_Password" =>$an_password,
  88. "x_Trans_ID" =>"",
  89. "x_Type" =>"AUTH_CAPTURE",
  90. "x_cust_id" =>$cust_id,
  91. "x_first_name" =>$first_name,
  92. "x_last_name" =>$last_name,
  93. "x_company" =>$display_name,
  94. "x_address" =>$address,
  95. "x_city" =>$city,
  96. "x_state" =>$state,
  97. "x_zip" =>$zip,
  98. "x_country" =>$country,
  99. "x_email" =>$cust_email,
  100. "x_phone" =>$cust_phone,
  101. "x_email_customer" =>"FALSE",
  102. "x_ship_to_first_name" =>$first_name,
  103. "x_ship_to_last_name" =>$last_name,
  104. "x_ship_to_company" =>$display_name,
  105. "x_ship_to_address" =>$address,
  106. "x_ship_to_city" =>$city,
  107. "x_ship_to_state" =>$state,
  108. "x_ship_to_zip" =>$zip,
  109. "x_ship_to_country" =>$country,
  110. "x_tax" =>"0.00",
  111. "x_invoice_num" =>$invoice_id,
  112. "x_description" =>$inv_msg,
  113. "x_Version" =>"3.0",
  114. "x_Test_Request" =>"TRUE"
  115. );
  116. $fields = "";
  117. foreach( $authnet_values as $key => $value ) $fields .= "$key=" . urlencode( $value ) . "&";
  118. $result = charge_an($fields);
  119. $result = str_replace("\"", "", $result);
  120. $result = explode(",", $result);
  121. /* return codes
  122. 1 Approved
  123. 2 Declined
  124. 3 Error
  125. */
  126. if($result[0] == "1") {
  127. $q = "SELECT * FROM ".PRFX."TABLE_INVOICE WHERE INVOICE_ID=".$db->qstr($invoice_id);
  128. if(!$rs = $db->execute($q)) {
  129. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1');
  130. exit;
  131. }
  132. $invoice_details = $rs->FetchRow();
  133. /* check if this is a partial payment */
  134. if($invoice_details['INVOICE_AMOUNT'] > $cc_amount){
  135. if($invoice_details['balance'] > 0 ) {
  136. $balance = $invoice_details['balance'] - $cc_amount;
  137. } else {
  138. $balance = $invoice_details['INVOICE_AMOUNT'] - $cc_amount;
  139. }
  140. $paid_amount = $cc_amount + $invoice_details['PAID_AMOUNT'];
  141. $balance = sprintf("%01.2f", $balance);
  142. if($balance == 0 ) {
  143. $flag = 1;
  144. } else {
  145. $flag = 0;
  146. }
  147. /* insert Transaction */
  148. $memo = "APPROVED: ".$result[3]." Partial Credit Card Payment Made of $currency_sym$cc_amount, Balance Due: $currency_sym$balance, Card Number: $cc_num TRANS ID: ".$result[37]." AUTH CODE: ".$result[4];
  149. $q = "INSERT INTO ".PRFX."TABLE_TRANSACTION SET
  150. DATE = ".$db->qstr(time()).",
  151. TYPE = '1',
  152. INVOICE_ID = ".$db->qstr($invoice_id).",
  153. WORKORDER_ID = ".$db->qstr($workorder_id).",
  154. CUSTOMER_ID = ".$db->qstr($customer_id).",
  155. MEMO = ".$db->qstr($memo).",
  156. AMOUNT = ".$db->qstr($cc_amount);
  157. if(!$rs = $db->execute($q)) {
  158. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1');
  159. exit;
  160. }
  161. /* update the invoice */
  162. if($balance == 0 ) {
  163. $q = "UPDATE ".PRFX."TABLE_INVOICE SET
  164. PAID_DATE = ".$db->qstr(time()).",
  165. INVOICE_PAID = ".$db->qstr($flag).",
  166. PAID_AMOUNT = ".$db->qstr($paid_amount).",
  167. balance = ".$db->qstr($balance).",
  168. INVOICE_PAID ='1' WHERE INVOICE_ID = ".$db->qstr($invoice_id);
  169. } else {
  170. $q = "UPDATE ".PRFX."TABLE_INVOICE SET
  171. PAID_DATE = ".$db->qstr(time()).",
  172. INVOICE_PAID = ".$db->qstr($flag).",
  173. PAID_AMOUNT = ".$db->qstr($paid_amount).",
  174. balance = ".$db->qstr($balance)." WHERE INVOICE_ID = ".$db->qstr($invoice_id);
  175. }
  176. if(!$rs = $db->execute($q)) {
  177. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1');
  178. exit;
  179. }
  180. /* update work order */
  181. $q = "INSERT INTO ".PRFX."TABLE_WORK_ORDER_STATUS SET
  182. WORK_ORDER_ID = ".$db->qstr($workorder_id).",
  183. WORK_ORDER_STATUS_DATE = ".$db->qstr(time()).",
  184. WORK_ORDER_STATUS_NOTES = ".$db->qstr($memo).",
  185. WORK_ORDER_STATUS_ENTER_BY = ".$db->qstr($_SESSION['login_id']);
  186. if(!$rs = $db->execute($q)) {
  187. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1');
  188. exit;
  189. }
  190. /* update if balance = 0 */
  191. if($balance == 0 ) {
  192. $q = "UPDATE ".PRFX."TABLE_WORK_ORDER SET
  193. WORK_ORDER_STATUS = '6',
  194. WORK_ORDER_CURRENT_STATUS = '8'
  195. WHERE WORK_ORDER_ID =".$db->qstr($workorder_id);
  196. if(!$rs = $db->execute($q)) {
  197. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1');
  198. exit;
  199. }
  200. }
  201. force_page('invoice', "view&invoice_id=$invoice_id&customer_id=$customer_id");
  202. } else {
  203. /* full payment made */
  204. if($invoice_details['INVOICE_AMOUNT'] == $cc_amount){
  205. /* insert Transaction */
  206. $memo = "APPROVED: ".$result[3]." Amount: $currency_sym$cc_amount, Card Number: $cc_num TRANS ID: ".$result[37]."AUTH CODE ".$result[4];
  207. $q = "INSERT INTO ".PRFX."TABLE_TRANSACTION SET
  208. DATE = ".$db->qstr(time()).",
  209. TYPE = '1',
  210. INVOICE_ID = ".$db->qstr($invoice_id).",
  211. WORKORDER_ID = ".$db->qstr($workorder_id).",
  212. CUSTOMER_ID = ".$db->qstr($customer_id).",
  213. MEMO = ".$db->qstr($memo).",
  214. AMOUNT = ".$db->qstr($cc_amount);
  215. if(!$rs = $db->execute($q)) {
  216. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1');
  217. exit;
  218. }
  219. /* update the invoice */
  220. $q = "UPDATE ".PRFX."TABLE_INVOICE SET
  221. PAID_DATE = ".$db->qstr(time()).",
  222. PAID_AMOUNT = ".$db->qstr($cc_amount).",
  223. INVOICE_PAID = '1',
  224. EMPLOYEE_ID = ".$db->qstr($_SESSION['login_id'])."
  225. WHERE INVOICE_ID = ".$db->qstr($invoice_id);
  226. if(!$rs = $db->execute($q)) {
  227. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1');
  228. exit;
  229. }
  230. /* update work order */
  231. $q = "INSERT INTO ".PRFX."TABLE_WORK_ORDER_STATUS SET
  232. WORK_ORDER_ID = ".$db->qstr($workorder_id).",
  233. WORK_ORDER_STATUS_DATE = ".$db->qstr(time()).",
  234. WORK_ORDER_STATUS_NOTES = ".$db->qstr($memo).",
  235. WORK_ORDER_STATUS_ENTER_BY = ".$db->qstr($_SESSION['login_id']);
  236. if(!$rs = $db->execute($q)) {
  237. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1');
  238. exit;
  239. }
  240. $q = "UPDATE ".PRFX."TABLE_WORK_ORDER SET
  241. WORK_ORDER_STATUS = '6',
  242. WORK_ORDER_CURRENT_STATUS = '8'
  243. WHERE WORK_ORDER_ID =".$db->qstr($workorder_id);
  244. if(!$rs = $db->execute($q)) {
  245. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1');
  246. exit;
  247. }
  248. force_page("invoice", "view&invoice_id=".$invoice_id."&customer_id=".$customer_id);
  249. }
  250. }
  251. } else if($result[0] == "2"){
  252. /* insert Transaction */
  253. $memo = "DECLINED: ".$result[3]." Card Number: $cc_num TRANS ID: ".$result[37];
  254. $q = "INSERT INTO ".PRFX."TABLE_TRANSACTION SET
  255. DATE = ".$db->qstr(time()).",
  256. TYPE = '1',
  257. INVOICE_ID = ".$db->qstr($invoice_id).",
  258. WORKORDER_ID = ".$db->qstr($workorder_id).",
  259. CUSTOMER_ID = ".$db->qstr($customer_id).",
  260. MEMO = ".$db->qstr($memo).",
  261. AMOUNT = ".$db->qstr($cc_amount);
  262. if(!$rs = $db->execute($q)) {
  263. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1');
  264. exit;
  265. }
  266. force_page('billing', 'new&wo_id='.$workorder_id.'&customer_id='.$customer_id .'&invoice_id='.$invoice_id.'&page_title=Billing&error_msg='.$result[3]);
  267. exit;
  268. } else if($result[0] == "3") {
  269. /* insert Transaction */
  270. $memo = "ERROR: ".$result[3]." Card Number: $cc_num TRANS ID: ".$result[37];
  271. $q = "INSERT INTO ".PRFX."TABLE_TRANSACTION SET
  272. DATE = ".$db->qstr(time()).",
  273. TYPE = '1',
  274. INVOICE_ID = ".$db->qstr($invoice_id).",
  275. WORKORDER_ID = ".$db->qstr($workorder_id).",
  276. CUSTOMER_ID = ".$db->qstr($customer_id).",
  277. MEMO = ".$db->qstr($memo).",
  278. AMOUNT = ".$db->qstr($cc_amount);
  279. if(!$rs = $db->execute($q)) {
  280. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1');
  281. exit;
  282. }
  283. force_page('billing', 'new&wo_id='.$workorder_id.'&customer_id='.$customer_id .'&invoice_id='.$invoice_id.'&page_title=Billing&error_msg='.$result[3]);
  284. exit;
  285. } else if($result[0] == "4"){
  286. /* insert Transaction */
  287. $memo = "ERROR: ".$result[3]." Card Number: $cc_num TRANS ID: ".$result[37];
  288. $q = "INSERT INTO ".PRFX."TABLE_TRANSACTION SET
  289. DATE = ".$db->qstr(time()).",
  290. TYPE = '1',
  291. INVOICE_ID = ".$db->qstr($invoice_id).",
  292. WORKORDER_ID = ".$db->qstr($workorder_id).",
  293. CUSTOMER_ID = ".$db->qstr($customer_id).",
  294. MEMO = ".$db->qstr($memo).",
  295. AMOUNT = ".$db->qstr($cc_amount);
  296. if(!$rs = $db->execute($q)) {
  297. force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1');
  298. exit;
  299. }
  300. force_page('billing', 'new&wo_id='.$workorder_id.'&customer_id='.$customer_id .'&invoice_id='.$invoice_id.'&page_title=Billing&error_msg='.$result[3]);
  301. exit;
  302. } else {
  303. }
  304. ?>