close #129 Fixed: Invoice not marked automatically as paid, same modify Bill.
This commit is contained in:
parent
098ed4b26a
commit
7f40a5857f
@ -603,17 +603,11 @@ class Bills extends Controller
|
||||
|
||||
$bill = Bill::find($request['bill_id']);
|
||||
|
||||
if ($request['currency_code'] == $bill->currency_code) {
|
||||
if ($request['amount'] > $bill->amount) {
|
||||
$message = trans('messages.error.added', ['type' => trans_choice('general.payment', 1)]);
|
||||
$total_amount = $bill->amount;
|
||||
|
||||
return response()->json($message);
|
||||
} elseif ($request['amount'] == $bill->amount) {
|
||||
$bill->bill_status_code = 'paid';
|
||||
} else {
|
||||
$bill->bill_status_code = 'partial';
|
||||
}
|
||||
} else {
|
||||
$amount = (double) $request['amount'];
|
||||
|
||||
if ($request['currency_code'] != $bill->currency_code) {
|
||||
$request_bill = new Bill();
|
||||
|
||||
$request_bill->amount = (float) $request['amount'];
|
||||
@ -621,16 +615,24 @@ class Bills extends Controller
|
||||
$request_bill->currency_rate = $currency->rate;
|
||||
|
||||
$amount = $request_bill->getConvertedAmount();
|
||||
}
|
||||
|
||||
if ($amount > $bill->amount) {
|
||||
$message = trans('messages.error.added', ['type' => trans_choice('general.payment', 1)]);
|
||||
if ($bill->payments()->count()) {
|
||||
$total_amount -= $bill->payments()->paid();
|
||||
}
|
||||
|
||||
return response()->json($message);
|
||||
} elseif ($amount == $bill->amount) {
|
||||
$bill->bill_status_code = 'paid';
|
||||
} else {
|
||||
$bill->bill_status_code = 'partial';
|
||||
}
|
||||
if ($amount > $total_amount) {
|
||||
$message = trans('messages.error.payment_add');
|
||||
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'error' => true,
|
||||
'message' => $message,
|
||||
]);
|
||||
} elseif ($amount == $total_amount) {
|
||||
$bill->bill_status_code = 'paid';
|
||||
} else {
|
||||
$bill->bill_status_code = 'partial';
|
||||
}
|
||||
|
||||
$bill->save();
|
||||
@ -642,13 +644,18 @@ class Bills extends Controller
|
||||
|
||||
$desc_date = Date::parse($request['paid_at'])->format($this->getCompanyDateFormat());
|
||||
$desc_amount = money((float) $request['amount'], $request['currency_code'], true)->format();
|
||||
|
||||
$request['description'] = $desc_date . ' ' . $desc_amount;
|
||||
|
||||
BillHistory::create($request->input());
|
||||
|
||||
$message = trans('messages.success.added', ['type' => trans_choice('general.revenues', 1)]);
|
||||
|
||||
return response()->json($message);
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'error' => false,
|
||||
'message' => $message,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -660,12 +667,22 @@ class Bills extends Controller
|
||||
*/
|
||||
public function paymentDestroy(BillPayment $payment)
|
||||
{
|
||||
$bill = Bill::find($payment->bill_id);
|
||||
|
||||
if ($bill->payments()->count() > 1) {
|
||||
$bill->bill_status_code = 'partial';
|
||||
} else {
|
||||
$bill->bill_status_code = 'draft';
|
||||
}
|
||||
|
||||
$bill->save();
|
||||
|
||||
$payment->delete();
|
||||
|
||||
$message = trans('messages.success.deleted', ['type' => trans_choice('general.bills', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
|
||||
return redirect('expenses/bills');
|
||||
return redirect()->back();
|
||||
}
|
||||
}
|
||||
|
@ -616,17 +616,11 @@ class Invoices extends Controller
|
||||
|
||||
$invoice = Invoice::find($request['invoice_id']);
|
||||
|
||||
if ($request['currency_code'] == $invoice->currency_code) {
|
||||
if ($request['amount'] > $invoice->amount) {
|
||||
$message = trans('messages.error.added', ['type' => trans_choice('general.payment', 1)]);
|
||||
$total_amount = $invoice->amount;
|
||||
|
||||
return response()->json($message);
|
||||
} elseif ($request['amount'] == $invoice->amount) {
|
||||
$invoice->invoice_status_code = 'paid';
|
||||
} else {
|
||||
$invoice->invoice_status_code = 'partial';
|
||||
}
|
||||
} else {
|
||||
$amount = (double) $request['amount'];
|
||||
|
||||
if ($request['currency_code'] != $invoice->currency_code) {
|
||||
$request_invoice = new Invoice();
|
||||
|
||||
$request_invoice->amount = (float) $request['amount'];
|
||||
@ -634,16 +628,24 @@ class Invoices extends Controller
|
||||
$request_invoice->currency_rate = $currency->rate;
|
||||
|
||||
$amount = $request_invoice->getConvertedAmount();
|
||||
}
|
||||
|
||||
if ($amount > $invoice->amount) {
|
||||
$message = trans('messages.error.added', ['type' => trans_choice('general.payment', 1)]);
|
||||
if ($invoice->payments()->count()) {
|
||||
$total_amount -= $invoice->payments()->paid();
|
||||
}
|
||||
|
||||
return response()->json($message);
|
||||
} elseif ($amount == $invoice->amount) {
|
||||
$invoice->invoice_status_code = 'paid';
|
||||
} else {
|
||||
$invoice->invoice_status_code = 'partial';
|
||||
}
|
||||
if ($amount > $total_amount) {
|
||||
$message = trans('messages.error.payment_add');
|
||||
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'error' => true,
|
||||
'message' => $message,
|
||||
]);
|
||||
} elseif ($amount == $total_amount) {
|
||||
$invoice->invoice_status_code = 'paid';
|
||||
} else {
|
||||
$invoice->invoice_status_code = 'partial';
|
||||
}
|
||||
|
||||
$invoice->save();
|
||||
@ -655,13 +657,18 @@ class Invoices extends Controller
|
||||
|
||||
$desc_date = Date::parse($request['paid_at'])->format($this->getCompanyDateFormat());
|
||||
$desc_amount = money((float) $request['amount'], $request['currency_code'], true)->format();
|
||||
|
||||
$request['description'] = $desc_date . ' ' . $desc_amount;
|
||||
|
||||
InvoiceHistory::create($request->input());
|
||||
|
||||
$message = trans('messages.success.added', ['type' => trans_choice('general.revenues', 1)]);
|
||||
|
||||
return response()->json($message);
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'error' => false,
|
||||
'message' => $message,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -673,13 +680,23 @@ class Invoices extends Controller
|
||||
*/
|
||||
public function paymentDestroy(InvoicePayment $payment)
|
||||
{
|
||||
$invoice = Invoice::find($payment->invoice_id);
|
||||
|
||||
if ($invoice->payments()->count() > 1) {
|
||||
$invoice->invoice_status_code = 'partial';
|
||||
} else {
|
||||
$invoice->invoice_status_code = 'draft';
|
||||
}
|
||||
|
||||
$invoice->save();
|
||||
|
||||
$payment->delete();
|
||||
|
||||
$message = trans('messages.success.deleted', ['type' => trans_choice('general.invoices', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
|
||||
return redirect('incomes/invoices');
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
protected function prepareInvoice(Invoice $invoice)
|
||||
|
@ -67,4 +67,15 @@ class BillPayment extends Model
|
||||
{
|
||||
$this->attributes['currency_rate'] = (double) $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Scope paid invoice.
|
||||
*
|
||||
* @param \Illuminate\Database\Eloquent\Builder $query
|
||||
* @return \Illuminate\Database\Eloquent\Builder
|
||||
*/
|
||||
public function scopePaid($query)
|
||||
{
|
||||
return $query->sum('amount');
|
||||
}
|
||||
}
|
||||
|
@ -67,4 +67,15 @@ class InvoicePayment extends Model
|
||||
{
|
||||
$this->attributes['currency_rate'] = (double) $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Scope paid invoice.
|
||||
*
|
||||
* @param \Illuminate\Database\Eloquent\Builder $query
|
||||
* @return \Illuminate\Database\Eloquent\Builder
|
||||
*/
|
||||
public function scopePaid($query)
|
||||
{
|
||||
return $query->sum('amount');
|
||||
}
|
||||
}
|
||||
|
@ -10,6 +10,7 @@ return [
|
||||
'imported' => ':type imported!',
|
||||
],
|
||||
'error' => [
|
||||
'payment_add' => 'Error: You can not add payment! You should check add amount.',
|
||||
'not_user_company' => 'Error: You are not allowed to manage this company!',
|
||||
'customer' => 'Error: You can not created user! :name use this email address.',
|
||||
'no_file' => 'Error: No file selected!',
|
||||
|
@ -153,11 +153,13 @@
|
||||
<div class="btn-group dropup">
|
||||
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-expanded="false"><i class="fa fa-chevron-circle-up"></i> {{ trans('general.more_actions') }}</button>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
@if($bill->status->code != 'paid')
|
||||
<li><a href="#" id="button-payment">{{ trans('bills.add_payment') }}</a></li>
|
||||
@permission('update-expenses-bills')
|
||||
<li><a href="{{ url('expenses/bills/' . $bill->id . '/received') }}">{{ trans('bills.mark_received') }}</a></li>
|
||||
@endpermission
|
||||
<li class="divider"></li>
|
||||
@endif
|
||||
<li><a href="{{ url('expenses/bills/' . $bill->id . '/pdf') }}">{{ trans('bills.download_pdf') }}</a></li>
|
||||
<li class="divider"></li>
|
||||
@permission('delete-expenses-bills')
|
||||
@ -287,6 +289,7 @@
|
||||
html += ' <h4 class="modal-title" id="paymentModalLabel">{{ trans('bills.add_payment') }}</h4>';
|
||||
html += ' </div>';
|
||||
html += ' <div class="modal-body box-body">';
|
||||
html += ' <div class="modal-message"></div>';
|
||||
html += ' <div class="form-group col-md-6 required">';
|
||||
html += ' {!! Form::label('paid_at', trans('general.date'), ['class' => 'control-label']) !!}';
|
||||
html += ' <div class="input-group">';
|
||||
@ -336,9 +339,9 @@
|
||||
html += ' </div>';
|
||||
html += ' {!! Form::hidden('bill_id', $bill->id, ['id' => 'bill_id', 'class' => 'form-control', 'required' => 'required']) !!}';
|
||||
html += ' </div>';
|
||||
html += ' <div class="modal-footer">';
|
||||
html += ' <button type="button" class="btn btn-default" data-dismiss="modal">{{ trans('general.cancel') }}</button>';
|
||||
html += ' <div class="modal-footer" style="text-align: left;">';
|
||||
html += ' <button type="button" onclick="addPayment();" class="btn btn-success">{{ trans('general.save') }}</button>';
|
||||
html += ' <button type="button" class="btn btn-default" data-dismiss="modal">{{ trans('general.cancel') }}</button>';
|
||||
html += ' </div>';
|
||||
html += ' </div>';
|
||||
html += ' </div>';
|
||||
@ -417,10 +420,22 @@
|
||||
complete: function() {
|
||||
$('#loading').remove();
|
||||
},
|
||||
success: function(data) {
|
||||
$("#payment-modal").modal('hide');
|
||||
success: function(json) {
|
||||
if (json['error']) {
|
||||
$('#payment-modal .modal-message').append('<div class="alert alert-danger">' + json['message'] + '</div>');
|
||||
$('div.alert-danger').delay(3000).fadeOut(350);
|
||||
}
|
||||
|
||||
location.reload();
|
||||
if (json['success']) {
|
||||
$('#payment-modal .modal-message').before('<div class="alert alert-success">' + json['message'] + '</div>');
|
||||
$('div.alert-success').delay(3000).fadeOut(350);
|
||||
|
||||
setTimeout(function(){
|
||||
$("#payment-modal").modal('hide');
|
||||
|
||||
location.reload();
|
||||
}, 3000);
|
||||
}
|
||||
},
|
||||
error: function(data){
|
||||
var errors = data.responseJSON;
|
||||
|
@ -153,11 +153,13 @@
|
||||
<div class="btn-group dropup">
|
||||
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-expanded="false"><i class="fa fa-chevron-circle-up"></i> {{ trans('general.more_actions') }}</button>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
@if($invoice->status->code != 'paid')
|
||||
@permission('update-incomes-invoices')
|
||||
<li><a href="{{ url('incomes/invoices/' . $invoice->id . '/pay') }}">{{ trans('invoices.mark_paid') }}</a></li>
|
||||
@endpermission
|
||||
<li><a href="#" id="button-payment">{{ trans('invoices.add_payment') }}</a></li>
|
||||
<li class="divider"></li>
|
||||
@endif
|
||||
@permission('update-incomes-invoices')
|
||||
<li><a href="{{ url('incomes/invoices/' . $invoice->id . '/sent') }}">{{ trans('invoices.mark_sent') }}</a></li>
|
||||
@endpermission
|
||||
@ -292,6 +294,7 @@
|
||||
html += ' <h4 class="modal-title" id="paymentModalLabel">{{ trans('invoices.add_payment') }}</h4>';
|
||||
html += ' </div>';
|
||||
html += ' <div class="modal-body box-body">';
|
||||
html += ' <div class="modal-message"></div>';
|
||||
html += ' <div class="form-group col-md-6 required">';
|
||||
html += ' {!! Form::label('paid_at', trans('general.date'), ['class' => 'control-label']) !!}';
|
||||
html += ' <div class="input-group">';
|
||||
@ -341,9 +344,9 @@
|
||||
html += ' </div>';
|
||||
html += ' {!! Form::hidden('invoice_id', $invoice->id, ['id' => 'invoice_id', 'class' => 'form-control', 'required' => 'required']) !!}';
|
||||
html += ' </div>';
|
||||
html += ' <div class="modal-footer">';
|
||||
html += ' <button type="button" class="btn btn-default" data-dismiss="modal">{{ trans('general.cancel') }}</button>';
|
||||
html += ' <div class="modal-footer" style="text-align: left;">';
|
||||
html += ' <button type="button" onclick="addPayment();" class="btn btn-success">{{ trans('general.save') }}</button>';
|
||||
html += ' <button type="button" class="btn btn-default" data-dismiss="modal">{{ trans('general.cancel') }}</button>';
|
||||
html += ' </div>';
|
||||
html += ' </div>';
|
||||
html += ' </div>';
|
||||
@ -422,10 +425,22 @@
|
||||
complete: function() {
|
||||
$('#loading').remove();
|
||||
},
|
||||
success: function(data) {
|
||||
$("#payment-modal").modal('hide');
|
||||
success: function(json) {
|
||||
if (json['error']) {
|
||||
$('#payment-modal .modal-message').append('<div class="alert alert-danger">' + json['message'] + '</div>');
|
||||
$('div.alert-danger').delay(3000).fadeOut(350);
|
||||
}
|
||||
|
||||
location.reload();
|
||||
if (json['success']) {
|
||||
$('#payment-modal .modal-message').before('<div class="alert alert-success">' + json['message'] + '</div>');
|
||||
$('div.alert-success').delay(3000).fadeOut(350);
|
||||
|
||||
setTimeout(function(){
|
||||
$("#payment-modal").modal('hide');
|
||||
|
||||
location.reload();
|
||||
}, 3000);
|
||||
}
|
||||
},
|
||||
error: function(data){
|
||||
var errors = data.responseJSON;
|
||||
|
Loading…
x
Reference in New Issue
Block a user