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;
}
+
+ // Старый функционал
+ //TODO Просмотр опций - кнопку убрал
public function actionAjaxProductProvider()
{
$id = Yii::$app->request->post('id');
// ->asArray()
->all();
$providers = ArrayHelper::map($providers, 'id', 'name');
-// var_dump($providers); die();
+
$data = Products1cOptions::find()
->where(['id' => $id])
$productColorsArray = explode(';', $data->colors ?? '');
- // Определение массива групп продуктов
+
$productGroups = [
"1" => "Голландия/Израиль",
2 => "Кения",
$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>";
$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) {
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;
}
}
+ 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() {
$data2[$row->tip] = $id;
}
+
$array = [
"wrap" => "Упаковка",
"potted" => "Горшечка",
"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) {
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) {
});
}
- 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