1 Commits

Author SHA1 Message Date
e501e91673 Update dependency althinect/filament-spatie-roles-permissions to v3
Some checks failed
renovate/artifacts Artifact file update failure
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 11s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 10s
Laravel Pint / pint (pull_request) Failing after 1m57s
Laravel Larastan / larastan (pull_request) Failing after 2m5s
2026-02-22 08:38:36 +00:00
43 changed files with 172 additions and 4003 deletions

View File

@@ -1,58 +0,0 @@
<?php
namespace App\Filament\Exports;
use App\Models\CustomerPoMaster;
use Filament\Actions\Exports\ExportColumn;
use Filament\Actions\Exports\Exporter;
use Filament\Actions\Exports\Models\Export;
class CustomerPoMasterExporter extends Exporter
{
protected static ?string $model = CustomerPoMaster::class;
public static function getColumns(): array
{
static $rowNumber = 0;
return [
ExportColumn::make('no')
->label('NO')
->state(function ($record) use (&$rowNumber) {
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.code')
->label('PLANT CODE'),
ExportColumn::make('item.code')
->label('ITEM CODE'),
ExportColumn::make('customer_po')
->label('CUSTOMER PO'),
ExportColumn::make('customer_name')
->label('CUSTOMER NAME'),
ExportColumn::make('quantity')
->label('QUANTITY'),
ExportColumn::make('created_at')
->label('CREATED AT'),
ExportColumn::make('updated_at')
->label('UPDATED AT'),
ExportColumn::make('created_by')
->label('CREATED BY'),
ExportColumn::make('updated_by')
->label('UPDATED BY'),
ExportColumn::make('deleted_at')
->label('DELETED AT')
->enabledByDefault(false),
];
}
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your customer po master export has completed and ' . number_format($export->successful_rows) . ' ' . str('row')->plural($export->successful_rows) . ' exported.';
if ($failedRowsCount = $export->getFailedRowsCount()) {
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;
}
}

View File

@@ -1,140 +0,0 @@
<?php
namespace App\Filament\Imports;
use App\Models\CustomerPoMaster;
use App\Models\Item;
use App\Models\Plant;
use App\Models\User;
use Filament\Actions\Imports\ImportColumn;
use Filament\Actions\Imports\Importer;
use Filament\Actions\Imports\Models\Import;
use Filament\Actions\Imports\Exceptions\RowImportFailedException;
use Filament\Facades\Filament;
use Str;
class CustomerPoMasterImporter extends Importer
{
protected static ?string $model = CustomerPoMaster::class;
public static function getColumns(): array
{
return [
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('Plant Code')
->example('1000')
->label('Plant Code')
->relationship(resolveUsing: 'code')
->rules(['required']),
ImportColumn::make('item')
->requiredMapping()
->exampleHeader('Item Code')
->example('630214')
->label('Item Code')
->relationship(resolveUsing: 'code')
->rules(['required']),
ImportColumn::make('customer_po')
->requiredMapping()
->exampleHeader('Customer PO')
->example('1JA0029512')
->label('Customer PO')
->rules(['required']),
ImportColumn::make('customer_name')
->requiredMapping()
->exampleHeader('Customer Name')
->example('KANKARIA MACHINERY STORE')
->label('Customer Name')
->rules(['required']),
ImportColumn::make('quantity')
->requiredMapping()
->exampleHeader('Quantity')
->example('5')
->label('Quantity')
->rules(['required']),
// ImportColumn::make('created_by')
// ->requiredMapping()
// ->exampleHeader('Created By')
// ->example('Admin')
// ->label('Created By')
// ->rules(['required']),
];
}
public function resolveRecord(): ?CustomerPoMaster
{
$warnMsg = [];
$plantCod = $this->data['plant'];
$plant = null;
$item = null;
if (Str::length($plantCod) < 4 || ! is_numeric($plantCod) || ! preg_match('/^[1-9]\d{3,}$/', $plantCod)) {
$warnMsg[] = 'Invalid plant code found';
} else {
$plant = Plant::where('code', $plantCod)->first();
if (! $plant) {
$warnMsg[] = 'Plant not found';
} else {
$item = Item::where('code', $this->data['item'])->where('plant_id', $plant->id)->first();
}
if (! $item) {
$warnMsg[] = 'Item not found';
}
}
if (Str::length($this->data['customer_po']) < 9) {
$warnMsg[] = 'Invalid Customer PO number found';
}
if (empty($this->data['customer_po'])) {
$warnMsg[] = 'Customer PO cannot be empty.';
}
// $user = User::where('name', $this->data['created_by'])->first();
// if (! $user) {
// $warnMsg[] = 'User not found';
// }
$user = Filament::auth()->user();
$operatorName = $user->name;
if (! empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
}
//else { // if (empty($warnMsg))
// $grMaster = GrMaster::where('plant_id', $plant->id)
// ->where('serial_number', $this->data['serial_number'])
// ->latest()
// ->first();
// if ($grMaster) {
// throw new RowImportFailedException('Serial number already exist!');
// }
// }
CustomerPoMaster::updateOrCreate([
'plant_id' => $plant->id,
'item_id' => $item->id,
'customer_po' => $this->data['customer_po'],
'customer_name' => $this->data['customer_name'],
'quantity' => $this->data['quantity'] ?? null,
'created_by' => $operatorName,
]);
return null;
// return new CustomerPoMaster();
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your customer po master import has completed and ' . number_format($import->successful_rows) . ' ' . str('row')->plural($import->successful_rows) . ' imported.';
if ($failedRowsCount = $import->getFailedRowsCount()) {
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;
}
}

View File

@@ -1,481 +0,0 @@
<?php
namespace App\Filament\Imports;
use App\Models\InvoiceValidation;
use App\Models\Item;
use App\Models\Plant;
use App\Models\StickerMaster;
use Carbon\Carbon;
use Filament\Actions\Imports\Exceptions\RowImportFailedException;
use Filament\Actions\Imports\ImportColumn;
use Filament\Actions\Imports\Importer;
use Filament\Actions\Imports\Models\Import;
use Str;
class InvoiceValidationImporter extends Importer
{
protected static ?string $model = InvoiceValidation::class;
public static function getColumns(): array
{
return [
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('PLANT CODE')
->example('1000')
->label('PLANT CODE')
->relationship(resolveUsing: 'code')
->rules(['required']),
ImportColumn::make('item_reference')// stickerMaster
->requiredMapping()
->exampleHeader('ITEM CODE')
->example('123456')
->label('ITEM CODE')
->rules(['required']),
ImportColumn::make('invoice_number')
->requiredMapping()
->exampleHeader('INVOICE NUMBER')
->example('RAW0009611')
->label('INVOICE NUMBER')
->rules(['required']),
ImportColumn::make('serial_number')
->requiredMapping()
->exampleHeader('SERIAL NUMBER')
->example('12345678901234')
->label('SERIAL NUMBER'),
ImportColumn::make('motor_scanned_status')
->requiredMapping()
->exampleHeader('MOTOR SCANNED STATUS')
->example('1')
->label('MOTOR SCANNED STATUS'),
ImportColumn::make('pump_scanned_status')
->requiredMapping()
->exampleHeader('PUMP SCANNED STATUS')
->example('1')
->label('PUMP SCANNED STATUS'),
ImportColumn::make('capacitor_scanned_status')
->requiredMapping()
->exampleHeader('CAPACITOR SCANNED STATUS')
->example('1')
->label('CAPACITOR SCANNED STATUS'),
ImportColumn::make('scanned_status_set')
->requiredMapping()
->exampleHeader('PUMPSET SCANNED STATUS')
->example('')
->label('PUMPSET SCANNED STATUS'),
ImportColumn::make('scanned_status')
->requiredMapping()
->exampleHeader('SCANNED STATUS')
->example('Scanned')
->label('SCANNED STATUS'),
ImportColumn::make('panel_box_code')
->requiredMapping()
->exampleHeader('PANEL BOX CODE')
->example('PBOX0123')
->label('PANEL BOX CODE'),
ImportColumn::make('panel_box_supplier')
->requiredMapping()
->exampleHeader('PANEL BOX SUPPLIER')
->example('1900433')
->label('PANEL BOX SUPPLIER'),
ImportColumn::make('panel_box_serial_number')
->requiredMapping()
->exampleHeader('PANEL BOX SERIAL NUMBER')
->example('2512/101236')
->label('PANEL BOX SERIAL NUMBER'),
ImportColumn::make('load_rate')
->requiredMapping()
->exampleHeader('LOAD RATE')
->example('0')
->label('LOAD RATE')
->rules(['required']),
ImportColumn::make('upload_status')
->requiredMapping()
->exampleHeader('UPLOAD STATUS')
->example('N')
->label('UPLOAD STATUS')
->rules(['required']),
ImportColumn::make('batch_number')
->requiredMapping()
->exampleHeader('BATCH NUMBER')
->example('')
->label('BATCH NUMBER'),
ImportColumn::make('quantity')
->requiredMapping()
->exampleHeader('QUANTITY')
->example('')
->label('QUANTITY'),
ImportColumn::make('operator_id')
->requiredMapping()
->exampleHeader('OPERATOR ID')
->example('USER1')
->label('OPERATOR ID')
->rules(['required']),
ImportColumn::make('created_at')
->requiredMapping()
->exampleHeader('CREATED AT')
->example('')
->label('CREATED AT')
->rules(['required']),
ImportColumn::make('created_by')
->requiredMapping()
->exampleHeader('CREATED BY')
->example('USER1')
->label('CREATED BY')
->rules(['required']),
ImportColumn::make('updated_at')
->requiredMapping()
->exampleHeader('UPDATED AT')
->example('USER1')
->label('UPDATED AT')
->rules(['required']),
ImportColumn::make('updated_by')
->requiredMapping()
->exampleHeader('UPDATED BY')
->example('')
->label('UPDATED BY')
->rules(['required']),
];
}
public function resolveRecord(): ?InvoiceValidation
{
// return InvoiceValidation::firstOrNew([
// // Update existing records, matching them by `$this->data['column_name']`
// 'email' => $this->data['email'],
// ]);
$warnMsg = [];
$plantId = null;
$stickId = null;
$plantCod = $this->data['plant'];
$iCode = trim($this->data['item_reference']) ?? null;
$invoiceNumber = trim($this->data['invoice_number']) ?? null;
$serialNumber = trim($this->data['serial_number']) ?? null;
$curMotorQr = trim($this->data['motor_scanned_status']) ?? null;
$curPumpQr = trim($this->data['pump_scanned_status']) ?? null;
$curPumpSetQr = trim($this->data['scanned_status_set']) ?? null;
$curCapacitorQr = trim($this->data['capacitor_scanned_status']) ?? null;
$curScanStatus = trim($this->data['scanned_status']) ?? null;
$curPanelBoxCode = trim($this->data['panel_box_code']) ?? null;
$curPanelBoxSupplier = trim($this->data['panel_box_supplier']) ?? null;
$curPanelBoxSerialNumber = trim($this->data['panel_box_serial_number']) ?? null;
$loadRate = trim($this->data['load_rate']) ?? 0;
$uploadStatus = trim($this->data['upload_status']) ?? 'N';
$batchNumber = null; // trim($this->data['batch_number']) ??
$quantity = null; // trim($this->data['quantity']) ??
$operatorId = trim($this->data['operator_id']);
$createdBy = trim($this->data['created_by']);
$updatedBy = trim($this->data['updated_by']);
$createdAt = $this->data['created_at'];
$updatedAt = $this->data['updated_at'];
$packCnt = 0;
$scanCnt = 0;
$hasMotorQr = null;
$hasPumpQr = null;
$hasPumpSetQr = null;
$hasCapacitorQr = null;
$hadMotorQr = null;
$hadPumpQr = null;
$hadPumpSetQr = null;
$hadCapacitorQr = null;
if ($plantCod == null || $plantCod == '') {
$warnMsg[] = "Plant code can't be empty!";
} elseif ($iCode == null || $iCode == '') {
$warnMsg[] = "Item code can't be empty!";
} elseif ($invoiceNumber == null || $invoiceNumber == '') {
$warnMsg[] = "Invoice number can't be empty!";
} elseif ($serialNumber == null || $serialNumber == '') {
$warnMsg[] = "Serial number can't be empty!";
} elseif ($curMotorQr != null && $curMotorQr != '' && $curMotorQr != '1' && $curMotorQr != 1) {
$warnMsg[] = 'Motor scanned status is invalid!';
} elseif ($curPumpQr != null && $curPumpQr != '' && $curPumpQr != '1' && $curPumpQr != 1) {
$warnMsg[] = 'Pump scanned status is invalid!';
} elseif ($curPumpSetQr != null && $curPumpSetQr != '' && $curPumpSetQr != '1' && $curPumpSetQr != 1) {
$warnMsg[] = 'PumpSet scanned status is invalid!';
} elseif ($curCapacitorQr != null && $curCapacitorQr != '' && $curCapacitorQr != '1' && $curCapacitorQr != 1) {
$warnMsg[] = 'Capacitor scanned status is invalid!';
} elseif ($curScanStatus != null && $curScanStatus != '' && $curScanStatus != 'Scanned') {
$warnMsg[] = 'Scanned status is invalid!';
} elseif ($loadRate == null || $loadRate == '' || ! is_numeric($loadRate)) {
$warnMsg[] = 'Invalid load rate found!';
} elseif ($uploadStatus != 'N' && $uploadStatus != 'Y') {
$warnMsg[] = 'Invalid upload status found!';
} elseif ($operatorId == null || $operatorId == '') {
$warnMsg[] = "Operator ID can't be empty!";
} elseif ($createdBy == null || $createdBy == '') {
$warnMsg[] = "Created by user can't be empty!";
} elseif ($updatedBy == null || $updatedBy == '') {
$warnMsg[] = "Updated by user can't be empty!";
}
if (Str::length($plantCod) > 0 && (Str::length($plantCod) < 4 || ! is_numeric($plantCod) || ! preg_match('/^[1-9]\d{3,}$/', $plantCod))) {
$warnMsg[] = 'Invalid plant code found!';
} elseif (Str::length($plantCod) > 0) {
$plant = Plant::where('code', $plantCod)->first();
if (! $plant) {
$warnMsg[] = 'Plant code not found!';
} else {
$plantId = $plant->id;
}
}
if (Str::length($iCode) > 0 && (Str::length($iCode) < 6 || ! ctype_alnum($iCode))) {
$warnMsg[] = 'Invalid item code found!';
} elseif ($plantId) {
$itemCode = Item::where('code', $iCode)->first();
if (! $itemCode) {
$warnMsg[] = 'Item code not found in item master!';
} else {
$itemCode = Item::where('code', $iCode)->where('plant_id', $plantId)->first();
if (! $itemCode) {
$warnMsg[] = 'Item code not found in item master for the given plant!';
} else {
$itemId = $itemCode->id;
$itemCode = StickerMaster::where('item_id', $itemId)->first();
if (! $itemCode) {
$warnMsg[] = 'Item code not found in sticker master!';
} else {
if ($plantId) {
$itemCode = StickerMaster::where('item_id', $itemId)->where('plant_id', $plantId)->first();
if (! $itemCode) {
$warnMsg[] = 'Item code not found in sticker master for the given plant!';
} elseif ($itemCode->material_type != '' && $itemCode->material_type != null) {
$stickId = null;
$warnMsg[] = 'Material invoice item code found!';
} else {
$stickId = $itemCode->id;
$invalidPackage = false;
$hasMotorQr = $itemCode->tube_sticker_motor ?? null;
$hasPumpQr = $itemCode->tube_sticker_pump ?? null;
$hasPumpSetQr = $itemCode->tube_sticker_pumpset ?? null;
$hasCapacitorQr = $itemCode->panel_box_code ?? null;
if (! $hasMotorQr && ! $hasPumpQr && ! $hasPumpSetQr) {// && ! $hasCapacitorQr
$hasMotorQr = $itemCode->pack_slip_motor ?? null;
$hasPumpQr = $itemCode->pack_slip_pump ?? null;
$hasPumpSetQr = $itemCode->pack_slip_pumpset ?? null;
} else {
if (! $hasPumpSetQr && ! $hasPumpQr) {
$hasPumpQr = $itemCode->pack_slip_pump ?? null;
}
$hasTubeMotorQr = $itemCode->tube_sticker_motor ?? null;
$hasPackMotorQr = $itemCode->pack_slip_motor ?? null;
$hasTubePumpSetQr = $itemCode->tube_sticker_pumpset ?? null;
$hasPackPumpSetQr = $itemCode->pack_slip_pumpset ?? null;
if ($hasTubeMotorQr != $hasPackMotorQr || $hasTubePumpSetQr != $hasPackPumpSetQr) {
$invalidPackage = true;
}
}
if ((! $hasMotorQr && ! $hasPumpQr && ! $hasPumpSetQr && ! $hasCapacitorQr) || $invalidPackage) {
$stickId = null;
$warnMsg[] = "Item code doesn't have valid package type to proceed!";
} else {
if ($hasMotorQr) {
$packCnt++;
}
if ($hasPumpQr) {
$packCnt++;
}
if ($hasPumpSetQr) {
$packCnt++;
}
if ($hasCapacitorQr) {
$packCnt++;
}
// if ($hasMotorQr || $hasPumpQr || $hasPumpSetQr || $hasCapacitorQr) {
// $packCnt = $hasMotorQr ? $packCnt + 1 : $packCnt;
// $packCnt = $hasPumpQr ? $packCnt + 1 : $packCnt;
// $packCnt = $hasPumpSetQr ? $packCnt + 1 : $packCnt;
// $packCnt = $hasCapacitorQr ? $packCnt + 1 : $packCnt;
// }
}
}
}
}
}
}
}
if ($stickId) {
if (! $hasMotorQr) {
$curMotorQr = null;
}
if (! $hasPumpQr) {
$curPumpQr = null;
}
if (! $hasPumpSetQr) {
$curPumpSetQr = null;
}
if (! $hasCapacitorQr) {
$curCapacitorQr = null;
$curPanelBoxCode = null;
$curPanelBoxSupplier = null;
$curPanelBoxSerialNumber = null;
}
$record = InvoiceValidation::where('serial_number', $serialNumber)
->where('plant_id', $plantId)
->whereHas('stickerMasterRelation.item', function ($query) use ($plantId, $iCode) {
$query->where('plant_id', $plantId)->where('code', $iCode);
})
->first();
$invalidPackage = false;
if ($record) {
$hadMotorQr = $record->motor_scanned_status ?? null;
$hadPumpQr = $record->pump_scanned_status ?? null;
$hadPumpSetQr = $record->scanned_status_set ?? null;
$hadCapacitorQr = $record->capacitor_scanned_status ?? null;
if ($hadMotorQr) {
$curMotorQr = $hadMotorQr;
}
if ($hadPumpQr) {
$curPumpQr = $hadPumpQr;
}
if ($hadPumpSetQr) {
$curPumpSetQr = $hadPumpSetQr;
}
if ($hadCapacitorQr) {
$curCapacitorQr = $hadCapacitorQr;
$curPanelBoxCode = $record->panel_box_code ?? null;
$curPanelBoxSupplier = $record->panel_box_supplier ?? null;
$curPanelBoxSerialNumber = $record->panel_box_serial_number ?? null;
}
if ($record->scanned_status == 'Scanned') {
return null;
} elseif ($record->invoice_number != $invoiceNumber) {
throw new RowImportFailedException('Invoice number mismatch with existing record!');
}
// if ($hadPumpQr == $hasPumpQr && $hadPumpSetQr == $hasPumpSetQr)
if ($hasMotorQr || $hasPumpQr || $hasPumpSetQr || $hasCapacitorQr) {
$scanCnt = $curMotorQr ? $scanCnt + 1 : $scanCnt;
$scanCnt = $curPumpQr ? $scanCnt + 1 : $scanCnt;
$scanCnt = $curPumpSetQr ? $scanCnt + 1 : $scanCnt;
$scanCnt = $curCapacitorQr ? $scanCnt + 1 : $scanCnt;
$record->motor_scanned_status = $curMotorQr;
$record->pump_scanned_status = $curPumpQr;
$record->scanned_status_set = $curPumpSetQr;
$record->capacitor_scanned_status = $curCapacitorQr;
$record->panel_box_code = $curPanelBoxCode;
$record->panel_box_supplier = $curPanelBoxSupplier;
$record->panel_box_serial_number = $curPanelBoxSerialNumber;
if ($packCnt == $scanCnt) {
$record->scanned_status = 'Scanned';
}
$record->updated_by = $updatedBy;
$record->save();
return null;
}
}
}
if ($stickId) {
$formats = ['d-m-Y H:i', 'd-m-Y H:i:s']; // '07-05-2025 08:00' or '07-05-2025 08:00:00'
$cDateTime = null;
$uDateTime = null;
foreach ($formats as $format) {
try {
$cDateTime = Carbon::createFromFormat($format, $createdAt);
break;
} catch (\Exception $e) {
// $warnMsg[] = "Date format mismatch with format: $format";
}
}
foreach ($formats as $format) {
try {
$uDateTime = Carbon::createFromFormat($format, $updatedAt);
break;
} catch (\Exception $e) {
// $warnMsg[] = "Date format mismatch with format: $format";
}
}
if (! isset($cDateTime)) {
$warnMsg[] = "Invalid 'Created DateTime' format. Expected DD-MM-YYYY HH:MM:SS";
}
if (! isset($uDateTime)) {
$warnMsg[] = "Invalid 'Updated DateTime' format. Expected DD-MM-YYYY HH:MM:SS";
}
if (isset($cDateTime) && isset($uDateTime)) {
if ($cDateTime->greaterThan($uDateTime)) {
$warnMsg[] = "'Created DataTime' is greater than 'Updated DateTime'.";
}
}
}
if (! empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
}
if ($hasMotorQr || $hasPumpQr || $hasPumpSetQr || $hasCapacitorQr) {
$scanCnt = $curMotorQr ? $scanCnt + 1 : $scanCnt;
$scanCnt = $curPumpQr ? $scanCnt + 1 : $scanCnt;
$scanCnt = $curPumpSetQr ? $scanCnt + 1 : $scanCnt;
$scanCnt = $curCapacitorQr ? $scanCnt + 1 : $scanCnt;
if ($packCnt == $scanCnt) {
$curScanStatus = 'Scanned';
} else {
$curScanStatus = null;
}
}
// $curScanStatus
return InvoiceValidation::updateOrCreate([
'plant_id' => $plantId,
'sticker_master_id' => $stickId,
'serial_number' => $serialNumber,
],
[
'invoice_number' => $invoiceNumber,
'motor_scanned_status' => $curMotorQr,
'pump_scanned_status' => $curPumpQr,
'scanned_status_set' => $curPumpSetQr,
'capacitor_scanned_status' => $curCapacitorQr,
'panel_box_code' => $curPanelBoxCode,
'panel_box_supplier' => $curPanelBoxSupplier,
'panel_box_serial_number' => $curPanelBoxSerialNumber,
'scanned_status' => $curScanStatus,
'load_rate' => $loadRate,
'upload_status' => $uploadStatus,
'batch_number' => null,
'quantity' => null,
'operator_id' => $operatorId,
'created_by' => $createdBy,
'updated_by' => $updatedBy,
'created_at' => $cDateTime->format('Y-m-d H:i:s'),
'updated_at' => $uDateTime->format('Y-m-d H:i:s'),
]);
// return new InvoiceValidation;
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your invoice validation import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
if ($failedRowsCount = $import->getFailedRowsCount()) {
$body .= ' '.number_format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to import.';
}
return $body;
}
}

View File

@@ -142,12 +142,13 @@ class ProcessOrderImporter extends Importer
if ($recQuan == null || $recQuan == '') { if ($recQuan == null || $recQuan == '') {
$recQuan = 0; $recQuan = 0;
} }
if ($reworkStatus == null || $reworkStatus = '' || $reworkStatus == 0 || $reworkStatus = '0') { if ($reworkStatus == null || $reworkStatus = '') {
$reworkStatus = 0; $reworkStatus = 0;
} elseif ($reworkStatus == 1 || $reworkStatus = '1') { }
$reworkStatus = 1;
} else { if ($createdBy == null || $createdBy == '') {
$warnMsg[] = 'Invalid rework status found'; $createdBy = Filament::auth()->user()?->name;
$updatedBy = $createdBy;
} }
if (Str::length($plantCod) < 4 || ! is_numeric($plantCod) || ! preg_match('/^[1-9]\d{3,}$/', $plantCod)) { if (Str::length($plantCod) < 4 || ! is_numeric($plantCod) || ! preg_match('/^[1-9]\d{3,}$/', $plantCod)) {
@@ -208,16 +209,21 @@ class ProcessOrderImporter extends Importer
$lineId = null; $lineId = null;
} }
// $user = User::where('name', $this->data['created_by'])->first(); if ($createdBy != null && $createdBy != '') {
// if (! $user) { if ($plantId) {
// $warnMsg[] = 'User not found'; $user = User::where('name', $createdBy)->first();
// }
if (! $createdBy) { $userPlant = User::where('name', $createdBy)->where('plant_id', $plantId)->first();
$createdBy = Filament::auth()->user()->name;
$updatedBy = Filament::auth()->user()->name; if (! $user) {
} elseif (! $updatedBy) { $warnMsg[] = 'Created By user name not found!';
$updatedBy = Filament::auth()->user()->name; } elseif (! $userPlant && ! $user->hasRole('Super Admin')) {
$warnMsg[] = "Created By user '{$createdBy}' not found for Plant '{$plantCod}'!";
} elseif (! $user->hasRole(['Super Admin', 'Process Quality Manager', 'Process Manager', 'Process Supervisor', 'Process Employee'])) {
$warnMsg[] = 'Created By user does not have rights!';
}
}
$updatedBy = Filament::auth()->user()?->name;
} }
if (! empty($warnMsg)) { if (! empty($warnMsg)) {
@@ -274,10 +280,9 @@ class ProcessOrderImporter extends Importer
->where('coil_number', $coilNo) ->where('coil_number', $coilNo)
->first(); ->first();
if (! $existing && ($coilNo == '0' || $coilNo == 0)) { if (! $existing && $coilNo == '0' || $coilNo == 0) {
ProcessOrder::create([ ProcessOrder::create([
'plant_id' => $plantId, 'plant_id' => $plantId,
'line_id' => $lineId,
'item_id' => $itemId, 'item_id' => $itemId,
'process_order' => $processOrder, 'process_order' => $processOrder,
'coil_number' => '0', 'coil_number' => '0',
@@ -292,8 +297,8 @@ class ProcessOrderImporter extends Importer
[ [
'plant_id' => $plantId, 'plant_id' => $plantId,
'line_id' => $lineId, 'line_id' => $lineId,
'item_id' => $itemId,
'process_order' => $processOrder, 'process_order' => $processOrder,
'item_id' => $itemId,
'coil_number' => $coilNo, 'coil_number' => $coilNo,
'order_quantity' => $orderQuan, 'order_quantity' => $orderQuan,
'received_quantity' => $recQuan, 'received_quantity' => $recQuan,
@@ -301,17 +306,13 @@ class ProcessOrderImporter extends Importer
'sfg_number' => $sfgNo, 'sfg_number' => $sfgNo,
'machine_name' => $machineName, 'machine_name' => $machineName,
'rework_status' => $reworkStatus, 'rework_status' => $reworkStatus,
// 'created_at' => $createdAt, 'created_at' => $createdAt,
// 'updated_at' => $updatedAt, 'updated_at' => $updatedAt,
'created_by' => $createdBy, 'created_by' => $createdBy,
'updated_by' => $updatedBy, 'updated_by' => $updatedBy,
] ]
); );
} else {// $coilNo = '0' } else {// $coilNo = '0'
if ($existing->rework_status == 1 && $reworkStatus == 0) {
throw new RowImportFailedException('Rework coil number already exist for the given Plant and Process Order!');
}
ProcessOrder::where('plant_id', $plantId) ProcessOrder::where('plant_id', $plantId)
->where('process_order', $processOrder) ->where('process_order', $processOrder)
->where('coil_number', $coilNo) ->where('coil_number', $coilNo)
@@ -323,7 +324,7 @@ class ProcessOrderImporter extends Importer
// 'machine_name' => $machineId, // 'machine_name' => $machineId,
'rework_status' => $reworkStatus, 'rework_status' => $reworkStatus,
'updated_by' => $updatedBy, 'updated_by' => $updatedBy,
// 'updated_at' => $updatedAt, 'updated_at' => $updatedAt,
]); ]);
} }
} }

