Recurring Quotes Tests

This commit is contained in:
David Bomba 2021-08-24 15:32:22 +10:00
parent bab9f222ff
commit 06157e95a6
7 changed files with 159 additions and 7 deletions

View File

@ -101,6 +101,9 @@ class CompanySettings extends BaseSettings
public $recurring_expense_number_pattern = '';
public $recurring_expense_number_counter = 1;
public $recurring_quote_number_pattern = '';
public $recurring_quote_number_counter = 1;
public $vendor_number_pattern = ''; //@implemented
public $vendor_number_counter = 1; //@implemented

View File

@ -0,0 +1,57 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com).
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://www.elastic.co/licensing/elastic-license
*/
namespace App\Factory;
use App\Models\Quote;
use App\Models\RecurringQuote;
class QuoteToRecurringQuoteFactory
{
public static function create(Quote $quote) :RecurringQuote
{
$recurring_quote = new RecurringQuote;
$recurring_quote->status_id = RecurringQuote::STATUS_DRAFT;
$recurring_quote->discount = $quote->discount;
$recurring_quote->number = '';
$recurring_quote->is_amount_discount = $quote->is_amount_discount;
$recurring_quote->po_number = $quote->po_number;
$recurring_quote->footer = $quote->footer;
$recurring_quote->terms = $quote->terms;
$recurring_quote->public_notes = $quote->public_notes;
$recurring_quote->private_notes = $quote->private_notes;
$recurring_quote->date = date_create()->format($quote->client->date_format());
$recurring_quote->due_date = $quote->due_date; //todo calculate based on terms
$recurring_quote->is_deleted = $quote->is_deleted;
$recurring_quote->line_items = $quote->line_items;
$recurring_quote->tax_name1 = $quote->tax_name1;
$recurring_quote->tax_rate1 = $quote->tax_rate1;
$recurring_quote->tax_name2 = $quote->tax_name2;
$recurring_quote->tax_rate2 = $quote->tax_rate2;
$recurring_quote->custom_value1 = $quote->custom_value1;
$recurring_quote->custom_value2 = $quote->custom_value2;
$recurring_quote->custom_value3 = $quote->custom_value3;
$recurring_quote->custom_value4 = $quote->custom_value4;
$recurring_quote->amount = $quote->amount;
// $recurring_quote->balance = $quote->balance;
$recurring_quote->user_id = $quote->user_id;
$recurring_quote->client_id = $quote->client_id;
$recurring_quote->company_id = $quote->company_id;
$recurring_quote->frequency_id = RecurringQuote::FREQUENCY_MONTHLY;
$recurring_quote->last_sent_date = null;
$recurring_quote->next_send_date = null;
$recurring_quote->remaining_cycles = 0;
$recurring_quote->paid_to_date = 0;
return $recurring_quote;
}
}

View File

@ -0,0 +1,60 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com).
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://www.elastic.co/licensing/elastic-license
*/
namespace App\Factory;
use App\Models\Client;
use App\Models\Quote;
use App\Models\RecurringQuote;
class RecurringQuoteToQuoteFactory
{
public static function create(RecurringQuote $recurring_quote, Client $client) :Quote
{
$quote = new Quote();
$quote->status_id = Quote::STATUS_DRAFT;
$quote->discount = $recurring_quote->discount;
$quote->is_amount_discount = $recurring_quote->is_amount_discount;
$quote->po_number = $recurring_quote->po_number;
$quote->footer = $recurring_quote->footer;
$quote->terms = $recurring_quote->terms;
$quote->public_notes = $recurring_quote->public_notes;
$quote->private_notes = $recurring_quote->private_notes;
//$quote->date = now()->format($client->date_format());
//$quote->due_date = $recurring_quote->calculateDueDate(now());
$quote->is_deleted = $recurring_quote->is_deleted;
$quote->line_items = $recurring_quote->line_items;
$quote->tax_name1 = $recurring_quote->tax_name1;
$quote->tax_rate1 = $recurring_quote->tax_rate1;
$quote->tax_name2 = $recurring_quote->tax_name2;
$quote->tax_rate2 = $recurring_quote->tax_rate2;
$quote->tax_name3 = $recurring_quote->tax_name3;
$quote->tax_rate3 = $recurring_quote->tax_rate3;
$quote->total_taxes = $recurring_quote->total_taxes;
$quote->subscription_id = $recurring_quote->subscription_id;
$quote->custom_value1 = $recurring_quote->custom_value1;
$quote->custom_value2 = $recurring_quote->custom_value2;
$quote->custom_value3 = $recurring_quote->custom_value3;
$quote->custom_value4 = $recurring_quote->custom_value4;
$quote->amount = $recurring_quote->amount;
// $quote->balance = $recurring_quote->balance;
$quote->user_id = $recurring_quote->user_id;
$quote->assigned_user_id = $recurring_quote->assigned_user_id;
$quote->company_id = $recurring_quote->company_id;
$quote->recurring_id = $recurring_quote->id;
$quote->client_id = $client->id;
$quote->auto_bill_enabled = $recurring_quote->auto_bill_enabled;
$quote->paid_to_date = 0;
$quote->design_id = $recurring_quote->design_id;
return $quote;
}
}

View File

