Skip to content

Commit

Permalink
Org Stock Movements 😾
Browse files Browse the repository at this point in the history
  • Loading branch information
inikoo committed Sep 1, 2024
1 parent 5aed131 commit 59e1c9c
Show file tree
Hide file tree
Showing 34 changed files with 624 additions and 251 deletions.
8 changes: 4 additions & 4 deletions app/Actions/Goods/Stock/UI/IndexStocks.php
Original file line number Diff line number Diff line change
Expand Up @@ -315,11 +315,11 @@ public function htmlResponse(LengthAwarePaginator $stocks, ActionRequest $reques
$subNavigation = $this->getStocksSubNavigation();

$title = match ($this->bucket) {
'active' => __('Active SKUs'),
'in_process' => __('In process SKUs'),
'active' => __('Active SKUs'),
'in_process' => __('In process SKUs'),
'discontinuing' => __('Discontinuing SKUs'),
'discontinued' => __('Discontinued SKUs'),
default => __('SKUs')
'discontinued' => __('Discontinued SKUs'),
default => __('SKUs')
};

return Inertia::render(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public function handle(Currency $baseCurrency, Currency $targetCurrency): float|
}

if ($currencyExchange) {
Cache::add($key, $currencyExchange, now()->addMinutes(15));
Cache::add($key, $currencyExchange, now()->addHours(6));
}
}

Expand Down
15 changes: 13 additions & 2 deletions app/Actions/Inventory/Location/StoreLocation.php
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ public function authorize(ActionRequest $request): bool

