]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Вывод доп свойств
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Fri, 22 Nov 2024 15:31:40 +0000 (18:31 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Fri, 22 Nov 2024 15:31:40 +0000 (18:31 +0300)
erp24/controllers/ProductsController.php
erp24/web/js/products/products-1c.js

index 5cdd39e5bc461366e3a6d43b8031e6c761cbbf94..7601c844cb004f43fd2b01ea7aed219882c2dcc3 100755 (executable)
@@ -8,7 +8,9 @@ use yii\helpers\Html;
 use yii\web\Controller;
 use yii_app\records\ExportImportTable;
 use yii_app\records\Prices;
+use yii_app\records\Product1cPropType;
 use yii_app\records\Products1c;
+use yii_app\records\Products1cAdditionalCharacteristics;
 use yii_app\records\Products1cOptions;
 use yii_app\records\ProductsClass;
 use yii_app\records\ProductsVarieties;
@@ -66,6 +68,9 @@ class ProductsController extends Controller
 
 
     }
+
+    // Старый функционал
+    //TODO Просмотр опций - кнопку убрал
            public function actionAjaxProductProvider()
         {
             $id = Yii::$app->request->post('id');
@@ -79,7 +84,7 @@ class ProductsController extends Controller
                    // ->asArray()
                     ->all();
                 $providers = ArrayHelper::map($providers, 'id', 'name');
-// var_dump($providers); die();
+
 
                $data = Products1cOptions::find()
                    ->where(['id' => $id])
@@ -94,7 +99,7 @@ class ProductsController extends Controller
 
                 $productColorsArray = explode(';', $data->colors ?? '');
 
-                // Определение массива групп продуктов
+
                 $productGroups = [
                     "1" => "Голландия/Израиль",
                     2 => "Кения",
@@ -110,7 +115,7 @@ class ProductsController extends Controller
 
                 $dataResponse = '<div id=result_prov></div><form method=post class="row" action="">';
                 $dataResponse .= '<div class="col-6 text-right">Поставщик</div>
-<div class="col-6"><select class="form-control" id=provider_id name=provider_id>';
+                                    <div class="col-6"><select class="form-control" id=provider_id name=provider_id>';
                 foreach($providers as $idv =>$name) {
                     $dataResponse .= "<option value=".$idv."";
                     if(($data['provider_id'] ??'')==$idv) $dataResponse .= " selected"; $dataResponse .= ">".$name."</option>";
@@ -123,32 +128,50 @@ class ProductsController extends Controller
 
 
                 $dataResponse .= '<div class="col-6 text-right">Группа</div>
-<div class="col-6"><select class="form-control" id=group_id name=group_id><option value=0 ';   if(empty($data['group_id'])) $dataResponse .= " selected";  $dataResponse .= '>-без группы-</option>';
+                                    <div class="col-6"><select class="form-control" id=group_id name=group_id><option value=0 ';
+                if(empty($data['group_id'])) $dataResponse .= " selected";  $dataResponse .= '>-без группы-</option>';
                 foreach($productGroups as $idv =>$name) {
-                    $dataResponse .= "<option value=".$idv.""; if(($data['group_id']??'')==$idv) $dataResponse .= " selected"; $dataResponse .= ">".$name."</option>";
+                    $dataResponse .= "<option value=".$idv."";
+                    if(($data['group_id']??'')==$idv) {
+                        $dataResponse .= " selected";
+                        $dataResponse .= ">".$name."</option>";
+                    }
                 }
                 $dataResponse .= "</select></div>";
 
 
                 $dataResponse .= '<div class="col-6 text-right">Основной товар?</div>
-<div class="col-6"><select class="form-control" id=main name=main>
-<option value=0 ';   if(empty($data['main'])) $dataResponse .= " selected";  $dataResponse .= '>нет</option>
-<option value=1 ';   if(!empty($data['main'])) $dataResponse .= " selected";  $dataResponse .= '>да</option>';
-                $dataResponse .= "</select></div>";
-
-
-                $dataResponse .= '
-<div class="col-6 text-right">срок хранения в днях</div><div class="col-6"> <input type=number style="width:70px;" name=expiration_days id=expiration_days class="form-control" value="'. ($data['expiration_days']??'') .'"></div>
-<div class="col-6 text-right">минимальный лот деления в шт. (кол-во шт в месте)
-</div><div class="col-6"> <input type=number style="width:70px;" name=min_lot id=min_lot class="form-control" value="'. ($data['min_lot']??'') .'"></div>
-<div class="col-6 text-right">минимальный заказ в шт.</div><div class="col-6"> <input type=number style="width:70px;" name=min_order id=min_order class="form-control" value="'. ($data['min_order']??'') .'"></div>
-<div class="col-6 text-right">Цена закупки в  долл. или евро (зависит от поставщика) пример 1.25</div><div class="col-6"> <input type=number style="width:70px;" name=price_zakup id=price_zakup class="form-control" value="'. ($data['price_zakup']??'') .'"></div>
-<div class="col-12">Цвета разделитель ;<textarea row=2 name=colors id=colors class="form-control">'. ($data['colors']??'') .'</textarea></div>
-<div class="col-12">Опции <textarea row=2 name=options id=options class="form-control">'. ($data['options']??'') .'</textarea></div>
-
-
+                                <div class="col-6">
+                                <select class="form-control" id=main name=main>
+                                    <option value=0 ';
+                                    if(empty($data['main'])) {
+                                        $dataResponse .= " selected";
+                                        $dataResponse .= '>нет</option><option value=1 ';
+                                    }
+                                    if(!empty($data['main'])) {
+                                        $dataResponse .= " selected";
+                                        $dataResponse .= '>да</option>';
+                                        $dataResponse .= "</select></div>";
+                                    }
+
+
+                $dataResponse .= '<div class="col-6 text-right">срок хранения в днях</div><div class="col-6"> <input type=number style="width:70px;" name=expiration_days id=expiration_days class="form-control" value="'. ($data['expiration_days']??'') .'"></div>
+<div class="col-6 text-right">минимальный лот деления в шт. (кол-во шт в месте)</div><div class="col-6"> <input type=number style="width:70px;" name=min_lot id=min_lot class="form-control" value="'. ($data['min_lot']??'') .'"></div>
+<div class="col-6 text-right">минимальный заказ в шт.</div>
+<div class="col-6">
+ <input type=number style="width:70px;" name=min_order id=min_order class="form-control" value="'. ($data['min_order']??'') .'">
+ </div>
+<div class="col-6 text-right">Цена закупки в  долл. или евро (зависит от поставщика) пример 1.25</div>
+<div class="col-6"> 
+<input type=number style="width:70px;" name=price_zakup id=price_zakup class="form-control" value="'. ($data['price_zakup']??'') .'">
+</div>
+<div class="col-12">Цвета разделитель ;
+<textarea row=2 name=colors id=colors class="form-control">'. ($data['colors']??'') .'</textarea>
+</div>
+<div class="col-12">Опции 
+<textarea row=2 name=options id=options class="form-control">'. ($data['options']??'') .'</textarea>
+</div>
 <div class="col-12">
-
 Сорта по цветам';
 
                 foreach($productColorsArray as $color) {
@@ -156,21 +179,16 @@ class ProductsController extends Controller
                     if(!empty($color)) {
                         $dataResponse .= "<br><span class=\"btn btn-sm btn-info me-1\">$color</span>";
                     }
-
-
                 }
-
-
                 $dataResponse .= '</div><div class="col-12">';
-
                 $dataResponse .= "<input type=checkbox name=view id=view ";
                 if($view==1)  $dataResponse .= ' value=2 checked';
                 else $dataResponse .= " valiue=0";
                 $dataResponse .= '> показыввать товар в автозаказе';
 
                 $dataResponse .= '</div>
-<div class="col-12">
-<span class="btn btn-lg btn-success m-2" onclick="save_providerder();return false" name=sv value=1>сохранить</span></div></form>';
+                <div class="col-12">
+                <span class="btn btn-lg btn-success m-2" onclick="save_providerder();return false" name=sv value=1>сохранить</span></div></form>';
 
                 return $dataResponse;
             }
@@ -180,6 +198,47 @@ class ProductsController extends Controller
         }
 
 
+    public function actionAjaxProductCharacteristics()
+    {
+        if (Yii::$app->request->isAjax) {
+            $productId = Yii::$app->request->post('id');
+
+            if (empty($productId)) {
+                return $this->asJson(['error' => 'ID товара не передан']);
+            }
+
+
+            $characteristics = Products1cAdditionalCharacteristics::find()
+                ->where(['product_id' => $productId])
+                ->asArray()
+                ->all();
+
+
+            if (empty($characteristics)) {
+                return $this->asJson(['error' => 'Нет свойств для данного товара']);
+            }
+
+
+            $properties = Product1cPropType::find()
+                ->select(['id', 'name'])
+                ->all();
+            $properties = ArrayHelper::map($properties, 'id', 'name');
+
+          //  var_dump($properties); die();
+            $result = [];
+            foreach ($characteristics as $characteristic) {
+                $propertyName = $properties[$characteristic['property_id']] ?? 'Неизвестное свойство';
+                $result[] = [
+                    'name' => $propertyName,
+                    'value' => $characteristic['value'],
+                ];
+            }
+
+            return $this->asJson(['characteristics' => $result]);
+        }
+
+        return $this->asJson(['error' => 'Некорректный запрос']);
+    }
 
     public function actionAjaxGroupConfig() {
 
@@ -195,6 +254,7 @@ class ProductsController extends Controller
                     $data2[$row->tip] = $id;
                 }
 
+
                 $array = [
                     "wrap" => "Упаковка",
                     "potted" => "Горшечка",
@@ -208,33 +268,19 @@ class ProductsController extends Controller
                     "other_items" => "Номенклатура 1%"
                 ];
 
-                $dataString = '<table class=""><tbody>';
-
-                foreach($array as $k => $arr) {
-                    $dataString .= "<tr><td class=\"tixt-right\">$arr</td><td> ";
-                    if(!empty( $data2[$k] ))   {
-                        $dataString .= '<div class="dd' . $id . '' . $k .
-                            ' btn btn-sm btn-danger" onclick="ajax_class_group_remove(\'' . $id . '\',\'' . $k . '\'); " >удалить</div>';
-                    }
-                    else {
-                        $dataString .= '<div class="dd'.$id.''.$k.' dd'.$id.' btn btn-sm btn-success"  onclick="ajax_class_group(\''.$id.'\',\''.$k.'\'); " > добавить</div>';
-                    }
-
-                    $dataString .= ' ('.$k.')</td></tr>';
-                }
-                $dataString .= '</tbody></table>';
-
-
-            return $dataString;
 
+                return $this->asJson([
+                    'id' => $id,
+                    'data2' => $data2,
+                    'classes' => $array,
+                ]);
             }
         }
 
