|
|
@@ -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);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|