|
|
@@ -6,10 +6,10 @@ use App\Helpers\DateHelper;
|
|
|
use App\Helpers\ExcelHelper;
|
|
|
use App\Models\Contract;
|
|
|
use App\Models\Order;
|
|
|
+use App\Models\Reclamation;
|
|
|
use Exception;
|
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
use Illuminate\Support\Str;
|
|
|
-use PhpOffice\PhpSpreadsheet\Cell\Cell;
|
|
|
use PhpOffice\PhpSpreadsheet\IOFactory;
|
|
|
use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
|
|
|
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
|
|
@@ -19,6 +19,8 @@ class GenerateDocumentsService
|
|
|
const INSTALL_FILENAME = 'Монтаж ';
|
|
|
const HANDOVER_FILENAME = 'Сдача ';
|
|
|
|
|
|
+ const RECLAMATION_FILENAME = 'Рекламация ';
|
|
|
+
|
|
|
/**
|
|
|
* @param Order $order
|
|
|
* @param int $userId
|
|
|
@@ -113,7 +115,6 @@ class GenerateDocumentsService
|
|
|
// copy app photos
|
|
|
foreach ($order->photos as $photo) {
|
|
|
$from = $photo->path;
|
|
|
- @dump($photo->original_name);
|
|
|
$to = 'orders/' . $order->id . '/tmp/ФОТО ПСТ/' . $photo->original_name;
|
|
|
if (!Storage::disk('public')->exists($to)) {
|
|
|
Storage::disk('public')->copy($from, $to);
|
|
|
@@ -155,7 +156,7 @@ class GenerateDocumentsService
|
|
|
$fileModel = (new FileService())->createZipArchive('orders/' . $order->id . '/tmp', self::HANDOVER_FILENAME . $order->common_name . '.zip', $userId);
|
|
|
|
|
|
// remove temp files
|
|
|
-// Storage::disk('public')->deleteDirectory('orders/' . $order->id . '/tmp');
|
|
|
+ Storage::disk('public')->deleteDirectory('orders/' . $order->id . '/tmp');
|
|
|
$order->documents()->syncWithoutDetaching($fileModel);
|
|
|
|
|
|
// return link
|
|
|
@@ -208,6 +209,7 @@ class GenerateDocumentsService
|
|
|
|
|
|
$writer->save(storage_path('app/public/orders/') . $order->id . '/tmp/' . $fileName);
|
|
|
}
|
|
|
+
|
|
|
private function generateQualityDeclaration(Order $order): void
|
|
|
{
|
|
|
$inputFileType = 'Xlsx';
|
|
|
@@ -259,6 +261,7 @@ class GenerateDocumentsService
|
|
|
|
|
|
$writer->save(storage_path('app/public/orders/') . $order->id . '/tmp/' . $fileName);
|
|
|
}
|
|
|
+
|
|
|
private function generateInventory(Order $order): void
|
|
|
{
|
|
|
$inputFileType = 'Xlsx';
|
|
|
@@ -296,6 +299,7 @@ class GenerateDocumentsService
|
|
|
|
|
|
$writer->save(storage_path('app/public/orders/') . $order->id . '/tmp/' . $fileName);
|
|
|
}
|
|
|
+
|
|
|
private function generatePassport(Order $order): void
|
|
|
{
|
|
|
$inputFileType = 'Xlsx';
|
|
|
@@ -331,4 +335,137 @@ class GenerateDocumentsService
|
|
|
$writer->save(storage_path('app/public/orders/') . $order->id . '/tmp/' . $fileName);
|
|
|
}
|
|
|
|
|
|
+ public function generateReclamationPack(Reclamation $reclamation, int $userId): string
|
|
|
+ {
|
|
|
+ Storage::disk('public')->makeDirectory('reclamations/' . $reclamation->id . '/tmp/' . $reclamation->order->object_address . '/ФОТО НАРУШЕНИЯ/');
|
|
|
+ // copy photos
|
|
|
+ foreach ($reclamation->photos_before as $photo) {
|
|
|
+ $from = $photo->path;
|
|
|
+ $to = 'reclamations/' . $reclamation->id . '/tmp/' . $reclamation->order->object_address . '/ФОТО НАРУШЕНИЯ/' . $photo->original_name;
|
|
|
+ if (!Storage::disk('public')->exists($to)) {
|
|
|
+ Storage::disk('public')->copy($from, $to);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // create xls and pdf
|
|
|
+ $this->generateReclamationOrder($reclamation);
|
|
|
+ $this->generateReclamationAct($reclamation);
|
|
|
+ $this->generateReclamationGuarantee($reclamation);
|
|
|
+
|
|
|
+ // create zip archive
|
|
|
+ $fileModel = (new FileService())->createZipArchive('reclamations/' . $reclamation->id . '/tmp', self::RECLAMATION_FILENAME . $reclamation->order->object_address . '.zip', $userId);
|
|
|
+
|
|
|
+ // remove temp files
|
|
|
+ Storage::disk('public')->deleteDirectory('reclamations/' . $reclamation->id . '/tmp');
|
|
|
+ $reclamation->documents()->syncWithoutDetaching($fileModel);
|
|
|
+
|
|
|
+ // return link
|
|
|
+ return $fileModel?->link ?? '';
|
|
|
+ }
|
|
|
+
|
|
|
+ private function generateReclamationOrder(Reclamation $reclamation): void
|
|
|
+ {
|
|
|
+ $inputFileType = 'Xlsx';
|
|
|
+ $inputFileName = './templates/ReclamationOrder.xlsx';
|
|
|
+
|
|
|
+ $reader = IOFactory::createReader($inputFileType);
|
|
|
+ $spreadsheet = $reader->load($inputFileName);
|
|
|
+ $sheet = $spreadsheet->getActiveSheet();
|
|
|
+
|
|
|
+ $articles = [];
|
|
|
+ foreach ($reclamation->skus as $p) {
|
|
|
+ $articles[] = $p->product->article;
|
|
|
+ }
|
|
|
+
|
|
|
+ $sheet->setCellValue('J4', DateHelper::getHumanDate($reclamation->create_date, true));
|
|
|
+ $sheet->setCellValue('L10', $reclamation->order->common_name);
|
|
|
+ $sheet->setCellValue('L11', $reclamation->order->area?->responsible?->name);
|
|
|
+ $sheet->setCellValue('W11', $reclamation->order->area?->responsible?->phone);
|
|
|
+ $sheet->setCellValue('L12', $reclamation->order->year);
|
|
|
+ $sheet->setCellValue('G13', $reclamation->guarantee);
|
|
|
+ $sheet->setCellValue('G14', implode(', ', $articles));
|
|
|
+ $sheet->setCellValue('Y15', DateHelper::getHumanDate($reclamation->finish_date, true));
|
|
|
+ $sheet->setCellValue('U20', DateHelper::getHumanDate($reclamation->create_date, true));
|
|
|
+
|
|
|
+ // save file
|
|
|
+ $fileName = 'Монтажная заявка - ' . $reclamation->order->object_address . '.xlsx';
|
|
|
+ $writer = new Xlsx($spreadsheet);
|
|
|
+ Storage::disk('public')->makeDirectory('reclamations/' . $reclamation->id . '/tmp/' . $reclamation->order->object_address);
|
|
|
+
|
|
|
+ $writer->save(storage_path('app/public/reclamations/') . $reclamation->id . '/tmp/' . $reclamation->order->object_address . '/' . $fileName);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function generateReclamationAct(Reclamation $reclamation): void
|
|
|
+ {
|
|
|
+ $inputFileType = 'Xlsx';
|
|
|
+ $inputFileName = './templates/ReclamationAct.xlsx';
|
|
|
+
|
|
|
+ $reader = IOFactory::createReader($inputFileType);
|
|
|
+ $spreadsheet = $reader->load($inputFileName);
|
|
|
+ $sheet = $spreadsheet->getActiveSheet();
|
|
|
+
|
|
|
+ $mafs = [];
|
|
|
+ foreach ($reclamation->skus as $p) {
|
|
|
+ $mafs[] = $p->product->passport_name . ', тип ' . $p->product->nomenclature_number;
|
|
|
+ }
|
|
|
+
|
|
|
+ $sheet->setCellValue('A17', $reclamation->order->object_address);
|
|
|
+ $sheet->setCellValue('A22', implode('; ', $mafs));
|
|
|
+ $sheet->setCellValue('A27', $reclamation->whats_done);
|
|
|
+
|
|
|
+ $i = 24;
|
|
|
+ $n = 1;
|
|
|
+ foreach ($reclamation->skus as $p) {
|
|
|
+ if ($n++ > 1) {
|
|
|
+ $i++;
|
|
|
+ $sheet->insertNewRowBefore($i, 1);
|
|
|
+ $range = 'D' . $i . ':I' . $i;
|
|
|
+ $sheet->mergeCells($range);
|
|
|
+ }
|
|
|
+ $sheet->setCellValue('D' . $i, $p->rfid);
|
|
|
+ }
|
|
|
+
|
|
|
+ // save file
|
|
|
+ $fileName = 'Акт - ' . $reclamation->order->object_address . '.xlsx';
|
|
|
+ $writer = new Xlsx($spreadsheet);
|
|
|
+ Storage::disk('public')->makeDirectory('reclamations/' . $reclamation->id . '/tmp/' . $reclamation->order->object_address);
|
|
|
+ $writer->save(storage_path('app/public/reclamations/') . $reclamation->id . '/tmp/' . $reclamation->order->object_address . '/' . $fileName);
|
|
|
+ }
|
|
|
+
|
|
|
+ private function generateReclamationGuarantee(Reclamation $reclamation): void
|
|
|
+ {
|
|
|
+ $inputFileType = 'Xlsx';
|
|
|
+ $inputFileName = './templates/ReclamationGuarantee.xlsx';
|
|
|
+
|
|
|
+ $reader = IOFactory::createReader($inputFileType);
|
|
|
+ $spreadsheet = $reader->load($inputFileName);
|
|
|
+ $sheet = $spreadsheet->getActiveSheet();
|
|
|
+
|
|
|
+ $mafs = [];
|
|
|
+ foreach ($reclamation->skus as $p) {
|
|
|
+ $mafs[] = 'Тип ' . $p->product->nomenclature_number . '(' . $p->product->passport_name . ')' ;
|
|
|
+ }
|
|
|
+
|
|
|
+ $text = "ООО «НАШ ДВОР-СТ» в рамках обязательств по Договору №{$reclamation->order?->contract?->contract_number}" .
|
|
|
+ " от " . DateHelper::getHumanDate($reclamation->order?->contract?->contract_date ?? '1970-01-01', true) .
|
|
|
+ " г. на выполнение комплекса работ по поставке, монтажу устанавливаемых на городских территориях малых архитектурных форм гарантирует " .
|
|
|
+ $reclamation->guarantee . " на оборудовании «" . implode('; ', $mafs) .
|
|
|
+ "» установленному по адресу г. Москва, " . $reclamation->order->object_address . " в срок до " .
|
|
|
+ DateHelper::getHumanDate($reclamation->finish_date, true). " г. в связи с отсутствием детали в наличии и ее производством.";
|
|
|
+
|
|
|
+
|
|
|
+ $sheet->setCellValue('B9', $reclamation->id);
|
|
|
+ $sheet->setCellValue('D9', DateHelper::getHumanDate($reclamation->create_date, true));
|
|
|
+ $sheet->setCellValue('A19', $text);
|
|
|
+
|
|
|
+ // save file
|
|
|
+ $fileName = 'Гарантийное письмо - ' . $reclamation->order->object_address . '.xlsx';
|
|
|
+ $writer = new Xlsx($spreadsheet);
|
|
|
+ Storage::disk('public')->makeDirectory('reclamations/' . $reclamation->id . '/tmp/' . $reclamation->order->object_address);
|
|
|
+ $writer->save(storage_path('app/public/reclamations/') . $reclamation->id . '/tmp/' . $reclamation->order->object_address . '/' . $fileName);
|
|
|
+
|
|
|
+// $writerPdf = new \PhpOffice\PhpSpreadSheet\Writer\Pdf\;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|