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( costUnit: $invoice->costUnit()->first(), contactName: $invoice->contact_name, invoiceType: $invoice->type, totalAmount: $invoice->amount, receiptFile: $receiptfile, isDonation: $invoice->donation, userId: $invoice->user_id, contactEmail: $invoice->contact_email, contactPhone: $invoice->contact_phone, accountOwner: $invoice->contact_bank_owner, accountIban: $invoice->contact_bank_iban, invoiceTypeExtended: $invoice->type_other, travelRoute: $invoice->travel_direction, distance: $invoice->distance, travelReason: $invoice->travel_reason, paymentPurpose: $invoice->payment_purpose, notices: $invoice->comment, // Die rohe Spalte, nicht purposeText(): Ein Beleg, der seinen Zahlungsgrund bisher ableitet, // soll das als Kopie weiter tun. purpose: $invoice->purpose, ); $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($newInvoice)->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); $invoiceType = InvoiceType::where('slug', $modifyData['type_internal'])->first(); $updateInvoiceRequest = new UpdateInvoiceRequest( $invoice, $modifyData['notices'], $invoiceType, $newCostUnit, $newAmount, $modifyData['purpose'] ?? null ); $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( costUnit: $invoice->costUnit()->first(), contactName: $invoice->contact_name, invoiceType: $invoice->type, totalAmount: $amountLeft->getAmount(), receiptFile: $receiptfile, isDonation: $invoice->donation, userId: $invoice->user_id, contactEmail: $invoice->contact_email, contactPhone: $invoice->contact_phone, accountOwner: $invoice->contact_bank_owner, accountIban: $invoice->contact_bank_iban, invoiceTypeExtended: $invoice->type_other, travelRoute: $invoice->travel_direction, distance: $invoice->distance, travelReason: $invoice->travel_reason, purpose: $invoice->purpose, ); $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, ]); } }