ExportMafService.php 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. namespace App\Services;
  3. use App\Helpers\DateHelper;
  4. use App\Models\File;
  5. use App\Models\MafView;
  6. use Illuminate\Support\Facades\Storage;
  7. use PhpOffice\PhpSpreadsheet\IOFactory;
  8. use PhpOffice\PhpSpreadsheet\Style\Border;
  9. use PhpOffice\PhpSpreadsheet\Style\Color;
  10. use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
  11. use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
  12. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  13. class ExportMafService
  14. {
  15. public function handle(int $userId, ?int $year = null): string
  16. {
  17. $inputFileType = 'Xlsx'; // Xlsx - Xml - Ods - Slk - Gnumeric - Csv
  18. $inputFileName = './templates/Mafs.xlsx';
  19. $reader = IOFactory::createReader($inputFileType);
  20. $spreadsheet = $reader->load($inputFileName);
  21. $sheet = $spreadsheet->getActiveSheet();
  22. $sheet->getPageSetup()->setOrientation(PageSetup::ORIENTATION_LANDSCAPE);
  23. $targetYear = $year ?? year();
  24. $mafs = MafView::query()
  25. ->withoutGlobalScopes()
  26. ->where('year', $targetYear)
  27. ->get();
  28. $i = 2;
  29. foreach ($mafs as $maf) {
  30. $sheet->setCellValue('A' . $i, $maf->id);
  31. $sheet->setCellValue('B' . $i, $maf->year);
  32. $sheet->setCellValue('C' . $i, $maf->district_name);
  33. $sheet->setCellValue('D' . $i, $maf->area_name);
  34. $sheet->setCellValue('E' . $i, $maf->object_address);
  35. $sheet->setCellValue('F' . $i, $maf->order_number);
  36. $sheet->setCellValue('G' . $i, $maf->status);
  37. $sheet->setCellValue('H' . $i, $maf->rfid);
  38. $sheet->setCellValue('I' . $i, $maf->factory_number);
  39. $sheet->setCellValue('J' . $i, (is_string($maf->manufacture_date)) ? DateHelper::ISODateToExcelDate($maf->manufacture_date) : '');
  40. $sheet->setCellValue('K' . $i, $maf->statement_number);
  41. $sheet->setCellValue('L' . $i, (is_string($maf->statement_date)) ? DateHelper::ISODateToExcelDate($maf->statement_date) : '');
  42. $sheet->setCellValue('M' . $i, $maf->upd_number);
  43. $sheet->setCellValue('N' . $i, $maf->nomenclature_number);
  44. $sheet->setCellValue('O' . $i, $maf->article);
  45. $sheet->setCellValue('P' . $i, $maf->name_tz);
  46. $sheet->setCellValue('Q' . $i, $maf->type_tz);
  47. $sheet->setCellValue('R' . $i, $maf->type);
  48. $sheet->setCellValue('S' . $i, $maf->manufacturer_name);
  49. $sheet->setCellValue('T' . $i, $maf->comment);
  50. $sheet->getStyle('J' . $i)
  51. ->getNumberFormat()
  52. ->setFormatCode(NumberFormat::FORMAT_DATE_DDMMYYYY);
  53. $sheet->getStyle('L' . $i)
  54. ->getNumberFormat()
  55. ->setFormatCode(NumberFormat::FORMAT_DATE_DDMMYYYY);
  56. $i++;
  57. }
  58. $sheet->getStyle('A1:T' . $i - 1)->getBorders()->getAllBorders()->setBorderStyle(Border::BORDER_THIN)->setColor(new Color('777777'));
  59. $fileName = 'export_mafs_' . date('Y-m-d_H-i-s') . '.xlsx';
  60. $writer = new Xlsx($spreadsheet);
  61. $fd = 'export';
  62. Storage::disk('public')->makeDirectory($fd);
  63. $fp = storage_path('app/public/export/') . $fileName;
  64. Storage::disk('public')->delete($fd . '/' . $fileName);
  65. $writer->save($fp);
  66. // create zip archive
  67. $fileModel = File::query()->create([
  68. 'link' => url('/storage/') . '/export/' . $fileName,
  69. 'path' => $fp,
  70. 'user_id' => $userId,
  71. 'original_name' => $fileName,
  72. 'mime_type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
  73. ]);
  74. // return link
  75. return $fileName;
  76. }
  77. }