diff --git a/app/DataMapper/CompanySettings.php b/app/DataMapper/CompanySettings.php index 77f3116f7faa..d295d93db01f 100644 --- a/app/DataMapper/CompanySettings.php +++ b/app/DataMapper/CompanySettings.php @@ -62,6 +62,7 @@ class CompanySettings extends BaseSettings public $custom_message_unapproved_quote = ''; public $auto_archive_quote = false; public $auto_convert_quote = false; + public $auto_email_invoice = true; public $inclusive_taxes = false; public $quote_footer = ''; @@ -218,6 +219,7 @@ class CompanySettings extends BaseSettings public static $casts = [ + 'auto_email_invoice' => 'bool', 'reminder_send_time' => 'int', 'email_sending_method' => 'string', 'gmail_sending_user_id' => 'string', diff --git a/app/DataMapper/InvoiceItem.php b/app/DataMapper/InvoiceItem.php index 9327403f58cc..7ec375a5e24f 100644 --- a/app/DataMapper/InvoiceItem.php +++ b/app/DataMapper/InvoiceItem.php @@ -52,7 +52,7 @@ class InvoiceItem public $custom_value4 = ''; - public $invoice_item_type_id = 1; + public $invoice_item_type_id = 1; //1 = product, 2 = service public static $casts = [ 'invoice_item_type_id' => 'string', diff --git a/app/Jobs/Product/UpdateOrCreateProduct.php b/app/Jobs/Product/UpdateOrCreateProduct.php new file mode 100644 index 000000000000..04ee4ab865a5 --- /dev/null +++ b/app/Jobs/Product/UpdateOrCreateProduct.php @@ -0,0 +1,81 @@ +products = $products; + $this->invoice = $invoice; + + } + + /** + * Execute the job. + * + * + * @return void + */ + public function handle() + { + + foreach($this->products as $item) + { + + $product = Product::firstOrNew(['product_key' => $item->product_key, 'company_id' => $this->invoice->company->id]); + + $product->product_key = $item->product_key; + $product->notes = $item->notes; + $product->cost = $item->cost; + $product->tax_name1 = $item->tax_name1; + $product->tax_rate1 = $item->tax_rate1; + $product->tax_name2 = $item->tax_name2; + $product->tax_rate2 = $item->tax_rate2; + $product->custom_value1 = $item->custom_value1; + $product->custom_value2 = $item->custom_value2; + $product->custom_value3 = $item->custom_value3; + $product->custom_value4 = $item->custom_value4; + $product->user_id = $this->invoice->user_id; + $product->company_id = $this->invoice->company_id; + $product->project_id = $this->invoice->project_id; + $product->vendor_id = $this->invoice->vendor_id; + $product->save(); + + } + + } + +} diff --git a/app/Models/Client.php b/app/Models/Client.php index f79bdb54e862..de3f025b30bf 100644 --- a/app/Models/Client.php +++ b/app/Models/Client.php @@ -132,7 +132,7 @@ class Client extends BaseModel public function activities() { - return $this->hasMany(Activity::class, 'id', 'client_id'); + return $this->hasMany(Activity::class); } public function contacts() diff --git a/app/Models/Company.php b/app/Models/Company.php index 32b45740af37..c8c976c8af6f 100644 --- a/app/Models/Company.php +++ b/app/Models/Company.php @@ -67,6 +67,7 @@ class Company extends BaseModel 'custom_surcharge_taxes2', 'custom_surcharge_taxes3', 'custom_surcharge_taxes4', + 'show_product_details', ]; diff --git a/app/Models/InvoiceInvitation.php b/app/Models/InvoiceInvitation.php index b3088ade4312..37d1125898f4 100644 --- a/app/Models/InvoiceInvitation.php +++ b/app/Models/InvoiceInvitation.php @@ -30,6 +30,10 @@ class InvoiceInvitation extends BaseModel 'client_contact_id', ]; + protected $with = [ + 'company', + ]; + public function entityType() { return Invoice::class; diff --git a/app/Repositories/InvoiceRepository.php b/app/Repositories/InvoiceRepository.php index e51bd7fbdc7c..bd98f09e0067 100644 --- a/app/Repositories/InvoiceRepository.php +++ b/app/Repositories/InvoiceRepository.php @@ -18,6 +18,7 @@ use App\Helpers\Invoice\InvoiceSum; use App\Jobs\Company\UpdateCompanyLedgerWithInvoice; use App\Jobs\Invoice\ApplyInvoiceNumber; use App\Jobs\Invoice\CreateInvoiceInvitations; +use App\Jobs\Product\UpdateOrCreateProduct; use App\Listeners\Invoice\CreateInvoiceInvitation; use App\Models\ClientContact; use App\Models\Invoice; @@ -116,10 +117,6 @@ class InvoiceRepository extends BaseRepository $invoice = $invoice->calc()->getInvoice(); - // $invoice_calc = new InvoiceSum($invoice, $invoice->settings); - - // $invoice = $invoice_calc->build()->getInvoice(); - $invoice->save(); $finished_amount = $invoice->amount; @@ -130,6 +127,9 @@ class InvoiceRepository extends BaseRepository $invoice = ApplyInvoiceNumber::dispatchNow($invoice, $invoice->client->getMergedSettings()); + if($invoice->company->update_products !== false) + UpdateOrCreateProduct::dispatch($invoice->line_items, $invoice); + return $invoice->fresh(); }