Build the stuff for incoming invoices.
This commit is contained in:
180
app/Http/Controllers/Api/IncomingController.php
Normal file
180
app/Http/Controllers/Api/IncomingController.php
Normal file
@@ -0,0 +1,180 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Incoming;
|
||||
use App\Models\Incomingitem;
|
||||
use App\Models\Incomingtax;
|
||||
use App\Models\Supplier;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
class IncomingController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index($from = null, $end = null): JsonResponse
|
||||
{
|
||||
return response()->json(Incoming::whereBetween('issue_date', [$from, $end])->with(['supplier'])->orderBy('issue_date', 'desc')->get());
|
||||
}
|
||||
|
||||
/**
|
||||
* Process an upload file for the resource.
|
||||
*/
|
||||
public function upload(Request $request): JsonResponse
|
||||
{
|
||||
$xmlString = base64_decode(preg_replace('#^data:text/\w+;base64,#i', '', $request->uploadFile));
|
||||
$reader = new \App\XmlReader($xmlString);
|
||||
$supplierData = $reader->supplier();
|
||||
$incomingData = $reader->incoming();
|
||||
$itemsData = $reader->items();
|
||||
$taxesData = $reader->taxes();
|
||||
|
||||
$supplier = Supplier::where('email', '=', $supplierData['email'])->firstOrNew($supplierData);
|
||||
$supplier->save();
|
||||
|
||||
$incomingData['supplier_id'] = $supplier->id;
|
||||
|
||||
$incoming = new Incoming($incomingData);
|
||||
$incoming->save();
|
||||
|
||||
foreach ($itemsData as $item) {
|
||||
$item['incoming_id'] = $incoming->id;
|
||||
$incomingItem = new Incomingitem($item);
|
||||
$incomingItem->save();
|
||||
}
|
||||
|
||||
foreach ($taxesData as $tax) {
|
||||
$tax['incoming_id'] = $incoming->id;
|
||||
$incomingTax = new Incomingtax($tax);
|
||||
$incomingTax->save();
|
||||
}
|
||||
|
||||
return response()->json($incoming);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(Request $request): JsonResponse
|
||||
{
|
||||
$supplierData = $request->validate([
|
||||
'supplier.name' => 'required|string',
|
||||
'supplier.registration_name' => 'nullable|string',
|
||||
'supplier.email' => 'nullable|email',
|
||||
'supplier.address' => 'nullable|string',
|
||||
'supplier.city' => 'nullable|string',
|
||||
'supplier.zip' => 'nullable|string',
|
||||
'supplier.country_code' => 'nullable|string',
|
||||
'supplier.tax_fc' => 'nullable|string',
|
||||
'supplier.tax_vat' => 'nullable|string',
|
||||
'supplier.contact_name' => 'nullable|string',
|
||||
'supplier.contact_phone' => 'nullable|string',
|
||||
'supplier.contact_email' => 'nullable|string',
|
||||
]);
|
||||
|
||||
$supplier = Supplier::where('email', '=', $supplierData['supplier']['email'])->firstOrNew($supplierData['supplier']);
|
||||
$supplier->save();
|
||||
|
||||
$incomingData = $request->validate([
|
||||
'incoming.invoice_number' => 'required|string',
|
||||
'incoming.issue_date' => 'required|date',
|
||||
'incoming.due_date' => 'nullable|date',
|
||||
'incoming.invoice_type_code' => 'required|string',
|
||||
'incoming.currency_code' => 'required|string',
|
||||
'incoming.net' => 'required|numeric',
|
||||
'incoming.gross' => 'required|numeric',
|
||||
'incoming.tax' => 'required|numeric',
|
||||
'incoming.pay_date' => 'nullable|date',
|
||||
'incoming.pay_name' => 'nullable|string',
|
||||
'incoming.pay_bic' => 'nullable|string',
|
||||
'incoming.pay_iban' => 'nullable|string',
|
||||
]);
|
||||
|
||||
$incomingData['incoming']['supplier_id'] = $supplier->id;
|
||||
$incoming = new Incoming($incomingData['incoming']);
|
||||
$incoming->save();
|
||||
|
||||
$taxesData = $request->validate([
|
||||
'taxes.*.taxable_amount' => 'required|numeric',
|
||||
'taxes.*.amount' => 'required|numeric',
|
||||
'taxes.*.percentage' => 'required|numeric',
|
||||
'taxes.*.currency' => 'required|string',
|
||||
]);
|
||||
|
||||
$incoming->taxes()->createMany($taxesData['taxes']);
|
||||
|
||||
return response()->json($supplierData['supplier']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(Request $request, Incoming $incoming): JsonResponse
|
||||
{
|
||||
$incomingData = $request->validate([
|
||||
'incoming.invoice_number' => 'required|string',
|
||||
'incoming.issue_date' => 'required|date',
|
||||
'incoming.due_date' => 'nullable|date',
|
||||
'incoming.invoice_type_code' => 'required|string',
|
||||
'incoming.currency_code' => 'required|string',
|
||||
'incoming.net' => 'required|numeric',
|
||||
'incoming.gross' => 'required|numeric',
|
||||
'incoming.tax' => 'required|numeric',
|
||||
'incoming.pay_date' => 'nullable|date',
|
||||
'incoming.pay_name' => 'nullable|string',
|
||||
'incoming.pay_bic' => 'nullable|string',
|
||||
'incoming.pay_iban' => 'nullable|string',
|
||||
]);
|
||||
|
||||
$incoming->update($incomingData['incoming']);
|
||||
|
||||
$supplierData = $request->validate([
|
||||
'supplier.name' => 'required|string',
|
||||
'supplier.registration_name' => 'nullable|string',
|
||||
'supplier.email' => 'nullable|email',
|
||||
'supplier.address' => 'nullable|string',
|
||||
'supplier.city' => 'nullable|string',
|
||||
'supplier.zip' => 'nullable|string',
|
||||
'supplier.country_code' => 'nullable|string',
|
||||
'supplier.tax_fc' => 'nullable|string',
|
||||
'supplier.tax_vat' => 'nullable|string',
|
||||
'supplier.contact_name' => 'nullable|string',
|
||||
'supplier.contact_phone' => 'nullable|string',
|
||||
'supplier.contact_email' => 'nullable|string',
|
||||
]);
|
||||
|
||||
$incoming->supplier()->update($supplierData['supplier']);
|
||||
|
||||
$itemsData = $request->validate([
|
||||
'items.*.name' => 'required|string',
|
||||
'items.*.article_number' => 'nullable|string',
|
||||
'items.*.description' => 'nullable|string',
|
||||
'items.*.amount' => 'required|numeric',
|
||||
'items.*.discount' => 'nullable|numeric',
|
||||
'items.*.tax' => 'required|numeric',
|
||||
'items.*.price' => 'required|numeric',
|
||||
'items.*.total' => 'required|numeric',
|
||||
]);
|
||||
|
||||
$incoming->items()->delete();
|
||||
|
||||
if (!empty($itemsData)) {
|
||||
$incoming->items()->createMany($itemsData['items']);
|
||||
}
|
||||
|
||||
$taxesData = $request->validate([
|
||||
'taxes.*.taxable_amount' => 'required|numeric',
|
||||
'taxes.*.amount' => 'required|numeric',
|
||||
'taxes.*.percentage' => 'required|numeric',
|
||||
'taxes.*.currency' => 'required|string',
|
||||
]);
|
||||
|
||||
$incoming->taxes()->delete();
|
||||
$incoming->taxes()->createMany($taxesData['taxes']);
|
||||
|
||||
return response()->json($incoming);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user