351 lines
12 KiB
PHP
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
|