From: marina Date: Wed, 2 Jul 2025 08:55:03 +0000 (+0300) Subject: ERP-433 Отчет по остаткам букетов для МП и причинам, если логика не проходит. Возможн... X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=e32f1cfba39112b47b294190895cbffb96b876fe;p=erp24_rep%2Fyii-erp24%2F.git ERP-433 Отчет по остаткам букетов для МП и причинам, если логика не проходит. Возможность ручной выгрузки из ERP в Excel --- 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'] ?? '')); + }, ], ], ]); ?>