View File

@@ -31,6 +31,47 @@ class ProductionTarget extends Page
->schema([ ->schema([
Section::make('') Section::make('')
->schema([ ->schema([
Select::make('plant_id')
->label('Plant')
->relationship('plant', 'name')
->reactive()
// ->searchable()
->options(function (callable $get) {
$userHas = Filament::auth()->user()->plant_id;
return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::pluck('name', 'id')->toArray();
})
->required()
->afterStateUpdated(function ($state, callable $get, $set) {
// dd($state);
$set('line_id', null);
$set('year', null);
$set('month', null);
$this->dispatch('loadData',$state, '', '', '');
}),
Select::make('line_id')
->label('Line')
->required()
->relationship('line', 'name')
// ->searchable()
->columnSpan(1)
->options(function (callable $get) {
if (!$get('plant_id')) {
return [];
}
return \App\Models\Line::where('plant_id', $get('plant_id'))
->pluck('name', 'id')
->toArray();
})
->reactive()
->afterStateUpdated(function ($state, callable $get, $set) {
$plantId = $get('plant_id');
$set('year', null);
$set('month', null);
$this->dispatch('loadData',$plantId, $state, '', '');
}),
Select::make('year') Select::make('year')
->label('Year') ->label('Year')
->reactive() ->reactive()
@@ -56,13 +97,9 @@ class ProductionTarget extends Page
->required() ->required()
->afterStateUpdated(function ($state, callable $get, $set) { ->afterStateUpdated(function ($state, callable $get, $set) {
$set('month', null); $set('month', null);
$set('plant_id', null);
$set('line_id', null);
$set('category', null);
$plantId = $get('plant_id'); $plantId = $get('plant_id');
$lineId = $get('line_id'); $lineId = $get('line_id');
// $this->dispatch('loadData',$plantId, $lineId, $state, ''); $this->dispatch('loadData',$plantId, $lineId, $state, '');
$this->dispatch('loadData',$state, '', '', '', '');
}), }),
Select::make('month') Select::make('month')
@@ -84,86 +121,23 @@ class ProductionTarget extends Page
'12' => 'December', '12' => 'December',
]) ])
->required() ->required()
->afterStateUpdated(function ($state, callable $get, $set) { ->afterStateUpdated(function ($state, callable $get) {
$set('plant_id', null);
$set('line_id', null);
$set('category', null);
$plantId = $get('plant_id');
$lineId = $get('line_id');
// $month = $get('month');
$year = $get('year'); $year = $get('year');
$this->dispatch('loadData',$year, $state, '', '', ''); $month = (int) $get('month');
// $plantId = $get('plant_id'); if (!$month) {
// $lineId = $get('line_id'); return;
// // $month = $get('month');
// $year = $get('year');
// $month = (int) $get('month');
// if (!$month) {
// return;
// }
// $this->dispatch('loadData', $plantId, $lineId, $month, $year);
}),
Select::make('plant_id')
->label('Plant')
->relationship('plant', 'name')
->reactive()
// ->searchable()
->options(function (callable $get) {
$userHas = Filament::auth()->user()->plant_id;
return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::pluck('name', 'id')->toArray();
})
->required()
->afterStateUpdated(function ($state, callable $get, $set) {
// dd($state);
$set('line_id', null);
$set('category', null);
$this->dispatch('loadData',$state, '', '', '', '');
}),
Select::make('line_id')
->label('Line')
->required()
->relationship('line', 'name')
// ->searchable()
->columnSpan(1)
->options(function (callable $get) {
if (!$get('plant_id')) {
return [];
} }
$this->dispatch('loadData', $plantId, $lineId, $month, $year);
return \App\Models\Line::where('plant_id', $get('plant_id'))
->pluck('name', 'id')
->toArray();
})
->reactive()
->afterStateUpdated(function ($state, callable $get, $set) {
$plantId = $get('plant_id');
$lineId = $get('line_id');
// $month = $get('month');
$year = $get('year');
$month = (int) $get('month');
$this->dispatch('loadData',$year, $month, $plantId, $lineId, '');
}),
TextInput::make('category')
->label('Category')
->reactive()
->afterStateUpdated(function ($state, callable $get, $set) {
$plantId = $get('plant_id');
$lineId = $get('line_id');
// $month = $get('month');
$year = $get('year');
$month = (int) $get('month');
$category = $get('category');
$this->dispatch('loadData',$year, $month, $plantId, $lineId, $category);
}), }),
]) ])
->columns(5) ->columns(4)
]); ]);
} }

View File

