osb/resources/views/theme/backend/adminlte/a/charge/addedit.blade.php
2022-06-13 14:36:12 +10:00

351 lines
12 KiB
PHP

@extends('adminlte::layouts.app')
@section('htmlheader_title')
Charge {{ $o->id ? '#'. $o->id : '' }}
@endsection
@section('page_title')
Charge
@endsection
@section('contentheader_title')
Record Charge
@endsection
@section('contentheader_description')
@endsection
@section('main-content')
<div class="row">
<div class="col-6">
<div class="card card-dark">
<div class="card-header">
<h1 class="card-title">Record Charge {{ $o->id ? '#'. $o->id : '' }}</h1>
@if(session()->has('success'))
<span class="ml-3 pt-0 pb-0 pr-1 pl-1 btn btn-outline-success"><small>{{ session()->get('success') }}</small></span>
@endif
</div>
<div class="card-body">
<form class="g-0 needs-validation" method="POST" role="form">
@csrf
<div class="row">
<!-- DATE CHARGE -->
<div class="col-4">
<div class="form-group has-validation">
<label for="charge_at">Date Charge</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-fw fa-calendar"></i></span>
</div>
<input type="date" class="form-control @error('charge_at') is-invalid @enderror" id="charge_at" name="charge_at" value="{{ old('charge_at',($o->exists ? $o->charge_at : \Carbon\Carbon::now())->format('Y-m-d')) }}" required>
<span class="invalid-feedback" role="alert">
@error('charge_at')
{{ $message }}
@else
Charge Date is required.
@enderror
</span>
</div>
<span class="input-helper">Date of Charge</span>
</div>
</div>
<!-- QUANTITY -->
<div class="offset-6 col-2">
<div class="form-group has-validation">
<label class="float-right" for="quantity">Quantity</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-fw fa-hashtag"></i></span>
</div>
<input type="text" class="text-right form-control @error('quantity') is-invalid @enderror" id="quantity" name="quantity" value="{{ old('quantity',$o->exists ? $o->quantity : 1) }}" required>
<span class="invalid-feedback" role="alert">
@error('quantity')
{{ $message }}
@else
Quantity is required.
@enderror
</span>
</div>
</div>
</div>
</div>
<div class="row">
<!-- ACCOUNTS -->
<div class="col-4">
<div class="form-group has-validation">
<label for="account_id">Account</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-fw fa-user"></i></span>
</div>
<select class="form-control @error('account_id') is-invalid @enderror" id="account_id" name="account_id" required>
<option value=""></option>
@foreach (\App\Models\Account::active()->with(['user'])->get()->sortBy('name') as $ao)
<option value="{{ $ao->id }}" {{ $ao->id == old('account_id',$o->exists ? $o->account_id : NULL) ? 'selected' : '' }}>{{ $ao->name }}</option>
@endforeach
</select>
<span class="invalid-feedback" role="alert">
@error('account_id')
{{ $message }}
@else
Account is required.
@enderror
</span>
</div>
<span class="input-helper">Account to add charge to.</span>
</div>
</div>
<!-- SWEEP TYPE -->
<div class="offset-1 col-4">
<div class="form-group has-validation">
<label for="sweep_type">Sweep</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-fw fa-dollar-sign"></i></span>
</div>
<select class="form-control @error('sweep_type') is-invalid @enderror" id="sweep_type" name="sweep_type" required>
@foreach (\App\Models\Charge::sweep as $k=>$v)
<option value="{{ $k }}" {{ $k == old('sweep_type',$o->exists ? $o->sweep_type : NULL) ? 'selected' : '' }}>{{ $v }}</option>
@endforeach
</select>
<span class="invalid-feedback" role="alert">
@error('sweep_type')
{{ $message }}
@else
Sweep Type is required.
@enderror
</span>
</div>
<span class="input-helper">When to add the charge to an invoice.</span>
</div>
</div>
<!-- TAXABLE -->
<div class="col-1">
<div class="form-check has-validation">
<label for="taxable">Taxable</label>
<div class="form-check text-right">
<input type="checkbox" class="form-check-input @error('taxable') is-invalid @enderror" id="taxable" name="taxable" value="1" {{ old('taxable',$o->exists ? $o->taxable : 1) ? 'checked' : '' }}>
</div>
</div>
</div>
<!-- AMOUNT -->
<div class="col-2">
<div class="form-group has-validation">
<label class="float-right" for="amount">Amount</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-fw fa-dollar-sign"></i></span>
</div>
<input type="text" class="text-right form-control @error('amount') is-invalid @enderror" id="amount" name="amount" value="{{ number_format(old('amount',$o->exists ? $o->amount : 0),2) }}">
<span class="invalid-feedback" role="alert">
@error('amount')
{{ $message }}
@else
Amount is required.
@enderror
</span>
</div>
<span class="input-helper">Amount (ex Tax).</span>
</div>
</div>
</div>
<div class="row">
<!-- SERVICES -->
<div class="col-4">
<div class="form-group has-validation">
<label for="service_id">Services</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-fw fa-bolt"></i></span>
</div>
<select class="form-control @error('service_id') is-invalid @enderror" id="service_id" name="service_id" required>
</select>
<span class="ml-2 pt-2"><i class="fas fa-spinner d-none"></i></span>
<span class="invalid-feedback" role="alert">
@error('service_id')
{{ $message }}
@else
Service is required.
@enderror
</span>
</div>
{{--
<!-- @todo -->
<span class="input-helper"><sup>**</sup>Service inactive.</span>
--}}
</div>
</div>
<!-- CHARGE TYPE -->
<div class="offset-1 col-4">
<div class="form-group has-validation">
<label for="type">Type</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-fw fa-dollar-sign"></i></span>
</div>
<select class="form-control @error('type') is-invalid @enderror" id="type" name="type" required>
@foreach (collect(\App\Models\InvoiceItem::type)->sort() as $k=>$v)
<option value="{{ $k }}" {{ $k == old('type',$o->exists ? $o->type : NULL) ? 'selected' : '' }}>{{ $v }}</option>
@endforeach
</select>
<span class="invalid-feedback" role="alert">
@error('type')
{{ $message }}
@else
Type is required.
@enderror
</span>
</div>
<span class="input-helper">Charge type.</span>
</div>
</div>
<!-- TOTAL -->
<div class="offset-1 col-2">
<label class="float-right" for="fees_amt">Total</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-fw fa-dollar-sign"></i></span>
</div>
<input type="text" class="text-right form-control" id="total" value="{{ number_format($o->exists ? $o->quantity*$o->amount : 0,2) }}" disabled>
</div>
<span class="input-helper">Total (ex Tax).</span>
</div>
</div>
<div class="row">
<!-- DESCRIPTION -->
<div class="col-12">
<div class="form-group has-validation">
<label for="description">Description</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-fw fa-file-alt"></i></span>
</div>
<input type="text" class="form-control @error('description') is-invalid @enderror" id="description" name="description" value="{{ old('description',$o->exists ? $o->description : '') }}">
<span class="invalid-feedback" role="alert">
@error('description')
{{ $message }}
@enderror
</span>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<a href="{{ url('/home') }}" class="btn btn-danger">Cancel</a>
@can('wholesaler')
<button type="submit" name="submit" class="btn btn-success mr-0 float-right">@if ($site->exists)Save @else Add @endif</button>
@endcan
</div>
</div>
</form>
</div>
</div>
</div>
<div class="col-5">
<div id="pending"></div>
</div>
</div>
@endsection
@section('page-scripts')
@css(select2)
@js(select2,autofocus)
<script type="text/javascript">
function populate(account,spinner) {
spinner.toggleClass('d-none').toggleClass('fa-spin');
$.ajax({
type: 'GET',
dataType: 'json',
cache: false,
url: '{{ url('api/r/services') }}'+'/'+account,
data: {include: {{ $o->service_id ?: 'null' }} },
timeout: 2000,
error: function(x) {
spinner.toggleClass('d-none').toggleClass('fa-spin');
alert('Failed to submit');
},
success: function(data) {
$("select[name=service_id]").empty();
$.each(data,function(i,j) {
var row = '<option value="' + j.id + '" '+(j.id == {{ $o->service_id ?: 'null' }} ? 'selected' : '')+'>' + j.id + ': ' + j.category_name + ' ' + j.name_short + ((! j.active) ? ' **' : '') +'</option>';
$(row).appendTo("select[name=service_id]");
});
spinner.toggleClass('d-none').toggleClass('fa-spin');
}
});
$.ajax({
type: 'GET',
dataType: 'html',
data: {exclude: {{ $o->id ?: 'null' }}},
cache: false,
url: '{{ url('r/charges') }}'+'/'+account,
timeout: 2000,
error: function(x) {
spinner.toggleClass('d-none').toggleClass('fa-spin');
alert('Failed to submit');
},
success: function(data) {
$("div[id=pending]").empty().append(data);
}
});
}
function total() {
$('#total').val(($('#quantity').val()*$('#amount').val()).toFixed(2));
}
$(document).ready(function() {
var spinner = $('#service_id').parent().find('i.fas.fa-spinner');
if ($('#account_id').val()) {
populate($('#account_id').val(),spinner);
}
$('#account_id').select2({
sorter: data => data.sort((a, b) => a.text.localeCompare(b.text)),
})
.on('change',function(e) {
$("select[id=service_id]").empty();
if (! $(this).val()) {
return;
}
populate($(this).val(),spinner);
});
$('#service_id').select2();
$('#sweep_type').select2();
$('#type').select2();
if ($('#quantity').val() && $('#amount').val()) {
total();
}
$('#quantity').on('change',total);
$('#amount').on('change',total);
});
</script>
@append