More adjustments

This commit is contained in:
Lars Kusch 2023-08-07 10:22:11 +02:00
parent 9f3a58129f
commit 0c83ca51c5
3 changed files with 80 additions and 41 deletions

View File

@ -0,0 +1,61 @@
<?php
namespace App\Jobs\Invoice;
use App\Models\ClientContact;
use App\Models\Invoice;
use horstoeko\zugferd\ZugferdDocumentPdfBuilder;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Facades\Storage;
use horstoeko\zugferd\ZugferdDocumentReader;
class MergeEInvoice implements ShouldQueue
{
public function __construct(public Invoice $invoice, public ?ClientContact $contact = null)
{
}
/**
* @throws \Exception
*/
public function handle(): void
{
$e_invoice_type = $this->invoice->client->getSetting('e_invoice_type');
switch ($e_invoice_type) {
case "EN16931":
case "XInvoice_2_2":
case "XInvoice_2_1":
case "XInvoice_2_0":
case "XInvoice_1_0":
case "XInvoice-Extended":
case "XInvoice-BasicWL":
case "XInvoice-Basic":
$this->embedEInvoiceZuGFerD();
//case "Facturae_3.2":
//case "Facturae_3.2.1":
//case "Facturae_3.2.2":
//
default:
$this->embedEInvoiceZuGFerD();
break;
}
}
/**
* @throws \Exception
*/
private function embedEInvoiceZuGFerD(): void
{
$filepath_pdf = $this->invoice->client->invoice_filepath($this->invoice->invitations->first()) . $this->invoice->getFileName();
$e_invoice_path = $this->invoice->client->e_invoice_filepath($this->invoice->invitations->first()) . $this->invoice->getFileName("xml");
$document = ZugferdDocumentReader::readAndGuessFromFile($e_invoice_path);
$disk = config('filesystems.default');
if (!Storage::disk($disk)->exists($this->invoice->client->e_invoice_filepath($this->invoice->invitations->first()))) {
Storage::makeDirectory($this->invoice->client->e_invoice_filepath($this->invoice->invitations->first()));
}
$pdfBuilder = new ZugferdDocumentPdfBuilder($document, Storage::disk($disk)->path($filepath_pdf));
$pdfBuilder->generateDocument();
$pdfBuilder->saveDocument(Storage::disk($disk)->path($filepath_pdf));
}
}

View File

@ -12,6 +12,8 @@
namespace App\Services\Invoice; namespace App\Services\Invoice;
use App\Jobs\Entity\CreateEntityPdf; use App\Jobs\Entity\CreateEntityPdf;
use App\Jobs\Invoice\CreateEInvoice;
use App\Jobs\Invoice\MergeEInvoice;
use App\Models\ClientContact; use App\Models\ClientContact;
use App\Models\Invoice; use App\Models\Invoice;
use App\Services\AbstractService; use App\Services\AbstractService;
@ -47,7 +49,10 @@ class GetInvoicePdf extends AbstractService
if (! $file) { if (! $file) {
$file_path = (new CreateEntityPdf($invitation))->handle(); $file_path = (new CreateEntityPdf($invitation))->handle();
} }
if ($this->invoice->client->getSetting('enable_e_invoice')){
(new CreateEInvoice($this->invoice))->handle();
(new MergeEInvoice($this->invoice))->handle();
}
return $file_path; return $file_path;
} }
} }

View File

@ -4,58 +4,31 @@ namespace App\Services\Invoice;
use App\Models\ClientContact; use App\Models\ClientContact;
use App\Models\Invoice; use App\Models\Invoice;
use App\Services\AbstractService;
use horstoeko\zugferd\ZugferdDocumentPdfBuilder;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
use horstoeko\zugferd\ZugferdDocumentReader;
class MergeEInvoice extends AbstractService class MergeEInvoice
{ {
/**
* @param Invoice $invoice
* @param mixed|null $contact
*/
public function __construct(public Invoice $invoice, public ?ClientContact $contact = null) public function __construct(public Invoice $invoice, public ?ClientContact $contact = null)
{ {
} }
/**
* @throws \Exception
*/
public function run(): void public function run(): void
{ {
$e_invoice_type = $this->invoice->client->getSetting('e_invoice_type'); $file_path = $this->invoice->client->e_invoice_filepath($this->invoice->invitations->first()). $this->invoice->getFileName("xml");
switch ($e_invoice_type) {
case "EN16931":
case "XInvoice_2_2":
case "XInvoice_2_1":
case "XInvoice_2_0":
case "XInvoice_1_0":
case "XInvoice-Extended":
case "XInvoice-BasicWL":
case "XInvoice-Basic":
$this->embedEInvoiceZuGFerD();
//case "Facturae_3.2":
//case "Facturae_3.2.1":
//case "Facturae_3.2.2":
//
default:
$this->embedEInvoiceZuGFerD();
break;
}
}
/** // $disk = 'public';
* @throws \Exception
*/
private function embedEInvoiceZuGFerD(): void
{
$filepath_pdf = $this->invoice->client->invoice_filepath($this->invoice->invitations->first()) . $this->invoice->getFileName();
$e_invoice_path = $this->invoice->client->e_invoice_filepath($this->invoice->invitations->first()) . $this->invoice->getFileName("xml");
$document = ZugferdDocumentReader::readAndGuessFromFile($e_invoice_path);
$disk = config('filesystems.default'); $disk = config('filesystems.default');
if (!Storage::disk($disk)->exists($this->invoice->client->e_invoice_filepath($this->invoice->invitations->first()))) { $file = Storage::disk($disk)->exists($file_path);
Storage::makeDirectory($this->invoice->client->e_invoice_filepath($this->invoice->invitations->first()));
if (! $file) {
(new \App\Jobs\Invoice\MergeEInvoice($this->invoice))->handle();
} }
$pdfBuilder = new ZugferdDocumentPdfBuilder($document, Storage::disk($disk)->path($filepath_pdf));
$pdfBuilder->generateDocument();
$pdfBuilder->saveDocument(Storage::disk($disk)->path($filepath_pdf));
} }
} }