diff --git a/app/Factory/RecurringExpenseToExpenseFactory.php b/app/Factory/RecurringExpenseToExpenseFactory.php new file mode 100644 index 000000000000..76a3b0456e9e --- /dev/null +++ b/app/Factory/RecurringExpenseToExpenseFactory.php @@ -0,0 +1,62 @@ +user_id = $recurring_expense->user_id; + $expense->assigned_user_id = $recurring_expense->assigned_user_id; + $expense->vendor_id = $recurring_expense->vendor_id; + $expense->invoice_id = $recurring_expense->invoice_id; + $expense->currency_id = $recurring_expense->currency_id; + $expense->company_id = $recurring_expense->company_id; + $expense->bank_id = $recurring_expense->bank_id; + $expense->exchange_rate = $recurring_expense->exchange_rate; + $expense->is_deleted = false; + $expense->should_be_invoiced = $recurring_expense->should_be_invoiced; + $expense->tax_name1 = $recurring_expense->tax_name1; + $expense->tax_rate1 = $recurring_expense->tax_rate1; + $expense->tax_name2 = $recurring_expense->tax_name2; + $expense->tax_rate2 = $recurring_expense->tax_rate2; + $expense->tax_name3 = $recurring_expense->tax_name3; + $expense->tax_rate3 = $recurring_expense->tax_rate3; + $expense->date = now()->format('Y-m-d'); + $expense->payment_date = $recurring_expense->payment_date; + $expense->amount = $recurring_expense->amount; + $expense->foreign_amount = $recurring_expense->foreign_amount; + $expense->private_notes = $recurring_expense->private_notes; + $expense->public_notes = $recurring_expense->public_notes; + $expense->transaction_reference = $recurring_expense->transaction_reference; + $expense->custom_value1 = $recurring_expense->custom_value1; + $expense->custom_value2 = $recurring_expense->custom_value2; + $expense->custom_value3 = $recurring_expense->custom_value3; + $expense->custom_value4 = $recurring_expense->custom_value4; + $expense->transaction_id = $recurring_expense->transaction_id; + $expense->category_id = $recurring_expense->category_id; + $expense->payment_type_id = $recurring_expense->payment_type_id; + $expense->project_id = $recurring_expense->project_id; + $expense->invoice_documents = $recurring_expense->invoice_documents; + $expense->tax_amount1 = $recurring_expense->tax_amount1; + $expense->tax_amount2 = $recurring_expense->tax_amount2; + $expense->tax_amount3 = $recurring_expense->tax_amount3; + $expense->uses_inclusive_taxes = $recurring_expense->uses_inclusive_taxes; + $expense->calculate_tax_by_amount = $recurring_expense->calculate_tax_by_amount; + + return $expense; + } +} diff --git a/app/Jobs/Cron/RecurringExpensesCron.php b/app/Jobs/Cron/RecurringExpensesCron.php new file mode 100644 index 000000000000..707cdbe3843c --- /dev/null +++ b/app/Jobs/Cron/RecurringExpensesCron.php @@ -0,0 +1,88 @@ +format('Y-m-d h:i:s')); + + if (! config('ninja.db.multi_db_enabled')) { + + $this->getRecurringExpenses(); + + } else { + //multiDB environment, need to + foreach (MultiDB::$dbs as $db) { + MultiDB::setDB($db); + + $this->getRecurringExpenses(); + } + } + } + + private function getRecurringExpenses() + { + $recurring_expenses = RecurringExpense::where('next_send_date', '<=', now()->toDateTimeString()) + ->whereNotNull('next_send_date') + ->whereNull('deleted_at') + ->where('remaining_cycles', '!=', '0') + // ->whereHas('client', function ($query) { + // $query->where('is_deleted',0) + // ->where('deleted_at', NULL); + // }) + ->with('company') + ->cursor(); + + nlog(now()->format('Y-m-d') . ' Generating Recurring Expenses. Count = '.$recurring_expenses->count()); + + $recurring_expenses->each(function ($recurring_expense, $key) { + nlog("Current date = " . now()->format("Y-m-d") . " Recurring date = " .$recurring_expense->next_send_date); + + if (!$recurring_expense->company->is_disabled) { + $this->generateExpense($recurring_expense); + } + }); + } + + private function generateExpense(RecurringExpense $recurring_expense) + { + + } + +}