fix: Update patient_tracker.php (#6595)
[openemr.git] / library / classes / OFX.class.php
blob09917fa0f0124b83f395100bdf185a33edd73351
1 <?php
3 require_once $GLOBALS['OE_SITE_DIR'] . "/config.php";
5 /**
6 * class OFX
8 */
9 class OFX
11 var $billing_array;
12 var $config;
13 /**
14 * Constructor sets all OFX attributes to their default value
16 function __construct($ba = array())
18 $this->billing_array = $ba;
19 $this->config = $GLOBALS['oer_config']['ofx'];
22 function get_OFX()
24 $string = $this->_ofx_header() . "\n";
25 $trns = array();
26 $sum = 0.00;
27 $date_start = date("YmdHis", strtotime($this->billing_array[0]['bill_date']));
28 $date_end = date("YmdHis", strtotime($this->billing_array[0]['bill_date']));
29 foreach ($this->billing_array as $bill) {
30 $key = $bill['pid'] . "-" . $bill['encounter'];
31 if ($bill['code_type'] != "ICD9" && $bill['code_type'] != "COPAY") {
32 $trns[$key]['amount'] += $bill['fee'];
33 $trns[$key]['date'] = $bill['bill_date'];
34 $trns[$key]['memo'] .= $bill['code'] . " ";
35 $trns[$key]['payeeid'] = $bill['pid'];
36 $trns[$key]['name'] = $bill['name'];
37 if ($date_start > date("YmdHis", strtotime($trns[$key]['date']))) {
38 //echo "\nsd: $date_start < " . date("YmdHis",strtotime($trn[$key]['date'])) . "\n";
39 $date_start = date("YmdHis", strtotime($trns[$key]['date']));
42 if ($date_end < date("YmdHis", strtotime($trns[$key]['date']))) {
43 //echo "\ned: $date_end < " . date("YmdHis",strtotime($trn[$key]['date'])) . "\n";
44 $date_end = date("YmdHis", strtotime($trns[$key]['date']));
49 if (!empty($date_start) && !empty($date_end)) {
50 $string .= "<DTSTART>" . $date_start . "\n";
51 $string .= "<DTEND>" . $date_end . "\n";
54 foreach ($trns as $key => $trn) {
55 $string .= "<STMTTRN>\n";
56 $string .= "<TRNTYPE>CREDIT\n";
57 $string .= "<DTPOSTED>" . date("YmdHis", strtotime($trn['date'])) . "\n";
58 $string .= "<TRNAMT>" . sprintf("%0.2f", $trn['amount']) . "\n";
59 $string .= "<FITID>" . $key . "\n";
60 $string .= "<NAME>" . $trn['name'] . "\n";
61 $string .= "<CHECKNUM>" . $key . "\n";
62 $string .= "<PAYEEID>" . $trn['payeeid'] . "\n";
63 $string .= "<MEMO>" . trim($trn['memo']) . "\n";
64 $string .= "</STMTTRN>\n";
65 $sum += $trn['amount'];
68 $string .= $this->_ofx_footer($sum);
69 return $string;
72 function _ofx_header()
74 $string .= "OFXHEADER:100\n";
75 $string .= "DATA:OFXSGML\n";
76 $string .= "VERSION:102\n";
77 $string .= "SECURITY:NONE\n";
78 $string .= "ENCODING:USASCII\n";
79 $string .= "CHARSET:1252\n";
80 $string .= "COMPRESSION:NONE\n";
81 $string .= "OLDFILEUID:NONE\n";
82 $string .= "NEWFILEUID:NONE\n\n";
83 $string .= "<OFX>\n";
84 $string .= "<SIGNONMSGSRSV1>\n";
85 $string .= "<SONRS>\n";
86 $string .= "<STATUS>\n";
87 $string .= "<CODE>0\n";
88 $string .= "<SEVERITY>INFO\n";
89 $string .= "</STATUS>\n";
90 $string .= "<DTSERVER>" . date("YmdHis") . "\n";
91 $string .= "<LANGUAGE>ENG\n";
93 //OpenEMR doesn't have a good grasp of timezone so we will need to revisit this later if it causes problems for transaction timestamping
94 $string .= "<DTACCTUP>" . date("YmdHis") . ".000[-8:PST]\n";
96 //intuit programs requires the fields below or it won't accept our ofx transactions
97 $string .= "<FI>\n";
98 $string .= "<ORG>Bank of America\n";
99 $string .= "<FID>5959\n";
100 $string .= "</FI>\n";
101 $string .= "<INTU.BID>6526\n";
102 $string .= "<INTU.USERID>111111111\n";
103 //end intuit specific fields
105 $string .= "</SONRS>\n";
106 $string .= "</SIGNONMSGSRSV1>\n";
108 $string .= "<BANKMSGSRSV1>\n";
109 $string .= "<STMTTRNRS>\n";
110 $string .= "<TRNUID>0\n";
111 $string .= "<STATUS>\n";
112 $string .= "<CODE>0\n";
113 $string .= "<SEVERITY>INFO\n";
114 $string .= "</STATUS>\n";
115 $string .= "<STMTRS>\n";
116 $string .= "<CURDEF>USD\n";
117 $string .= "<BANKACCTFROM>\n";
118 $string .= "<BANKID>" . $this->config['bankid'] . "\n";
119 $string .= "<ACCTID>" . $this->config['acctid'] . "\n";
120 $string .= "<ACCTTYPE>CHECKING";
121 $string .= "</BANKACCTFROM>\n";
122 $string .= "<BANKTRANLIST>\n";
123 return $string;
126 function _ofx_footer($sum)
128 $string = "</BANKTRANLIST>\n";
129 $string .= "<LEDGERBAL>\n";
130 $string .= "<BALAMT>" . sprintf("%0.2f", $sum) . "\n";
131 $string .= "<DTASOF>" . date("YmdHis") . "\n";
132 $string .= "</LEDGERBAL>\n";
133 $string .= "</STMTRS>\n";
134 $string .= "</STMTTRNRS>\n";
135 $string .= "</BANKMSGSRSV1>\n";
136 $string .= "</OFX>\n";
137 return $string;