-        return '';
-
+        return $this->asJson(['error' => 'Invalid request']);
+    }
 
 
-    }
     public function actionAjaxProductsInGroup() {
 
         if (Yii::$app->request->isAjax) {
@@ -367,10 +413,20 @@ class ProductsController extends Controller
         return "Некорректный запрос";
     }
 
-
+    // Старый функционал
+    //TODO Удалить
     public function actionAjaxAddProduct() { return $this->renderPartial('ajax-add-product'); }
+
+    // Старый функционал
+    //TODO Удалить
     public function actionAjaxRemoveProduct() { return $this->renderPartial('ajax-remove-product'); }
+
+    // Старый функционал
+    //TODO Удалить
     public function actionAjaxRemoveExport() { return $this->renderPartial('ajax-remove-export'); }
+
+    // Старый функционал
+    //TODO Добавление поставщиков - кнопку убрал
     public function actionAjaxProductProviderAdd()
     {
         if (Yii::$app->request->isAjax) {
index a4055ab8a7f3e8e8ad364c7a1115d452dd1c1b78..79b385f77e959dacfe79fbc997dd58ffb6685ced 100644 (file)
         });
     }
 
-    function ajax_group_config(id) {
-        $('#modal-7').modal('show', {backdrop: 'static'});
-        $('#modal-7 .modal-title').text('Настройка категории');
+function ajax_product_characteristics(id) {
+    $('#modal-7').modal('show', { backdrop: 'static' });
+    $('#modal-7 .modal-title').text('Характеристики товара');
+
+    const param3 = $('meta[name=csrf-param]').attr('content');
+    const token3 = $('meta[name=csrf-token]').attr('content');
+
+    $.ajax({
+        url: '/products/ajax-product-characteristics/',
+        method: 'post',
+        dataType: 'json',
+        data: { id: id, [param3]: token3 },
+        success: function(response) {
+            if (response.error) {
+                $('#modal-7 .modal-body').html(`<p class="text-danger">${response.error}</p>`);
+                return;
+            }
 
-        const param3 = $('meta[name=csrf-param]').attr('content');
-        const token3 = $('meta[name=csrf-token]').attr('content');
 
-        $.ajax({
-            url: '/products/ajax-group-config/',
-            method: 'post',
-            dataType: 'html',
-            data: {id: '' + id + '', [param3]: token3},
-            success: function(data) {
+            const characteristics = response.characteristics;
+            let tableHtml = `
+                <table class="table table-sm table-hover table-borderless">
+                    <thead class="table-light">
+                        <tr class="border-bottom">
+                            <th class="fw-bold">Свойство</th>
+                            <th class="fw-bold">Значение</th>
+                        </tr>
+                    </thead>
+                    <tbody>
+            `;
+
+            characteristics.forEach((characteristic) => {
+                tableHtml += `
+                    <tr>
+                        <td>${capitalizeFirstLetter(characteristic.name)}</td>
+                        <td>${capitalizeFirstLetter(characteristic.value)}</td>
+                    </tr>
+                `;
+            });
+
+            tableHtml += '</tbody></table>';
+            $('#modal-7 .modal-body').html(tableHtml);
+        },
+        error: function() {
+            $('#modal-7 .modal-body').html('<p class="text-danger">Ошибка при выполнении запроса.</p>');
+        }
+    });
+}
+
+function ajax_group_config(id) {
+    $('#modal-7').modal('show', { backdrop: 'static' });
+    $('#modal-7 .modal-title').text('Настройка категории');
+
+    const param3 = $('meta[name=csrf-param]').attr('content');
+    const token3 = $('meta[name=csrf-token]').attr('content');
+
+    $.ajax({
+        url: '/products/ajax-group-config/',
+        method: 'post',
+        dataType: 'json', // Ожидаем данные в формате JSON
+        data: { id: id, [param3]: token3 },
+        success: function(response) {
+            if (response.error) {
+                $('#modal-7 .modal-body').html('<p class="text-danger">Ошибка: ' + response.error + '</p>');
+                return;
+            }
 
-                $('#modal-7 .modal-body').html(data);
+
+            let html = '<div class="d-flex flex-column">'; // Flex-контейнер
+            const classes = response.classes;
+            const data2 = response.data2;
+
+            for (const [key, name] of Object.entries(classes)) {
+                html += `
+                    <div class="d-flex flex-row align-items-center justify-content-between mb-2 border-bottom pb-2">
+                        <div class="text-left  me-2">${name}</div>
+                        <div class="d-flex flex-row align-items-center justify-content-start w-50 ">
+                            ${data2[key]
+                    ? `<button class="btn btn-danger btn-sm" onclick="ajax_class_group_remove('${response.id}', '${key}');">удалить</button><div class="ms-2">(${key})</div>`
+                    : `<button class="btn btn-success btn-sm" onclick="ajax_class_group('${response.id}', '${key}');">добавить</button><div class="ms-2">(${key})</div>`}
+                        </div>
+                        
+                    </div>`;
             }
-        });
-    }
+
+            html += '</div>';
+
+
+
+            $('#modal-7 .modal-body').html(html);
+        },
+        error: function() {
+            $('#modal-7 .modal-body').html('<p class="text-danger">Ошибка при выполнении запроса.</p>');
+        }
+    });
+}
 
     function ajax_products_in_group(parent_id) {
         const param3 = $('meta[name=csrf-param]').attr('content');
 
                 data.forEach((row) => {
                     const isHidden = row.view === 0 ? '<span class="btn btn-sm btn-danger">скрыто</span>' : '';
-                    const providerButton = `<div id="provider_${row.id}" class="btn btn-sm btn-warning" 
+                    /*const providerButton = `<div id="provider_${row.id}" class="btn btn-sm btn-warning"
                 onclick="ajax_product_provider('${row.id}');">
-                + поставщика ${providers[row.id] ? providers[row.id] : ''}</div>`;
+                + поставщика ${providers[row.id] ? providers[row.id] : ''}</div>`;*/
+                    const addCharButton = `<div id="provider_${row.id}" class="btn btn-sm btn-warning" 
+                onclick="ajax_product_characteristics('${row.id}');">
+                Доп. характеристики </div>`;
 
                     let colorsHtml = '';
                     if (colorsProducts[row.id]) {
                         }
                     }
 
-                    const addProductButton = `<div id="diver_${row.id}" class="btn btn-sm btn-warning" onclick="ajax_add_product('${row.id}', '${response.parent_id}', '${row.name}', '${prices[row.id]}');">внести цена ${prices[row.id]}'}</div>`;
-
-                    const removeProductButtons = row.entity_id
-                        ? `<div id="diver_${row.id}" class="btn btn-sm btn-danger" onclick="ajax_remove_product('${row.id}');">удалить продукт</div>
-                       <div id="diver2_${row.id}" class="btn btn-sm btn-danger" onclick="ajaxRemoveExport('${row.id}');">удалить только связь</div>`
-                        : '';
-
                     tableHtml += `
                     <tr class="${row.entity_id ? '' : 'bg-gray-500'}">
                         <td>
                             ${row.name} ${isHidden}
-                            ${providerButton}
+                            ${addCharButton}
                             ${colorsHtml}
                             GUID ${row.id}
                         </td>
             }});
     }
 
+function capitalizeFirstLetter(string) {
+    return string.charAt(0).toUpperCase() + string.slice(1)
+}
+
 //});
\ No newline at end of file