products_sku; $articles = []; Storage::disk('public')->makeDirectory('orders/' . $order->id . '/tmp/Схемы сборки/'); foreach ($products_sku as $sku) { if(!in_array($sku->product->article, $articles)) { $articles[] = $sku->product->article; // find and copy scheme files to installation directory if(file_exists($techDocsPath . $sku->product->article . '/')) { foreach(Storage::disk('base')->allFiles('tech-docs/' . $sku->product->article) as $p) { $content = Storage::disk('base')->get($p); Storage::disk('public')->put('orders/' . $order->id . '/tmp/Схемы сборки/' . basename($p), $content); } } } } // generate xlsx order file $this->generateOrderForMount($order); // create zip archive $fileModel = (new FileService())->createZipArchive('orders/' . $order->id . '/tmp', self::INSTALL_FILENAME . $order->common_name . '.zip', $userId); // remove temp files Storage::disk('public')->deleteDirectory('orders/' . $order->id . '/tmp'); $order->documents()->syncWithoutDetaching($fileModel); // return link return $fileModel?->link ?? ''; } private function generateOrderForMount(Order $order): void { $inputFileType = 'Xlsx'; // Xlsx - Xml - Ods - Slk - Gnumeric - Csv $inputFileName = './templates/OrderForMount.xlsx'; $reader = IOFactory::createReader($inputFileType); $spreadsheet = $reader->load($inputFileName); $sheet = $spreadsheet->getActiveSheet(); // менеджер $sheet->setCellValue('F8', $order->user->name); $sheet->setCellValue('X8', $order->user->phone); // округ и район $sheet->setCellValue('L10', $order->district->shortname); $sheet->setCellValue('W10', $order->area->name); if($order->area->responsible) { // ответственный $sheet->setCellValue('C12', $order->area->responsible?->name . ', ' . $order->area->responsible?->phone . ', ' . $order->area->responsible?->post); } else { $sheet->setCellValue('C12', ''); } // адрес $sheet->setCellValue('L14', $order->object_address); $str = Str::replace('
', '', $order->products_with_count); $str = Str::replace('
', "\n", $str); // мафы $sheet->setCellValue('G33', Str::trim($str)); // $fileName = 'Заявка на монтаж - ' . $order->object_address . '.xlsx'; $writer = new Xlsx($spreadsheet); Storage::disk('public')->makeDirectory('orders/' . $order->id . '/tmp'); $writer->save(storage_path('app/public/orders/') . $order->id .'/tmp/' . $fileName); } }