Skip to content

Commit

Permalink
feat interval reset aggregators
Browse files Browse the repository at this point in the history
  • Loading branch information
inikoo committed Jan 3, 2025
1 parent 7206ffd commit 5072232
Show file tree
Hide file tree
Showing 10 changed files with 461 additions and 29 deletions.
10 changes: 5 additions & 5 deletions app/Actions/Catalogue/Shop/Hydrators/ShopHydrateSales.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,17 +34,17 @@ public function getJobMiddleware(): array
return [(new WithoutOverlapping($this->shop->id))->dontRelease()];
}

public function handle(Shop $shop): void
public function handle(Shop $shop, ?array $intervals = null, $doPreviousIntervals = null): void
{
$stats = [];
$stats = [];
$queryBase = InvoiceTransaction::where('shop_id', $shop->id)->selectRaw('sum(net_amount) as sum_aggregate ');
$stats = $this->getIntervalsData($stats, $queryBase, 'sales_');
$stats = $this->getIntervalsData($stats, $queryBase, 'sales_', $intervals, $doPreviousIntervals);

$queryBase = InvoiceTransaction::where('shop_id', $shop->id)->selectRaw('sum(grp_net_amount) as sum_aggregate');
$stats = $this->getIntervalsData($stats, $queryBase, 'sales_grp_currency_');
$stats = $this->getIntervalsData($stats, $queryBase, 'sales_grp_currency_', $intervals, $doPreviousIntervals);

$queryBase = InvoiceTransaction::where('shop_id', $shop->id)->selectRaw('sum(org_net_amount) as sum_aggregate');
$stats = $this->getIntervalsData($stats, $queryBase, 'sales_org_currency_');
$stats = $this->getIntervalsData($stats, $queryBase, 'sales_org_currency_', $intervals, $doPreviousIntervals);

$shop->salesIntervals()->update($stats);
}
Expand Down
80 changes: 80 additions & 0 deletions app/Actions/Helpers/Intervals/ResetDailyIntervals.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
<?php

/*
* Author: Raul Perusquia <raul@inikoo.com>
* Created: Fri, 03 Jan 2025 23:34:09 Malaysia Time, Kuala Lumpur, Malaysia
* Copyright (c) 2025, Raul A Perusquia Flores
*/

namespace App\Actions\Helpers\Intervals;

use App\Actions\Catalogue\Shop\Hydrators\ShopHydrateSales;
use App\Actions\SysAdmin\Group\Hydrators\GroupHydrateSales;
use App\Actions\SysAdmin\Organisation\Hydrators\OrganisationHydrateSales;
use App\Enums\DateIntervals\DateIntervalEnum;
use App\Enums\SysAdmin\Organisation\OrganisationTypeEnum;
use App\Models\Catalogue\Shop;
use App\Models\SysAdmin\Group;
use App\Models\SysAdmin\Organisation;
use Lorisleiva\Actions\Concerns\AsAction;

class ResetDailyIntervals
{
use AsAction;

protected string $signature = 'intervals:reset-day';
protected string $description = 'Reset day intervals';


public function handle(): void
{
$this->resetDailyGroups();
$this->resetDailyOrganisations();
$this->resetDailyShops();
}


protected function resetDailyGroups(): void
{
foreach (Group::all() as $group) {
GroupHydrateSales::dispatch(
group: $group,
intervals: [
DateIntervalEnum::YESTERDAY,
DateIntervalEnum::TODAY
],
doPreviousPeriods: []
);
}
}

protected function resetDailyOrganisations(): void
{
foreach (Organisation::whereNot('type', OrganisationTypeEnum::AGENT)->get() as $organisation) {
OrganisationHydrateSales::dispatch(
organisation: $organisation,
intervals: [
DateIntervalEnum::YESTERDAY,
DateIntervalEnum::TODAY
],
doPreviousPeriods: []
);
}
}

protected function resetDailyShops(): void
{
foreach (Shop::all() as $shop) {
ShopHydrateSales::dispatch(
shop: $shop,
intervals: [
DateIntervalEnum::YESTERDAY,
DateIntervalEnum::TODAY
],
doPreviousPeriods: []
);
}
}


}
82 changes: 82 additions & 0 deletions app/Actions/Helpers/Intervals/ResetMonthlyIntervals.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
<?php

/*
* Author: Raul Perusquia <raul@inikoo.com>
* Created: Sat, 04 Jan 2025 00:00:58 Malaysia Time, Kuala Lumpur, Malaysia
* Copyright (c) 2025, Raul A Perusquia Flores
*/

namespace App\Actions\Helpers\Intervals;

use App\Actions\Catalogue\Shop\Hydrators\ShopHydrateSales;
use App\Actions\SysAdmin\Group\Hydrators\GroupHydrateSales;
use App\Actions\SysAdmin\Organisation\Hydrators\OrganisationHydrateSales;
use App\Enums\DateIntervals\DateIntervalEnum;
use App\Enums\SysAdmin\Organisation\OrganisationTypeEnum;
use App\Models\Catalogue\Shop;
use App\Models\SysAdmin\Group;
use App\Models\SysAdmin\Organisation;
use Lorisleiva\Actions\Concerns\AsAction;

