mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-05-24 02:14:21 -04:00
Recurring Quotes Tests
This commit is contained in:
parent
bab9f222ff
commit
06157e95a6
@ -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
|
||||
|
||||
|
57
app/Factory/QuoteToRecurringQuoteFactory.php
Normal file
57
app/Factory/QuoteToRecurringQuoteFactory.php
Normal 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;
|
||||
}
|
||||
}
|
60
app/Factory/RecurringQuoteToQuoteFactory.php
Normal file
60
app/Factory/RecurringQuoteToQuoteFactory.php
Normal 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;
|
||||
}
|
||||
}
|
@ -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.
|
||||
*
|
||||
|
@ -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),
|
||||
|
@ -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');
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user