/** * Restore order * * @return void */ protected function restoreOrder() { \XLite\Core\Session::getInstance()->checkoutCanceled = true; $this->doActionAddOrder(); if ($this->addedOrder && !$this->addedOrder instanceof \XLite\Model\Cart && !\XLite\Core\Auth::getInstance()->isLogged()) { $cart = $this->getCart(); $profile = $this->addedOrder->getProfile()->cloneEntity(); $profile->setOrder($cart); $profile->setAnonymous(true); $cart->setOrigProfile($this->addedOrder->getOrigProfile()); $cart->setProfile($profile); $this->updateCart(); } $this->setReturnURL($this->buildURL('checkout')); }
/** * Check - payment type is allowed for specified order or not * * @param string $type Payment type * @param \XLite\Model\Order $order Order * * @return boolean */ protected function isPaymentTypeAllowed($type, \XLite\Model\Order $order) { $result = isset($this->paymentTypeCountries[$type]) && $order->getProfile() && $order->getProfile()->getBillingAddress() && $order->getProfile()->getBillingAddress()->getCountry(); if ($result && true !== $this->paymentTypeCountries[$type]) { $result = in_array($order->getProfile()->getBillingAddress()->getCountry()->getCode3(), $this->paymentTypeCountries[$type]); } return $result; }
/** * Get the errors which are connected with the membership of the user who placed the order * * @param \XLite\Model\Order $order * * @return array */ protected function getMembershipErrors(\XLite\Model\Order $order) { $found = true; $memberships = $this->getMemberships(); // Memberhsip if (0 < count($memberships)) { $membership = $order->getProfile() ? $order->getProfile()->getMembership() : null; $found = $membership ? \Includes\Utils\ArrayManager::findValue($memberships, array($this, 'checkMembershipId'), $membership->getMembershipId()) : false; } return $found ? array() : array(static::ERROR_MEMBERSHIP); }
/** * Check - payment processor is applicable for specified order or not * * @param \XLite\Model\Order $order Order * @param \XLite\Model\Payment\Method $method Payment method * * @return boolean */ public function isApplicable(\XLite\Model\Order $order, \XLite\Model\Payment\Method $method) { $controller = \XLite::getController(); return $order->getProfile() && $order->getProfile()->getSavedCards() && method_exists($controller, 'isLogged') && $controller->isLogged() && parent::isApplicable($order, $method); }
/** * Check coupon membership * * @param \XLite\Model\Order $order Order * * @throws \XLite\Module\CDev\Coupons\Core\CompatibilityException * * @return void */ protected function checkMembership(\XLite\Model\Order $order) { if ($this->getMemberships()->count() && $order->getProfile() && !$this->getMemberships()->contains($order->getProfile()->getMembership())) { $this->throwCompatibilityException('', 'There is no such a coupon, please check the spelling: X', array('code' => $this->getCode())); } }
/** * Prepare shopping cart data * * @param \XLite\Model\Order $cart X-Cart shopping cart * @param \XLite\Model\Payment\Method $paymentMethod Payment method * @param integer $refId Transaction ID OPTIONAL * @param boolean $forceAuth Force enable AUTH mode OPTIONAL * * @return array */ public function prepareCart(\XLite\Model\Order $cart, \XLite\Model\Payment\Method $paymentMethod, $refId = null, $forceAuth = false) { $config = \XLite\Core\Config::getInstance()->CDev->XPaymentsConnector; $profile = $cart->getProfile(); if ($cart->getOrderNumber()) { $description = 'Order #' . $cart->getOrderNumber(); } elseif ($cart->getFirstOpenPaymentTransaction() && $cart->getFirstOpenPaymentTransaction()->getPublicId()) { $description = 'Payment transaction: ' . $cart->getFirstOpenPaymentTransaction()->getPublicId(); } else { $description = ''; } $result = array('login' => $profile->getLogin() . ' (User ID #' . $profile->getProfileId() . ')', 'items' => array(), 'currency' => $this->getCurrencyCode($paymentMethod), 'shippingCost' => 0.0, 'taxCost' => 0.0, 'discount' => 0.0, 'totalCost' => 0.0, 'description' => $description, 'merchantEmail' => \XLite\Core\Config::getInstance()->Company->orders_department, 'forceTransactionType' => $forceAuth ? 'A' : ''); // Send customer unique Id for Kount UNIQ field (API v1.6 and higher) if (version_compare($config->xpc_api_version, '1.6') >= 0) { $result['kountCustomerUniq'] = $this->getKountCustomerUniq($cart); } $result['billingAddress'] = $this->prepareAddress($profile); if ($profile->getShippingAddress()) { $result['shippingAddress'] = $this->prepareAddress($profile, 'shipping'); } else { $result['shippingAddress'] = $result['billingAddress']; } // Set items if ($cart->getItems()) { foreach ($cart->getItems() as $item) { $itemElement = array('sku' => strval($item->getSku() ? $item->getSku() : $item->getName()), 'name' => strval($item->getName() ? $item->getName() : $item->getSku()), 'price' => $this->roundCurrency($item->getPrice()), 'quantity' => $item->getAmount()); if (!$itemElement['sku']) { $itemElement['sku'] = 'N/A'; } if (!$itemElement['name']) { $itemElement['name'] = 'N/A'; } $result['items'][] = $itemElement; } } // Set costs $result['shippingCost'] = $this->roundCurrency($cart->getSurchargesSubtotal(\XLite\Model\Base\Surcharge::TYPE_SHIPPING, false)); $result['taxCost'] = $this->roundCurrency($cart->getSurchargesSubtotal(\XLite\Model\Base\Surcharge::TYPE_TAX, false)); $result['totalCost'] = $this->roundCurrency($cart->getTotal()); $result['discount'] = $this->roundCurrency(abs($cart->getSurchargesSubtotal(\XLite\Model\Base\Surcharge::TYPE_DISCOUNT, false))); return $result; }
/** * Remove temporary order * * @param \XLite\Model\Order $order Order * * @return void */ protected function removeTemporaryOrder(\XLite\Model\Order $order) { $origOrderId = null; // Search for index of data in temporary orders static cache if (is_array(static::$tmpOrders)) { foreach (static::$tmpOrders as $id => $data) { if ($id == $order->getOrderId()) { $origOrderId = $id; break; } } } \XLite\Core\Database::getEM()->remove($order->getProfile()); // Remove temporary order \XLite\Core\Database::getEM()->remove($order); \XLite\Core\Database::getEM()->flush(); // Unset data in static cache if ($origOrderId) { unset(static::$tmpOrders[$origOrderId]); } }
/** * Send e-goods links to customer * * @param \XLite\Model\Order $order Order model * * @return void */ public static function sendEgoodsLinksCustomer(\XLite\Model\Order $order) { static::compose(static::TYPE_EGOODS_LINKS, static::getOrdersDepartmentMail(), $order->getProfile()->getLogin(), 'modules/CDev/Egoods/egoods_links', array(), true, \XLite::CUSTOMER_INTERFACE, static::getMailer()->getLanguageCode(\XLite::CUSTOMER_INTERFACE, $order->getProfile()->getLanguage())); }
/** * Send changed order mail to Customer * * @param \XLite\Model\Order $order Order model * * @return void */ public static function sendOrderAdvancedChangedCustomer(\XLite\Model\Order $order) { static::register(array('order' => $order, 'recipientName' => $order->getProfile()->getName())); $result = static::compose(static::TYPE_ORDER_ADVANCED_CHANGED_CUSTOMER, static::getOrdersDepartmentMail(), $order->getProfile()->getLogin(), 'order_advanced_changed', array(), true, \XLite::CUSTOMER_INTERFACE, static::getMailer()->getLanguageCode(\XLite::CUSTOMER_INTERFACE, $order->getProfile()->getLanguage())); if ($result) { \XLite\Core\OrderHistory::getInstance()->registerCustomerEmailSent($order->getOrderId(), 'Order is changed'); } elseif (static::$errorMessage) { \XLite\Core\OrderHistory::getInstance()->registerCustomerEmailFailed($order->getOrderId(), static::$errorMessage); } }
/** * Send failed order mail to Customer * * @param \XLite\Model\Order $order Order model * * @return void */ public static function sendFailedOrderCustomer(\XLite\Model\Order $order) { static::setMailInterface(\XLite::CUSTOMER_INTERFACE); if ($order->getProfile()) { static::compose(\XLite\Core\Config::getInstance()->Company->orders_department, $order->getProfile()->getLogin(), 'order_failed'); \XLite\Core\OrderHistory::getInstance()->registerCustomerEmailSent($order->getOrderId()); } }
/** * {@inheritDoc} */ public function getProfile() { $this->__initializer__ && $this->__initializer__->__invoke($this, 'getProfile', array()); return parent::getProfile(); }