| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- <?php
- namespace App\Services;
- use App\Helpers\DateHelper;
- use App\Models\Order;
- use App\Models\Product;
- use Illuminate\Support\Collection;
- use Illuminate\Support\Facades\Log;
- use Illuminate\Support\Facades\Storage;
- use Illuminate\Support\Str;
- use PhpOffice\PhpSpreadsheet\IOFactory;
- use PhpOffice\PhpSpreadsheet\Style\Alignment;
- use PhpOffice\PhpSpreadsheet\Style\Border;
- use PhpOffice\PhpSpreadsheet\Style\Color;
- use PhpOffice\PhpSpreadsheet\Style\Fill;
- use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
- use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
- class ExportOneOrderService
- {
- /**
- * @throws \Exception
- */
- public function handle(Order $order, int $userId): string
- {
- $inputFileType = 'Xlsx';
- $inputFileName = './templates/Order.xlsx';
- $reader = IOFactory::createReader($inputFileType);
- $spreadsheet = $reader->load($inputFileName);
- $sheet = $spreadsheet->getActiveSheet();
- $sheet->getPageSetup()->setOrientation(PageSetup::ORIENTATION_LANDSCAPE);
- $sheet->setCellValue('A1', 'МАФ площадки ' . $order->common_name);
- $i = 3;
- foreach ($order->products_sku as $sku) {
- $mnfDate = ($sku->manufacture_date) ? DateHelper::getHumanDate($sku->manufacture_date, true) : '';
- $sheet->setCellValue('A' . $i, $sku->product->article);
- $sheet->setCellValue('B' . $i, $sku->product->nomenclature_number);
- $sheet->setCellValue('C' . $i, $sku->status);
- $sheet->setCellValue('D' . $i, $sku->maf_order?->order_number);
- $sheet->setCellValue('E' . $i, $sku->rfid);
- $sheet->setCellValue('F' . $i, $sku->factory_number);
- $sheet->setCellValue('G' . $i, $mnfDate);
- $sheet->setCellValue('H' . $i, ($sku->maf_order?->order_number) ? 'Да' : 'Нет');
- $sheet->setCellValue('I' . $i, (!is_null($sku->passport_id)) ? 'Да' : 'Нет');
- $i++;
- }
- $sheet->getStyle('A1:I' . $i - 1)->getBorders()->getAllBorders()->setBorderStyle(Border::BORDER_THIN)->setColor(new Color('777777'));
- $sheet->getStyle('A1:I' . $i - 1)->getAlignment()->setWrapText(true);
- $sheet->getStyle('A1:I' . $i - 1)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER);
- $fileName = fileName('Площадка ' . $order->common_name . '.xlsx');
- $writer = new Xlsx($spreadsheet);
- $fd = 'export/order/tmp';
- Storage::disk('public')->makeDirectory($fd);
- $fp = storage_path('app/public/export/order/') . '/tmp/' . $fileName;
- Storage::disk('public')->delete($fd . '/' . $fileName);
- $writer->save($fp);
- PdfConverterClient::convert($fp);
- // create zip archive
- $fileModel = (new FileService())->createZipArchive($fd, Str::replace('.xlsx', '.zip', $fileName), $userId);
- // remove temp files
- Storage::disk('public')->deleteDirectory($fd);
- // return link
- return $fileModel?->link ?? '';
- }
- }
|