diff --git a/app/Http/Controllers/Api/Incomes/InvoicePayments.php b/app/Http/Controllers/Api/Incomes/InvoicePayments.php new file mode 100644 index 000000000..9b4fc53a6 --- /dev/null +++ b/app/Http/Controllers/Api/Incomes/InvoicePayments.php @@ -0,0 +1,130 @@ +get(); + + return $this->response->collection($invoice_payments, new Transformer()); + } + + /** + * Display the specified resource. + * + * @param $invoice_id + * @param $id + * @return \Dingo\Api\Http\Response + */ + public function show($invoice_id, $id) + { + $invoice_payment = InvoicePayment::find($id); + + return $this->response->item($invoice_payment, new Transformer()); + } + + /** + * Store a newly created resource in storage. + * + * @param $invoice_id + * @param $request + * @return \Dingo\Api\Http\Response + */ + public function store($invoice_id, Request $request) + { + // Get currency object + $currency = Currency::where('code', $request['currency_code'])->first(); + + $request['currency_code'] = $currency->code; + $request['currency_rate'] = $currency->rate; + + $request['invoice_id'] = $invoice_id; + + $invoice = Invoice::find($invoice_id); + + if ($request['currency_code'] == $invoice->currency_code) { + if ($request['amount'] > $invoice->amount) { + $message = trans('messages.error.added', ['type' => trans_choice('general.payment', 1)]); + + return response()->json($message); + } elseif ($request['amount'] == $invoice->amount) { + $invoice->invoice_status_code = 'paid'; + } else { + $invoice->invoice_status_code = 'partial'; + } + } else { + $request_invoice = new Invoice(); + + $request_invoice->amount = (float) $request['amount']; + $request_invoice->currency_code = $currency->code; + $request_invoice->currency_rate = $currency->rate; + + $amount = $request_invoice->getConvertedAmount(); + + if ($amount > $invoice->amount) { + $message = trans('messages.error.added', ['type' => trans_choice('general.payment', 1)]); + + return response()->json($message); + } elseif ($amount == $invoice->amount) { + $invoice->invoice_status_code = 'paid'; + } else { + $invoice->invoice_status_code = 'partial'; + } + } + + $invoice->save(); + + $invoice_payment = InvoicePayment::create($request->input()); + + $request['status_code'] = $invoice->invoice_status_code; + $request['notify'] = 0; + + $desc_date = Date::parse($request['paid_at'])->format($this->getCompanyDateFormat()); + $desc_amount = money((float) $request['amount'], $request['currency_code'], true)->format(); + $request['description'] = $desc_date . ' ' . $desc_amount; + + InvoiceHistory::create($request->input()); + + return $this->response->created(url('api/invoices/' . $invoice_id . '/payments' . $invoice_payment->id)); + } + + /** + * Remove the specified resource from storage. + * + * @param $invoice_id + * @param $id + * @return \Dingo\Api\Http\Response + */ + public function destroy($invoice_id, $id) + { + $invoice_payment = InvoicePayment::find($id); + + $invoice_payment->delete(); + + return $this->response->noContent(); + } +} diff --git a/routes/api.php b/routes/api.php index d7fe9fd65..d2a7e6dd2 100644 --- a/routes/api.php +++ b/routes/api.php @@ -13,6 +13,7 @@ $api->version('v1', ['middleware' => ['api.auth', 'api.company', 'throttle:60,1' // Incomes $api->resource('customers', 'Incomes\Customers'); $api->resource('invoices', 'Incomes\Invoices'); + $api->resource('invoices.payments', 'Incomes\InvoicePayments'); $api->resource('revenues', 'Incomes\Revenues'); // Expenses