getCustomers() as $c) { if ($c->BillingStatus == 'Inactive') { $this->info(sprintf('Ignoring INACTIVE: [%s] %s %s',$c->EzypayReferenceNumber,$c->Firstname,$c->Surname)); continue; } // Load Account Details from ReferenceId $ao = Account::where('site_id',(int)substr($c->ReferenceId,0,2)) ->where('id',(int)substr($c->ReferenceId,2,4)) ->single(); if (! $ao) { $this->warn(sprintf('Missing: [%s] %s %s (%s)',$c->EzypayReferenceNumber,$c->Firstname,$c->Surname,$c->ReferenceId)); continue; } // Get Due Invoices $account_due = $ao->dueInvoices()->sum('due'); $next_pay = $poo->getDebits([ 'customerId'=>$c->Id, 'dateFrom'=>now()->format('Y-m-d'), 'dateTo'=>now()->addQuarter()->format('Y-m-d'), ])->reverse()->first(); if ($next_pay->Status !== 'Pending') { $this->warn(sprintf('Next payment is not pending for (%s)',$ao->name)); continue; } $next_paydate = Carbon::createFromTimeString($next_pay->Date); if ($next_pay->Amount < $account_due) $this->warn(sprintf('Next payment on [%s] for (%s) [%s] not sufficient for outstanding balance [%s]', $next_paydate->format('Y-m-d'), $ao->name, number_format($next_pay->Amount,2), number_format($account_due,2))); elseif ($next_pay->Amount > $account_due) $this->warn(sprintf('Next payment on [%s] for (%s) [%s] is too much for outstanding balance [%s]', $next_paydate->format('Y-m-d'), $ao->name, number_format($next_pay->Amount,2), number_format($account_due,2))); else $this->info(sprintf('Next payment on [%s] for (%s) [%s] will cover outstanding balance [%s]', $next_paydate->format('Y-m-d'), $ao->name, number_format($next_pay->Amount,2), number_format($account_due,2))); } } }