mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-05-31 08:54:34 -04:00
Recurring expense send date calculations
This commit is contained in:
parent
f35ad6a5a3
commit
88c4fe0147
@ -164,4 +164,77 @@ class RecurringExpense extends BaseModel
|
||||
}
|
||||
}
|
||||
|
||||
public function recurringDates()
|
||||
{
|
||||
|
||||
/* Return early if nothing to send back! */
|
||||
if ($this->status_id == RecurringInvoice::STATUS_COMPLETED ||
|
||||
$this->remaining_cycles == 0 ||
|
||||
!$this->next_send_date) {
|
||||
return [];
|
||||
}
|
||||
|
||||
/* Endless - lets send 10 back*/
|
||||
$iterations = $this->remaining_cycles;
|
||||
|
||||
if ($this->remaining_cycles == -1) {
|
||||
$iterations = 10;
|
||||
}
|
||||
|
||||
$data = [];
|
||||
|
||||
if (!Carbon::parse($this->next_send_date)) {
|
||||
return $data;
|
||||
}
|
||||
|
||||
$next_send_date = Carbon::parse($this->next_send_date)->copy();
|
||||
|
||||
for ($x=0; $x<$iterations; $x++) {
|
||||
// we don't add the days... we calc the day of the month!!
|
||||
$next_due_date = $this->nextDateByFrequency($next_send_date);
|
||||
|
||||
$data[] = [
|
||||
'send_date' => $next_send_date->format('Y-m-d'),
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function nextDateByFrequency($date)
|
||||
{
|
||||
$offset = $this->client->timezone_offset();
|
||||
|
||||
switch ($this->frequency_id) {
|
||||
case RecurringInvoice::FREQUENCY_DAILY:
|
||||
return $date->startOfDay()->addDay()->addSeconds($offset);
|
||||
case RecurringInvoice::FREQUENCY_WEEKLY:
|
||||
return $date->startOfDay()->addWeek()->addSeconds($offset);
|
||||
case RecurringInvoice::FREQUENCY_TWO_WEEKS:
|
||||
return $date->startOfDay()->addWeeks(2)->addSeconds($offset);
|
||||
case RecurringInvoice::FREQUENCY_FOUR_WEEKS:
|
||||
return $date->startOfDay()->addWeeks(4)->addSeconds($offset);
|
||||
case RecurringInvoice::FREQUENCY_MONTHLY:
|
||||
return $date->startOfDay()->addMonthNoOverflow()->addSeconds($offset);
|
||||
case RecurringInvoice::FREQUENCY_TWO_MONTHS:
|
||||
return $date->startOfDay()->addMonthsNoOverflow(2)->addSeconds($offset);
|
||||
case RecurringInvoice::FREQUENCY_THREE_MONTHS:
|
||||
return $date->startOfDay()->addMonthsNoOverflow(3)->addSeconds($offset);
|
||||
case RecurringInvoice::FREQUENCY_FOUR_MONTHS:
|
||||
return $date->startOfDay()->addMonthsNoOverflow(4)->addSeconds($offset);
|
||||
case RecurringInvoice::FREQUENCY_SIX_MONTHS:
|
||||
return $date->addMonthsNoOverflow(6)->addSeconds($offset);
|
||||
case RecurringInvoice::FREQUENCY_ANNUALLY:
|
||||
return $date->startOfDay()->addYear()->addSeconds($offset);
|
||||
case RecurringInvoice::FREQUENCY_TWO_YEARS:
|
||||
return $date->startOfDay()->addYears(2)->addSeconds($offset);
|
||||
case RecurringInvoice::FREQUENCY_THREE_YEARS:
|
||||
return $date->startOfDay()->addYears(3)->addSeconds($offset);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ class RecurringExpenseTransformer extends EntityTransformer
|
||||
*/
|
||||
public function transform(RecurringExpense $recurring_expense)
|
||||
{
|
||||
return [
|
||||
$data = [
|
||||
'id' => $this->encodePrimaryKey($recurring_expense->id),
|
||||
'user_id' => $this->encodePrimaryKey($recurring_expense->user_id),
|
||||
'assigned_user_id' => $this->encodePrimaryKey($recurring_expense->assigned_user_id),
|
||||
@ -102,5 +102,10 @@ class RecurringExpenseTransformer extends EntityTransformer
|
||||
'last_sent_date' => $recurring_expense->last_sent_date ?: '',
|
||||
'next_send_date' => $recurring_expense->next_send_date ?: '',
|
||||
];
|
||||
|
||||
if(request()->has('show_dates') && request()->query('show_dates') == 'true')
|
||||
$data['recurring_dates'] = (array) $recurring_expense->recurringDates();
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user