public function rules(): array
{
return [
$rules= [
'code' => [
'required',
'max:64',
Expand All @@ -83,6 +83,16 @@ public function rules(): array
'deleted_at' => ['sometimes', 'nullable', 'date'],
'fetched_at' => ['sometimes', 'date'],
];

if(!$this->strict) {
$rules['code'] = [
'required',
'max:64',
'string',
];
}

return $rules;
}

public function inWarehouse(Warehouse $warehouse, ActionRequest $request): Location
Expand All @@ -102,9 +112,10 @@ public function inWarehouseArea(WarehouseArea $warehouseArea, ActionRequest $req
return $this->handle($warehouseArea, $this->validatedData);
}

public function action(WarehouseArea|Warehouse $parent, array $modelData): Location
public function action(WarehouseArea|Warehouse $parent, array $modelData, bool $strict=true): Location
{
$this->asAction = true;
$this->strict = $strict;

if(class_basename($parent::class) == 'WarehouseArea') {
$this->warehouse = $parent->warehouse;
Expand Down
15 changes: 13 additions & 2 deletions app/Actions/Inventory/Location/UpdateLocation.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public function authorize(ActionRequest $request): bool

public function rules(): array
{
return [
$rules= [
'code' => [
'sometimes',
'required',
Expand All @@ -71,10 +71,21 @@ public function rules(): array
'allow_dropshipping' => ['sometimes', 'required', 'boolean'],
'last_fetched_at' => ['sometimes', 'date'],
];

if(!$this->strict) {
$rules['code'] = [
'required',
'max:64',
'string',
];
}
return $rules;

}

public function action(Location $location, array $modelData, bool $audit=true): Location
public function action(Location $location, array $modelData, bool $strict=true, bool $audit=true): Location
{
$this->strict = $strict;
if(!$audit) {
Location::disableAuditing();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
namespace App\Actions\Inventory\LocationOrgStock;

use App\Actions\Inventory\OrgStock\Hydrators\OrgStockHydrateQuantityInLocations;
use App\Actions\Inventory\OrgStockAuditDelta\StoreOrgStockAuditDelta;
use App\Actions\OrgAction;
use App\Actions\Traits\WithActionUpdate;
use App\Models\Inventory\LocationOrgStock;
Expand All @@ -32,6 +33,8 @@ public function handle(LocationOrgStock $locationOrgStock, array $modelData): Lo
$newStock =$locationOrgStock->quantity;
$stockDiff =$newStock-$currentStock;

StoreOrgStockAuditDelta::make()->action($locationOrgStock, $stockDiff);

OrgStockHydrateQuantityInLocations::dispatch($locationOrgStock->orgStock);

return $locationOrgStock;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,7 @@ public function handle(OrgStock $orgStock, Location $location, array $modelData)
data_set($modelData, 'org_stock_id', $orgStock->id);


$location->locationOrgStocks()->create($modelData);
$locationStock = LocationOrgStock::where('location_id', $location->id)->where('org_stock_id', $orgStock->id)
->first();

$locationStock=$location->locationOrgStocks()->create($modelData);

LocationHydrateStocks::dispatch($location);
LocationHydrateStockValue::dispatch($location);
Expand Down
2 changes: 2 additions & 0 deletions app/Actions/Inventory/OrgStock/HydrateOrgStock.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

use App\Actions\HydrateModel;
use App\Actions\Inventory\OrgStock\Hydrators\OrgStockHydrateLocations;
use App\Actions\Inventory\OrgStock\Hydrators\OrgStockHydrateMovements;
use App\Actions\Inventory\OrgStock\Hydrators\OrgStockHydrateQuantityInLocations;
use App\Actions\Inventory\OrgStock\Hydrators\OrgStockHydrateValueInLocations;
use App\Models\SupplyChain\Stock;
Expand All @@ -24,6 +25,7 @@ public function handle(Stock $stock): void
OrgStockHydrateLocations::run($stock);
OrgStockHydrateQuantityInLocations::run($stock);
OrgStockHydrateValueInLocations::run($stock);
OrgStockHydrateMovements::run($stock);
}


Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?php
/*
* Author: Raul Perusquia <raul@inikoo.com>
* Created: Sat, 31 Aug 2024 10:58:58 Malaysia Time, Kuala Lumpur, Malaysia
* Copyright (c) 2024, Raul A Perusquia Flores
*/

namespace App\Actions\Inventory\OrgStock\Hydrators;

use App\Models\Inventory\OrgStock;
use Illuminate\Queue\Middleware\WithoutOverlapping;
use Lorisleiva\Actions\Concerns\AsAction;

class OrgStockHydrateMovements
{
use AsAction;

private OrgStock $orgStock;

public function __construct(OrgStock $orgStock)
{
$this->orgStock = $orgStock;
}

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


public function handle(OrgStock $orgStock): void
{

$orgStock->stats->update(
[
'number_movements' => $orgStock->orgStockMovements()->count()
]
);
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,13 @@
namespace App\Actions\Inventory\OrgStockAuditDelta;

use App\Actions\Catalogue\HasRentalAgreement;
use App\Actions\Fulfilment\Fulfilment\Hydrators\FulfilmentHydrateStoredItemAudits;
use App\Actions\Fulfilment\FulfilmentCustomer\Hydrators\FulfilmentCustomerHydrateStoredItemAudits;
use App\Actions\Fulfilment\StoredItemAudit\Search\StoredItemAuditRecordSearch;

use App\Actions\Fulfilment\WithDeliverableStoreProcessing;
use App\Actions\Inventory\Warehouse\Hydrators\WarehouseHydrateStoredItemAudits;
use App\Actions\OrgAction;
use App\Actions\SysAdmin\Group\Hydrators\GroupHydrateStoredItemAudits;
use App\Actions\SysAdmin\Organisation\Hydrators\OrganisationHydrateStoredItemAudits;
use App\Models\CRM\Customer;
use App\Models\CRM\WebUser;
use App\Models\Fulfilment\FulfilmentCustomer;
use App\Models\Fulfilment\StoredItemAudit;
use App\Models\Inventory\LocationOrgStock;
use App\Models\Inventory\OrgStockAudit;
use App\Models\Inventory\Warehouse;
use Illuminate\Validation\Rule;
use App\Models\Inventory\OrgStockAuditDelta;
use Lorisleiva\Actions\ActionRequest;

class StoreOrgStockAuditDelta extends OrgAction
Expand All @@ -35,88 +26,44 @@ class StoreOrgStockAuditDelta extends OrgAction
public Customer $customer;

private bool $action = false;
private FulfilmentCustomer $fulfilmentCustomer;

public function handle(LocationOrgStock|OrgStockAudit $parent, array $modelData): StoredItemAudit
{


/** @var StoredItemAudit $storedItemAudit */
$storedItemAudit = $parent->orgStockAuditDeltas()->create($modelData);
$storedItemAudit->refresh();

GroupHydrateStoredItemAudits::dispatch($storedItemAudit->group);
OrganisationHydrateStoredItemAudits::dispatch($storedItemAudit->organisation);
WarehouseHydrateStoredItemAudits::dispatch($storedItemAudit->warehouse);
FulfilmentHydrateStoredItemAudits::dispatch($storedItemAudit->fulfilment);
FulfilmentCustomerHydrateStoredItemAudits::dispatch($storedItemAudit->fulfilmentCustomer);

StoredItemAuditRecordSearch::dispatch($storedItemAudit);


return $storedItemAudit;
}

public function authorize(ActionRequest $request): bool
public function handle(LocationOrgStock|OrgStockAudit $parent, array $modelData): OrgStockAuditDelta
{
if ($this->action) {
return true;
}
data_set($modelData, 'audited_at', now(), overwrite: false);
data_set($modelData, 'group_id', $parent->group_id);
data_set($modelData, 'organisation_id', $parent->organisation_id);

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

return false;
}

public function prepareForValidation(ActionRequest $request): void
{
if ($this->fulfilment->warehouses()->count() == 1) {
/** @var Warehouse $warehouse */
$warehouse = $this->fulfilment->warehouses()->first();
$this->fill(['warehouse_id' => $warehouse->id]);
if($parent instanceof OrgStockAudit) {
$orgStockAuditDelta = $parent->orgStockAuditDeltas()->create($modelData);
} else {
$orgStockAuditDelta=OrgStockAuditDelta::create($modelData);
}

return $orgStockAuditDelta;
}


public function rules(): array
{
$rules = [];

if (!request()->user() instanceof WebUser) {
$rules = [
'public_notes' => ['sometimes', 'nullable', 'string', 'max:4000'],
'internal_notes' => ['sometimes', 'nullable', 'string', 'max:4000'],
];
}

return [
'warehouse_id' => [
'required',
'integer',
Rule::exists('warehouses', 'id')
->where('organisation_id', $this->organisation->id),
],
'customer_notes' => ['sometimes', 'nullable', 'string'],
...$rules
'original_quantity' => ['required', 'numeric'],
'audited_quantity' => ['required', 'numeric'],
];
}


public function asController(LocationOrgStock|OrgStockAudit $parent, ActionRequest $request): StoredItemAudit
public function asController(LocationOrgStock|OrgStockAudit $parent, ActionRequest $request): OrgStockAuditDelta
{

$this->initialisation($parent->organisation, $request);

return $this->handle($parent, $this->validatedData);
}

public function action(LocationOrgStock|OrgStockAudit $parent, $modelData): StoredItemAudit
public function action(LocationOrgStock|OrgStockAudit $parent, $modelData): OrgStockAuditDelta
{



$this->action = true;
$this->initialisation($parent->organisation, $modelData);
$this->setRawAttributes($modelData);
Expand All @@ -125,8 +72,4 @@ public function action(LocationOrgStock|OrgStockAudit $parent, $modelData): Stor
}






}
Loading

0 comments on commit 59e1c9c

Please sign in to comment.