diff --git a/commands/GETImportMenu.php b/commands/GETImportMenu.php index 4f1f2ce..723ca70 100644 --- a/commands/GETImportMenu.php +++ b/commands/GETImportMenu.php @@ -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, ]; } } \ No newline at end of file diff --git a/composer.json b/composer.json index cac3509..353c661 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,6 @@ { "name": "hrc-admin/hello-world", - "version": "2.18", + "version": "2.19", "require": { "horeca/admin-php-module-core": "dev-master" }, diff --git a/database/migrations/2022_01_14_143043_delete_frontend_folders.php b/database/migrations/2022_01_14_143043_delete_frontend_folders.php index ea66a71..6465696 100644 --- a/database/migrations/2022_01_14_143043_delete_frontend_folders.php +++ b/database/migrations/2022_01_14_143043_delete_frontend_folders.php @@ -10,12 +10,12 @@ class DeleteFrontendFolders extends Migration { * @return void */ public function up() { - function dirDel($dir) { + function Deldir($dir) { $d = opendir($dir); while (($entry = readdir($d)) !== false) { if ($entry != "." && $entry != "..") { if (is_dir($dir . "/" . $entry)) { - dirDel($dir . "/" . $entry); + Deldir($dir . "/" . $entry); } else { unlink($dir . "/" . $entry); } @@ -25,17 +25,17 @@ class DeleteFrontendFolders extends Migration { rmdir($dir); } if (file_exists(CORE_PATH . '/../Client/web/')) { - dirDel(CORE_PATH . '/../Client/web/'); + Deldir(CORE_PATH . '/../Client/web/'); } else { Log::debug('Client frontend already deleted!'); } if (file_exists(CORE_PATH . '/../Shift/web/')) { - dirDel(CORE_PATH . '/../Shift/web/'); + Deldir(CORE_PATH . '/../Shift/web/'); } else { Log::debug('Shift frontend already deleted!'); } if (file_exists(CORE_PATH . '/../Report/web/')) { - dirDel(CORE_PATH . '/../Report/web/'); + Deldir(CORE_PATH . '/../Report/web/'); } else { Log::debug('Report frontend already deleted!'); } diff --git a/database/migrations/2022_06_17_130548_create_report_categories_table.php b/database/migrations/2022_06_17_130548_create_report_categories_table.php new file mode 100644 index 0000000..b53a66c --- /dev/null +++ b/database/migrations/2022_06_17_130548_create_report_categories_table.php @@ -0,0 +1,35 @@ +id(); + $table->string('name', 255)->nullable(); + $table->integer('code')->nullable(); + $table->integer('is_history')->nullable(); + $table->timestamps(); + }); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() { + Schema::table('report_categories', function (Blueprint $table) { + // + }); + } +} diff --git a/models/Menu.php b/models/Menu.php new file mode 100644 index 0000000..9af3f5f --- /dev/null +++ b/models/Menu.php @@ -0,0 +1,15 @@ +