コード例 #1
0
ファイル: IndexController.php プロジェクト: anunay/stentors
 /**
  * Saves quote request data and send email to client and manager.
  *
  * @return void
  */
 public function sendOrder()
 {
     $session = new Zend_Session_Namespace('order');
     $page = Cible_FunctionsCategories::getPagePerCategoryView(0, 'list_collections', 14);
     if (!count($session->customer)) {
         $this->_redirect($page);
     }
     $oCart = new Cart();
     // Créer les tableaux pour sauvegarder les données de la commande
     $language = Cible_FunctionsGeneral::getLanguageTitle($session->customer['identification']['language']);
     $custAccount = array('O_LastName' => $session->customer['identification']['lastName'], 'O_FirstName' => $session->customer['identification']['firstName'], 'O_Email' => $session->customer['identification']['email'], 'O_AcombaId' => $session->customer['identification']['acombaNum'], 'O_Salutation' => $session->customer['identification']['salutation'], 'O_Language' => $language);
     if (!empty($session->customer['addressFact']['A_CityId'])) {
         $cityBill = $session->customer['addressFact']['A_CityId'];
     } else {
         $cityBill = $session->customer['addressFact']['A_CityTextValue'];
     }
     if (!empty($session->customer['addressShipping']['A_CityId'])) {
         $cityShip = $session->customer['addressShipping']['A_CityId'];
     } else {
         $cityShip = $session->customer['addressShipping']['A_CityTextValue'];
     }
     $addressBilling = array('O_FirstBillingTel' => $session->customer['addressFact']['AI_FirstTel'], 'O_SecondBillingTel' => $session->customer['addressFact']['AI_SecondTel'], 'O_FirstBillingAddr' => $session->customer['addressFact']['AI_FirstAddress'], 'O_SecondBillingAddr' => $session->customer['addressFact']['AI_SecondAddress'], 'O_BillingCity' => $cityBill, 'O_BillingState' => $session->customer['addressFact']['A_StateId'], 'O_BillingCountry' => $session->customer['addressFact']['A_CountryId'], 'O_ZipCode' => $session->customer['addressFact']['A_ZipCode']);
     $addressShipping = array('O_FirstShippingTel' => $session->customer['addressShipping']['AI_FirstTel'], 'O_SecondShippingTel' => $session->customer['addressShipping']['AI_FirstTel'], 'O_FirstShippingAddr' => $session->customer['addressShipping']['AI_FirstAddress'], 'O_SecondShippingAddr' => $session->customer['addressShipping']['AI_SecondAddress'], 'O_ShippingCity' => $cityShip, 'O_ShippingState' => $session->customer['addressShipping']['A_StateId'], 'O_ShippingCountry' => $session->customer['addressShipping']['A_CountryId'], 'O_ShippingZipCode' => $session->customer['addressShipping']['A_ZipCode']);
     $paid = false;
     $responseId = 0;
     $datePayed = 0;
     $bankTransId = 0;
     $cardHolder = '';
     $cardNumber = '';
     $cardType = '';
     $chargeTotal = $session->order['charge_total'];
     $cardexpiryDate = 0;
     if (isset($session->order['confirmation'])) {
         $paid = true;
         $responseId = $session->order['confirmation']['response_order_id'];
         $datePayed = $session->order['confirmation']['date_stamp'] . ' ' . $session->order['confirmation']['time_stamp'];
         $bankTransId = $session->order['confirmation']['bank_transaction_id'];
         $cardHolder = $session->order['confirmation']['cardholder'];
         $cardNumber = $session->order['confirmation']['f4l4'];
         switch ($session->order['confirmation']['card']) {
             case 'V':
                 $cardType = 'INTERNET';
                 break;
             case 'M':
                 $cardType = 'INTERNET';
                 break;
             default:
                 break;
         }
         if ($session->customer['paymentMeans'] == 'visa' || $session->customer['paymentMeans'] == 'mastercard') {
             $cardType = 'INTERNET';
         }
         $cardexpiryDate = $session->order['confirmation']['expiry_date'];
         $chargeTotal = $session->order['confirmation']['charge_total'];
     }
     $transFees = $session->order['shipFee'];
     $display = true;
     if (Cible_FunctionsGeneral::compareFloats($session->order['subTotal'], ">=", $session->order['limitShip'])) {
         $display = false;
         $transFees = 0;
     }
     $nbPoints = 0;
     if ($session->customer['identification']['cumulPoint']) {
         $nbPoints = $session->order['nbPoint'];
     }
     $orderData = array('O_ResponseOrderID' => $responseId, 'O_ClientProfileId' => $session->customer['identification']['member_id'], 'O_Comments' => $session->customer['O_Comments'], 'O_CreateDate' => date('Y-m-d H:i:s', time()), 'O_ApprobDate' => date('Y-m-d H:i:s', time()), 'O_SubTotal' => $session->order['subTotal'], 'O_TotTaxProv' => $session->order['taxProv'], 'O_TotTaxFed' => $session->order['taxFed'], 'O_RateTaxProv' => sprintf('%.2f', $session->order['rateProv']['TP_Rate']), 'O_RateTaxFed' => $session->order['rateFed'], 'O_TaxProvId' => $session->stateId, 'O_TransFees' => $transFees, 'O_Total' => $session->order['charge_total'], 'O_PaymentMode' => $session->customer['paymentMeans'], 'O_Paid' => $paid, 'O_DatePayed' => $datePayed, 'O_BankTransactionId' => $bankTransId, 'O_CardHolder' => $cardHolder, 'O_CardNum' => $cardNumber, 'O_CardType' => $cardType, 'O_CardExpiryDate' => $cardexpiryDate, 'O_TotalPaid' => $chargeTotal, 'O_BonusPoint' => $session->order['nbPoint']);
     $order = array_merge($orderData, $addressBilling, $addressShipping, $custAccount);
     //Enregistrer la commades dans la db
     //Recuprer l'id pour inserer le numéro de commande
     $oOrder = new OrderObject();
     $orderId = $oOrder->insert($order, 1);
     //Créer le numéro de commade
     $OrderNumber = 'I' . $orderId;
     //Mettre à jour la cde avec son numéro
     $oOrder->save($orderId, array('O_OrderNumber' => $OrderNumber), 1);
     $memberInfos = $session->customer['identification'];
     //Créer les données pour les lignes de commades
     $oOrderLine = new OrderLinesObject();
     $oCart = new Cart();
     $allIds = $oCart->getAllIds();
     $oProduct = new ProductsCollection();
     $oItems = new ItemsObject();
     $productData = array();
     $productItems = array();
     foreach ($allIds['cartId'] as $key => $id) {
         $itemId = $allIds['itemId'][$key];
         $prodId = $allIds['prodId'][$key];
         // Récupérer la ligne du cart
         $cartDetails = $oCart->getItem($id, $itemId);
         if (!$cartDetails['Disable']) {
             // Récupérer les produits
             $productData = $oProduct->getDetails($prodId, $itemId);
             // Recupérer les items
             $itemDetails = $oItems->getAll(null, true, $itemId);
             //Calcul des taxes et des montants
             $price = $cartDetails['Quantity'] * $itemDetails[0]['I_PriceVol1'];
             $discount = abs($price - $cartDetails['Total']);
             $itemPrice = $cartDetails['Total'] / $cartDetails['Quantity'];
             $codeProd = $itemDetails[0]['I_ProductCode'];
             $taxProv = Cible_FunctionsGeneral::provinceTax($cartDetails['Total']);
             $taxFed = 0;
             if ($session->stateId == 11) {
                 $taxFed = Cible_FunctionsGeneral::federalTax($cartDetails['Total']);
             }
             // Tableau pour la liste des données
             $lineData = array('OL_ProductId' => $prodId, 'OL_OrderId' => $orderId, 'OL_ItemId' => $itemId, 'OL_Type' => 'LigneItem', 'OL_Quantity' => $cartDetails['Quantity'], 'OL_ProductCode' => $codeProd, 'OL_Price' => $itemPrice, 'OL_Discount' => $discount, 'OL_FinalPrice' => $cartDetails['Total'], 'OL_FirstTax' => $itemDetails[0]['I_TaxFed'], 'OL_SecondTax' => $itemDetails[0]['I_TaxProv'], 'OL_TotFirstTax' => $taxFed, 'OL_TotSecondTax' => $taxProv, 'OL_Description' => $productData['data']['PI_Name'] . ' - ' . $itemDetails[0]['II_Name']);
             //Enregistrer les lignes
             if ($cartDetails['PromoId'] > 0) {
                 $lineDataTxt = array('OL_ProductId' => $prodId, 'OL_OrderId' => $orderId, 'OL_ItemId' => $itemId, 'OL_Type' => 'LigneTexte', 'OL_Description' => Cible_Translation::getClientText('alert_special_offer_item'));
                 $oOrderLine->insert($lineDataTxt, 1);
                 $lineData['OL_Price'] = $cartDetails['Total'] / $cartDetails['Quantity'];
                 array_push($productItems, $lineDataTxt);
             }
             $oOrderLine->insert($lineData, 1);
             array_push($productItems, $lineData);
         }
     }
     // send a notification to the client
     // Set data to the view
     $this->_emailRenderData['emailHeader'] = "<img src='" . Zend_Registry::get('absolute_web_root') . "/themes/default/images/common" . "/logoEmail.jpg' alt='' border='0'>";
     $this->_emailRenderData['footer'] = $this->view->getClientText("email_notification_footer");
     $this->view->assign('template', $this->_emailRenderData);
     $this->view->assign('subTotal', $session->order['subTotal']);
     $this->view->assign('orderNumber', $OrderNumber);
     $this->view->assign('orderNumber', $OrderNumber);
     $this->view->assign('custAccount', $custAccount);
     $this->view->assign('addressBilling', $addressBilling);
     $this->view->assign('addressShipping', $addressShipping);
     $this->view->assign('cardType', $cardType);
     $this->view->assign('cardHolder', $cardHolder);
     $this->view->assign('cardNumber', $cardNumber);
     $this->view->assign('cardExpiryDate', $cardexpiryDate);
     $this->view->assign('productItems', $productItems);
     $this->view->assign('chargeTotal', $chargeTotal);
     $this->view->assign('taxeTVQ', $session->order['taxProv']);
     $this->view->assign('taxeTPS', $session->order['taxFed']);
     $this->view->assign('shipFee', $session->order['shipFee']);
     $this->view->assign('limitShip', $session->order['limitShip']);
     $this->view->assign('CODFees', $session->order['CODFees']);
     $this->view->assign('comments', $session->customer['O_Comments']);
     $this->view->assign('display', $display);
     if (isset($session->order['cod'])) {
         $this->view->assign('displayCODFees', true);
     }
     $this->view->assign('paid', $paid);
     //Get html content for email and page displaying
     $view = $this->getHelper('ViewRenderer')->view;
     $view->assign('online', false);
     $html = $view->render('index/emailToSend.phtml');
     //Prepare notification email for customer
     $adminEmail = Cible_FunctionsGeneral::getParameters('CP_AdminOrdersEmail');
     $notification = new Cible_Notify();
     $notification->isHtml(1);
     $notification->addTo($memberInfos['email']);
     $notification->setFrom($adminEmail);
     $notification->setTitle($this->view->getClientText('email_to_customer_title') . ': n° ' . $OrderNumber);
     $notification->setMessage($html);
     //Prepare notification email for admin
     $notifyAdmin = new Cible_Notify();
     $notifyAdmin->isHtml(1);
     $notifyAdmin->addTo($adminEmail);
     $notifyAdmin->setFrom($memberInfos['email']);
     $notifyAdmin->setTitle($this->view->getClientText('email_to_company_title') . $OrderNumber);
     $notifyAdmin->setMessage($html);
     //Send emails
     $notifyAdmin->send();
     $notification->send();
     //Create the csv file to export orders - Set status to exported
     $this->writeFile();
     //Display message on the site.
     $view->assign('online', true);
     $html = $view->render('index/emailToSend.phtml');
     $this->view->assign('html', $html);
     //Empty data
     $this->emptyCart();
     $session->unsetAll();
     //        new Cart();
 }