public function filter() { \Bitrix\Main\Loader::includeModule('sale'); $daysDontBuy = $this->getFieldValue('DAYS_DONT_BUY'); if (!is_numeric($daysDontBuy)) { $daysDontBuy = 90; } $dateFrom = new \Bitrix\Main\Type\DateTime(); $dateTo = new \Bitrix\Main\Type\DateTime(); $dateFrom->setTime(0, 0, 0)->add('-' . $daysDontBuy . ' days'); $dateTo->setTime(0, 0, 0)->add('1 days')->add('-' . $daysDontBuy . ' days'); if ($this->isRunForOldData()) { $filter = array('<MAX_DATE_INSERT' => $dateTo->format(\Bitrix\Main\UserFieldTable::MULTIPLE_DATETIME_FORMAT)); } else { $filter = array('>MAX_DATE_INSERT' => $dateFrom->format(\Bitrix\Main\UserFieldTable::MULTIPLE_DATETIME_FORMAT), '<MAX_DATE_INSERT' => $dateTo->format(\Bitrix\Main\UserFieldTable::MULTIPLE_DATETIME_FORMAT)); } $filter = $filter + array('=LID' => $this->getSiteId()); $userListDb = \Bitrix\Sale\OrderTable::getList(array('select' => array('BUYER_USER_ID' => 'BUYER.ID', 'EMAIL' => 'BUYER.EMAIL', 'BUYER_USER_NAME' => 'BUYER.NAME'), 'filter' => $filter, 'runtime' => array(new \Bitrix\Main\Entity\ExpressionField('MAX_DATE_INSERT', 'MAX(%s)', 'DATE_INSERT')), 'order' => array('USER_ID' => 'ASC'))); if ($userListDb->getSelectedRowsCount() > 0) { $userListDb->addFetchDataModifier(array($this, 'getFetchDataModifier')); $this->recipient = $userListDb; return true; } else { return false; } }
/** @return \CDBResult */ public function getData() { $runtime = array(); $filter = array(); if ($this->getFieldValue('LID')) { $filter['=LID'] = $this->getFieldValue('LID', null); } if ($this->getFieldValue('ID')) { $filter['=ID'] = $this->getFieldValue('ID', 0); } if ($this->getFieldValue('USER_ID')) { $filter['=USER_ID'] = $this->getFieldValue('USER_ID', 0); } if ($this->getFieldValue('BASKET_PRODUCT_ID')) { $filter['=BASKET.PRODUCT_ID'] = $this->getFieldValue('BASKET_PRODUCT_ID', 0); $runtime['BASKET'] = array('data_type' => 'Bitrix\\Sale\\Basket', 'reference' => array('=this.ID' => 'ref.ORDER_ID')); } $resultDb = \Bitrix\Sale\OrderTable::getList(array('select' => array('USER_ID', 'NAME' => 'BUYER.NAME', 'EMAIL' => 'BUYER.EMAIL'), 'filter' => $filter, 'runtime' => $runtime, 'group' => array('USER_ID', 'NAME', 'EMAIL'), 'order' => array('USER_ID' => 'ASC'))); return new \CDBResult($resultDb); }
/** * Perform reading main data from database, no cache is used for it * @throws Main\SystemException * @return void */ protected function obtainDataOrder() { global $USER; $select = array('ID', 'LID', 'PERSON_TYPE_ID', 'PAYED', 'DATE_PAYED', 'EMP_PAYED_ID', 'CANCELED', 'DATE_CANCELED', 'EMP_CANCELED_ID', 'REASON_CANCELED', 'MARKED', 'DATE_MARKED', 'EMP_MARKED_ID', 'REASON_MARKED', 'STATUS_ID', 'DATE_STATUS', 'EMP_STATUS_ID', 'PRICE_DELIVERY', 'PRICE', 'CURRENCY', 'DISCOUNT_VALUE', 'USER_ID', 'DATE_INSERT', 'DATE_INSERT_FORMAT', 'DATE_UPDATE', 'USER_DESCRIPTION', 'ADDITIONAL_INFO', 'COMMENTS', 'TAX_VALUE', 'STAT_GID', 'RECURRING_ID', 'RECOUNT_FLAG', 'ORDER_TOPIC', 'ACCOUNT_NUMBER', 'XML_ID'); $sort = array("ID" => "ASC"); $filter = array("USER_ID" => $USER->GetID(), "ACCOUNT_NUMBER" => $this->requestData["ID"]); $arOrder = false; if ($this->options['USE_ACCOUNT_NUMBER']) { $res = \Bitrix\Sale\OrderTable::getList(array('filter' => $filter, 'select' => $select)); if ($arOrder = $res->fetch()) { $this->requestData["ID"] = $arOrder["ID"]; } } if (!$arOrder) { $filter = array("USER_ID" => $USER->GetID(), "ID" => $this->requestData["ID"]); $res = \Bitrix\Sale\OrderTable::getList(array('filter' => $filter, 'select' => $select)); $arOrder = $res->fetch(); } if (empty($arOrder)) { throw new Main\SystemException(str_replace("#ID#", $this->requestData["ID"], Localization\Loc::getMessage("SPOD_NO_ORDER")), self::E_ORDER_NOT_FOUND); } $arOShipment = array(); $dbShipment = \Bitrix\Sale\Internals\ShipmentTable::getList(array('select' => array('DELIVERY_NAME', 'DEDUCTED', 'DATE_DEDUCTED', 'EMP_DEDUCTED_ID', 'REASON_UNDO_DEDUCTED', 'SYSTEM', 'ID', 'DELIVERY_ID', 'TRACKING_NUMBER', 'TRACKING_STATUS', 'TRACKING_DESCRIPTION', 'ALLOW_DELIVERY', 'DATE_ALLOW_DELIVERY', 'EMP_ALLOW_DELIVERY_ID', 'RESERVED', 'DELIVERY_DOC_NUM', 'DELIVERY_DOC_DATE'), 'filter' => array('ORDER_ID' => $arOrder['ID']))); while ($arShipment = $dbShipment->fetch()) { if ($arShipment['SYSTEM'] == 'Y') { continue; } $dbShipmentItem = \Bitrix\Sale\Internals\ShipmentItemTable::getList(array('select' => array('BASKET_ID', 'QUANTITY'), 'filter' => array('ORDER_DELIVERY_ID' => $arShipment['ID']))); $shipmentItems = array(); while ($shipmentItem = $dbShipmentItem->fetch()) { $shipmentItem['QUANTITY'] = \Bitrix\Sale\BasketItem::formatQuantity($shipmentItem['QUANTITY']); $shipmentItems[$shipmentItem['BASKET_ID']] = $shipmentItem; } $arShipment['ITEMS'] = $shipmentItems; $arShipment['TRACKING_STATUS'] = \Bitrix\Sale\Delivery\Tracking\Manager::getStatusName($arShipment['TRACKING_STATUS']); $arOShipment[] = $arShipment; } $arOrder['SHIPMENT'] = $arOShipment; // for compatibility if (!empty($this->compatibilityShipmentFields) && is_array($this->compatibilityShipmentFields)) { foreach ($this->compatibilityShipmentFields as $shipmentField) { if (isset($arOShipment[0][$shipmentField])) { $setFieldValue = $arOShipment[0][$shipmentField]; if ($setFieldValue instanceof Main\Type\Date || $setFieldValue instanceof Main\Type\DateTime) { $setFieldValue = $setFieldValue->toString(); } $arOrder[$shipmentField] = $setFieldValue; } } } // $arOrder['DELIVERY_ID'] = $arOShipment[0]['DELIVERY_ID']; // $arOrder['TRACKING_NUMBER'] = $arOShipment[0]['TRACKING_NUMBER']; $dbPayment = \Bitrix\Sale\Internals\PaymentTable::getList(array('select' => array('PAY_SYSTEM_NAME', 'PAID', 'ID', 'DATE_PAID', 'PAY_SYSTEM_ID', 'SUM', 'PAY_VOUCHER_NUM', 'PAY_VOUCHER_DATE', 'PS_STATUS', 'PS_STATUS_CODE', 'PS_STATUS_DESCRIPTION', 'PS_STATUS_MESSAGE', 'PS_SUM', 'PS_CURRENCY', 'PS_RESPONSE_DATE', 'DATE_PAY_BEFORE', 'DATE_BILL'), 'filter' => array('ORDER_ID' => $arOrder['ID']))); $arOPayment = array(); while ($arPayment = $dbPayment->fetch()) { $arPayment['PAY_SYSTEM_NAME'] = htmlspecialcharsbx($arPayment['PAY_SYSTEM_NAME']); $arOPayment[] = $arPayment; } $arOrder['PAYMENT'] = $arOPayment; // for compatibility // $arOrder['PAY_SYSTEM_ID'] = $arOPayment[0]['PAY_SYSTEM_ID']; // $arOrder['PAY_VOUCHER_NUM'] = $arOPayment[0]['PAY_VOUCHER_NUM']; if (!empty($this->compatibilityPaymentFields) && is_array($this->compatibilityPaymentFields)) { foreach ($this->compatibilityPaymentFields as $paymentName => $paymentField) { $findPaymentField = $paymentField; if (intval($paymentName) !== $paymentName) { $findPaymentField = $paymentName; } if (isset($arOPayment[0][$findPaymentField])) { $setFieldValue = $arOPayment[0][$findPaymentField]; if ($setFieldValue instanceof Main\Type\Date || $setFieldValue instanceof Main\Type\DateTime) { $setFieldValue = $setFieldValue->toString(); } $arOrder[$paymentField] = $setFieldValue; } } } $this->dbResult = $arOrder; }