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; }