regularInvoices), 200 ); } /** * @return mixed */ public function get_all_advance_invoices() { return response( new OasisInvoiceCollection(Auth::user()->advanceInvoices), 200 ); } /** * @return mixed */ public function search() { $query = remove_accents(request()->input('query')); $results = Invoice::search($query) ->where('user_id', request()->user()->id) ->where('invoice_type', request()->input('type')) ->get(); return response( new OasisInvoiceCollection($results), 200 ); } /** * Store and generate new invoice * * @param StoreInvoiceRequest $request * @return Application|ResponseFactory|Response */ public function store(StoreInvoiceRequest $request) { $client = $this->getOrStoreClient($request); $invoice = Invoice::create([ 'user_id' => $request->user()->id, 'client_id' => $client->id ?? null, 'invoice_type' => $request->invoice_type, 'invoice_number' => $request->invoice_number, 'variable_number' => $request->variable_number, 'delivery_at' => $request->delivery_at, 'discount_type' => $request->discount_type ?? null, 'discount_rate' => $request->discount_rate ?? null, 'items' => $request->items, 'client' => [ 'email' => $client->email ?? $request->client_email, 'name' => $client->name ?? $request->client_name, 'address' => $client->address ?? $request->client_address, 'city' => $client->city ?? $request->client_city, 'postal_code' => $client->postal_code ?? $request->client_postal_code, 'country' => $client->country ?? $request->client_country, 'ico' => $client->ico ?? $request->client_ico, 'dic' => $client->dic ?? $request->client_dic ?? null, 'ic_dph' => $client->ic_dph ?? $request->client_ic_dph ?? null, ], ]); \PDF::loadView('oasis.invoices.invoice', [ 'invoice' => Invoice::find($invoice->id), 'user' => $request->user(), ]) ->save(storage_path() . "/app/faktura-{$invoice->id}.pdf"); if ($request->send_invoice && $invoice->client['email']) { Notification::route('mail', $invoice->client['email']) ->notify(new InvoiceDeliveryNotification($request->user())); } return response( new OasisInvoiceResource($invoice), 201 ); } /** * @param StoreInvoiceRequest $request * @return mixed */ private function getOrStoreClient(StoreInvoiceRequest $request) { if (!Str::isUuid($request->client) && $request->store_client) { return $request->user() ->clients() ->create([ 'avatar' => store_avatar($request, 'client_avatar') ?? null, 'name' => $request->client_name, 'email' => $request->client_email ?? null, 'phone_number' => $request->client_phone_number ?? null, 'address' => $request->client_address, 'city' => $request->client_city, 'postal_code' => $request->client_postal_code, 'country' => $request->client_country, 'ico' => $request->client_ico ?? null, 'dic' => $request->client_dic ?? null, 'ic_dph' => $request->client_ic_dph ?? null, ]); } return Client::whereUserId($request->user()->id) ->whereId($request->client) ->first(); } }