Separated Checkout and Payment controllers, updates to checkout and payments

This commit is contained in:
2024-08-10 10:14:47 +10:00
parent 06f25d5d4d
commit efbb3d091f
23 changed files with 512 additions and 603 deletions

View File

@@ -1,38 +1,167 @@
<!-- $o = Checkout::class -->
<!-- po=Payment::class -->
@use(Carbon\Carbon)
@use(App\Models\Account)
@use(App\Models\Checkout)
@extends('adminlte::layouts.app')
@section('htmlheader_title')
{{ $o->name ?: 'New Payment' }}
Payment
@endsection
@section('page_title')
{{ $o->name ?: 'New Payment' }}
Payment
@endsection
@section('contentheader_title')
{{ $o->name ?: 'New Payment' }}
Record Payment
@endsection
@section('contentheader_description')
@include('adminlte::widget.status')
@endsection
@section('main-content')
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header bg-dark d-flex p-0">
<ul class="nav nav-pills w-100 p-2">
<li class="nav-item"><a class="nav-link active" href="#details" data-toggle="tab">Detail</a></li>
</ul>
</div>
<div class="card card-dark">
<div class="card-body">
<form method="POST" action="{{ url('r/payment',$po?->id ?? '') }}">
@csrf
<div class="card-body">
<div class="tab-content">
<div class="tab-pane fade active show" id="details" role="tabpanel">
@include('theme.backend.adminlte.payment.widget.detail')
<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>
<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>
</div>
<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>
<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>
</div>
</div>
</form>
</div>
</div>
@endsection
<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