'New', self::STATUS_ORDER_PACKED => 'Packed', self::STATUS_ORDER_SENT => 'Sent', self::STATUS_ORDER_CLOSED => 'Closed', ]; protected $_paidStatuses = [ self::STATUS_PAID_YES => 'Yes', self::STATUS_PAID_NO => 'No', ]; protected $_periodVariations = [ self::FILTER_PERIOD_WEEK => 'Last week', self::FILTER_PERIOD_MONTH => 'Last month', self::FILTER_PERIOD_3_MONTH => 'Last 3 months', self::FILTER_PERIOD_6_MONTH => 'Last 6 months', self::FILTER_PERIOD_YEAR => 'Last year', ]; protected $_hasFilter = true; protected function _getFromColumns() { $delivery = 'IF (' . ' `' . $this->_tableAlias . '`.`shippingServiceCodeTitle` = "", ' . ' `' . $this->_tableAlias . '`.`shippingNameTitle`, ' . ' CONCAT_WS(' . ' "/", ' . ' `' . $this->_tableAlias . '`.`shippingNameTitle`, ' . ' `' . $this->_tableAlias . '`.`shippingServiceCodeTitle`' . ' )' . ')'; $columns = [ '*', 'submitted' => new Zend_Db_Expr('UNIX_TIMESTAMP(`' . $this->_tableAlias . '`.`added`)'), 'delivery' => new Zend_Db_Expr($delivery), ]; return $columns; } protected function _prepareRow(array &$row) { $row['paidTitle'] = $this->_paidStatuses[$row['paid']]; $row['statusTitle'] = $this->_orderStatuses[$row['status']]; return parent::_prepareRow($row); } protected function _filter(Zend_Db_Select $select) { /** filter by order status */ if (isset($this->_filter['status']) && array_key_exists($this->_filter['status'], $this->getOrderStatuses()) ) { $select->where('`' . $this->_tableAlias . '`.`status` = ?', $this->_filter['status']); } /** filter by period */ if (isset($this->_filter['period']) && array_key_exists($this->_filter['period'], $this->getPeriodVariations()) ) { $sqlPeriod = strtoupper(str_replace('_', ' ', $this->_filter['period'])); $select->where('`' . $this->_tableAlias . '`.`added` >= DATE_SUB(CURDATE(), INTERVAL ' . $sqlPeriod . ')'); } /** filter by order paid */ if (isset($this->_filter['paid']) && array_key_exists($this->_filter['paid'], $this->getPaidStatuses()) ) { $select->where('`' . $this->_tableAlias . '`.`paid` = ?', $this->_filter['paid']); } if (isset($this->_filter['userId'])) { $select->where('`Cart`.`userId` = ?', $this->_filter['userId'], Qs_Db::INT_TYPE); } $select->where("`{$this->_tableAlias}`.`enabled` = 'y'"); return $this; } public function getListSelect() { if (null === $this->_select) { parent::getListSelect(); $this->_select->join( $this->_getPair('Cart'), '`Cart`.`transactionId` = `' . $this->_tableAlias . '`.`id`', ['userId'] ); } return $this->_select; } protected function _getFromDbSelect($primaryKey) { $select = parent::_getFromDbSelect($primaryKey); $select->join( $this->_getPair('Cart'), '`Cart`.`transactionId` = `' . $this->_tableAlias . '`.`id`', ['userId', 'cartId' => 'id'] ); $select->joinLeft( $this->_getPair('CartItemGiftCard'), '`CartItemGiftCard`.`cartId` = `Cart`.`id`', ['giftCardPrice' => 'cardValue'] ); $select->joinLeft( $this->_getPair('CartItemPromo'), '`CartItemPromo`.`cartId` = `Cart`.`id`', ['promoProductId' => 'productId', 'promoValue' => 'value', 'promoType' => 'type'] ); $select->joinLeft( $this->_getPair('DPromoType'), '`DPromoType`.`id` = `CartItemPromo`.`type`', ['promoTypeTitle' => 'title'] ); return $select; } protected function _addDependenciesFromDb(array &$data) { $data['statusTitle'] = $this->_orderStatuses[$data['status']]; $data['paidTitle'] = $this->_paidStatuses[$data['paid']]; $checkoutFormServicePayment = new App_ECommerce_Checkout_Form_Service_Payment(); $paymentTypes = $checkoutFormServicePayment->getPaymentType(); $data['paymentTypeTitle'] = Qs_Array::get($paymentTypes, $data['paymentType']); $cartData = $this->_getCartData($data['cartId']); $data['accessCode'] = $cartData['accessCode']; $data['cart'] = $cartData['list']; return $this; } protected function _getCartData($cartId) { $cartObj = new App_ECommerce_Cart_Obj(['primaryKey' => $cartId]); $data = $cartObj->getData(); $list = $cartObj->getList(); $list = $this->_prepareCart($list); $data['list'] = $list; return $data; } protected function _prepareCart($list) { foreach ($list as &$item) { $item['priceRound'] = Zend_Locale_Math::round($item['price'], 2); $item['rowTotalRound'] = Zend_Locale_Math::round($item['rowTotal'], 2); } return $list; } public function updateOrderPayment($data) { if (!empty($data['invoice']) && !empty($data['transactionId'])) { $this->_getTable('Transaction')->updateByKey( ['paid' => 'y', 'enabled' => 'y'], $data['transactionId'] ); //send notification to user about paid order $transactionData = $this->setPrimaryKey($data['transactionId'])->clearData()->getData(); App_ECommerce_Order_MailAdapter::sendUserNotification( ['orderId' => $transactionData['id'], 'billingEmail' => $transactionData['billingEmail']], 'PaidStatusYes' ); } return $this; } public function verifyOrderPayment($data) { $transactionId = $data['transactionId']; $result = false; if (!empty($transactionId)) { $transactionData = $this->_getTable('Transaction')->fetchRow(['id = ?' => $transactionId]); if ($transactionData && $transactionData->paid != 'y') { $result = ($transactionData->total == $data['total']); } } return $result; } public function getOrderStatuses() { return $this->_orderStatuses; } public function getOrderStatusTitle($orderStatus) { return $this->_orderStatuses[$orderStatus]; } public function getPaidStatuses() { return $this->_paidStatuses; } public function getPaidStatusTitle($paidStatus) { return $this->_paidStatuses[$paidStatus]; } public function getPeriodVariations() { return $this->_periodVariations; } public function getObjectInfo() { $data = (array) $this->getData(); if (!empty($data) && !array_key_exists('id', $data)) { $this->clearData(); } return parent::getObjectInfo(); } }