2024-08-10 00:14:47 +00:00
<!-- po = Payment :: class -->
@ use ( Carbon\Carbon )
@ use ( App\Models\Account )
@ use ( App\Models\Checkout )
2022-07-29 06:06:19 +00:00
@ extends ( 'adminlte::layouts.app' )
@ section ( 'htmlheader_title' )
2024-08-10 00:14:47 +00:00
Payment
2022-07-29 06:06:19 +00:00
@ endsection
@ section ( 'page_title' )
2024-08-10 00:14:47 +00:00
Payment
2022-07-29 06:06:19 +00:00
@ endsection
@ section ( 'contentheader_title' )
2024-08-10 00:14:47 +00:00
Record Payment
2022-07-29 06:06:19 +00:00
@ endsection
@ section ( 'contentheader_description' )
@ endsection
@ section ( 'main-content' )
2024-08-10 00:14:47 +00:00
< div class = " card card-dark " >
< div class = " card-body " >
< form method = " POST " action = " { { url('r/payment', $po ?->id ?? '') }} " >
@ csrf
< x - leenooks :: button . success class = " float-right " row = " true " />
< div class = " row " >
< div class = " col-12 col-sm-6 col-lg-3 " >
< div class = " row " >
< div class = " col-12 col-md-9 col-lg-12 " >
<!-- Account -->
<!-- @ todo Only show active accounts or accounts with outstanding invoices -->
< x - leenooks :: form . select name = " account_id " icon = " fa-user " label = " Account " feedback = " Sweep Type is required " helper = " Account to add payment to. " : options = " Account::active()->with(['user'])->get()->sortBy('name')->map(fn( $item , $key )=>['id'=> $item->id ,'value'=> $item->name ]) " : value = " $po ?->account_id ?? '' " />
</ div >
</ div >
< div class = " row " >
< div class = " col-12 col-md-9 col-lg-12 " >
<!-- Received -->
< x - leenooks :: form . date name = " paid_at " icon = " fa-calendar " label = " Date Received " feedback = " Payment Date is required " helper = " Date payment received " : value = " ( $po ?->paid_at ?? Carbon::now())->format('Y-m-d') " />
</ div >
</ div >
<!-- METHOD -->
< div class = " row " >
< div class = " col-12 col-md-9 col-lg-12 " >
< x - leenooks :: form . select name = " checkout_id " icon = " fa-dollar-sign " label = " Payment Method " : options = " Checkout::orderBy('name')->get()->map(fn( $item , $key )=>['id'=> $item->id ,'value'=> $item->name ]) " : value = " $po ?->checkout_id ?? '' " />
</ div >
</ div >
</ div >
2022-07-29 06:06:19 +00:00
2024-08-10 00:14:47 +00:00
< div class = " col-12 col-sm-6 col-log-3 " >
< div class = " row " >
< div class = " col-12 col-md-6 " >
<!-- Amount -->
< x - leenooks :: form . text class = " text-right " id = " total_amt " name = " total_amt " icon = " fa-dollar-sign " label = " Amount " helper = " Amount received " : value = " $po ?->total_amt ?? 0 " />
</ div >
2022-07-29 06:06:19 +00:00
</ div >
2024-08-10 00:14:47 +00:00
< div class = " row " >
< div class = " col-12 col-md-6 " >
<!-- Payment Fee -->
< x - leenooks :: form . text class = " text-right " id = " fees_amt " name = " fees_amt " icon = " fa-dollar-sign " label = " Fee " helper = " Payment fees " : value = " $po ?->fees_amt ?? '' " />
</ div >
</ div >
< div class = " row " >
< div class = " col-12 col-md-6 " >
<!-- Balance -->
< x - leenooks :: form . text class = " text-right " id = " balance " name = " balance " icon = " fa-dollar-sign " label = " Balance " helper = " Payment unallocated " : value = " $po ?->total ?? 0 " disabled />
</ div >
</ div >
</ div >
</ div >
< div class = " row mt-3 mb-3 " >
< div class = " col-12 " >
< div id = " invoices " ></ div >
@ error ( 'invoices' )
< span class = " invalid-feedback d-block mt-2 mb-2 " >
{{ $message }}
</ span >
@ enderror
</ div >
</ div >
< div class = " row " >
<!-- Buttons -->
< div class = " col " >
< x - leenooks :: button . cancel />
< x - leenooks :: button . submit class = " float-right " >@ if ( $po ? -> exists ? ? FALSE ) Update @ else Add @ endif </ x - leenooks :: button . submit >
2022-07-29 06:06:19 +00:00
</ div >
</ div >
2024-08-10 00:14:47 +00:00
</ form >
2022-07-29 06:06:19 +00:00
</ div >
</ div >
2024-08-10 00:14:47 +00:00
< x - leenooks :: errors />
@ endsection
@ section ( 'page-scripts' )
< script type = " text/javascript " >
function populate ( account , spinner ) {
spinner . toggleClass ( 'd-none' ) . toggleClass ( 'fa-spin' );
$ . ajax ({
type : 'POST' ,
dataType : 'html' ,
cache : false ,
url : '{{ url(' r / account / invoices ') }}' ,
data : {
aid : account ,
pid : {{ $po ? -> id ? ? 'null' }},
errors : { !! $errors !! },
old : { !! json_encode ( old ()) !! }
},
timeout : 2000 ,
error : function ( x ) {
spinner . toggleClass ( 'd-none' ) . toggleClass ( 'fa-spin' );
alert ( 'Failed to submit' );
},
success : function ( data ) {
spinner . toggleClass ( 'd-none' ) . toggleClass ( 'fa-spin' );
$ ( " div[id=invoices] " ) . empty () . append ( data );
}
});
}
function balance () {
var alloc = 0 ;
$ ( 'input[id^=invoices_]' ) . each ( function () {
alloc += parseFloat ( $ ( this ) . val ());
})
$ ( '#balance' ) . val (( $ ( '#total_amt' ) . val () - alloc ) . toFixed ( 2 ))
}
$ ( document ) . ready ( function () {
if ( $ ( '#account_id' ) . val ()) {
var spinner = $ ( '#account_id' ) . parent () . parent () . find ( 'i.fas.fa-spinner' );
populate ( $ ( '#account_id' ) . val (), spinner );
}
$ ( '#account_id' ) . select2 ({
sorter : data => data . sort (( a , b ) => a . text . localeCompare ( b . text )),
})
. on ( 'change' , function ( e ) {
if ( ! $ ( this ) . val ()) {
$ ( " div[id=invoices] " ) . empty ();
return ;
}
var spinner = $ ( this ) . parent () . parent () . find ( 'i.fas.fa-spinner' );
populate ( $ ( this ) . val (), spinner );
});
$ ( '#total_amt' ) . on ( 'change' , balance );
});
$ ( document ) . on ( 'change' , 'input[id^=invoices_]' , balance );
</ script >
@ append