From 577eedb457e1ee6fc879a23cfa2d5e025048ce08 Mon Sep 17 00:00:00 2001 From: = Date: Tue, 24 Aug 2021 21:57:51 +1000 Subject: [PATCH] Recurring expenses cron job --- app/Factory/RecurringExpenseFactory.php | 6 ++ app/Jobs/Cron/RecurringExpensesCron.php | 9 ++- ...08_23_101529_recurring_expenses_schema.php | 18 ++--- tests/Unit/RecurringExpenseCloneTest.php | 69 +++++++++++++++++++ 4 files changed, 92 insertions(+), 10 deletions(-) create mode 100644 tests/Unit/RecurringExpenseCloneTest.php diff --git a/app/Factory/RecurringExpenseFactory.php b/app/Factory/RecurringExpenseFactory.php index 08562266f9c8..bf72ac0997ed 100644 --- a/app/Factory/RecurringExpenseFactory.php +++ b/app/Factory/RecurringExpenseFactory.php @@ -21,6 +21,7 @@ class RecurringExpenseFactory $recurring_expense->user_id = $user_id; $recurring_expense->company_id = $company_id; $recurring_expense->is_deleted = false; + $recurring_expense->invoice_documents = false; $recurring_expense->should_be_invoiced = false; $recurring_expense->tax_name1 = ''; $recurring_expense->tax_rate1 = 0; @@ -28,6 +29,9 @@ class RecurringExpenseFactory $recurring_expense->tax_rate2 = 0; $recurring_expense->tax_name3 = ''; $recurring_expense->tax_rate3 = 0; + $recurring_expense->tax_amount1 = 0; + $recurring_expense->tax_amount2 = 0; + $recurring_expense->tax_amount3 = 0; $recurring_expense->date = null; $recurring_expense->payment_date = null; $recurring_expense->amount = 0; @@ -39,6 +43,8 @@ class RecurringExpenseFactory $recurring_expense->custom_value2 = ''; $recurring_expense->custom_value3 = ''; $recurring_expense->custom_value4 = ''; + $recurring_expense->uses_inclusive_taxes = true; + $recurring_expense->calculate_tax_by_amount = true; return $recurring_expense; } diff --git a/app/Jobs/Cron/RecurringExpensesCron.php b/app/Jobs/Cron/RecurringExpensesCron.php index 707cdbe3843c..a08f4eeedbeb 100644 --- a/app/Jobs/Cron/RecurringExpensesCron.php +++ b/app/Jobs/Cron/RecurringExpensesCron.php @@ -11,15 +11,18 @@ namespace App\Jobs\Cron; +use App\Factory\RecurringExpenseToExpenseFactory; use App\Jobs\RecurringInvoice\SendRecurring; use App\Libraries\MultiDB; use App\Models\RecurringExpense; +use App\Utils\Traits\GeneratesCounter; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Support\Carbon; class RecurringExpensesCron { use Dispatchable; + use GeneratesCounter; public $tries = 1; @@ -82,7 +85,11 @@ class RecurringExpensesCron private function generateExpense(RecurringExpense $recurring_expense) { + $expense = RecurringExpenseToExpenseFactory::create($recurring_expense); + $expense->save(); + $expense->number = $this->getNextExpenseNumber($expense); + $expense->save(); } - + } diff --git a/database/migrations/2021_08_23_101529_recurring_expenses_schema.php b/database/migrations/2021_08_23_101529_recurring_expenses_schema.php index 19d43dd3b43f..42d90a8d6927 100644 --- a/database/migrations/2021_08_23_101529_recurring_expenses_schema.php +++ b/database/migrations/2021_08_23_101529_recurring_expenses_schema.php @@ -37,7 +37,7 @@ class RecurringExpensesSchema extends Migration $table->date('date')->nullable(); $table->date('payment_date')->nullable(); $table->boolean('should_be_invoiced')->default(false); - $table->boolean('invoice_documents')->default(); + $table->boolean('invoice_documents')->default(false); $table->string('transaction_id')->nullable(); $table->string('custom_value1')->nullable(); $table->string('custom_value2')->nullable(); @@ -46,14 +46,14 @@ class RecurringExpensesSchema extends Migration $table->unsignedInteger('category_id')->nullable(); $table->boolean('calculate_tax_by_amount')->default(false); - $table->decimal('tax_amount1', 20, 6); - $table->decimal('tax_amount2', 20, 6); - $table->decimal('tax_amount3', 20, 6); - $table->decimal('tax_rate1', 20, 6); - $table->decimal('tax_rate2', 20, 6); - $table->decimal('tax_rate3', 20, 6); - $table->decimal('amount', 20, 6); - $table->decimal('foreign_amount', 20, 6); + $table->decimal('tax_amount1', 20, 6)->nullable(); + $table->decimal('tax_amount2', 20, 6)->nullable(); + $table->decimal('tax_amount3', 20, 6)->nullable(); + $table->decimal('tax_rate1', 20, 6)->nullable(); + $table->decimal('tax_rate2', 20, 6)->nullable(); + $table->decimal('tax_rate3', 20, 6)->nullable(); + $table->decimal('amount', 20, 6)->nullable(); + $table->decimal('foreign_amount', 20, 6)->nullable(); $table->decimal('exchange_rate', 20, 6)->default(1); $table->unsignedInteger('assigned_user_id')->nullable(); $table->string('number')->nullable(); diff --git a/tests/Unit/RecurringExpenseCloneTest.php b/tests/Unit/RecurringExpenseCloneTest.php new file mode 100644 index 000000000000..6dee502b112c --- /dev/null +++ b/tests/Unit/RecurringExpenseCloneTest.php @@ -0,0 +1,69 @@ +faker = \Faker\Factory::create(); + + } + + public function testBadBase64String() + { + $account = Account::factory()->create(); + $user = User::factory()->create(['account_id' => $account->id, 'email' => $this->faker->unique()->safeEmail]); + $company = Company::factory()->create(['account_id' => $account->id]); + + $client = Client::factory()->create([ + 'user_id' => $user->id, + 'company_id' => $company->id, + ]); + + $recurring_expense = RecurringExpenseFactory::create($company->id, $user->id); + $recurring_expense->date = now(); + $recurring_expense->amount = 10; + $recurring_expense->foreign_amount = 20; + $recurring_expense->exchange_rate = 0.5; + $recurring_expense->private_notes = "private"; + $recurring_expense->public_notes = "public"; + $recurring_expense->custom_value4 = "custom4"; + $recurring_expense->should_be_invoiced = true; + + $recurring_expense->save(); + + $expense = RecurringExpenseToExpenseFactory::create($recurring_expense); + $expense->save(); + + $this->assertNotNull($expense); + $this->assertEquals(20, $expense->foreign_amount); + $this->assertEquals(10, $expense->amount); + } + +} \ No newline at end of file