From 769ab49458c14eeac8d6cd6f982e3756d31a58c6 Mon Sep 17 00:00:00 2001 From: = Date: Thu, 10 Jun 2021 20:18:01 +1000 Subject: [PATCH 1/3] Force client country if none set --- app/Http/Controllers/ClientController.php | 9 +++++++++ app/Repositories/ClientRepository.php | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/ClientController.php b/app/Http/Controllers/ClientController.php index cd18672eb1bb..ca04fe5a3d0a 100644 --- a/app/Http/Controllers/ClientController.php +++ b/app/Http/Controllers/ClientController.php @@ -379,6 +379,15 @@ class ClientController extends BaseController $client->load('contacts', 'primary_contact'); + /* Set the client country to the company if none is set */ + if(!$client->country_id && strlen($client->company->settings->country_id) > 1){ + + $client->country_id = $client->company->settings->country_id; + + $client->save(); + + } + $this->uploadLogo($request->file('company_logo'), $client->company, $client); event(new ClientWasCreated($client, $client->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null))); diff --git a/app/Repositories/ClientRepository.php b/app/Repositories/ClientRepository.php index 4fc82a56dc4e..00bab25de267 100644 --- a/app/Repositories/ClientRepository.php +++ b/app/Repositories/ClientRepository.php @@ -67,7 +67,7 @@ class ClientRepository extends BaseRepository if (empty($data['name'])) { $data['name'] = $client->present()->name(); } - + $client->save(); $this->contact_repo->save($data, $client); From 99d6d1c51692d00b737228346010d91f76f399f0 Mon Sep 17 00:00:00 2001 From: = Date: Thu, 10 Jun 2021 21:25:47 +1000 Subject: [PATCH 2/3] Email timing offset --- app/DataMapper/CompanySettings.php | 3 ++ .../RecurringInvoiceController.php | 10 +++++++ app/Models/RecurringInvoice.php | 28 ++++++++++--------- 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/app/DataMapper/CompanySettings.php b/app/DataMapper/CompanySettings.php index 2c8d64296329..b4cdb788ca1a 100644 --- a/app/DataMapper/CompanySettings.php +++ b/app/DataMapper/CompanySettings.php @@ -65,6 +65,8 @@ class CompanySettings extends BaseSettings public $auto_convert_quote = true; //@implemented public $auto_email_invoice = true; //@only used for Recurring Invoices, if set to false, we never send? + public $entity_send_time = 0; + public $inclusive_taxes = false; //@implemented public $quote_footer = ''; //@implmented @@ -266,6 +268,7 @@ class CompanySettings extends BaseSettings public $hide_empty_columns_on_pdf = false; public static $casts = [ + 'entity_send_time' => 'int', 'shared_invoice_credit_counter' => 'bool', 'reply_to_name' => 'string', 'hide_empty_columns_on_pdf' => 'bool', diff --git a/app/Http/Controllers/RecurringInvoiceController.php b/app/Http/Controllers/RecurringInvoiceController.php index 93bf65156006..eca25169e0f4 100644 --- a/app/Http/Controllers/RecurringInvoiceController.php +++ b/app/Http/Controllers/RecurringInvoiceController.php @@ -30,6 +30,7 @@ use App\Transformers\RecurringInvoiceTransformer; use App\Utils\Ninja; use App\Utils\Traits\MakesHash; use App\Utils\Traits\SavesDocuments; +use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Http\Response; @@ -205,6 +206,15 @@ class RecurringInvoiceController extends BaseController event(new RecurringInvoiceWasCreated($recurring_invoice, $recurring_invoice->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null))); + if($recurring_invoice->client->getSetting('entity_send_time') > 0){ + + $timezone = $this->company->timezone(); + $offset = $timezone->utc_offset + ($this->client->getSetting('entity_send_time') * 3600); + + $recurring_invoice->next_send_date = Carbon::parse($recurring_invoice->next_send_date)->addSeconds($offset); + $recurring_invoice->save(); + } + return $this->itemResponse($recurring_invoice); } diff --git a/app/Models/RecurringInvoice.php b/app/Models/RecurringInvoice.php index 44b9427e5002..806c15c8a6b4 100644 --- a/app/Models/RecurringInvoice.php +++ b/app/Models/RecurringInvoice.php @@ -220,34 +220,36 @@ class RecurringInvoice extends BaseModel { if (!$this->next_send_date) { return null; - // $this->next_send_date = now()->format('Y-m-d'); } + + $timezone = $this->company->timezone(); + $offset = $timezone->utc_offset + ($this->client->getSetting('entity_send_time') * 3600); switch ($this->frequency_id) { case self::FREQUENCY_DAILY: - return Carbon::parse($this->next_send_date)->addDay(); + return Carbon::parse($this->next_send_date)->startOfDay()->addDay()->addSeconds($offset); case self::FREQUENCY_WEEKLY: - return Carbon::parse($this->next_send_date)->addWeek(); + return Carbon::parse($this->next_send_date)->startOfDay()->addWeek()->addSeconds($offset); case self::FREQUENCY_TWO_WEEKS: - return Carbon::parse($this->next_send_date)->addWeeks(2); + return Carbon::parse($this->next_send_date)->startOfDay()->addWeeks(2)->addSeconds($offset); case self::FREQUENCY_FOUR_WEEKS: - return Carbon::parse($this->next_send_date)->addWeeks(4); + return Carbon::parse($this->next_send_date)->startOfDay()->addWeeks(4)->addSeconds($offset); case self::FREQUENCY_MONTHLY: - return Carbon::parse($this->next_send_date)->addMonthNoOverflow(); + return Carbon::parse($this->next_send_date)->startOfDay()->addMonthNoOverflow()->addSeconds($offset); case self::FREQUENCY_TWO_MONTHS: - return Carbon::parse($this->next_send_date)->addMonthsNoOverflow(2); + return Carbon::parse($this->next_send_date)->startOfDay()->addMonthsNoOverflow(2)->addSeconds($offset); case self::FREQUENCY_THREE_MONTHS: - return Carbon::parse($this->next_send_date)->addMonthsNoOverflow(3); + return Carbon::parse($this->next_send_date)->startOfDay()->addMonthsNoOverflow(3)->addSeconds($offset); case self::FREQUENCY_FOUR_MONTHS: - return Carbon::parse($this->next_send_date)->addMonthsNoOverflow(4); + return Carbon::parse($this->next_send_date)->startOfDay()->addMonthsNoOverflow(4)->addSeconds($offset); case self::FREQUENCY_SIX_MONTHS: - return Carbon::parse($this->next_send_date)->addMonthsNoOverflow(6); + return Carbon::parse($this->next_send_date)->startOfDay()->addMonthsNoOverflow(6)->addSeconds($offset); case self::FREQUENCY_ANNUALLY: - return Carbon::parse($this->next_send_date)->addYear(); + return Carbon::parse($this->next_send_date)->startOfDay()->addYear()->addSeconds($offset); case self::FREQUENCY_TWO_YEARS: - return Carbon::parse($this->next_send_date)->addYears(2); + return Carbon::parse($this->next_send_date)->startOfDay()->addYears(2)->addSeconds($offset); case self::FREQUENCY_THREE_YEARS: - return Carbon::parse($this->next_send_date)->addYears(3); + return Carbon::parse($this->next_send_date)->startOfDay()->addYears(3)->addSeconds($offset); default: return null; } From 1bc32c2aca2c86cdf5c4bcb1e69e2240d31763c9 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Fri, 11 Jun 2021 07:34:03 +1000 Subject: [PATCH 3/3] Working on Timezone Offsets --- .../Controllers/RecurringInvoiceController.php | 11 ++++------- app/Jobs/Util/Import.php | 2 +- app/Models/Client.php | 14 ++++++++++++++ app/Models/RecurringInvoice.php | 3 +-- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/app/Http/Controllers/RecurringInvoiceController.php b/app/Http/Controllers/RecurringInvoiceController.php index eca25169e0f4..2a1751813dbb 100644 --- a/app/Http/Controllers/RecurringInvoiceController.php +++ b/app/Http/Controllers/RecurringInvoiceController.php @@ -206,14 +206,11 @@ class RecurringInvoiceController extends BaseController event(new RecurringInvoiceWasCreated($recurring_invoice, $recurring_invoice->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null))); - if($recurring_invoice->client->getSetting('entity_send_time') > 0){ - $timezone = $this->company->timezone(); - $offset = $timezone->utc_offset + ($this->client->getSetting('entity_send_time') * 3600); - - $recurring_invoice->next_send_date = Carbon::parse($recurring_invoice->next_send_date)->addSeconds($offset); - $recurring_invoice->save(); - } + $offset = $recurring_invoice->client->timezone_offset(); + $recurring_invoice->next_send_date = Carbon::parse($recurring_invoice->next_send_date)->addSeconds($offset); + $recurring_invoice->save(); + return $this->itemResponse($recurring_invoice); } diff --git a/app/Jobs/Util/Import.php b/app/Jobs/Util/Import.php index 5b722eb19408..5391623cefd7 100644 --- a/app/Jobs/Util/Import.php +++ b/app/Jobs/Util/Import.php @@ -929,7 +929,7 @@ class Import implements ShouldQueue $modified['client_id'] = $this->transformId('clients', $resource['client_id']); - if(array_key_exists('invoice_id', $resource) && $this->tryTransformingId('invoices', $resource['invoice_id'])) + if(array_key_exists('invoice_id', $resource) && isset($resource['invoice_id']) && $this->tryTransformingId('invoices', $resource['invoice_id'])) $modified['invoice_id'] = $this->transformId('invoices', $resource['invoice_id']); $modified['user_id'] = $this->processUserId($resource); diff --git a/app/Models/Client.php b/app/Models/Client.php index 92819b011377..f3f3fa374aad 100644 --- a/app/Models/Client.php +++ b/app/Models/Client.php @@ -695,4 +695,18 @@ class Client extends BaseModel implements HasLocalePreference { return $this->hasMany(Payment::class); } + + public function timezone_offset() + { + $entity_send_time = $this->getSetting('entity_send_time'); + + if($entity_send_time == 0) + return 0; + + $timezone = $this->company->timezone(); + + $offset = $timezone->utc_offset + ($entity_send_time * 3600); + + return $offset; + } } diff --git a/app/Models/RecurringInvoice.php b/app/Models/RecurringInvoice.php index 806c15c8a6b4..c8db14421780 100644 --- a/app/Models/RecurringInvoice.php +++ b/app/Models/RecurringInvoice.php @@ -222,8 +222,7 @@ class RecurringInvoice extends BaseModel return null; } - $timezone = $this->company->timezone(); - $offset = $timezone->utc_offset + ($this->client->getSetting('entity_send_time') * 3600); + $offset = $this->client->timezone_offset(); switch ($this->frequency_id) { case self::FREQUENCY_DAILY: