--- /dev/null
+<?php
+
+namespace app\controllers;
+
+use app\controllers\BaseController;
+use Exception;
+use Yii;
+use yii\helpers\ArrayHelper;
+use yii\helpers\Json;
+use yii\web\Response;
+use yii_app\records\MarketplaceOrders;
+use yii_app\records\MarketplaceOrderStatusTypes;
+use yii_app\services\LogService;
+use yii_app\services\MarketplaceService;
+
+class OrdersController extends BaseController
+{
+ const OUT_DIR =
+ //"/www/api2/json";
+ "/var/www/erp24/api2/json_orders";
+
+ public function actionChangeStatus()
+ {
+ Yii::$app->response->format = Response::FORMAT_JSON;
+
+ $request = Yii::$app->request->getRawBody();
+ $fl = date('_Y_m_d__H_i_s_');
+
+ try {
+ $result = Json::decode($request);
+ } catch (\Exception $ex) {
+ return $this->asJson(['error' => ['code' => 400, 'message' => 'Json body invalid']]);
+ }
+ // запись запроса в файл
+ $json = Json::encode($result, JSON_UNESCAPED_UNICODE);
+ file_put_contents(self::OUT_DIR . '/changed_orders_' . $fl . '.json', PHP_EOL . '--' . $result['order_id']);
+ file_put_contents(
+ self::OUT_DIR . '/changed_orders_' . $fl . '.json',
+ ' ' . date("d.m.Y H:i:s", time()) . ' JSON: ' . $json . ' ',
+ FILE_APPEND
+ );
+ $orderGuid = $result['order_id'];
+ $orderStatus = $result['status'];
+
+ $orderStatus1CCodes = MarketplaceOrders::getStatusCodes($orderStatus);
+ $statuses = MarketplaceOrderStatusTypes::find()
+ ->select(['id', 'code'])
+ ->indexBy('code')
+ ->asArray()
+ ->all();
+ $statuses = ArrayHelper::map($statuses, 'code', 'id');
+ $statusCodes = array_unique(array_keys($statuses));
+ $statusId = MarketplaceService::getOrCreateStatus($orderStatus1CCodes[0], $statuses, $statusCodes);
+ $substatusId = MarketplaceService::getOrCreateStatus($orderStatus1CCodes[1], $statuses, $statusCodes);
+ $order = MarketplaceOrders::find()
+ ->where(['guid' => $orderGuid])
+ ->one();
+
+ if ($order && !empty($orderStatus1CCodes)) {
+ $order->status_id = $statusId;
+ $order->substatus_id = $substatusId;
+ if ($order->save()) {
+ $orderDetails = [
+ 'date' => date('Y-m-d H:i:s')
+
+ ];
+ MarketplaceService::createOrUpdateStatusHistory($order->id, $statusId, $substatusId, $orderDetails);
+ }
+ }
+
+ //MarketplaceService::updateOrderStatus($order->warehouse_id, $order->marketplace_order_id, $orderStatus1CCodes[0], $orderStatus1CCodes[1]);
+
+ $mess["result"] = true;
+ $mess["message_order"] = "Статус получен";
+ $mess["message_order_guid"] = $orderGuid;
+ $mess["message_status"] = $orderStatus;
+ LogService::apiLogs(1, json_encode($mess, JSON_UNESCAPED_UNICODE));
+ file_put_contents(
+ self::OUT_DIR . '/changed_orders_' . $fl . '.json',
+ PHP_EOL . '--' . __LINE__ . ' OK ',
+ FILE_APPEND
+ );
+ return $this->asJson($mess);
+ }
+}
\ No newline at end of file
*/
class MarketplaceOrders extends \yii\db\ActiveRecord
{
+ const STATUS_CREATED = 1;
+ const STATUS_CONFIRM = 2;
+ const STATUS_CANCELLED = 6;
+ const STATUS_PROCESSING = 7;
+ const STATUS_READY = 9;
+ const STATUS_DELIVERED = 10;
+ const STATUS_ERROR_1C = 8;
+
+ public const STATUSES_LABEL = [
+ self::STATUS_CREATED => "Создан",
+ self::STATUS_CONFIRM => "Одобрен",
+ self::STATUS_CANCELLED => "Отменен 1С",
+ self::STATUS_PROCESSING => "В процессе сборки",
+ self::STATUS_READY => "Готов к отправке",
+ self::STATUS_DELIVERED => "Доставлен",
+ self::STATUS_ERROR_1C => "Ошибка в 1С",
+ ];
+
+ public const STATUSES_TO_CODE = [
+ self::STATUS_CREATED => ["PROCESSING", "STARTED"],
+ self::STATUS_CONFIRM => ["PROCESSING", "STARTED"],
+ self::STATUS_CANCELLED => ["CANCELLED", "SHOP_FAILED"],
+ self::STATUS_PROCESSING => ["PROCESSING", "STARTED"],
+ self::STATUS_READY => ["PROCESSING", "READY_TO_SHIP"],
+ self::STATUS_DELIVERED => ["DELIVERED", "DELIVERY_SERVICE_DELIVERED"],
+ ];
+
+
+
/**
* {@inheritdoc}
*/
{
return $this->hasOne(MarketplaceOrderStatusTypes::class, ['id' => 'substatus_id']);
}
+
+ public static function getStatusCodes(int $status): array
+ {
+ return self::STATUSES_TO_CODE[$status] ?? [];
+ }
}
return $newOrdersCount;
}
- private static function getOrCreateStatus($statusCode, &$statuses, &$statusCodes)
+ public static function getOrCreateStatus($statusCode, &$statuses, &$statusCodes)
{
if (!in_array($statusCode, $statusCodes)) {
$newStatus = new MarketplaceOrderStatusTypes();
return $marketplaceOrder;
}
- private static function createOrUpdateStatusHistory($orderId, $statusId, $substatusId, $order)
+ public static function createOrUpdateStatusHistory($orderId, $statusId, $substatusId, $order)
{
$statusHistoryRecord = MarketplaceOrderStatusHistory::find()->where(['order_id' => $orderId])->andWhere(['active' => 1])->one();
if (!$statusHistoryRecord) {