@ -21,6 +21,7 @@ use App\Models\Project;
use App\Models\Quote;
use App\Models\RecurringExpense;
use App\Models\RecurringInvoice;
use App\Models\RecurringQuote;
use App\Models\Task;
use App\Models\Timezone;
use App\Models\Vendor;
@ -136,6 +137,12 @@ trait GeneratesCounter
case RecurringInvoice::class:
return 'recurring_invoice_number_counter';
break;
case RecurringQuote::class:
return 'recurring_quote_number_counter';
break;
case RecurringExpense::class:
return 'recurring_expense_number_counter';
break;
case Payment::class:
return 'payment_number_counter';
break;
@ -197,6 +204,11 @@ trait GeneratesCounter
return $this->getNextEntityNumber(RecurringInvoice::class, $client);
}
public function getNextRecurringQuoteNumber(Client $client)
{
return $this->getNextEntityNumber(RecurringQuote::class, $client);
}
/**
* Gets the next Payment number.
*

View File

@ -50,7 +50,6 @@ class RecurringQuoteFactory extends Factory
'due_date' => $this->faker->date(),
'line_items' => false,
'frequency_id' => RecurringQuote::FREQUENCY_MONTHLY,
'start_date' => $this->faker->date(),
'last_sent_date' => $this->faker->date(),
'next_send_date' => $this->faker->date(),
'remaining_cycles' => $this->faker->numberBetween(1, 10),

View File

@ -78,6 +78,27 @@ class RecurringExpensesSchema extends Migration
});
Schema::table('recurring_quotes', function ($table){
$table->string('auto_bill')->default('off');
$table->boolean('auto_bill_enabled')->default(0);
$table->decimal('paid_to_date', 20, 6)->default(0);
$table->decimal('custom_surcharge1', 20,6)->nullable();
$table->decimal('custom_surcharge2', 20,6)->nullable();
$table->decimal('custom_surcharge3', 20,6)->nullable();
$table->decimal('custom_surcharge4', 20,6)->nullable();
$table->boolean('custom_surcharge_tax1')->default(false);
$table->boolean('custom_surcharge_tax2')->default(false);
$table->boolean('custom_surcharge_tax3')->default(false);
$table->boolean('custom_surcharge_tax4')->default(false);
$table->string('due_date_days')->nullable();
$table->decimal('exchange_rate', 13, 6)->default(1);
$table->decimal('partial', 16, 4)->nullable();
$table->date('partial_due_date')->nullable();
$table->unsignedInteger('remaining_cycles')->nullable()->change();
$table->unsignedInteger('subscription_id')->nullable();
$table->dropColumn('start_date');
$table->boolean('uses_inclusive_taxes')->default(true);
});
Schema::create('recurring_quote_invitations', function ($t) {
$t->increments('id');

View File

@ -140,7 +140,7 @@ class RecurringQuotesTest extends TestCase
public function testSubscriptionIdPassesToQuote()
{
$recurring_invoice = QuoteToRecurringQuoteFactory::create($this->invoice);
$recurring_invoice = QuoteToRecurringQuoteFactory::create($this->quote);
$recurring_invoice->user_id = $this->user->id;
$recurring_invoice->next_send_date = \Carbon\Carbon::now()->addDays(10);
$recurring_invoice->status_id = RecurringQuote::STATUS_ACTIVE;
@ -148,7 +148,7 @@ class RecurringQuotesTest extends TestCase
$recurring_invoice->next_send_date = \Carbon\Carbon::now()->addDays(10);
$recurring_invoice->save();
$recurring_invoice->number = $this->getNextRecurringQuoteNumber($this->invoice->client, $this->invoice);
$recurring_invoice->number = $this->getNextRecurringQuoteNumber($this->quote->client, $this->quote);
$recurring_invoice->subscription_id = 10;
$recurring_invoice->save();
@ -159,7 +159,7 @@ class RecurringQuotesTest extends TestCase
public function testSubscriptionIdPassesToQuoteIfNull()
{
$recurring_invoice = QuoteToRecurringQuoteFactory::create($this->invoice);
$recurring_invoice = QuoteToRecurringQuoteFactory::create($this->quote);
$recurring_invoice->user_id = $this->user->id;
$recurring_invoice->next_send_date = \Carbon\Carbon::now()->addDays(10);
$recurring_invoice->status_id = RecurringQuote::STATUS_ACTIVE;
@ -167,7 +167,7 @@ class RecurringQuotesTest extends TestCase
$recurring_invoice->next_send_date = \Carbon\Carbon::now()->addDays(10);
$recurring_invoice->save();
$recurring_invoice->number = $this->getNextRecurringQuoteNumber($this->invoice->client, $this->invoice);
$recurring_invoice->number = $this->getNextRecurringQuoteNumber($this->quote->client, $this->quote);
$recurring_invoice->save();
$invoice = RecurringQuoteToQuoteFactory::create($recurring_invoice, $this->client);
@ -177,7 +177,7 @@ class RecurringQuotesTest extends TestCase
public function testSubscriptionIdPassesToQuoteIfNothingSet()
{
$recurring_invoice = QuoteToRecurringQuoteFactory::create($this->invoice);
$recurring_invoice = QuoteToRecurringQuoteFactory::create($this->quote);
$recurring_invoice->user_id = $this->user->id;
$recurring_invoice->next_send_date = \Carbon\Carbon::now()->addDays(10);
$recurring_invoice->status_id = RecurringQuote::STATUS_ACTIVE;
@ -185,7 +185,7 @@ class RecurringQuotesTest extends TestCase
$recurring_invoice->next_send_date = \Carbon\Carbon::now()->addDays(10);
$recurring_invoice->save();
$recurring_invoice->number = $this->getNextRecurringQuoteNumber($this->invoice->client, $this->invoice);
$recurring_invoice->number = $this->getNextRecurringQuoteNumber($this->quote->client, $this->quote);
$recurring_invoice->save();
$invoice = RecurringQuoteToQuoteFactory::create($recurring_invoice, $this->client);