Skip to content

Commit

Permalink
fulfilment customer status 🍮
Browse files Browse the repository at this point in the history
  • Loading branch information
inikoo committed May 14, 2024
1 parent 86e7ee7 commit 0e601e7
Show file tree
Hide file tree
Showing 33 changed files with 396 additions and 123 deletions.
2 changes: 2 additions & 0 deletions app/Actions/Fulfilment/Fulfilment/HydrateFulfilment.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

namespace App\Actions\Fulfilment\Fulfilment;

use App\Actions\Fulfilment\Fulfilment\Hydrators\FulfilmentHydrateCustomers;
use App\Actions\Fulfilment\Fulfilment\Hydrators\FulfilmentHydratePalletDeliveries;
use App\Actions\Fulfilment\Fulfilment\Hydrators\FulfilmentHydratePalletReturns;
use App\Actions\Fulfilment\Fulfilment\Hydrators\FulfilmentHydratePallets;
Expand All @@ -29,6 +30,7 @@ public function handle(Fulfilment $fulfilment): void
FulfilmentHydratePalletDeliveries::run($fulfilment);
FulfilmentHydratePalletReturns::run($fulfilment);
FulfilmentHydrateRecurringBills::run($fulfilment);
FulfilmentHydrateCustomers::run($fulfilment);

}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<?php
/*
* Author: Raul Perusquia <raul@inikoo.com>
* Created: Tue, 14 May 2024 15:19:54 British Summer Time, Sheffield, UK
* Copyright (c) 2024, Raul A Perusquia Flores
*/

namespace App\Actions\Fulfilment\Fulfilment\Hydrators;

use App\Actions\Traits\WithEnumStats;
use App\Enums\Fulfilment\FulfilmentCustomer\FulfilmentCustomerStatus;
use App\Models\Fulfilment\Fulfilment;
use App\Models\Fulfilment\FulfilmentCustomer;
use Illuminate\Queue\Middleware\WithoutOverlapping;
use Lorisleiva\Actions\Concerns\AsAction;

class FulfilmentHydrateCustomers
{
use AsAction;
use WithEnumStats;


private Fulfilment $fulfilment;

public function __construct(Fulfilment $fulfilment)
{
$this->fulfilment = $fulfilment;
}

public function getJobMiddleware(): array
{
return [(new WithoutOverlapping($this->fulfilment->id))->dontRelease()];
}


public function handle(Fulfilment $fulfilment): void
{
$stats = [
'number_customers_interest_pallets_storage' => $fulfilment->fulfilmentCustomers()->where('pallets_storage', true)->count(),
'number_customers_interest_items_storage' => $fulfilment->fulfilmentCustomers()->where('items_storage', true)->count(),
'number_customers_interest_dropshipping' => $fulfilment->fulfilmentCustomers()->where('dropshipping', true)->count(),

];

$stats=array_merge($stats, $this->getEnumStats(
model:'customers',
field: 'status',
enum: FulfilmentCustomerStatus::class,
models: FulfilmentCustomer::class,
where: function ($q) use ($fulfilment) {
$q->where('fulfilment_id', $fulfilment->id);
}
));

$fulfilment->stats()->update($stats);
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
use App\Actions\Fulfilment\FulfilmentCustomer\Hydrators\FulfilmentCustomerHydratePalletReturns;
use App\Actions\Fulfilment\FulfilmentCustomer\Hydrators\FulfilmentCustomerHydratePallets;
use App\Actions\Fulfilment\FulfilmentCustomer\Hydrators\FulfilmentCustomerHydrateRecurringBills;
use App\Actions\Fulfilment\FulfilmentCustomer\Hydrators\FulfilmentCustomerHydrateStatus;
use App\Actions\Fulfilment\FulfilmentCustomer\Hydrators\FulfilmentCustomerHydrateStoredItems;
use App\Actions\Fulfilment\PalletDelivery\Hydrators\PalletDeliveryHydratePallets;
use App\Actions\Fulfilment\PalletReturn\Hydrators\HydratePalletReturns;
Expand Down Expand Up @@ -39,6 +40,7 @@ public function handle(FulfilmentCustomer $fulfilmentCustomer): void
}

FulfilmentCustomerHydrateRecurringBills::run($fulfilmentCustomer);
FulfilmentCustomerHydrateStatus::run($fulfilmentCustomer);
}

