Added updated order quantity in resource pages
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
This commit is contained in:
@@ -74,6 +74,7 @@ class ProcessOrderResource extends Resource
|
|||||||
$set('process_order', null);
|
$set('process_order', null);
|
||||||
$set('coil_number', '0');
|
$set('coil_number', '0');
|
||||||
$set('order_quantity', '0');
|
$set('order_quantity', '0');
|
||||||
|
$set('updated_order_quantity', '0');
|
||||||
$set('received_quantity', '0');
|
$set('received_quantity', '0');
|
||||||
$set('scrap_quantity', '0');
|
$set('scrap_quantity', '0');
|
||||||
$set('sfg_number', null);
|
$set('sfg_number', null);
|
||||||
@@ -113,6 +114,7 @@ class ProcessOrderResource extends Resource
|
|||||||
$set('process_order', null);
|
$set('process_order', null);
|
||||||
$set('coil_number', '0');
|
$set('coil_number', '0');
|
||||||
$set('order_quantity', '0');
|
$set('order_quantity', '0');
|
||||||
|
$set('updated_order_quantity', '0');
|
||||||
$set('received_quantity', '0');
|
$set('received_quantity', '0');
|
||||||
$set('scrap_quantity', '0');
|
$set('scrap_quantity', '0');
|
||||||
$set('sfg_number', null);
|
$set('sfg_number', null);
|
||||||
@@ -141,6 +143,7 @@ class ProcessOrderResource extends Resource
|
|||||||
$set('process_order', null);
|
$set('process_order', null);
|
||||||
$set('coil_number', '0');
|
$set('coil_number', '0');
|
||||||
$set('order_quantity', '0');
|
$set('order_quantity', '0');
|
||||||
|
$set('updated_order_quantity', '0');
|
||||||
$set('received_quantity', '0');
|
$set('received_quantity', '0');
|
||||||
$set('scrap_quantity', '0');
|
$set('scrap_quantity', '0');
|
||||||
$set('sfg_number', null);
|
$set('sfg_number', null);
|
||||||
@@ -217,6 +220,7 @@ class ProcessOrderResource extends Resource
|
|||||||
$plantId = $get('plant_id');
|
$plantId = $get('plant_id');
|
||||||
$set('coil_number', '0');
|
$set('coil_number', '0');
|
||||||
$set('order_quantity', '0');
|
$set('order_quantity', '0');
|
||||||
|
$set('updated_order_quantity', '0');
|
||||||
$set('received_quantity', '0');
|
$set('received_quantity', '0');
|
||||||
$set('scrap_quantity', '0');
|
$set('scrap_quantity', '0');
|
||||||
$set('sfg_number', null);
|
$set('sfg_number', null);
|
||||||
@@ -369,9 +373,11 @@ class ProcessOrderResource extends Resource
|
|||||||
$itemId = $get('item_id');
|
$itemId = $get('item_id');
|
||||||
$processOrder = trim($get('process_order'));
|
$processOrder = trim($get('process_order'));
|
||||||
$set('received_quantity', '0');
|
$set('received_quantity', '0');
|
||||||
|
// $set('updated_order_quantity', $state);
|
||||||
$set('scrap_quantity', '0');
|
$set('scrap_quantity', '0');
|
||||||
if (! $plantId || ! $itemId || ! $processOrder) {
|
if (! $plantId || ! $itemId || ! $processOrder) {
|
||||||
$set('order_quantity', '0');
|
$set('order_quantity', '0');
|
||||||
|
$set('updated_order_quantity', '0');
|
||||||
}
|
}
|
||||||
|
|
||||||
$query = ProcessOrder::where('plant_id', $plantId)
|
$query = ProcessOrder::where('plant_id', $plantId)
|
||||||
@@ -387,6 +393,47 @@ class ProcessOrderResource extends Resource
|
|||||||
}
|
}
|
||||||
$set('updated_by', Filament::auth()->user()?->name);
|
$set('updated_by', Filament::auth()->user()?->name);
|
||||||
}),
|
}),
|
||||||
|
Forms\Components\TextInput::make('updated_order_quantity')
|
||||||
|
->label('Updated Order Quantity')
|
||||||
|
->required()
|
||||||
|
->readOnly(fn ($get) => (trim($get('process_order')) == null || trim($get('process_order')) == '' || trim($get('order_quantity')) == '' || trim($get('order_quantity')) == null))
|
||||||
|
->reactive()
|
||||||
|
->rules([
|
||||||
|
function (callable $get): Closure {
|
||||||
|
return function (string $attribute, $value, Closure $fail) use ($get) {
|
||||||
|
$plantId = $get('plant_id');
|
||||||
|
$processOrder = trim($get('process_order'));
|
||||||
|
$receivedQty = $get('received_quantity');
|
||||||
|
|
||||||
|
$currentId = $get('id');
|
||||||
|
|
||||||
|
$orderQty = (float) $get('order_quantity');
|
||||||
|
$updatedQty = (float) $value;
|
||||||
|
|
||||||
|
$allowedVariance = $orderQty * 0.10;
|
||||||
|
|
||||||
|
$maxAllowed = $orderQty + $allowedVariance;
|
||||||
|
$minAllowed = $orderQty - $allowedVariance;
|
||||||
|
|
||||||
|
if ($updatedQty > $maxAllowed || $updatedQty < $minAllowed) {
|
||||||
|
$fail("Quantity can vary by ±10% of the order quantity.");
|
||||||
|
}
|
||||||
|
|
||||||
|
$otherReceivedQty = ProcessOrder::where('plant_id', $plantId)
|
||||||
|
->where('process_order', $processOrder)
|
||||||
|
->when($currentId, fn ($q) => $q->where('id', '!=', $currentId))
|
||||||
|
->sum('received_quantity');
|
||||||
|
|
||||||
|
$currentReceivedQty = (float) $get('received_quantity');
|
||||||
|
|
||||||
|
$totalReceivedQty = $otherReceivedQty + $currentReceivedQty;
|
||||||
|
|
||||||
|
if ($updatedQty < $totalReceivedQty) {
|
||||||
|
$fail("You cannot set quantity below received quantity ({$totalReceivedQty}).");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
]),
|
||||||
Forms\Components\TextInput::make('received_quantity')
|
Forms\Components\TextInput::make('received_quantity')
|
||||||
->label('Received Quantity')
|
->label('Received Quantity')
|
||||||
->default('0.000')
|
->default('0.000')
|
||||||
@@ -409,7 +456,8 @@ class ProcessOrderResource extends Resource
|
|||||||
->where('item_id', $itemId)->latest()->first();
|
->where('item_id', $itemId)->latest()->first();
|
||||||
|
|
||||||
if ($orderExist) {
|
if ($orderExist) {
|
||||||
$orderQty = $orderExist->order_quantity ?? 0;
|
// $orderQty = $orderExist->order_quantity ?? 0;
|
||||||
|
$orderQty = $orderExist->updated_order_quantity ?? 0;
|
||||||
|
|
||||||
$alreadyReceived = ProcessOrder::where('plant_id', $plantId)
|
$alreadyReceived = ProcessOrder::where('plant_id', $plantId)
|
||||||
->where('process_order', $processOrder)
|
->where('process_order', $processOrder)
|
||||||
@@ -855,6 +903,11 @@ class ProcessOrderResource extends Resource
|
|||||||
->alignCenter()
|
->alignCenter()
|
||||||
->searchable()
|
->searchable()
|
||||||
->sortable(),
|
->sortable(),
|
||||||
|
Tables\Columns\TextColumn::make('updated_order_quantity')
|
||||||
|
->label('Updated Order Quantity')
|
||||||
|
->alignCenter()
|
||||||
|
->searchable()
|
||||||
|
->sortable(),
|
||||||
Tables\Columns\TextColumn::make('received_quantity')
|
Tables\Columns\TextColumn::make('received_quantity')
|
||||||
->label('Received Quantity')
|
->label('Received Quantity')
|
||||||
->alignCenter()
|
->alignCenter()
|
||||||
|
|||||||
@@ -3,10 +3,28 @@
|
|||||||
namespace App\Filament\Resources\ProcessOrderResource\Pages;
|
namespace App\Filament\Resources\ProcessOrderResource\Pages;
|
||||||
|
|
||||||
use App\Filament\Resources\ProcessOrderResource;
|
use App\Filament\Resources\ProcessOrderResource;
|
||||||
|
use App\Models\ProcessOrder;
|
||||||
use Filament\Actions;
|
use Filament\Actions;
|
||||||
|
use Filament\Facades\Filament;
|
||||||
|
use Filament\Notifications\Notification;
|
||||||
use Filament\Resources\Pages\CreateRecord;
|
use Filament\Resources\Pages\CreateRecord;
|
||||||
|
|
||||||
class CreateProcessOrder extends CreateRecord
|
class CreateProcessOrder extends CreateRecord
|
||||||
{
|
{
|
||||||
protected static string $resource = ProcessOrderResource::class;
|
protected static string $resource = ProcessOrderResource::class;
|
||||||
|
|
||||||
|
protected function afterCreate(): void
|
||||||
|
{
|
||||||
|
$plantId = $this->data['plant_id'];
|
||||||
|
$processOrder = $this->data['process_order'];
|
||||||
|
$updatedQty = (float) $this->data['updated_order_quantity'];
|
||||||
|
|
||||||
|
ProcessOrder::where('plant_id', $plantId)
|
||||||
|
->where('process_order', $processOrder)
|
||||||
|
->update([
|
||||||
|
'updated_order_quantity' => $updatedQty,
|
||||||
|
'updated_by' => Filament::auth()->user()->name,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,13 +3,78 @@
|
|||||||
namespace App\Filament\Resources\ProcessOrderResource\Pages;
|
namespace App\Filament\Resources\ProcessOrderResource\Pages;
|
||||||
|
|
||||||
use App\Filament\Resources\ProcessOrderResource;
|
use App\Filament\Resources\ProcessOrderResource;
|
||||||
|
use App\Models\ProcessOrder;
|
||||||
use Filament\Actions;
|
use Filament\Actions;
|
||||||
|
use Filament\Facades\Filament;
|
||||||
|
use Filament\Notifications\Notification;
|
||||||
use Filament\Resources\Pages\EditRecord;
|
use Filament\Resources\Pages\EditRecord;
|
||||||
|
|
||||||
class EditProcessOrder extends EditRecord
|
class EditProcessOrder extends EditRecord
|
||||||
{
|
{
|
||||||
protected static string $resource = ProcessOrderResource::class;
|
protected static string $resource = ProcessOrderResource::class;
|
||||||
|
|
||||||
|
protected function beforeSave(): void
|
||||||
|
{
|
||||||
|
$plantId = $this->data['plant_id'] ?? null;
|
||||||
|
$processOrder = $this->data['process_order'] ?? null;
|
||||||
|
$extraQty = (float) ($this->data['updated_order_quantity'] ?? 0);
|
||||||
|
$extraQtyRaw = $this->data['updated_order_quantity'] ?? '';
|
||||||
|
|
||||||
|
if (!preg_match('/^\d+(\.\d{1,3})?$/', $extraQtyRaw)) {
|
||||||
|
Notification::make()
|
||||||
|
->title('Invalid Quantity')
|
||||||
|
->body('Only positive numbers with up to 3 decimal places are allowed.')
|
||||||
|
->danger()
|
||||||
|
->send();
|
||||||
|
|
||||||
|
$this->halt(); // stop save
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($extraQty < 0)
|
||||||
|
{
|
||||||
|
Notification::make()
|
||||||
|
->title('Invalid Quantity')
|
||||||
|
->body('Negative values are not allowed.')
|
||||||
|
->danger()
|
||||||
|
->send();
|
||||||
|
|
||||||
|
$this->halt();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($extraQty > 0) {
|
||||||
|
|
||||||
|
$order = ProcessOrder::where('plant_id', $plantId)
|
||||||
|
->where('process_order', $processOrder)
|
||||||
|
->first();
|
||||||
|
|
||||||
|
if ($order) {
|
||||||
|
|
||||||
|
$baseQty = (float) $order->order_quantity;
|
||||||
|
$maxAllowed = $baseQty * 0.10;
|
||||||
|
|
||||||
|
$maxFinalQty = $baseQty + $maxAllowed;
|
||||||
|
|
||||||
|
if ($extraQty > $maxFinalQty) {
|
||||||
|
Notification::make()
|
||||||
|
->title('Limit Exceeded')
|
||||||
|
->body("You can only increase the order by 10% (Max allowed: {$maxFinalQty}).")
|
||||||
|
->danger()
|
||||||
|
->send();
|
||||||
|
|
||||||
|
$this->halt(); // stops save
|
||||||
|
}
|
||||||
|
|
||||||
|
ProcessOrder::where('plant_id', $plantId)
|
||||||
|
->where('process_order', $processOrder)
|
||||||
|
->update([
|
||||||
|
'updated_order_quantity' => $extraQty,
|
||||||
|
'updated_by' => Filament::auth()->user()?->name,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
protected function getHeaderActions(): array
|
protected function getHeaderActions(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
|
|||||||
Reference in New Issue
Block a user