From 8de96b6d05aa0549d790598f5a7038c9e555d7ef Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Thu, 15 Mar 2018 11:49:44 +0200 Subject: [PATCH] Make recurrence end date inclusive --- app/Models/Invoice.php | 35 --------------------------- app/Models/Traits/HasRecurrence.php | 37 ++++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/app/Models/Invoice.php b/app/Models/Invoice.php index c9907fd80e0d..928087f85b39 100644 --- a/app/Models/Invoice.php +++ b/app/Models/Invoice.php @@ -1093,41 +1093,6 @@ class Invoice extends EntityModel implements BalanceAffecting return $this; } - /** - * @throws \Recurr\Exception\MissingData - * - * @return bool|\Recurr\RecurrenceCollection - */ - public function getSchedule() - { - if (! $this->start_date || ! $this->is_recurring || ! $this->frequency_id) { - return false; - } - - $startDate = $this->getOriginal('last_sent_date') ?: $this->getOriginal('start_date'); - $startDate .= ' ' . $this->account->recurring_hour . ':00:00'; - $startDate = $this->account->getDateTime($startDate); - $endDate = $this->end_date ? $this->account->getDateTime($this->getOriginal('end_date')) : null; - $timezone = $this->account->getTimezone(); - - $rule = $this->getRecurrenceRule(); - $rule = new \Recurr\Rule("{$rule}", $startDate, $endDate, $timezone); - - // Fix for months with less than 31 days - $transformerConfig = new \Recurr\Transformer\ArrayTransformerConfig(); - $transformerConfig->enableLastDayOfMonthFix(); - - $transformer = new \Recurr\Transformer\ArrayTransformer(); - $transformer->setConfig($transformerConfig); - $dates = $transformer->transform($rule); - - if (count($dates) < 2) { - return false; - } - - return $dates; - } - /** * @param null $invoice_date * diff --git a/app/Models/Traits/HasRecurrence.php b/app/Models/Traits/HasRecurrence.php index ebe78533b5cf..2888e54bc014 100644 --- a/app/Models/Traits/HasRecurrence.php +++ b/app/Models/Traits/HasRecurrence.php @@ -116,6 +116,41 @@ trait HasRecurrence } } + /** + * @throws \Recurr\Exception\MissingData + * + * @return bool|\Recurr\RecurrenceCollection + */ + public function getSchedule() + { + if (! $this->start_date || ! $this->frequency_id) { + return false; + } + + $startDate = $this->getOriginal('last_sent_date') ?: $this->getOriginal('start_date'); + $startDate .= ' ' . $this->account->recurring_hour . ':00:00'; + $startDate = $this->account->getDateTime($startDate); + $endDate = $this->end_date ? $this->account->getDateTime($this->getOriginal('end_date')) : null; + $timezone = $this->account->getTimezone(); + + $rule = $this->getRecurrenceRule(); + $rule = new \Recurr\Rule("{$rule}", $startDate); + + // Fix for months with less than 31 days + $transformerConfig = new \Recurr\Transformer\ArrayTransformerConfig(); + $transformerConfig->enableLastDayOfMonthFix(); + + $transformer = new \Recurr\Transformer\ArrayTransformer(); + $transformer->setConfig($transformerConfig); + $dates = $transformer->transform($rule); + + if (count($dates) < 2) { + return false; + } + + return $dates; + } + /** * @return null */ @@ -183,7 +218,7 @@ trait HasRecurrence } if ($this->end_date) { - $rule .= 'UNTIL=' . $this->getOriginal('end_date'); + $rule .= 'UNTIL=' . $this->getOriginal('end_date') . ' 24:00:00'; } return $rule;