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 ]; } }