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']);
|
$bill = Bill::find($request['bill_id']);
|
||||||
|
|
||||||
if ($request['currency_code'] == $bill->currency_code) {
|
$total_amount = $bill->amount;
|
||||||
if ($request['amount'] > $bill->amount) {
|
|
||||||
$message = trans('messages.error.added', ['type' => trans_choice('general.payment', 1)]);
|
|
||||||
|
|
||||||
return response()->json($message);
|
$amount = (double) $request['amount'];
|
||||||
} elseif ($request['amount'] == $bill->amount) {
|
|
||||||
$bill->bill_status_code = 'paid';
|
if ($request['currency_code'] != $bill->currency_code) {
|
||||||
} else {
|
|
||||||
$bill->bill_status_code = 'partial';
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$request_bill = new Bill();
|
$request_bill = new Bill();
|
||||||
|
|
||||||
$request_bill->amount = (float) $request['amount'];
|
$request_bill->amount = (float) $request['amount'];
|
||||||
@ -621,16 +615,24 @@ class Bills extends Controller
|
|||||||
$request_bill->currency_rate = $currency->rate;
|
$request_bill->currency_rate = $currency->rate;
|
||||||
|
|
||||||
$amount = $request_bill->getConvertedAmount();
|
$amount = $request_bill->getConvertedAmount();
|
||||||
|
}
|
||||||
|
|
||||||
if ($amount > $bill->amount) {
|
if ($bill->payments()->count()) {
|
||||||
$message = trans('messages.error.added', ['type' => trans_choice('general.payment', 1)]);
|
$total_amount -= $bill->payments()->paid();
|
||||||
|
}
|
||||||
|
|
||||||
return response()->json($message);
|
if ($amount > $total_amount) {
|
||||||
} elseif ($amount == $bill->amount) {
|
$message = trans('messages.error.payment_add');
|
||||||
$bill->bill_status_code = 'paid';
|
|
||||||
} else {
|
return response()->json([
|
||||||
$bill->bill_status_code = 'partial';
|
'success' => false,
|
||||||
}
|
'error' => true,
|
||||||
|
'message' => $message,
|
||||||
|
]);
|
||||||
|
} elseif ($amount == $total_amount) {
|
||||||
|
$bill->bill_status_code = 'paid';
|
||||||
|
} else {
|
||||||
|
$bill->bill_status_code = 'partial';
|
||||||
}
|
}
|
||||||
|
|
||||||
$bill->save();
|
$bill->save();
|
||||||
@ -642,13 +644,18 @@ class Bills extends Controller
|
|||||||
|
|
||||||
$desc_date = Date::parse($request['paid_at'])->format($this->getCompanyDateFormat());
|
$desc_date = Date::parse($request['paid_at'])->format($this->getCompanyDateFormat());
|
||||||
$desc_amount = money((float) $request['amount'], $request['currency_code'], true)->format();
|
$desc_amount = money((float) $request['amount'], $request['currency_code'], true)->format();
|
||||||
|
|
||||||
$request['description'] = $desc_date . ' ' . $desc_amount;
|
$request['description'] = $desc_date . ' ' . $desc_amount;
|
||||||
|
|
||||||
BillHistory::create($request->input());
|
BillHistory::create($request->input());
|
||||||
|
|
||||||
$message = trans('messages.success.added', ['type' => trans_choice('general.revenues', 1)]);
|
$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)
|
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();
|
$payment->delete();
|
||||||
|
|
||||||
$message = trans('messages.success.deleted', ['type' => trans_choice('general.bills', 1)]);
|
$message = trans('messages.success.deleted', ['type' => trans_choice('general.bills', 1)]);
|
||||||
|
|
||||||
flash($message)->success();
|
flash($message)->success();
|
||||||
|
|
||||||
return redirect('expenses/bills');
|
return redirect()->back();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -616,17 +616,11 @@ class Invoices extends Controller
|
|||||||
|
|
||||||
$invoice = Invoice::find($request['invoice_id']);
|
$invoice = Invoice::find($request['invoice_id']);
|
||||||
|
|
||||||
if ($request['currency_code'] == $invoice->currency_code) {
|
$total_amount = $invoice->amount;
|
||||||
if ($request['amount'] > $invoice->amount) {
|
|
||||||
$message = trans('messages.error.added', ['type' => trans_choice('general.payment', 1)]);
|
|
||||||
|
|
||||||
return response()->json($message);
|
$amount = (double) $request['amount'];
|
||||||
} elseif ($request['amount'] == $invoice->amount) {
|
|
||||||
$invoice->invoice_status_code = 'paid';
|
if ($request['currency_code'] != $invoice->currency_code) {
|
||||||
} else {
|
|
||||||
$invoice->invoice_status_code = 'partial';
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$request_invoice = new Invoice();
|
$request_invoice = new Invoice();
|
||||||
|
|
||||||
$request_invoice->amount = (float) $request['amount'];
|
$request_invoice->amount = (float) $request['amount'];
|
||||||
@ -634,16 +628,24 @@ class Invoices extends Controller
|
|||||||
$request_invoice->currency_rate = $currency->rate;
|
$request_invoice->currency_rate = $currency->rate;
|
||||||
|
|
||||||
$amount = $request_invoice->getConvertedAmount();
|
$amount = $request_invoice->getConvertedAmount();
|
||||||
|
}
|
||||||
|
|
||||||
if ($amount > $invoice->amount) {
|
if ($invoice->payments()->count()) {
|
||||||
$message = trans('messages.error.added', ['type' => trans_choice('general.payment', 1)]);
|
$total_amount -= $invoice->payments()->paid();
|
||||||
|
}
|
||||||
|
|
||||||
return response()->json($message);
|
if ($amount > $total_amount) {
|
||||||
} elseif ($amount == $invoice->amount) {
|
$message = trans('messages.error.payment_add');
|
||||||
$invoice->invoice_status_code = 'paid';
|
|
||||||
} else {
|
return response()->json([
|
||||||
$invoice->invoice_status_code = 'partial';
|
'success' => false,
|
||||||
}
|
'error' => true,
|
||||||
|
'message' => $message,
|
||||||
|
]);
|
||||||
|
} elseif ($amount == $total_amount) {
|
||||||
|
$invoice->invoice_status_code = 'paid';
|
||||||
|
} else {
|
||||||
|
$invoice->invoice_status_code = 'partial';
|
||||||
}
|
}
|
||||||
|
|
||||||
$invoice->save();
|
$invoice->save();
|
||||||
@ -655,13 +657,18 @@ class Invoices extends Controller
|
|||||||
|
|
||||||
$desc_date = Date::parse($request['paid_at'])->format($this->getCompanyDateFormat());
|
$desc_date = Date::parse($request['paid_at'])->format($this->getCompanyDateFormat());
|
||||||
$desc_amount = money((float) $request['amount'], $request['currency_code'], true)->format();
|
$desc_amount = money((float) $request['amount'], $request['currency_code'], true)->format();
|
||||||
|
|
||||||
$request['description'] = $desc_date . ' ' . $desc_amount;
|
$request['description'] = $desc_date . ' ' . $desc_amount;
|
||||||
|
|
||||||
InvoiceHistory::create($request->input());
|
InvoiceHistory::create($request->input());
|
||||||
|
|
||||||
$message = trans('messages.success.added', ['type' => trans_choice('general.revenues', 1)]);
|
$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)
|
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();
|
$payment->delete();
|
||||||
|
|
||||||
$message = trans('messages.success.deleted', ['type' => trans_choice('general.invoices', 1)]);
|
$message = trans('messages.success.deleted', ['type' => trans_choice('general.invoices', 1)]);
|
||||||
|
|
||||||
flash($message)->success();
|
flash($message)->success();
|
||||||
|
|
||||||
return redirect('incomes/invoices');
|
return redirect()->back();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function prepareInvoice(Invoice $invoice)
|
protected function prepareInvoice(Invoice $invoice)
|
||||||
|
@ -67,4 +67,15 @@ class BillPayment extends Model
|
|||||||
{
|
{
|
||||||
$this->attributes['currency_rate'] = (double) $value;
|
$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;
|
$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!',
|
'imported' => ':type imported!',
|
||||||
],
|
],
|
||||||
'error' => [
|
'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!',
|
'not_user_company' => 'Error: You are not allowed to manage this company!',
|
||||||
'customer' => 'Error: You can not created user! :name use this email address.',
|
'customer' => 'Error: You can not created user! :name use this email address.',
|
||||||
'no_file' => 'Error: No file selected!',
|
'no_file' => 'Error: No file selected!',
|
||||||
|
@ -153,11 +153,13 @@
|
|||||||
<div class="btn-group dropup">
|
<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>
|
<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">
|
<ul class="dropdown-menu" role="menu">
|
||||||
|
@if($bill->status->code != 'paid')
|
||||||
<li><a href="#" id="button-payment">{{ trans('bills.add_payment') }}</a></li>
|
<li><a href="#" id="button-payment">{{ trans('bills.add_payment') }}</a></li>
|
||||||
@permission('update-expenses-bills')
|
@permission('update-expenses-bills')
|
||||||
<li><a href="{{ url('expenses/bills/' . $bill->id . '/received') }}">{{ trans('bills.mark_received') }}</a></li>
|
<li><a href="{{ url('expenses/bills/' . $bill->id . '/received') }}">{{ trans('bills.mark_received') }}</a></li>
|
||||||
@endpermission
|
@endpermission
|
||||||
<li class="divider"></li>
|
<li class="divider"></li>
|
||||||
|
@endif
|
||||||
<li><a href="{{ url('expenses/bills/' . $bill->id . '/pdf') }}">{{ trans('bills.download_pdf') }}</a></li>
|
<li><a href="{{ url('expenses/bills/' . $bill->id . '/pdf') }}">{{ trans('bills.download_pdf') }}</a></li>
|
||||||
<li class="divider"></li>
|
<li class="divider"></li>
|
||||||
@permission('delete-expenses-bills')
|
@permission('delete-expenses-bills')
|
||||||
@ -287,6 +289,7 @@
|
|||||||
html += ' <h4 class="modal-title" id="paymentModalLabel">{{ trans('bills.add_payment') }}</h4>';
|
html += ' <h4 class="modal-title" id="paymentModalLabel">{{ trans('bills.add_payment') }}</h4>';
|
||||||
html += ' </div>';
|
html += ' </div>';
|
||||||
html += ' <div class="modal-body box-body">';
|
html += ' <div class="modal-body box-body">';
|
||||||
|
html += ' <div class="modal-message"></div>';
|
||||||
html += ' <div class="form-group col-md-6 required">';
|
html += ' <div class="form-group col-md-6 required">';
|
||||||
html += ' {!! Form::label('paid_at', trans('general.date'), ['class' => 'control-label']) !!}';
|
html += ' {!! Form::label('paid_at', trans('general.date'), ['class' => 'control-label']) !!}';
|
||||||
html += ' <div class="input-group">';
|
html += ' <div class="input-group">';
|
||||||
@ -336,9 +339,9 @@
|
|||||||
html += ' </div>';
|
html += ' </div>';
|
||||||
html += ' {!! Form::hidden('bill_id', $bill->id, ['id' => 'bill_id', 'class' => 'form-control', 'required' => 'required']) !!}';
|
html += ' {!! Form::hidden('bill_id', $bill->id, ['id' => 'bill_id', 'class' => 'form-control', 'required' => 'required']) !!}';
|
||||||
html += ' </div>';
|
html += ' </div>';
|
||||||
html += ' <div class="modal-footer">';
|
html += ' <div class="modal-footer" style="text-align: left;">';
|
||||||
html += ' <button type="button" class="btn btn-default" data-dismiss="modal">{{ trans('general.cancel') }}</button>';
|
|
||||||
html += ' <button type="button" onclick="addPayment();" class="btn btn-success">{{ trans('general.save') }}</button>';
|
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>';
|
html += ' </div>';
|
||||||
html += ' </div>';
|
html += ' </div>';
|
||||||
@ -417,10 +420,22 @@
|
|||||||
complete: function() {
|
complete: function() {
|
||||||
$('#loading').remove();
|
$('#loading').remove();
|
||||||
},
|
},
|
||||||
success: function(data) {
|
success: function(json) {
|
||||||
$("#payment-modal").modal('hide');
|
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){
|
error: function(data){
|
||||||
var errors = data.responseJSON;
|
var errors = data.responseJSON;
|
||||||
|
@ -153,11 +153,13 @@
|
|||||||
<div class="btn-group dropup">
|
<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>
|
<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">
|
<ul class="dropdown-menu" role="menu">
|
||||||
|
@if($invoice->status->code != 'paid')
|
||||||
@permission('update-incomes-invoices')
|
@permission('update-incomes-invoices')
|
||||||
<li><a href="{{ url('incomes/invoices/' . $invoice->id . '/pay') }}">{{ trans('invoices.mark_paid') }}</a></li>
|
<li><a href="{{ url('incomes/invoices/' . $invoice->id . '/pay') }}">{{ trans('invoices.mark_paid') }}</a></li>
|
||||||
@endpermission
|
@endpermission
|
||||||
<li><a href="#" id="button-payment">{{ trans('invoices.add_payment') }}</a></li>
|
<li><a href="#" id="button-payment">{{ trans('invoices.add_payment') }}</a></li>
|
||||||
<li class="divider"></li>
|
<li class="divider"></li>
|
||||||
|
@endif
|
||||||
@permission('update-incomes-invoices')
|
@permission('update-incomes-invoices')
|
||||||
<li><a href="{{ url('incomes/invoices/' . $invoice->id . '/sent') }}">{{ trans('invoices.mark_sent') }}</a></li>
|
<li><a href="{{ url('incomes/invoices/' . $invoice->id . '/sent') }}">{{ trans('invoices.mark_sent') }}</a></li>
|
||||||
@endpermission
|
@endpermission
|
||||||
@ -292,6 +294,7 @@
|
|||||||
html += ' <h4 class="modal-title" id="paymentModalLabel">{{ trans('invoices.add_payment') }}</h4>';
|
html += ' <h4 class="modal-title" id="paymentModalLabel">{{ trans('invoices.add_payment') }}</h4>';
|
||||||
html += ' </div>';
|
html += ' </div>';
|
||||||
html += ' <div class="modal-body box-body">';
|
html += ' <div class="modal-body box-body">';
|
||||||
|
html += ' <div class="modal-message"></div>';
|
||||||
html += ' <div class="form-group col-md-6 required">';
|
html += ' <div class="form-group col-md-6 required">';
|
||||||
html += ' {!! Form::label('paid_at', trans('general.date'), ['class' => 'control-label']) !!}';
|
html += ' {!! Form::label('paid_at', trans('general.date'), ['class' => 'control-label']) !!}';
|
||||||
html += ' <div class="input-group">';
|
html += ' <div class="input-group">';
|
||||||
@ -341,9 +344,9 @@
|
|||||||
html += ' </div>';
|
html += ' </div>';
|
||||||
html += ' {!! Form::hidden('invoice_id', $invoice->id, ['id' => 'invoice_id', 'class' => 'form-control', 'required' => 'required']) !!}';
|
html += ' {!! Form::hidden('invoice_id', $invoice->id, ['id' => 'invoice_id', 'class' => 'form-control', 'required' => 'required']) !!}';
|
||||||
html += ' </div>';
|
html += ' </div>';
|
||||||
html += ' <div class="modal-footer">';
|
html += ' <div class="modal-footer" style="text-align: left;">';
|
||||||
html += ' <button type="button" class="btn btn-default" data-dismiss="modal">{{ trans('general.cancel') }}</button>';
|
|
||||||
html += ' <button type="button" onclick="addPayment();" class="btn btn-success">{{ trans('general.save') }}</button>';
|
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>';
|
html += ' </div>';
|
||||||
html += ' </div>';
|
html += ' </div>';
|
||||||
@ -422,10 +425,22 @@
|
|||||||
complete: function() {
|
complete: function() {
|
||||||
$('#loading').remove();
|
$('#loading').remove();
|
||||||
},
|
},
|
||||||
success: function(data) {
|
success: function(json) {
|
||||||
$("#payment-modal").modal('hide');
|
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){
|
error: function(data){
|
||||||
var errors = data.responseJSON;
|
var errors = data.responseJSON;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user