close #129 Fixed: Invoice not marked automatically as paid, same modify Bill.

This commit is contained in:
Cüneyt Şentürk 2017-12-07 00:13:15 +03:00
parent 098ed4b26a
commit 7f40a5857f
7 changed files with 137 additions and 50 deletions

View File

@ -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();
}
}

View File

@ -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)

View File

@ -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');
}
}

View File

@ -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');
}
}

View File

@ -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!',

View File

@ -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>&nbsp; {{ 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;

View File

@ -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>&nbsp; {{ 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;