From: marina Date: Thu, 3 Jul 2025 07:24:24 +0000 (+0300) Subject: ERP-433 Отчет по остаткам букетов для МП и причинам, если логика не проходит. Возможн... X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=c48c42067997fbbe8256462232f2ab6c5ab8547a;p=erp24_rep%2Fyii-erp24%2F.git ERP-433 Отчет по остаткам букетов для МП и причинам, если логика не проходит. Возможность ручной выгрузки из ERP в Excel --- diff --git a/erp24/actions/marketplace/ReportAction.php b/erp24/actions/marketplace/ReportAction.php index b12c0840..12214b56 100644 --- a/erp24/actions/marketplace/ReportAction.php +++ b/erp24/actions/marketplace/ReportAction.php @@ -6,6 +6,7 @@ use Yii; use yii\base\Action; use yii\data\ActiveDataProvider; use yii\data\ArrayDataProvider; +use yii\db\Expression; use yii_app\records\Products1c; use yii_app\records\Products1cNomenclature; use yii_app\records\ProductsClass; @@ -15,6 +16,10 @@ class ReportAction extends Action { public function run() { + $storeId = Yii::$app->request->post('store', 'dbd70103-2c7b-11e9-9b87-c85b76f0e893'); + $isValid = Yii::$app->request->post('is_valid'); + $productId = Yii::$app->request->post('product_id'); + $subQuery = Products1c::find() ->alias('p1n') ->leftJoin('products_class pc', 'p1n.id = pc.category_id') @@ -24,28 +29,29 @@ class ReportAction extends Action ]) ->select('p1n.id'); - $storeId = Yii::$app->request->post('store', 'dbd70103-2c7b-11e9-9b87-c85b76f0e893'); - $isValid = Yii::$app->request->post('is_valid'); $innerQuery = Products1c::find() ->alias('p1n') ->leftJoin('prices p', 'p.product_id = p1n.id') ->leftJoin('matrix_erp_property_dynamic mep', 'mep.product_id = p1n.id AND mep.active = 1') - ->leftJoin('marketplace_priority mp', 'mp.guid::text = mep.product_id') - ->leftJoin(['mp_check' => new \yii\db\Expression(" + ->leftJoin('marketplace_priority mp', 'mp.guid::text = p1n.id::text') + ->leftJoin(['mp_check' => new Expression(" LATERAL ( SELECT - bool_or(COALESCE(b.quantity, 0) < (j.value::numeric * mp.reminder_koef)) AS has_insufficient_quantity, + bool_or(COALESCE(b.quantity, 0) < (j.value::numeric * COALESCE(mp.reminder_koef, 1))) AS has_insufficient_quantity, string_agg( format( 'Недостаточно товара %s (нужно ≥ %s, на складе %s)', prod.name, - (j.value::numeric * mp.reminder_koef), + (j.value::numeric * COALESCE(mp.reminder_koef, 1)), COALESCE(b.quantity::text, '0') ), E'\n' - ) FILTER (WHERE COALESCE(b.quantity, 0) < (j.value::numeric * mp.reminder_koef)) AS insuff_reason + ) FILTER (WHERE COALESCE(b.quantity, 0) < (j.value::numeric * COALESCE(mp.reminder_koef, 1))) AS insuff_reason FROM jsonb_each( - replace(trim(both '\"' from mep.value), '\"\"', '\"')::jsonb + CASE + WHEN mep.value = '' THEN '{}' + ELSE replace(trim(both '\"' from mep.value), '\"\"', '\"') + END::jsonb ) AS j(key, value) LEFT JOIN balances b ON b.product_id::text = j.key AND b.store_id = :storeId LEFT JOIN products_1c prod ON prod.id::text = j.key @@ -58,19 +64,12 @@ class ReportAction extends Action new \yii\db\Expression(" ( 'Коэффициент: ' || COALESCE(mp.reminder_koef::text, '-') || E'\n' || - COALESCE( - concat_ws( - E'\n', - CASE WHEN mep.id IS NULL THEN 'Не имеет состава букета' ELSE NULL END, - CASE WHEN p.price IS NULL THEN 'Нет имеет цены' ELSE NULL END - ), - '' + concat_ws( + E'\n', + CASE WHEN mep.id IS NULL THEN 'Не имеет состава букета' ELSE NULL END, + CASE WHEN p.price IS NULL THEN 'Нет имеет цены' ELSE NULL END, + CASE WHEN mp_check.has_insufficient_quantity THEN mp_check.insuff_reason ELSE NULL END ) - || - CASE WHEN mp_check.has_insufficient_quantity THEN - E'\n' || mp_check.insuff_reason - ELSE '' - END ) AS reason "), new \yii\db\Expression(" @@ -81,6 +80,7 @@ class ReportAction extends Action "), ]) ->where(['in', 'parent_id', $subQuery]) + ->andFilterWhere(['p1n.id' => $productId]) ->params([':storeId' => $storeId]); $products = (new \yii\db\Query()) @@ -100,6 +100,7 @@ class ReportAction extends Action 'dataProvider' => $dataProvider, 'isValid' => $isValid, 'storeId' => $storeId, + 'productId' => $productId, ]); } diff --git a/erp24/commands/MatrixErpController.php b/erp24/commands/MatrixErpController.php index ae16dbaf..e54f2a01 100644 --- a/erp24/commands/MatrixErpController.php +++ b/erp24/commands/MatrixErpController.php @@ -3,6 +3,7 @@ namespace yii_app\commands; use yii\console\Controller; +use yii\db\Exception; use yii\helpers\ArrayHelper; use yii\helpers\Json; use yii_app\records\MatrixErp; @@ -44,9 +45,15 @@ class MatrixErpController extends Controller if ($matrixErpPropertyDynamic1) { $matrixErpPropertyDynamic1->date_end = date("Y-m-d H:i:s"); $matrixErpPropertyDynamic1->active = 0; - $matrixErpPropertyDynamic1->save(); - if ($matrixErpPropertyDynamic1->getErrors()) { - var_dump($matrixErpPropertyDynamic1->getErrors()); + if (!$matrixErpPropertyDynamic1->save()) { + $errors = $matrixErpPropertyDynamic1->getErrors(); + $errorText = ''; + foreach ($errors as $attribute => $msgs) { + foreach ($msgs as $msg) { + $errorText .= "$attribute: $msg\n"; + } + } + throw new \Exception("MatrixErpPropertyDynamic update error:\n" . $errorText); } } $matrixErpPropertyDynamic2 = new MatrixErpPropertyDynamic; @@ -56,14 +63,27 @@ class MatrixErpController extends Controller $matrixErpPropertyDynamic2->date_from = date("Y-m-d H:i:s"); $matrixErpPropertyDynamic2->date_end = '2100-01-01 00:00:00'; $matrixErpPropertyDynamic2->active = 1; - $matrixErpPropertyDynamic2->save(); - if ($matrixErpPropertyDynamic2->getErrors()) { - var_dump($matrixErpPropertyDynamic2->getErrors()); + if (!$matrixErpPropertyDynamic2->save()) { + $errors = $matrixErpPropertyDynamic2->getErrors(); + $errorText = ''; + foreach ($errors as $attribute => $msgs) { + foreach ($msgs as $msg) { + $errorText .= "$attribute: $msg\n"; + } + } + throw new \Exception("MatrixErpPropertyDynamic create error:\n" . $errorText); } + $matrixErp->$field = $product->$field; - $matrixErp->save(); - if ($matrixErp->getErrors()) { - var_dump($matrixErp->getErrors()); + if (!$matrixErp->save()) { + $errors = $matrixErp->getErrors(); + $errorText = ''; + foreach ($errors as $attribute => $msgs) { + foreach ($msgs as $msg) { + $errorText .= "$attribute: $msg\n"; + } + } + throw new \Exception("MatrixErp update error:\n" . $errorText); } } } diff --git a/erp24/views/marketplace/report.php b/erp24/views/marketplace/report.php index 8dd83f9a..be7bfb9f 100644 --- a/erp24/views/marketplace/report.php +++ b/erp24/views/marketplace/report.php @@ -6,11 +6,13 @@ use yii\grid\GridView; use yii\helpers\ArrayHelper; use yii\helpers\Html; use yii_app\records\CityStore; +use yii_app\services\MarketplaceService; /* @var $this yii\web\View */ /* @var $dataProvider yii\data\ActiveDataProvider */ /* @var $storeId string GUID магазина по дефолту Аэродромная */ /* @var $isValid bool Флаг на активности на МП */ +/* @var $productId string GUID букета */ $this->title = 'Отчет продуктов по активности на МП'; $this->params['breadcrumbs'][] = $this->title; @@ -35,6 +37,19 @@ $this->params['breadcrumbs'][] = $this->title; ], ]) ?> +
+ 'product_id', + 'value' => $productId, + 'data' => ArrayHelper::map(MarketplaceService::getMarketplaceProducts(), 'id', 'name'), + 'options' => [ + 'placeholder' => 'Букет', + ], + 'pluginOptions' => [ + 'allowClear' => true, + ], + ]) ?> +
'is_valid',