Explorar el Código

statement generate

Alexander Musikhin hace 7 meses
padre
commit
97ec424024

+ 1 - 1
app/Jobs/GenerateHandoverPack.php

@@ -33,7 +33,7 @@ class GenerateHandoverPack implements ShouldQueue
             event(new SendWebSocketMessageEvent('Пакет документов для сдачи готов!', $this->userId, ['success' => true, 'link' => $link]));
         } catch (Exception $e) {
             Log::error('Generate handover pack failed! ' . $e->getMessage());
-            event(new SendWebSocketMessageEvent('Ошибка создания покета документов для сдачи! ', $this->userId, ['error' => $e->getMessage()]));
+            event(new SendWebSocketMessageEvent('Ошибка создания пакета документов для сдачи! ', $this->userId, ['error' => $e->getMessage()]));
         }
     }
 }

+ 1 - 1
app/Jobs/GenerateInstallationPack.php

@@ -33,7 +33,7 @@ class GenerateInstallationPack implements ShouldQueue
             event(new SendWebSocketMessageEvent('Пакет документов для монтажа готов!', $this->userId, ['success' => true, 'link' => $link]));
         } catch (Exception $e) {
             Log::error('Generate installation pack failed! ' . $e->getMessage());
-            event(new SendWebSocketMessageEvent('Ошибка создания покета документов для монтажа! ', $this->userId, ['error' => $e->getMessage()]));
+            event(new SendWebSocketMessageEvent('Ошибка создания пакета документов для монтажа! ', $this->userId, ['error' => $e->getMessage()]));
         }
     }
 }

+ 4 - 5
app/Services/FileService.php

@@ -51,13 +51,12 @@ class FileService
             RecursiveIteratorIterator::LEAVES_ONLY
         );
         foreach ($files as $file) {
+            $filePath = $file->getRealPath();
+            $relativePath = substr($filePath, strlen($fullPath) + 1);
             if(!$file->isDir()) {
-                // Get real and relative path for current file
-                $filePath = $file->getRealPath();
-                $relativePath = substr($filePath, strlen($fullPath) + 1);
-                // Add current file to archive
                 $zip->addFile($filePath, $relativePath);
-
+            } else {
+                $zip->addEmptyDir($relativePath);
             }
         }
         $zip->close();

+ 53 - 1
app/Services/GenerateDocumentsService.php

@@ -2,6 +2,8 @@
 
 namespace App\Services;
 
+use App\Helpers\DateHelper;
+use App\Models\Contract;
 use App\Models\Order;
 use Exception;
 use Illuminate\Support\Facades\Storage;
@@ -137,7 +139,9 @@ class GenerateDocumentsService
         }
 
         // generate xlsx order files
-        // ...
+        $this->generateStatement($order);
+
+
 
         // create zip archive
         $fileModel = (new FileService())->createZipArchive('orders/' . $order->id . '/tmp', self::HANDOVER_FILENAME . $order->common_name . '.zip', $userId);
@@ -150,4 +154,52 @@ class GenerateDocumentsService
         return $fileModel?->link ?? '';
     }
 
+    private function generateStatement(Order $order): void
+    {
+        $inputFileType = 'Xlsx';
+        $inputFileName = './templates/Statement.xlsx';
+
+        $reader = IOFactory::createReader($inputFileType);
+        $spreadsheet = $reader->load($inputFileName);
+        $sheet = $spreadsheet->getActiveSheet();
+
+        $contract = Contract::query()->where('contracts.year', $order->year)->first();
+        $contract_number = $contract->contract_number ?? 'заполнить договор за ' . $order->year . ' год!';
+        $contract_date = DateHelper::getHumanDate($contract->contract_date ?? '1970-01-01', true);
+        $s = 'по Договору №' . $contract_number . ' от ' . $contract_date . ' г. Между ГБУ "Мосремонт" и ООО "НАШ ДВОР-СТ"';
+
+        $sheet->setCellValue('B5', $s);
+
+        // менеджер
+        $sheet->setCellValue('G21', $order->user->name);
+
+        // округ и район
+        $sheet->setCellValue('C6', $order->district->shortname);
+        $sheet->setCellValue('F6', $order->area->name);
+
+        $i = 9; // start of table
+        $nn = 1; // string number
+        foreach ($order->products_sku as $sku) {
+            if($nn > 1) { // inset row
+                $sheet->insertNewRowBefore($i);
+            }
+            $sheet->setCellValue('A' . $i, $nn++);
+            $sheet->setCellValue('B' . $i, $sku->product->statement_name);
+            $sheet->setCellValue('C' . $i, $sku->product->passport_name);
+            $sheet->setCellValue('D' . $i, 'шт');
+            $sheet->setCellValue('E' . $i, '1');
+            $sheet->setCellValue('F' . $i, $order->name);
+            $sheet->setCellValue('G' . $i, $sku->factory_number);
+            $sheet->setCellValue('H' . $i++, $sku->rfid);
+        }
+
+        // save file
+        $fileName = '1.Ведомость.xlsx';
+        $writer = new Xlsx($spreadsheet);
+        Storage::disk('public')->makeDirectory('orders/' . $order->id . '/tmp');
+
+        $writer->save(storage_path('app/public/orders/') . $order->id .'/tmp/' . $fileName);
+    }
+
+
 }

BIN
templates/Statement.xlsx