diff --git a/app/Jobs/Cron/RecurringExpensesCron.php b/app/Jobs/Cron/RecurringExpensesCron.php index a08f4eeedbeb..78a59aec6bff 100644 --- a/app/Jobs/Cron/RecurringExpensesCron.php +++ b/app/Jobs/Cron/RecurringExpensesCron.php @@ -12,9 +12,9 @@ namespace App\Jobs\Cron; use App\Factory\RecurringExpenseToExpenseFactory; -use App\Jobs\RecurringInvoice\SendRecurring; use App\Libraries\MultiDB; use App\Models\RecurringExpense; +use App\Models\RecurringInvoice; use App\Utils\Traits\GeneratesCounter; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Support\Carbon; @@ -64,11 +64,8 @@ class RecurringExpensesCron $recurring_expenses = RecurringExpense::where('next_send_date', '<=', now()->toDateTimeString()) ->whereNotNull('next_send_date') ->whereNull('deleted_at') + ->where('status_id', RecurringInvoice::STATUS_ACTIVE) ->where('remaining_cycles', '!=', '0') - // ->whereHas('client', function ($query) { - // $query->where('is_deleted',0) - // ->where('deleted_at', NULL); - // }) ->with('company') ->cursor(); @@ -80,6 +77,8 @@ class RecurringExpensesCron if (!$recurring_expense->company->is_disabled) { $this->generateExpense($recurring_expense); } + + }); } @@ -90,6 +89,10 @@ class RecurringExpensesCron $expense->number = $this->getNextExpenseNumber($expense); $expense->save(); + + $recurring_expense->next_send_date = $recurring_expense->nextSendDate(); + $recurring_expense->remaining_cycles = $recurring_expense->remainingCycles(); + $recurring_expense->save(); } } diff --git a/app/Models/RecurringExpense.php b/app/Models/RecurringExpense.php index 35cc6ecd0572..8682c0568fa4 100644 --- a/app/Models/RecurringExpense.php +++ b/app/Models/RecurringExpense.php @@ -11,8 +11,10 @@ namespace App\Models; +use App\Models\RecurringInvoice; use App\Services\Recurring\RecurringService; use Illuminate\Database\Eloquent\SoftDeletes; +use Illuminate\Support\Carbon; class RecurringExpense extends BaseModel { @@ -114,4 +116,52 @@ class RecurringExpense extends BaseModel { return new RecurringService($this); } + + public function nextSendDate() :?Carbon + { + if (!$this->next_send_date) { + return null; + } + + switch ($this->frequency_id) { + case RecurringInvoice::FREQUENCY_DAILY: + return Carbon::parse($this->next_send_date)->startOfDay()->addDay(); + case RecurringInvoice::FREQUENCY_WEEKLY: + return Carbon::parse($this->next_send_date)->startOfDay()->addWeek(); + case RecurringInvoice::FREQUENCY_TWO_WEEKS: + return Carbon::parse($this->next_send_date)->startOfDay()->addWeeks(2); + case RecurringInvoice::FREQUENCY_FOUR_WEEKS: + return Carbon::parse($this->next_send_date)->startOfDay()->addWeeks(4); + case RecurringInvoice::FREQUENCY_MONTHLY: + return Carbon::parse($this->next_send_date)->startOfDay()->addMonthNoOverflow(); + case RecurringInvoice::FREQUENCY_TWO_MONTHS: + return Carbon::parse($this->next_send_date)->startOfDay()->addMonthsNoOverflow(2); + case RecurringInvoice::FREQUENCY_THREE_MONTHS: + return Carbon::parse($this->next_send_date)->startOfDay()->addMonthsNoOverflow(3); + case RecurringInvoice::FREQUENCY_FOUR_MONTHS: + return Carbon::parse($this->next_send_date)->startOfDay()->addMonthsNoOverflow(4); + case RecurringInvoice::FREQUENCY_SIX_MONTHS: + return Carbon::parse($this->next_send_date)->startOfDay()->addMonthsNoOverflow(6); + case RecurringInvoice::FREQUENCY_ANNUALLY: + return Carbon::parse($this->next_send_date)->startOfDay()->addYear(); + case RecurringInvoice::FREQUENCY_TWO_YEARS: + return Carbon::parse($this->next_send_date)->startOfDay()->addYears(2); + case RecurringInvoice::FREQUENCY_THREE_YEARS: + return Carbon::parse($this->next_send_date)->startOfDay()->addYears(3); + default: + return null; + } + } + + public function remainingCycles() : int + { + if ($this->remaining_cycles == 0) { + return 0; + } elseif ($this->remaining_cycles == -1) { + return -1; + } else { + return $this->remaining_cycles - 1; + } + } + }