where('is_active', '=', 1)->first(); $url = $HRCPortalURL . 'api/cloud/list?api=2.0&project_code=hrc&code=' . $terminal['key'] . '&folder=' . $folder; $search = curl_init(); curl_setopt_array($search, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADER => false, CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, )); $search_response = curl_exec($search); curl_close($search); $responses = json_decode($search_response, TRUE)['files']; /*{"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"}]}*/ foreach ($responses as $key => $response) { $filename = $response['basename']; //$path = '/backup/' . $filename . '.xml'; $path = '/menu/' . $filename; $download_url = $HRCPortalURL . 'api/cloud/download?api=2.0&project_code=hrc&code=' . $terminal['key'] . '&path=' . $path; $download = curl_init(); curl_setopt_array($download, array( CURLOPT_URL => $download_url, CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADER => false, CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, )); $download_response = curl_exec($download); curl_close($download); $file = json_decode($download_response, TRUE)['content']; } $dirname = __DIR__ . "\\..\\..\\..\\Exchange\\" . $terminal['key'] . "\\menu\\"; if (!is_dir($dirname)) { mkdir($dirname, 0755, 'w+'); } if (file_exists($dirname . $filename)) { unlink($dirname . $filename); } $handle = fopen($dirname . $filename, 'w+'); fputs($handle, chr(0xEF) . chr(0xBB) . chr(0xBF)); // BOM file_put_contents($dirname . $filename, base64_decode($file)); fclose($handle); $menu_file = $dirname . $filename; $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']; $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', 'error_counter' => $error_counter, 'errors' => $errors, ]; } }