protected function getModel(string $slug): FulfilmentCustomer
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
<?php
/*
* Author: Raul Perusquia <raul@inikoo.com>
* Created: Tue, 14 May 2024 15:19:54 British Summer Time, Sheffield, UK
* Copyright (c) 2024, Raul A Perusquia Flores
*/

namespace App\Actions\Fulfilment\FulfilmentCustomer\Hydrators;

use App\Actions\Traits\WithEnumStats;
use App\Enums\Fulfilment\FulfilmentCustomer\FulfilmentCustomerStatus;
use App\Enums\Fulfilment\RentalAgreement\RentalAgreementStateEnum;
use App\Models\Fulfilment\FulfilmentCustomer;
use Illuminate\Queue\Middleware\WithoutOverlapping;
use Lorisleiva\Actions\Concerns\AsAction;

class FulfilmentCustomerHydrateStatus
{
use AsAction;
use WithEnumStats;

private FulfilmentCustomer $fulfilmentCustomer;

public function __construct(FulfilmentCustomer $fulfilmentCustomer)
{
$this->fulfilmentCustomer = $fulfilmentCustomer;
}

public function getJobMiddleware(): array
{
return [(new WithoutOverlapping($this->fulfilmentCustomer->id))->dontRelease()];
}

public function handle(FulfilmentCustomer $fulfilmentCustomer): void
{
$status = FulfilmentCustomerStatus::NO_RENTAL_AGREEMENT;

if ($fulfilmentCustomer->rentalAgreement) {
if ($fulfilmentCustomer->rentalAgreement->state == RentalAgreementStateEnum::ACTIVE) {
$status = FulfilmentCustomerStatus::ACTIVE;

} elseif ($fulfilmentCustomer->rentalAgreement->state == RentalAgreementStateEnum::EXPIRED) {
$status = FulfilmentCustomerStatus::LOST;
}
}
$fulfilmentCustomer->update(
['status' => $status]
);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ public function htmlResponse(FulfilmentCustomer $fulfilmentCustomer, ActionReque
}

return Inertia::render(
'Org/Fulfilment/Customer',
'Org/Fulfilment/FulfilmentCustomer',
[
'title' => __('customer'),
'breadcrumbs' => $this->getBreadcrumbs(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
use App\Models\SysAdmin\Organisation;
use App\Rules\IUnique;
use App\Rules\ValidAddress;
use Illuminate\Support\Arr;
use Illuminate\Validation\Rule;
use Illuminate\Validation\Rules\Password;
use Inertia\Inertia;
Expand All @@ -44,21 +43,8 @@ public function authorize(ActionRequest $request): bool
if ($this->asAction) {
return true;
}
return $request->user()->hasPermissionTo("fulfilment-shop.{$this->fulfilment->id}.edit");
}


public function handle(Fulfilment $fulfilment, array $modelData): FulfilmentCustomer
{
data_set($modelData, 'pallets_storage', in_array('pallets_storage', $modelData['interest']));
data_set($modelData, 'items_storage', in_array('items_storage', $modelData['interest']));
data_set($modelData, 'dropshipping', in_array('dropshipping', $modelData['interest']));

$customer = StoreCustomer::make()->action($fulfilment->shop, $modelData);

UpdateFulfilmentCustomer::run($customer->fulfilmentCustomer, Arr::except($modelData, 'interest'));

return $customer->fulfilmentCustomer;
return $request->user()->hasPermissionTo("fulfilment-shop.{$this->fulfilment->id}.edit");
}

public function rules(): array
Expand All @@ -78,7 +64,7 @@ public function rules(): array
table: 'customers',
extraConditions: [
['column' => 'shop_id', 'value' => $this->shop->id],
['column' => 'deleted_at', 'operator'=>'notNull'],
['column' => 'deleted_at', 'operator' => 'notNull'],
]
),
],
Expand Down Expand Up @@ -107,9 +93,9 @@ public function rules(): array
public function htmlResponse(FulfilmentCustomer $fulfilmentCustomer): Response
{
return Inertia::location(route('grp.org.fulfilments.show.crm.customers.show', [
'organisation' => $fulfilmentCustomer->organisation->slug,
'fulfilment' => $fulfilmentCustomer->fulfilment->slug,
'fulfilmentCustomer' => $fulfilmentCustomer->slug
'organisation' => $fulfilmentCustomer->organisation->slug,
'fulfilment' => $fulfilmentCustomer->fulfilment->slug,
'fulfilmentCustomer' => $fulfilmentCustomer->slug
]));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

namespace App\Actions\Fulfilment\FulfilmentCustomer;

use App\Actions\Fulfilment\Fulfilment\Hydrators\FulfilmentHydrateCustomers;
use App\Actions\Fulfilment\FulfilmentCustomer\Hydrators\FulfilmentCustomerHydrateUniversalSearch;
use App\Actions\OrgAction;
use App\Actions\Utils\Abbreviate;
Expand All @@ -19,57 +20,59 @@ class StoreFulfilmentCustomerFromCustomer extends OrgAction
{
public function handle(Customer $customer, Shop $shop): FulfilmentCustomer
{
/** @var FulfilmentCustomer $customerFulfilment */
$customerFulfilment = $customer->fulfilmentCustomer()->create([
/** @var FulfilmentCustomer $fulfilmentCustomer */
$fulfilmentCustomer = $customer->fulfilmentCustomer()->create([
'fulfilment_id' => $shop->fulfilment->id,
'group_id' => $customer->group_id,
'organisation_id' => $customer->organisation_id,
]);
$customerFulfilment->refresh();
$fulfilmentCustomer->refresh();

$customerFulfilment->serialReferences()->create(
$fulfilmentCustomer->serialReferences()->create(
[
'model' => SerialReferenceModelEnum::PALLET_DELIVERY,
'organisation_id' => $customerFulfilment->organisation->id,
'format' => Abbreviate::run($customerFulfilment->slug).'-%03d'
'organisation_id' => $fulfilmentCustomer->organisation->id,
'format' => Abbreviate::run($fulfilmentCustomer->slug).'-%03d'
]
);

$customerFulfilment->serialReferences()->create(
$fulfilmentCustomer->serialReferences()->create(
[
'model' => SerialReferenceModelEnum::PALLET_RETURN,
'organisation_id' => $customerFulfilment->organisation->id,
'format' => Abbreviate::run($customerFulfilment->slug).'-r%03d'
'organisation_id' => $fulfilmentCustomer->organisation->id,
'format' => Abbreviate::run($fulfilmentCustomer->slug).'-r%03d'
]
);

$customerFulfilment->serialReferences()->create(
$fulfilmentCustomer->serialReferences()->create(
[
'model' => SerialReferenceModelEnum::STORED_ITEM_RETURN,
'organisation_id' => $customerFulfilment->organisation->id,
'format' => Abbreviate::run($customerFulfilment->slug).'-sir%03d'
'organisation_id' => $fulfilmentCustomer->organisation->id,
'format' => Abbreviate::run($fulfilmentCustomer->slug).'-sir%03d'
]
);

$customerFulfilment->serialReferences()->create(
$fulfilmentCustomer->serialReferences()->create(
[
'model' => SerialReferenceModelEnum::PALLET,
'organisation_id' => $customerFulfilment->organisation->id,
'format' => Abbreviate::run($customerFulfilment->slug).'-p%04d'
'organisation_id' => $fulfilmentCustomer->organisation->id,
'format' => Abbreviate::run($fulfilmentCustomer->slug).'-p%04d'
]
);

$customerFulfilment->serialReferences()->create(
$fulfilmentCustomer->serialReferences()->create(
[
'model' => SerialReferenceModelEnum::RECURRING_BILL,
'organisation_id' => $customerFulfilment->organisation->id,
'format' => Abbreviate::run($customerFulfilment->slug).'-b%03d'
'organisation_id' => $fulfilmentCustomer->organisation->id,
'format' => Abbreviate::run($fulfilmentCustomer->slug).'-b%03d'
]
);


FulfilmentCustomerHydrateUniversalSearch::dispatch($customerFulfilment);
FulfilmentCustomerHydrateUniversalSearch::dispatch($fulfilmentCustomer);
FulfilmentHydrateCustomers::dispatch($fulfilmentCustomer->fulfilment);

return $customerFulfilment;

return $fulfilmentCustomer;
}
}
Loading

0 comments on commit 0e601e7

Please sign in to comment.