Email timing offset

This commit is contained in:
= 2021-06-10 21:25:47 +10:00
parent 769ab49458
commit 99d6d1c516
3 changed files with 28 additions and 13 deletions

View File

@ -65,6 +65,8 @@ class CompanySettings extends BaseSettings
public $auto_convert_quote = true; //@implemented public $auto_convert_quote = true; //@implemented
public $auto_email_invoice = true; //@only used for Recurring Invoices, if set to false, we never send? 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 $inclusive_taxes = false; //@implemented
public $quote_footer = ''; //@implmented public $quote_footer = ''; //@implmented
@ -266,6 +268,7 @@ class CompanySettings extends BaseSettings
public $hide_empty_columns_on_pdf = false; public $hide_empty_columns_on_pdf = false;
public static $casts = [ public static $casts = [
'entity_send_time' => 'int',
'shared_invoice_credit_counter' => 'bool', 'shared_invoice_credit_counter' => 'bool',
'reply_to_name' => 'string', 'reply_to_name' => 'string',
'hide_empty_columns_on_pdf' => 'bool', 'hide_empty_columns_on_pdf' => 'bool',

View File

@ -30,6 +30,7 @@ use App\Transformers\RecurringInvoiceTransformer;
use App\Utils\Ninja; use App\Utils\Ninja;
use App\Utils\Traits\MakesHash; use App\Utils\Traits\MakesHash;
use App\Utils\Traits\SavesDocuments; use App\Utils\Traits\SavesDocuments;
use Carbon\Carbon;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Response; 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))); 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); return $this->itemResponse($recurring_invoice);
} }

View File

@ -220,34 +220,36 @@ class RecurringInvoice extends BaseModel
{ {
if (!$this->next_send_date) { if (!$this->next_send_date) {
return null; 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) { switch ($this->frequency_id) {
case self::FREQUENCY_DAILY: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: default:
return null; return null;
} }