'incoming_from'], ['value' => $from]); Option::updateOrCreate(['name' => 'incoming_end'], ['value' => $end]); 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); } }