From e32f1cfba39112b47b294190895cbffb96b876fe Mon Sep 17 00:00:00 2001 From: marina Date: Wed, 2 Jul 2025 11:55:03 +0300 Subject: [PATCH] =?utf8?q?ERP-433=20=D0=9E=D1=82=D1=87=D0=B5=D1=82=20?= =?utf8?q?=D0=BF=D0=BE=20=D0=BE=D1=81=D1=82=D0=B0=D1=82=D0=BA=D0=B0=D0=BC?= =?utf8?q?=20=D0=B1=D1=83=D0=BA=D0=B5=D1=82=D0=BE=D0=B2=20=D0=B4=D0=BB?= =?utf8?q?=D1=8F=20=D0=9C=D0=9F=20=D0=B8=20=D0=BF=D1=80=D0=B8=D1=87=D0=B8?= =?utf8?q?=D0=BD=D0=B0=D0=BC,=20=D0=B5=D1=81=D0=BB=D0=B8=20=D0=BB=D0=BE?= =?utf8?q?=D0=B3=D0=B8=D0=BA=D0=B0=20=D0=BD=D0=B5=20=D0=BF=D1=80=D0=BE?= =?utf8?q?=D1=85=D0=BE=D0=B4=D0=B8=D1=82.=20=D0=92=D0=BE=D0=B7=D0=BC=D0=BE?= =?utf8?q?=D0=B6=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D1=80=D1=83=D1=87=D0=BD?= =?utf8?q?=D0=BE=D0=B9=20=D0=B2=D1=8B=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8?= =?utf8?q?=20=D0=B8=D0=B7=20ERP=20=D0=B2=20Excel?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + erp24/actions/marketplace/ReportAction.php | 74 +++++++++++++--------- erp24/views/marketplace/report.php | 5 +- 3 files changed, 48 insertions(+), 32 deletions(-) diff --git a/.gitignore b/.gitignore index 20108978..67bdd40f 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,5 @@ erp24/api1/views/cron/txt/ erp24/api1/views/cron/xml/ erp24/package-lock.json /pgsql_last.sql +/pgsql_last.sql.gz erp24/api2/users_auth_call_log2.txt diff --git a/erp24/actions/marketplace/ReportAction.php b/erp24/actions/marketplace/ReportAction.php index 514b8ab5..f589dbd4 100644 --- a/erp24/actions/marketplace/ReportAction.php +++ b/erp24/actions/marketplace/ReportAction.php @@ -24,56 +24,70 @@ class ReportAction extends Action ]) ->select('p1n.id'); + $storeId = Yii::$app->request->get('store', 4); + $products = 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(" - LATERAL ( - SELECT - bool_or(mp.minimal_quantity > (j.value::numeric)) AS has_insufficient_quantity, - string_agg( - format( - 'Недостаточно \"%s\" (нужно ≥ %s, указано %s)', - j.guid, - mp.minimal_quantity, - j.value - ), - E'\n' - ) FILTER (WHERE mp.minimal_quantity > (j.value::numeric)) AS insuff_reason - FROM jsonb_each_text(mep.value::jsonb) AS j(guid, value) - JOIN marketplace_priority mp ON mp.id::text = j.guid - ) -")], 'true') - + LATERAL ( + SELECT + bool_or(COALESCE(b.quantity, 0) < (j.value::numeric * mp.reminder_koef)) AS has_insufficient_quantity, + string_agg( + format( + 'Недостаточно товара %s (нужно ≥ %s, на складе %s)', + prod.name, + (j.value::numeric * mp.reminder_koef), + COALESCE(b.quantity::text, '0') + ), + E'\n' + ) FILTER (WHERE COALESCE(b.quantity, 0) < (j.value::numeric * mp.reminder_koef)) AS insuff_reason + FROM jsonb_each( + replace(trim(both '\"' from mep.value), '\"\"', '\"')::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 + ) + ")], 'true') ->select([ 'p1n.id', 'p1n.name', 'p1n.articule', new \yii\db\Expression(" - CASE - WHEN mep.id IS NULL AND p.price IS NULL THEN - 'Не имеет состава букета в MatrixErpProperty и нет цены' - WHEN mep.id IS NULL THEN - 'Не имеет состава букета в MatrixErpProperty' - WHEN p.price IS NULL THEN - 'Нет цены' - WHEN mp_check.has_insufficient_quantity THEN - mp_check.insuff_reason - ELSE NULL - END AS reason - "), + ( + 'Коэффициент: ' || COALESCE(mp.reminder_koef::text, 'N/A') || 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 + ), + '' + ) + || + CASE WHEN mp_check.has_insufficient_quantity THEN + E'\n' || mp_check.insuff_reason + ELSE '' + END + ) AS reason +") + + , new \yii\db\Expression(" CASE WHEN mep.id IS NULL OR p.price IS NULL OR mp_check.has_insufficient_quantity THEN FALSE ELSE TRUE END AS is_valid - ") + "), ]) ->where(['in', 'parent_id', $subQuery]) + ->orderBy(['is_valid' => SORT_ASC]) ->asArray() ->all(); + $dataProvider = new ArrayDataProvider([ 'allModels' => $products, 'pagination' => ['pageSize' => 20], diff --git a/erp24/views/marketplace/report.php b/erp24/views/marketplace/report.php index 4da970c3..dd1fad16 100644 --- a/erp24/views/marketplace/report.php +++ b/erp24/views/marketplace/report.php @@ -63,9 +63,10 @@ $this->params['breadcrumbs'][] = $this->title; [ 'attribute' => 'reason', 'label' => 'Причина не активности', + 'format' => 'raw', 'value' => function ($model) { - return $model['reason'] ?? ''; - } + return nl2br(htmlspecialchars($model['reason'] ?? '')); + }, ], ], ]); ?> -- 2.39.5