Обновлены миграции
Разработка парсера меню из 1с
This commit is contained in:
miroman-afk
2022-06-22 23:05:26 +03:00
parent 46cf6ff8e4
commit 9c3b633098
8 changed files with 234 additions and 14 deletions

View File

@@ -66,16 +66,165 @@ class GETImportMenu extends HRCCommand implements HRCCommandInterface {
$objXmlDocument = simplexml_load_file($menu_file);
$objJsonDocument = json_encode($objXmlDocument);
$xmlmenu = json_decode($objJsonDocument, TRUE);
$test = $xmlmenu['GeneralSettings']['@attributes'];
/* $check_setting = Settings::where('code', 12)->first();
$check_setting = $check_setting['value'] + 0;
if ($check_setting == 0) {
$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'];
$Modifiers = $xmlmenu['Modifiers']['Item'];
}*/
//проверка целостности меню
$errors = [];
$error_counter = 0;
foreach ($MenuItems as $key => $MenuItem) {
$folder_trigger = $MenuItem['@attributes']['isGroop'] + 0;
if ($folder_trigger == 0) {
if ($MenuItem['@attributes']['CodePrinter'] == ' ' || $MenuItem['@attributes']['CodePrinter'] == '0') {
$error_counter = $error_counter + 1;
array_push($errors, 'Отсутствует место хранения у товара ' . $MenuItem['@attributes']['Name']);
} else {
$dish_code_printer = $MenuItem['@attributes']['CodePrinter'] + 0;
}
$dish_code = $MenuItem['@attributes']['Code'] + 0;
$printer_trigger = 0;
$units_trigger = 0;
foreach ($Printers as $key => $printer) {
$printer_code = $printer['@attributes']['Code'] + 0;
if ($printer_code == $dish_code_printer) {
$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 = $Unit['@attributes']['CodeDishes'] + 0;
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'] . ' не найдена');
}
}
}
//конец проверки целостности меню
if ($error_counter == 0) {
//Menus, Folders, Dishes, Units, Printers, Report Categories, Modifiers
//Start menu parser
$base_menus = Menu::where('is_history', 0)->get();
foreach ($TypesMenu as $key => $Menu) {
$menu_code = $Menu['@attributes']['Code'] + 0;
$menu_name = $Menu['@attributes']['Name'];
foreach ($base_menus as $key => $base_menu) {
if ($base_menu['code'] == $menu_code) {
$old_menu = Menu::where('is_history', 0)
->where('code', $base_menu['code'])
->update(['is_history' => 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']
);
}
}
//End menu parser
//Start folders parser
$base_folders = Folders::where('is_history', 0)->get();
foreach ($MenuItems as $key => $MenuItem) {
$folder_code = $MenuItem['@attributes']['Code'] + 0;
$folder_name = $MenuItem['@attributes']['Name'];
$folder_complex = $MenuItem['@attributes']['Complex'] + 0;
$folder_menu_code = $MenuItem['@attributes']['CodeTypeMenu'] + 0;
$folder_trigger = $MenuItem['@attributes']['isGroop'] + 0;
if ($folder_trigger == 1) {
$folder_code_parent = $MenuItem['@attributes']['CodeParent'] + 0;
$create_folder_trigger = 1;
foreach ($base_folders as $key => $base_folder) {
if ($base_folder['code'] == $folder_code && $base_folder['name'] != $folder_name) {
$old_folder = Folders::where('is_history', 0)
->where('code', $base_folder['code'])
->update(['is_history' => 1]);
$create_folder_trigger = 1;
}
if ($base_folder['code'] == $folder_code && $base_folder['name'] == $folder_name) {
$create_folder_trigger = 0;
}
}
if ($create_folder_trigger == 1) {
$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']
);
}
}
}
//End folders parser
//Start Dishes
$base_dishes = Dishes::get();
foreach ($MenuItems as $key => $MenuItem) {
$dish_code = $MenuItem['@attributes']['Code'] + 0;
$folder_trigger = $MenuItem['@attributes']['isGroop'] + 0;
if ($folder_trigger == 0) {
foreach ($base_dishes as $key => $base_dish) {
if ($base_dish['code'] == $dish_code) {
}
}
}
}
//End Dishes
}
/* $check_setting = Settings::where('code', 12)->first();
$check_setting = $check_setting['value'] + 0;
if ($check_setting == 0) {
*/
return [
'status' => 'success',
'message' => $test,
'error_counter' => $error_counter,
'errors' => $errors,
];
}
}