Fixes for date range calculations

This commit is contained in:
David Bomba 2023-06-26 15:14:58 +10:00
parent 6424ed5a4b
commit 81d6dbe865
5 changed files with 30 additions and 11 deletions

View File

@ -61,7 +61,7 @@ class ChartController extends BaseController
/** @var \App\Models\User auth()->user() */ /** @var \App\Models\User auth()->user() */
$user = auth()->user(); $user = auth()->user();
$cs = new ChartService($user->company(), $user, $user->isAdmin()); $cs = new ChartService($user->company(), $user, $user->isAdmin());
return response()->json($cs->chart_summary($request->input('start_date'), $request->input('end_date')), 200); return response()->json($cs->chart_summary($request->input('start_date'), $request->input('end_date')), 200);
} }

View File

@ -12,9 +12,12 @@
namespace App\Http\Requests\Chart; namespace App\Http\Requests\Chart;
use App\Http\Requests\Request; use App\Http\Requests\Request;
use App\Utils\Traits\MakesDates;
class ShowChartRequest extends Request class ShowChartRequest extends Request
{ {
use MakesDates;
/** /**
* Determine if the user is authorized to make this request. * Determine if the user is authorized to make this request.
* *
@ -22,7 +25,10 @@ class ShowChartRequest extends Request
*/ */
public function authorize() : bool public function authorize() : bool
{ {
return auth()->user()->isAdmin(); /**@var \App\Models\User auth()->user */
$user = auth()->user();
return $user->isAdmin();
} }
public function rules() public function rules()
@ -38,14 +44,22 @@ class ShowChartRequest extends Request
{ {
$input = $this->all(); $input = $this->all();
if (! array_key_exists('start_date', $input)) { if(isset($input['date_range'])) {
$input['start_date'] = now()->subDays(20); $dates = $this->calculateStartAndEndDates($input);
$input['start_date'] = $dates[0];
$input['end_date'] = $dates[1];
} }
if (! array_key_exists('end_date', $input)) { if (! isset($input['start_date'])) {
$input['end_date'] = now(); $input['start_date'] = now()->subDays(20)->format('Y-m-d');
} }
if (! isset($input['end_date'])) {
$input['end_date'] = now()->format('Y-m-d');
}
nlog($input);
$this->replace($input); $this->replace($input);
} }
} }

View File

@ -76,6 +76,8 @@ class ChartService
$currencies = $this->getCurrencyCodes(); $currencies = $this->getCurrencyCodes();
$data = []; $data = [];
$data['start_date'] = $start_date;
$data['end_date'] = $end_date;
foreach ($currencies as $key => $value) { foreach ($currencies as $key => $value) {
$data[$key]['invoices'] = $this->getInvoiceChartQuery($start_date, $end_date, $key); $data[$key]['invoices'] = $this->getInvoiceChartQuery($start_date, $end_date, $key);
@ -96,6 +98,8 @@ class ChartService
$data = []; $data = [];
$data['currencies'] = $this->getCurrencyCodes(); $data['currencies'] = $this->getCurrencyCodes();
$data['start_date'] = $start_date;
$data['end_date'] = $end_date;
$revenue = $this->getRevenue($start_date, $end_date); $revenue = $this->getRevenue($start_date, $end_date);
$outstanding = $this->getOutstanding($start_date, $end_date); $outstanding = $this->getOutstanding($start_date, $end_date);

View File

@ -58,7 +58,8 @@ class EmailReport
public function run() public function run()
{ {
$start_end_dates = $this->calculateStartAndEndDates(); $start_end_dates = $this->calculateStartAndEndDates($this->scheduler->parameters);
$data = []; $data = [];
$data = [ $data = [

View File

@ -119,9 +119,9 @@ trait MakesDates
* *
* @return array [$start_date, $end_date]; * @return array [$start_date, $end_date];
*/ */
public function calculateStartAndEndDates(): array public function calculateStartAndEndDates(array $data): array
{ {
return match ($this->scheduler->parameters['date_range']) { return match ($data['date_range']) {
EmailStatement::LAST7 => [now()->startOfDay()->subDays(7)->format('Y-m-d'), now()->startOfDay()->format('Y-m-d')], EmailStatement::LAST7 => [now()->startOfDay()->subDays(7)->format('Y-m-d'), now()->startOfDay()->format('Y-m-d')],
EmailStatement::LAST30 => [now()->startOfDay()->subDays(30)->format('Y-m-d'), now()->startOfDay()->format('Y-m-d')], EmailStatement::LAST30 => [now()->startOfDay()->subDays(30)->format('Y-m-d'), now()->startOfDay()->format('Y-m-d')],
EmailStatement::LAST365 => [now()->startOfDay()->subDays(365)->format('Y-m-d'), now()->startOfDay()->format('Y-m-d')], EmailStatement::LAST365 => [now()->startOfDay()->subDays(365)->format('Y-m-d'), now()->startOfDay()->format('Y-m-d')],
@ -131,9 +131,9 @@ trait MakesDates
EmailStatement::LAST_QUARTER => [now()->startOfDay()->subQuarterNoOverflow()->firstOfQuarter()->format('Y-m-d'), now()->startOfDay()->subQuarterNoOverflow()->lastOfQuarter()->format('Y-m-d')], EmailStatement::LAST_QUARTER => [now()->startOfDay()->subQuarterNoOverflow()->firstOfQuarter()->format('Y-m-d'), now()->startOfDay()->subQuarterNoOverflow()->lastOfQuarter()->format('Y-m-d')],
EmailStatement::THIS_YEAR => [now()->startOfDay()->firstOfYear()->format('Y-m-d'), now()->startOfDay()->lastOfYear()->format('Y-m-d')], EmailStatement::THIS_YEAR => [now()->startOfDay()->firstOfYear()->format('Y-m-d'), now()->startOfDay()->lastOfYear()->format('Y-m-d')],
EmailStatement::LAST_YEAR => [now()->startOfDay()->subYearNoOverflow()->firstOfYear()->format('Y-m-d'), now()->startOfDay()->subYearNoOverflow()->lastOfYear()->format('Y-m-d')], EmailStatement::LAST_YEAR => [now()->startOfDay()->subYearNoOverflow()->firstOfYear()->format('Y-m-d'), now()->startOfDay()->subYearNoOverflow()->lastOfYear()->format('Y-m-d')],
EmailStatement::CUSTOM_RANGE => [$this->scheduler->parameters['start_date'], $this->scheduler->parameters['end_date']], EmailStatement::CUSTOM_RANGE => [$data['start_date'], $data['end_date']],
default => [now()->startOfDay()->firstOfMonth()->format('Y-m-d'), now()->startOfDay()->lastOfMonth()->format('Y-m-d')], default => [now()->startOfDay()->firstOfMonth()->format('Y-m-d'), now()->startOfDay()->lastOfMonth()->format('Y-m-d')],
}; };
} }
} }