/** * 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(); }