costUnits->getById($costUnitId); $invoicesForExport = $this->invoices->getByStatus($costUnit, InvoiceStatus::INVOICE_STATUS_APPROVED, false); $webdavProvider = new WebDavProvider(WebDavProvider::INVOICE_PREFIX . $this->tenant->url . '/' . $costUnit->name); $painFileData = $this->painData($invoicesForExport); $csvData = $this->csvData($invoicesForExport); $filePrefix = Tenant::getTempDirectory(); $painFileWriteProvider = new FileWriteProvider($filePrefix . 'abrechnungen-' . date('Y-m-d_H-i') . '-sepa.xml', $painFileData); $painFileWriteProvider->writeToFile(); $csvFileWriteProvider = new FileWriteProvider($filePrefix . 'abrechnungen-' . date('Y-m-d_H-i') . '.csv', $csvData); $csvFileWriteProvider->writeToFile(); if ($this->tenant->upload_exports) { $webdavProvider->uploadFile($painFileWriteProvider->fileName); $webdavProvider->uploadFile($csvFileWriteProvider->fileName); } $downloadZipArchiveFiles = [ $painFileWriteProvider->fileName, $csvFileWriteProvider->fileName ]; foreach ($invoicesForExport as $invoice) { $changeStatusRequest = new ChangeStatusRequest($invoice, InvoiceStatus::INVOICE_STATUS_EXPORTED); $changeStatusCommand = new ChangeStatusCommand($changeStatusRequest); $changeStatusCommand->execute(); if ($this->tenant->download_exports) { $createInvoiceReceiptRequest = new CreateInvoiceReceiptRequest($invoice); $createInvoiceReceiptCommand = new CreateInvoiceReceiptCommand($createInvoiceReceiptRequest); $response = $createInvoiceReceiptCommand->execute(); $downloadZipArchiveFiles[] = $response->fileName; } } if ($this->tenant->download_exports) { $zipFile = Tenant::getTempDirectory() . 'Abrechnungen-' . $costUnit->name . '.zip'; $zipFileProvider = new ZipArchiveFileProvider($zipFile); foreach ($downloadZipArchiveFiles as $file) { $zipFileProvider->addFile($file); } $zipFileProvider->create(); foreach ($downloadZipArchiveFiles as $file) { Storage::delete($file); } Storage::delete($painFileWriteProvider->fileName); Storage::delete($csvFileWriteProvider->fileName); return response()->download( storage_path('app/private/' . $zipFile), basename($zipFile), ['Content-Type' => 'application/zip'] ); } Storage::delete($painFileWriteProvider->fileName); Storage::delete($csvFileWriteProvider->fileName); return response()->json([ 'message' => 'Die Abrechnungen wurden exportiert.' . PHP_EOL .'Die Belege werden asynchron auf dem Webdav-Server hinterlegt.' . PHP_EOL . PHP_EOL . 'Sollten diese in 15 Minuten nicht vollständig sein, kontaktiere den Adminbistrator.' ]); } private function painData(array $invoices) : string { $invoicesForPainFile = []; foreach ($invoices as $invoice) { if ($invoice->contact_bank_owner !== null && $invoice->contact_bank_iban !== '' && !$invoice->donation) { $invoicesForPainFile[] = $invoice; } } $painFileProvider = new PainFileProvider($this->tenant->account_iban, $this->tenant->account_name, $this->tenant->account_bic, $invoicesForPainFile); return $painFileProvider->createPainFileContent(); } public function csvData(array $invoices) : string { $csvDateProvider = new InvoiceCsvFileProvider($invoices); return $csvDateProvider->createCsvFileContent(); } }