Пример #1
0
 /**
   Get account using older tables
 */
 private static function getCustdata($dbc, $id)
 {
     if ($id == 0) {
         return self::getAllCustdata($dbc);
     }
     $query = '
     SELECT c.CardNo,
         CASE WHEN s.memtype2 IS NOT NULL THEN s.memtype2 ELSE c.Type END AS memberStatus,
         CASE WHEN s.memtype2 IS NOT NULL THEN c.Type ELSE \'\' END AS activeStatus,
         c.memType AS customerTypeID,
         c.Balance,
         c.ChargeLimit,
         u.upc,
         d.start_date,
         d.end_date,
         m.street,
         m.city,
         m.state,
         m.zip,
         m.ads_OK,
         z.pref,
         t.memDesc,
         CASE WHEN c.LastChange > m.modified THEN c.LastChange ELSE m.modified END AS modified
     FROM custdata AS c
         LEFT JOIN meminfo AS m ON c.CardNo=m.card_no
         LEFT JOIN memContact AS z ON c.CardNo=z.card_no
         LEFT JOIN memDates AS d ON c.CardNo=d.card_no
         LEFT JOIN memberCards AS u ON c.CardNo=u.card_no
         LEFT JOIN suspensions AS s ON c.CardNo=s.cardno
         LEFT JOIN memtype AS t ON c.memType=t.memtype
     WHERE c.CardNo=?
         AND c.personNum=1';
     $prep = $dbc->prepare($query);
     $res = $dbc->execute($prep, array($id));
     if ($res === false || $dbc->numRows($res) == 0) {
         return false;
     }
     $row = $dbc->fetchRow($res);
     $ret = array('cardNo' => $id, 'memberStatus' => $row['memberStatus'], 'activeStatus' => $row['activeStatus'], 'customerTypeID' => $row['customerTypeID'], 'customerType' => $row['memDesc'], 'chargeLimit' => $row['ChargeLimit'], 'chargeBalance' => $row['Balance'], 'idCardUPC' => $row['upc'] === null ? '' : $row['upc'], 'startDate' => $row['start_date'] === null ? '0000-00-00 00:00:00' : $row['start_date'], 'endDate' => $row['end_date'] === null ? '0000-00-00 00:00:00' : $row['end_date'], 'city' => $row['city'] === null ? '' : $row['city'], 'state' => $row['state'] === null ? '' : $row['state'], 'zip' => $row['zip'] === null ? '' : $row['zip'], 'contactAllowed' => $row['ads_OK'] === null ? 1 : $row['ads_OK'], 'contactMethod' => 'mail', 'addressFirstLine' => $row['street'] === null ? '' : $row['street'], 'addressSecondLine' => '', 'customers' => array(), 'modified' => $row['modified']);
     if (strstr($row['street'], "\n")) {
         list($one, $two) = explode("\n", $row['street'], 2);
         $ret['addressFirstLine'] = $one;
         $ret['addressSecondLine'] = $two;
     }
     if ($row['pref'] == 2) {
         $ret['contactMethod'] == 'email';
     } elseif ($row['pref'] == 3) {
         $ret['contactMethod'] == 'both';
     }
     $query = '
     SELECT c.personNum,
         c.FirstName,
         c.LastName, 
         c.chargeOk,
         c.writeChecks,
         c.Discount,
         c.staff,
         m.phone,
         m.email_1,
         m.email_2,
         CASE WHEN s.memtype2 IS NOT NULL THEN s.memtype2 ELSE c.Type END AS memberStatus,
         c.SSI,
         CASE WHEN c.LastChange > m.modified THEN c.LastChange ELSE m.modified END AS modified
     FROM custdata AS c
         LEFT JOIN meminfo AS m ON c.CardNo=m.card_no
         LEFT JOIN suspensions AS s ON c.CardNo=s.cardno
     WHERE c.CardNo=?
     ORDER BY c.personNum';
     $prep = $dbc->prepare($query);
     $res = $dbc->execute($prep, array($id));
     while ($row = $dbc->fetchRow($res)) {
         $customer = array('customerID' => 0, 'firstName' => $row['FirstName'], 'lastName' => $row['LastName'], 'chargeAllowed' => $row['chargeOk'], 'checksAllowed' => $row['writeChecks'], 'discount' => $row['Discount'], 'staff' => $row['staff'], 'lowIncomeBenefits' => $row['SSI'], 'modified' => $row['modified']);
         if ($row['personNum'] == 1) {
             $customer['accountHolder'] = 1;
             $customer['phone'] = $row['phone'] === null ? '' : $row['phone'];
             $customer['email'] = $row['email_1'] === null ? '' : $row['email_1'];
             $customer['altPhone'] = $row['email_2'] === null ? '' : $row['email_2'];
         } else {
             $customer['accountHolder'] = 0;
             $customer['phone'] = '';
             $customer['email'] = '';
             $customer['altPhone'] = '';
         }
         if ($row['memberStatus'] == 'PC') {
             $customer['memberPricingAllowed'] = 1;
             $customer['memberCouponsAllowed'] = 1;
         }
         $ret['customers'][] = $customer;
     }
     // if the new tables are present in classic mode,
     // migrate the account if needed and include the new style
     // record ID in the response
     if ($dbc->tableExists('CustomerAccounts') && $dbc->tableExists('Customers')) {
         $account = new \CustomerAccountsModel($dbc);
         $account->cardNo($id);
         if ($account->load()) {
             $ret['customerAccountID'] = $account->customerAccountID();
         } else {
             $ret['customerAccountID'] = $account->migrateAccount($id);
         }
         // customers tables is more complicated
         // try to match IDs by names
         $customers = new \CustomersModel($dbc);
         $customers->cardNo($id);
         $current = $customers->find();
         if (count($current) != count($ret['customers'])) {
             foreach ($customers as $c) {
                 $c->delete();
             }
             $customers->migrateAccount($id);
             $customers->reset();
             $customers->cardNo($id);
         }
         foreach ($customers->find() as $c) {
             for ($i = 0; $i < count($ret['customers']); $i++) {
                 if ($ret['customers'][$i]['firstName'] == $c->firstName() && $ret['customers'][$i]['lastName'] == $c->lastName()) {
                     $ret['customers'][$i]['customerID'] = $c->customerID();
                     $ret['customers'][$i]['customerAccountID'] = $ret['customerAccountID'];
                     break;
                 }
             }
         }
     } else {
         // plug a value so the returned structure is complete
         $ret['customerAccountID'] = 0;
     }
     return $ret;
 }