refs #451 Bill create and edit item price mask
This commit is contained in:
		| @@ -66,16 +66,35 @@ class Bills extends Controller | ||||
|     { | ||||
|         $paid = 0; | ||||
|  | ||||
|         foreach ($bill->payments as $item) { | ||||
|             $amount = $item->amount; | ||||
|         // Get Bill Payments | ||||
|         if ($bill->payments->count()) { | ||||
|             $_currencies = Currency::enabled()->pluck('rate', 'code')->toArray(); | ||||
|  | ||||
|             if ($bill->currency_code != $item->currency_code) { | ||||
|                 $item->default_currency_code = $bill->currency_code; | ||||
|             foreach ($bill->payments as $item) { | ||||
|                 $default_amount = $item->amount; | ||||
|  | ||||
|                 $amount = $item->getDynamicConvertedAmount(); | ||||
|                 if ($bill->currency_code != $item->currency_code) { | ||||
|                     $default_amount_model = new InvoicePayment(); | ||||
|  | ||||
|                     $default_amount_model->default_currency_code = $bill->currency_code; | ||||
|                     $default_amount_model->amount = $default_amount; | ||||
|                     $default_amount_model->currency_code = $item->currency_code; | ||||
|                     $default_amount_model->currency_rate = $_currencies[$item->currency_code]; | ||||
|  | ||||
|                     $default_amount = (double) $default_amount_model->getDivideConvertedAmount(); | ||||
|                 } | ||||
|  | ||||
|                 $convert_amount = new InvoicePayment(); | ||||
|  | ||||
|                 $convert_amount->default_currency_code = $item->currency_code; | ||||
|                 $convert_amount->amount = $default_amount; | ||||
|                 $convert_amount->currency_code = $bill->currency_code; | ||||
|                 $convert_amount->currency_rate = $_currencies[$bill->currency_code]; | ||||
|  | ||||
|                 $amount = (double) $convert_amount->getDynamicConvertedAmount(); | ||||
|  | ||||
|                 $paid += $amount; | ||||
|             } | ||||
|  | ||||
|             $paid += $amount; | ||||
|         } | ||||
|  | ||||
|         $bill->paid = $paid; | ||||
| @@ -106,13 +125,15 @@ class Bills extends Controller | ||||
|  | ||||
|         $currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code'); | ||||
|  | ||||
|         $currency = Currency::where('code', '=', setting('general.default_currency'))->first(); | ||||
|  | ||||
|         $items = Item::enabled()->orderBy('name')->pluck('name', 'id'); | ||||
|  | ||||
|         $taxes = Tax::enabled()->orderBy('rate')->get()->pluck('title', 'id'); | ||||
|  | ||||
|         $categories = Category::enabled()->type('expense')->orderBy('name')->pluck('name', 'id'); | ||||
|  | ||||
|         return view('expenses.bills.create', compact('vendors', 'currencies', 'items', 'taxes', 'categories')); | ||||
|         return view('expenses.bills.create', compact('vendors', 'currencies', 'currency', 'items', 'taxes', 'categories')); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -329,13 +350,15 @@ class Bills extends Controller | ||||
|  | ||||
|         $currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code'); | ||||
|  | ||||
|         $currency = Currency::where('code', '=', $bill->currency_code)->first(); | ||||
|  | ||||
|         $items = Item::enabled()->orderBy('name')->pluck('name', 'id'); | ||||
|  | ||||
|         $taxes = Tax::enabled()->orderBy('rate')->get()->pluck('title', 'id'); | ||||
|  | ||||
|         $categories = Category::enabled()->type('expense')->orderBy('name')->pluck('name', 'id'); | ||||
|  | ||||
|         return view('expenses.bills.edit', compact('bill', 'vendors', 'currencies', 'items', 'taxes', 'categories')); | ||||
|         return view('expenses.bills.edit', compact('bill', 'vendors', 'currencies', 'currency', 'items', 'taxes', 'categories')); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -727,11 +750,19 @@ class Bills extends Controller | ||||
|  | ||||
|             $taxes = Tax::enabled()->orderBy('rate')->get()->pluck('title', 'id'); | ||||
|  | ||||
|             $currency = Currency::where('code', '=', $request['currency_code'])->first(); | ||||
|  | ||||
|             // it should be integer for amount mask | ||||
|             $currency->precision = (int) $currency->precision; | ||||
|  | ||||
|             $html = view('expenses.bills.item', compact('item_row', 'taxes'))->render(); | ||||
|  | ||||
|             return response()->json([ | ||||
|                 'success' => true, | ||||
|                 'error'   => false, | ||||
|                 'data'    => [ | ||||
|                     'currency' => $currency | ||||
|                 ], | ||||
|                 'message' => 'null', | ||||
|                 'html'    => $html, | ||||
|             ]); | ||||
| @@ -740,6 +771,7 @@ class Bills extends Controller | ||||
|         return response()->json([ | ||||
|             'success' => false, | ||||
|             'error'   => true, | ||||
|             'data'    => 'null', | ||||
|             'message' => trans('issue'), | ||||
|             'html'    => 'null', | ||||
|         ]); | ||||
|   | ||||
| @@ -371,7 +371,7 @@ class Invoices extends Controller | ||||
|  | ||||
|         $currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code'); | ||||
|  | ||||
|         $currency = Currency::where('code', '=', setting('general.default_currency'))->first(); | ||||
|         $currency = Currency::where('code', '=', $invoice->currency_code)->first(); | ||||
|  | ||||
|         $items = Item::enabled()->orderBy('name')->pluck('name', 'id'); | ||||
|  | ||||
|   | ||||
							
								
								
									
										246
									
								
								app/Http/Controllers/Modals/BillPayments.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										246
									
								
								app/Http/Controllers/Modals/BillPayments.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,246 @@ | ||||
| <?php | ||||
|  | ||||
| namespace App\Http\Controllers\Modals; | ||||
|  | ||||
| use App\Http\Controllers\Controller; | ||||
| use App\Http\Requests\Expsense\BillPayment as Request; | ||||
| use App\Models\Expense\Bill; | ||||
| use App\Models\Banking\Account; | ||||
| use App\Models\Expense\BillPayment; | ||||
| use App\Models\Expense\BillHistory; | ||||
| use App\Models\Setting\Currency; | ||||
| use App\Utilities\Modules; | ||||
| use App\Traits\Uploads; | ||||
|  | ||||
| class BillPayments extends Controller | ||||
| { | ||||
|     use Uploads; | ||||
|  | ||||
|     /** | ||||
|      * Instantiate a new controller instance. | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
|         // Add CRUD permission check | ||||
|         $this->middleware('permission:create-expenses-bills')->only(['create', 'store', 'duplicate', 'import']); | ||||
|         $this->middleware('permission:read-expenses-bills')->only(['index', 'show', 'edit', 'export']); | ||||
|         $this->middleware('permission:update-expenses-bills')->only(['update', 'enable', 'disable']); | ||||
|         $this->middleware('permission:delete-expenses-bills')->only('destroy'); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Show the form for creating a new resource. | ||||
|      * | ||||
|      * @return Response | ||||
|      */ | ||||
|     public function create(Bill $bill) | ||||
|     { | ||||
|         $accounts = Account::enabled()->orderBy('name')->pluck('name', 'id'); | ||||
|  | ||||
|         $currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray(); | ||||
|  | ||||
|         $currency = Currency::where('code', setting('general.default_currency'))->first(); | ||||
|  | ||||
|         $account_currency_code = Account::where('id', setting('general.default_account'))->pluck('currency_code')->first(); | ||||
|  | ||||
|         $payment_methods = Modules::getPaymentMethods(); | ||||
|  | ||||
|         $bill->paid = $this->getPaid($bill); | ||||
|  | ||||
|         // Get Bill Totals | ||||
|         foreach ($bill->totals as $bill_total) { | ||||
|             $bill->{$bill_total->code} = $bill_total->amount; | ||||
|         } | ||||
|  | ||||
|         $bill->grand_total = $bill->total; | ||||
|  | ||||
|         if (!empty($paid)) { | ||||
|             $bill->grand_total = $bill->total - $paid; | ||||
|         } | ||||
|  | ||||
|         $html = view('modals.bills.payment', compact('bill', 'accounts', 'account_currency_code', 'currencies', 'currency', 'payment_methods'))->render(); | ||||
|  | ||||
|         return response()->json([ | ||||
|             'success' => true, | ||||
|             'error' => false, | ||||
|             'message' => 'null', | ||||
|             'html' => $html, | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Store a newly created resource in storage. | ||||
|      * | ||||
|      * @param  Request  $request | ||||
|      * | ||||
|      * @return Response | ||||
|      */ | ||||
|     public function store(Bill $bill, Request $request) | ||||
|     { | ||||
|         // Get currency object | ||||
|         $currencies = Currency::enabled()->pluck('rate', 'code')->toArray(); | ||||
|         $currency = Currency::where('code', $request['currency_code'])->first(); | ||||
|  | ||||
|         $request['currency_code'] = $currency->code; | ||||
|         $request['currency_rate'] = $currency->rate; | ||||
|  | ||||
|         $total_amount = $bill->amount; | ||||
|  | ||||
|         $default_amount = (double) $request['amount']; | ||||
|  | ||||
|         if ($bill->currency_code != $request['currency_code']) { | ||||
|             $default_amount_model = new BillPayment(); | ||||
|  | ||||
|             $default_amount_model->default_currency_code = $bill->currency_code; | ||||
|             $default_amount_model->amount                = $default_amount; | ||||
|             $default_amount_model->currency_code         = $request['currency_code']; | ||||
|             $default_amount_model->currency_rate         = $currencies[$request['currency_code']]; | ||||
|  | ||||
|             $default_amount = (double) $default_amount_model->getDivideConvertedAmount(); | ||||
|         } | ||||
|  | ||||
|         $convert_amount = new BillPayment(); | ||||
|  | ||||
|         $convert_amount->default_currency_code = $request['currency_code']; | ||||
|         $convert_amount->amount = $default_amount; | ||||
|         $convert_amount->currency_code = $bill->currency_code; | ||||
|         $convert_amount->currency_rate = $currencies[$bill->currency_code]; | ||||
|  | ||||
|         $amount = (double) $convert_amount->getDynamicConvertedAmount(); | ||||
|  | ||||
|         if ($bill->payments()->count()) { | ||||
|             $total_amount -= $this->getPaid($bill); | ||||
|         } | ||||
|  | ||||
|         // For amount cover integer | ||||
|         $multiplier = 1; | ||||
|  | ||||
|         for ($i = 0; $i < $currency->precision; $i++) { | ||||
|             $multiplier *= 10; | ||||
|         } | ||||
|  | ||||
|         $amount_check = $amount * $multiplier; | ||||
|         $total_amount_check = $total_amount * $multiplier; | ||||
|  | ||||
|         if ($amount_check > $total_amount_check) { | ||||
|             $error_amount = $total_amount; | ||||
|  | ||||
|             if ($bill->currency_code != $request['currency_code']) { | ||||
|                 $error_amount_model = new BillPayment(); | ||||
|  | ||||
|                 $error_amount_model->default_currency_code = $request['currency_code']; | ||||
|                 $error_amount_model->amount                = $error_amount; | ||||
|                 $error_amount_model->currency_code         = $bill->currency_code; | ||||
|                 $error_amount_model->currency_rate         = $currencies[$bill->currency_code]; | ||||
|  | ||||
|                 $error_amount = (double) $error_amount_model->getDivideConvertedAmount(); | ||||
|             } | ||||
|  | ||||
|             $convert_amount = new BillPayment(); | ||||
|  | ||||
|             $convert_amount->default_currency_code = $bill->currency_code; | ||||
|             $convert_amount->amount = $error_amount; | ||||
|             $convert_amount->currency_code = $request['currency_code']; | ||||
|             $convert_amount->currency_rate = $currencies[$request['currency_code']]; | ||||
|  | ||||
|             $error_amount = (double) $convert_amount->getDynamicConvertedAmount(); | ||||
|  | ||||
|             $message = trans('messages.error.over_payment', ['amount' => money($error_amount, $request['currency_code'], true)]); | ||||
|  | ||||
|             return response()->json([ | ||||
|                 'success' => false, | ||||
|                 'error' => true, | ||||
|                 'data' => [ | ||||
|                     'amount' => $error_amount | ||||
|                 ], | ||||
|                 'message' => $message, | ||||
|                 'html' => 'null', | ||||
|             ]); | ||||
|         } elseif ($amount == $total_amount) { | ||||
|             $bill->bill_status_code = 'paid'; | ||||
|         } else { | ||||
|             $bill->bill_status_code = 'partial'; | ||||
|         } | ||||
|  | ||||
|         $bill->save(); | ||||
|  | ||||
|         $bill_payment_request = [ | ||||
|             'company_id'     => $request['company_id'], | ||||
|             'bill_id'        => $request['bill_id'], | ||||
|             'account_id'     => $request['account_id'], | ||||
|             'paid_at'        => $request['paid_at'], | ||||
|             'amount'         => $request['amount'], | ||||
|             'currency_code'  => $request['currency_code'], | ||||
|             'currency_rate'  => $request['currency_rate'], | ||||
|             'description'    => $request['description'], | ||||
|             'payment_method' => $request['payment_method'], | ||||
|             'reference'      => $request['reference'] | ||||
|         ]; | ||||
|  | ||||
|         $bill_payment = BillPayment::create($bill_payment_request); | ||||
|  | ||||
|         // Upload attachment | ||||
|         if ($request->file('attachment')) { | ||||
|             $media = $this->getMedia($request->file('attachment'), 'bills'); | ||||
|  | ||||
|             $bill_payment->attachMedia($media, 'attachment'); | ||||
|         } | ||||
|  | ||||
|         $request['status_code'] = $bill->bill_status_code; | ||||
|         $request['notify'] = 0; | ||||
|  | ||||
|         $desc_amount = money((float) $request['amount'], (string) $request['currency_code'], true)->format(); | ||||
|  | ||||
|         $request['description'] = $desc_amount . ' ' . trans_choice('general.payments', 1); | ||||
|  | ||||
|         BillHistory::create($request->input()); | ||||
|  | ||||
|         $message = trans('messages.success.added', ['type' => trans_choice('general.payments', 1)]); | ||||
|  | ||||
|         return response()->json([ | ||||
|             'success' => true, | ||||
|             'error' => false, | ||||
|             'data' => $bill_payment, | ||||
|             'message' => $message, | ||||
|             'html' => 'null', | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     protected function getPaid($bill) | ||||
|     { | ||||
|         $paid = 0; | ||||
|  | ||||
|         // Get Bill Payments | ||||
|         if ($bill->payments->count()) { | ||||
|             $_currencies = Currency::enabled()->pluck('rate', 'code')->toArray(); | ||||
|  | ||||
|             foreach ($bill->payments as $item) { | ||||
|                 $default_amount = $item->amount; | ||||
|  | ||||
|                 if ($bill->currency_code != $item->currency_code) { | ||||
|                     $default_amount_model = new BillPayment(); | ||||
|  | ||||
|                     $default_amount_model->default_currency_code = $bill->currency_code; | ||||
|                     $default_amount_model->amount = $default_amount; | ||||
|                     $default_amount_model->currency_code = $item->currency_code; | ||||
|                     $default_amount_model->currency_rate = $_currencies[$item->currency_code]; | ||||
|  | ||||
|                     $default_amount = (double) $default_amount_model->getDivideConvertedAmount(); | ||||
|                 } | ||||
|  | ||||
|                 $convert_amount = new BillPayment(); | ||||
|  | ||||
|                 $convert_amount->default_currency_code = $item->currency_code; | ||||
|                 $convert_amount->amount = $default_amount; | ||||
|                 $convert_amount->currency_code = $bill->currency_code; | ||||
|                 $convert_amount->currency_rate = $_currencies[$bill->currency_code]; | ||||
|  | ||||
|                 $amount = (double) $convert_amount->getDynamicConvertedAmount(); | ||||
|  | ||||
|                 $paid += $amount; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         return $paid; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user