Optimise charge table, implemented charge recording, optimised payment recording

This commit is contained in:
Deon George
2021-10-01 14:59:04 +10:00
parent c0ad46ba65
commit 7c5369203c
17 changed files with 731 additions and 48 deletions

View File

@@ -4,8 +4,9 @@ namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Auth;
use App\Models\{Account,Payment,PaymentItem,Service,SiteDetail};
use App\Models\{Account,Charge,InvoiceItem,Payment,PaymentItem,Service,SiteDetail};
class AdminController extends Controller
{
@@ -14,6 +15,54 @@ class AdminController extends Controller
return View('a.service',['o'=>$o]);
}
public function charge_addedit(Request $request,Charge $o)
{
if ($request->post()) {
$request->validate([
'account_id' => 'required|exists:accounts,id',
'charge_date' => 'required|date',
'service_id' => 'required|exists:ab_service,id',
'quantity' => 'required|numeric|not_in:0',
'amount' => 'required|numeric|min:0.01',
'sweep_type' => 'required|numeric|in:'.implode(',',array_keys(Charge::sweep)),
'type' => 'required|numeric|in:'.implode(',',array_keys(InvoiceItem::type)),
'taxable' => 'nullable|boolean',
'description' => 'nullable|string|max:128',
]);
if (! $o->exists) {
$o->site_id = config('SITE')->site_id;
$o->user_id = Auth::id();
$o->active = TRUE;
}
$o->forceFill($request->only(['account_id','charge_date','service_id','quantity','amount','sweep_type','type','taxable','description']));
$o->save();
return redirect()->back()
->with('success','Charge recorded: '.$o->id);
}
return view('a.charge.addedit')
->with('o',$o);
}
public function charge_pending_account(Request $request,Account $o)
{
return view('a.charge.widgets.pending')
->with('list',$o->charges->where('active',TRUE)->where('processed',NULL)->except($request->exclude));
}
/**
* List unprocessed charges
*
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
*/
public function charge_unprocessed()
{
return view('a.charge.unprocessed');
}
/**
* Record payments on an account.
*
@@ -64,13 +113,13 @@ class AdminController extends Controller
$oo->invoice_id = $id;
}
$oo->alloc_amt = $amount;
$oo->alloc_amt = ($oo->invoice->due >= 0) && ($oo->invoice->due-$amount >= 0) ? $amount : 0;
$oo->site_id = config('SITE')->site_id;
$o->items()->save($oo);
}
return redirect()->back()
->with('success','Payment recorded');
->with('success','Payment recorded: '.$o->id);
}
return view('a.payment.addedit')

View File

@@ -2,7 +2,10 @@
namespace App\Http\Controllers;
use Auth;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Models\Account;
class ResellerServicesController extends Controller
{
@@ -21,6 +24,14 @@ class ResellerServicesController extends Controller
return ['data'=>Auth::user()->all_clients()->values()];
}
public function services(Request $request,Account $o)
{
return $o->services
->filter(function($item) use ($request) {
return $item->active || ($item->id == $request->include);
});
}
public function service_inactive()
{
return ['data'=>Auth::user()->all_client_service_inactive()->values()];