Обновлен перенос клиента из группы в группу Обновлен метод восстановления смены Добавлен метод загрузки меню 1с из облака
1061 lines
58 KiB
PHP
1061 lines
58 KiB
PHP
<?php
|
||
|
||
namespace App\Commands;
|
||
|
||
use App\Component\Models\Dishes;
|
||
use App\Component\Models\Folders;
|
||
use App\Component\Models\Menu;
|
||
use App\Component\Models\Modifier;
|
||
use App\Component\Models\ModifiersList;
|
||
use App\Component\Models\Printer;
|
||
use App\Component\Models\Terminal;
|
||
use App\Component\Models\Units;
|
||
use App\Component\Models\UnitsList;
|
||
use App\Console\Commands\HRCCommand;
|
||
use App\Console\Commands\HRCCommandInterface;
|
||
use Illuminate\Support\Facades\Artisan;
|
||
use Illuminate\Support\Facades\Log;
|
||
use Illuminate\Support\Facades\Http;
|
||
|
||
class GETImportMenu extends HRCCommand implements HRCCommandInterface
|
||
{
|
||
protected $signature = 'getimportmenu';
|
||
|
||
public function command($input, $output = null)
|
||
{
|
||
/* error_reporting(E_ERROR);*/
|
||
function clearCache($dir)
|
||
{
|
||
$d = opendir($dir);
|
||
while (($entry = readdir($d)) !== false) {
|
||
if ($entry != "." && $entry != "..") {
|
||
if (is_dir($dir . "/" . $entry)) {
|
||
clearCache($dir . "/" . $entry);
|
||
} else {
|
||
unlink($dir . "/" . $entry);
|
||
}
|
||
}
|
||
}
|
||
closedir($d);
|
||
rmdir($dir);
|
||
}
|
||
|
||
$terminal = Terminal::where('soft', '=', 1)->where('is_active', '=', 1)->first();
|
||
$response_folder = Http::post('https://portal.hrc.by/api/cloud/folder', [
|
||
'code' => $terminal['key'],
|
||
'folder' => 'menu',
|
||
'project_code' => 'hrc',
|
||
'api' => '2.0',
|
||
]);
|
||
$response_files = Http::get('https://portal.hrc.by/api/cloud/list?api=2.0&project_code=hrc&code=' . $terminal['key'] . '&folder=menu');
|
||
$files = [];
|
||
$file = '';
|
||
$dirname = __DIR__ . "\\..\\..\\..\\Exchange\\" . $terminal['key'] . "\\menu\\";
|
||
/*{"status":"success","message":[{"size":"61671","mimetype":"application\/xml","timestamp":1655321649,"type":"file","path":"menu\/Menu_1_1.xml","dirname":"menu","basename":"Menu_1_1.xml","extension":"xml","filename":"Menu_1_1"}]}*/
|
||
/* return ['status' => 'success',
|
||
'json' => $response_files->json()['files']
|
||
];*/
|
||
if (count($response_files->json()['files']) > 0) {
|
||
foreach ($response_files->json()['files'] as $response) {
|
||
$filename = $response['filename'];
|
||
$basename = $response['basename'];
|
||
$pieces = explode("_", $filename);
|
||
$workgroup = $pieces[1];
|
||
$workcode = $pieces[2];
|
||
$timestamp = 43028832314;
|
||
if (isset($pieces[3])) {
|
||
$timestamp = $pieces[3];
|
||
}
|
||
if ($terminal['work_group'] == $workgroup && $terminal['work_code'] == $workcode) {
|
||
if ($timestamp <= time()) {
|
||
Log::debug('File timestamp: ' . $timestamp);
|
||
Log::debug('Current timestamp: ' . time());
|
||
$files[$timestamp] = array('filename' => $filename, 'basename' => $basename, 'workgroup' => $workgroup, 'workcode' => $workcode);
|
||
}
|
||
}
|
||
}
|
||
if (count($files) == 0) {
|
||
return ['status' => 'success',
|
||
'message' => 'Файлы не найдены'
|
||
];
|
||
}
|
||
$iMaxArrayIndex = max(array_keys($files));
|
||
$basename = $files[$iMaxArrayIndex]['basename'];
|
||
$download_files = Http::get('https://portal.hrc.by/api/cloud/download?api=2.0&project_code=hrc&code=' . $terminal['key'] . '&path=/menu/' . $basename);
|
||
$file = base64_decode($download_files->json()['content']);
|
||
if (!is_dir($dirname)) {
|
||
mkdir($dirname, 0755, 'w+');
|
||
}
|
||
if (file_exists($dirname . $basename)) {
|
||
unlink($dirname . $basename);
|
||
}
|
||
$handle = fopen($dirname . $basename, 'w+');
|
||
fputs($handle, chr(0xEF) . chr(0xBB) . chr(0xBF)); // BOM
|
||
file_put_contents($dirname . $basename, $file);
|
||
fclose($handle);
|
||
$menu_file = $dirname . $basename;
|
||
foreach ($files as $index => $file) {
|
||
$delete_file = Http::delete('https://portal.hrc.by/api/cloud/file', [
|
||
'code' => $terminal['key'],
|
||
'name' => $file['basename'],
|
||
'folder' => 'menu',
|
||
'project_code' => 'hrc',
|
||
'api' => '2.0',
|
||
]);
|
||
}
|
||
} else {
|
||
return ['status' => 'success',
|
||
'message' => 'Файлы не найдены'
|
||
];
|
||
}
|
||
|
||
|
||
$objXmlDocument = simplexml_load_file($menu_file);
|
||
$objJsonDocument = json_encode($objXmlDocument);
|
||
$xmlmenu = json_decode($objJsonDocument, TRUE);
|
||
$GeneralSettings = $xmlmenu['GeneralSettings']['@attributes'];
|
||
$Printers = $xmlmenu['Printers']['Item'];
|
||
$ReportCategory = $xmlmenu['ReportCategory']['Item'];
|
||
$TypesMenu = $xmlmenu['TypesMenu']['Item'];
|
||
$Dishes = $xmlmenu['Dishes']['Item'];
|
||
$MenuItems = $xmlmenu['Menu']['Item'];
|
||
$Units_Dishes = $xmlmenu['Units_Dishes']['Item'];
|
||
if (isset($xmlmenu['Modifiers']['Item'])) {
|
||
$Modifiers = $xmlmenu['Modifiers']['Item'];
|
||
}
|
||
|
||
|
||
//проверка целостности меню
|
||
$errors = [];
|
||
$error_counter = 0;
|
||
foreach ($MenuItems as $key => $MenuItem) {
|
||
$folder_trigger = intval($MenuItem['@attributes']['IsGroop']);
|
||
if ($folder_trigger == 0) {
|
||
$dish_printer_code = 0;
|
||
$dish_code = intval($MenuItem['@attributes']['CodeDishes']);
|
||
foreach ($Dishes as $key => $Dish) {
|
||
if ($dish_code == intval($Dish['@attributes']['Code'])) {
|
||
$dish_printer_code = intval($Dish['@attributes']['CodePrinter']);
|
||
}
|
||
}
|
||
if ($dish_printer_code == 0) {
|
||
$error_counter = $error_counter + 1;
|
||
array_push($errors, 'Отсутствует место хранения у товара ' . $MenuItem['@attributes']['Name']);
|
||
}
|
||
$printer_trigger = 0;
|
||
$units_trigger = 0;
|
||
foreach ($Printers as $key => $printer) {
|
||
$printer_code = intval($printer['@attributes']['Code']);
|
||
if ($printer_code == $dish_printer_code) {
|
||
$printer_trigger = $printer_trigger + 1;
|
||
}
|
||
}
|
||
if ($printer_trigger == 0) {
|
||
$error_counter = $error_counter + 1;
|
||
array_push($errors, 'Место хранения для товара ' . $MenuItem['@attributes']['Name'] . ' не найдено');
|
||
}
|
||
foreach ($Units_Dishes as $key => $Unit) {
|
||
$unit_dish_code = intval($Unit['@attributes']['CodeDishes']);
|
||
if ($unit_dish_code == $dish_code) {
|
||
$units_trigger = $units_trigger + 1;
|
||
}
|
||
}
|
||
if ($units_trigger == 0) {
|
||
$error_counter = $error_counter + 1;
|
||
array_push($errors, 'Порционность для товара ' . $Dish['@attributes']['Name'] . ' не найдена');
|
||
}
|
||
}
|
||
}
|
||
//конец проверки целостности меню
|
||
Log::debug('Menu parser errors count: ' . $error_counter);
|
||
if ($error_counter == 0) {
|
||
|
||
//Menus, Folders, Dishes, Units, Printers, Report Categories, Modifiers
|
||
|
||
//Start menu parser
|
||
Log::debug('Start menu parser');
|
||
$base_menus = Menu::where('is_history', 0)->get();
|
||
$menu_count = Menu::where('is_history', 0)->count();
|
||
if ($menu_count > 0) {
|
||
foreach ($base_menus as $key => $base_menu) {
|
||
if (count($TypesMenu) > 1) {
|
||
foreach ($TypesMenu as $key => $Menu) {
|
||
$menu_code = intval($Menu['@attributes']['Code']);
|
||
$menu_name = $Menu['@attributes']['Name'];
|
||
$create_menu_trigger = 1;
|
||
if ($base_menu['code'] == $menu_code && $base_menu['name'] != $menu_name) {
|
||
$old_menu = Menu::where('is_history', 0)
|
||
->where('code', $base_menu['code'])
|
||
->first();
|
||
$updMenu = Menu::find($old_menu['id']);
|
||
$updMenu->is_history = 1;
|
||
$updMenu->save();
|
||
}
|
||
if ($base_menu['name'] == $menu_name && $base_menu['code'] == $menu_code) {
|
||
$create_menu_trigger = 0;
|
||
}
|
||
if ($create_menu_trigger == 1) {
|
||
$new_menu = Menu::upsert([
|
||
['name' => $menu_name,
|
||
'application_id' => 1,
|
||
'code' => $menu_code,
|
||
'is_history' => 0,
|
||
'is_export' => 1],
|
||
], ['name'],
|
||
['application_id'],
|
||
['code'],
|
||
['is_history'],
|
||
['is_export']
|
||
);
|
||
}
|
||
}
|
||
} else {
|
||
$menu_code = intval($TypesMenu['@attributes']['Code']);
|
||
$menu_name = $TypesMenu['@attributes']['Name'];
|
||
$create_menu_trigger = 1;
|
||
if ($base_menu['code'] == $menu_code && $base_menu['name'] != $menu_name) {
|
||
$old_menu = Menu::where('is_history', 0)
|
||
->where('code', $base_menu['code'])
|
||
->first();
|
||
$updMenu = Menu::find($old_menu['id']);
|
||
$updMenu->is_history = 1;
|
||
$updMenu->save();
|
||
}
|
||
if ($base_menu['name'] == $menu_name && $base_menu['code'] == $menu_code) {
|
||
$create_menu_trigger = 0;
|
||
}
|
||
if ($create_menu_trigger == 1) {
|
||
$new_menu = Menu::upsert([
|
||
['name' => $menu_name,
|
||
'application_id' => 1,
|
||
'code' => $menu_code,
|
||
'is_history' => 0,
|
||
'is_export' => 1],
|
||
], ['name'],
|
||
['application_id'],
|
||
['code'],
|
||
['is_history'],
|
||
['is_export']
|
||
);
|
||
}
|
||
}
|
||
}
|
||
} else {
|
||
if (count($TypesMenu) > 1) {
|
||
foreach ($TypesMenu as $key => $Menu) {
|
||
$menu_code = intval($Menu['@attributes']['Code']);
|
||
$menu_name = $Menu['@attributes']['Name'];
|
||
$new_menu = Menu::upsert([
|
||
['name' => $menu_name,
|
||
'application_id' => 1,
|
||
'code' => $menu_code,
|
||
'is_history' => 0,
|
||
'is_export' => 1],
|
||
], ['name'],
|
||
['application_id'],
|
||
['code'],
|
||
['is_history'],
|
||
['is_export']
|
||
);
|
||
}
|
||
} else {
|
||
$menu_code = intval($TypesMenu['@attributes']['Code']);
|
||
$menu_name = $TypesMenu['@attributes']['Name'];
|
||
$new_menu = Menu::upsert([
|
||
['name' => $menu_name,
|
||
'application_id' => 1,
|
||
'code' => $menu_code,
|
||
'is_history' => 0,
|
||
'is_export' => 1],
|
||
], ['name'],
|
||
['application_id'],
|
||
['code'],
|
||
['is_history'],
|
||
['is_export']
|
||
);
|
||
}
|
||
}
|
||
Log::debug('End menu parser');
|
||
//End menu parser
|
||
|
||
//Start folders parser
|
||
Log::debug('Start folders parser');
|
||
$base_folders = Folders::where('is_history', 0)->get();
|
||
$folders_count = Folders::where('is_history', 0)->count();
|
||
if ($folders_count > 0) {
|
||
foreach ($MenuItems as $key => $MenuItem) {
|
||
$folder_trigger = intval($MenuItem['@attributes']['IsGroop']);
|
||
if ($folder_trigger == 1) {
|
||
foreach ($base_folders as $key => $base_folder) {
|
||
$folder_code = intval($MenuItem['@attributes']['Code']);
|
||
$folder_name = $MenuItem['@attributes']['Name'];
|
||
$folder_menu_code = intval($MenuItem['@attributes']['CodeTypeMenu']);
|
||
$folder_complex = intval($MenuItem['@attributes']['Complex']);
|
||
$folder_code_parent = intval($MenuItem['@attributes']['CodeParent']);
|
||
$create_folder_trigger = 1;
|
||
if ($base_folder['code'] == $folder_code && $base_folder['name'] != $folder_name) {
|
||
$old_folder = Folders::where('is_history', 0)
|
||
->where('code', $base_folder['code'])
|
||
->first();
|
||
$updFolder = Folders::find($old_folder['id']);
|
||
$updFolder->is_history = 1;
|
||
$updFolder->save();
|
||
}
|
||
$found_folders = Folders::where('code', $folder_code)->where('name', $folder_name)->where('is_history', 0)->first();
|
||
if (!isset($found_folders)) {
|
||
$new_folder = Folders::upsert([
|
||
['name' => $folder_name,
|
||
'parent_code' => $folder_code_parent,
|
||
'menu_code' => $folder_menu_code,
|
||
'code' => $folder_code,
|
||
'color' => '',
|
||
'is_history' => 0,
|
||
'is_export' => 1,
|
||
'is_complex' => $folder_complex,
|
||
'is_migrate' => 0,
|
||
'is_p_migrate' => 0,
|
||
'show_on_display' => 0,
|
||
'is_bot_export' => 0,
|
||
],
|
||
], ['name'],
|
||
['parent_code'],
|
||
['menu_code'],
|
||
['code'],
|
||
['color'],
|
||
['is_history'],
|
||
['is_export'],
|
||
['is_complex'],
|
||
['is_migrate'],
|
||
['is_p_migrate'],
|
||
['show_on_display'],
|
||
['is_bot_export']
|
||
);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
} elseif ($folders_count == 0) {
|
||
foreach ($MenuItems as $key => $MenuItem) {
|
||
$folder_trigger = intval($MenuItem['@attributes']['IsGroop']);
|
||
if ($folder_trigger == 1) {
|
||
$folder_code = intval($MenuItem['@attributes']['Code']);
|
||
$folder_name = $MenuItem['@attributes']['Name'];
|
||
$folder_complex = intval($MenuItem['@attributes']['Complex']);
|
||
$folder_menu_code = intval($MenuItem['@attributes']['CodeTypeMenu']);
|
||
$folder_code_parent = intval($MenuItem['@attributes']['CodeParent']);
|
||
$new_folder = Folders::upsert([
|
||
['name' => $folder_name,
|
||
'parent_code' => $folder_code_parent,
|
||
'menu_code' => $folder_menu_code,
|
||
'code' => $folder_code,
|
||
'color' => '',
|
||
'is_history' => 0,
|
||
'is_export' => 1,
|
||
'is_complex' => $folder_complex,
|
||
'is_migrate' => 0,
|
||
'is_p_migrate' => 0,
|
||
'show_on_display' => 0,
|
||
'is_bot_export' => 0,
|
||
],
|
||
], ['name'],
|
||
['parent_code'],
|
||
['menu_code'],
|
||
['code'],
|
||
['color'],
|
||
['is_history'],
|
||
['is_export'],
|
||
['is_complex'],
|
||
['is_migrate'],
|
||
['is_p_migrate'],
|
||
['show_on_display'],
|
||
['is_bot_export']
|
||
);
|
||
}
|
||
}
|
||
}
|
||
Log::debug('End folders parser');
|
||
//End folders parser
|
||
|
||
//Start printers parser
|
||
Log::debug('Start printers parser');
|
||
$base_printers = Printer::where('is_history', 0)->get();
|
||
$printers_count = Printer::where('is_history', 0)->count();
|
||
if ($printers_count > 0) {
|
||
foreach ($Printers as $key => $Printer) {
|
||
foreach ($base_printers as $key => $base_printer) {
|
||
$printer_code = intval($Printer['@attributes']['Code']);
|
||
$printer_name = $Printer['@attributes']['Name'];
|
||
if ($base_printer['code'] == $printer_code && $base_printer['name'] != $printer_name) {
|
||
$old_printer = Printer::where('is_history', 0)
|
||
->where('code', $base_printer['code'])
|
||
->first();
|
||
$updPrinter = Printer::find($old_printer['id']);
|
||
$updPrinter->is_history = 1;
|
||
$updPrinter->save();
|
||
}
|
||
$found_printers = Printer::where('code', $printer_code)->where('name', $printer_name)->where('is_history', 0)->first();
|
||
if (!isset($found_printers)) {
|
||
$new_printer = Printer::upsert([
|
||
['name' => $printer_name,
|
||
'code' => $printer_code,
|
||
'is_history' => 0,
|
||
'is_export' => 1,
|
||
],
|
||
], ['name'],
|
||
['is_history'],
|
||
['is_export']
|
||
);
|
||
}
|
||
}
|
||
}
|
||
} elseif ($printers_count == 0) {
|
||
foreach ($Printers as $key => $Printer) {
|
||
$printer_code = intval($Printer['@attributes']['Code']);
|
||
$printer_name = $Printer['@attributes']['Name'];
|
||
$new_printer = Printer::upsert([
|
||
['name' => $printer_name,
|
||
'code' => $printer_code,
|
||
'is_history' => 0,
|
||
'is_export' => 1,
|
||
],
|
||
], ['name'],
|
||
['is_history'],
|
||
['is_export']
|
||
);
|
||
}
|
||
}
|
||
Log::debug('End printers parser');
|
||
//End printers parser
|
||
|
||
//Start Dishes parser
|
||
Log::debug('Start dishes parser');
|
||
$dishes_count = Dishes::where('is_history', 0)->count();
|
||
if ($dishes_count > 0) {
|
||
Log::debug('Dishes in base: ' . $dishes_count);
|
||
foreach ($MenuItems as $MenuItem) {
|
||
if ($MenuItem['@attributes']['IsGroop'] == '0') {
|
||
//$dish_code = intval($MenuItem['@attributes']['Code']);
|
||
$dish_code = intval($MenuItem['@attributes']['CodeDishes']);
|
||
$dish_codeDishes = intval($MenuItem['@attributes']['CodeDishes']);
|
||
$dish_menu = intval($MenuItem['@attributes']['CodeTypeMenu']);
|
||
$dish_name = $MenuItem['@attributes']['Name'];
|
||
$dish_folder = intval($MenuItem['@attributes']['CodeParent']);
|
||
$dish_price = floatval($MenuItem['@attributes']['Price']);
|
||
$dish_special_price = floatval($MenuItem['@attributes']['Cost']);
|
||
$dish_real_counter = floatval($MenuItem['@attributes']['Fractional']);
|
||
$dish_printer_code = 0;
|
||
$dish_modifier = 0;
|
||
$dish_description = '';
|
||
foreach ($Dishes as $key => $Dish) {
|
||
if ($Dish['@attributes']['isGroop'] == "0") {
|
||
$dishCode = intval($Dish['@attributes']['Code']);
|
||
if ($dish_codeDishes == $dishCode) {
|
||
$dish_printer_code = intval($Dish['@attributes']['CodePrinter']);
|
||
$dish_description = $Dish['@attributes']['DescriptionRus'];
|
||
}
|
||
}
|
||
}
|
||
if (isset($xmlmenu['Modifiers']['Item'])) {
|
||
foreach ($Modifiers as $key => $Modifier) {
|
||
if (isset($Modifier['@attributes']['CodeDishes'])) {
|
||
$modDishCode = intval($Modifier['@attributes']['CodeDishes']);
|
||
if ($dish_codeDishes == $modDishCode) {
|
||
$dish_modifier = 1;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
$base_dish = Dishes::where('legacy_code', $dish_codeDishes)
|
||
->where('code', $dish_code)
|
||
->where('is_history', 0)
|
||
->first();
|
||
if (isset($base_dish)) {
|
||
if ($base_dish['legacy_code'] == $dish_codeDishes && ($base_dish['name'] != $dish_name || $base_dish['folder_code'] != $dish_folder || $base_dish['cosht'] != $dish_price || $base_dish['real_cosht'] != $dish_special_price || $base_dish['real_count'] != $dish_real_counter || $base_dish['printer_code'] != $dish_printer_code)) {
|
||
$old_dish = Dishes::where('is_history', 0)
|
||
->where('legacy_code', $base_dish['legacy_code'])
|
||
->where('code', $dish_code)
|
||
->first();
|
||
$updDish = Dishes::find($old_dish['id']);
|
||
$updDish->is_history = 1;
|
||
$updDish->save();
|
||
Dishes::upsert([
|
||
['code' => $dish_code,
|
||
'menu_code' => $dish_menu,
|
||
'name' => $dish_name,
|
||
'folder_code' => $dish_folder,
|
||
'cosht' => $dish_price,
|
||
'real_cosht' => $dish_special_price,
|
||
'real_count' => $dish_real_counter,
|
||
'printer_code' => $dish_printer_code,
|
||
'legacy_code' => $dish_codeDishes,
|
||
'is_serving' => 0,
|
||
'color' => '',
|
||
'is_history' => 0,
|
||
'is_export' => 1,
|
||
'is_modifier' => $dish_modifier,
|
||
'barcode' => '',
|
||
'image' => '',
|
||
'description' => $dish_description,
|
||
'is_migrate' => 0,
|
||
'is_f_migrate' => 0,
|
||
'show_on_display' => 0,
|
||
'is_bot_export' => 0,
|
||
],
|
||
], ['code'],
|
||
['menu_code'],
|
||
['name'],
|
||
['folder_code'],
|
||
['cosht'],
|
||
['real_cosht'],
|
||
['real_count'],
|
||
['printer_code'],
|
||
['legacy_code'],
|
||
['is_serving'],
|
||
['color'],
|
||
['is_history'],
|
||
['is_export'],
|
||
['is_modifier'],
|
||
['barcode'],
|
||
['is_migrate'],
|
||
['is_f_migrate'],
|
||
['show_on_display'],
|
||
['is_bot_export'],
|
||
);
|
||
}
|
||
} else {
|
||
Dishes::upsert([
|
||
['code' => $dish_code,
|
||
'menu_code' => $dish_menu,
|
||
'name' => $dish_name,
|
||
'folder_code' => $dish_folder,
|
||
'cosht' => $dish_price,
|
||
'real_cosht' => $dish_special_price,
|
||
'real_count' => $dish_real_counter,
|
||
'printer_code' => $dish_printer_code,
|
||
'legacy_code' => $dish_codeDishes,
|
||
'is_serving' => 0,
|
||
'color' => '',
|
||
'is_history' => 0,
|
||
'is_export' => 1,
|
||
'is_modifier' => $dish_modifier,
|
||
'barcode' => '',
|
||
'image' => '',
|
||
'description' => $dish_description,
|
||
'is_migrate' => 0,
|
||
'is_f_migrate' => 0,
|
||
'show_on_display' => 0,
|
||
'is_bot_export' => 0,
|
||
],
|
||
], ['code'],
|
||
['menu_code'],
|
||
['name'],
|
||
['folder_code'],
|
||
['cosht'],
|
||
['real_cosht'],
|
||
['real_count'],
|
||
['printer_code'],
|
||
['legacy_code'],
|
||
['is_serving'],
|
||
['color'],
|
||
['is_history'],
|
||
['is_export'],
|
||
['is_modifier'],
|
||
['barcode'],
|
||
['is_migrate'],
|
||
['is_f_migrate'],
|
||
['show_on_display'],
|
||
['is_bot_export'],
|
||
);
|
||
}
|
||
}
|
||
}
|
||
} else {
|
||
Log::debug('Dishes in base: ' . $dishes_count);
|
||
foreach ($MenuItems as $key => $MenuItem) {
|
||
if ($MenuItem['@attributes']['IsGroop'] == '0') {
|
||
//$dish_code = intval($MenuItem['@attributes']['Code']);
|
||
$dish_code = intval($MenuItem['@attributes']['CodeDishes']);
|
||
$dish_codeDishes = intval($MenuItem['@attributes']['CodeDishes']);
|
||
$dish_menu = intval($MenuItem['@attributes']['CodeTypeMenu']);
|
||
$dish_name = $MenuItem['@attributes']['Name'];
|
||
$dish_folder = intval($MenuItem['@attributes']['CodeParent']);
|
||
$dish_price = floatval($MenuItem['@attributes']['Price']);
|
||
$dish_special_price = floatval($MenuItem['@attributes']['Cost']);
|
||
$dish_real_counter = floatval($MenuItem['@attributes']['Fractional']);
|
||
$dish_printer_code = 0;
|
||
$dish_modifier = 0;
|
||
$dish_description = '';
|
||
foreach ($Dishes as $key => $Dish) {
|
||
if (isset($Dish['@attributes']['CodePrinter']) && $Dish['@attributes']['CodePrinter'] != ' ') {
|
||
if ($dish_codeDishes == intval($Dish['@attributes']['Code'])) {
|
||
$dish_printer_code = intval($Dish['@attributes']['CodePrinter']);
|
||
$dish_description = $Dish['@attributes']['DescriptionRus'];
|
||
}
|
||
}
|
||
}
|
||
if (isset($xmlmenu['Modifiers']['Item'])) {
|
||
foreach ($Modifiers as $key => $Modifier) {
|
||
if (isset($Modifier['@attributes']['CodeDishes'])) {
|
||
if ($dish_codeDishes == intval($Modifier['@attributes']['CodeDishes'])) {
|
||
$dish_modifier = 1;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
Dishes::upsert([
|
||
['code' => $dish_code,
|
||
'menu_code' => $dish_menu,
|
||
'name' => $dish_name,
|
||
'folder_code' => $dish_folder,
|
||
'cosht' => $dish_price,
|
||
'real_cosht' => $dish_special_price,
|
||
'real_count' => $dish_real_counter,
|
||
'printer_code' => $dish_printer_code,
|
||
'legacy_code' => $dish_codeDishes,
|
||
'is_serving' => 0,
|
||
'color' => '',
|
||
'is_history' => 0,
|
||
'is_export' => 1,
|
||
'is_modifier' => $dish_modifier,
|
||
'barcode' => '',
|
||
'image' => '',
|
||
'description' => $dish_description,
|
||
'is_migrate' => 0,
|
||
'is_f_migrate' => 0,
|
||
'show_on_display' => 0,
|
||
'is_bot_export' => 0,
|
||
],
|
||
], ['code'],
|
||
['menu_code'],
|
||
['name'],
|
||
['folder_code'],
|
||
['cosht'],
|
||
['real_cosht'],
|
||
['real_count'],
|
||
['printer_code'],
|
||
['legacy_code'],
|
||
['is_serving'],
|
||
['color'],
|
||
['is_history'],
|
||
['is_export'],
|
||
['is_modifier'],
|
||
['barcode'],
|
||
['is_migrate'],
|
||
['is_f_migrate'],
|
||
['show_on_display'],
|
||
['is_bot_export'],
|
||
);
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
Log::debug('End dishes parser');
|
||
//End Dishes parser
|
||
|
||
//Start units parser
|
||
Log::debug('Start units parser');
|
||
$base_units = Units::where('is_history', 0)->get();
|
||
$units_count = Units::where('is_history', 0)->count();
|
||
UnitsList::truncate();
|
||
if ($units_count > 0) {
|
||
foreach ($base_units as $key => $base_unit) {
|
||
foreach ($Units_Dishes as $key => $Unit_Dishes) {
|
||
$found_units = Units::where('name', $Unit_Dishes['@attributes']['Name'])
|
||
->where('cof', floatval($Unit_Dishes['@attributes']['Coefficient']))
|
||
->where('is_history', 0)
|
||
->first();
|
||
if (!isset($found_units)) {
|
||
$new_unit = Units::upsert([
|
||
['menu_id' => 0,
|
||
'cof' => floatval($Unit_Dishes['@attributes']['Coefficient']),
|
||
'name' => $Unit_Dishes['@attributes']['Name'],
|
||
],
|
||
], ['menu_id'],
|
||
['cof'],
|
||
['name'],
|
||
);
|
||
}
|
||
}
|
||
}
|
||
} else {
|
||
foreach ($Units_Dishes as $key => $Unit_Dishes) {
|
||
$found_units = Units::where('name', $Unit_Dishes['@attributes']['Name'])
|
||
->where('cof', floatval($Unit_Dishes['@attributes']['Coefficient']))
|
||
->where('is_history', 0)
|
||
->first();
|
||
if (!isset($found_units)) {
|
||
$new_unit = Units::upsert([
|
||
['menu_id' => 0,
|
||
'cof' => floatval($Unit_Dishes['@attributes']['Coefficient']),
|
||
'name' => $Unit_Dishes['@attributes']['Name'],
|
||
],
|
||
], ['menu_id'],
|
||
['cof'],
|
||
['name'],
|
||
);
|
||
}
|
||
}
|
||
}
|
||
foreach ($Units_Dishes as $key => $Unit_Dishes) {
|
||
$dish = Dishes::where('legacy_code', $Unit_Dishes['@attributes']['CodeDishes'])
|
||
->where('is_history', 0)
|
||
->first();
|
||
$unit = Units::where('name', $Unit_Dishes['@attributes']['Name'])
|
||
->where('cof', floatval($Unit_Dishes['@attributes']['Coefficient']))
|
||
->first();
|
||
UnitsList::upsert([
|
||
[
|
||
'unit_id' => $unit['id'],
|
||
'dish_id' => $dish['id']
|
||
],
|
||
], ['unit_id'],
|
||
['dish_id']
|
||
);
|
||
|
||
}
|
||
/*foreach ($MenuItems as $menuItem) {
|
||
if ($menuItem['@attributes']['IsGroop'] == '0') {
|
||
if (isset($menuItem['Units']['Item'])) {
|
||
$dish_id = Dishes::where('is_history', 0)
|
||
->where('legacy_code', intval($menuItem['@attributes']['CodeDishes']))
|
||
->first();
|
||
$dish_id = $dish_id['id'];
|
||
$legacy_code = intval($menuItem['@attributes']['CodeUnit']);
|
||
if (count($menuItem['Units']['Item']) > 1) {
|
||
Log::debug('Menu units count > 1');
|
||
foreach ($menuItem['Units']['Item'] as $unit) {
|
||
//$id = intval($unit['@attributes']['Code']);
|
||
$id = intval($menuItem['Units']['Item']['@attributes']['Code']);
|
||
foreach ($Units_Dishes as $key => $Unit_Dishes) {
|
||
if ($Unit_Dishes['@attributes']['CodeDishes'] == $menuItem['@attributes']['CodeDishes']) {
|
||
$cof = floatval($Unit_Dishes['@attributes']['Coefficient']);
|
||
$unit_name = $Unit_Dishes['@attributes']['Name'];
|
||
$unit_id = Units::where('cof', $cof)
|
||
->where('name', $unit_name)
|
||
->first();
|
||
}
|
||
}
|
||
$found_units_list = UnitsList::where('id', $id)
|
||
->where('unit_id', $unit_id['id'])
|
||
->where('dish_id', $dish_id)
|
||
->where('legacy_code', $legacy_code)
|
||
->first();
|
||
if (!isset($found_units_list)) {
|
||
$new_unit_list = UnitsList::upsert([
|
||
[
|
||
'id' => $id,
|
||
'unit_id' => $unit_id['id'],
|
||
'dish_id' => $dish_id,
|
||
'legacy_code' => $legacy_code,
|
||
],
|
||
], ['id'],
|
||
['unit_id'],
|
||
['dish_id'],
|
||
['legacy_code'],
|
||
);
|
||
}
|
||
}
|
||
} else {
|
||
Log::debug('Menu units count < 1');
|
||
$id = intval($menuItem['Units']['Item']['@attributes']['Code']);
|
||
foreach ($Units_Dishes as $key => $Unit_Dishes) {
|
||
if (intval($Unit_Dishes['@attributes']['CodeDishes']) == intval($menuItem['@attributes']['CodeDishes'])) {
|
||
$cof = floatval($Unit_Dishes['@attributes']['Coefficient']);
|
||
$unit_name = $Unit_Dishes['@attributes']['Name'];
|
||
$unit_id = Units::where('cof', $cof)
|
||
->where('name', $unit_name)
|
||
->first();
|
||
}
|
||
}
|
||
$found_units_list = UnitsList::where('id', $id)
|
||
->where('unit_id', $unit_id['id'])
|
||
->where('dish_id', $dish_id)
|
||
->where('legacy_code', $legacy_code)
|
||
->first();
|
||
if (!isset($found_units_list)) {
|
||
Log::debug('Menu units count < 1');
|
||
$new_unit_list = UnitsList::upsert([
|
||
[
|
||
'id' => $id,
|
||
'unit_id' => $unit_id['id'],
|
||
'dish_id' => $dish_id,
|
||
'legacy_code' => $legacy_code,
|
||
],
|
||
], ['id'],
|
||
['unit_id'],
|
||
['dish_id'],
|
||
['legacy_code'],
|
||
);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}*/
|
||
Log::debug('End units parser');
|
||
//End units parser
|
||
|
||
//Start modifiers parser
|
||
Log::debug('Start modifiers parser');
|
||
if (isset($xmlmenu['Modifiers']['Item'])) {
|
||
$base_modifiers = Modifier::where('is_history', 0)->get();
|
||
$modifiers_count = Modifier::where('is_history', 0)->count();
|
||
$menuCode = Menu::where('is_history', 0)->first();
|
||
ModifiersList::truncate();
|
||
if ($modifiers_count > 0) {
|
||
foreach ($base_modifiers as $key => $base_modifier) {
|
||
foreach ($Modifiers as $modifier) {
|
||
if ($modifier['@attributes']['IsGroop'] == '0') {
|
||
$modifier_code = intval($modifier['@attributes']['Code']);
|
||
$modifier_name = $modifier['@attributes']['Name'];
|
||
$modifier_required = 0;
|
||
foreach ($Modifiers as $groupModifier) {
|
||
if ($groupModifier['@attributes']['IsGroop'] == '1') {
|
||
if ($modifier['@attributes']['CodeParent'] == $groupModifier['@attributes']['Code']) {
|
||
$modifier_required = intval($groupModifier['@attributes']['SignRequired']);
|
||
}
|
||
}
|
||
}
|
||
if (!isset($modifier['@attributes']['Price'])) {
|
||
if ($base_modifier['code'] == $modifier_code && $base_modifier['name'] != $modifier_name) {
|
||
$old_FreeModifier = Modifier::where('is_history', 0)
|
||
->where('code', $base_modifier['code'])
|
||
->first();
|
||
$updFreeModifier = Modifier::find($old_FreeModifier['id']);
|
||
$updFreeModifier->is_history = 1;
|
||
$updFreeModifier->save();
|
||
}
|
||
if ($base_modifier['code'] == $modifier_code && $base_modifier['is_required'] != $modifier_required) {
|
||
$old_FreeModifier = Modifier::where('is_history', 0)
|
||
->where('code', $base_modifier['code'])
|
||
->first();
|
||
$updFreeModifier = Modifier::find($old_FreeModifier['id']);
|
||
$updFreeModifier->is_history = 1;
|
||
$updFreeModifier->save();
|
||
}
|
||
$findFreeModifier = Modifier::where('is_history', 0)
|
||
->where('code', $modifier_code)
|
||
->where('name', $modifier_name)
|
||
->first();
|
||
if (!isset($findFreeModifier)) {
|
||
$newFreeModifier = Modifier::upsert([
|
||
['name' => $modifier_name,
|
||
'code' => $modifier_code,
|
||
'dish_code' => 0,
|
||
'menu_code' => $menuCode['code'],
|
||
'is_export' => 1,
|
||
'unit_id' => 0,
|
||
'is_required' => $modifier_required,
|
||
'is_history' => 0,
|
||
],
|
||
], ['name'],
|
||
['code'],
|
||
['dish_code'],
|
||
['menu_code'],
|
||
['is_export'],
|
||
['unit_id'],
|
||
['is_required'],
|
||
['is_history'],
|
||
);
|
||
}
|
||
|
||
} else {
|
||
foreach ($Modifiers as $key => $Modifier) {
|
||
foreach ($base_modifiers as $base_modifier) {
|
||
if (isset($Modifier['@attributes']['CodeDishes'])) {
|
||
$modifier_code = intval($Modifier['@attributes']['Code']);
|
||
$modifier_name = $Modifier['@attributes']['Name'];
|
||
$modifier_dish = intval($Modifier['@attributes']['CodeDishes']);
|
||
$modifier_required = 0;
|
||
foreach ($Modifiers as $groupModifier) {
|
||
if ($groupModifier['@attributes']['IsGroop'] == '1') {
|
||
if ($Modifier['@attributes']['CodeParent'] == $groupModifier['@attributes']['Code']) {
|
||
$modifier_required = intval($groupModifier['@attributes']['SignRequired']);
|
||
}
|
||
}
|
||
}
|
||
if ($base_modifier['code'] !== $modifier_code && $base_modifier['name'] !== $modifier_name) {
|
||
$old_PaidModifier = Modifier::where('is_history', 0)
|
||
->where('code', $base_modifier['code'])
|
||
->first();
|
||
$updPaidModifier = Modifier::find($old_PaidModifier['id']);
|
||
$updPaidModifier->is_history = 1;
|
||
$updPaidModifier->save();
|
||
}
|
||
if ($base_modifier['code'] !== $modifier_code && $base_modifier['name'] !== $modifier_name) {
|
||
$old_PaidModifier = Modifier::where('is_history', 0)
|
||
->where('code', $base_modifier['code'])
|
||
->first();
|
||
$updPaidModifier = Modifier::find($old_PaidModifier['id']);
|
||
$updPaidModifier->is_history = 1;
|
||
$updPaidModifier->save();
|
||
}
|
||
$modifier_dish_code = Dishes::where('is_history', 0)
|
||
->where('legacy_code', $modifier_dish)
|
||
->first(); //id
|
||
$modifier_unit_id = UnitsList::where('is_history', 0)
|
||
->where('legacy_code', $modifier_dish)
|
||
->first();//unit_id
|
||
$findPaidModifier = Modifier::where('is_history', 0)
|
||
->where('code', $modifier_code)
|
||
->where('name', $modifier_name)
|
||
->where('dish_code', $modifier_dish_code['id'])
|
||
->where('unit_id', $modifier_unit_id['unit_id'])
|
||
->first();
|
||
if (!isset($findPaidModifier)) {
|
||
$newPaidModifier = Modifier::upsert([
|
||
['name' => $modifier_name,
|
||
'code' => $modifier_code,
|
||
'dish_code' => $modifier_dish_code['id'],
|
||
'menu_code' => $menuCode['code'],
|
||
'is_export' => 1,
|
||
'unit_id' => $modifier_unit_id['unit_id'],
|
||
'is_required' => $modifier_required,
|
||
'is_history' => 0,
|
||
],
|
||
], ['name'],
|
||
['code'],
|
||
['dish_code'],
|
||
['menu_code'],
|
||
['is_export'],
|
||
['unit_id'],
|
||
['is_required'],
|
||
['is_history'],
|
||
);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if ($modifiers_count == 0) {
|
||
foreach ($Modifiers as $Modifier) {
|
||
if ($Modifier['@attributes']['IsGroop'] == '0') {
|
||
$modifier_code = intval($Modifier['@attributes']['Code']);
|
||
$modifier_name = $Modifier['@attributes']['Name'];
|
||
$modifier_required = 0;
|
||
foreach ($Modifiers as $groupModifier) {
|
||
if ($groupModifier['@attributes']['IsGroop'] == '1') {
|
||
if ($Modifier['@attributes']['CodeParent'] == $groupModifier['@attributes']['Code']) {
|
||
$modifier_required = intval($groupModifier['@attributes']['SignRequired']);
|
||
}
|
||
}
|
||
}
|
||
if (!isset($Modifier['@attributes']['Price'])) {
|
||
$newFreeModifier = Modifier::upsert([
|
||
['name' => $modifier_name,
|
||
'code' => $modifier_code,
|
||
'dish_code' => 0,
|
||
'menu_code' => $menuCode['code'],
|
||
'is_export' => 1,
|
||
'unit_id' => 0,
|
||
'is_required' => $modifier_required,
|
||
'is_history' => 0,
|
||
],
|
||
], ['name'],
|
||
['code'],
|
||
['dish_code'],
|
||
['menu_code'],
|
||
['is_export'],
|
||
['unit_id'],
|
||
['is_required'],
|
||
['is_history'],
|
||
);
|
||
} else {
|
||
$modifier_code = intval($Modifier['@attributes']['Code']);
|
||
$modifier_name = $Modifier['@attributes']['Name'];
|
||
$modifier_dish = intval($Modifier['@attributes']['CodeDishes']);
|
||
$modifier_required = 0;
|
||
foreach ($Modifiers as $groupModifier) {
|
||
if ($groupModifier['@attributes']['IsGroop'] == '1') {
|
||
if ($Modifier['@attributes']['CodeParent'] == $groupModifier['@attributes']['Code']) {
|
||
$modifier_required = intval($groupModifier['@attributes']['SignRequired']);
|
||
}
|
||
}
|
||
}
|
||
$modifier_dish_code = Dishes::where('is_history', 0)
|
||
->where('legacy_code', $modifier_dish)
|
||
->first(); //id
|
||
$modifier_unit_id = UnitsList::where('is_history', 0)
|
||
->where('legacy_code', $modifier_dish)
|
||
->first();//unit_id
|
||
$newPaidModifier = Modifier::upsert([
|
||
['name' => $modifier_name,
|
||
'code' => $modifier_code,
|
||
'dish_code' => $modifier_dish_code['id'],
|
||
'menu_code' => $menuCode['code'],
|
||
'is_export' => 1,
|
||
'unit_id' => $modifier_unit_id['unit_id'],
|
||
'is_required' => $modifier_required,
|
||
'is_history' => 0,
|
||
],
|
||
], ['name'],
|
||
['code'],
|
||
['dish_code'],
|
||
['menu_code'],
|
||
['is_export'],
|
||
['unit_id'],
|
||
['is_required'],
|
||
['is_history'],
|
||
);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
foreach ($MenuItems as $menuItem) {
|
||
if (isset($menuItem['Modifiers'])) {
|
||
if ($menuItem['@attributes']['IsGroop'] == '0') {
|
||
if (count($menuItem['Modifiers']['Item']) > 1) {
|
||
$modifier_dish_id = Dishes::where('is_history', 0)
|
||
->where('code', intval($menuItem['@attributes']['Code']))
|
||
->first();
|
||
$modifier_dish_id = $modifier_dish_id['id'];
|
||
foreach ($menuItem['Modifiers']['Item'] as $modifier) {
|
||
$modifier_id = Modifier::where('is_history', 0)
|
||
->where('code', intval($modifier['@attributes']['Code']))
|
||
->first();
|
||
$modifier_id = $modifier_id['id'];
|
||
$newModifierList = ModifiersList::upsert([
|
||
['modifier_id' => $modifier_id,
|
||
'dish_id' => $modifier_dish_id,
|
||
],
|
||
], ['modifier_id'],
|
||
['dish_id'],
|
||
);
|
||
}
|
||
} else {
|
||
$modifier_dish_id = Dishes::where('is_history', 0)
|
||
->where('code', intval($menuItem['@attributes']['Code']))
|
||
->first();
|
||
$modifier_dish_id = $modifier_dish_id['id'];
|
||
$modifier_id = Modifier::where('is_history', 0)
|
||
->where('code', intval($menuItem['Modifiers']['Item']['@attributes']['Code']))
|
||
->first();
|
||
$modifier_id = $modifier_id['id'];
|
||
$newModifierList = ModifiersList::upsert([
|
||
['modifier_id' => $modifier_id,
|
||
'dish_id' => $modifier_dish_id,
|
||
],
|
||
], ['modifier_id'],
|
||
['dish_id'],
|
||
);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
Log::debug('End modifiers parser');
|
||
//End modifiers parser
|
||
}
|
||
|
||
return ['status' => 'success',
|
||
'error_counter' => $error_counter,
|
||
'errors' => $errors,
|
||
'json' => $xmlmenu
|
||
];
|
||
}
|
||
} |