@@ -1,304 +0,0 @@
<?php
namespace App\Filament\Pages;
use App\Models\CustomerPoMaster;
use App\Models\Plant;
use App\Models\WireMasterPacking;
use Filament\Facades\Filament;
use Filament\Pages\Page;
use Illuminate\Support\Facades\Auth;
use Filament\Forms\Contracts\HasForms;
use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Form;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Notifications\Notification;
class WireMasterPrint extends Page
{
protected static ?string $navigationIcon = 'heroicon-o-document-text';
protected static string $view = 'filament.pages.wire-master-print';
use InteractsWithForms;
public $pId, $palletNo, $serialNo;
public $snoCount = 0;
public bool $disableSerialNo = false;
public bool $disablePalletNo = false;
public $locatorNumber;
public $state = [];
public $plantId;
public $scanLocator;
public $locators;
public array $filters = [];
public function mount()
{
$this->form->fill([
'plant_id'=>$this->plantId,
'pallet_quantity' => 0,
]);
}
public function form(Form $form): Form
{
return $form
->statePath('filters')
->schema([
Section::make('')
->schema([
Select::make('plant_id')
->label('Plant')
->reactive()
//->options(Plant::pluck('name', 'id'))
->options(function (callable $get) {
$userHas = Filament::auth()->user()->plant_id;
return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::pluck('name', 'id')->toArray();
})
->required(),
Select::make('customer_po_master_id')
->label('Customer PO')
->reactive()
->searchable()
->options(function (callable $get) {
$plantId = $get('plant_id');
if (empty($plantId)) {
return [];
}
return CustomerPoMaster::where('plant_id', $plantId)->pluck('customer_po', 'id');
})
->required(),
select::make('scan_pallet_no')
->label('Scan Pallet No')
->reactive()
->options(function ($get) {
$plantId = $get('plant_id');
$customerPoId = $get('customer_po_master_id');
if (! $plantId || ! $customerPoId) {
return [];
}
$palletNumbers = WireMasterPacking::query()
->select('wire_packing_number')
->where('plant_id', $plantId)
->where('customer_po_master_id', $customerPoId)
->whereNotNull('wire_packing_number')
->groupBy('wire_packing_number')
->havingRaw('COUNT(*) = COUNT(wire_packing_status)')
->havingRaw("SUM(CASE WHEN TRIM(wire_packing_status) = '' THEN 1 ELSE 0 END) = 0")
->orderBy('wire_packing_number', 'asc')
->pluck('wire_packing_number')
->toArray();
return collect($palletNumbers)
->mapWithKeys(fn ($number) => [$number => $number])
->toArray();
})
->afterStateUpdated(function ($state, callable $set, $get) {
$palletNo = $state;
$plantId = $get('plant_id');
$this->dispatch('loadData', $palletNo, $plantId);
})
->extraAttributes([
'wire:keydown.enter' => 'processPalletNo($event.target.value)',
]),
// TextInput::make('customer_name')
// ->label('Customer Name')
// ->required()
// ->reactive(),
])
->columns(3)
]);
}
public function processPalletNo($palletNo)
{
$plantId = $this->form->getState()['plant_id'];
$plantId = trim($plantId) ?? null;
$palletNo= $this->form->getState()['scan_pallet_no'];
$palletNo = trim($palletNo) ?? null;
$operatorName = Filament::auth()->user()->name;
if ($palletNo == null || $palletNo == '')
{
Notification::make()
->title("Pallet number can't be empty!")
->danger()
->duration(5000)
->send();
$this->dispatch('loadLocator' ,'',$plantId);
$this->form->fill
([
'plant_id' => $plantId,
'scan_serial_no' => null,
'scan_pallet_no' => null,
'scan_locator_no' => null,
'pallet_quantity' => 0,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
// else if (strlen($palletNo) < 10)
// {
// Notification::make()
// ->title("Pallet number '$palletNo' must be at least 10 digits.")
// ->danger()
// ->duration(5000)
// ->send();
// $this->dispatch('loadLocator' ,'',$plantId);
// $this->form->fill
// ([
// 'plant_id' => $plantId,
// 'scan_serial_no' => null,
// 'scan_pallet_no' => null,
// 'scan_locator_no' => null,
// 'pallet_quantity' => 0,
// 'created_by' => $operatorName,
// 'scanned_by' => $operatorName,
// ]);
// return;
// }
$Palletexists = WireMasterPacking::where('wire_packing_number', $palletNo)
->where('plant_id', $plantId)->first();
if(!$Palletexists)
{
Notification::make()
->title("Pallet number '$palletNo' does not found in wire master packing table.")
->danger()
->duration(5000)
->send();
$this->dispatch('loadData' ,'',$plantId);
$this->form->fill
([
'plant_id' => $plantId,
'scan_pallet_no' => null,
'pallet_quantity' => 0,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
else
{
$this->snoCount = WireMasterPacking::where('plant_id', $plantId)
->where('wire_packing_number', $palletNo)
->count();
$this->dispatch('loadData', $palletNo, $plantId);
$this->form->fill
([
'plant_id' => $plantId,
'scan_pallet_no' => $palletNo,
'pallet_quantity' => $this->snoCount,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
}
public function saveCustomerPO(){
$plantId = $this->form->getState()['plant_id'];
$plantId = trim($plantId) ?? null;
$palletNo= $this->form->getState()['scan_pallet_no'];
$palletNo = trim($palletNo) ?? null;
$customerPO = $this->form->getState()['customer_po'];
$customerPO = trim($customerPO) ?? null;
$customerName = $this->form->getState()['customer_name'];
$customerName = trim($customerName) ?? null;
if (!$plantId || !$palletNo) {
return; // optional validation
}
$record = WireMasterPacking::where('plant_id', $plantId)
->where('wire_packing_number', $palletNo)
->update([
'customer_po' => $customerPO,
'customer_name' => $customerName,
'updated_at' => now(),
]);
if($record){
Notification::make()
->title("Customer PO updated successfully for the pallet number '$palletNo'")
->success()
->send();
return;
}
else
{
Notification::make()
->title("Customer PO updation failed for the pallet number '$palletNo'")
->success()
->send();
return;
}
}
public function printPallet()
{
$palletNumber = $this->form->getState()['scan_pallet_no'] ?? null;
$plantId = $this->form->getState()['plant_id'] ?? null;
$customerId = $this->form->getState()['customer_po_master_id'] ?? null;
$state = $this->form->getState();
// $customerCode = $state['customer_po'] ?? null;
// $customerName = $state['customer_name'] ?? null;
if (!$palletNumber) {
Notification::make()
->title("Pallet number cant't be empty!")
->danger()
->duration(5000)
->send();
return;
}
// return redirect()->route('print.pallet', [
// 'pallet' => $palletNumber,
// 'plant' => $plantId,
// ]);
$this->dispatch('open-pdf', url: route('print.pallet', [
'pallet' => $state['scan_pallet_no'],
'plant' => $state['plant_id'],
'customer' => $state['customer_po_master_id'],
]));
}
public static function canAccess(): bool
{
return Auth::check() && Auth::user()->can('view wire master print page');
}
}

View File

@@ -339,11 +339,6 @@ class CharacteristicValueResource extends Resource
->searchable() ->searchable()
->alignCenter() ->alignCenter()
->sortable(), ->sortable(),
Tables\Columns\TextColumn::make('item.description')
->label('Description')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('machine.work_center') Tables\Columns\TextColumn::make('machine.work_center')
->label('Machine') ->label('Machine')
->searchable() ->searchable()

View File

@@ -1,176 +0,0 @@
<?php
namespace App\Filament\Resources;
use App\Filament\Exports\CustomerPoMasterExporter;
use App\Filament\Imports\CustomerPoMasterImporter;
use App\Filament\Resources\CustomerPoMasterResource\Pages;
use App\Filament\Resources\CustomerPoMasterResource\RelationManagers;
use App\Models\CustomerPoMaster;
use App\Models\Item;
use App\Models\Plant;
use Filament\Facades\Filament;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Tables\Actions\ExportAction;
use Filament\Tables\Actions\ImportAction;
class CustomerPoMasterResource extends Resource
{
protected static ?string $model = CustomerPoMaster::class;
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
public static function form(Form $form): Form
{
return $form
->schema([
Forms\Components\Select::make('plant_id')
->label('Plant')
->reactive()
->relationship('plant', 'name')
->options(function (callable $get) {
$userHas = Filament::auth()->user()->plant_id;
return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray();
})
->required(),
Forms\Components\Select::make('item_id')
->label('Item Code')
->reactive()
->searchable()
->options(function (callable $get) {
$plantId = $get('plant_id');
if (empty($plantId)) {
return [];
}
return Item::where('plant_id', $plantId)->pluck('code', 'id');
})
->required(),
Forms\Components\TextInput::make('customer_po')
->label('Customer PO'),
Forms\Components\TextInput::make('customer_name')
->label('Customer Name'),
Forms\Components\TextInput::make('quantity')
->label('Quantity'),
Forms\Components\Hidden::make('created_by')
->label('Created By')
->default(Filament::auth()->user()?->name),
Forms\Components\Hidden::make('updated_by')
->default(Filament::auth()->user()?->name),
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('No.')
->label('No.')
->getStateUsing(function ($record, $livewire, $column, $rowLoop) {
$paginator = $livewire->getTableRecords();
$perPage = method_exists($paginator, 'perPage') ? $paginator->perPage() : 10;
$currentPage = method_exists($paginator, 'currentPage') ? $paginator->currentPage() : 1;
return ($currentPage - 1) * $perPage + $rowLoop->iteration;
}),
Tables\Columns\TextColumn::make('plant.name')
->label('Plant')
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('item.code')
->label('Item Code')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('customer_po')
->label('Customer PO')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('customer_name')
->label('Customer Name')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('quantity')
->label('Quantity')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('created_at')
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('updated_at')
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('deleted_at')
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
])
->filters([
Tables\Filters\TrashedFilter::make(),
])
->actions([
Tables\Actions\ViewAction::make(),
Tables\Actions\EditAction::make(),
])
->bulkActions([
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
Tables\Actions\ForceDeleteBulkAction::make(),
Tables\Actions\RestoreBulkAction::make(),
]),
])
->headerActions([
ImportAction::make()
->label('Import Customer PO')
->color('warning')
->importer(CustomerPoMasterImporter::class)
->visible(function () {
return Filament::auth()->user()->can('view import customer po master');
}),
ExportAction::make()
->label('Export Customer PO')
->color('warning')
->exporter(CustomerPoMasterExporter::class)
->visible(function () {
return Filament::auth()->user()->can('view export customer po master');
}),
]);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => Pages\ListCustomerPoMasters::route('/'),
'create' => Pages\CreateCustomerPoMaster::route('/create'),
'view' => Pages\ViewCustomerPoMaster::route('/{record}'),
'edit' => Pages\EditCustomerPoMaster::route('/{record}/edit'),
];
}
public static function getEloquentQuery(): Builder
{
return parent::getEloquentQuery()
->withoutGlobalScopes([
SoftDeletingScope::class,
]);
}
}

View File

@@ -1,12 +0,0 @@
<?php
namespace App\Filament\Resources\CustomerPoMasterResource\Pages;
use App\Filament\Resources\CustomerPoMasterResource;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreateCustomerPoMaster extends CreateRecord
{
protected static string $resource = CustomerPoMasterResource::class;
}

View File

@@ -1,22 +0,0 @@
<?php
namespace App\Filament\Resources\CustomerPoMasterResource\Pages;
use App\Filament\Resources\CustomerPoMasterResource;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
class EditCustomerPoMaster extends EditRecord
{
protected static string $resource = CustomerPoMasterResource::class;
protected function getHeaderActions(): array
{
return [
Actions\ViewAction::make(),
Actions\DeleteAction::make(),
Actions\ForceDeleteAction::make(),
Actions\RestoreAction::make(),
];
}
}

View File

@@ -1,19 +0,0 @@
<?php
namespace App\Filament\Resources\CustomerPoMasterResource\Pages;
use App\Filament\Resources\CustomerPoMasterResource;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListCustomerPoMasters extends ListRecords
{
protected static string $resource = CustomerPoMasterResource::class;
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
];
}
}

View File

@@ -1,19 +0,0 @@
<?php
namespace App\Filament\Resources\CustomerPoMasterResource\Pages;
use App\Filament\Resources\CustomerPoMasterResource;
use Filament\Actions;
use Filament\Resources\Pages\ViewRecord;
class ViewCustomerPoMaster extends ViewRecord
{
protected static string $resource = CustomerPoMasterResource::class;
protected function getHeaderActions(): array
{
return [
Actions\EditAction::make(),
];
}
}

View File

@@ -446,7 +446,7 @@ class GrMasterResource extends Resource
->alignCenter() ->alignCenter()
->sortable(), ->sortable(),
Tables\Columns\TextColumn::make('item.code') Tables\Columns\TextColumn::make('item.code')
->label('Item') ->label('Item Code')
->searchable() ->searchable()
->alignCenter() ->alignCenter()
->sortable(), ->sortable(),

View File

@@ -351,12 +351,12 @@ class InvoiceInTransitResource extends Resource
if (empty($transportName)) { if (empty($transportName)) {
$invalidTransportName[] = "Row {$index}"; $invalidTransportName[] = "Row {$index}";
} }
// if (empty($LRBAWNo)) { if (empty($LRBAWNo)) {
// $invalidLRBLAWNo[] = "Row {$index}"; $invalidLRBLAWNo[] = "Row {$index}";
// } }
// if (empty($LRBAWDt)) { if (empty($LRBAWDt)) {
// $invalidLRBLAWDt[] = "Row {$index}"; $invalidLRBLAWDt[] = "Row {$index}";
// } }
if (empty($pendingDays)) { if (empty($pendingDays)) {
$invalidPenDay[] = "Row {$index}"; $invalidPenDay[] = "Row {$index}";
} }
@@ -367,56 +367,50 @@ class InvoiceInTransitResource extends Resource
$invalidPlaCoFound[] = $plantCode; $invalidPlaCoFound[] = $plantCode;
} }
if($LRBAWNo){
if(strlen($LRBAWNo) < 2){
$invalidLRBLAWNo[] = $LRBAWNo;
}
}
$plant = Plant::where('code', $plantCode)->first(); $plant = Plant::where('code', $plantCode)->first();
// $plantId = $plant->id; // $plantId = $plant->id;
} }
if (! empty($invalidPlantCode) || ! empty($invalidRecPlant) || ! empty($invalidRecPlantName) || ! empty($invalidInvNo) || ! empty($invalidInvDt) || ! empty($invalidICode) || ! empty($invalidDesc) || ! empty($invalidQty) || ($invalidTransportName) || ! empty($invalidPenDay)) { if (! empty($invalidPlantCode) || ! empty($invalidRecPlant) || ! empty($invalidRecPlantName) || ! empty($invalidInvNo) || ! empty($invalidInvDt) || ! empty($invalidICode) || ! empty($invalidDesc) || ! empty($invalidQty) || ($invalidTransportName) || ! empty($invalidLRBLAWNo) || ! empty($invalidLRBLAWDt) || ! empty($invalidPenDay)) {
$errorMsg = ''; $errorMsg = '';
if (! empty($invalidPlantCode)) { if (! empty($invalidPlantCode)) {
$errorMsg .= 'Missing Receiving Plant Code in rows: '.implode(', ', $invalidPlantCode).'<br>'; $errorMsg .= 'Missing Receiving Plant in rows: '.implode(', ', $invalidPlantCode).'<br>';
} }
if (! empty($invalidRecPlant)) { if (! empty($invalidRecPlant)) {
$errorMsg .= 'Missing Receiving Plant in rows: '.implode(', ', $invalidRecPlant).'<br>'; $errorMsg .= 'Missing Receiving Plant Name in rows: '.implode(', ', $invalidRecPlant).'<br>';
} }
if (! empty($invalidRecPlantName)) { if (! empty($invalidRecPlantName)) {
$errorMsg .= 'Missing Receiving Plant Name in rows: '.implode(', ', $invalidRecPlantName).'<br>'; $errorMsg .= 'Missing Transit Days in rows: '.implode(', ', $invalidRecPlantName).'<br>';
} }
if (! empty($invalidInvNo)) { if (! empty($invalidInvNo)) {
$errorMsg .= 'Missing Invoice Number in rows: '.implode(', ', $invalidInvNo).'<br>'; $errorMsg .= 'Missing Transport Name in rows: '.implode(', ', $invalidInvNo).'<br>';
} }
if (! empty($invalidInvDt)) { if (! empty($invalidInvDt)) {
$errorMsg .= 'Missing Invoice Dates in rows: '.implode(', ', $invalidInvDt).'<br>'; $errorMsg .= 'Missing Receiving Plant in rows: '.implode(', ', $invalidInvDt).'<br>';
} }
if (! empty($invalidICode)) { if (! empty($invalidICode)) {
$errorMsg .= 'Missing Item Code in rows: '.implode(', ', $invalidICode).'<br>'; $errorMsg .= 'Missing Receiving Plant Name in rows: '.implode(', ', $invalidICode).'<br>';
} }
if (! empty($invalidDesc)) { if (! empty($invalidDesc)) {
$errorMsg .= 'Missing Item Description in rows: '.implode(', ', $invalidDesc).'<br>'; $errorMsg .= 'Missing Transit Days in rows: '.implode(', ', $invalidDesc).'<br>';
} }
if (! empty($invalidQty)) { if (! empty($invalidQty)) {
$errorMsg .= 'Missing Quantity in rows: '.implode(', ', $invalidQty).'<br>'; $errorMsg .= 'Missing Transport Name in rows: '.implode(', ', $invalidQty).'<br>';
} }
if (! empty($invalidTransportName)) { if (! empty($invalidTransportName)) {
$errorMsg .= 'Missing Transport Name in rows: '.implode(', ', $invalidTransportName).'<br>'; $errorMsg .= 'Missing Receiving Plant in rows: '.implode(', ', $invalidTransportName).'<br>';
}
if (! empty($invalidLRBLAWNo)) {
$errorMsg .= 'Missing Receiving Plant Name in rows: '.implode(', ', $invalidLRBLAWNo).'<br>';
}
if (! empty($invalidLRBLAWDt)) {
$errorMsg .= 'Missing Transit Days in rows: '.implode(', ', $invalidLRBLAWDt).'<br>';
} }
// if (! empty($invalidLRBLAWNo)) {
// $errorMsg .= 'Missing Receiving Plant Name in rows: '.implode(', ', $invalidLRBLAWNo).'<br>';
// }
// if (! empty($invalidLRBLAWDt)) {
// $errorMsg .= 'Missing Transit Days in rows: '.implode(', ', $invalidLRBLAWDt).'<br>';
// }
if (! empty($invalidPenDay)) { if (! empty($invalidPenDay)) {
$errorMsg .= 'Missing Pending Days in rows: '.implode(', ', $invalidPenDay).'<br>'; $errorMsg .= 'Missing Transport Name in rows: '.implode(', ', $invalidPenDay).'<br>';
} }
Notification::make() Notification::make()
@@ -460,30 +454,19 @@ class InvoiceInTransitResource extends Resource
return; return;
} }
if (! empty($invalidLRBLAWNo)) {
$invalidLRBLAWNo = array_unique($invalidLRBLAWNo);
Notification::make()
->title('Invalid LR/BL/AW Number')
->body('LR/BL/AW Number should contain length minimum 2 digits:<br>'.implode(', ', $invalidLRBLAWNo))
->danger()
->send();
if ($disk->exists($path)) {
$disk->delete($path);
}
return;
}
$mandatoryColumns = 23; $mandatoryColumns = 23;
$firstRow = $rows[0] ?? []; $firstRow = $rows[0] ?? [];
if (count($firstRow) < $mandatoryColumns) { if (count($firstRow) < $mandatoryColumns) {
Notification::make() Notification::make()
->title('Invalid Excel Format') ->title('Invalid Excel Format')
->body('Few columns not found. Columns A to W are mandatory.') ->body('Few columns not found. Columns A to W are mandatory.')
->danger() ->danger()
->persistent() ->persistent()
->send(); ->send();
return; return;
} }
@@ -547,7 +530,7 @@ class InvoiceInTransitResource extends Resource
if (! empty($OBDDate)) { if (! empty($OBDDate)) {
if (preg_match('/^\d{2}[-\/]\d{2}[-\/]\d{4}$/', $OBDDate)) { if (preg_match('/^\d{2}[-\/]\d{2}[-\/]\d{4}$/', $OBDDate)) {
[$day, $month, $year] = preg_split('/[-\/]/', $OBDDate); [$day, $month, $year] = preg_split('/[-\/]/', $OBDDate);
$formatted = "{$year}-{$month}-{$day}"; $formattedDate = "{$year}-{$month}-{$day}";
} elseif (is_numeric($OBDDate)) { } elseif (is_numeric($OBDDate)) {
$formatted = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($OBDDate)->format('Y-m-d'); $formatted = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($OBDDate)->format('Y-m-d');
} else { } else {
@@ -557,16 +540,6 @@ class InvoiceInTransitResource extends Resource
$formatted = null; $formatted = null;
} }
$rowNumber = $index + 1;
if ($LRBAWNo == '' || $LRBAWDt == '') {
// $missedInvoices[] = $invoiceNo;
// $missedInvoices[$invoiceNo][] = $index + 1;
// continue;
$key = $invoiceNo ?: 'Row '.$rowNumber;
$missedInvoices[$key][$rowNumber] = true;
continue;
}
$inserted = InvoiceInTransit::create([ $inserted = InvoiceInTransit::create([
'plant_id' => $plant->id, 'plant_id' => $plant->id,
'receiving_plant' => $receivingPlant, 'receiving_plant' => $receivingPlant,
@@ -594,28 +567,10 @@ class InvoiceInTransitResource extends Resource
'created_by' => $operatorName, 'created_by' => $operatorName,
]); ]);
} }
$formattedMissed = [];
if (!empty($missedInvoices)) {
$formattedMissed = array_map(
fn($rows, $invoice) =>
$invoice . ' (Row: ' . implode(', ', array_keys($rows)) . ')',
$missedInvoices,
array_keys($missedInvoices)
);
}
if ($inserted) { if ($inserted) {
$message = "Invoice in transit uploaded successfully!";
if (!empty($formattedMissed)) {
$message .= "\n\nSkipped Invoices (Missing LR/Date):\n"
. implode("\n", $formattedMissed);
}
Notification::make() Notification::make()
->title('Upload Completed') ->title('Upload Success')
->body($message) ->body('Invoice in transit uploaded successfully!')
->success() ->success()
->send(); ->send();

View File

@@ -4,7 +4,6 @@ namespace App\Filament\Resources;
use AlperenErsoy\FilamentExport\Actions\FilamentExportBulkAction; use AlperenErsoy\FilamentExport\Actions\FilamentExportBulkAction;
use App\Filament\Exports\InvoiceValidationExporter; use App\Filament\Exports\InvoiceValidationExporter;
use App\Filament\Imports\InvoiceValidationImporter;
use App\Filament\Resources\InvoiceValidationResource\Pages; use App\Filament\Resources\InvoiceValidationResource\Pages;
use App\Mail\InvoiceNotification; use App\Mail\InvoiceNotification;
use App\Models\InvoiceValidation; use App\Models\InvoiceValidation;
@@ -28,7 +27,6 @@ use Filament\Resources\Resource;
use Filament\Tables; use Filament\Tables;
use Filament\Tables\Actions\Action; use Filament\Tables\Actions\Action;
use Filament\Tables\Actions\ExportAction; use Filament\Tables\Actions\ExportAction;
use Filament\Tables\Actions\ImportAction;
use Filament\Tables\Filters\Filter; use Filament\Tables\Filters\Filter;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
@@ -1127,13 +1125,6 @@ class InvoiceValidationResource extends Resource
->visible(function () { ->visible(function () {
return Filament::auth()->user()->can('view import material invoice'); return Filament::auth()->user()->can('view import material invoice');
}), }),
ImportAction::make()
->label('Import Invoices')
->color('warning')
->importer(InvoiceValidationImporter::class)
->visible(function () {
return Filament::auth()->user()->can('view import invoice');
}),
ExportAction::make() ExportAction::make()
->label('Export Invoices') ->label('Export Invoices')
->color('warning') ->color('warning')

View File

@@ -49,7 +49,6 @@ class ProductCharacteristicsMasterResource extends Resource
return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray(); return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray();
}) })
->disabled(fn (Get $get) => ! empty($get('id')))
->default(function () { ->default(function () {
$userHas = Filament::auth()->user()->plant_id; $userHas = Filament::auth()->user()->plant_id;
@@ -73,7 +72,6 @@ class ProductCharacteristicsMasterResource extends Resource
return \App\Models\Item::where('plant_id', $plantId)->pluck('code', 'id'); return \App\Models\Item::where('plant_id', $plantId)->pluck('code', 'id');
}) })
->disabled(fn (Get $get) => ! empty($get('id')))
->afterStateUpdated(function ($state, callable $set) { ->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name); $set('updated_by', Filament::auth()->user()?->name);
}) })
@@ -90,7 +88,6 @@ class ProductCharacteristicsMasterResource extends Resource
return Line::where('plant_id', $plantId)->pluck('name', 'id'); return Line::where('plant_id', $plantId)->pluck('name', 'id');
}) })
->disabled(fn (Get $get) => ! empty($get('id')))
->afterStateUpdated(function ($state, callable $set, callable $get) { ->afterStateUpdated(function ($state, callable $set, callable $get) {
$set('machine_id', null); $set('machine_id', null);
if (! $get('work_group_master_id')) { if (! $get('work_group_master_id')) {
@@ -167,7 +164,6 @@ class ProductCharacteristicsMasterResource extends Resource
->where('work_group_master_id', $workGroupId) ->where('work_group_master_id', $workGroupId)
->pluck('work_center', 'id'); ->pluck('work_center', 'id');
}) })
->disabled(fn (Get $get) => ! empty($get('id')))
->afterStateUpdated(function ($state, callable $set, callable $get) { ->afterStateUpdated(function ($state, callable $set, callable $get) {
if (! $get('plant_id') || ! $get('line_id') || ! $get('work_group_master_id')) { if (! $get('plant_id') || ! $get('line_id') || ! $get('work_group_master_id')) {
$set('machine_id', null); $set('machine_id', null);
@@ -184,7 +180,6 @@ class ProductCharacteristicsMasterResource extends Resource
->reactive() ->reactive()
->searchable() ->searchable()
// ->preload() // ->preload()
->disabled(fn (Get $get) => ! empty($get('id') && ! Filament::auth()->user()->hasRole('Super Admin')))
->afterStateUpdated(function ($state, callable $set) { ->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name); $set('updated_by', Filament::auth()->user()?->name);
}) })
@@ -204,7 +199,6 @@ class ProductCharacteristicsMasterResource extends Resource
]) ])
->reactive() ->reactive()
// ->preload() // ->preload()
->disabled(fn (Get $get) => ! empty($get('id') && ! Filament::auth()->user()->hasRole('Super Admin')))
->afterStateUpdated(function ($state, callable $set) { ->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name); $set('updated_by', Filament::auth()->user()?->name);
}) })