class ResetMonthlyIntervals
{
use AsAction;

protected string $signature = 'intervals:reset-month';
protected string $description = 'Reset monthly intervals';


public function handle(): void
{
$this->resetMonthlyGroups();
$this->resetMonthlyOrganisations();


$this->resetMonthlyShops();
}


protected function resetMonthlyGroups(): void
{
foreach (Group::all() as $group) {
GroupHydrateSales::dispatch(
group: $group,
intervals: [
DateIntervalEnum::LAST_MONTH,
DateIntervalEnum::MONTH_TO_DAY
],
doPreviousPeriods: []
);
}
}

protected function resetMonthlyOrganisations(): void
{
foreach (Organisation::whereNot('type', OrganisationTypeEnum::AGENT)->get() as $organisation) {
OrganisationHydrateSales::dispatch(
organisation: $organisation,
intervals: [
DateIntervalEnum::LAST_MONTH,
DateIntervalEnum::MONTH_TO_DAY
],
doPreviousPeriods: []
);
}
}

protected function resetMonthlyShops(): void
{
foreach (Shop::all() as $shop) {
ShopHydrateSales::dispatch(
shop: $shop,
intervals: [
DateIntervalEnum::LAST_MONTH,
DateIntervalEnum::MONTH_TO_DAY
],
doPreviousPeriods: []
);
}
}


}
77 changes: 77 additions & 0 deletions app/Actions/Helpers/Intervals/ResetQuarterlyIntervals.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
<?php

/*
* Author: Raul Perusquia <raul@inikoo.com>
* Created: Fri, 03 Jan 2025 17:46:17 Malaysia Time, Kuala Lumpur, Malaysia
* Copyright (c) 2025, Raul A Perusquia Flores
*/

namespace App\Actions\Helpers\Intervals;

use App\Actions\Catalogue\Shop\Hydrators\ShopHydrateSales;
use App\Actions\SysAdmin\Group\Hydrators\GroupHydrateSales;
use App\Actions\SysAdmin\Organisation\Hydrators\OrganisationHydrateSales;
use App\Enums\DateIntervals\DateIntervalEnum;
use App\Enums\SysAdmin\Organisation\OrganisationTypeEnum;
use App\Models\Catalogue\Shop;
use App\Models\SysAdmin\Group;
use App\Models\SysAdmin\Organisation;
use Lorisleiva\Actions\Concerns\AsAction;

class ResetQuarterlyIntervals
{
use AsAction;

protected string $signature = 'intervals:reset-quarter';
protected string $description = 'Reset quarter intervals';


public function handle(): void
{
$this->resetQuarterlyGroups();
$this->resetQuarterlyOrganisations();
$this->resetQuarterlyShops();
}


protected function resetQuarterlyGroups(): void
{
foreach (Group::all() as $group) {
GroupHydrateSales::dispatch(
group: $group,
intervals: [
DateIntervalEnum::QUARTER_TO_DAY
],
doPreviousPeriods: ['previous_quarters']
);
}
}

protected function resetQuarterlyOrganisations(): void
{
foreach (Organisation::whereNot('type', OrganisationTypeEnum::AGENT)->get() as $organisation) {
OrganisationHydrateSales::dispatch(
organisation: $organisation,
intervals: [
DateIntervalEnum::QUARTER_TO_DAY
],
doPreviousPeriods: ['previous_quarters']
);
}
}

protected function resetQuarterlyShops(): void
{
foreach (Shop::all() as $shop) {
ShopHydrateSales::dispatch(
shop: $shop,
intervals: [
DateIntervalEnum::QUARTER_TO_DAY
],
doPreviousPeriods: ['previous_quarters']
);
}
}


}
82 changes: 82 additions & 0 deletions app/Actions/Helpers/Intervals/ResetWeeklyIntervals.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
<?php

/*
* Author: Raul Perusquia <raul@inikoo.com>
* Created: Sat, 04 Jan 2025 00:45:24 Malaysia Time, Kuala Lumpur, Malaysia
* Copyright (c) 2025, Raul A Perusquia Flores
*/

namespace App\Actions\Helpers\Intervals;

use App\Actions\Catalogue\Shop\Hydrators\ShopHydrateSales;
use App\Actions\SysAdmin\Group\Hydrators\GroupHydrateSales;
use App\Actions\SysAdmin\Organisation\Hydrators\OrganisationHydrateSales;
use App\Enums\DateIntervals\DateIntervalEnum;
use App\Enums\SysAdmin\Organisation\OrganisationTypeEnum;
use App\Models\Catalogue\Shop;
use App\Models\SysAdmin\Group;
use App\Models\SysAdmin\Organisation;
use Lorisleiva\Actions\Concerns\AsAction;

class ResetWeeklyIntervals
{
use AsAction;

protected string $signature = 'intervals:reset-week';
protected string $description = 'Reset weekly intervals';


public function handle(): void
{
$this->resetWeeklyGroups();
$this->resetWeeklyOrganisations();


$this->resetWeeklyShops();
}


protected function resetWeeklyGroups(): void
{
foreach (Group::all() as $group) {
GroupHydrateSales::dispatch(
group: $group,
intervals: [
DateIntervalEnum::LAST_WEEK,
DateIntervalEnum::WEEK_TO_DAY
],
doPreviousPeriods: []
);
}
}

protected function resetWeeklyOrganisations(): void
{
foreach (Organisation::whereNot('type', OrganisationTypeEnum::AGENT)->get() as $organisation) {
OrganisationHydrateSales::dispatch(
organisation: $organisation,
intervals: [
DateIntervalEnum::LAST_WEEK,
DateIntervalEnum::WEEK_TO_DAY
],
doPreviousPeriods: []
);
}
}

protected function resetWeeklyShops(): void
{
foreach (Shop::all() as $shop) {
ShopHydrateSales::dispatch(
shop: $shop,
intervals: [
DateIntervalEnum::LAST_WEEK,
DateIntervalEnum::WEEK_TO_DAY
],
doPreviousPeriods: []
);
}
}


}
Loading

0 comments on commit 5072232

Please sign in to comment.