Console recurring re-factory

This commit is contained in:
Cüneyt Şentürk 2020-10-20 18:27:26 +03:00
parent 66e4c4064e
commit fded803b72
3 changed files with 73 additions and 30 deletions

View File

@ -9,7 +9,7 @@ use App\Events\Purchase\BillRecurring;
use App\Events\Sale\InvoiceCreated;
use App\Events\Sale\InvoiceRecurring;
use App\Models\Banking\Transaction;
use App\Models\Common\Company;
use App\Models\Common\Recurring;
use App\Models\Sale\Invoice;
use App\Utilities\Date;
use App\Utilities\Overrider;
@ -41,19 +41,52 @@ class RecurringCheck extends Command
// Disable model cache
config(['laravel-model-caching.enabled' => false]);
// Get all companies
$companies = Company::enabled()->withCount('recurring')->cursor();
// Get all recurring
$recurring = Recurring::allCompanies()->with('company')->cursor();
foreach ($companies as $company) {
// Check company recurring
if (!$company->recurring_count) {
$this->info('Creating recurring records ' . $recurring->count());
foreach ($recurring as $recur) {
if (empty($recur->company)) {
continue;
}
$this->info('Creating recurring records for ' . $company->name . ' company.');
$company_name = !empty($recur->company->name) ? $recur->company->name : 'Missing Company Name : ' . $recur->company->id;
$this->info('Creating recurring records for ' . $company_name . ' company...');
// Check if company is disabled
if (!$recur->company->enabled) {
$this->info($company_name . ' company is disabled. Skipping...');
if (Date::parse($recur->company->updated_at)->format('Y-m-d') > Date::now()->subMonth(3)->format('Y-m-d')) {
$recur->delete();
}
continue;
}
// Check if company has any active user
$has_active_users = false;
foreach ($recur->company->users as $company_user) {
if (Date::parse($company_user->last_logged_in_at)->format('Y-m-d') > Date::now()->subMonth(3)->format('Y-m-d')) {
$has_active_users = true;
break;
}
}
if (!$has_active_users) {
$this->info('No active users for ' . $company_name . ' company. Skipping...');
$recur->delete();
continue;
}
// Set company id
session(['company_id' => $company->id]);
session(['company_id' => $recur->company_id]);
// Override settings and currencies
Overrider::load('settings');
@ -61,12 +94,11 @@ class RecurringCheck extends Command
$today = Date::today();
foreach ($company->recurring as $recurring) {
if (!$model = $recurring->recurable) {
if (!$model = $recur->recurable) {
continue;
}
$schedules = $recurring->getRecurringSchedule();
$schedules = $recur->getRecurringSchedule();
$children_count = $this->getChildrenCount($model);
$schedule_count = $schedules->count();
@ -78,7 +110,7 @@ class RecurringCheck extends Command
// Recur only today
if ($children_count == ($schedule_count - 1)) {
$this->recur($model, $recurring->recurable_type, $today);
$this->recur($model, $recur->recurable_type, $today);
continue;
}
@ -87,8 +119,7 @@ class RecurringCheck extends Command
foreach ($schedules as $schedule) {
$schedule_date = Date::parse($schedule->getStart()->format('Y-m-d'));
$this->recur($model, $recurring->recurable_type, $schedule_date);
}
$this->recur($model, $recur->recurable_type, $schedule_date);
}
}

View File

@ -127,7 +127,7 @@ class User extends Authenticatable
/**
* Always return a valid picture when we retrieve it
*/
public function getLastLoggedInAtAttribute($value)
public function getLastLoggedAttribute($value)
{
// Date::setLocale('tr');

View File

@ -26,4 +26,16 @@ class Recurring extends Model
{
return $this->morphTo();
}
/**
* Scope to get all rows filtered, sorted and paginated.
*
* @param \Illuminate\Database\Eloquent\Builder $query
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeAllCompanies($query)
{
return $query->where('company_id', '<>', '0');
}
}