Fixes for autobill

This commit is contained in:
David Bomba 2020-10-23 15:18:16 +11:00
parent 3139539f46
commit 2d0e1a53f2
5 changed files with 42 additions and 6 deletions

View File

@ -112,6 +112,7 @@ class CreateSingleAccount extends Command
$company = Company::factory()->create([ $company = Company::factory()->create([
'account_id' => $account->id, 'account_id' => $account->id,
'slack_webhook_url' => config('ninja.notification.slack'), 'slack_webhook_url' => config('ninja.notification.slack'),
'use_credits_payment' => 'always',
]); ]);
$account->default_company_id = $company->id; $account->default_company_id = $company->id;

View File

@ -82,7 +82,7 @@ class BaseMailerJob implements ShouldQueue
public function failed($exception = null) public function failed($exception = null)
{ {
info('the job failed'); // info('the job failed');
$job_failure = new EmailFailure(); $job_failure = new EmailFailure();
$job_failure->string_metric5 = get_parent_class($this); $job_failure->string_metric5 = get_parent_class($this);

View File

@ -55,6 +55,19 @@ class CreditService
return $this; return $this;
} }
public function setCalculatedStatus()
{
if((int)$this->credit->balance == 0)
$this->credit->status_id = Credit::STATUS_APPLIED;
elseif((string)$this->credit->amount == (string)$this->credit->balance)
$this->credit->status_id = Credit::STATUS_SENT;
elseif($this->credit->balance > 0)
$this->credit->status_id = Credit::STATUS_PARTIAL;
return $this;
}
public function markSent() public function markSent()
{ {
$this->credit = (new MarkSent($this->credit->client, $this->credit))->run(); $this->credit = (new MarkSent($this->credit->client, $this->credit))->run();
@ -69,6 +82,13 @@ class CreditService
return $this; return $this;
} }
public function adjustBalance($adjustment)
{
$this->credit->balance += $adjustment;
return $this;
}
/** /**
* Saves the credit. * Saves the credit.
* @return Credit object * @return Credit object

View File

@ -68,7 +68,7 @@ class AutoBillInvoice extends AbstractService
elseif($this->invoice->balance > 0) elseif($this->invoice->balance > 0)
$amount = $this->invoice->balance; $amount = $this->invoice->balance;
else else
return $this->finalizePaymentUsingCredits(); return $this->invoice;
info("balance remains to be paid!!"); info("balance remains to be paid!!");
@ -127,8 +127,11 @@ class AutoBillInvoice extends AbstractService
$current_credit = Credit::find($credit['credit_id']); $current_credit = Credit::find($credit['credit_id']);
$payment->credits()->attach($current_credit->id, ['amount' => $credit['amount']]); $payment->credits()->attach($current_credit->id, ['amount' => $credit['amount']]);
info("adjusting credit balance {$current_credit->balance} by this amount ". $credit['amount']);
$current_credit->balance -= $credit['amount']; $current_credit->balance -= $credit['amount'];
$current_credit->save();
$current_credit->service()->setCalculatedStatus()->save();
// $this->applyPaymentToCredit($current_credit, $credit['amount']); // $this->applyPaymentToCredit($current_credit, $credit['amount']);
} }
@ -149,7 +152,7 @@ class AutoBillInvoice extends AbstractService
event(new PaymentWasCreated($payment, $payment->company, Ninja::eventVars())); event(new PaymentWasCreated($payment, $payment->company, Ninja::eventVars()));
return $this->invoice->service()->setStatus(Invoice::STATUS_PAID)->save(); return $this->invoice->service()->setCalculatedStatus()->save();
} }
/** /**
@ -169,6 +172,8 @@ class AutoBillInvoice extends AbstractService
$available_credit_balance = $available_credits->sum('balance'); $available_credit_balance = $available_credits->sum('balance');
info("available credit balance = {$available_credit_balance}");
if((int)$available_credit_balance == 0) if((int)$available_credit_balance == 0)
return; return;
@ -217,7 +222,7 @@ class AutoBillInvoice extends AbstractService
} }
} }
$this->finalizePaymentUsingCredits();
return $this; return $this;
} }

View File

@ -210,6 +210,16 @@ class InvoiceService
return $this; return $this;
} }
public function setCalculatedStatus()
{
if((int)$this->invoice->balance == 0)
$this->setStatus(Invoice::STATUS_PAID);
elseif($this->invoice->balance > 0 && $this->invoice->balance < $this->invoice->amount)
$this->setStatus(Invoice::STATUS_PARTIAL);
return $this;
}
public function updateStatus() public function updateStatus()
{ {
info("invoice balance = {$this->invoice->balance}"); info("invoice balance = {$this->invoice->balance}");