use yii\filters\VerbFilter;
use yii_app\records\MarketplaceOrderStatusHistory;
use yii_app\records\MarketplaceOrderStatusTypes;
+use yii_app\records\MarketplaceOrder1cStatuses;
use yii_app\records\MarketplaceStore;
use yii_app\records\MatrixErp;
use yii_app\records\Prices;
$model->status_id = $statusCancelled->id;
$model->substatus_id = $substatusFailed->id;
$model->cancelled_order_source = 'ERP';
- $model->cancelled_order_date = date('Y-m-d H:m:s');
+ $model->cancelled_order_date = date('Y-m-d H:i:s');
+
+ // Устанавливаем status_processing_1c для отмены
+ $status1cWithCancelledId = ArrayHelper::getColumn(MarketplaceOrder1cStatuses::find()
+ ->where(['order_status_id' => $statusCancelled->id])
+ ->andWhere(['marketplace_id' => $model->marketplace_id])
+ ->asArray()
+ ->all(), 'id')[0] ?? null;
+ if ($status1cWithCancelledId !== null) {
+ $model->status_processing_1c = $status1cWithCancelledId;
+ }
if ((int)$model->marketplace_id === MarketplaceStore::YANDEX_WAREHOUSE_ID) {
$rawData = json_decode($model->raw_data, true, 512, JSON_THROW_ON_ERROR);
$rawData['status'] = $statusCancelled->code;
$model->status_id = $statusCancelled->id;
$model->substatus_id = $substatusFailed->id;
$model->cancelled_order_source = 'ERP';
- $model->cancelled_order_date = date('Y-m-d H:m:s');
+ $model->cancelled_order_date = date('Y-m-d H:i:s');
+
+ // Устанавливаем status_processing_1c для отмены
+ $status1cWithCancelledId = ArrayHelper::getColumn(MarketplaceOrder1cStatuses::find()
+ ->where(['order_status_id' => $statusCancelled->id])
+ ->andWhere(['marketplace_id' => $model->marketplace_id])
+ ->asArray()
+ ->all(), 'id')[0] ?? null;
+ if ($status1cWithCancelledId !== null) {
+ $model->status_processing_1c = $status1cWithCancelledId;
+ }
if (!$model->save()) {
Yii::error('Ошибка сохранения модели: ' . json_encode($model->getErrors(), JSON_UNESCAPED_UNICODE));
$marketplaceOrder->raw_data = $newRawData;
$marketplaceOrder->status_1c = MarketplaceOrders::STATUSES_1C_CREATED_IN_ERP;
+ // Логика отмены для Яндекс.Маркета: если заказ получен уже отмененным
+ if ($statusCode === 'CANCELLED') {
+ $cancelledStatusId = $statuses[MarketplaceOrderStatusTypes::CANSELLED_CODE] ?? null;
+ if ($cancelledStatusId) {
+ $status1cWithCancelledId = ArrayHelper::getColumn(MarketplaceOrder1cStatuses::find()
+ ->where(['order_status_id' => $cancelledStatusId])
+ ->andWhere(['marketplace_id' => 2])
+ ->asArray()
+ ->all(), 'id')[0] ?? null;
+ $marketplaceOrder->cancelled_order_source = 'Yandex Market';
+ $marketplaceOrder->status_processing_1c = $status1cWithCancelledId;
+ $marketplaceOrder->cancelled_order_date = date('Y-m-d H:i:s');
+ }
+ }
if ($marketplaceOrder->save()) {
self::sendMessageToTelegram($marketplaceOrder->guid, "Новый заказ из ЯМ");
)
);
}
- } else {
+ } else {
+ // Логика отмены для ЯндексМаркета: если статус обновлен на отмену
+ if ($statusCode === 'CANCELLED' && $marketplaceOrder) {
+ $cancelledStatusId = $statuses[MarketplaceOrderStatusTypes::CANSELLED_CODE] ?? null;
+ if ($cancelledStatusId) {
+ $status1cWithCancelledId = ArrayHelper::getColumn(MarketplaceOrder1cStatuses::find()
+ ->where(['order_status_id' => $cancelledStatusId])
+ ->andWhere(['marketplace_id' => 2])
+ ->asArray()
+ ->all(), 'id')[0] ?? null;
+ $marketplaceOrder->cancelled_order_source = 'Yandex Market';
+ $marketplaceOrder->status_processing_1c = $status1cWithCancelledId;
+ $marketplaceOrder->cancelled_order_date = date('Y-m-d H:i:s');
+ }
+ }
// создание чеков
if ($marketplaceOrder->status->code == 'DELIVERED' &&
$marketplaceOrder->substatus->code == 'DELIVERY_SERVICE_DELIVERED' &&
$marketplaceOrder->save();
$updatedOrdersCount += 1;
}
+
+ // Логика отмены для ЯндексМаркета: если статус обновлен на отмену
+ if ($statusCode === 'CANCELLED' && $marketplaceOrder) {
+ $cancelledStatusId = $statuses[MarketplaceOrderStatusTypes::CANSELLED_CODE] ?? null;
+ if ($cancelledStatusId) {
+ $status1cWithCancelledId = ArrayHelper::getColumn(MarketplaceOrder1cStatuses::find()
+ ->where(['order_status_id' => $cancelledStatusId])
+ ->andWhere(['marketplace_id' => 2])
+ ->asArray()
+ ->all(), 'id')[0] ?? null;
+ $marketplaceOrder->cancelled_order_source = 'Yandex Market';
+ $marketplaceOrder->status_processing_1c = $status1cWithCancelledId;
+ $marketplaceOrder->cancelled_order_date = date('Y-m-d H:i:s');
+ }
+ }
+
if (!$marketplaceOrder->delivery_to && $marketplaceOrder->readyto_1c === 0) {
$delivery = $order->getDelivery();
$shipments = $delivery->getShipments();
->indexBy('code')
->asArray()
->all();
- $cancelledStatusId = $statuses[MarketplaceOrderStatusTypes::CANSELLED_CODE]['id'];
+ $statuses = ArrayHelper::map($statuses, 'code', 'id');
+ $cancelledStatusId = $statuses[MarketplaceOrderStatusTypes::CANSELLED_CODE];
$status1cWithCancelledId = ArrayHelper::getColumn(MarketplaceOrder1cStatuses::find()
->where(['order_status_id' => $cancelledStatusId])
->andWhere(['marketplace_id' => 1])
->asArray()
- ->all(), 'id');
+ ->all(), 'id')[0] ?? null;;
$order = self::getOrdersDataFromMessage($message);
if ($message['subject_index'] == self::SUBJECT_INDEX[self::SUBJECT_NEW]) {
$isCheckCreated = self::createCheckForMarketplaceOrder($marketplaceOrder);
}
if ($statusCode == MarketplaceOrderStatusTypes::CANSELLED_CODE && $substatusCode == 'USER_CHANGED_MIND' && $marketplaceOrder) {
- Yii::error('Заказ ' . $marketplaceOrder->marketplace_order_id);
- /* @var $marketplaceOrder MarketplaceOrders */
- $marketplaceOrder->cancelled_order_source = 'Flowwow';
- $marketplaceOrder->status_processing_1c = $status1cWithCancelledId;
- $marketplaceOrder->cancelled_order_date = date('Y-m-d H:m:s');
- if (!$marketplaceOrder->save()) {
- Yii::error('Метки отмены заказа не проставлены ' . $marketplaceOrder->marketplace_order_id);
- }
+ self::cancelFlowwowOrder($marketplaceOrder, $status1cWithCancelledId, true);
}
}
return $count;
}
} else {
// отмена или успешное выполнение
- if ($index == self::SUBJECT_INDEX[self::SUBJECT_CANCELLED]) {
- /** @var $marketplaceOrder MarketplaceOrders */
- $marketplaceOrder->cancelled_order_source = 'Flowwow';
- $marketplaceOrder->cancelled_order_date = date('Y-m-d H:m:s');
- }
if ($marketplaceOrder->save()) {
self::createOrUpdateStatusHistory($marketplaceOrder->id, $statusId, $substatusId, $orderDetails);
} else {
return $newOrdersCount;
}
+ /**
+ * Обработка отмены заказа Flowwow
+ *
+ * @param MarketplaceOrders $marketplaceOrder
+ * @param int|null $status1cWithCancelledId
+ * @param bool $logError
+ * @return bool
+ */
+ private static function cancelFlowwowOrder($marketplaceOrder, $status1cWithCancelledId = null, $logError = false)
+ {
+ /** @var $marketplaceOrder MarketplaceOrders */
+ $marketplaceOrder->cancelled_order_source = 'Flowwow';
+ $marketplaceOrder->cancelled_order_date = date('Y-m-d H:i:s');
+
+ if ($status1cWithCancelledId !== null) {
+ $marketplaceOrder->status_processing_1c = $status1cWithCancelledId;
+ }
+
+ if ($logError) {
+ Yii::error('Заказ ' . $marketplaceOrder->marketplace_order_id);
+ }
+
+ if (!$marketplaceOrder->save()) {
+ if ($logError) {
+ Yii::error('Метки отмены заказа не проставлены ' . $marketplaceOrder->marketplace_order_id);
+ }
+ return false;
+ }
+
+ return true;
+ }
+
public static function getOrCreateStatus($statusCode, &$statuses, &$statusCodes)
{
if (!in_array($statusCode, $statusCodes)) {