View File

@@ -48,7 +48,6 @@ class ProductionPlanResource extends Resource
Section::make('') Section::make('')
->schema([ ->schema([
Forms\Components\Select::make('plant_id') Forms\Components\Select::make('plant_id')
->label('Plant')
->relationship('plant', 'name') ->relationship('plant', 'name')
->required() ->required()
// ->nullable() // ->nullable()
@@ -80,7 +79,6 @@ class ProductionPlanResource extends Resource
->hint(fn ($get) => $get('ppPlantError') ? $get('ppPlantError') : null) ->hint(fn ($get) => $get('ppPlantError') ? $get('ppPlantError') : null)
->hintColor('danger'), ->hintColor('danger'),
Forms\Components\Select::make('line_id') Forms\Components\Select::make('line_id')
->label('Line')
->relationship('line', 'name') ->relationship('line', 'name')
->required() ->required()
// ->nullable() // ->nullable()
@@ -439,7 +437,7 @@ class ProductionPlanResource extends Resource
->sortable() ->sortable()
->searchable(), ->searchable(),
Tables\Columns\TextColumn::make('line.name') Tables\Columns\TextColumn::make('line.name')
->label('Line') ->label('Plant')
->alignCenter() ->alignCenter()
->sortable() ->sortable()
->searchable(), ->searchable(),

View File

@@ -1,308 +0,0 @@
<?php
namespace App\Filament\Resources;
use App\Filament\Resources\WireMasterPackingResource\Pages;
use App\Models\CustomerPoMaster;
use App\Models\Plant;
use App\Models\WireMasterPacking;
use Filament\Facades\Filament;
use Filament\Forms;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
use Filament\Notifications\Notification;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
class WireMasterPackingResource extends Resource
{
protected static ?string $model = WireMasterPacking::class;
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
public $importedPoList = [];
public static function form(Form $form): Form
{
return $form
->schema([
Section::make('')
->schema([
Forms\Components\Select::make('plant_id')
->label('Plant')
->reactive()
->relationship('plant', 'name')
->options(function (callable $get) {
$userHas = Filament::auth()->user()->plant_id;
return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray();
})
->required(),
Forms\Components\Select::make('customer_po_master_id')
->label('Customer PO')
->reactive()
->searchable()
->options(function (callable $get) {
$plantId = $get('plant_id');
if (empty($plantId)) {
return [];
}
return CustomerPoMaster::where('plant_id', $plantId)->pluck('customer_po', 'id');
})
->required(),
Forms\Components\TextInput::make('wire_packing_number')
->label('Scan Wire Packing No')
->reactive()
->required()
->readonly()
->extraAttributes([
'x-data' => '{ value: "" }',
'x-model' => 'value',
'x-on:keydown.enter.prevent' => '$wire.processPalletNo()',
])
->suffixAction(fn ($get, $set) => Forms\Components\Actions\Action::make('addWirePackNo')
->label('')
->button()
->icon('heroicon-o-plus')
->color('primary')
->extraAttributes([
'class' => 'p-1 w-7 h-7',
])
->action(function ($get, $set, $livewire) {
$plantId = $get('plant_id');
session(['pallet_clicked_time' => now()->toDateTimeString()]);
session(['pallet_created_by' => Filament::auth()->user()->name]);
$year = now()->format('y');
$month = now()->format('m');
$prefix = "MP-{$year}{$month}";
$lastPallet = WireMasterPacking::where('wire_packing_number', 'like', "{$prefix}%")
->orderByDesc('wire_packing_number')
->first();
// if ($lastPallet) {
// // Extract numeric part after prefix
// $lastNumber = substr($lastPallet->wire_packing_number, strlen($prefix));
// $newNumber = str_pad(((int) $lastNumber) + 1, 3, '0', STR_PAD_LEFT);
// } else {
// // First pallet of the month
// $newNumber = '001';
// }
if ($lastPallet) {
$lastNumber = (int) substr(
$lastPallet->wire_packing_number,
strlen($prefix)
);
$newNumber = $lastNumber + 1;
$newNumber = $newNumber < 1000
? str_pad($newNumber, 3, '0', STR_PAD_LEFT)
: (string) $newNumber;
} else {
$newNumber = '001';
}
$newPalletNumber = "{$prefix}{$newNumber}";
$set('wire_packing_number', $newPalletNumber);
$set('plant_id', $plantId);
// $livewire->redirectToQrPdf($newPalletNumber);
})
),
Forms\Components\TextInput::make('process_order')
->label('Process Order')
->reactive()
->readOnly(fn (callable $get) => ! $get('wire_packing_number'))
->extraAttributes([
'x-on:keydown.enter.prevent' => '$wire.processOrderSNo()',
]),
Forms\Components\TextInput::make('removeSno_number')
->label('Remove Process Order')
->reactive()
->minLength(9)
->readOnly(fn (callable $get) => ! $get('wire_packing_number') || $get('process_order'))
->extraAttributes([
'x-data' => '{ value: "" }',
'x-model' => 'value',
'x-on:keydown.enter.prevent' => '$wire.processRemoveSNo()',
]),
Forms\Components\TextInput::make('Sno_quantity')
->label('SNo. Quantity')
->readOnly()
->default('0'),
Forms\Components\Select::make('pending_pallet_list')
->label('Pending Pallet List')
->reactive()
->afterStateUpdated(function ($state, callable $set) {
$set('wire_packing_number', $state);
$set('pallet_number_locked', false);
})
->options(function ($get) {
$plantId = $get('plant_id');
if (! $plantId) {
return [];
}
return WireMasterPacking::query()
->where('plant_id', $plantId)
->where(function ($query) {
$query->whereNull('wire_packing_status')
->orWhere('wire_packing_status', '');
})
->whereNotNull('wire_packing_number')
->orderBy('wire_packing_number', 'asc')
->pluck('wire_packing_number')
->unique()
->mapWithKeys(fn ($number) => [$number => $number])
->toArray();
}),
// Forms\Components\Checkbox::make('is_po')
// ->label('PO!')
// ->reactive(),
Forms\Components\View::make('forms.components.save-processorder-button'),
Forms\Components\Hidden::make('created_by')
->label('Created By'),
Forms\Components\Hidden::make('updated_by')
->label('Updated By'),
])
->columns(6),
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('No.')
->label('No.')
->alignCenter()
->getStateUsing(function ($record, $livewire, $column, $rowLoop) {
$paginator = $livewire->getTableRecords();
$perPage = method_exists($paginator, 'perPage') ? $paginator->perPage() : 10;
$currentPage = method_exists($paginator, 'currentPage') ? $paginator->currentPage() : 1;
return ($currentPage - 1) * $perPage + $rowLoop->iteration;
}),
Tables\Columns\TextColumn::make('plant.name')
->label('Plant')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('item.code')
->label('Item')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('item.description')
->label('Description')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('customerPo.customer_po')
->label('Customer PO')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('customerPo.customer_name')
->label('Customer Name')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('wire_packing_number')
->label('Wire Packing Number')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('process_order')
->label('Process Order')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('weight')
->label('Weight')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('wire_packing_status')
->label('Wire Packing Status')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('created_by')
->label('Created By')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('created_at')
->label('Created At')
->alignCenter()
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('updated_at')
->label('Updated At')
->alignCenter()
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('deleted_at')
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
])
->filters([
Tables\Filters\TrashedFilter::make(),
])
->actions([
Tables\Actions\ViewAction::make(),
Tables\Actions\EditAction::make(),
])
->bulkActions([
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
Tables\Actions\ForceDeleteBulkAction::make(),
Tables\Actions\RestoreBulkAction::make(),
]),
]);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => Pages\ListWireMasterPackings::route('/'),
'create' => Pages\CreateWireMasterPacking::route('/create'),
'view' => Pages\ViewWireMasterPacking::route('/{record}'),
'edit' => Pages\EditWireMasterPacking::route('/{record}/edit'),
];
}
public static function getEloquentQuery(): Builder
{
return parent::getEloquentQuery()
->withoutGlobalScopes([
SoftDeletingScope::class,
]);
}
}

View File

@@ -1,732 +0,0 @@
<?php
namespace App\Filament\Resources\WireMasterPackingResource\Pages;
use App\Filament\Resources\WireMasterPackingResource;
use App\Models\Item;
use App\Models\Plant;
use App\Models\WireMasterPacking;
use Filament\Actions;
use Filament\Facades\Filament;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\CreateRecord;
use Illuminate\View\View;
class CreateWireMasterPacking extends CreateRecord
{
protected static string $resource = WireMasterPackingResource::class;
public $processOrder;
public $customerPo;
public $plantId;
public $count = 0;
public $snoCount = 0;
public $pendingPallet;
public array $importedPoList = [];
protected static string $view = 'filament.resources.wire-sticker-resource.create-wire-master-packing';
protected $listeners = [
'updateSnoQuantity' => 'handleUpdateSnoQuantity',
];
public function handleUpdateSnoQuantity($newValue)
{
$this->form->fill([
'Sno_quantity' => $newValue,
]);
}
public function processOrderSNo(){
$plantId = $this->form->getState()['plant_id'];
$plantId = trim($plantId) ?? null;
$processOrder = trim($this->form->getState()['process_order'])?? null;
$customerPo = trim($this->form->getState()['customer_po_master_id'])?? null;
$wirePackNo = trim($this->form->getState()['wire_packing_number'])?? null;
$wirePackNo = trim($wirePackNo) ?? null;
$user = Filament::auth()->user();
$operatorName = $user->name;
if (empty($processOrder) || $processOrder == '')
{
Notification::make()
->title("Process Order can't be empty")
->danger()
->duration(5000)
->send();
$this->form->fill([
'process_order' => null,
'plant_id' => $plantId,
'customer_po_master_id' => $customerPo,
'wire_packing_number' => $wirePackNo,
'Sno_quantity' => 0,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
$pattern = '/^([^|]+)\|([^|]+)\|(\d+(\.\d+)?)$/';
if (!preg_match($pattern, $processOrder, $matches))
{
Notification::make()
->title("Scan Valid Qr code ")
->body("Expected Format : (MaterialCode|Process Order-Id|Weight)")
->danger()
->duration(5000)
->send();
$this->form->fill([
'process_order' => null,
'plant_id' => $plantId,
'customer_po_master_id' => $customerPo,
'wire_packing_number' => $wirePackNo,
'Sno_quantity' => 0,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
$materialCode = $matches[1];
$processOrderId = $matches[2];
$weight = $matches[3];
$icode = Item::where('code', $materialCode)->first();
if(!$icode)
{
Notification::make()
->title("Unknown Item Code")
->body("Item Code not found '$materialCode'")
->danger()
->duration(5000)
->send();
$this->form->fill([
'process_order' => null,
'plant_id' => $plantId,
'customer_po_master_id' => $customerPo,
'wire_packing_number' => $wirePackNo,
'Sno_quantity' => 0,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
$icodeAgaPlant = Item::where('code', $materialCode)->where('plant_id', $plantId)->first();
$plantCode = Plant::where('id', $plantId)->first();
$plantcode = $plantCode->code;
$itemId = $icodeAgaPlant->id;
if(!$icodeAgaPlant)
{
Notification::make()
->title("Unknown Item Code")
->body("Item Code not found '$materialCode' against Plant Code '$plantcode'")
->danger()
->duration(5000)
->send();
$this->form->fill([
'process_order' => null,
'plant_id' => $plantId,
'customer_po_master_id' => $customerPo,
'wire_packing_number' => $wirePackNo,
'Sno_quantity' => 0,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
$processOrderAgaPlant = WireMasterPacking::where('process_order', $processOrderId)->where('plant_id', $plantId)->first();
if($processOrderAgaPlant)
{
Notification::make()
->title("Duplicate Process Order")
->body("Duplicate process order found '$processOrderId' against Plant Code '$plantcode'")
->danger()
->duration(5000)
->send();
$this->form->fill([
'process_order' => null,
'plant_id' => $plantId,
'customer_po_master_id' => $customerPo,
'wire_packing_number' => $wirePackNo,
'Sno_quantity' => 0,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
try
{
$existingPallet = WireMasterPacking::where('plant_id', $plantId)
->where('wire_packing_number', $wirePackNo)
->first();
$count = WireMasterPacking::where('plant_id', $plantId)
->where('wire_packing_number', $wirePackNo)
->count('wire_packing_number');
$createdAt = $existingPallet ? $existingPallet->created_at : $clickedAt ?? now();
$createdBy = $existingPallet ? $existingPallet->created_by : $clickedBy ?? $operatorName;
$record = WireMasterPacking::create([
'plant_id' => $plantId,
'item_id' => $itemId,
'wire_packing_number' => $wirePackNo,
'process_order' => $processOrderId,
'customer_po_master_id' => $customerPo,
'weight' => $weight,
'created_by' => $createdBy,
'scanned_by' => $operatorName,
'created_at' => $createdAt,
'scanned_at' => now(),
'updated_by' => $operatorName,
]);
if ($record)
{
$this->snoCount = WireMasterPacking::where('plant_id', $plantId)
->where('wire_packing_number', $wirePackNo)
->count();
$this->dispatch('loadData', $wirePackNo, $plantId);
$this->form->fill([
'plant_id' => $plantId,
'customer_po_master_id' => $customerPo,
'wire_packing_number' => $wirePackNo,
'process_order' => null,
// 'pending_pallet_list' => $pendingPallet,
'Sno_quantity' => $this->snoCount,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
}
else
{
Notification::make()
->title("Failed to insert scanned serial number '$processOrderId' into wire master table!")
->danger()
->duration(5000)
->send();
$this->dispatch('loadData', $wirePackNo, $plantId);
$this->form->fill([
'plant_id' => $plantId,
'customer_po_master_id' => $customerPo,
'wire_packing_number' => $wirePackNo,
'process_order' => null,
// 'pending_pallet_list' => $pendingPallet,
'Sno_quantity' => $count,
'scanned_by' => $operatorName,
]);
return;
}
}
catch (\Exception $e)
{
Notification::make()
->title('Error: Serial not inserted.')
->body("Something went wrong while inserting process order '{$processOrderId}' into pallet table!\nScan the new process order to proceed...")
->danger()
->duration(5000)
->send();
$this->dispatch('loadData', $wirePackNo, $plantId);
$this->form->fill([
'plant_id' => $plantId,
'customer_po_master_id' => $customerPo,
'wire_packing_number' => $wirePackNo,
'process_order' => null,
// 'pending_pallet_list' => $pendingPallet,
'Sno_quantity' => $count,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
$this->dispatch('loadData', $wirePackNo, $plantId);
}
public function markAsComplete()
{
$plantId = $this->form->getState()['plant_id'];
$plantId = trim($plantId) ?? null;
$pendingPallet = $this->form->getState()['pending_pallet_list'];
$palletNumber = trim($this->form->getState()['wire_packing_number'])?? null;
$palletNumber = trim($palletNumber) ?? null;
$processOrder = trim($this->form->getState()['process_order'])?? null;
$processOrder = trim($processOrder) ?? null;
$user = Filament::auth()->user();
$operatorName = $user->name;
$isCompleted = $this->data['is_completed'] ?? false;
// $this->pendingPallet = $this->form->getState()['pending_pallet_list'];
if (! ($this->data['is_completed'] ?? false)) {
Notification::make()
->title('Completion required')
->body('Please check the "Is Completed" checkbox to finish master packing.')
->warning()
->duration(3000)
->send();
return;
}
$palletExist = WireMasterPacking::where('wire_packing_number', $palletNumber)
->where('plant_id', $plantId)
->first();
if (!$palletExist)
{
Notification::make()
->title("Pallet number '$palletNumber' does not have process orders to save!<br>Add the valid process order into pallet number to proceed...")
->danger()
->duration(5000)
->send();
$this->dispatch('loadData', $palletNumber, $plantId);
$this->form->fill([
'process_order' => null,
'plant_id' => $plantId,
'wire_packing_number' => $palletNumber,
'pending_pallet_list' => $pendingPallet,
'Sno_quantity' => 0,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
$allCompleted = WireMasterPacking::where('plant_id', $plantId)
->where('wire_packing_number', $palletNumber)
->where('wire_packing_status', '=','Completed')
->first();
if ($allCompleted)
{
Notification::make()
->title("Master Packing pallet number '$palletNumber' already completed the master packing!<br>Generate the new Master Packing Pallet number or choose from pending pallet list!")
->danger()
->duration(5000)
->send();
$this->dispatch('loadData', '', $plantId);
$this->form->fill([
'process_order' => null,
'plant_id' => $plantId,
'wire_packing_number' => null,
'pending_pallet_list' => null,//$pendingPallet
'Sno_quantity' => 0,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
// $count = PalletValidation::where('plant_id', $plantId)
// ->where('pallet_number', $palletNumber)
// ->count('pallet_number');
if (!$isCompleted)
{
$updated = WireMasterPacking::where('wire_packing_number', $palletNumber)
->where('plant_id', $plantId)
->update([
'updated_at' => now(),
'updated_by' => $operatorName,
]);
if ($updated > 0)
{
Notification::make()
->title("Pallet number '$palletNumber' records saved successfully!")
->success()
->duration(800)
->send();
$this->dispatch('loadData', '', $plantId);
$this->form->fill([
'process_order' => null,
'plant_id' => $plantId,
'wire_packing_number' => null,//$palletNumber
'pending_pallet_list' => null,//$pendingPallet
'Sno_quantity' => 0,//$count,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
}
else
{
$updated = WireMasterPacking::where('wire_packing_number', $palletNumber)
->where('plant_id', $plantId)
->update([
'wire_packing_status' => 'Completed',
'updated_at' => now(),
'updated_by' => $operatorName,
]);
if ($updated > 0)
{
Notification::make()
->title("Pallet number '$palletNumber' completed the master packing successfully!")
->success()
->duration(800)
->send();
$this->dispatch('loadData', '', $plantId);
$this->form->fill([
'process_order' => null,
'plant_id' => $plantId,
'wire_packing_number' => null,//$palletNumber
'pending_pallet_list' => null,//$pendingPallet
'Sno_quantity' => 0,//$count
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
}
}
public function processPalletNo()
{
$plantId = $this->form->getState()['plant_id'];
$plantId = trim($plantId) ?? null;
$pendingPallet = $this->form->getState()['pending_pallet_list'];
$palletNumber = trim($this->form->getState()['wire_packing_number']) ?? null;
$customerPo = trim($this->form->getState()['customer_po_master_id'])?? null;
$palletNumber = trim($palletNumber) ?? null;
$processOrder = trim($this->form->getState()['process_order']) ?? null;
$processOrder = trim($processOrder) ?? null;
$user = Filament::auth()->user();
$operatorName = $user->name;
//$this->dispatch('loadData', $palletNumber, $plantId);
$this->form->fill([
'serial_number' => null,
'plant_id' => $plantId,
'customer_po_master_id' => $customerPo,
'pallet_number' => $palletNumber,
'pending_pallet_list' => $pendingPallet,
'Sno_quantity' => 0,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
if (!$palletNumber)
{
Notification::make()
->title('Pallet number is required.')
->danger()
->duration(5000)
->send();
$this->dispatch('loadData', '', $plantId);
$this->form->fill([
'process_order' => null,
'plant_id' => $plantId,
'customer_po_master_id' => $customerPo,
'wire_packing_number' => $palletNumber,
'pending_pallet_list' => $pendingPallet,
'Sno_quantity' => 0,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
if (strlen($palletNumber) < 10)
{
Notification::make()
->title("Pallet number '$palletNumber' must be at least 10 digits.")
->danger()
->duration(5000)
->send();
$this->dispatch('loadLocator' ,'',$plantId);
$this->form->fill([
'serial_number' => null,
'plant_id' => $plantId,
'customer_po_master_id' => $customerPo,
'pallet_number' => $palletNumber,
'pending_pallet_list' => $pendingPallet,
'Sno_quantity' => 0,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
$count = WireMasterPacking::where('plant_id', $plantId)
->where('wire_packing_number', $palletNumber)
->count('wire_packing_number');
$palletNotCompleted = WireMasterPacking::where('plant_id', $plantId)
->where('wire_packing_number', $palletNumber)
->where('wire_packing_status', '=','')
->orWhere('wire_packing_status', '=',null)
->first();
if (!$palletNotCompleted)
{
Notification::make()
->title("Already completed for pallet number $palletNumber!")
->danger()
->duration(5000)
->send();
$this->dispatch('loadData', $palletNumber, $plantId);
$this->form->fill([
'process_order' => null,
'plant_id' => $plantId,
'customer_po_master_id' => $customerPo,
'wire_packing_number' => $palletNumber,
'pending_pallet_list' => $pendingPallet,
'Sno_quantity' => $count,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
$this->form->fill([
'process_order' => null,
'plant_id' => $plantId,
'customer_po_master_id' => $customerPo,
'wire_packing_number' => $palletNumber,
'pending_pallet_list' => $pendingPallet,
'Sno_quantity' => $count,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
$this->dispatch('loadData', $palletNumber, $plantId);
}
public function processRemoveSNo()
{
$plantId = $this->form->getState()['plant_id'];
$plantId = trim($plantId) ?? null;
$pendingPallet = $this->form->getState()['pending_pallet_list'];
$palletNumber = trim($this->form->getState()['wire_packing_number']) ?? null;
$customerPo = trim($this->form->getState()['customer_po_master_id'])?? null;
$palletNumber = trim($palletNumber) ?? null;
$processOrder = trim($this->form->getState()['removeSno_number']) ?? null;
$processOrder = trim($processOrder) ?? null;
$user = Filament::auth()->user();
$operatorName = $user->name;
if (!$palletNumber)
{
Notification::make()
->title('Master Pallet number is required to remove.')
->danger()
->duration(5000)
->send();
return;
}
$count = WireMasterPacking::where('plant_id', $plantId)
->where('wire_packing_number', $palletNumber)
->count('wire_packing_number');
if (!$processOrder)
{
Notification::make()
->title('Process order is required to remove.')
->danger()
->duration(5000)
->send();
$this->dispatch('loadData', $palletNumber, $plantId);
$this->form->fill([
'process_order' => null,
'plant_id' => $plantId,
'customer_po_master_id' => $customerPo,
'wire_packing_number' => $palletNumber,
'pending_pallet_list' => $pendingPallet,
'Sno_quantity' => $count,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
$processOrderexist = WireMasterPacking::where('plant_id', $plantId)
->where('process_order', $processOrder)
->first();
if (!$processOrderexist)
{
Notification::make()
->title('Process Order not exists in pallet table.')
->danger()
->duration(5000)
->send();
$this->dispatch('loadData', $palletNumber, $plantId);
$this->form->fill([
'process_order' => null,
'plant_id' => $plantId,
'customer_po_master_id' => $customerPo,
'wire_packing_number' => $palletNumber,
'pending_pallet_list' => $pendingPallet,
'Sno_quantity' => $count,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
$palletExist = WireMasterPacking::where('plant_id', $plantId)
->where('process_order', $processOrder)
->where('wire_packing_number', '!=', '')
->where('wire_packing_number', '!=', null)
->first();
if ($palletExist && $palletExist->wire_packing_number != $palletNumber)
{
Notification::make()
->title("Scanned process order number exist in pallet number '$palletExist->wire_packing_number'.<br>Scan the valid exist process order to remove!")
->danger()
->duration(5000)
->send();
$this->dispatch('loadData', $palletNumber, $plantId);
$this->form->fill([
'process_order' => null,
'plant_id' => $plantId,
'customer_po_master_id' => $customerPo,
'wire_packing_number' => $palletNumber,
'pending_pallet_list' => $pendingPallet,
'Sno_quantity' => $count,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
$deleted = WireMasterPacking::where('plant_id', $plantId)
->where('wire_packing_number', $palletNumber)
->where('process_order', $processOrder)
->forceDelete();
if ($deleted)
{
// Notification::make()
// ->title("Scanned serial number '$serialNumber' successfully removed from pallet table!<br>Scan the next exist serial number to remove...")
// ->success()
// ->duration(600)
// ->send();
$this->snoCount = WireMasterPacking::where('plant_id', $plantId)
->where('wire_packing_number', $palletNumber)
->count();
$this->form->fill([
'plant_id' => $plantId,
'customer_po_master_id' => $customerPo,
'wire_packing_number' => $palletNumber,
'removeSno_number' => null,
'pending_pallet_list' => $this->pendingPallet,
'Sno_quantity' => $this->snoCount,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
$this->dispatch('loadData', $palletNumber, $plantId);
}
else
{
Notification::make()
->title("Failed to remove scanned process order '$processOrder' from master pallet!")
->danger()
->duration(5000)
->send();
$this->dispatch('loadData', $palletNumber, $plantId);
$this->form->fill([
'process_order' => null,
'plant_id' => $plantId,
'customer_po_master_id' => $customerPo,
'wire_packing_number' => $palletNumber,
'pending_pallet_list' => $pendingPallet,
'Sno_quantity' => $count,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
}
//$this->dispatch('removeSno', $serialNumber, $palletNumber, $plantId);
}
public function getFormActions(): array
{
return [];
}
}

View File

@@ -1,22 +0,0 @@
<?php
namespace App\Filament\Resources\WireMasterPackingResource\Pages;
use App\Filament\Resources\WireMasterPackingResource;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
class EditWireMasterPacking extends EditRecord
{
protected static string $resource = WireMasterPackingResource::class;
protected function getHeaderActions(): array
{
return [
Actions\ViewAction::make(),
Actions\DeleteAction::make(),
Actions\ForceDeleteAction::make(),
Actions\RestoreAction::make(),
];
}
}

View File

@@ -1,19 +0,0 @@
<?php
namespace App\Filament\Resources\WireMasterPackingResource\Pages;
use App\Filament\Resources\WireMasterPackingResource;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListWireMasterPackings extends ListRecords
{
protected static string $resource = WireMasterPackingResource::class;
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
];
}
}

View File

@@ -1,19 +0,0 @@
<?php
namespace App\Filament\Resources\WireMasterPackingResource\Pages;
use App\Filament\Resources\WireMasterPackingResource;
use Filament\Actions;
use Filament\Resources\Pages\ViewRecord;
class ViewWireMasterPacking extends ViewRecord
{
protected static string $resource = WireMasterPackingResource::class;
protected function getHeaderActions(): array
{
return [
Actions\EditAction::make(),
];
}
}

View File

@@ -1,321 +0,0 @@
<?php
namespace App\Http\Controllers;
use App\Models\CustomerPoMaster;
use App\Models\Plant;
use App\Models\WireMasterPacking;
use Barryvdh\DomPDF\Facade\Pdf;
use Illuminate\Http\Request;
use Mpdf\Mpdf;
class PalletPrintController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
//
}
public function print(Request $request, $pallet, $plant)
{
$customerId = $request->query('customer');
// $customerName = $request->query('customer_name');
// $items = WireMasterPacking::with('item')
// ->where('plant_id', $plant)
// ->where('wire_packing_number', $pallet)
// ->get()
// ->groupBy('item_id')
// ->map(function ($rows) {
// $first = $rows->first();
// return (object) [
// 'code' => $first->item->code,
// 'description' => $first->item->description,
// 'box_count' => $rows->count(),
// 'weight' => $rows->sum('weight'),
// ];
// })
// ->values();
$items = WireMasterPacking::with('item')
->where('plant_id', $plant)
->where('wire_packing_number', $pallet)
->get()
->map(function ($row) {
return (object) [
'code' => $row->item->code,
'description' => $row->item->description,
'box_count' => 1, // each row = one box
'weight' => $row->weight,
];
});
$masterBox = WireMasterPacking::where('plant_id', $plant)
->where('wire_packing_number', $pallet)
->value('customer_po_master_id');
$customer = CustomerPoMaster::find($masterBox);
$customerCode = $customer->customer_po ?? '';
$customerName = $customer->customer_name ?? '';
// $masterBox = WireMasterPacking::where('plant_id', $plant)
// ->where('wire_packing_number', $pallet)
// ->distinct('customer_po')
// ->count('customer_po');
// $pallets = WireMasterPacking::where('plant_id', $plant)
// ->select('wire_packing_number', 'updated_at')
// ->distinct('wire_packing_number')
// ->orderBy('wire_packing_number')
// ->orderBy('updated_at', 'asc')
// ->get()
// ->pluck('wire_packing_number')
// ->values();
// $currentPalletNo = $pallets->search($pallet) + 1;
// $totalBoxes = WireMasterPacking::where('plant_id', $plant)
// // ->where('wire_packing_number', $pallet)
// ->distinct()
// ->count('customer_po');
// $boxLabel = $currentPalletNo . '/' . $totalBoxes;
$totalBoxes = WireMasterPacking::where('plant_id', $plant)
->where('customer_po_master_id', $customerId)
->distinct('wire_packing_number')
->count('wire_packing_number');
$completedPallets = WireMasterPacking::where('plant_id', $plant)
->where('customer_po_master_id', $customerId)
->select('wire_packing_number')
->groupBy('wire_packing_number')
->havingRaw(
'COUNT(*) = COUNT(CASE WHEN wire_packing_status = ? THEN 1 END)',
['Completed']
)
->orderBy('wire_packing_number')
->pluck('wire_packing_number')
->values();
$index = $completedPallets->search($pallet);
$currentPalletNo = ($index !== false) ? $index + 1 : 0;
$boxLabel = $currentPalletNo . '/' . $totalBoxes;
// $completedPallets = WireMasterPacking::where('plant_id', $plant)
// ->select('wire_packing_number')
// ->groupBy('wire_packing_number')
// ->havingRaw('COUNT(*) = COUNT(CASE WHEN wire_packing_status = ? THEN 1 END)', ['Completed'])
// ->orderBy('wire_packing_number')
// ->pluck('wire_packing_number')
// ->values();
// $currentPalletNo = $completedPallets->search($pallet) != false
// ? $completedPallets->search($pallet) + 1
// : 0;
// $boxLabel = $currentPalletNo . '/' . $totalBoxes;
$grossWeight = $items->sum('weight');
$widthPt = 85 * 2.83465; // 85mm → points
$heightPt = 100 * 2.83465; // 100mm → points
$plantName = Plant::where('id', $plant)->value('name');
$plantAddress = Plant::where('id', $plant)->value('address');
$pdf = Pdf::loadView('pdf.wire-pallet', [
'product' => 'Submersible Winding Wire',
'plantName' => $plantName,
'plantAddress' => $plantAddress,
'monthYear' => now()->format('M-y'),
'branch' => '',
'customerCode' => $customerCode,
'customerName' => $customerName,
'masterBox' => $boxLabel,
'items' => $items,
'grossWeight' => $grossWeight,
'netWeight' => $grossWeight - 3.05,
'pallet' => $pallet,
])->setPaper([0, 0, $widthPt, $heightPt], 'portrait');
return $pdf->stream("Pallet-{$pallet}.pdf");
// $pdfPath = storage_path("app/public/Pallet-{$pallet}.pdf");
// $pdf->save($pdfPath);
// $printerName = 'Tsc';
// $output = [];
// $returnVar = 0;
// exec("lp -d {$printerName} " . escapeshellarg($pdfPath), $output, $returnVar);
// if ($returnVar == 0) {
// return response()->json([
// 'status' => 'success',
// 'message' => "PDF sent to printer $printerName successfully."
// ]);
// } else {
// return response()->json([
// 'status' => 'error',
// 'message' => "Failed to send PDF to printer $printerName.",
// 'output' => $output,
// 'code' => $returnVar
// ], 500);
// }
}
/**
* Store a newly created resource in storage.
*/
// public function print(Request $request, $pallet, $plant)
// {
// $customerId = $request->query('customer');
// $items = WireMasterPacking::with('item')
// ->where('plant_id', $plant)
// ->where('wire_packing_number', $pallet)
// ->get()
// ->map(function ($row) {
// return (object) [
// 'code' => $row->item->code,
// 'description' => $row->item->description,
// 'box_count' => 1, // each row = one box
// 'weight' => $row->weight,
// ];
// });
// $masterBox = WireMasterPacking::where('plant_id', $plant)
// ->where('wire_packing_number', $pallet)
// ->value('customer_po_master_id');
// $customer = CustomerPoMaster::find($masterBox);
// $customerCode = $customer->customer_po ?? '';
// $customerName = $customer->customer_name ?? '';
// $totalBoxes = WireMasterPacking::where('plant_id', $plant)
// ->where('customer_po_master_id', $customerId)
// ->distinct('wire_packing_number')
// ->count('wire_packing_number');
// $completedPallets = WireMasterPacking::where('plant_id', $plant)
// ->where('customer_po_master_id', $customerId)
// ->select('wire_packing_number')
// ->groupBy('wire_packing_number')
// ->havingRaw(
// 'COUNT(*) = COUNT(CASE WHEN wire_packing_status = ? THEN 1 END)',
// ['Completed']
// )
// ->orderBy('wire_packing_number')
// ->pluck('wire_packing_number')
// ->values();
// $index = $completedPallets->search($pallet);
// $currentPalletNo = ($index !== false) ? $index + 1 : 0;
// $boxLabel = $currentPalletNo . '/' . $totalBoxes;
// // $completedPallets = WireMasterPacking::where('plant_id', $plant)
// // ->select('wire_packing_number')
// // ->groupBy('wire_packing_number')
// // ->havingRaw('COUNT(*) = COUNT(CASE WHEN wire_packing_status = ? THEN 1 END)', ['Completed'])
// // ->orderBy('wire_packing_number')
// // ->pluck('wire_packing_number')
// // ->values();
// // $currentPalletNo = $completedPallets->search($pallet) != false
// // ? $completedPallets->search($pallet) + 1
// // : 0;
// // $boxLabel = $currentPalletNo . '/' . $totalBoxes;
// $grossWeight = $items->sum('weight');
// $widthPt = 85 * 2.83465; // 85mm → points
// $heightPt = 100 * 2.83465; // 100mm → points
// $plantName = Plant::where('id', $plant)->value('name');
// $plantAddress = Plant::where('id', $plant)->value('address');
// $qrBase64 = $this->generateQrDataUri($pallet);
// $mpdf = new Mpdf([
// 'format' => [85, 100],
// 'margin_left' => 0,
// 'margin_right' => 0,
// 'margin_top' => 0,
// 'margin_bottom' => 0,
// 'tempDir' => '/var/www/tmp/mpdf'
// ]);
// $html = view('pdf.wire-pallet', [
// 'product' => 'Submersible Winding Wire',
// 'plantName' => $plantName,
// 'plantAddress' => $plantAddress,
// 'monthYear' => now()->format('M-y'),
// 'customerCode' => $customerCode,
// 'customerName' => $customerName,
// 'masterBox' => $pallet,
// 'items' => $items,
// 'grossWeight' => $grossWeight,
// 'netWeight' => $grossWeight - 3.05,
// 'pallet' => $pallet,
// 'qrBase64' => $qrBase64,
// ])->render();
// $mpdf->WriteHTML($html);
// return $mpdf->Output("Pallet-{$pallet}.pdf", 'I'); // 'I' = inline view in browser
// }
// private function generateQrDataUri(string $data): string
// {
// $qr = new \Mpdf\QrCode\QrCode($data, 'H');
// $output = new \Mpdf\QrCode\Output\Png();
// $pngData = $output->output($qr, 80, [255, 255, 255], [0, 0, 0]);
// return 'data:image/png;base64,' . base64_encode($pngData);
// }
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*/
public function show(string $id)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
//
}
}

View File

@@ -26,7 +26,6 @@ class ProductionTargetPlan extends Component
protected $listeners = [ protected $listeners = [
'loadData' => 'loadProductionData', 'loadData' => 'loadProductionData',
'loadCategoryData' => 'loadProductionDataCategory',
'loadData1' => 'exportProductionData', 'loadData1' => 'exportProductionData',
]; ];
@@ -176,7 +175,7 @@ class ProductionTargetPlan extends Component
public function loadProductionData($year, $month, $plantId, $lineId, $category) public function loadProductionData($plantId, $lineId, $month, $year)
{ {
if (!$plantId || !$lineId || !$month || !$year) { if (!$plantId || !$lineId || !$month || !$year) {
$this->records = []; $this->records = [];
@@ -196,9 +195,6 @@ class ProductionTargetPlan extends Component
->where('production_plans.line_id', $lineId) ->where('production_plans.line_id', $lineId)
->whereMonth('production_plans.created_at', $month) ->whereMonth('production_plans.created_at', $month)
->whereYear('production_plans.created_at', $year) ->whereYear('production_plans.created_at', $year)
->when($category, function ($query) use ($category) {
$query->where('items.category', $category);
})
->select( ->select(
'production_plans.item_id', 'production_plans.item_id',
'production_plans.plant_id', 'production_plans.plant_id',
@@ -207,7 +203,6 @@ class ProductionTargetPlan extends Component
'production_plans.working_days', 'production_plans.working_days',
'production_plans.leave_dates', 'production_plans.leave_dates',
'items.code as item_code', 'items.code as item_code',
'items.category as category',
'items.description as item_description', 'items.description as item_description',
'lines.name as line_name', 'lines.name as line_name',
'lines.line_capacity as line_capacity', 'lines.line_capacity as line_capacity',
@@ -234,11 +229,6 @@ class ProductionTargetPlan extends Component
->where('line_id', $lineId) ->where('line_id', $lineId)
->whereMonth('created_at', $month) ->whereMonth('created_at', $month)
->whereYear('created_at', $year) ->whereYear('created_at', $year)
->when($category, function ($query) use ($category) {
$query->whereHas('item', function ($q) use ($category) {
$q->where('category', $category);
});
})
->groupBy('plant_id', 'line_id', 'item_id', DB::raw('DATE(created_at)')) ->groupBy('plant_id', 'line_id', 'item_id', DB::raw('DATE(created_at)'))
->get() ->get()
->groupBy(fn($row) => ->groupBy(fn($row) =>
@@ -259,7 +249,7 @@ class ProductionTargetPlan extends Component
$lineCapacity = (float) ($row['line_capacity'] ?? 0); $lineCapacity = (float) ($row['line_capacity'] ?? 0);
$dailyLineCapacity = (float) ($row['line_capacity'] ?? 0); $dailyLineCapacity = (float) ($row['line_capacity'] ?? 0);
$row['category'] = $row['category'] ?? '-';
$row['daily_line_capacity'] = []; $row['daily_line_capacity'] = [];
$row['daily_target_dynamic'] = []; $row['daily_target_dynamic'] = [];
$row['produced_quantity'] = []; $row['produced_quantity'] = [];
@@ -301,122 +291,6 @@ class ProductionTargetPlan extends Component
} }
// public function loadProductionDataCategory($year, $month, $plantId, $lineId, $category)
// {
// if (!$plantId || !$lineId || !$month || !$year || !$category) {
// $this->records = [];
// $this->dates = [];
// $this->leaveDates = [];
// return;
// }
// $dates = $this->getMonthDates($month, $year);
// $this->dates = $dates;
// $plans = ProductionPlan::query()
// ->join('items', 'items.id', '=', 'production_plans.item_id')
// ->join('lines', 'lines.id', '=', 'production_plans.line_id')
// ->join('plants', 'plants.id', '=', 'production_plans.plant_id')
// ->where('production_plans.plant_id', $plantId)
// ->where('production_plans.line_id', $lineId)
// ->whereMonth('production_plans.created_at', $month)
// ->whereYear('production_plans.created_at', $year)
// ->select(
// 'production_plans.item_id',
// 'production_plans.plant_id',
// 'production_plans.line_id',
// 'production_plans.plan_quantity',
// 'production_plans.working_days',
// 'production_plans.leave_dates',
// 'items.code as item_code',
// 'items.description as item_description',
// 'lines.name as line_name',
// 'lines.line_capacity as line_capacity',
// 'plants.name as plant_name'
// )
// ->get();
// $leaveDates = [];
// if ($plans->isNotEmpty() && $plans[0]->leave_dates) {
// $leaveDates = array_map('trim', explode(',', $plans[0]->leave_dates));
// }
// $this->leaveDates = $leaveDates;
// $producedData = ProductionQuantity::selectRaw("
// plant_id,
// line_id,
// item_id,
// DATE(created_at) as prod_date,
// COUNT(*) as total_qty
// ")
// ->where('plant_id', $plantId)
// ->where('line_id', $lineId)
// ->whereMonth('created_at', $month)
// ->whereYear('created_at', $year)
// ->groupBy('plant_id', 'line_id', 'item_id', DB::raw('DATE(created_at)'))
// ->get()
// ->groupBy(fn($row) =>
// $row->plant_id . '_' . $row->line_id . '_' . $row->item_id
// )
// ->map(fn($group) => $group->keyBy('prod_date'));
// $records = [];
// foreach ($plans as $plan) {
// $row = $plan->toArray();
// $remainingQty = (float) $row['plan_quantity'];
// $remainingDays = (int) ($row['working_days'] ?? 0);
// $lineCapacity = (float) ($row['line_capacity'] ?? 0);
// $dailyLineCapacity = (float) ($row['line_capacity'] ?? 0);
// $row['daily_line_capacity'] = [];
// $row['daily_target_dynamic'] = [];
// $row['produced_quantity'] = [];
// $key = $row['plant_id'].'_'.$row['line_id'].'_'.$row['item_id'];
// foreach ($dates as $date) {
// // Skip leave dates fast
// if (isset($leaveDates) && in_array($date, $leaveDates)) {
// $row['daily_line_capacity'][$date] = '-';
// $row['daily_target_dynamic'][$date] = '-';
// $row['produced_quantity'][$date] = '-';
// continue;
// }
// $todayTarget = $remainingDays > 0
// ? round($remainingQty / $remainingDays, 2)
// : 0;
// $producedQty = $producedData[$key][$date]->total_qty ?? 0;
// $row['daily_target_dynamic'][$date] = $todayTarget;
// $row['produced_quantity'][$date] = $producedQty;
// $row['daily_line_capacity'][$date] = $dailyLineCapacity;
// // Carry forward remaining qty
// $remainingQty = max(0, $remainingQty - $producedQty);
// if ($remainingDays > 0) {
// $remainingDays--;
// }
// }
// $records[] = $row;
// }
// $this->records = $records;
// }
public function exportProductionData() public function exportProductionData()
{ {
return Excel::download( return Excel::download(

View File

@@ -1,55 +0,0 @@
<?php
namespace App\Livewire;
use App\Models\WireMasterPacking;
use Livewire\Component;
class WireMasterDataTable extends Component
{
public $plantId;
public $wirePackNo;
public $snoCount = 0;
public $records = [];
protected $listeners = [
'loadData' => 'loadWireMasterData',
];
public function loadWireMasterData($wirePackNo, $plantId)
{
$this->plantId = $plantId;
$this->wirePackNo = $wirePackNo;
$this->records = [];
$this->records = WireMasterPacking::query()
->where('plant_id', $this->plantId)
->where('wire_packing_number', $this->wirePackNo)
->orderBy('scanned_at')
->get()
->map(function ($record) {
return [
'created_at' => $record->created_at,
'created_by' => $record->created_by ?? '',
'wire_packing_number' => $record->wire_packing_number,
'item_code' => $record->item?->code ?? '',
'item_description' => $record->item?->description ?? '',
'process_order' => $record->process_order,
'weight' => $record->weight,
'scanned_at' => $record->scanned_at,
'scanned_by' => $record->scanned_by ?? '',
];
})
->toArray();
}
public function render()
{
return view('livewire.wire-master-data-table');
}
}

View File

@@ -1,33 +0,0 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\SoftDeletes;
class CustomerPoMaster extends Model
{
use SoftDeletes;
protected $fillable = [
'plant_id',
'item_id',
'customer_po',
'customer_name',
'quantity',
'created_at',
'updated_at',
'created_by',
];
public function plant(): BelongsTo
{
return $this->belongsTo(Plant::class);
}
public function item(): BelongsTo
{
return $this->belongsTo(Item::class);
}
}

View File

@@ -33,8 +33,6 @@ class InvoiceValidation extends Model
'operator_id', 'operator_id',
'created_by', 'created_by',
'updated_by', 'updated_by',
'created_at',
'updated_at',
]; ];
public function plant(): BelongsTo public function plant(): BelongsTo

View File

@@ -1,44 +0,0 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\SoftDeletes;
class WireMasterPacking extends Model
{
use SoftDeletes;
protected $fillable = [
'plant_id',
'item_id',
'customer_po_master_id',
'wire_packing_number',
'process_order',
'batch_number',
'weight',
'wire_packing_status',
'created_at',
'created_by',
'updated_at',
'updated_by',
'scanned_at',
'scanned_by',
];
public function plant(): BelongsTo
{
return $this->belongsTo(Plant::class);
}
public function item(): BelongsTo
{
return $this->belongsTo(Item::class, 'item_id');
}
public function customerPo(): BelongsTo
{
return $this->belongsTo(CustomerPoMaster::class, 'customer_po_master_id');
}
}

View File

@@ -1,106 +0,0 @@
<?php
namespace App\Policies;
use Illuminate\Auth\Access\Response;
use App\Models\CustomerPoMaster;
use App\Models\User;
class CustomerPoMasterPolicy
{
/**
* Determine whether the user can view any models.
*/
public function viewAny(User $user): bool
{
return $user->checkPermissionTo('view-any CustomerPoMaster');
}
/**
* Determine whether the user can view the model.
*/
public function view(User $user, CustomerPoMaster $customerpomaster): bool
{
return $user->checkPermissionTo('view CustomerPoMaster');
}
/**
* Determine whether the user can create models.
*/
public function create(User $user): bool
{
return $user->checkPermissionTo('create CustomerPoMaster');
}
/**
* Determine whether the user can update the model.
*/
public function update(User $user, CustomerPoMaster $customerpomaster): bool
{
return $user->checkPermissionTo('update CustomerPoMaster');
}
/**
* Determine whether the user can delete the model.
*/
public function delete(User $user, CustomerPoMaster $customerpomaster): bool
{
return $user->checkPermissionTo('delete CustomerPoMaster');
}
/**
* Determine whether the user can delete any models.
*/
public function deleteAny(User $user): bool
{
return $user->checkPermissionTo('delete-any CustomerPoMaster');
}
/**
* Determine whether the user can restore the model.
*/
public function restore(User $user, CustomerPoMaster $customerpomaster): bool
{
return $user->checkPermissionTo('restore CustomerPoMaster');
}
/**
* Determine whether the user can restore any models.
*/
public function restoreAny(User $user): bool
{
return $user->checkPermissionTo('restore-any CustomerPoMaster');
}
/**
* Determine whether the user can replicate the model.
*/
public function replicate(User $user, CustomerPoMaster $customerpomaster): bool
{
return $user->checkPermissionTo('replicate CustomerPoMaster');
}
/**
* Determine whether the user can reorder the models.
*/
public function reorder(User $user): bool
{
return $user->checkPermissionTo('reorder CustomerPoMaster');
}
/**
* Determine whether the user can permanently delete the model.
*/
public function forceDelete(User $user, CustomerPoMaster $customerpomaster): bool
{
return $user->checkPermissionTo('force-delete CustomerPoMaster');
}
/**
* Determine whether the user can permanently delete any models.
*/
public function forceDeleteAny(User $user): bool
{
return $user->checkPermissionTo('force-delete-any CustomerPoMaster');
}
}

View File

@@ -1,106 +0,0 @@
<?php
namespace App\Policies;
use Illuminate\Auth\Access\Response;
use App\Models\WireMasterPacking;
use App\Models\User;
class WireMasterPackingPolicy
{
/**
* Determine whether the user can view any models.
*/
public function viewAny(User $user): bool
{
return $user->checkPermissionTo('view-any WireMasterPacking');
}
/**
* Determine whether the user can view the model.
*/
public function view(User $user, WireMasterPacking $wiremasterpacking): bool
{
return $user->checkPermissionTo('view WireMasterPacking');
}
/**
* Determine whether the user can create models.
*/
public function create(User $user): bool
{
return $user->checkPermissionTo('create WireMasterPacking');
}
/**
* Determine whether the user can update the model.
*/
public function update(User $user, WireMasterPacking $wiremasterpacking): bool
{
return $user->checkPermissionTo('update WireMasterPacking');
}
/**
* Determine whether the user can delete the model.
*/
public function delete(User $user, WireMasterPacking $wiremasterpacking): bool
{
return $user->checkPermissionTo('delete WireMasterPacking');
}
/**
* Determine whether the user can delete any models.
*/
public function deleteAny(User $user): bool
{
return $user->checkPermissionTo('delete-any WireMasterPacking');
}
/**
* Determine whether the user can restore the model.
*/
public function restore(User $user, WireMasterPacking $wiremasterpacking): bool
{
return $user->checkPermissionTo('restore WireMasterPacking');
}
/**
* Determine whether the user can restore any models.
*/
public function restoreAny(User $user): bool
{
return $user->checkPermissionTo('restore-any WireMasterPacking');
}
/**
* Determine whether the user can replicate the model.
*/
public function replicate(User $user, WireMasterPacking $wiremasterpacking): bool
{
return $user->checkPermissionTo('replicate WireMasterPacking');
}
/**
* Determine whether the user can reorder the models.
*/
public function reorder(User $user): bool
{
return $user->checkPermissionTo('reorder WireMasterPacking');
}
/**
* Determine whether the user can permanently delete the model.
*/
public function forceDelete(User $user, WireMasterPacking $wiremasterpacking): bool
{
return $user->checkPermissionTo('force-delete WireMasterPacking');
}
/**
* Determine whether the user can permanently delete any models.
*/
public function forceDeleteAny(User $user): bool
{
return $user->checkPermissionTo('force-delete-any WireMasterPacking');
}
}

View File

@@ -8,7 +8,7 @@
"require": { "require": {
"php": "^8.2", "php": "^8.2",
"alperenersoy/filament-export": "^3.0", "alperenersoy/filament-export": "^3.0",
"althinect/filament-spatie-roles-permissions": "^2.3", "althinect/filament-spatie-roles-permissions": "^3.0",
"erag/laravel-pwa": "^1.9", "erag/laravel-pwa": "^1.9",
"filament/filament": "^3.3", "filament/filament": "^3.3",
"intervention/image": "^3.11", "intervention/image": "^3.11",

View File

@@ -1,6 +1,7 @@
<?php <?php
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
return new class extends Migration return new class extends Migration
@@ -8,6 +9,7 @@ return new class extends Migration
/** /**
* Run the migrations. * Run the migrations.
*/ */
public function up(): void public function up(): void
{ {
$sql = <<<'SQL' $sql = <<<'SQL'
@@ -20,10 +22,10 @@ return new class extends Migration
machine_id BIGINT DEFAULT NULL, machine_id BIGINT DEFAULT NULL,
name TEXT DEFAULT NULL, name TEXT DEFAULT NULL,
inspection_type TEXT DEFAULT NULL, inspection_type TEXT DEFAULT NULL,
characteristics_type TEXT DEFAULT NULL, characteristics_type TEXT DEFAULT NULL
upper DOUBLE PRECISION DEFAULT 0.0, upper DOUBLE PRECISION DEFAULT 0.0,
lower DOUBLE PRECISION DEFAULT 0.0, lower DOUBLE PRECISION DEFAULT 0.0,
middle DOUBLE PRECISION DEFAULT 0.0, middle DOUBLE PRECISION DEFAULT NULL,
created_at TIMESTAMP NOT NULL DEFAULT NOW(), created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW(), updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
created_by TEXT DEFAULT NULL, created_by TEXT DEFAULT NULL,
@@ -40,6 +42,7 @@ return new class extends Migration
DB::statement($sql); DB::statement($sql);
} }
/** /**
* Reverse the migrations. * Reverse the migrations.
*/ */

View File

@@ -1,51 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
$sql = <<<'SQL'
CREATE TABLE wire_master_packings (
id BIGINT GENERATED always AS IDENTITY PRIMARY KEY,
plant_id BIGINT NOT NULL,
item_id BIGINT NOT NULL,
customer_po_master_id BIGINT NOT NULL,
wire_packing_number TEXT DEFAULT NULL,
process_order TEXT DEFAULT NULL,
batch_number TEXT DEFAULT NULL,
weight TEXT DEFAULT NULL,
wire_packing_status TEXT DEFAULT NULL,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
scanned_at TIMESTAMP NOT NULL DEFAULT NOW(),
created_by TEXT DEFAULT NULL,
updated_by TEXT DEFAULT NULL,
scanned_by TEXT DEFAULT NULL,
deleted_at TIMESTAMP,
FOREIGN KEY (plant_id) REFERENCES plants(id),
FOREIGN KEY (customer_po_master_id) REFERENCES customer_po_masters(id),
FOREIGN KEY (item_id) REFERENCES items(id)
);
SQL;
DB::statement($sql);
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('wire_master_packings');
}
};

View File

@@ -1,45 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
$sql = <<<'SQL'
CREATE TABLE customer_po_masters (
id BIGINT GENERATED always AS IDENTITY PRIMARY KEY,
plant_id BIGINT NOT NULL,
item_id BIGINT NOT NULL,
customer_po TEXT DEFAULT NULL,
customer_name TEXT DEFAULT NULL,
quantity TEXT DEFAULT NULL,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
created_by TEXT DEFAULT NULL,
updated_by TEXT DEFAULT NULL,
deleted_at TIMESTAMP,
FOREIGN KEY (plant_id) REFERENCES plants(id),
FOREIGN KEY (item_id) REFERENCES items(id)
);
SQL;
DB::statement($sql);
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('customer_po_masters');
}
};

View File

@@ -90,7 +90,6 @@ class PermissionSeeder extends Seeder
Permission::updateOrCreate(['name' => 'view import serial invoice']); Permission::updateOrCreate(['name' => 'view import serial invoice']);
Permission::updateOrCreate(['name' => 'view import material invoice']); Permission::updateOrCreate(['name' => 'view import material invoice']);
Permission::updateOrCreate(['name' => 'view import invoice']);
Permission::updateOrCreate(['name' => 'view export invoice']); Permission::updateOrCreate(['name' => 'view export invoice']);
Permission::updateOrCreate(['name' => 'view import locator invoice validation']); Permission::updateOrCreate(['name' => 'view import locator invoice validation']);
@@ -193,7 +192,5 @@ class PermissionSeeder extends Seeder
Permission::updateOrCreate(['name' => 'view production calender page']); Permission::updateOrCreate(['name' => 'view production calender page']);
Permission::updateOrCreate(['name' => 'view production target page']); Permission::updateOrCreate(['name' => 'view production target page']);
Permission::updateOrCreate(['name' => 'view wire master print page']);
} }
} }

View File

@@ -1,36 +0,0 @@
<x-filament-panels::page>
<div class="space-y-4">
{{-- Render the Select form fields --}}
<div class="space-y-4">
{{ $this->form }}
</div>
{{-- Add Pallet and Remove Pallet buttons --}}
<div class="flex flex-row gap-2 mt-4">
<button
type="button"
wire:click="printPallet"
class="px-3 py-1 border border-primary-500 text-primary-600 rounded hover:bg-primary-50 hover:border-primary-700 transition text-sm"
>
Print Pallet
</button>
{{-- <button
type="button"
wire:click="saveCustomerPO"
class="px-3 py-1 border border-primary-500 text-primary-600 rounded hover:bg-primary-50 hover:border-primary-700 transition text-sm"
>
Save PO
</button> --}}
</div>
<div class="bg-white shadow rounded-xl p-4 mt-6">
<livewire:wire-master-data-table />
</div>
</div>
<script>
window.addEventListener('open-pdf', event => {
window.open(event.detail.url, '_blank');
});
</script>
</x-filament-panels::page>

View File

@@ -1,32 +0,0 @@
<x-filament::page>
<div class="filament-form space-y-6">
{{ $this->form }}
</div>
<div class="bg-white shadow rounded-xl p-4">
<livewire:wire-master-data-table />
</div>
<div class="filament-actions mt-6">
<x-filament::actions>
@foreach ($this->getFormActions() as $action)
{{ $action }}
@endforeach
</x-filament::actions>
</div>
@push('scripts')
<script>
window.addEventListener('open-pdf', event => {
const url = event.detail.url;
const win = window.open(url, '_blank');
if (!win || win.closed || typeof win.closed == 'undefined') {
alert('Popup blocked. Please allow popups for this site.');
}
});
</script>
@endpush
</x-filament::page>

View File

@@ -64,57 +64,57 @@ document.addEventListener('DOMContentLoaded', function () {
}); });
function updateWorkingDays(date) { // function updateWorkingDays(date) {
let totalDays = new Date(
date.getFullYear(),
date.getMonth()+1,
0
).getDate();
let workingDays = totalDays - selectedDates.length;
// document.querySelector('input[name="working_days"]').value = workingDays;
const input = document.querySelector('#working_days');
input.value = workingDays;
input.dispatchEvent(new Event('input'));
const monthInput = document.querySelector('#month');
monthInput.value = date.getMonth() + 1; // 112 month number
monthInput.dispatchEvent(new Event('input'));
const yearInput = document.querySelector('#year');
yearInput.value = date.getFullYear();
yearInput.dispatchEvent(new Event('input'));
const selectedDatesInput = document.querySelector('#selected_dates');
selectedDatesInput.value = selectedDates.join(',');
selectedDatesInput.dispatchEvent(new Event('input'));
}
// function updateWorkingDays(date) {
// let totalDays = new Date( // let totalDays = new Date(
// date.getFullYear(), // date.getFullYear(),
// date.getMonth() + 1, // date.getMonth()+1,
// 0 // 0
// ).getDate(); // ).getDate();
// let workingDays = totalDays - selectedDates.length; // let workingDays = totalDays - selectedDates.length;
// // document.querySelector('input[name="working_days"]').value = workingDays;
// // Set values only // const input = document.querySelector('#working_days');
// document.querySelector('#working_days').value = workingDays;
// document.querySelector('#month').value = date.getMonth() + 1; // input.value = workingDays;
// document.querySelector('#year').value = date.getFullYear();
// document.querySelector('#selected_dates').value = selectedDates.join(','); // input.dispatchEvent(new Event('input'));
// const monthInput = document.querySelector('#month');
// monthInput.value = date.getMonth() + 1; // 112 month number
// monthInput.dispatchEvent(new Event('input'));
// const yearInput = document.querySelector('#year');
// yearInput.value = date.getFullYear();
// yearInput.dispatchEvent(new Event('input'));
// const selectedDatesInput = document.querySelector('#selected_dates');
// selectedDatesInput.value = selectedDates.join(',');
// selectedDatesInput.dispatchEvent(new Event('input'));
// // Trigger only ONE update (important)
// document
// .querySelector('#selected_dates')
// .dispatchEvent(new Event('input'));
// } // }
function updateWorkingDays(date) {
let totalDays = new Date(
date.getFullYear(),
date.getMonth() + 1,
0
).getDate();
let workingDays = totalDays - selectedDates.length;
// Set values only
document.querySelector('#working_days').value = workingDays;
document.querySelector('#month').value = date.getMonth() + 1;
document.querySelector('#year').value = date.getFullYear();
document.querySelector('#selected_dates').value = selectedDates.join(',');
// Trigger only ONE update (important)
document
.querySelector('#selected_dates')
.dispatchEvent(new Event('input'));
}
calendar.render(); calendar.render();
}); });

View File

@@ -1,21 +0,0 @@
<div class="flex flex-col items-start space-y-1">
<div class="flex items-center">
<input
type="checkbox"
id="is_completed"
wire:model.defer="data.is_completed"
class="focus:outline-none focus:ring-0 focus:border-transparent border-gray-300"
>
<label for="is_completed" style="margin-left:2mm;" class="whitespace-nowrap mb-0">
Is Completed!
</label>
</div>
<button
type="button"
wire:click="markAsComplete"
class="px-2 py-1 border border-primary-500 text-primary-600 rounded hover:bg-primary-50 hover:border-primary-700 transition text-sm"
>
Save Pallet
</button>

View File

@@ -6,11 +6,10 @@
<table class="w-full divide-y divide-gray-200 text-sm text-center"> <table class="w-full divide-y divide-gray-200 text-sm text-center">
<thead class="bg-gray-100 text-s font-semibold uppercase text-gray-700"> <thead class="bg-gray-100 text-s font-semibold uppercase text-gray-700">
<tr> <tr>
<th class="border px-4 py-2" rowspan="4">No</th> <th class="border px-4 py-2" rowspan="3">No</th>
<th class="border px-4 py-2 whitespace-nowrap" rowspan="3">Plant</th> <th class="border px-4 py-2 whitespace-nowrap" rowspan="3">Plant</th>
<th class="border px-4 py-2 whitespace-nowrap" rowspan="3">Line</th> <th class="border px-4 py-2 whitespace-nowrap" rowspan="3">Line</th>
<th class="border px-4 py-2 whitespace-nowrap" rowspan="3">Item Code</th> <th class="border px-4 py-2 whitespace-nowrap" rowspan="3">Item Code</th>
<th class="border px-4 py-2 whitespace-nowrap" rowspan="3">Category</th>
<th class="border px-4 py-2 whitespace-nowrap" colspan="{{ count($dates) * 3 }}" class="text-center"> <th class="border px-4 py-2 whitespace-nowrap" colspan="{{ count($dates) * 3 }}" class="text-center">
Production Plan Dates Production Plan Dates
@@ -46,7 +45,6 @@
<td class="border px-4 py-2 whitespace-nowrap">{{ $record['plant_name'] }}</td> <td class="border px-4 py-2 whitespace-nowrap">{{ $record['plant_name'] }}</td>
<td class="border px-4 py-2 whitespace-nowrap">{{ $record['line_name'] }}</td> <td class="border px-4 py-2 whitespace-nowrap">{{ $record['line_name'] }}</td>
<td class="border px-4 py-2 whitespace-nowrap">{{ $record['item_code'] }}</td> <td class="border px-4 py-2 whitespace-nowrap">{{ $record['item_code'] }}</td>
<td class="border px-4 py-2 whitespace-nowrap">{{ $record['category'] }}</td>
{{-- @foreach($dates as $date) {{-- @foreach($dates as $date)
<td class="border px-4 py-2 whitespace-nowrap">{{ $record['target_plan'][$date] ?? '-' }}</td> <td class="border px-4 py-2 whitespace-nowrap">{{ $record['target_plan'][$date] ?? '-' }}</td>

View File

@@ -1,47 +0,0 @@
<div class="p-4">
<h2 class="text-lg font-bold mb-4 text-gray-700 uppercase tracking-wider">
WMP DATA TABLE:
</h2>
<div class="overflow-x-auto rounded-lg shadow">
<table class="w-full divide-y divide-gray-200 text-sm text-center">
<thead class="bg-gray-100 text-s font-semibold uppercase text-gray-700">
<tr>
<th class="border px-4 py-2">No</th>
<th class="border px-4 py-2">Created Datetime</th>
<th class="border px-4 py-2 whitespace-nowrap">Created By</th>
<th class="border px-4 py-2 whitespace-nowrap">MPacking No</th>
<th class="border px-4 py-2 whitespace-nowrap">Item Code</th>
<th class="border px-4 py-2">Description</th>
<th class="border px-4 py-2">Process Order</th>
<th class="border px-4 py-2">Weight</th>
<th class="border px-4 py-2">Scanned Datetime</th>
<th class="border px-4 py-2 whitespace-nowrap">Scanned By</th>
</tr>
</thead>
<tbody class="divide-y divide-gray-100">
@forelse ($records as $index => $record)
<tr class="hover:bg-gray-50">
<td class="border px-4 py-2">{{ $index + 1 }}</td>
<td class="border px-4 py-2 whitespace-nowrap">{{ $record['created_at'] ?? '-' }}</td>
<td class="border px-4 py-2 whitespace-nowrap">{{ $record['created_by'] ?? '-' }}</td>
<td class="border px-4 py-2 whitespace-nowrap">{{ $record['wire_packing_number'] ?? '-' }}</td>
<td class="border px-4 py-2">{{ $record['item_code'] ?? '-' }}</td>
<td class="border px-4 py-2 whitespace-nowrap">{{ $record['item_description'] ?? '-' }}</td>
<td class="border px-4 py-2 whitespace-nowrap">{{ $record['process_order'] ?? '-' }}</td>
<td class="border px-4 py-2">{{ $record['weight'] ?? '-' }}</td>
<td class="border px-4 py-2 whitespace-nowrap">{{ $record['scanned_at'] ?? '-' }}</td>
<td class="border px-4 py-2">{{ $record['scanned_by'] ?? '-' }}</td>
</tr>
@empty
<tr>
<td colspan="10" class="px-4 py-4 text-center text-gray-500">
No wire master packing records found.
</td>
</tr>
@endforelse
</tbody>
</table>
</div>
</div>

View File

@@ -1,380 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>WireLabel</title>
@php
$pageHeightMm = 100;
$pageWidthMm = 85;
$paddingMm = 1.3;
$headerRows = [
'PRODUCT' => $product,
'MONTH/YEAR' => $monthYear,
'CUSTOMER PO' => $customerCode,
'CUSTOMER NAME' => $customerName,
'NO OF MASTER BOX' => $masterBox,
];
$titleHeight = 10;
$headerRowHeight = 5;
$itemHeaderHeight = 5;
// FOOTER SECTION
$grossWeightHeight = 5;
$netWeightHeight = 5;
$licenseHeight = 5;
$companyInfoHeight = 6.9;
$logoHeight = $titleHeight * 0.8;
$logoMaxWidth = 20;
$isilogoHeight = $titleHeight * 0.9;
$isilogoMaxWidth = 11;
$availableHeight = $pageHeightMm - (2 * $paddingMm); // 97.4mm
$numItems = count($items) ?: 1;
// Total fixed space
$fixedSpace = $titleHeight +
(5 * $headerRowHeight) +
$itemHeaderHeight +
$grossWeightHeight +
$netWeightHeight +
$licenseHeight +
$companyInfoHeight;
$spaceForItemsOnly = $availableHeight - $fixedSpace; //97.4 - 68 = 29.4mm
// $itemRowHeight = $spaceForItemsOnly / $numItems; // 29.4 / 2 = 14.7
$itemRowHeight = floor(($spaceForItemsOnly / $numItems) * 10) / 10;
$itemRowHeight -= 0.5;
if ($numItems == 1) {
$itemRowHeight -= 0.5;
}
if ($itemRowHeight < 3) {
$itemFontSize = '5.5px';
$itemPadding = '0.1mm 0.3mm';
} elseif ($itemRowHeight < 3.5) {
$itemFontSize = '6px';
$itemPadding = '0.1mm 0.4mm';
} elseif ($itemRowHeight < 4) {
$itemFontSize = '6.5px';
$itemPadding = '0.1mm 0.5mm';
} else {
$itemFontSize = '7px';
$itemPadding = '0.2mm 0.5mm';
}
// Compensate for borders (0.3mm top + 0.3mm bottom = 0.6mm)
$compensatedTitleHeight = $titleHeight - 0.6;
$compensatedHeaderHeight = $headerRowHeight - 0.6;
$compensatedItemHeaderHeight = $itemHeaderHeight - 0.6;
$compensatedItemHeight = $itemRowHeight - 0.6;
$compensatedGrossHeight = $grossWeightHeight - 0.6;
$compensatedNetHeight = $netWeightHeight - 0.6;
$compensatedLicenseHeight = $licenseHeight - 0.6;
$compensatedCompanyHeight = $companyInfoHeight - 0.6;
$qrBase64 = 'data:image/png;base64,' . base64_encode(
QrCode::format('png')
->size(120) // 12mm ~ 120px
->margin(0)
->generate($pallet)
// $qrBase64 = 'data:image/png;base64,' . base64_encode(
// \SimpleSoftwareIO\QrCode\Facades\QrCode::format('png')
// ->size(120)
// ->margin(0)
// ->errorCorrection('H')
// ->generate($pallet)
);
@endphp
<style>
@page {
size: 85mm 100mm;
/* margin: 0; */
margin: 0.5mm;
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
margin: 0;
padding: <?php echo $paddingMm; ?>mm;
font-family: DejaVu Sans, sans-serif;
font-size: 7px;
color: #000;
width: <?php echo $pageWidthMm - (2 * $paddingMm); ?>mm;
height: <?php echo $availableHeight; ?>mm;
line-height: 1;
overflow: hidden;
}
table {
width: 100%;
border-collapse: collapse;
/* table-layout: fixed; */
/* height: <?php echo $availableHeight; ?>mm !important; */
}
td, th {
border: 0.3px solid #000 !important;
vertical-align: middle;
line-height: 1 !important;
overflow: hidden;
}
/* Title row - FIXED 12mm */
.title-row td {
height: <?php echo $compensatedTitleHeight; ?>mm !important;
text-align: center;
font-weight: bold;
position: relative;
padding: 0 !important;
font-size: 8.5px;
}
.logo {
position: absolute;
left: 2mm;
top: 50%;
transform: translateY(-50%);
height: <?php echo min(8, $compensatedTitleHeight * 0.6); ?>mm;
width: auto;
}
.vertical-line {
position: absolute;
top: 0;
bottom: 0;
border-left: 0.3px solid #000;
}
.vertical-line.left { left: 12mm; }
.vertical-line.right { right: 12mm; }
/* Header rows - FIXED 5mm each */
.header-row td {
height: <?php echo $compensatedHeaderHeight; ?>mm !important;
padding: 0.2mm 0.5mm !important;
}
/* Items header - FIXED 5mm */
.items-header-row td {
height: <?php echo $compensatedItemHeaderHeight; ?>mm !important;
font-weight: bold;
text-align: center;
font-size: 6.5px;
padding: 0.2mm 0.5mm !important;
}
/* ITEM ROWS - ONLY THESE ADJUST DYNAMICALLY */
.item-row td {
height: <?php echo $compensatedItemHeight; ?>mm !important;
font-size: <?php echo $itemFontSize; ?> !important;
padding: <?php echo $itemPadding; ?> !important;
line-height: 1 !important;
}
/* Gross Weight row - FIXED 5mm */
.gross-weight-row td {
height: <?php echo $compensatedGrossHeight; ?>mm !important;
text-align: center;
font-size: 6.5px;
padding: 0.2mm 0.5mm !important;
}
/* Net Weight row - FIXED 5mm */
.net-weight-row td {
height: <?php echo $compensatedNetHeight; ?>mm !important;
text-align: center;
font-size: 6.5px;
padding: 0.2mm 0.5mm !important;
}
/* License row - FIXED 5mm */
.license-row td {
height: <?php echo $compensatedLicenseHeight; ?>mm !important;
text-align: center;
font-size: 6.5px;
padding: 0.2mm 0.5mm !important;
}
/* Company info row - FIXED 8mm */
.company-info-row td {
height: <?php echo $compensatedCompanyHeight; ?>mm !important;
font-size: 5.5px;
line-height: 0.9 !important;
padding: 0.1mm 0.5mm !important;
}
.label {
font-weight: bold;
white-space: nowrap;
}
.header-row .label {
width: 40%; /* All header label cells get same width */
font-weight: bold;
}
.center {
text-align: center;
}
.right {
text-align: right;
}
/* Column widths */
.col-1 { width: 22%; }
.col-2 { width: 45%; }
.col-3 { width: 15%; }
.col-4 { width: 25%; }
/* Force exact heights for rows - ALL FIXED EXCEPT ITEM ROWS */
.title-row {
height: <?php echo $titleHeight; ?>mm !important;
}
.header-row {
height: <?php echo $headerRowHeight; ?>mm !important;
}
.items-header-row {
height: <?php echo $itemHeaderHeight; ?>mm !important;
}
/* ONLY ITEM ROWS HAVE DYNAMIC HEIGHT */
.item-row {
height: <?php echo $itemRowHeight; ?>mm !important;
}
.gross-weight-row {
height: <?php echo $grossWeightHeight; ?>mm !important;
}
.net-weight-row {
height: <?php echo $netWeightHeight; ?>mm !important;
}
.license-row {
height: <?php echo $licenseHeight; ?>mm !important;
}
.company-info-row {
height: <?php echo $companyInfoHeight; ?>mm !important;
}
</style>
</head>
<body>
<table>
<tr class="title-row">
<td colspan="4">
<div class="vertical-line left"></div>
{{-- <img src="<?php echo public_path('images/crilogo1.png'); ?>" class="logo" alt="CRI Logo"> --}}
<img src="<?php echo public_path('images/crilogo1.png'); ?>"
class="logo"
alt="CRI Logo"
style="height: <?php echo $logoHeight; ?>mm;
max-width: <?php echo $logoMaxWidth; ?>mm;
width: auto;">
C.R.I POLY WRAPPED WINDING WIRE
<div class="vertical-line right"></div>
{{-- <img src="<?php echo public_path('images/isi_8783.png'); ?>"
class="logo"
alt="CRI Logo"
style="height: <?php echo $isilogoHeight; ?>mm;
max-width: <?php echo $isilogoMaxWidth; ?>mm;
left: 71mm;"> --}}
<img src="{{ $qrBase64 }}"
style="position: absolute; bottom: 1.2mm; right: 2mm; width: 8mm; height: 7.2mm;">
</td>
</tr>
<!-- Header Information Rows - FIXED 5mm each -->
<?php foreach ($headerRows as $label => $value): ?>
{{-- <tr class="header-row">
<td class="label" colspan="2"><?php echo $label; ?> :</td>
<td colspan="2"><?php echo $value; ?></td>
</tr> --}}
<tr class="header-row">
<td class="label"><?php echo $label; ?></td>
<td colspan="3"><?php echo $value; ?></td>
</tr>
<?php endforeach; ?>
<!-- Items Header - FIXED 5mm -->
<tr class="items-header-row">
<td class="col-1 center">MATERIAL CODE</td>
<td class="col-2 center">DESCRIPTION</td>
<td class="col-3 center">QTY</td>
<td class="col-4 center">NO OF BOX</td>
</tr>
<!-- Item Rows - ONLY THESE ADJUST DYNAMICALLY -->
<?php if(count($items) > 0): ?>
<?php foreach ($items as $item): ?>
<tr class="item-row">
<td class="col-1 center"><?php echo $item->code; ?></td>
<td class="col-2" style="white-space: nowrap"><?php echo $item->description; ?></td>
<td class="col-3 right"><?php echo number_format($item->weight, 3); ?></td>
<td class="col-4 center"><?php echo $item->box_count; ?></td>
</tr>
<?php endforeach; ?>
<?php else: ?>
<tr class="item-row">
<td colspan="4" class="center">No items available</td>
</tr>
<?php endif; ?>
<!-- Gross Weight - FIXED 5mm -->
<tr class="gross-weight-row">
<td colspan="2" class="label center">GROSS WEIGHT</td>
<td colspan="2" class="center"><?php echo number_format($grossWeight, 3); ?></td>
</tr>
<!-- Net Weight - FIXED 5mm -->
<tr class="net-weight-row">
<td colspan="2" class="label center">NET WEIGHT</td>
<td colspan="2" class="center"><?php echo number_format($netWeight, 3); ?></td>
</tr>
<!-- License - FIXED 5mm -->
<tr class="license-row">
<td colspan="4" class="center">
{{-- MANUFACTURERS MADE IN INDIA *UNDER LICENSE --}}
MANUFACTURERS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
MADE IN INDIA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
*Under License
</td>
</tr>
<!-- Company Info - FIXED 8mm -->
<tr class="company-info-row">
<td colspan="4" class="center">
C.R.I. PUMPS PRIVATE LIMITED<br>
(Unit of {{ $plantName }})<br>
{{ $plantAddress }}<br>
India Regd.Office : 7/46-1, Keeranatham Road, Saravanampatti, Coimbatore-641 036<br>
For Feedback/Complaint: C.R.I Customer care cell Toll-Free: 1800 121 1243
{{-- <img src="{{ $qrBase64 }}"
style="position: absolute; bottom: 2.8mm; right: 2mm; width: 8mm; height: 6.8mm;"> --}}
</td>
</tr>
</table>
</body>
</html>

View File

@@ -24,7 +24,7 @@ use App\Http\Controllers\ModuleProductionLineStopController;
use App\Http\Controllers\ModuleProductionOrderDataController; use App\Http\Controllers\ModuleProductionOrderDataController;
use App\Http\Controllers\ObdController; use App\Http\Controllers\ObdController;
use App\Http\Controllers\PalletController; use App\Http\Controllers\PalletController;
use App\Http\Controllers\PalletPrintController; // use App\Http\Controllers\PalletPrintController;
use App\Http\Controllers\PdfController; use App\Http\Controllers\PdfController;
use App\Http\Controllers\PlantController; use App\Http\Controllers\PlantController;
use App\Http\Controllers\ProductionStickerReprintController; use App\Http\Controllers\ProductionStickerReprintController;
@@ -33,9 +33,9 @@ use App\Http\Controllers\StickerMasterController;
// use App\Http\Controllers\TelegramController; // use App\Http\Controllers\TelegramController;
use App\Http\Controllers\TestingPanelController; use App\Http\Controllers\TestingPanelController;
use App\Http\Controllers\UserController; use App\Http\Controllers\UserController;
// use App\Http\Controllers\VehicleController; use App\Http\Controllers\VehicleController;
// use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken; use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;
// use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
// Route::get('/user', function (Request $request) { // Route::get('/user', function (Request $request) {
@@ -151,6 +151,14 @@ Route::post('testing/reading/store-data', [TestingPanelController::class, 'store
Route::get('get-pdf', [PdfController::class, 'getPdf']); Route::get('get-pdf', [PdfController::class, 'getPdf']);
Route::get('process-order/details', [PdfController::class, 'getProcessOrderData']);
Route::post('process-order', [PdfController::class, 'storeProcessOrderData']);
Route::get('sap/files', [SapFileController::class, 'readFiles']);
Route::get('get-characteristics/master-data', [CharacteristicsController::class, 'getCharacteristicsMaster']);
// ..Part Validation - Characteristics // ..Part Validation - Characteristics
Route::get('laser/item/get-master-data', [StickerMasterController::class, 'get_master']); Route::get('laser/item/get-master-data', [StickerMasterController::class, 'get_master']);
@@ -181,19 +189,9 @@ Route::get('laser/characteristics/request', [CharacteristicsController::class, '
Route::post('laser-doc-pdf', [PdfController::class, 'storeLaserPdf']); Route::post('laser-doc-pdf', [PdfController::class, 'storeLaserPdf']);
// ..Process Order
Route::get('process-order/details', [PdfController::class, 'getProcessOrderData']);
Route::post('process-order', [PdfController::class, 'storeProcessOrderData']);
Route::get('sap/files', [SapFileController::class, 'readFiles']);
// ..Product Characteristics // ..Product Characteristics
Route::get('get-characteristics/master-data', [CharacteristicsController::class, 'getCharacteristicsMaster']); Route::get('characteristics/get/master', [CharacteristicsController::class, 'getCharMaster']);
Route::get('characteristics/get/master', [CharacteristicsController::class, 'getCharMaster']); // LIVEEEE
Route::post('characteristics/values', [CharacteristicsController::class, 'storeCharValues']); Route::post('characteristics/values', [CharacteristicsController::class, 'storeCharValues']);
@@ -215,6 +213,7 @@ Route::post('file/store', [SapFileController::class, 'store'])->name('file.store
// Route::post('invoice-exit', [InvoiceValidationController::class, 'handle']); // Route::post('invoice-exit', [InvoiceValidationController::class, 'handle']);
// Route::get('/print-pallet/{pallet}/{plant}', [PalletPrintController::class, 'print'])->name('print.pallet'); // Route::get('/print-pallet/{pallet}/{plant}', [PalletPrintController::class, 'print'])
// ->name('print.pallet');
// Route::post('vehicle/entry', [VehicleController::class, 'storeVehicleEntry']); Route::post('vehicle/entry', [VehicleController::class, 'storeVehicleEntry']);