Operation processes on invoices

This commit is contained in:
2026-02-13 00:11:51 +01:00
parent 882752472e
commit fd403f8520
44 changed files with 1635 additions and 42 deletions

View File

@@ -0,0 +1,132 @@
<?php
namespace App\Domains\Invoice\Controllers;
use App\Domains\Invoice\Actions\ChangeStatus\ChangeStatusCommand;
use App\Domains\Invoice\Actions\ChangeStatus\ChangeStatusRequest;
use App\Domains\Invoice\Actions\CreateInvoice\CreateInvoiceCommand;
use App\Domains\Invoice\Actions\CreateInvoice\CreateInvoiceRequest;
use App\Domains\Invoice\Actions\UpdateInvoice\UpdateInvoiceCommand;
use App\Domains\Invoice\Actions\UpdateInvoice\UpdateInvoiceRequest;
use App\Enumerations\CostUnitType;
use App\Enumerations\InvoiceStatus;
use App\Resources\InvoiceResource;
use App\Scopes\CommonController;
use App\ValueObjects\Amount;
use App\ValueObjects\InvoiceFile;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class EditController extends CommonController{
public function copyInvoice(int $invoiceId) : JsonResponse{
$invoice = $this->invoices->getAsTreasurer($invoiceId);
if ($invoice === null) {
return response()->json([]);
}
$receiptfile = null;
if ($invoice->document_filename !== null) {
$receiptfile = new InvoiceFile();
$receiptfile->filename = $invoice->document_filename;
$receiptfile->fullPath = $invoice->document_filename;
}
$createInvoiceRequest = new CreateInvoiceRequest(
$invoice->costUnit()->first(),
$invoice->contact_name,
$invoice->type,
$invoice->amount,
$receiptfile,
$invoice->donation,
$invoice->user_id,
$invoice->contact_email,
$invoice->contact_phone,
$invoice->contact_bank_owner,
$invoice->contact_bank_iban,
$invoice->type_other,
$invoice->travel_direction,
$invoice->distance,
$invoice->passengers,
$invoice->transportation
);
$invoiceCreationCommand = new CreateInvoiceCommand($createInvoiceRequest);
$newInvoice = $invoiceCreationCommand->execute()->invoice;
$invoiceDenyRequest = new ChangeStatusRequest($invoice,InvoiceStatus::INVOICE_STATUS_DENIED, 'Abrechnungskorrektur in Rechnungsnummer #' . $newInvoice->invoice_number . ' erstellt.');
$invoiceDenyCommand = new ChangeStatusCommand($invoiceDenyRequest);
$invoiceDenyCommand->execute();
$runningJobs = $this->costUnits->getCostUnitsForNewInvoice(CostUnitType::COST_UNIT_TYPE_RUNNING_JOB);
$currentEvents = $this->costUnits->getCostUnitsForNewInvoice(CostUnitType::COST_UNIT_TYPE_EVENT);
return response()->json([
'invoice' => new InvoiceResource($invoice)->toArray(),
'status' => 'success',
'costUnits' => array_merge($runningJobs, $currentEvents),
]);
}
public function updateInvoice(int $invoiceId, Request $request) : JsonResponse {
$invoice = $this->invoices->getAsTreasurer($invoiceId);
if ($invoice === null) {
return response()->json([]);
}
$modifyData = $request->get('invoiceData');
$newAmount = Amount::fromString($modifyData['amount']);
$amountLeft = Amount::fromString($invoice->amount);
$amountLeft->subtractAmount($newAmount);
$newCostUnit = $this->costUnits->getById($modifyData['cost_unit'],true);
$updateInvoiceRequest = new UpdateInvoiceRequest(
$invoice,
$modifyData['reason_of_correction'] ?? 'Abrechnungskorrektur',
$modifyData['type_internal'],
$newCostUnit,
$newAmount
);
$updateInvoiceCommand = new UpdateInvoiceCommand($updateInvoiceRequest);
$updateInvoiceCommand->execute();
$newInvoice = null;
if (isset($modifyData['duplicate']) && $modifyData['duplicate'] === true) {
$receiptfile = null;
if ($invoice->document_filename !== null) {
$receiptfile = new InvoiceFile();
$receiptfile->filename = $invoice->document_filename;
$receiptfile->fullPath = $invoice->document_filename;
}
$createInvoiceRequest = new CreateInvoiceRequest(
$invoice->costUnit()->first(),
$invoice->contact_name,
$invoice->type,
$amountLeft->getAmount(),
$receiptfile,
$invoice->donation,
$invoice->user_id,
$invoice->contact_email,
$invoice->contact_phone,
$invoice->contact_bank_owner,
$invoice->contact_bank_iban,
$invoice->type_other,
$invoice->travel_direction,
$invoice->distance,
$invoice->passengers,
$invoice->transportation
);
$invoiceCreationCommand = new CreateInvoiceCommand($createInvoiceRequest);
$newInvoice = $invoiceCreationCommand->execute()->invoice;
}
$useInvoice = $newInvoice ?? $invoice;
$do_copy = $newInvoice !== null ? true : false;
return response()->json([
'invoice' => new InvoiceResource($useInvoice)->toArray(),
'do_copy' => $do_copy,
]);
}
}