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
77 changed files with 2646 additions and 7548 deletions

View File

@@ -49,13 +49,6 @@ class SendInvoiceDataReport extends Command
return; return;
} }
$todayRecordExists = InvoiceDataValidation::whereDate('created_at', now()->toDateString())->first();
if (!$todayRecordExists) {
$this->info('No records created today. Mail not sent.');
return;
}
// if (strtolower($scheduleType) == 'daily') { // if (strtolower($scheduleType) == 'daily') {
// $startDate = now()->subDay()->setTime(10, 0, 0);//8:00 // $startDate = now()->subDay()->setTime(10, 0, 0);//8:00
// $endDate = now()->setTime(10, 0, 0);//8 // $endDate = now()->setTime(10, 0, 0);//8

View File

@@ -4,7 +4,6 @@ namespace App\Console\Commands;
use App\Mail\InvoiceTransitMail; use App\Mail\InvoiceTransitMail;
use App\Models\AlertMailRule; use App\Models\AlertMailRule;
use App\Models\InvoiceInTransit;
use App\Models\InvoiceMaster; use App\Models\InvoiceMaster;
use App\Models\Plant; use App\Models\Plant;
use Illuminate\Console\Command; use Illuminate\Console\Command;
@@ -53,13 +52,6 @@ class SendInvoiceTransitReport extends Command
return; return;
} }
$todayRecordExists = InvoiceInTransit::whereDate('created_at', now()->toDateString())->first();
if (!$todayRecordExists) {
$this->info('No records created today. Mail not sent.');
return;
}
if (strtolower($scheduleType) == 'daily') { if (strtolower($scheduleType) == 'daily') {
$results = DB::table('invoice_in_transits as it') $results = DB::table('invoice_in_transits as it')
->join('invoice_masters as im', function ($join) { ->join('invoice_masters as im', function ($join) {

View File

@@ -3,7 +3,6 @@
namespace App\Console\Commands; namespace App\Console\Commands;
use App\Mail\ProductionMail; use App\Mail\ProductionMail;
use App\Models\Item;
use App\Models\Line; use App\Models\Line;
use App\Models\Plant; use App\Models\Plant;
use App\Models\ProductionPlan; use App\Models\ProductionPlan;
@@ -76,211 +75,59 @@ class SendProductionReport extends Command
// . // .
// foreach ($plants as $plant) {
// $lines = Line::where('plant_id', $plant->id)->get();
// foreach ($lines as $line) {
// $month = $startDate->month;
// $year = $startDate->year;
// $workingDays = ProductionPlan::where('plant_id', $plantId)
// ->whereMonth('created_at', $month)
// ->whereYear('created_at', $year)
// ->value('working_days') ?? 0;
// $totalTargetQuantity = 0;
// $monthlyPlan = ProductionPlan::where('plant_id', $plantId)
// ->where('line_id', $line->id)
// ->whereMonth('created_at', $month)
// ->whereYear('created_at', $year)
// ->sum('plan_quantity'); // / $workingDays
// $dailyTarget = $workingDays > 0
// ? $monthlyPlan / $workingDays
// : 0;
// $dailyTarget = round($dailyTarget, 2);
// // $totalTargetQuantity = round($totalTargetQuantity, 2);
// $monthStart = $startDate->copy()->startOfMonth();
// $completedDays = $monthStart->diffInDays($startDate);
// $expectedTillYesterday = $dailyTarget * $completedDays;
// if (strtolower($line->type) == 'fg line') {
// $productionQuantity = \App\Models\QualityValidation::where('plant_id', $plant->id)
// ->where('line_id', $line->id)
// ->whereBetween('created_at', [$startDate, $endDate])
// ->count();
// } else {
// $productionQuantity = ProductionQuantity::where('plant_id', $plant->id)
// ->where('line_id', $line->id)
// ->whereBetween('created_at', [$startDate, $endDate])
// ->count();
// }
// $previousRemaining = max(0, $expectedTillYesterday - $productionQuantity);
// $totalTargetQuantity = round($dailyTarget + $previousRemaining, 2);
// $tableData[] = [
// 'no' => $no++,
// 'plant' => $plant->name,
// 'line' => $line->name,
// 'type' => $line->type,
// 'targetQuantity' => $totalTargetQuantity,
// 'productionQuantity' => $productionQuantity,
// ];
// }
// }
//..New Logic
foreach ($plants as $plant) { foreach ($plants as $plant) {
$lines = Line::where('plant_id', $plant->id)->get(); $lines = Line::where('plant_id', $plant->id)->get();
foreach ($lines as $line) { foreach ($lines as $line) {
$targetQuantity = ProductionPlan::where('plant_id', $plant->id)
$month = $startDate->month;
$year = $startDate->year;
$workingDays = ProductionPlan::where('plant_id', $plant->id)
->where('line_id', $line->id) ->where('line_id', $line->id)
->whereMonth('created_at', $month) ->whereBetween('created_at', [$PlanstartDate, $planendDate])
->whereYear('created_at', $year)
->value('working_days') ?? 0;
$monthlyPlan = ProductionPlan::where('plant_id', $plant->id)
->where('line_id', $line->id)
->whereMonth('created_at', $month)
->whereYear('created_at', $year)
->sum('plan_quantity'); ->sum('plan_quantity');
$dailyTarget = $workingDays > 0 ? $monthlyPlan / $workingDays : 0; /** @phpstan-ignore property.notFound */
$dailyTarget = round($dailyTarget, 2);
$leaveDatesString = ProductionPlan::where('plant_id', $plant->id)
->where('line_id', $line->id)
->whereMonth('created_at', $month)
->whereYear('created_at', $year)
->value('leave_dates');
$leaveDates = $leaveDatesString ? explode(',', $leaveDatesString) : [];
$monthStart = $startDate->copy()->startOfMonth();
$yesterday = $startDate->copy()->subDay();
$completedDays = 0;
$currentDate = $monthStart->copy();
while ($currentDate->lte($yesterday)) {
if (!in_array($currentDate->format('Y-m-d'), $leaveDates)) {
$completedDays++;
}
$currentDate->addDay();
}
$expectedTillYesterday = $dailyTarget * $completedDays;
if (strtolower($line->type) == 'fg line') { if (strtolower($line->type) == 'fg line') {
$producedTillYesterday = \App\Models\QualityValidation::where('plant_id', $plant->id)
->where('line_id', $line->id)
->whereMonth('created_at', $month)
->whereYear('created_at', $year)
->where('created_at', '<', $startDate)
->count();
} else {
$producedTillYesterday = ProductionQuantity::where('plant_id', $plant->id)
->where('line_id', $line->id)
->whereMonth('created_at', $month)
->whereYear('created_at', $year)
->where('created_at', '<', $startDate)
->count();
}
$previousRemaining = max(0, $expectedTillYesterday - $producedTillYesterday);
$totalTargetQuantity = round($dailyTarget + $previousRemaining, 2);
$itemIds = ProductionPlan::where('plant_id', $plant->id)
->where('line_id', $line->id)
->whereMonth('created_at', $month)
->whereYear('created_at', $year)
->distinct()
->pluck('item_id');
$totalHourlyQuantity = Item::whereIn('id', $itemIds)
->sum('hourly_quantity');
$capacityQuan = $totalHourlyQuantity * 22.5;
if (strtolower($line->type) == 'fg line') {
$productionQuantity = \App\Models\QualityValidation::where('plant_id', $plant->id) $productionQuantity = \App\Models\QualityValidation::where('plant_id', $plant->id)
->where('line_id', $line->id) ->where('line_id', $line->id)
->whereBetween('created_at', [$startDate, $endDate]) ->whereBetween('created_at', [$startDate, $endDate])
->count(); ->count();
} else { } else {
$productionQuantity = ProductionQuantity::where('plant_id', $plant->id) $productionQuantity = ProductionQuantity::where('plant_id', $plant->id)
->where('line_id', $line->id) ->where('line_id', $line->id)
->whereBetween('created_at', [$startDate, $endDate]) ->whereBetween('created_at', [$startDate, $endDate])
->count(); ->count();
} }
if ($capacityQuan > 0) {
$efficiency = ($productionQuantity / $capacityQuan) * 100;
} else {
$efficiency = 0;
}
$efficiency = round($efficiency, 2);
$tableData[] = [ $tableData[] = [
'no' => $no++, 'no' => $no++,
'plant' => $plant->name, 'plant' => $plant->name,
'type' => $line->type,
'line' => $line->name, 'line' => $line->name,
'capacityQuantity' => floor($capacityQuan), 'type' => $line->type,
'targetQuantity' => floor($totalTargetQuantity), 'targetQuantity' => $targetQuantity,
'productionQuantity' => $productionQuantity, 'productionQuantity' => $productionQuantity,
'efficiency' => $efficiency . '%',
]; ];
} }
} }
// $service = new \App\Services\ProductionTargetService(); // $this->table(['No', 'Plant', 'Line', 'Target Quantity', 'Production Quantity'], $fgTableData);
// $year = $startDate->year; // $this->table(['No', 'Plant', 'Line', 'Target Quantity', 'Production Quantity'], $tableData);
// $month = $startDate->month;
// [$records, $dates] = $service->generate( // if (!empty($emails)) {
// $plantId, // foreach ($emails as $email) {
// $year, // Mail::to($email)->send(new ProductionMail($tableData));
// $month, // }
// ); // } else {
// $this->info('No recipients found for ProductionMailAlert.');
// }
// $this->info("Production report sent to " . count($emails) . " recipient(s).");
// Preview in console
$mail = new ProductionMail($scheduleType, $tableData); $mail = new ProductionMail($scheduleType, $tableData);
// $mail = new ProductionMail($scheduleType,$tableData,$records,$dates);
$contentVars = $mail->content()->with; $contentVars = $mail->content()->with;
$this->info($contentVars['greeting'] ?? 'Production Report'); $this->info($contentVars['greeting'] ?? 'Production Report');
$this->table( $this->table(
['No', 'Plant', 'Line', 'Type', 'Capacity Quantity', 'Target Quantity', 'Production Quantity'], ['No', 'Plant', 'Line', 'Type', 'Target Quantity', 'Production Quantity'],
$tableData $tableData
); );
$this->info($contentVars['wishes'] ?? ''); $this->info($contentVars['wishes'] ?? '');

View File

@@ -34,7 +34,7 @@ class ProductionPlanExport implements FromArray, WithHeadings, WithMapping
// Add dynamic headings for each date: Target / Produced // Add dynamic headings for each date: Target / Produced
foreach ($this->dates as $date) { foreach ($this->dates as $date) {
$headings[] = $date . ' - Item Quantity'; $headings[] = $date . ' - Line Capacity';
$headings[] = $date . ' - Target Plan'; $headings[] = $date . ' - Target Plan';
$headings[] = $date . ' - Produced Quantity'; $headings[] = $date . ' - Produced Quantity';
} }
@@ -51,7 +51,7 @@ class ProductionPlanExport implements FromArray, WithHeadings, WithMapping
]; ];
foreach ($this->dates as $date) { foreach ($this->dates as $date) {
$mapped[] = $row['daily_hourly_quantity'][$date] ?? '-'; $mapped[] = $row['daily_line_capacity'][$date] ?? '-';
$mapped[] = $row['daily_target_dynamic'][$date] ?? '-'; $mapped[] = $row['daily_target_dynamic'][$date] ?? '-';
$mapped[] = $row['produced_quantity'][$date] ?? '-'; $mapped[] = $row['produced_quantity'][$date] ?? '-';
} }

View File

@@ -3,7 +3,6 @@
namespace App\Filament\Exports; namespace App\Filament\Exports;
use App\Models\CharacteristicValue; use App\Models\CharacteristicValue;
use App\Models\ProductCharacteristicsMaster;
use Filament\Actions\Exports\ExportColumn; use Filament\Actions\Exports\ExportColumn;
use Filament\Actions\Exports\Exporter; use Filament\Actions\Exports\Exporter;
use Filament\Actions\Exports\Models\Export; use Filament\Actions\Exports\Models\Export;
@@ -29,8 +28,6 @@ class CharacteristicValueExporter extends Exporter
->label('LINE NAME'), ->label('LINE NAME'),
ExportColumn::make('item.code') ExportColumn::make('item.code')
->label('ITEM CODE'), ->label('ITEM CODE'),
ExportColumn::make('item.description')
->label('DESCRIPTION'),
ExportColumn::make('machine.work_center') ExportColumn::make('machine.work_center')
->label('WORK CENTER'), ->label('WORK CENTER'),
ExportColumn::make('process_order') ExportColumn::make('process_order')
@@ -39,18 +36,6 @@ class CharacteristicValueExporter extends Exporter
->label('COIL NUMBER'), ->label('COIL NUMBER'),
ExportColumn::make('status') ExportColumn::make('status')
->label('STATUS'), ->label('STATUS'),
ExportColumn::make('spec_value')
->label('Spec. Value')
->formatStateUsing(function ($record) {
$specVal = ProductCharacteristicsMaster::where('plant_id', $record->plant_id)
->where('item_id', $record->item_id)
->where('line_id', $record->line_id)
->where('machine_id', $record->machine_id)
->first();
return $specVal?->lower . ' - ' . $specVal?->upper;
}),
ExportColumn::make('observed_value') ExportColumn::make('observed_value')
->label('OBSERVED VALUE'), ->label('OBSERVED VALUE'),
ExportColumn::make('created_at') ExportColumn::make('created_at')

View File

@@ -24,8 +24,6 @@ class ClassCharacteristicExporter extends Exporter
}), }),
ExportColumn::make('plant.code') ExportColumn::make('plant.code')
->label('PLANT CODE'), ->label('PLANT CODE'),
ExportColumn::make('machine.work_center')
->label('WORK CENTER'),
ExportColumn::make('item.code') ExportColumn::make('item.code')
->label('ITEM CODE'), ->label('ITEM CODE'),
ExportColumn::make('aufnr') ExportColumn::make('aufnr')
@@ -43,7 +41,7 @@ class ClassCharacteristicExporter extends Exporter
ExportColumn::make('zz1_cn_bill_ord') ExportColumn::make('zz1_cn_bill_ord')
->label('ZZ1 CN BILL ORD'), ->label('ZZ1 CN BILL ORD'),
ExportColumn::make('zmm_amps') ExportColumn::make('zmm_amps')
->label('ZMM AMPS'), ->label('ZMM AMPSTEXT'),
ExportColumn::make('zmm_brand') ExportColumn::make('zmm_brand')
->label('ZMM BRAND'), ->label('ZMM BRAND'),
ExportColumn::make('zmm_degreeofprotection') ExportColumn::make('zmm_degreeofprotection')
@@ -83,7 +81,7 @@ class ClassCharacteristicExporter extends Exporter
ExportColumn::make('zmm_maxambtemp') ExportColumn::make('zmm_maxambtemp')
->label('ZMM MAXAMBTEMP'), ->label('ZMM MAXAMBTEMP'),
ExportColumn::make('zmm_mincoolingflow') ExportColumn::make('zmm_mincoolingflow')
->label('ZMM MINCOOLINGFLOW'), ->label('ZMM MINCOOLING FLOW'),
ExportColumn::make('zmm_motorseries') ExportColumn::make('zmm_motorseries')
->label('ZMM MOTORSERIES'), ->label('ZMM MOTORSERIES'),
ExportColumn::make('zmm_motor_model') ExportColumn::make('zmm_motor_model')
@@ -206,12 +204,6 @@ class ClassCharacteristicExporter extends Exporter
->label('ZMM YEAR'), ->label('ZMM YEAR'),
ExportColumn::make('zmm_laser_name') ExportColumn::make('zmm_laser_name')
->label('ZMM LASER NAME'), ->label('ZMM LASER NAME'),
ExportColumn::make('zmm_logo_cp')
->label('ZMM LOGO CP'),
ExportColumn::make('zmm_logo_ce')
->label('ZMM LOGO CE'),
ExportColumn::make('zmm_logo_nsf')
->label('ZMM LOGO NSF'),
ExportColumn::make('zmm_beenote') ExportColumn::make('zmm_beenote')
->label('ZMM BEENOTE'), ->label('ZMM BEENOTE'),
ExportColumn::make('zmm_beenumber') ExportColumn::make('zmm_beenumber')
@@ -222,6 +214,12 @@ class ClassCharacteristicExporter extends Exporter
->label('ZMM CODECLASS'), ->label('ZMM CODECLASS'),
ExportColumn::make('zmm_colour') ExportColumn::make('zmm_colour')
->label('ZMM COLOUR'), ->label('ZMM COLOUR'),
ExportColumn::make('zmm_logo_cp')
->label('ZMM LOGO CP'),
ExportColumn::make('zmm_logo_ce')
->label('ZMM LOGO CE'),
ExportColumn::make('zmm_logo_nsf')
->label('ZMM LOGO NSF'),
ExportColumn::make('zmm_grade') ExportColumn::make('zmm_grade')
->label('ZMM GRADE'), ->label('ZMM GRADE'),
ExportColumn::make('zmm_grwt_pset') ExportColumn::make('zmm_grwt_pset')
@@ -282,10 +280,6 @@ class ClassCharacteristicExporter extends Exporter
->label('MARKED STATUS'), ->label('MARKED STATUS'),
ExportColumn::make('marked_datetime') ExportColumn::make('marked_datetime')
->label('MARKED DATETIME'), ->label('MARKED DATETIME'),
ExportColumn::make('marked_physical_count')
->label('MARKED PHYSICAL COUNT'),
ExportColumn::make('marked_expected_time')
->label('MARKED EXPECTED TIME'),
ExportColumn::make('marked_by') ExportColumn::make('marked_by')
->label('MARKED BY'), ->label('MARKED BY'),
ExportColumn::make('man_marked_status') ExportColumn::make('man_marked_status')
@@ -296,38 +290,10 @@ class ClassCharacteristicExporter extends Exporter
->label('MANUAL MARKED BY'), ->label('MANUAL MARKED BY'),
ExportColumn::make('motor_marked_status') ExportColumn::make('motor_marked_status')
->label('MOTOR MARKED STATUS'), ->label('MOTOR MARKED STATUS'),
ExportColumn::make('motor_marked_physical_count')
->label('MOTOR MARKED PHYSICAL COUNT'),
ExportColumn::make('motor_expected_time')
->label('MOTOR EXPECTED TIME'),
ExportColumn::make('motor_marked_by')
->label('MOTOR MARKED BY'),
ExportColumn::make('pump_marked_status') ExportColumn::make('pump_marked_status')
->label('PUMP MARKED STATUS'), ->label('PUMP MARKED STATUS'),
ExportColumn::make('pump_marked_physical_count')
->label('PUMP MARKED PHYSICAL COUNT'),
ExportColumn::make('pump_expected_time')
->label('PUMP EXPECTED TIME'),
ExportColumn::make('pump_marked_by')
->label('PUMP MARKED BY'),
ExportColumn::make('name_plate_marked_status')
->label('NAME PLATE MARKED STATUS'),
ExportColumn::make('name_plate_expected_time')
->label('NAME PLATE EXPECTED TIME'),
ExportColumn::make('name_plate_marked_by')
->label('NAME PLATE MARKED BY'),
ExportColumn::make('motor_pump_pumpset_status') ExportColumn::make('motor_pump_pumpset_status')
->label('MOTOR PUMP PUMPSET STATUS'), ->label('MOTOR PUMP PUMPSET STATUS'),
ExportColumn::make('winded_serial_number')
->label('WINDED SERIAL NUMBER'),
ExportColumn::make('motor_machine_name')
->label('MOTOR MACHINE NAME'),
ExportColumn::make('pump_machine_name')
->label('PUMP MACHINE NAME'),
ExportColumn::make('name_plate_machine_name')
->label('NAME PLATE MACHINE NAME'),
ExportColumn::make('pumpset_machine_name')
->label('PUMPSET MACHINE NAME'),
ExportColumn::make('part_validation_1') ExportColumn::make('part_validation_1')
->label('PART VALIDATION 1'), ->label('PART VALIDATION 1'),
ExportColumn::make('part_validation_2') ExportColumn::make('part_validation_2')
@@ -336,8 +302,10 @@ class ClassCharacteristicExporter extends Exporter
->label('SAMLIGHT LOGGED NAME'), ->label('SAMLIGHT LOGGED NAME'),
ExportColumn::make('pending_released_status') ExportColumn::make('pending_released_status')
->label('PENDING RELEASED STATUS'), ->label('PENDING RELEASED STATUS'),
ExportColumn::make('has_work_flow_id') ExportColumn::make('motor_expected_time')
->label('HAS WORK FLOW ID'), ->label('MOTOR EXPECTED TIME'),
ExportColumn::make('pump_expected_time')
->label('PUMP EXPECTED TIME'),
ExportColumn::make('created_at') ExportColumn::make('created_at')
->label('CREATED AT'), ->label('CREATED AT'),
ExportColumn::make('created_by') ExportColumn::make('created_by')

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

@@ -28,8 +28,6 @@ class ProcessOrderExporter extends Exporter
->label('LINE NAME'), ->label('LINE NAME'),
ExportColumn::make('item.code') ExportColumn::make('item.code')
->label('ITEM CODE'), ->label('ITEM CODE'),
ExportColumn::make('item.description')
->label('ITEM DESCRIPTION'),
ExportColumn::make('process_order') ExportColumn::make('process_order')
->label('PROCESS ORDER'), ->label('PROCESS ORDER'),
ExportColumn::make('coil_number') ExportColumn::make('coil_number')

View File

@@ -26,8 +26,6 @@ class ProductCharacteristicsMasterExporter extends Exporter
->label('PLANT CODE'), ->label('PLANT CODE'),
ExportColumn::make('item.code') ExportColumn::make('item.code')
->label('ITEM CODE'), ->label('ITEM CODE'),
ExportColumn::make('item.description')
->label('ITEM DESCRIPTION'),
ExportColumn::make('line.name') ExportColumn::make('line.name')
->label('LINE NAME'), // machine.workGroupMaster.name ->label('LINE NAME'), // machine.workGroupMaster.name
ExportColumn::make('machine.workGroupMaster.name') ExportColumn::make('machine.workGroupMaster.name')

View File

@@ -34,8 +34,6 @@ class QualityValidationExporter extends Exporter
->label('SERIAL NUMBER'), ->label('SERIAL NUMBER'),
ExportColumn::make('stickerMaster.item.code') ExportColumn::make('stickerMaster.item.code')
->label('ITEM CODE'), ->label('ITEM CODE'),
ExportColumn::make('stickerMaster.item.description')
->label('ITEM DESCRIPTION'),
ExportColumn::make('uom') ExportColumn::make('uom')
->label('UNIT OF MEASURE'), ->label('UNIT OF MEASURE'),
ExportColumn::make('serial_number_motor') ExportColumn::make('serial_number_motor')

View File

@@ -1,117 +0,0 @@
<?php
namespace App\Filament\Imports;
use App\Models\CharacteristicApproverMaster;
use Filament\Actions\Imports\ImportColumn;
use Filament\Actions\Imports\Importer;
use Filament\Actions\Imports\Models\Import;
class CharacteristicApproverMasterImporter extends Importer
{
protected static ?string $model = CharacteristicApproverMaster::class;
public static function getColumns(): array
{
return [
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('Plant Code')
->examples(['1000','1000'])
->label('Plant Code')
->relationship(resolveUsing: 'code')
->rules(['required']),
ImportColumn::make('machine')
->requiredMapping()
->exampleHeader('Work Center')
->examples(['RMGLAS02','RMGLAS02'])
->label('Work Center')
->relationship()
->rules(['required']),
ImportColumn::make('machine_name')
->requiredMapping()
->exampleHeader('Machine Name')
->examples(['15002635','17002635'])
->label('Machine Name'),
ImportColumn::make('name1')
->requiredMapping()
->exampleHeader('Approver Name 1')
->examples(['Suresh.D','Suresh.D'])
->label('Approver Name 1'),
ImportColumn::make('mail1')
->requiredMapping()
->exampleHeader('Approver Mail 1')
->examples(['suresh@cripumps.com','suresh@cripumps.com'])
->label('Approver Mail 1'),
ImportColumn::make('name2')
->requiredMapping()
->exampleHeader('Approver Name 2')
->examples(['Ramesh.G','Ramesh.G'])
->label('Approver Name 2'),
ImportColumn::make('mail2')
->requiredMapping()
->exampleHeader('Approver Mail 2')
->examples(['ramesh@cripumps.com','ramesh@cripumps.com'])
->label('Approver Mail 2'),
ImportColumn::make('name3')
->requiredMapping()
->exampleHeader('Approver Name 3')
->examples(['Ganesh.K','Ganesh.K'])
->label('Approver Name 3'),
ImportColumn::make('mail3')
->requiredMapping()
->exampleHeader('Approver Mail 3')
->examples(['ganesh@cripumps.com','ganesh@cripumps.com'])
->label('Approver Mail 3'),
ImportColumn::make('duration1')
->numeric()
->requiredMapping()
->exampleHeader('Duration 1')
->examples(['0.05','0.30'])
->label('Duration 1'),
ImportColumn::make('duration2')
->numeric()
->requiredMapping()
->exampleHeader('Duration 2')
->examples(['0.05','0.30'])
->label('Duration 2'),
ImportColumn::make('duration3')
->numeric()
->requiredMapping()
->exampleHeader('Duration 3')
->examples(['0.05','0.30'])
->label('Duration 3'),
ImportColumn::make('characteristic_field')
->requiredMapping()
->exampleHeader('Characteristic Field')
->examples(['MV SERIES','PV SERIES'])
->label('Characteristic Field'),
ImportColumn::make('approver_type')
->requiredMapping()
->exampleHeader('Approver Type')
->examples(['Characteristic','Quality'])
->label('Approver Type'),
];
}
public function resolveRecord(): ?CharacteristicApproverMaster
{
// return CharacteristicApproverMaster::firstOrNew([
// // Update existing records, matching them by `$this->data['column_name']`
// 'email' => $this->data['email'],
// ]);
return new CharacteristicApproverMaster();
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your characteristic approver 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

@@ -16,524 +16,517 @@ class ClassCharacteristicImporter extends Importer
return [ return [
ImportColumn::make('plant') ImportColumn::make('plant')
->requiredMapping() ->requiredMapping()
->exampleHeader('PLANT CODE') ->exampleHeader('Plant Code')
->example('1000') ->example('1000')
->label('PLANT CODE') ->label('Plant Code')
->relationship(resolveUsing: 'code') ->relationship(resolveUsing: 'code')
->rules(['required']), ->rules(['required']),
ImportColumn::make('machine')
->requiredMapping()
->exampleHeader('WORK CENTER')
->example('RMGLAS01')
->label('WORK CENTER')
->relationship(resolveUsing: 'work_center')
->rules(['required']),
ImportColumn::make('item') ImportColumn::make('item')
->requiredMapping() ->requiredMapping()
->exampleHeader('ITEM CODE') ->exampleHeader('Item Code')
->example('630214') ->example('630214')
->label('ITEM CODE') ->label('Item Code')
->relationship(resolveUsing: 'code') ->relationship(resolveUsing: 'code')
->rules(['required']), ->rules(['required']),
ImportColumn::make('aufnr') ImportColumn::make('aufnr')
->label('AUFNR') ->label('Aufnr')
->exampleHeader('AUFNR') ->exampleHeader('Aufnr')
->example('1234567'), ->example(''),
ImportColumn::make('class') ImportColumn::make('class')
->label('CLASS') ->label('Class')
->exampleHeader('CLASS') ->exampleHeader('Class')
->example('ZLASER'), ->example(''),
ImportColumn::make('arbid') ImportColumn::make('arbid')
->label('ARBID') ->label('Arbid')
->exampleHeader('ARBID') ->exampleHeader('Arbid')
->example('LASER'), ->example(''),
ImportColumn::make('gamng') ImportColumn::make('gamng')
->label('GAMNG') ->label('Gamng')
->exampleHeader('GAMNG') ->exampleHeader('Gamng')
->example('1.000'), ->example(''),
ImportColumn::make('lmnga') ImportColumn::make('lmnga')
->label('LMNGA') ->label('Lmnga')
->exampleHeader('LMNGA') ->exampleHeader('Lmnga')
->example('1'), ->example(''),
ImportColumn::make('gernr') ImportColumn::make('gernr')
->label('GERNR') ->label('Gernr')
->exampleHeader('GERNR') ->exampleHeader('Gernr')
->example('12345678901234'), ->example(''),
ImportColumn::make('zz1_cn_bill_ord') ImportColumn::make('zz1_cn_bill_ord')
->label('ZZ1 CN BILL ORD') ->label('zz1 ccn bill ord')
->exampleHeader('ZZ1 CN BILL ORD') ->exampleHeader('zz1 ccn bill ord')
->example('INDIA'), ->example(''),
ImportColumn::make('zmm_amps') ImportColumn::make('zmm_amps')
->label('ZMM AMPS') ->label('zmm amps')
->exampleHeader('ZMM AMPS') ->exampleHeader('zmm amps')
->example('11A'), ->example(''),
ImportColumn::make('zmm_brand') ImportColumn::make('zmm_brand')
->label('ZMM BRAND') ->label('zmm brand')
->exampleHeader('ZMM BRAND') ->exampleHeader('zmm brand')
->example('CRI'), ->example(''),
ImportColumn::make('zmm_degreeofprotection') ImportColumn::make('zmm_degreeofprotection')
->label('ZMM DEGREEOFPROTECTION') ->label('zmm degreeofprotection')
->exampleHeader('ZMM DEGREEOFPROTECTION') ->exampleHeader('zmm degreeofprotection')
->example('IP55'), ->example(''),
ImportColumn::make('zmm_delivery') ImportColumn::make('zmm_delivery')
->label('ZMM DELIVERY') ->label('zmm delivery')
->exampleHeader('ZMM DELIVERY') ->exampleHeader('zmm delivery')
->example('65MM'), ->example(''),
ImportColumn::make('zmm_dir_rot') ImportColumn::make('zmm_dir_rot')
->label('ZMM DIR ROT') ->label('zmm dir rot')
->exampleHeader('ZMM DIR ROT') ->exampleHeader('zmm dir rot')
->example(''), ->example(''),
ImportColumn::make('zmm_discharge') ImportColumn::make('zmm_discharge')
->label('ZMM DISCHARGE') ->label('zmm discharge')
->exampleHeader('ZMM DISCHARGE') ->exampleHeader('zmm discharge')
->example('17m³/h'), ->example(''),
ImportColumn::make('zmm_discharge_max') ImportColumn::make('zmm_discharge_max')
->label('ZMM DISCHARGE MAX') ->label('zmm discharge max')
->exampleHeader('ZMM DISCHARGE MAX') ->exampleHeader('zmm discharge max')
->example(''), ->example(''),
ImportColumn::make('zmm_discharge_min') ImportColumn::make('zmm_discharge_min')
->label('ZMM DISCHARGE MIN') ->label('zmm discharge min')
->exampleHeader('ZMM DISCHARGE MIN') ->exampleHeader('zmm discharge min')
->example(''), ->example(''),
ImportColumn::make('zmm_duty') ImportColumn::make('zmm_duty')
->label('ZMM DUTY') ->label('zmm duty')
->exampleHeader('ZMM DUTY') ->exampleHeader('zmm duty')
->example('DUTY S1'), ->example(''),
ImportColumn::make('zmm_eff_motor') ImportColumn::make('zmm_eff_motor')
->label('ZMM EFF MOTOR') ->label('zmm eff motor')
->exampleHeader('ZMM EFF MOTOR') ->exampleHeader('zmm eff motor')
->example(''), ->example(''),
ImportColumn::make('zmm_eff_pump') ImportColumn::make('zmm_eff_pump')
->label('ZMM EFF PUMP') ->label('zmm eff pump')
->exampleHeader('ZMM EFF PUMP') ->exampleHeader('zmm eff pump')
->example(''), ->example(''),
ImportColumn::make('zmm_frequency') ImportColumn::make('zmm_frequency')
->label('ZMM FREQUENCY') ->label('zmm frequency')
->exampleHeader('ZMM FREQUENCY') ->exampleHeader('zmm frequency')
->example('50Hz'), ->example(''),
ImportColumn::make('zmm_head') ImportColumn::make('zmm_head')
->label('ZMM HEAD') ->label('zmm head')
->exampleHeader('ZMM HEAD') ->exampleHeader('zmm head')
->example('77M'), ->example(''),
ImportColumn::make('zmm_heading') ImportColumn::make('zmm_heading')
->label('ZMM HEADING') ->label('zmm heading')
->exampleHeader('ZMM HEADING') ->exampleHeader('zmm heading')
->example('PRESSURE BOOSTER SYSTEM'), ->example(''),
ImportColumn::make('zmm_head_max') ImportColumn::make('zmm_head_max')
->label('ZMM HEAD MAX') ->label('zmm head max')
->exampleHeader('ZMM HEAD MAX') ->exampleHeader('zmm head max')
->example('96m'), ->example(''),
ImportColumn::make('zmm_head_minimum') ImportColumn::make('zmm_head_minimum')
->label('ZMM HEAD MINIMUM') ->label('zmm head minimum')
->exampleHeader('ZMM HEAD MINIMUM') ->exampleHeader('zmm head minimum')
->example(''), ->example(''),
ImportColumn::make('zmm_idx_eff_mtr') ImportColumn::make('zmm_idx_eff_mtr')
->label('ZMM IDX EFF MTR') ->label('zmm idx eff mtr')
->exampleHeader('ZMM IDX EFF MTR') ->exampleHeader('zmm idx eff mtr')
->example(''), ->example(''),
ImportColumn::make('zmm_idx_eff_pump') ImportColumn::make('zmm_idx_eff_pump')
->label('ZMM IDX EFF PUMP') ->label('zmm idx eff pump')
->exampleHeader('ZMM IDX EFF PUMP') ->exampleHeader('zmm idx eff pump')
->example(''), ->example(''),
ImportColumn::make('zmm_kvacode') ImportColumn::make('zmm_kvacode')
->label('ZMM KVACODE') ->label('zmm kvacode')
->exampleHeader('ZMM KVACODE') ->exampleHeader('zmm kvacode')
->example(''), ->example(''),
ImportColumn::make('zmm_maxambtemp') ImportColumn::make('zmm_maxambtemp')
->label('ZMM MAXAMBTEMP') ->label('zmm maxambtemp')
->exampleHeader('ZMM MAXAMBTEMP') ->exampleHeader('zmm maxambtemp')
->example(''), ->example(''),
ImportColumn::make('zmm_mincoolingflow') ImportColumn::make('zmm_mincoolingflow')
->label('ZMM MINCOOLINGFLOW') ->label('zmm mincoolingflow')
->exampleHeader('ZMM MINCOOLINGFLOW') ->exampleHeader('zmm mincoolingflow')
->example(''), ->example(''),
ImportColumn::make('zmm_motorseries') ImportColumn::make('zmm_motorseries')
->label('ZMM MOTORSERIES') ->label('zmm motorseries')
->exampleHeader('ZMM MOTORSERIES') ->exampleHeader('zmm motorseries')
->example(''), ->example(''),
ImportColumn::make('zmm_motor_model') ImportColumn::make('zmm_motor_model')
->label('ZMM MOTOR MODEL') ->label('zmm motor model')
->exampleHeader('ZMM MOTOR MODEL') ->exampleHeader('zmm motor model')
->example(''), ->example(''),
ImportColumn::make('zmm_outlet') ImportColumn::make('zmm_outlet')
->label('ZMM OUTLET') ->label('zmm outlet')
->exampleHeader('ZMM OUTLET') ->exampleHeader('zmm outlet')
->example('IE2'), ->example(''),
ImportColumn::make('zmm_phase') ImportColumn::make('zmm_phase')
->label('ZMM PHASE') ->label('zmm phase')
->exampleHeader('ZMM PHASE') ->exampleHeader('zmm phase')
->example('3Ph'), ->example(''),
ImportColumn::make('zmm_pressure') ImportColumn::make('zmm_pressure')
->label('ZMM PRESSURE') ->label('zmm pressure')
->exampleHeader('ZMM PRESSURE') ->exampleHeader('zmm pressure')
->example('16bar'), ->example(''),
ImportColumn::make('zmm_pumpflowtype') ImportColumn::make('zmm_pumpflowtype')
->label('ZMM PUMPFLOWTYPE') ->label('zmm pumpflowtype')
->exampleHeader('ZMM PUMPFLOWTYPE') ->exampleHeader('zmm pumpflowtype')
->example(''), ->example(''),
ImportColumn::make('zmm_pumpseries') ImportColumn::make('zmm_pumpseries')
->label('ZMM PUMPSERIES') ->label('zmm pumpseries')
->exampleHeader('ZMM PUMPSERIES') ->exampleHeader('zmm pumpseries')
->example(''), ->example(''),
ImportColumn::make('zmm_pump_model') ImportColumn::make('zmm_pump_model')
->label('ZMM PUMP MODEL') ->label('zmm pump model')
->exampleHeader('ZMM PUMP MODEL') ->exampleHeader('zmm pump model')
->example('MVHS-15/07TR'), ->example(''),
ImportColumn::make('zmm_ratedpower') ImportColumn::make('zmm_ratedpower')
->label('ZMM RATEDPOWER') ->label('zmm ratedpower')
->exampleHeader('ZMM RATEDPOWER') ->exampleHeader('zmm ratedpower')
->example('5.5kW/7.5HP'), ->example(''),
ImportColumn::make('zmm_region') ImportColumn::make('zmm_region')
->label('ZMM REGION') ->label('zmm region')
->exampleHeader('ZMM REGION') ->exampleHeader('zmm region')
->example(''), ->example(''),
ImportColumn::make('zmm_servicefactor') ImportColumn::make('zmm_servicefactor')
->label('ZMM SERVICEFACTOR') ->label('zmm servicefactor')
->exampleHeader('ZMM SERVICEFACTOR') ->exampleHeader('zmm servicefactor')
->example(''), ->example(''),
ImportColumn::make('zmm_servicefactormaximumamps') ImportColumn::make('zmm_servicefactormaximumamps')
->label('ZMM SERVICEFACTORMAXIMUMAMPS') ->label('zmm servicefactormaximumamps')
->exampleHeader('ZMM SERVICEFACTORMAXIMUMAMPS') ->exampleHeader('zmm servicefactormaximumamps')
->example(''), ->example(''),
ImportColumn::make('zmm_speed') ImportColumn::make('zmm_speed')
->label('ZMM SPEED') ->label('zmm speed')
->exampleHeader('ZMM SPEED') ->exampleHeader('zmm speed')
->example('2900rpm'), ->example(''),
ImportColumn::make('zmm_suction') ImportColumn::make('zmm_suction')
->label('ZMM SUCTION') ->label('zmm suction')
->exampleHeader('ZMM SUCTION') ->exampleHeader('zmm suction')
->example('65mm'), ->example(''),
ImportColumn::make('zmm_suctionxdelivery') ImportColumn::make('zmm_suctionxdelivery')
->label('ZMM SUCTIONXDELIVERY') ->label('zmm suctionxdelivery')
->exampleHeader('ZMM SUCTIONXDELIVERY') ->exampleHeader('zmm suctionxdelivery')
->example('50 x 50mm'), ->example(''),
ImportColumn::make('zmm_supplysource') ImportColumn::make('zmm_supplysource')
->label('ZMM SUPPLYSOURCE') ->label('zmm supplysource')
->exampleHeader('ZMM SUPPLYSOURCE') ->exampleHeader('zmm supplysource')
->example('AC SUPPLY'), ->example(''),
ImportColumn::make('zmm_temperature') ImportColumn::make('zmm_temperature')
->label('ZMM TEMPERATURE') ->label('zmm temperature')
->exampleHeader('ZMM TEMPERATURE') ->exampleHeader('zmm temperature')
->example('90°C'), ->example(''),
ImportColumn::make('zmm_thrustload') ImportColumn::make('zmm_thrustload')
->label('ZMM THRUSTLOAD') ->label('zmm thrustload')
->exampleHeader('ZMM THRUSTLOAD') ->exampleHeader('zmm thrustload')
->example(''), ->example(''),
ImportColumn::make('zmm_volts') ImportColumn::make('zmm_volts')
->label('ZMM VOLTS') ->label('zmm volts')
->exampleHeader('ZMM VOLTS') ->exampleHeader('zmm volts')
->example('415V'), ->example(''),
ImportColumn::make('zmm_wire') ImportColumn::make('zmm_wire')
->label('ZMM WIRE') ->label('zmm wire')
->exampleHeader('ZMM WIRE') ->exampleHeader('zmm wire')
->example(''), ->example(''),
ImportColumn::make('zmm_package') ImportColumn::make('zmm_package')
->label('ZMM PACKAGE') ->label('zmm package')
->exampleHeader('ZMM PACKAGE') ->exampleHeader('zmm package')
->example(''), ->example(''),
ImportColumn::make('zmm_pvarrayrating') ImportColumn::make('zmm_pvarrayrating')
->label('ZMM PVARRAYRATING') ->label('zmm pvarrayrating')
->exampleHeader('ZMM PVARRAYRATING') ->exampleHeader('zmm pvarrayrating')
->example(''), ->example(''),
ImportColumn::make('zmm_isi') ImportColumn::make('zmm_isi')
->label('ZMM ISI') ->label('zmm isi')
->exampleHeader('ZMM ISI') ->exampleHeader('zmm isi')
->example('Y'), ->example(''),
ImportColumn::make('zmm_isimotor') ImportColumn::make('zmm_isimotor')
->label('ZMM ISIMOTOR') ->label('zmm isimotor')
->exampleHeader('ZMM ISIMOTOR') ->exampleHeader('zmm isimotor')
->example('IS:12615'), ->example(''),
ImportColumn::make('zmm_isipump') ImportColumn::make('zmm_isipump')
->label('ZMM ISIPUMP') ->label('zmm isipump')
->exampleHeader('ZMM ISIPUMP') ->exampleHeader('zmm isipump')
->example(''), ->example(''),
ImportColumn::make('zmm_isipumpset') ImportColumn::make('zmm_isipumpset')
->label('ZMM ISIPUMPSET') ->label('zmm isipumpset')
->exampleHeader('ZMM ISIPUMPSET') ->exampleHeader('zmm isipumpset')
->example('IS:12615'), ->example(''),
ImportColumn::make('zmm_pumpset_model') ImportColumn::make('zmm_pumpset_model')
->label('ZMM PUMPSET MODEL') ->label('zmm pumpset model')
->exampleHeader('ZMM PUMPSET MODEL') ->exampleHeader('zmm pumpset model')
->example('MVHS-15/07TR'), ->example(''),
ImportColumn::make('zmm_stages') ImportColumn::make('zmm_stages')
->label('ZMM STAGES') ->label('zmm stages')
->exampleHeader('ZMM STAGES') ->exampleHeader('zmm stages')
->example('7'), ->example(''),
ImportColumn::make('zmm_headrange') ImportColumn::make('zmm_headrange')
->label('ZMM HEADRANGE') ->label('zmm headrange')
->exampleHeader('ZMM HEADRANGE') ->exampleHeader('zmm headrange')
->example(''), ->example(''),
ImportColumn::make('zmm_overall_efficiency') ImportColumn::make('zmm_overall_efficiency')
->label('ZMM OVERALL EFFICIENCY') ->label('zmm overall efficiency')
->exampleHeader('ZMM OVERALL EFFICIENCY') ->exampleHeader('zmm overall efficiency')
->example(''), ->example(''),
ImportColumn::make('zmm_connection') ImportColumn::make('zmm_connection')
->label('ZMM CONNECTION') ->label('zmm connection')
->exampleHeader('ZMM CONNECTION') ->exampleHeader('zmm connection')
->example('STAR/DELTA'), ->example(''),
ImportColumn::make('zmm_min_bore_size') ImportColumn::make('zmm_min_bore_size')
->label('ZMM MIN BORE SIZE') ->label('zmm min bore size')
->exampleHeader('ZMM MIN BORE SIZE') ->exampleHeader('zmm min bore size')
->example(''), ->example(''),
ImportColumn::make('zmm_isireference') ImportColumn::make('zmm_isireference')
->label('ZMM ISIREFERENCE') ->label('zmm isireference')
->exampleHeader('ZMM ISIREFERENCE') ->exampleHeader('zmm isireference')
->example(''), ->example(''),
ImportColumn::make('zmm_category') ImportColumn::make('zmm_category')
->label('ZMM CATEGORY') ->label('zmm category')
->exampleHeader('ZMM CATEGORY') ->exampleHeader('zmm category')
->example('B'), ->example(''),
ImportColumn::make('zmm_submergence') ImportColumn::make('zmm_submergence')
->label('ZMM SUBMERGENCE') ->label('zmm submergence')
->exampleHeader('ZMM SUBMERGENCE') ->exampleHeader('zmm submergence')
->example(''), ->example(''),
ImportColumn::make('zmm_capacitorstart') ImportColumn::make('zmm_capacitorstart')
->label('ZMM CAPACITORSTART') ->label('zmm capacitorstart')
->exampleHeader('ZMM CAPACITORSTART') ->exampleHeader('zmm capacitorstart')
->example(''), ->example(''),
ImportColumn::make('zmm_capacitorrun') ImportColumn::make('zmm_capacitorrun')
->label('ZMM CAPACITORRUN') ->label('zmm capacitorrun')
->exampleHeader('ZMM CAPACITORRUN') ->exampleHeader('zmm capacitorrun')
->example(''), ->example(''),
ImportColumn::make('zmm_inch') ImportColumn::make('zmm_inch')
->label('ZMM INCH') ->label('zmm inch')
->exampleHeader('ZMM INCH') ->exampleHeader('zmm inch')
->example(''), ->example(''),
ImportColumn::make('zmm_motor_type') ImportColumn::make('zmm_motor_type')
->label('ZMM MOTOR TYPE') ->label('zmm motor type')
->exampleHeader('ZMM MOTOR TYPE') ->exampleHeader('zmm motor type')
->example('TEFC'), ->example(''),
ImportColumn::make('zmm_dismantle_direction') ImportColumn::make('zmm_dismantle_direction')
->label('ZMM DISMANTLE DIRECTION') ->label('zmm dismantle direction')
->exampleHeader('ZMM DISMANTLE DIRECTION') ->exampleHeader('zmm dismantle direction')
->example(''), ->example(''),
ImportColumn::make('zmm_eff_ovrall') ImportColumn::make('zmm_eff_ovrall')
->label('ZMM EFF OVERALL') ->label('zmm eff ovrall')
->exampleHeader('ZMM EFF OVERALL') ->exampleHeader('zmm eff ovrall')
->example(''), ->example(''),
ImportColumn::make('zmm_bodymoc') ImportColumn::make('zmm_bodymoc')
->label('ZMM BODYMOC') ->label('zmm bodymoc')
->exampleHeader('ZMM BODYMOC') ->exampleHeader('zmm bodymoc')
->example(''), ->example(''),
ImportColumn::make('zmm_rotormoc') ImportColumn::make('zmm_rotormoc')
->label('ZMM ROTORMOC') ->label('zmm rotormoc')
->exampleHeader('ZMM ROTORMOC') ->exampleHeader('zmm rotormoc')
->example(''), ->example(''),
ImportColumn::make('zmm_dlwl') ImportColumn::make('zmm_dlwl')
->label('ZMM DLWL') ->label('zmm dlwl')
->exampleHeader('ZMM DLWL') ->exampleHeader('zmm dlwl')
->example(''), ->example(''),
ImportColumn::make('zmm_inputpower') ImportColumn::make('zmm_inputpower')
->label('ZMM INPUTPOWER') ->label('zmm inputpower')
->exampleHeader('ZMM INPUTPOWER') ->exampleHeader('zmm inputpower')
->example(''), ->example(''),
ImportColumn::make('zmm_imp_od') ImportColumn::make('zmm_imp_od')
->label('ZMM IMP OD') ->label('zmm imp od')
->exampleHeader('ZMM IMP OD') ->exampleHeader('zmm imp od')
->example(''), ->example(''),
ImportColumn::make('zmm_ambtemp') ImportColumn::make('zmm_ambtemp')
->label('ZMM AMBTEMP') ->label('zmm ambtemp')
->exampleHeader('ZMM AMBTEMP') ->exampleHeader('zmm ambtemp')
->example(''), ->example(''),
ImportColumn::make('zmm_de') ImportColumn::make('zmm_de')
->label('ZMM DE') ->label('zmm de')
->exampleHeader('ZMM DE') ->exampleHeader('zmm de')
->example(''), ->example(''),
ImportColumn::make('zmm_dischargerange') ImportColumn::make('zmm_dischargerange')
->label('ZMM DISCHARGERANGE') ->label('zmm dischargerange')
->exampleHeader('ZMM DISCHARGERANGE') ->exampleHeader('zmm dischargerange')
->example(''), ->example(''),
ImportColumn::make('zmm_efficiency_class') ImportColumn::make('zmm_efficiency_class')
->label('ZMM EFFICIENCY CLASS') ->label('zmm efficiency class')
->exampleHeader('ZMM EFFICIENCY CLASS') ->exampleHeader('zmm efficiency class')
->example('IE2'), ->example(''),
ImportColumn::make('zmm_framesize') ImportColumn::make('zmm_framesize')
->label('ZMM FRAMESIZE') ->label('zmm framesize')
->exampleHeader('ZMM FRAMESIZE') ->exampleHeader('zmm framesize')
->example(''), ->example(''),
ImportColumn::make('zmm_impellerdiameter') ImportColumn::make('zmm_impellerdiameter')
->label('ZMM IMPELLERDIAMETER') ->label('zmm impellerdiameter')
->exampleHeader('ZMM IMPELLERDIAMETER') ->exampleHeader('zmm impellerdiameter')
->example(''), ->example(''),
ImportColumn::make('zmm_insulationclass') ImportColumn::make('zmm_insulationclass')
->label('ZMM INSULATIONCLASS') ->label('zmm insulationclass')
->exampleHeader('ZMM INSULATIONCLASS') ->exampleHeader('zmm insulationclass')
->example('F'), ->example(''),
ImportColumn::make('zmm_maxflow') ImportColumn::make('zmm_maxflow')
->label('ZMM MAXFLOW') ->label('zmm maxflow')
->exampleHeader('ZMM MAXFLOW') ->exampleHeader('zmm maxflow')
->example(''), ->example(''),
ImportColumn::make('zmm_minhead') ImportColumn::make('zmm_minhead')
->label('ZMM MINHEAD') ->label('zmm minhead')
->exampleHeader('ZMM MINHEAD') ->exampleHeader('zmm minhead')
->example(''), ->example(''),
ImportColumn::make('zmm_mtrlofconst') ImportColumn::make('zmm_mtrlofconst')
->label('ZMM MTRLOFCONST') ->label('zmm mtrlofconst')
->exampleHeader('ZMM MTRLOFCONST') ->exampleHeader('zmm mtrlofconst')
->example(''), ->example(''),
ImportColumn::make('zmm_nde') ImportColumn::make('zmm_nde')
->label('ZMM NDE') ->label('zmm nde')
->exampleHeader('ZMM NDE') ->exampleHeader('zmm nde')
->example(''), ->example(''),
ImportColumn::make('zmm_powerfactor') ImportColumn::make('zmm_powerfactor')
->label('ZMM POWERFACTOR') ->label('zmm powerfactor')
->exampleHeader('ZMM POWERFACTOR') ->exampleHeader('zmm powerfactor')
->example(''), ->example(''),
ImportColumn::make('zmm_tagno') ImportColumn::make('zmm_tagno')
->label('ZMM TAGNO') ->label('zmm tagno')
->exampleHeader('ZMM TAGNO') ->exampleHeader('zmm tagno')
->example(''), ->example(''),
ImportColumn::make('zmm_year') ImportColumn::make('zmm_year')
->label('ZMM YEAR') ->label('zmm year')
->exampleHeader('ZMM YEAR') ->exampleHeader('zmm year')
->example(''), ->example(''),
ImportColumn::make('zmm_laser_name') ImportColumn::make('zmm_laser_name')
->label('ZMM LASER NAME') ->label('zmm laser name')
->exampleHeader('ZMM LASER NAME') ->exampleHeader('zmm laser name')
->example(''),
ImportColumn::make('zmm_logo_cp')
->label('ZMM LOGO CP')
->exampleHeader('ZMM LOGO CP')
->example(''),
ImportColumn::make('zmm_logo_ce')
->label('ZMM LOGO CE')
->exampleHeader('ZMM LOGO CE')
->example('NO'),
ImportColumn::make('zmm_logo_nsf')
->label('ZMM LOGO NSF')
->exampleHeader('ZMM LOGO NSF')
->example(''), ->example(''),
ImportColumn::make('zmm_beenote') ImportColumn::make('zmm_beenote')
->label('ZMM BEENOTE') ->label('zmm beenote')
->exampleHeader('ZMM BEENOTE') ->exampleHeader('zmm beenote')
->example(''), ->example(''),
ImportColumn::make('zmm_beenumber') ImportColumn::make('zmm_beenumber')
->label('ZMM BEENUMBER') ->label('zmm beenumber')
->exampleHeader('ZMM BEENUMBER') ->exampleHeader('zmm beenumber')
->example(''), ->example(''),
ImportColumn::make('zmm_beestar') ImportColumn::make('zmm_beestar')
->label('ZMM BEESTAR') ->label('zmm beenumber')
->exampleHeader('ZMM BEESTAR') ->exampleHeader('zmm beenumber')
->example(''), ->example(''),
ImportColumn::make('zmm_codeclass') ImportColumn::make('zmm_codeclass')
->label('ZMM CODECLASS') ->label('zmm codeclass')
->exampleHeader('ZMM CODECLASS') ->exampleHeader('zmm codeclass')
->example(''), ->example(''),
ImportColumn::make('zmm_colour') ImportColumn::make('zmm_colour')
->label('ZMM COLOUR') ->label('zmm colour')
->exampleHeader('ZMM COLOUR') ->exampleHeader('zmm colour')
->example(''),
ImportColumn::make('zmm_logo_cp')
->label('zmm logo cp')
->exampleHeader('zmm logo cp')
->example(''),
ImportColumn::make('zmm_logo_ce')
->label('zmm logo ce')
->exampleHeader('zmm logo ce')
->example(''),
ImportColumn::make('zmm_logo_nsf')
->label('zmm logo nsf')
->exampleHeader('zmm logo nsf')
->example(''), ->example(''),
ImportColumn::make('zmm_grade') ImportColumn::make('zmm_grade')
->label('ZMM GRADE') ->label('zmm grade')
->exampleHeader('ZMM GRADE') ->exampleHeader('zmm grade')
->example(''), ->example(''),
ImportColumn::make('zmm_grwt_pset') ImportColumn::make('zmm_grwt_pset')
->label('ZMM GRWT PSET') ->label('zmm grwt pset')
->exampleHeader('ZMM GRWT PSET') ->exampleHeader('zmm grwt pset')
->example(''), ->example(''),
ImportColumn::make('zmm_grwt_cable') ImportColumn::make('zmm_grwt_cable')
->label('ZMM GRWT CABLE') ->label('zmm grwt cable')
->exampleHeader('ZMM GRWT CABLE') ->exampleHeader('zmm grwt cable')
->example(''), ->example(''),
ImportColumn::make('zmm_grwt_motor') ImportColumn::make('zmm_grwt_motor')
->label('ZMM GRWT MOTOR') ->label('zmm grwt motor')
->exampleHeader('ZMM GRWT MOTOR') ->exampleHeader('zmm grwt motor')
->example(''), ->example(''),
ImportColumn::make('zmm_grwt_pf') ImportColumn::make('zmm_grwt_pf')
->label('ZMM GRWT PF') ->label('zmm grwt pf')
->exampleHeader('ZMM GRWT PF') ->exampleHeader('zmm grwt pf')
->example(''), ->example(''),
ImportColumn::make('zmm_grwt_pump') ImportColumn::make('zmm_grwt_pump')
->label('ZMM GRWT PUMP') ->label('zmm grwt pump')
->exampleHeader('ZMM GRWT PUMP') ->exampleHeader('zmm grwt pump')
->example(''), ->example(''),
ImportColumn::make('zmm_isivalve') ImportColumn::make('zmm_isivalve')
->label('ZMM ISIVALVE') ->label('zmm isivalve')
->exampleHeader('ZMM ISIVALVE') ->exampleHeader('zmm isivalve')
->example(''), ->example(''),
ImportColumn::make('zmm_isi_wc') ImportColumn::make('zmm_isi_wc')
->label('ZMM ISI WC') ->label('zmm isi wc')
->exampleHeader('ZMM ISI WC') ->exampleHeader('zmm isi wc')
->example(''), ->example(''),
ImportColumn::make('zmm_labelperiod') ImportColumn::make('zmm_labelperiod')
->label('ZMM LABELPERIOD') ->label('zmm labelperiod')
->exampleHeader('ZMM LABELPERIOD') ->exampleHeader('zmm labelperiod')
->example(''), ->example(''),
ImportColumn::make('zmm_length') ImportColumn::make('zmm_length')
->label('ZMM LENGTH') ->label('zmm length')
->exampleHeader('ZMM LENGTH') ->exampleHeader('zmm length')
->example(''), ->example(''),
ImportColumn::make('zmm_license_cml_no') ImportColumn::make('zmm_license_cml_no')
->label('ZMM LICENSE CML NO') ->label('zmm license cml no')
->exampleHeader('ZMM LICENSE CML NO') ->exampleHeader('zmm license cml no')
->example(''), ->example(''),
ImportColumn::make('zmm_mfgmonyr') ImportColumn::make('zmm_mfgmonyr')
->label('ZMM MFGMONYR') ->label('zmm mfgmonyr')
->exampleHeader('ZMM MFGMONYR') ->exampleHeader('zmm mfgmonyr')
->example(''), ->example(''),
ImportColumn::make('zmm_modelyear') ImportColumn::make('zmm_modelyear')
->label('ZMM MODELYEAR') ->label('zmm modelyear')
->exampleHeader('ZMM MODELYEAR') ->exampleHeader('zmm modelyear')
->example(''), ->example(''),
ImportColumn::make('zmm_motoridentification') ImportColumn::make('zmm_motoridentification')
->label('ZMM MOTORIDENTIFICATION') ->label('zmm motoridentification')
->exampleHeader('ZMM MOTORIDENTIFICATION') ->exampleHeader('zmm motoridentification')
->example(''), ->example(''),
ImportColumn::make('zmm_newt_pset') ImportColumn::make('zmm_newt_pset')
->label('ZMM NEWT PSET') ->label('zmm newt pset')
->exampleHeader('ZMM NEWT PSET') ->exampleHeader('zmm newt pset')
->example(''), ->example(''),
ImportColumn::make('zmm_newt_cable') ImportColumn::make('zmm_newt_cable')
->label('ZMM NEWT CABLE') ->label('zmm newt cable')
->exampleHeader('ZMM NEWT CABLE') ->exampleHeader('zmm newt cable')
->example(''), ->example(''),
ImportColumn::make('zmm_newt_motor') ImportColumn::make('zmm_newt_motor')
->label('ZMM NEWT MOTOR') ->label('zmm newt motor')
->exampleHeader('ZMM NEWT MOTOR') ->exampleHeader('zmm newt motor')
->example(''), ->example(''),
ImportColumn::make('zmm_newt_pf') ImportColumn::make('zmm_newt_pf')
->label('ZMM NEWT PF') ->label('zmm newt pf')
->exampleHeader('ZMM NEWT PF') ->exampleHeader('zmm newt pf')
->example(''), ->example(''),
ImportColumn::make('zmm_newt_pump') ImportColumn::make('zmm_newt_pump')
->label('ZMM NEWT PUMP') ->label('zmm newt pump')
->exampleHeader('ZMM NEWT PUMP') ->exampleHeader('zmm newt pump')
->example(''), ->example(''),
ImportColumn::make('zmm_packtype') ImportColumn::make('zmm_packtype')
->label('ZMM PACKTYPE') ->label('zmm packtype')
->exampleHeader('ZMM PACKTYPE') ->exampleHeader('zmm packtype')
->example(''), ->example(''),
ImportColumn::make('zmm_panel') ImportColumn::make('zmm_panel')
->label('ZMM PANEL') ->label('zmm panel')
->exampleHeader('ZMM PANEL') ->exampleHeader('zmm panel')
->example(''), ->example(''),
ImportColumn::make('zmm_performance_factor') ImportColumn::make('zmm_performance_factor')
->label('ZMM PERFORMANCE FACTOR') ->label('zmm performance factor')
->exampleHeader('ZMM PERFORMANCE FACTOR') ->exampleHeader('zmm performance factor')
->example(''), ->example(''),
ImportColumn::make('zmm_pumpidentification') ImportColumn::make('zmm_pumpidentification')
->label('ZMM PUMPIDENTIFICATION') ->label('zmm pumpidentification')
->exampleHeader('ZMM PUMPIDENTIFICATION') ->exampleHeader('zmm pumpidentification')
->example(''), ->example(''),
ImportColumn::make('zmm_psettype') ImportColumn::make('zmm_psettype')
->label('ZMM PSETTYPE') ->label('zmm psettype')
->exampleHeader('ZMM PSETTYPE') ->exampleHeader('zmm psettype')
->example(''), ->example(''),
ImportColumn::make('zmm_size') ImportColumn::make('zmm_size')
->label('ZMM SIZE') ->label('zmm size')
->exampleHeader('ZMM SIZE') ->exampleHeader('zmm size')
->example(''), ->example(''),
ImportColumn::make('zmm_eff_ttl') ImportColumn::make('zmm_eff_ttl')
->label('ZMM EFF TTL') ->label('zmm eff ttl')
->exampleHeader('ZMM EFF TTL') ->exampleHeader('zmm eff ttl')
->example(''), ->example(''),
ImportColumn::make('zmm_type') ImportColumn::make('zmm_type')
->label('ZMM TYPE') ->label('zmm type')
->exampleHeader('ZMM TYPE') ->exampleHeader('zmm type')
->example(''), ->example(''),
ImportColumn::make('zmm_usp') ImportColumn::make('zmm_usp')
->label('ZMM USP') ->label('zmm usp')
->exampleHeader('ZMM USP') ->exampleHeader('zmm usp')
->example(''), ->example(''),
ImportColumn::make('mark_status') ImportColumn::make('mark_status')
->label('MARKED STATUS') ->label('MARKED STATUS')
@@ -542,23 +535,15 @@ class ClassCharacteristicImporter extends Importer
ImportColumn::make('marked_datetime') ImportColumn::make('marked_datetime')
->label('MARKED DATETIME') ->label('MARKED DATETIME')
->exampleHeader('MARKED DATETIME') ->exampleHeader('MARKED DATETIME')
->example('01-01-2026 00:08:00'), ->example(''),
ImportColumn::make('marked_physical_count')
->label('MARKED PHYSICAL COUNT')
->exampleHeader('MARKED PHYSICAL COUNT')
->example('0'),
ImportColumn::make('marked_expected_time')
->label('MARKED EXPECTED TIME')
->exampleHeader('MARKED EXPECTED TIME')
->example('0'),
ImportColumn::make('marked_by') ImportColumn::make('marked_by')
->label('MARKED BY') ->label('MARKED BY')
->exampleHeader('MARKED BY') ->exampleHeader('MARKED BY')
->example('TEST001'), ->example(''),
ImportColumn::make('man_marked_status') ImportColumn::make('man_marked_status')
->label('MANUAL MARKED STATUS') ->label('MANUAL MARKED STATUS')
->exampleHeader('MANUAL MARKED STATUS') ->exampleHeader('MANUAL MARKED STATUS')
->example('0'), ->example(''),
ImportColumn::make('man_marked_datetime') ImportColumn::make('man_marked_datetime')
->label('MANUAL MARKED DATETIME') ->label('MANUAL MARKED DATETIME')
->exampleHeader('MANUAL MARKED DATETIME') ->exampleHeader('MANUAL MARKED DATETIME')
@@ -571,14 +556,6 @@ class ClassCharacteristicImporter extends Importer
->label('MOTOR MARKED STATUS') ->label('MOTOR MARKED STATUS')
->exampleHeader('MOTOR MARKED STATUS') ->exampleHeader('MOTOR MARKED STATUS')
->example(''), ->example(''),
ImportColumn::make('motor_marked_physical_count')
->label('MOTOR MARKED PHYSICAL COUNT')
->exampleHeader('MOTOR MARKED PHYSICAL COUNT')
->example('0'),
ImportColumn::make('motor_expected_time')
->label('MOTOR EXPECTED TIME')
->exampleHeader('MOTOR EXPECTED TIME')
->example('0'),
ImportColumn::make('motor_marked_by') ImportColumn::make('motor_marked_by')
->label('MOTOR MARKED BY') ->label('MOTOR MARKED BY')
->exampleHeader('MOTOR MARKED BY') ->exampleHeader('MOTOR MARKED BY')
@@ -587,38 +564,14 @@ class ClassCharacteristicImporter extends Importer
->label('PUMP MARKED STATUS') ->label('PUMP MARKED STATUS')
->exampleHeader('PUMP MARKED STATUS') ->exampleHeader('PUMP MARKED STATUS')
->example(''), ->example(''),
ImportColumn::make('pump_marked_physical_count')
->label('PUMP MARKED PHYSICAL COUNT')
->exampleHeader('PUMP MARKED PHYSICAL COUNT')
->example('0'),
ImportColumn::make('pump_expected_time')
->label('PUMP EXPECTED TIME')
->exampleHeader('PUMP EXPECTED TIME')
->example('0'),
ImportColumn::make('pump_marked_by') ImportColumn::make('pump_marked_by')
->label('PUMP MARKED BY') ->label('PUMP MARKED BY')
->exampleHeader('PUMP MARKED BY') ->exampleHeader('PUMP MARKED BY')
->example(''), ->example(''),
ImportColumn::make('name_plate_marked_status')
->label('NAME PLATE MARKED STATUS')
->exampleHeader('NAME PLATE MARKED STATUS')
->example(''),
ImportColumn::make('name_plate_expected_time')
->label('NAME PLATE EXPECTED TIME')
->exampleHeader('NAME PLATE EXPECTED TIME')
->example('0'),
ImportColumn::make('name_plate_marked_by')
->label('NAME PLATE MARKED BY')
->exampleHeader('NAME PLATE MARKED BY')
->example(''),
ImportColumn::make('motor_pump_pumpset_status') ImportColumn::make('motor_pump_pumpset_status')
->label('MOTOR PUMP PUMPSET STATUS') ->label('MOTOR PUMP PUMPSET STATUS')
->exampleHeader('MOTOR PUMP PUMPSET STATUS') ->exampleHeader('MOTOR PUMP PUMPSET STATUS')
->example(''), ->example(''),
ImportColumn::make('winded_serial_number')
->label('WINDED SERIAL NUMBER')
->exampleHeader('WINDED SERIAL NUMBER')
->example(''),
ImportColumn::make('motor_machine_name') ImportColumn::make('motor_machine_name')
->label('MOTOR MACHINE NAME') ->label('MOTOR MACHINE NAME')
->exampleHeader('MOTOR MACHINE NAME') ->exampleHeader('MOTOR MACHINE NAME')
@@ -627,10 +580,6 @@ class ClassCharacteristicImporter extends Importer
->label('PUMP MACHINE NAME') ->label('PUMP MACHINE NAME')
->exampleHeader('PUMP MACHINE NAME') ->exampleHeader('PUMP MACHINE NAME')
->example(''), ->example(''),
ImportColumn::make('name_plate_machine_name')
->label('NAME PLATE MACHINE NAME')
->exampleHeader('NAME PLATE MACHINE NAME')
->example(''),
ImportColumn::make('pumpset_machine_name') ImportColumn::make('pumpset_machine_name')
->label('PUMPSET MACHINE NAME') ->label('PUMPSET MACHINE NAME')
->exampleHeader('PUMPSET MACHINE NAME') ->exampleHeader('PUMPSET MACHINE NAME')
@@ -651,26 +600,31 @@ class ClassCharacteristicImporter extends Importer
->label('PENDING RELEASED STATUS') ->label('PENDING RELEASED STATUS')
->exampleHeader('PENDING RELEASED STATUS') ->exampleHeader('PENDING RELEASED STATUS')
->example(''), ->example(''),
ImportColumn::make('has_work_flow_id') ImportColumn::make('motor_expected_time')
->label('HAS WORK FLOW ID') ->label('MOTOR EXPECTED TIME')
->exampleHeader('HAS WORK FLOW ID') ->exampleHeader('MOTOR EXPECTED TIME')
->example('0'), ->example(''),
ImportColumn::make('pump_expected_time')
->label('PUMP EXPECTED TIME')
->exampleHeader('PUMP EXPECTED TIME')
->example(''),
ImportColumn::make('created_at') ImportColumn::make('created_at')
->label('CREATED AT') ->label('CREATED AT')
->exampleHeader('CREATED AT') ->exampleHeader('CREATED AT')
->example('01-01-2026 00:08:00'), ->example(''),
ImportColumn::make('created_by') ImportColumn::make('created_by')
->label('CREATED BY') ->label('CREATED BY')
->exampleHeader('CREATED BY') ->exampleHeader('CREATED BY')
->example('TEST001'), ->example('RAW01234'),
ImportColumn::make('updated_at') ImportColumn::make('updated_at')
->label('UPDATED AT') ->label('UPDATED AT')
->exampleHeader('UPDATED AT') ->exampleHeader('UPDATED AT')
->example('01-01-2026 00:08:00'), ->example(''),
ImportColumn::make('updated_by') ImportColumn::make('updated_by')
->label('UPDATED BY') ->label('UPDATED BY')
->exampleHeader('UPDATED BY') ->exampleHeader('UPDATED BY')
->example('TEST001'), ->example(''),
// ImportColumn::make('updated_by'),
]; ];
} }

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,496 +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')
// ->relationship()// resolveUsing: 'items.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)->first();
if ($record && $record->sticker_master_id != $stickId) {
$stickId = null;
$warnMsg[] = 'Item code mismatch with existing record!';
} elseif ($record) {
$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 && $hasMotorQr) {
$curMotorQr = $hadMotorQr;
}
if ($hadPumpQr && $hasPumpQr) {
$curPumpQr = $hadPumpQr;
}
if ($hadPumpSetQr && $hasPumpSetQr) {
$curPumpSetQr = $hadPumpSetQr;
}
if ($hadCapacitorQr && $hasCapacitorQr) {
$curCapacitorQr = $hadCapacitorQr;
$curPanelBoxCode = $record->panel_box_code ?? null;
$curPanelBoxSupplier = $record->panel_box_supplier ?? null;
$curPanelBoxSerialNumber = $record->panel_box_serial_number ?? null;
}
$warnMsg[] = 'Record Item ID : '.$record->sticker_master_id.' Master Item ID : '.$stickId;
if ($record->invoice_number != $invoiceNumber) {
$stickId = null;
$warnMsg[] = 'Invoice number mismatch with existing record!';
// throw new RowImportFailedException('Invoice number mismatch with existing record!');
} elseif ($record->scanned_status == 'Scanned') {
$stickId = null;
return null;
} else {
// 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 ($stickId) {
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
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 null;
// 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

@@ -24,13 +24,13 @@ class ProcessOrderImporter extends Importer
ImportColumn::make('plant') ImportColumn::make('plant')
->requiredMapping() ->requiredMapping()
->exampleHeader('PLANT CODE') ->exampleHeader('PLANT CODE')
->example('1200') ->example('1000')
->label('PLANT CODE') ->label('PLANT CODE')
->relationship(resolveUsing: 'code') ->relationship(resolveUsing: 'code')
->rules(['required']), ->rules(['required']),
ImportColumn::make('line') ImportColumn::make('line')
->exampleHeader('LINE NAME') ->exampleHeader('LINE NAME')
->example(' Poly Wrapped Wire SFG') ->example(' Polywrapped line')
->label('LINE NAME') ->label('LINE NAME')
->relationship(resolveUsing: 'name'), ->relationship(resolveUsing: 'name'),
ImportColumn::make('item') ImportColumn::make('item')
@@ -43,54 +43,54 @@ class ProcessOrderImporter extends Importer
ImportColumn::make('process_order') ImportColumn::make('process_order')
->requiredMapping() ->requiredMapping()
->exampleHeader('PROCESS ORDER') ->exampleHeader('PROCESS ORDER')
->example('2025002123456') ->example('202500123456')
->label('PROCESS ORDER') ->label('PROCESS ORDER')
->rules(['required']), ->rules(['required']),
ImportColumn::make('order_quantity')
->requiredMapping()
->exampleHeader('ORDER QUANTITY')
->example('1000')
->label('ORDER QUANTITY')
->rules(['required']),
ImportColumn::make('coil_number') ImportColumn::make('coil_number')
->exampleHeader('COIL NUMBER') ->exampleHeader('COIL NUMBER')
// ->example('01') ->example('01')
->label('COIL NUMBER'), ->label('COIL NUMBER'),
ImportColumn::make('order_quantity')
->requiredMapping()
->exampleHeader('ORDER QUANTITY')
->example('100')
->label('ORDER QUANTITY')
->rules(['required']),
ImportColumn::make('received_quantity') ImportColumn::make('received_quantity')
->exampleHeader('RECEIVED QUANTITY') ->exampleHeader('RECEIVED QUANTITY')
// ->example('01') ->example('01')
->label('RECEIVED QUANTITY'), ->label('RECEIVED QUANTITY'),
ImportColumn::make('sfg_number') ImportColumn::make('sfg_number')
->exampleHeader('SFG NUMBER') ->exampleHeader('SFG NUMBER')
// ->example('200000220613-72') ->example('200000220613-72')
->label('SFG NUMBER'), ->label('SFG NUMBER'),
ImportColumn::make('machine_name') ImportColumn::make('machine_name')
->exampleHeader('MACHINE NAME') ->exampleHeader('MACHINE NAME')
// ->example('WMIWRM13 - 2-L2') ->example('WMIWRM13 - 2-L2')
->label('MACHINE NAME'), ->label('MACHINE NAME'),
ImportColumn::make('scrap_quantity') ImportColumn::make('scrap_quantity')
->exampleHeader('SCRAP QUANTITY') ->exampleHeader('SCRAP QUANTITY')
// ->example('0') ->example('0')
->label('SCRAP QUANTITY'), ->label('SCRAP QUANTITY'),
ImportColumn::make('rework_status') ImportColumn::make('rework_status')
->exampleHeader('REWORK STATUS') ->exampleHeader('REWORK STATUS')
// ->example('0') ->example('0')
->label('REWORK STATUS'), ->label('REWORK STATUS'),
ImportColumn::make('created_at') ImportColumn::make('created_at')
->exampleHeader('CREATED AT') ->exampleHeader('CREATED AT')
// ->example('2026-02-20 13:00:00') ->example('2026-02-20 13:00:00')
->label('CREATED AT'), ->label('CREATED AT'),
ImportColumn::make('updated_at') ImportColumn::make('updated_at')
->exampleHeader('UPDATED AT') ->exampleHeader('UPDATED AT')
// ->example('2026-02-20 13:00:00') ->example('2026-02-20 13:00:00')
->label('UPDATED AT'), ->label('UPDATED AT'),
ImportColumn::make('created_by') ImportColumn::make('created_by')
->exampleHeader('CREATED BY') ->exampleHeader('CREATED BY')
// ->example('RAW01234') ->example('RAW01234')
->label('CREATED BY'), ->label('CREATED BY'),
ImportColumn::make('updated_by') ImportColumn::make('updated_by')
->exampleHeader('UPDATED BY') ->exampleHeader('UPDATED BY')
// ->example('RAW01234') ->example('RAW01234')
->label('UPDATED BY'), ->label('UPDATED BY'),
]; ];
} }
@@ -98,13 +98,12 @@ class ProcessOrderImporter extends Importer
public function resolveRecord(): ?ProcessOrder public function resolveRecord(): ?ProcessOrder
{ {
$warnMsg = []; $warnMsg = [];
$plantCod = $this->data['plant'];
$plant = null; $plant = null;
$plantCod = trim($this->data['plant']) ?? '';
$plantId = null; $plantId = null;
$item = null;
$iCode = trim($this->data['item']) ?? '';
$itemId = null; $itemId = null;
$lineNam = trim($this->data['line']) ?? ''; $iCode = trim($this->data['item']);
$lineName = trim($this->data['line']);
$processOrder = trim($this->data['process_order'] ?? ''); $processOrder = trim($this->data['process_order'] ?? '');
$coilNo = trim($this->data['coil_number'] ?? ''); $coilNo = trim($this->data['coil_number'] ?? '');
$sfgNo = trim($this->data['sfg_number'] ?? ''); $sfgNo = trim($this->data['sfg_number'] ?? '');
@@ -121,29 +120,18 @@ class ProcessOrderImporter extends Importer
// $operatorName = $user->name; // $operatorName = $user->name;
if ($plantCod == null || $plantCod == '') { if ($plantCod == null || $plantCod == '') {
$warnMsg[] = "Plant code can't be empty!"; $warnMsg[] = 'Plant code cannot be empty';
} elseif (Str::length($plantCod) < 4 || ! is_numeric($plantCod) || ! preg_match('/^[1-9]\d{3,}$/', $plantCod)) {
$warnMsg[] = 'Invalid plant code found';
} }
if ($iCode == null || $iCode == '') { if ($iCode == null || $iCode == '') {
$warnMsg[] = "Item code can't be empty!"; $warnMsg[] = 'Item code cannot be empty';
} elseif (Str::length($iCode) < 6 || ! ctype_alnum($iCode)) {
$warnMsg[] = 'Invalid item code found';
} }
if ($processOrder == null || $processOrder == '') { if ($processOrder == null || $processOrder == '') {
$warnMsg[] = "Process order can't be empty!"; $warnMsg[] = 'Process order cannot be empty';
} elseif ($processOrder && Str::contains($processOrder, '.')) {
$warnMsg[] = 'Invalid process order found!';
}
if ($lineNam == null || $lineNam == '') {
$warnMsg[] = "Line name can't be empty!";
} }
if ($orderQuan == null || $orderQuan == '') { if ($orderQuan == null || $orderQuan == '') {
$warnMsg[] = "Order quantity can't be empty!"; $warnMsg[] = 'Order quantity cannot be empty';
} elseif ($orderQuan == 0 || $orderQuan == '0') { } elseif ($orderQuan == 0 || $orderQuan == '0') {
$warnMsg[] = "Order quantity can't be zero!"; $warnMsg[] = 'Order quantity cannot be zero';
} elseif (Str::length($orderQuan) >= 1 && ! is_numeric($orderQuan)) {
$warnMsg[] = 'Invalid order quantity found!';
} }
if ($coilNo == null || $coilNo == '') { if ($coilNo == null || $coilNo == '') {
$coilNo = '0'; $coilNo = '0';
@@ -154,70 +142,46 @@ 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 {
$warnMsg[] = 'Invalid rework status found';
} }
if (! empty($warnMsg)) { if ($createdBy == null || $createdBy == '') {
throw new RowImportFailedException(implode(', ', $warnMsg)); $createdBy = Filament::auth()->user()?->name;
$updatedBy = $createdBy;
} }
$plant = Plant::where('code', $plantCod)->first(); if (Str::length($plantCod) < 4 || ! is_numeric($plantCod) || ! preg_match('/^[1-9]\d{3,}$/', $plantCod)) {
if (! $plant) { $warnMsg[] = 'Invalid plant code found';
$warnMsg[] = 'Plant not found!';
} else { } else {
$plantId = $plant->id; $plant = Plant::where('code', $plantCod)->first();
if (! $plant) {
$warnMsg[] = 'Plant not found';
} else {
$plantId = $plant->id;
}
} }
// TESTING PURPOSE ONLY - TO CHECK DUPLICATE PROCESS ORDER WITH SAME COIL NUMBER FOR THE SAME PLANT if (Str::length($iCode) < 6 || ! ctype_alnum($iCode)) {
// $existing = ProcessOrder::where('plant_id', $plantId)->where('process_order', $processOrder)->first(); $warnMsg[] = 'Invalid item code found';
// if ($existing) {
// $existing = ProcessOrder::where('plant_id', $plantId)->where('process_order', $processOrder)->where('coil_number', $coilNo)->first();
// if ($existing) {
// $warnMsg[] = 'Process Order with coil number already exists!';
// } else {
// $warnMsg[] = 'Process order already exists!';
// }
// } else {
// $warnMsg[] = 'New process order found!';
// }
// if (! empty($warnMsg)) {
// throw new RowImportFailedException(implode(', ', $warnMsg));
// }
$itemCode = Item::where('code', $iCode)->first();
if (! $itemCode) {
$warnMsg[] = 'Item code not found!';
} else { } else {
if ($plantId) { $itemCode = Item::where('code', $iCode)->first();
$itemCode = Item::where('code', $iCode)->where('plant_id', $plantId)->first(); if (! $itemCode) {
if (! $itemCode) { $warnMsg[] = 'Item code not found';
$warnMsg[] = 'Item code not found for the given plant!'; } else {
} else { if ($plantId) {
$itemId = $itemCode->id; $itemCode = Item::where('code', $iCode)->where('plant_id', $plantId)->first();
if (! $itemCode) {
$warnMsg[] = 'Item code not found for the given plant';
} else {
$itemId = $itemCode->id;
}
} }
} }
} }
$lineExists = Line::where('name', $lineNam)->first(); if ($plant && $itemCode && $processOrder != '') {
if (! $lineExists) {
$warnMsg[] = 'Line name not found!';
} else {
if ($plantId) {
$lineAgainstPlant = Line::where('name', $lineNam)->where('plant_id', $plantId)->first();
if (! $lineAgainstPlant) {
$warnMsg[] = 'Line name not found for the given plant!';
} else {
$lineId = $lineAgainstPlant->id;
}
}
}
if ($plantId && $itemCode && $lineId && $processOrder != '') {
$existingOrder = ProcessOrder::where('plant_id', $plantId) $existingOrder = ProcessOrder::where('plant_id', $plantId)
->where('process_order', $processOrder) ->where('process_order', $processOrder)
->first(); ->first();
@@ -227,23 +191,46 @@ class ProcessOrderImporter extends Importer
} }
} }
// $user = User::where('name', $this->data['created_by'])->first(); if ($lineName != null && $lineName != '') {
// if (! $user) { $lineExists = Line::where('name', $lineName)->first();
// $warnMsg[] = 'User not found!'; if (! $lineExists) {
// } $warnMsg[] = 'Line name not found';
} else {
if ($plantId) {
$lineAgainstPlant = Line::where('name', $lineName)->where('plant_id', $plantId)->first();
if (! $lineAgainstPlant) {
$warnMsg[] = 'Line name not found for the given plant';
} else {
$lineId = $lineAgainstPlant->id;
}
}
}
} else {
$lineId = null;
}
if (! $createdBy) { if ($createdBy != null && $createdBy != '') {
$createdBy = Filament::auth()->user()->name; if ($plantId) {
$updatedBy = Filament::auth()->user()->name; $user = User::where('name', $createdBy)->first();
} elseif (! $updatedBy) {
$updatedBy = Filament::auth()->user()->name; $userPlant = User::where('name', $createdBy)->where('plant_id', $plantId)->first();
if (! $user) {
$warnMsg[] = 'Created By user name not found!';
} 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)) {
throw new RowImportFailedException(implode(', ', $warnMsg)); throw new RowImportFailedException(implode(', ', $warnMsg));
} }
if ($coilNo != null && $coilNo != '' && $scrapQuan && $reworkStatus && $recQuan && $createdAt && $createdBy && $updatedAt && $updatedBy && Filament::auth()->user()->hasRole('Super Admin')) { if ($lineName != null && $lineName != '') {
$existingCoil = ProcessOrder::where('plant_id', $plantId) $existingCoil = ProcessOrder::where('plant_id', $plantId)
->where('process_order', $processOrder) ->where('process_order', $processOrder)
->where('line_id', $lineId) ->where('line_id', $lineId)
@@ -286,17 +273,16 @@ class ProcessOrderImporter extends Importer
'updated_at' => $updatedAt, 'updated_at' => $updatedAt,
]); ]);
} }
} else {
$coilNo = '0'; } elseif ($lineName == null || $lineName == '') {
$existing = ProcessOrder::where('plant_id', $plantId) $existing = ProcessOrder::where('plant_id', $plantId)
->where('process_order', $processOrder) ->where('process_order', $processOrder)
// ->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',
@@ -311,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,
@@ -320,32 +306,26 @@ 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->process_order == $processOrder) { ProcessOrder::where('plant_id', $plantId)
throw new RowImportFailedException('Process order already exist for the given plant!'); ->where('process_order', $processOrder)
} elseif ($existing->rework_status == 1 && $reworkStatus == 0) { ->where('coil_number', $coilNo)
throw new RowImportFailedException('Rework coil number already exist for the given Plant and Process Order!'); ->update([
} else { // 'order_quantity' => $orderQty,
ProcessOrder::where('plant_id', $plantId) 'received_quantity' => $recQuan,
->where('process_order', $processOrder) 'scrap_quantity' => $scrapQuan,
->where('coil_number', $coilNo) // 'sfg_number' => $sfgNo,
->update([ // 'machine_name' => $machineId,
// 'order_quantity' => $orderQty, 'rework_status' => $reworkStatus,
'received_quantity' => $recQuan, 'updated_by' => $updatedBy,
'scrap_quantity' => $scrapQuan, 'updated_at' => $updatedAt,
// 'sfg_number' => $sfgNo, ]);
// 'machine_name' => $machineId,
'rework_status' => $reworkStatus,
'updated_by' => $updatedBy,
// 'updated_at' => $updatedAt,
]);
}
} }
} }

View File

@@ -24,77 +24,75 @@ class ProductCharacteristicsMasterImporter extends Importer
{ {
return [ return [
ImportColumn::make('plant') ImportColumn::make('plant')
->label('PLANT CODE')
->requiredMapping() ->requiredMapping()
->exampleHeader('PLANT CODE') ->exampleHeader('Plant Code')
->example(['1000', '1000']) ->example('1000')
->label('Plant Code')
->relationship(resolveUsing: 'code') ->relationship(resolveUsing: 'code')
->rules(['required']), ->rules(['required']),
ImportColumn::make('item') ImportColumn::make('item')
->label('ITEM CODE')
->requiredMapping() ->requiredMapping()
->exampleHeader('ITEM CODE') ->exampleHeader('Item Code')
->example(['123456', '123456']) ->example('630214')
->label('Item Code')
->relationship(resolveUsing: 'code') ->relationship(resolveUsing: 'code')
->rules(['required']), ->rules(['required']),
ImportColumn::make('line') ImportColumn::make('line')
->label('LINE NAME')
->requiredMapping() ->requiredMapping()
->exampleHeader('LINE NAME') ->exampleHeader('Line Name')
->example(['4 inch pump line', '4 inch pump line']) ->example('4 inch pump line')
->label('Line Name')
->relationship(resolveUsing: 'name') ->relationship(resolveUsing: 'name')
->rules(['required']), ->rules(['required']),
ImportColumn::make('work_group_master_id') ImportColumn::make('work_group_master_id')
->label('GROUP WORK CENTER') ->label('Group Work Center')
->requiredMapping() ->requiredMapping()
->exampleHeader('GROUP WORK CENTER') ->exampleHeader('Group Work Center')
->example(['RMGSTR01', 'RMGSTR01']) ->example('RMGCGABC')
->relationship(resolveUsing: 'name') ->relationship(resolveUsing: 'name')
->rules(['required']), ->rules(['required']),
ImportColumn::make('machine') ImportColumn::make('machine')
->label('WORK CENTER')
->requiredMapping() ->requiredMapping()
->exampleHeader('WORK CENTER') ->exampleHeader('Work Center')
->example(['RMISTR01', 'RMISTR02']) ->example('RMGCE001')
->label('Work Center')
->relationship(resolveUsing: 'work_center') ->relationship(resolveUsing: 'work_center')
->rules(['required']), ->rules(['required']),
ImportColumn::make('characteristics_type') ImportColumn::make('characteristics_type')
->label('CHARACTERISTICS TYPE') ->exampleHeader('Characteristics Type')
->requiredMapping() ->example('Process or Product')
->exampleHeader('CHARACTERISTICS TYPE') ->label('Characteristics Type')
->example(['Product', 'Process'])
->rules(['required']), ->rules(['required']),
ImportColumn::make('name') ImportColumn::make('name')
->label('CHARACTERISTICS NAME') ->exampleHeader('Characteristics Name')
->requiredMapping() ->example('Body')
->exampleHeader('CHARACTERISTICS NAME') ->label('Characteristics Name')
->example(['TEST01', 'TEST02'])
->rules(['required']), ->rules(['required']),
ImportColumn::make('inspection_type') ImportColumn::make('inspection_type')
->label('INSPECTION TYPE') ->exampleHeader('Inspection Type')
->requiredMapping() ->example('Visual or Value')
->exampleHeader('INSPECTION TYPE') ->label('Inspection Type')
->example(['Value', 'Visual'])
->rules(['required']), ->rules(['required']),
ImportColumn::make('lower') ImportColumn::make('lower')
->label('LOWER') ->exampleHeader('Lower')
->requiredMapping() ->example('0')
->exampleHeader('LOWER') ->label('Lower')
->example(['5', '0']) ->rules(['numeric']),
->rules(['required']),
ImportColumn::make('middle') ImportColumn::make('middle')
->label('MIDDLE') ->exampleHeader('Middle')
->requiredMapping() ->example('1')
->exampleHeader('MIDDLE') ->label('Middle')
->example(['10', '0']) ->numeric()
->rules(['required']), ->rules(['numeric']),
ImportColumn::make('upper') ImportColumn::make('upper')
->label('UPPER') ->exampleHeader('Upper')
->requiredMapping() ->example('2')
->exampleHeader('UPPER') ->label('Upper')
->example(['15', '0']) ->rules(['numeric']),
->rules(['required']), ImportColumn::make('created_by')
// ImportColumn::make('created_by'), ->exampleHeader('Created By')
->example('Admin')
->label('Created By'),
// ImportColumn::make('updated_by'), // ImportColumn::make('updated_by'),
]; ];
@@ -104,174 +102,117 @@ class ProductCharacteristicsMasterImporter extends Importer
{ {
$warnMsg = []; $warnMsg = [];
$plantCod = trim($this->data['plant']) ?? null; $plantCod = $this->data['plant'];
$itemCod = trim($this->data['item']) ?? null; $updatedBy = Filament::auth()->user()->name; // ?? 'Admin'
$lineNam = trim($this->data['line']) ?? null; $lower = null;
$groupWorkCenter = trim($this->data['work_group_master_id']) ?? null; $middle = null;
$workCenter = trim($this->data['machine']) ?? null; $upper = null;
$charTyp = trim($this->data['characteristics_type']) ?? null;
$charNam = trim($this->data['name']) ?? null;
$inspectTyp = trim($this->data['inspection_type']) ?? null;
$lower = trim($this->data['lower']) ?? null;
$middle = trim($this->data['middle']) ?? null;
$upper = trim($this->data['upper']) ?? null;
$createdBy = Filament::auth()->user()->name;
$updatedBy = null;
$plantId = null; $plantId = null;
$itemId = null; $name = trim($this->data['name']);
$lineId = null; if (Str::length($plantCod) < 4 || ! is_numeric($plantCod) || ! preg_match('/^[1-9]\d{3,}$/', $plantCod)) {
$workGroupMasterId = null; $warnMsg[] = 'Invalid plant code found';
$machineId = null;
if ($plantCod == null || $plantCod == '') {
$warnMsg[] = "Plant code can't be empty!";
} elseif (Str::length($plantCod) < 4 || ! is_numeric($plantCod) || ! preg_match('/^[1-9]\d{3,}$/', $plantCod)) {
$warnMsg[] = 'Invalid plant code found!';
}
if ($itemCod == null || $itemCod == '') {
$warnMsg[] = "Item code can't be empty!";
} elseif (Str::length($itemCod) < 6 || ! ctype_alnum($itemCod)) {
$warnMsg[] = 'Invalid item code found!';
}
if ($lineNam == null || $lineNam == '') {
$warnMsg[] = "Line name can't be empty!";
}
if ($groupWorkCenter == null || $groupWorkCenter == '') {
$warnMsg[] = "Group work center can't be empty!";
}
if ($workCenter == null || $workCenter == '') {
$warnMsg[] = "Work center can't be empty!";
}
if ($charTyp != 'Product' && $charTyp != 'Process') {
$warnMsg[] = "Characteristics type must be either 'Product' or 'Process'!";
}
if ($charNam == null || $charNam == '') {
$warnMsg[] = "Characteristics name can't be empty!";
}
if ($inspectTyp != 'Visual' && $inspectTyp != 'Value') {
$warnMsg[] = "Inspection type must be either 'Visual' or 'Value'!";
}
if ($lower == null || $lower == '' || $middle == null || $middle == '' || $upper == null || $upper == '' || $upper == 0 || $upper == '0') {
$lower = 0;
$middle = 0;
$upper = 0;
}
if (! empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
}
$plant = Plant::where('code', $plantCod)->first();
if (! $plant) {
$warnMsg[] = 'Plant code not found!';
} else { } else {
$plantId = $plant->id; $plant = Plant::where('code', $plantCod)->first();
$itemExists = Item::where('code', $itemCod)->first(); if (! $plant) {
if (! $itemExists) { $warnMsg[] = 'Plant not found';
$warnMsg[] = 'Item code not found!';
} else { } else {
$itemAgainstPlant = Item::where('code', $itemCod)->where('plant_id', $plantId)->first(); $plantId = $plant->id;
$itemExists = Item::where('code', $this->data['item'])->first();
if (! $itemExists) {
$warnMsg[] = 'Item not found';
}
$itemAgainstPlant = Item::where('code', $this->data['item'])
->where('plant_id', $plantId)
->first();
if (! $itemAgainstPlant) { if (! $itemAgainstPlant) {
$warnMsg[] = 'Item code not found for the given plant!'; $warnMsg[] = 'Item code not found for the given plant';
} else { } else {
$itemId = $itemAgainstPlant->id; $itemId = $itemAgainstPlant->id;
} }
}
$lineExists = Line::where('name', $lineNam)->first(); $lineExists = Line::where('name', $this->data['line'])->first();
if (! $lineExists) { if (! $lineExists) {
$warnMsg[] = 'Line name not found!'; $warnMsg[] = 'Line not found';
} else { }
$lineAgainstPlant = Line::where('name', $lineNam)->where('plant_id', $plantId)->first();
$lineAgainstPlant = Line::where('name', $this->data['line'])
->where('plant_id', $plantId)
->first();
if (! $lineAgainstPlant) { if (! $lineAgainstPlant) {
$warnMsg[] = 'Line name not found for the given plant!'; $warnMsg[] = 'Line not found for the given plant';
} else { } else {
$lineId = $lineAgainstPlant->id; $LineId = $lineAgainstPlant->id;
}
$WorkgroupMaster = WorkGroupMaster::where('name', $groupWorkCenter)->first(); $WorkgroupMaster = WorkGroupMaster::where('name', $this->data['work_group_master_id'])->where('plant_id', $plantId)->first();
if (! $WorkgroupMaster) { if (! $WorkgroupMaster) {
$warnMsg[] = 'Group work center not found!'; $warnMsg[] = 'Work Group Master value not found';
} else { } else {
$WorkgroupMaster = WorkGroupMaster::where('name', $groupWorkCenter)->where('plant_id', $plantId)->first();
if (! $WorkgroupMaster) {
$warnMsg[] = 'Group work center not found for the given plant!';
} else {
$workGroupMasterId = $WorkgroupMaster->id;
// 2. Now check if this WorkGroupMaster id exists in ANY of the 10 columns $workGroupMasterId = $WorkgroupMaster->id;
$existsInLine = Line::where('plant_id', $plantId)->where('id', $lineId)
->where(function ($q) use ($workGroupMasterId) {
for ($i = 1; $i <= 10; $i++) {
$q->orWhere("work_group{$i}_id", $workGroupMasterId);
}
})
->exists();
if (! $existsInLine) { // 2. Now check if this WorkGroupMaster id exists in ANY of the 10 columns
$workGroupMasterId = null; $existsInLine = Line::where('plant_id', $plantId)
$warnMsg[] = "Group work center '{$WorkgroupMaster->name}' is not mapped for the given line!"; ->where(function ($q) use ($workGroupMasterId) {
} else { for ($i = 1; $i <= 10; $i++) {
$workGroupMasterId = $WorkgroupMaster->id; $q->orWhere("work_group{$i}_id", $workGroupMasterId);
$machine = Machine::where('work_center', $workCenter)->first();
if (! $machine) {
$warnMsg[] = 'Work center not found!';
} else {
$machine = Machine::where('work_center', $workCenter)->where('plant_id', $plantId)->first();
if (! $machine) {
$warnMsg[] = 'Work center not found for the given plant!';
} else {
$machine = Machine::where('work_center', $workCenter)->where('plant_id', $plantId)->where('line_id', $lineId)->first();
if (! $machine) {
$warnMsg[] = "Work center '{$workCenter}' is not mapped for the given line!";
} else {
$machine = Machine::where('work_center', $workCenter)->where('plant_id', $plantId)->where('line_id', $lineId)->where('work_group_master_id', $workGroupMasterId)->first();
if (! $machine) {
$warnMsg[] = "Work center '{$workCenter}' is not mapped for the given group work center!";
} else {
$machineId = $machine->id;
}
}
}
}
} }
} })
->exists();
if (! $existsInLine) {
$warnMsg[] = "Work Group Master '{$WorkgroupMaster->name}' is not mapped to any line in this plant";
} else {
$workGroupMasterId = $WorkgroupMaster->id;
} }
} }
}
$user = User::where('name', $createdBy)->first(); $machine = Machine::where('work_center', $this->data['machine'])->first();
if (! $user) { if (! $machine) {
$warnMsg[] = 'Created by user not found!'; $warnMsg[] = 'Work Center not found';
} else {
$updatedBy = $createdBy;
}
if ($inspectTyp == 'Value') {
if (is_null($upper) || is_null($lower) || is_null($middle)) {
$warnMsg[] = 'Upper, Lower, and Middle values are required.';
} elseif (! is_numeric($upper) || ! is_numeric($lower) || ! is_numeric($middle)) {
$warnMsg[] = 'Upper, Lower, and Middle values must be numeric.';
} else { } else {
$lower = (float) $lower; $machineId = $machine->id;
$middle = (float) $middle; }
$upper = (float) $upper;
if ($lower == $upper) { $machineAgainstPlant = Machine::where('work_center', $this->data['machine'])
if ($lower != $middle) { ->where('plant_id', $plantId)
$warnMsg[] = "For 'Value' inspection type, values must satisfy: Lower = Middle = Upper."; ->first();
}
} elseif (! ($lower < $middle && $middle < $upper)) { if (! $machineAgainstPlant) {
$warnMsg[] = "For 'Value' inspection type, values must satisfy: Lower < Middle < Upper."; $warnMsg[] = 'Work Center not found for the given plant';
} else {
$machineId = $machineAgainstPlant->id;
}
if ($name == null || $name == '') {
$warnMsg[] = "Name can't be empty";
}
$user = User::where('name', $this->data['created_by'])->first();
if (! $user) {
$warnMsg[] = 'Operator ID not found';
}
$updatedBy = Filament::auth()->user()->name; // ?? 'Admin'
if (! $updatedBy) {
$warnMsg[] = 'Invalid updated by user name found';
}
if (($this->data['inspection_type'] ?? null) == 'Value') {
$lower = $this->data['lower'] ?? null;
$middle = $this->data['middle'] ?? null;
$upper = $this->data['upper'] ?? null;
if (is_null($upper) || is_null($lower) || is_null($middle)) {
$warnMsg[] = "For 'Value' inspection type, Upper, Lower, and Middle values are required.";
} elseif (! is_numeric($upper) || ! is_numeric($lower) || ! is_numeric($middle)) {
$warnMsg[] = 'Upper, Lower, and Middle values must be numeric.';
} elseif (! ($lower <= $middle && $middle <= $upper)) {
$warnMsg[] = "For 'Value' inspection type, values must satisfy: Lower ≤ Middle ≤ Upper.";
} }
} }
} else {
$lower = 0;
$middle = 0;
$upper = 0;
} }
} }
@@ -279,31 +220,49 @@ class ProductCharacteristicsMasterImporter extends Importer
throw new RowImportFailedException(implode(', ', $warnMsg)); throw new RowImportFailedException(implode(', ', $warnMsg));
} }
if ($machineId) { // $record = ProductCharacteristicsMaster::firstOrNew([
$record = ProductCharacteristicsMaster::where('plant_id', $plantId)->where('line_id', $lineId)->where('work_group_master_id', $workGroupMasterId)->where('machine_id', $machineId)->where('item_id', $itemId)->where('characteristics_type', $charTyp)->where('name', $charNam)->first(); // 'plant_id' => $plantId,
if ($record) { // 'item_id' => $itemId,
$createdBy = $record->created_by ?? $createdBy; // 'line_id' => $LineId,
} // 'work_group_master_id' => $workGroupMasterId,
// 'machine_id' => $machineId,
// ]);
// // If record is new, fill all fields
// if (! $record->exists) {
// $record->name = $name;
// $record->characteristics_type = $this->data['characteristics_type'];
// $record->inspection_type = $this->data['inspection_type'];
// $record->lower = $this->data['lower'] ?? null;
// $record->upper = $this->data['upper'] ?? null;
// $record->middle = $this->data['middle'] ?? null;
// $record->created_by = $this->data['created_by'] ?? null;
// $record->updated_by = $updatedBy ?? null;
// } else {
// // Record exists → update only updated_by and updated_at
// $record->updated_by = $updatedBy ?? null;
// $record->touch();
// }
// $record->save();
ProductCharacteristicsMaster::updateOrCreate( ProductCharacteristicsMaster::updateOrCreate(
[ [
'plant_id' => $plantId, 'plant_id' => $plantId,
'item_id' => $itemId, 'item_id' => $itemId,
'line_id' => $lineId, 'line_id' => $LineId,
'work_group_master_id' => $workGroupMasterId, 'work_group_master_id' => $workGroupMasterId,
'machine_id' => $machineId, 'machine_id' => $machineId,
'characteristics_type' => $charTyp, ],
'name' => $charNam, [
], 'name' => $name,
[ 'characteristics_type' => $this->data['characteristics_type'],
'inspection_type' => $inspectTyp, 'inspection_type' => $this->data['inspection_type'],
'lower' => $lower, 'lower' => $lower,
'middle' => $middle, 'middle' => $middle,
'upper' => $upper, 'upper' => $upper,
'created_by' => $createdBy, // 'created_by' => user ?? $this->data['created_by'],
'updated_by' => $updatedBy, 'created_by' => $this->data['created_by'] ?? null,
]); 'updated_by' => $updatedBy ?? null,
} ]);
return null; return null;

View File

@@ -158,20 +158,8 @@ class ProductionPlanImporter extends Importer
if ($productionPlan) { if ($productionPlan) {
$recordDate = now();
$month = $recordDate->month;
$year = $recordDate->year;
$previousRecord = ProductionPlan::where('plant_id', $plant->id)
->whereMonth('created_at', $month)
->whereYear('created_at', $year)
->first();
$workingDays = $previousRecord?->working_days ?? null;
$productionPlan->update([ $productionPlan->update([
'plan_quantity' => $this->data['plan_quantity'], 'plan_quantity' => $this->data['plan_quantity'],
'working_days' => $workingDays,
'operator_id' => $operatorName, 'operator_id' => $operatorName,
]); ]);
$productionPlan->save(); $productionPlan->save();
@@ -180,24 +168,12 @@ class ProductionPlanImporter extends Importer
} }
} }
$recordDate = now();
$month = $recordDate->month;
$year = $recordDate->year;
$previousRecord = ProductionPlan::where('plant_id', $plant->id)
->whereMonth('created_at', $month)
->whereYear('created_at', $year)
->first();
$workingDays = $previousRecord?->working_days ?? null;
ProductionPlan::updateOrCreate([ ProductionPlan::updateOrCreate([
'plant_id' => $plant->id, 'plant_id' => $plant->id,
'line_id' => $line->id, 'line_id' => $line->id,
'item_id' => $itemAgaPlant->id, 'item_id' => $itemAgaPlant->id,
// 'shift_id' => $shift->id, // 'shift_id' => $shift->id,
'plan_quantity' => $this->data['plan_quantity'], 'plan_quantity' => $this->data['plan_quantity'],
'working_days' => $workingDays,
'created_at' =>now(), 'created_at' =>now(),
'updated_at' => now(), 'updated_at' => now(),
'operator_id' => $operatorName, 'operator_id' => $operatorName,

View File

@@ -163,15 +163,11 @@ class ProductionQuantityPage extends Page implements HasForms
return $form return $form
->statePath('filters') ->statePath('filters')
->schema([ ->schema([
Select::make('plant_id') Select::make('plant_id')
// ->options(Plant::pluck('name', 'id')) ->options(Plant::pluck('name', 'id'))
->label('Plant') ->label('Plant')
->reactive() ->reactive()
->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() ->required()
->columnSpan(1) ->columnSpan(1)
->default(function () { ->default(function () {
@@ -352,8 +348,7 @@ class ProductionQuantityPage extends Page implements HasForms
} }
}) })
->extraAttributes(fn ($get) => [ ->extraAttributes(fn ($get) => [
'id' => 'production_order', 'id' => 'scan_locator_no',
'wire:keydown.enter' => '$dispatch("focus-qr-input")',
'class' => $get('productionError') ? 'border-red-500' : '', 'class' => $get('productionError') ? 'border-red-500' : '',
]) ])
->hint(fn ($get) => $get('productionError') ? $get('productionError') : null) ->hint(fn ($get) => $get('productionError') ? $get('productionError') : null)
@@ -424,13 +419,13 @@ class ProductionQuantityPage extends Page implements HasForms
$machineAgaPlant = Machine::where('plant_id', $plantId)->where('work_center', $this->mNam)->first(); $machineAgaPlant = Machine::where('plant_id', $plantId)->where('work_center', $this->mNam)->first();
if (! $machinenotAgaPlant) { if (!$machinenotAgaPlant) {
Notification::make() Notification::make()
->title('Unknown WorkCenter') ->title('Unknown WorkCenter')
->body('Work Center not found') ->body("Work Center not found")
->danger() ->danger()
->send(); ->send();
$this->form->fill([ $this->form->fill([
'plant_id' => $this->pId, 'plant_id' => $this->pId,
'machine_id' => $this->mNam, 'machine_id' => $this->mNam,
'block_name' => $this->bNam, 'block_name' => $this->bNam,
@@ -445,9 +440,9 @@ class ProductionQuantityPage extends Page implements HasForms
// 'operator_id'=> $operatorName, // 'operator_id'=> $operatorName,
'recent_qr' => $this->recQr, 'recent_qr' => $this->recQr,
]); ]);
return; return;
} elseif (! $machineAgaPlant) { }
else if (!$machineAgaPlant) {
Notification::make() Notification::make()
->title('Unknown WorkCenter') ->title('Unknown WorkCenter')
->body("Work Center not found against plant code $PlaCo") ->body("Work Center not found against plant code $PlaCo")
@@ -469,20 +464,20 @@ class ProductionQuantityPage extends Page implements HasForms
// 'operator_id'=> $operatorName, // 'operator_id'=> $operatorName,
'recent_qr' => $this->recQr, 'recent_qr' => $this->recQr,
]); ]);
return; return;
} }
$rec = ProductionQuantity::where('plant_id', $plantId)->where('machine_id', $machineAgaPlant->id)->latest()->first(); $rec = ProductionQuantity::where('plant_id', $plantId)->where('machine_id', $machineAgaPlant->id)->latest()->first();
if ($rec) { if($rec)
{
$item = Item::where('id', $rec->item_id)->where('plant_id', $plantId)->first(); $item = Item::where('id', $rec->item_id)->where('plant_id', $plantId)->first();
$itemCode = $item?->code ?? ''; $itemCode = $item?->code ?? '';
$serialNo = $rec->serial_number ?? ''; $serialNo = $rec->serial_number ?? '';
$this->recQr = $itemCode.' | '.$serialNo; $this->recQr = $itemCode . ' | ' . $serialNo;
} }
@@ -509,11 +504,12 @@ class ProductionQuantityPage extends Page implements HasForms
// 'operator_id'=> $operatorName, // 'operator_id'=> $operatorName,
'recent_qr' => $this->recQr, 'recent_qr' => $this->recQr,
]); ]);
$this->dispatch('focus-production-order');
$this->triggerChartUpdate(); $this->triggerChartUpdate();
} }
} }
// Method to process the value when Enter is pressed
#[On('handleQrScan')] #[On('handleQrScan')]
public function handleQrScan($value) public function handleQrScan($value)
{ {
@@ -571,6 +567,7 @@ class ProductionQuantityPage extends Page implements HasForms
->body('Scan the valid QR code.<br>(Ex: Item_Code|Serial_Number )') ->body('Scan the valid QR code.<br>(Ex: Item_Code|Serial_Number )')
->danger() ->danger()
->send(); ->send();
return; return;
} else { } else {
if (! $this->pId) { if (! $this->pId) {
@@ -1128,6 +1125,7 @@ class ProductionQuantityPage extends Page implements HasForms
$iCode = trim($splits[0]); $iCode = trim($splits[0]);
$sNumber = isset($splits[1]) ? trim($splits[1]) : null; $sNumber = isset($splits[1]) ? trim($splits[1]) : null;
if (! ctype_alnum($iCode)) { if (! ctype_alnum($iCode)) {
$this->form->fill([ $this->form->fill([

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)
]); ]);
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1,306 +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';
protected static ?string $navigationGroup = 'Master Packing';
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

@@ -3,7 +3,6 @@
namespace App\Filament\Resources; namespace App\Filament\Resources;
use App\Filament\Exports\CharacteristicApproverMasterExporter; use App\Filament\Exports\CharacteristicApproverMasterExporter;
use App\Filament\Imports\CharacteristicApproverMasterImporter;
use App\Filament\Resources\CharacteristicApproverMasterResource\Pages; use App\Filament\Resources\CharacteristicApproverMasterResource\Pages;
use App\Models\CharacteristicApproverMaster; use App\Models\CharacteristicApproverMaster;
use App\Models\Machine; use App\Models\Machine;
@@ -399,13 +398,13 @@ class CharacteristicApproverMasterResource extends Resource
]), ]),
]) ])
->headerActions([ ->headerActions([
ImportAction::make() // ImportAction::make()
->label('Import Characteristics Approver Master') // ->label('Import Characteristics Approver Master')
->color('warning') // ->color('warning')
->importer(CharacteristicApproverMasterImporter::class) // ->importer(CharacteristicApproverMasterImporter::class)
->visible(function () { // ->visible(function () {
return Filament::auth()->user()->can('view import characteristic approver master'); // return Filament::auth()->user()->can('view import characteristic approver master');
}), // }),
ExportAction::make() ExportAction::make()
->label('Export Characteristics Approver Master') ->label('Export Characteristics Approver Master')
->color('warning') ->color('warning')

View File

@@ -17,7 +17,6 @@ use Filament\Forms\Components\DateTimePicker;
use Filament\Forms\Components\Select; use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput; use Filament\Forms\Components\TextInput;
use Filament\Forms\Form; use Filament\Forms\Form;
use Filament\Forms\Get;
use Filament\Resources\Resource; use Filament\Resources\Resource;
use Filament\Tables; use Filament\Tables;
use Filament\Tables\Actions\ExportAction; use Filament\Tables\Actions\ExportAction;
@@ -42,22 +41,20 @@ class CharacteristicValueResource extends Resource
return $form return $form
->schema([ ->schema([
Forms\Components\Select::make('plant_id') Forms\Components\Select::make('plant_id')
->label('Plant Name') ->label('Plant')
->nullable()
->searchable() ->searchable()
->reactive()
->relationship('plant', 'name') ->relationship('plant', 'name')
->options(function (callable $get) { ->options(function (callable $get) {
$userHas = Filament::auth()->user()->plant_id; $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(); 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;
return ($userHas && strlen($userHas) > 0) ? $userHas : optional(CharacteristicValue::latest()->first())->plant_id; return ($userHas && strlen($userHas) > 0) ? $userHas : optional(CharacteristicValue::latest()->first())->plant_id;
}) })
->reactive()
->afterStateUpdated(function ($state, $set, callable $get) { ->afterStateUpdated(function ($state, $set, callable $get) {
$plantId = $get('plant_id'); $plantId = $get('plant_id');
$set('line_id', null); $set('line_id', null);
@@ -79,10 +76,8 @@ class CharacteristicValueResource extends Resource
->hintColor('danger') ->hintColor('danger')
->required(), ->required(),
Forms\Components\Select::make('line_id') Forms\Components\Select::make('line_id')
->label('Line Name') ->label('Line')
->nullable()
->searchable() ->searchable()
->reactive()
->options(function (callable $get) { ->options(function (callable $get) {
if (! $get('plant_id')) { if (! $get('plant_id')) {
return []; return [];
@@ -92,7 +87,6 @@ class CharacteristicValueResource extends Resource
->pluck('name', 'id') ->pluck('name', 'id')
->toArray(); ->toArray();
}) })
->disabled(fn (Get $get) => ! empty($get('id')))
->afterStateUpdated(function ($state, $set, callable $get) { ->afterStateUpdated(function ($state, $set, callable $get) {
$plantId = $get('plant_id'); $plantId = $get('plant_id');
$set('item_id', null); $set('item_id', null);
@@ -107,12 +101,11 @@ class CharacteristicValueResource extends Resource
$set('poPlantError', 'Please select a plant first.'); $set('poPlantError', 'Please select a plant first.');
} }
}) })
->reactive()
->required(), ->required(),
Forms\Components\Select::make('item_id') Forms\Components\Select::make('item_id')
->label('Item Code') ->label('Item')
->nullable()
->searchable() ->searchable()
->reactive()
->options(function (callable $get) { ->options(function (callable $get) {
if (! $get('plant_id') || ! $get('line_id')) { if (! $get('plant_id') || ! $get('line_id')) {
return []; return [];
@@ -122,7 +115,6 @@ class CharacteristicValueResource extends Resource
->pluck('code', 'id') ->pluck('code', 'id')
->toArray(); ->toArray();
}) })
->disabled(fn (Get $get) => ! empty($get('id')))
->afterStateUpdated(function ($state, $set, callable $get) { ->afterStateUpdated(function ($state, $set, callable $get) {
$plantId = $get('plant_id'); $plantId = $get('plant_id');
$set('machine_id', null); $set('machine_id', null);
@@ -136,12 +128,11 @@ class CharacteristicValueResource extends Resource
$set('poPlantError', 'Please select a plant first.'); $set('poPlantError', 'Please select a plant first.');
} }
}) })
->reactive()
->required(), ->required(),
Forms\Components\Select::make('machine_id') Forms\Components\Select::make('machine_id')
->label('Work Center') ->label('Machine')
->nullable()
->searchable() ->searchable()
->reactive()
->options(function (callable $get) { ->options(function (callable $get) {
if (! $get('plant_id') || ! $get('line_id') || ! $get('item_id')) { if (! $get('plant_id') || ! $get('line_id') || ! $get('item_id')) {
return []; return [];
@@ -152,7 +143,6 @@ class CharacteristicValueResource extends Resource
->pluck('work_center', 'id') ->pluck('work_center', 'id')
->toArray(); ->toArray();
}) })
->disabled(fn (Get $get) => ! empty($get('id')))
->afterStateUpdated(function ($state, $set, callable $get) { ->afterStateUpdated(function ($state, $set, callable $get) {
$plantId = $get('plant_id'); $plantId = $get('plant_id');
$set('process_order', null); $set('process_order', null);
@@ -165,6 +155,7 @@ class CharacteristicValueResource extends Resource
$set('poPlantError', 'Please select a plant first.'); $set('poPlantError', 'Please select a plant first.');
} }
}) })
->reactive()
->required(), ->required(),
Forms\Components\TextInput::make('process_order') Forms\Components\TextInput::make('process_order')
->label('Process Order') ->label('Process Order')
@@ -334,12 +325,12 @@ class CharacteristicValueResource extends Resource
return ($currentPage - 1) * $perPage + $rowLoop->iteration; return ($currentPage - 1) * $perPage + $rowLoop->iteration;
}), }),
Tables\Columns\TextColumn::make('plant.name') Tables\Columns\TextColumn::make('plant.name')
->label('Plant Name') ->label('Plant')
->searchable() ->searchable()
->alignCenter() ->alignCenter()
->sortable(), ->sortable(),
Tables\Columns\TextColumn::make('line.name') Tables\Columns\TextColumn::make('line.name')
->label('Line Name') ->label('Line')
->searchable() ->searchable()
->alignCenter() ->alignCenter()
->sortable(), ->sortable(),
@@ -348,13 +339,8 @@ class CharacteristicValueResource extends Resource
->searchable() ->searchable()
->alignCenter() ->alignCenter()
->sortable(), ->sortable(),
Tables\Columns\TextColumn::make('item.description')
->label('Item Description')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('machine.work_center') Tables\Columns\TextColumn::make('machine.work_center')
->label('Work Center') ->label('Machine')
->searchable() ->searchable()
->alignCenter() ->alignCenter()
->sortable(), ->sortable(),
@@ -436,32 +422,20 @@ class CharacteristicValueResource extends Resource
->label('Advanced Filters') ->label('Advanced Filters')
->form([ ->form([
Select::make('Plant') Select::make('Plant')
->label('Search by Plant Name') ->label('Select Plant')
->nullable() ->nullable()
->searchable()
->reactive()
->options(function (callable $get) { ->options(function (callable $get) {
$userHas = Filament::auth()->user()->plant_id; $userHas = Filament::auth()->user()->plant_id;
if ($userHas && strlen($userHas) > 0) { return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray();
return Plant::where('id', $userHas)->pluck('name', 'id')->toArray();
} else {
return Plant::whereHas('characteristicValues', function ($query) {
$query->whereNotNull('id');
})->orderBy('code')->pluck('name', 'id');
}
// return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray();
}) })
->reactive()
->afterStateUpdated(function ($state, callable $set, callable $get) { ->afterStateUpdated(function ($state, callable $set, callable $get) {
$set('Item', null); $set('Item', null);
$set('Machine', null);
}), }),
Select::make('Line') Select::make('Line')
->label('Search by Line Name') ->label('Select Line')
->nullable() ->nullable()
->searchable()
->reactive()
->options(function (callable $get) { ->options(function (callable $get) {
$plantId = $get('Plant'); $plantId = $get('Plant');
@@ -469,22 +443,18 @@ class CharacteristicValueResource extends Resource
return []; return [];
} }
return Line::whereHas('characteristicValues', function ($query) use ($plantId) { return Line::where('plant_id', $plantId)->pluck('name', 'id');
if ($plantId) {
$query->where('plant_id', $plantId);
}
})->pluck('name', 'id');
// return $plantId ? Item::where('plant_id', $plantId)->pluck('code', 'id') : []; // return $plantId ? Item::where('plant_id', $plantId)->pluck('code', 'id') : [];
}) })
->reactive()
->afterStateUpdated(function ($state, callable $set, callable $get) { ->afterStateUpdated(function ($state, callable $set, callable $get) {
$set('Item', null); $set('Item', null);
$set('Machine', null);
}), }),
Select::make('Item') Select::make('Item')
->label('Search by Item Code') ->label('Item Code')
->nullable() ->nullable()
->searchable() ->searchable()
->reactive()
->options(function (callable $get) { ->options(function (callable $get) {
$plantId = $get('Plant'); $plantId = $get('Plant');
@@ -492,21 +462,17 @@ class CharacteristicValueResource extends Resource
return []; return [];
} }
return Item::whereHas('characteristicValues', function ($query) use ($plantId) { return Item::where('plant_id', $plantId)->pluck('code', 'id');
if ($plantId) {
$query->where('plant_id', $plantId);
}
})->pluck('code', 'id');
// return $plantId ? Item::where('plant_id', $plantId)->pluck('code', 'id') : []; // return $plantId ? Item::where('plant_id', $plantId)->pluck('code', 'id') : [];
}) })
->reactive()
->afterStateUpdated(function ($state, callable $set, callable $get) { ->afterStateUpdated(function ($state, callable $set, callable $get) {
$set('process_order', null); $set('process_order', null);
}), }),
Select::make('Machine') Select::make('Machine')
->label('Search by Work Center') ->label('Select Machine')
->nullable() ->nullable()
->searchable()
->reactive()
->options(function (callable $get) { ->options(function (callable $get) {
$plantId = $get('Plant'); $plantId = $get('Plant');
$lineId = $get('Line'); $lineId = $get('Line');
@@ -515,13 +481,11 @@ class CharacteristicValueResource extends Resource
return []; return [];
} }
return Machine::whereHas('characteristicValues', function ($query) use ($plantId, $lineId) { return Machine::where('plant_id', $plantId)->where('line_id', $lineId)->pluck('work_center', 'id');
if ($plantId && $lineId) {
$query->where('plant_id', $plantId)->where('line_id', $lineId);
}
})->pluck('work_center', 'id');
// return $plantId ? Item::where('plant_id', $plantId)->pluck('code', 'id') : []; // return $plantId ? Item::where('plant_id', $plantId)->pluck('code', 'id') : [];
}) })
->reactive()
->afterStateUpdated(function ($state, callable $set, callable $get) { ->afterStateUpdated(function ($state, callable $set, callable $get) {
$set('process_order', null); $set('process_order', null);
}), }),
@@ -577,11 +541,11 @@ class CharacteristicValueResource extends Resource
} }
if (! empty($data['process_order'])) { if (! empty($data['process_order'])) {
$query->where('process_order', 'like', '%'.$data['process_order'].'%'); $query->where('process_order', $data['process_order']);
} }
if (! empty($data['coil_number'])) { if (! empty($data['coil_number'])) {
$query->where('coil_number', 'like', '%'.$data['coil_number'].'%'); $query->where('coil_number', $data['coil_number']);
} }
if (! empty($data['status'])) { if (! empty($data['status'])) {
@@ -602,7 +566,7 @@ class CharacteristicValueResource extends Resource
$indicators = []; $indicators = [];
if (! empty($data['Plant'])) { if (! empty($data['Plant'])) {
$indicators[] = 'Plant Name: '.Plant::where('id', $data['Plant'])->value('name'); $indicators[] = 'Plant: '.Plant::where('id', $data['Plant'])->value('name');
} else { } else {
$userHas = Filament::auth()->user()->plant_id; $userHas = Filament::auth()->user()->plant_id;
@@ -612,15 +576,15 @@ class CharacteristicValueResource extends Resource
} }
if (! empty($data['Line'])) { if (! empty($data['Line'])) {
$indicators[] = 'Line Name: '.Line::where('id', $data['Line'])->value('name'); $indicators[] = 'Line: '.Line::where('id', $data['Line'])->value('name');
} }
if (! empty($data['Item'])) { if (! empty($data['Item'])) {
$indicators[] = 'Item Code: '.Item::where('id', $data['Item'])->value('code'); $indicators[] = 'Item: '.Item::where('id', $data['Item'])->value('code');
} }
if (! empty($data['Machine'])) { if (! empty($data['Machine'])) {
$indicators[] = 'Work Center: '.Machine::where('id', $data['Machine'])->value('work_center'); $indicators[] = 'Machine: '.Machine::where('id', $data['Machine'])->value('work_center');
} }
if (! empty($data['process_order'])) { if (! empty($data['process_order'])) {

File diff suppressed because it is too large Load Diff

View File

@@ -1,178 +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';
protected static ?string $navigationGroup = 'Master Packing';
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

@@ -12,7 +12,6 @@ use Filament\Facades\Filament;
use Filament\Forms; use Filament\Forms;
use Filament\Forms\Components\Actions\Action; use Filament\Forms\Components\Actions\Action;
use Filament\Forms\Form; use Filament\Forms\Form;
use Filament\Forms\Get;
use Filament\Notifications\Notification; use Filament\Notifications\Notification;
use Filament\Resources\Resource; use Filament\Resources\Resource;
use Filament\Tables; use Filament\Tables;
@@ -46,7 +45,6 @@ class GrMasterResource extends Resource
->reactive() ->reactive()
->searchable() ->searchable()
->relationship('plant', 'name') ->relationship('plant', 'name')
->disabled(fn (Get $get) => ! empty($get('id')))
->options(function (callable $get) { ->options(function (callable $get) {
$userHas = Filament::auth()->user()->plant_id; $userHas = Filament::auth()->user()->plant_id;
@@ -58,7 +56,6 @@ class GrMasterResource extends Resource
// ->relationship('item', 'id') // ->relationship('item', 'id')
->reactive() ->reactive()
->searchable() ->searchable()
->disabled(fn (Get $get) => ! empty($get('id')))
->options(function (callable $get) { ->options(function (callable $get) {
$plantId = $get('plant_id'); $plantId = $get('plant_id');
if (empty($plantId)) { if (empty($plantId)) {
@@ -449,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();
@@ -626,6 +581,7 @@ class InvoiceInTransitResource extends Resource
->body('Invoice in transit upload failed!') ->body('Invoice in transit upload failed!')
->success() ->success()
->send(); ->send();
return; return;
} }
} }

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')
@@ -1198,23 +1189,17 @@ class InvoiceValidationResource extends Resource
->inlineLabel(false) ->inlineLabel(false)
->inline(), ->inline(),
Select::make('Plant') Select::make('Plant')
->label('Search by Plant Name') ->label('Select Plant')
->nullable() ->nullable()
->searchable() // ->options(function () {
->reactive() // return Plant::pluck('name', 'id');
// })
->options(function (callable $get) { ->options(function (callable $get) {
$userHas = Filament::auth()->user()->plant_id; $userHas = Filament::auth()->user()->plant_id;
if ($userHas && strlen($userHas) > 0) { return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray();
return Plant::where('id', $userHas)->pluck('name', 'id')->toArray();
} else {
return Plant::whereHas('invoiceValidations', function ($query) {
$query->whereNotNull('id');
})->orderBy('code')->pluck('name', 'id');
}
// return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray();
}) })
->reactive()
->afterStateUpdated(function ($state, callable $set, callable $get): void { ->afterStateUpdated(function ($state, callable $set, callable $get): void {
$set('sticker_master_id', null); $set('sticker_master_id', null);
$set('operator_id', null); $set('operator_id', null);
@@ -1228,8 +1213,6 @@ class InvoiceValidationResource extends Resource
Select::make('sticker_master_id') Select::make('sticker_master_id')
->label('Search by Item Code') ->label('Search by Item Code')
->nullable() ->nullable()
->searchable()
->reactive()
->options(function (callable $get) { ->options(function (callable $get) {
$pId = $get('Plant'); $pId = $get('Plant');
@@ -1242,7 +1225,9 @@ class InvoiceValidationResource extends Resource
} }
$query->whereHas('invoiceValidations'); $query->whereHas('invoiceValidations');
})->pluck('code', 'id'); })->pluck('code', 'id');
}), })
->searchable()
->reactive(),
Select::make('scanned_status') Select::make('scanned_status')
->label('Scanned Status') ->label('Scanned Status')
->nullable() ->nullable()
@@ -1362,7 +1347,7 @@ class InvoiceValidationResource extends Resource
$indicators = []; $indicators = [];
if (! empty($data['Plant'])) { if (! empty($data['Plant'])) {
$indicators[] = 'Plant Name: '.Plant::where('id', $data['Plant'])->value('name'); $indicators[] = 'Plant: '.Plant::where('id', $data['Plant'])->value('name');
} else { } else {
$userHas = Filament::auth()->user()->plant_id; $userHas = Filament::auth()->user()->plant_id;

View File

@@ -50,15 +50,14 @@ class ProcessOrderResource extends Resource
return $form return $form
->schema([ ->schema([
Forms\Components\Select::make('plant_id') Forms\Components\Select::make('plant_id')
->label('Plant Name') ->label('Plant')
->relationship('plant', 'name')
->searchable() ->searchable()
->relationship('plant', 'name')
->options(function (callable $get) { ->options(function (callable $get) {
$userHas = Filament::auth()->user()->plant_id; $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(); 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;
@@ -94,8 +93,7 @@ class ProcessOrderResource extends Resource
->hintColor('danger') ->hintColor('danger')
->required(), ->required(),
Forms\Components\Select::make('line_id') Forms\Components\Select::make('line_id')
->label('Line Name') ->label('Line')
->reactive()
->searchable() ->searchable()
->options(function (callable $get) { ->options(function (callable $get) {
$plantId = $get('plant_id'); $plantId = $get('plant_id');
@@ -105,7 +103,7 @@ class ProcessOrderResource 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'))) ->reactive()
->afterStateUpdated(function (callable $set, callable $get, ?string $state) { ->afterStateUpdated(function (callable $set, callable $get, ?string $state) {
$set('item_id', null); $set('item_id', null);
$set('item_description', null); $set('item_description', null);
@@ -125,7 +123,6 @@ class ProcessOrderResource extends Resource
// ->relationship('item', 'id') // ->relationship('item', 'id')
// ->required(), // ->required(),
->searchable() ->searchable()
->reactive()
->options(function (callable $get) { ->options(function (callable $get) {
$plantId = $get('plant_id'); $plantId = $get('plant_id');
if (empty($plantId)) { if (empty($plantId)) {
@@ -134,7 +131,7 @@ class ProcessOrderResource extends Resource
return Item::where('plant_id', $plantId)->pluck('code', 'id'); return Item::where('plant_id', $plantId)->pluck('code', 'id');
}) })
->disabled(fn (Get $get) => ! empty($get('id'))) ->reactive()
->afterStateUpdated(function (callable $set, callable $get, ?string $state) { ->afterStateUpdated(function (callable $set, callable $get, ?string $state) {
$plantId = $get('plant_id'); $plantId = $get('plant_id');
$itemId = $get('item_id'); $itemId = $get('item_id');
@@ -169,8 +166,9 @@ class ProcessOrderResource extends Resource
$set('updated_by', Filament::auth()->user()?->name); $set('updated_by', Filament::auth()->user()?->name);
}) })
->required(), ->required(),
Forms\Components\TextInput::make('item_description') Forms\Components\TextInput::make('item_description')
->label('Item Description') ->label('Description')
->readOnly() ->readOnly()
->required() ->required()
->reactive() ->reactive()
@@ -189,7 +187,7 @@ class ProcessOrderResource extends Resource
$set('updated_by', Filament::auth()->user()?->name); $set('updated_by', Filament::auth()->user()?->name);
}), }),
Forms\Components\TextInput::make('item_uom') Forms\Components\TextInput::make('item_uom')
->label('Item UOM') ->label('UOM')
->readOnly() ->readOnly()
->required() ->required()
->reactive() ->reactive()
@@ -264,11 +262,12 @@ class ProcessOrderResource extends Resource
->first(); ->first();
if ($existing) { if ($existing) {
// Notification::make()
// ->title('Duplicate Process Order!') Notification::make()
// ->body("Process Order '{$value}' is already exist with item code '{$existing->item->code}'.") ->title('Duplicate Process Order!')
// ->danger() ->body("Process Order '{$value}' is already exist with item code '{$existing->item->code}'.")
// ->send(); ->danger()
->send();
$fail("process order already exists for this plant and item code '{$existing->item->code}'."); $fail("process order already exists for this plant and item code '{$existing->item->code}'.");
} }
}; };
@@ -446,7 +445,7 @@ class ProcessOrderResource extends Resource
->hint(fn ($get) => $get('sfgNumberError') ? $get('sfgNumberError') : null) ->hint(fn ($get) => $get('sfgNumberError') ? $get('sfgNumberError') : null)
->hintColor('danger'), ->hintColor('danger'),
Forms\Components\TextInput::make('machine_name') Forms\Components\TextInput::make('machine_name')
->label('Machine Name') ->label('Machine ID')
->reactive() ->reactive()
->readOnly(fn ($get) => ($get('process_order') == null)) ->readOnly(fn ($get) => ($get('process_order') == null))
->afterStateUpdated(function (callable $set, callable $get, ?string $state) { ->afterStateUpdated(function (callable $set, callable $get, ?string $state) {
@@ -681,27 +680,27 @@ class ProcessOrderResource extends Resource
return ($currentPage - 1) * $perPage + $rowLoop->iteration; return ($currentPage - 1) * $perPage + $rowLoop->iteration;
}), }),
Tables\Columns\TextColumn::make('plant.name') Tables\Columns\TextColumn::make('plant.name')
->label('Plant Name') ->label('Plant')
->alignCenter() ->alignCenter()
->searchable() ->searchable()
->sortable(), ->sortable(),
Tables\Columns\TextColumn::make('line.name') Tables\Columns\TextColumn::make('line.name')
->label('Line Name') ->label('Line')
->searchable() ->searchable()
->alignCenter() ->alignCenter()
->sortable(), ->sortable(),
Tables\Columns\TextColumn::make('item.code') Tables\Columns\TextColumn::make('item.code')
->label('Item Code') ->label('Item')
->searchable() ->searchable()
->alignCenter() ->alignCenter()
->sortable(), ->sortable(),
Tables\Columns\TextColumn::make('item.description') Tables\Columns\TextColumn::make('item.description')
->label('Item Description') ->label('Description')
->alignCenter() ->alignCenter()
->searchable() ->searchable()
->sortable(), ->sortable(),
Tables\Columns\TextColumn::make('item.uom') Tables\Columns\TextColumn::make('item.uom')
->label('Item UOM') ->label('Uom')
->alignCenter() ->alignCenter()
->searchable() ->searchable()
->sortable(), ->sortable(),
@@ -736,7 +735,7 @@ class ProcessOrderResource extends Resource
->searchable() ->searchable()
->sortable(), ->sortable(),
Tables\Columns\TextColumn::make('machine_name') Tables\Columns\TextColumn::make('machine_name')
->label('Machine Name') ->label('Machine ID')
->alignCenter() ->alignCenter()
->searchable() ->searchable()
->sortable(), ->sortable(),
@@ -779,47 +778,16 @@ class ProcessOrderResource extends Resource
->label('Advanced Filters') ->label('Advanced Filters')
->form([ ->form([
Select::make('Plant') Select::make('Plant')
->label('Search by Plant Name') ->label('Select Plant Name')
->nullable() ->nullable()
->searchable()
->reactive()
->options(function (callable $get) { ->options(function (callable $get) {
$userHas = Filament::auth()->user()->plant_id; $userHas = Filament::auth()->user()->plant_id;
if ($userHas && strlen($userHas) > 0) { return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray();
return Plant::where('id', $userHas)->pluck('name', 'id')->toArray();
} else {
return Plant::whereHas('processOrders', function ($query) {
$query->whereNotNull('id');
})->orderBy('code')->pluck('name', 'id');
}
// return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray();
}) })
->reactive()
->afterStateUpdated(function ($state, callable $set, callable $get) { ->afterStateUpdated(function ($state, callable $set, callable $get) {
$set('Item', null); $set('Item', null);
$set('Line', null);
}),
Select::make('Line')
->label('Search by Line Name')
->nullable()
->searchable()
->reactive()
->options(function (callable $get) {
$plantId = $get('Plant');
if (empty($plantId)) {
return [];
}
return Line::whereHas('processOrders', function ($query) use ($plantId) {
if ($plantId) {
$query->where('plant_id', $plantId);
}
})->pluck('name', 'id');
})
->afterStateUpdated(function ($state, callable $set, callable $get) {
$set('process_order', null);
}), }),
Select::make('Item') Select::make('Item')
->label('Search by Item Code') ->label('Search by Item Code')
@@ -829,10 +797,6 @@ class ProcessOrderResource extends Resource
->options(function (callable $get) { ->options(function (callable $get) {
$plantId = $get('Plant'); $plantId = $get('Plant');
if (empty($plantId)) {
return [];
}
return Item::whereHas('processOrders', function ($query) use ($plantId) { return Item::whereHas('processOrders', function ($query) use ($plantId) {
if ($plantId) { if ($plantId) {
$query->where('plant_id', $plantId); $query->where('plant_id', $plantId);
@@ -883,7 +847,7 @@ class ProcessOrderResource extends Resource
]) ])
->query(function ($query, array $data) { ->query(function ($query, array $data) {
// Hide all records initially if no filters are applied // Hide all records initially if no filters are applied
if (empty($data['Plant']) && empty($data['Line']) && empty($data['Item']) && empty($data['process_order']) && Str::length($data['coil_number']) <= 0 && empty($data['sfg_number']) && empty($data['machine_name']) && ($data['rework_status'] == null || $data['rework_status'] == '') && empty($data['created_from']) && empty($data['created_to'])) { if (empty($data['Plant']) && empty($data['Item']) && empty($data['process_order']) && Str::length($data['coil_number']) <= 0 && empty($data['sfg_number']) && empty($data['machine_name']) && ($data['rework_status'] == null || $data['rework_status'] == '') && empty($data['created_from']) && empty($data['created_to'])) {
return $query->whereRaw('1 = 0'); return $query->whereRaw('1 = 0');
} }
@@ -897,10 +861,6 @@ class ProcessOrderResource extends Resource
} }
} }
if (! empty($data['Line'])) {
$query->where('line_id', $data['Line']);
}
if (! empty($data['Item'])) { if (! empty($data['Item'])) {
$query->where('item_id', $data['Item']); $query->where('item_id', $data['Item']);
} }
@@ -940,21 +900,17 @@ class ProcessOrderResource extends Resource
$indicators = []; $indicators = [];
if (! empty($data['Plant'])) { if (! empty($data['Plant'])) {
$indicators[] = 'Plant Name: '.Plant::where('id', $data['Plant'])->value('name'); $indicators[] = 'Plant: '.Plant::where('id', $data['Plant'])->value('name');
} else { } else {
$userHas = Filament::auth()->user()->plant_id; $userHas = Filament::auth()->user()->plant_id;
if ($userHas && strlen($userHas) > 0) { if ($userHas && strlen($userHas) > 0) {
return 'Plant Name: Choose plant to filter records.'; return 'Plant: Choose plant to filter records.';
} }
} }
if (! empty($data['Line'])) {
$indicators[] = 'Line Name: '.Line::where('id', $data['Line'])->value('name');
}
if (! empty($data['Item'])) { if (! empty($data['Item'])) {
$indicators[] = 'Item Code: '.Item::where('id', $data['Item'])->value('code'); $indicators[] = 'Item: '.Item::where('id', $data['Item'])->value('code');
} }
if (! empty($data['process_order'])) { if (! empty($data['process_order'])) {

View File

@@ -27,8 +27,6 @@ use Filament\Tables\Filters\Filter;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Database\Eloquent\SoftDeletingScope;
use Illuminate\Validation\Rule;
use Str;
class ProductCharacteristicsMasterResource extends Resource class ProductCharacteristicsMasterResource extends Resource
{ {
@@ -43,7 +41,7 @@ class ProductCharacteristicsMasterResource extends Resource
return $form return $form
->schema([ ->schema([
Forms\Components\Select::make('plant_id') Forms\Components\Select::make('plant_id')
->label('Plant Name') ->label('Plant')
->relationship('plant', 'name') ->relationship('plant', 'name')
->searchable() ->searchable()
->options(function (callable $get) { ->options(function (callable $get) {
@@ -51,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;
@@ -59,10 +56,6 @@ class ProductCharacteristicsMasterResource extends Resource
}) })
->afterStateUpdated(function ($state, callable $set) { ->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name); $set('updated_by', Filament::auth()->user()?->name);
$set('item_id', null);
$set('line_id', null);
$set('work_group_master_id', null);
$set('machine_id', null);
}) })
->reactive() ->reactive()
->required(), ->required(),
@@ -77,38 +70,14 @@ class ProductCharacteristicsMasterResource extends Resource
return []; return [];
} }
return 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);
$set('line_id', null);
$set('work_group_master_id', null);
$set('machine_id', null);
}) })
->rules([
function (callable $get) {
return Rule::unique('product_characteristics_masters', 'item_id')
->where('plant_id', $get('plant_id'))
->where('line_id', $get('line_id'))
->where('work_group_master_id', $get('work_group_master_id'))
->where('machine_id', $get('machine_id'))
->where('characteristics_type', $get('characteristics_type'))
->where('name', $get('name'))
->ignore($get('id'));
},
// function (callable $get): Closure {
// return function (string $attribute, $value, Closure $fail) use ($get) {
// $rework = $get('rework_status');
// if ($value && Str::contains($value, '.') && $rework == 0) {
// $fail("Rework status should be 'Yes' for rework coil number '{$value}'!");
// }
// };
// },
])
->required(), ->required(),
Forms\Components\Select::make('line_id') Forms\Components\Select::make('line_id')
->label('Line Name') ->label('Line')
->reactive() ->reactive()
->searchable() ->searchable()
->options(function (callable $get) { ->options(function (callable $get) {
@@ -119,14 +88,15 @@ 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('updated_by', Filament::auth()->user()?->name);
$set('work_group_master_id', null);
$set('machine_id', null); $set('machine_id', null);
if (! $get('work_group_master_id')) {
$set('machine_id', null);
}
$set('updated_by', Filament::auth()->user()?->name);
}) })
// ->relationship('line', 'name'),
->required(), ->required(),
// ->relationship('line', 'name'),
Forms\Components\Select::make('work_group_master_id') Forms\Components\Select::make('work_group_master_id')
->label('Group Work Center') ->label('Group Work Center')
->required() ->required()
@@ -148,13 +118,13 @@ class ProductCharacteristicsMasterResource extends Resource
return WorkGroupMaster::where('plant_id', $get('plant_id'))->whereIn('id', $workGroupIds)->pluck('name', 'id')->toArray(); return WorkGroupMaster::where('plant_id', $get('plant_id'))->whereIn('id', $workGroupIds)->pluck('name', 'id')->toArray();
}) })
// ->disabled(fn (Get $get) => ! empty($get('id'))) ->disabled(fn (Get $get) => ! empty($get('id')))
->afterStateUpdated(function ($state, callable $set, callable $get) { ->afterStateUpdated(function ($state, callable $set, callable $get) {
$lineId = $get('line_id'); $lineId = $get('line_id');
$set('updated_by', Filament::auth()->user()?->name); $set('updated_by', Filament::auth()->user()?->name);
$set('machine_id', null);
if (! $lineId) { if (! $lineId) {
$set('mGroupWorkError', 'Please select a line first.'); $set('mGroupWorkError', 'Please select a line first.');
$set('machine_id', null);
return; return;
} else { } else {
@@ -166,12 +136,13 @@ class ProductCharacteristicsMasterResource extends Resource
// return; // return;
// } // }
$set('mGroupWorkError', null); $set('mGroupWorkError', null);
$set('machine_id', null);
} }
}) })
->extraAttributes(fn ($get) => [ ->extraAttributes(fn ($get) => [
'class' => $get('mGroupWorkError') ? 'border-red-500' : '', 'class' => $get('mGroupWorkError') ? 'border-red-500' : '',
]) ])
// ->dehydrateStateUsing(fn ($state) => null) // ->dehydrateStateUsing(fn ($state) => null)
->hint(fn ($get) => $get('mGroupWorkError') ? $get('mGroupWorkError') : null) ->hint(fn ($get) => $get('mGroupWorkError') ? $get('mGroupWorkError') : null)
->hintColor('danger'), ->hintColor('danger'),
Forms\Components\Select::make('machine_id') Forms\Components\Select::make('machine_id')
@@ -193,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);
@@ -210,13 +180,12 @@ 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);
}) })
->required(), ->required(),
Forms\Components\TextInput::make('name') Forms\Components\TextInput::make('name')
->label('Characteristics Name') ->label('Name')
->reactive() ->reactive()
->afterStateUpdated(function ($state, callable $set) { ->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name); $set('updated_by', Filament::auth()->user()?->name);
@@ -230,17 +199,10 @@ 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) {
if ($state == 'Visual') {
$set('lower', 0);
$set('middle', 0);
$set('upper', 0);
}
$set('updated_by', Filament::auth()->user()?->name); $set('updated_by', Filament::auth()->user()?->name);
}) })
->required(), ->required(),
// Forms\Components\Select::make('result') // Forms\Components\Select::make('result')
// ->label('Visual Type') // ->label('Visual Type')
// ->reactive() // ->reactive()
@@ -258,7 +220,6 @@ class ProductCharacteristicsMasterResource extends Resource
// session()->put('temp_result', $state); // session()->put('temp_result', $state);
// }) // })
// ->hidden(fn (callable $get) => $get('inspection_type') != 'Visual'), // ->hidden(fn (callable $get) => $get('inspection_type') != 'Visual'),
Forms\Components\TextInput::make('lower') Forms\Components\TextInput::make('lower')
->label('Lower') ->label('Lower')
->numeric() ->numeric()
@@ -271,8 +232,7 @@ class ProductCharacteristicsMasterResource extends Resource
$set('middle', ($state + $get('upper')) / 2); $set('middle', ($state + $get('upper')) / 2);
$set('updated_by', Filament::auth()->user()?->name); $set('updated_by', Filament::auth()->user()?->name);
}) })
// ->visible(fn (callable $get) => $get('inspection_type') == 'Value') ->visible(fn (callable $get) => $get('inspection_type') == 'Value'),
->readOnly(fn (callable $get) => $get('inspection_type') != 'Value'),
Forms\Components\TextInput::make('upper') Forms\Components\TextInput::make('upper')
->label('Upper') ->label('Upper')
->numeric() ->numeric()
@@ -285,8 +245,7 @@ class ProductCharacteristicsMasterResource extends Resource
$set('middle', ($get('lower') + $state) / 2); $set('middle', ($get('lower') + $state) / 2);
$set('updated_by', Filament::auth()->user()?->name); $set('updated_by', Filament::auth()->user()?->name);
}) })
// ->visible(fn (callable $get) => $get('inspection_type') == 'Value') ->visible(fn (callable $get) => $get('inspection_type') == 'Value'),
->readOnly(fn (callable $get) => $get('inspection_type') != 'Value'),
Forms\Components\TextInput::make('middle') Forms\Components\TextInput::make('middle')
->label('Middle') ->label('Middle')
->readOnly() ->readOnly()
@@ -309,8 +268,8 @@ class ProductCharacteristicsMasterResource extends Resource
->dehydrateStateUsing(fn ($state, Get $get) => ($get('lower') + $get('upper')) / 2) ->dehydrateStateUsing(fn ($state, Get $get) => ($get('lower') + $get('upper')) / 2)
->afterStateUpdated(function ($state, callable $set) { ->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name); $set('updated_by', Filament::auth()->user()?->name);
}), })
// ->visible(fn (callable $get) => $get('inspection_type') == 'Value'), ->visible(fn (callable $get) => $get('inspection_type') == 'Value'),
Forms\Components\Hidden::make('created_by') Forms\Components\Hidden::make('created_by')
->label('Created By') ->label('Created By')
->default(Filament::auth()->user()?->name), ->default(Filament::auth()->user()?->name),
@@ -337,7 +296,7 @@ class ProductCharacteristicsMasterResource extends Resource
return ($currentPage - 1) * $perPage + $rowLoop->iteration; return ($currentPage - 1) * $perPage + $rowLoop->iteration;
}), }),
Tables\Columns\TextColumn::make('plant.name') Tables\Columns\TextColumn::make('plant.name')
->label('Plant Name') ->label('Plant')
->searchable() ->searchable()
->alignCenter() ->alignCenter()
->sortable(), ->sortable(),
@@ -346,13 +305,13 @@ class ProductCharacteristicsMasterResource extends Resource
->alignCenter() ->alignCenter()
->searchable() ->searchable()
->sortable(), ->sortable(),
Tables\Columns\TextColumn::make('item.description') Tables\Columns\TextColumn::make('line.name')
->label('Item Description') ->label('Line')
->alignCenter() ->alignCenter()
->searchable() ->searchable()
->sortable(), ->sortable(),
Tables\Columns\TextColumn::make('line.name') Tables\Columns\TextColumn::make('characteristics_type')
->label('Line Name') ->label('Characteristics Type')
->alignCenter() ->alignCenter()
->searchable() ->searchable()
->sortable(), ->sortable(),
@@ -366,16 +325,10 @@ class ProductCharacteristicsMasterResource extends Resource
->alignCenter() ->alignCenter()
->searchable() ->searchable()
->sortable(), ->sortable(),
Tables\Columns\TextColumn::make('characteristics_type') // Tables\Columns\TextColumn::make('machine.work_center')
->label('Characteristics Type') // ->label('Work Center')
->alignCenter() // ->alignCenter()
->searchable() // ->sortable(),
->sortable(),
Tables\Columns\TextColumn::make('name')
->label('Characteristics Name')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('inspection_type') Tables\Columns\TextColumn::make('inspection_type')
->label('Inspection Type') ->label('Inspection Type')
->alignCenter() ->alignCenter()
@@ -431,34 +384,20 @@ class ProductCharacteristicsMasterResource extends Resource
->label('Advanced Filters') ->label('Advanced Filters')
->form([ ->form([
Select::make('Plant') Select::make('Plant')
->label('Search by Plant Name') ->label('Select Plant')
->nullable() ->nullable()
->searchable()
->reactive()
->options(function (callable $get) { ->options(function (callable $get) {
$userHas = Filament::auth()->user()->plant_id; $userHas = Filament::auth()->user()->plant_id;
if ($userHas && strlen($userHas) > 0) { return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray();
return Plant::where('id', $userHas)->pluck('name', 'id')->toArray();
} else {
return Plant::whereHas('productCharacteristicsMasters', function ($query) {
$query->whereNotNull('id');
})->orderBy('code')->pluck('name', 'id');
}
// return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray();
}) })
->reactive()
->afterStateUpdated(function ($state, callable $set, callable $get) { ->afterStateUpdated(function ($state, callable $set, callable $get) {
$set('Item', null); $set('Item', null);
$set('Line', null);
$set('work_group_master', null);
$set('Machine', null);
}), }),
Select::make('Line') Select::make('Line')
->label('Search by Line Name') ->label('Select Line')
->nullable() ->nullable()
->searchable()
->reactive()
->options(function (callable $get) { ->options(function (callable $get) {
$plantId = $get('Plant'); $plantId = $get('Plant');
@@ -466,42 +405,34 @@ class ProductCharacteristicsMasterResource extends Resource
return []; return [];
} }
return Line::whereHas('productCharacteristicsMasters', function ($query) use ($plantId) { return Line::where('plant_id', $plantId)->pluck('name', 'id');
if ($plantId) {
$query->where('plant_id', $plantId); // return $plantId ? Item::where('plant_id', $plantId)->pluck('code', 'id') : [];
}
})->pluck('name', 'id');
}) })
->reactive()
->afterStateUpdated(function ($state, callable $set, callable $get) { ->afterStateUpdated(function ($state, callable $set, callable $get) {
$set('work_group_master', null); $set('Item', null);
$set('Machine', null);
}), }),
Select::make('Item') Select::make('Item')
->label('Search by Item Code') ->label('Search by Item Code')
->nullable() ->nullable()
->searchable() ->searchable()
->reactive()
->options(function (callable $get) { ->options(function (callable $get) {
$plantId = $get('Plant'); $plantId = $get('Plant');
if (empty($plantId)) {
return [];
}
return Item::whereHas('productCharacteristicsMasters', function ($query) use ($plantId) { return Item::whereHas('productCharacteristicsMasters', function ($query) use ($plantId) {
if ($plantId) { if ($plantId) {
$query->where('plant_id', $plantId); $query->where('plant_id', $plantId);
} }
})->pluck('code', 'id'); })->pluck('code', 'id');
}), })
->reactive(),
// ->afterStateUpdated(function ($state, callable $set, callable $get) { // ->afterStateUpdated(function ($state, callable $set, callable $get) {
// $set('process_order', null); // $set('process_order', null);
// }), // }),
Select::make('work_group_master') Select::make('work_group_master')
->label('Search by Group Work Center') ->label('Select Work Group Master')
->nullable() ->nullable()
->searchable()
->reactive()
->options(function (callable $get) { ->options(function (callable $get) {
$plantId = $get('Plant'); $plantId = $get('Plant');
@@ -509,65 +440,45 @@ class ProductCharacteristicsMasterResource extends Resource
return []; return [];
} }
return WorkGroupMaster::whereHas('productCharacteristicsMasters', function ($query) use ($plantId) { return WorkGroupMaster::where('plant_id', $plantId)->pluck('name', 'id');
if ($plantId) {
$query->where('plant_id', $plantId);
}
})->pluck('name', 'id');
// return $plantId ? Item::where('plant_id', $plantId)->pluck('code', 'id') : []; // return $plantId ? Item::where('plant_id', $plantId)->pluck('code', 'id') : [];
}) })
->reactive()
->afterStateUpdated(function ($state, callable $set, callable $get) { ->afterStateUpdated(function ($state, callable $set, callable $get) {
$set('Machine', null); $set('Machine', null);
}), }),
Select::make('Machine') Select::make('Machine')
->label('Search by Work Center') ->label('Select Machine')
->nullable() ->nullable()
->searchable()
->reactive()
->options(function (callable $get) { ->options(function (callable $get) {
$plantId = $get('Plant'); $plantId = $get('Plant');
$lineId = $get('Line'); $lineId = $get('Line');
$workGroupMasterId = $get('work_group_master');
if (empty($plantId) || empty($lineId) || empty($workGroupMasterId)) { if (empty($plantId) || empty($lineId)) {
return []; return [];
} }
return Machine::whereHas('productCharacteristicsMasters', function ($query) use ($plantId, $lineId, $workGroupMasterId) { return Machine::where('plant_id', $plantId)->where('line_id', $lineId)->pluck('work_center', 'id');
if ($plantId && $lineId && $workGroupMasterId) {
$query->where('plant_id', $plantId)->where('line_id', $lineId)->where('work_group_master_id', $workGroupMasterId);
}
})->pluck('work_center', 'id');
// return $plantId ? Item::where('plant_id', $plantId)->pluck('code', 'id') : []; // return $plantId ? Item::where('plant_id', $plantId)->pluck('code', 'id') : [];
}), })
->reactive(),
// ->afterStateUpdated(function ($state, callable $set, callable $get) { // ->afterStateUpdated(function ($state, callable $set, callable $get) {
// $set('process_order', null); // $set('process_order', null);
// }), // }),
// TextInput::make('process_order') // TextInput::make('process_order')
// ->label('Process Order') // ->label('Process Order')
// ->placeholder('Enter Process Order'), // ->placeholder('Enter Process Order'),
TextInput::make('name') // TextInput::make('coil_number')
->label('characteristics Name') // ->label('Coil Number')
->reactive() // ->placeholder(placeholder: 'Enter Coil Number'),
->placeholder(placeholder: 'Enter characteristics Name'),
Select::make('characteristics_type') Select::make('characteristics_type')
->label('Search by Characteristics Type') ->label('Characteristics Type')
->nullable()
->searchable()
->reactive()
->options([ ->options([
'Product' => 'Product', 'Product' => 'Product',
'Process' => 'Process', 'Process' => 'Process',
]), ]),
Select::make('inspection_type')
->label('Search by Inspection Type')
->nullable()
->searchable()
->reactive()
->options([
'Visual' => 'Visual',
'Value' => 'Value',
]),
DateTimePicker::make(name: 'created_from') DateTimePicker::make(name: 'created_from')
->label('Created From') ->label('Created From')
->placeholder(placeholder: 'Select From DateTime') ->placeholder(placeholder: 'Select From DateTime')
@@ -581,7 +492,7 @@ class ProductCharacteristicsMasterResource extends Resource
]) ])
->query(function ($query, array $data) { ->query(function ($query, array $data) {
// Hide all records initially if no filters are applied // Hide all records initially if no filters are applied
if (empty($data['Plant']) && empty($data['Line']) && empty($data['Item']) && empty($data['work_group_master']) && empty($data['Machine']) && empty($data['name']) && empty($data['characteristics_type']) && empty($data['inspection_type']) && empty($data['created_from']) && empty($data['created_to'])) { if (empty($data['Plant']) && empty($data['Line']) && empty($data['Item']) && empty($data['work_group_master']) && empty($data['Machine']) && empty($data['characteristics_type']) && empty($data['created_from']) && empty($data['created_to'])) {
return $query->whereRaw('1 = 0'); return $query->whereRaw('1 = 0');
} }
@@ -611,18 +522,10 @@ class ProductCharacteristicsMasterResource extends Resource
$query->where('machine_id', $data['Machine']); $query->where('machine_id', $data['Machine']);
} }
if (! empty($data['name'])) {
$query->where('name', 'like', '%'.$data['name'].'%');
}
if (! empty($data['characteristics_type'])) { if (! empty($data['characteristics_type'])) {
$query->where('characteristics_type', $data['characteristics_type']); $query->where('characteristics_type', $data['characteristics_type']);
} }
if (! empty($data['inspection_type'])) {
$query->where('inspection_type', $data['inspection_type']);
}
if (! empty($data['created_from'])) { if (! empty($data['created_from'])) {
$query->where('created_at', '>=', $data['created_from']); $query->where('created_at', '>=', $data['created_from']);
} }
@@ -637,7 +540,7 @@ class ProductCharacteristicsMasterResource extends Resource
$indicators = []; $indicators = [];
if (! empty($data['Plant'])) { if (! empty($data['Plant'])) {
$indicators[] = 'Plant Name: '.Plant::where('id', $data['Plant'])->value('name'); $indicators[] = 'Plant: '.Plant::where('id', $data['Plant'])->value('name');
} else { } else {
$userHas = Filament::auth()->user()->plant_id; $userHas = Filament::auth()->user()->plant_id;
@@ -647,33 +550,25 @@ class ProductCharacteristicsMasterResource extends Resource
} }
if (! empty($data['Line'])) { if (! empty($data['Line'])) {
$indicators[] = 'Line Name: '.Line::where('id', $data['Line'])->value('name'); $indicators[] = 'Line: '.Line::where('id', $data['Line'])->value('name');
} }
if (! empty($data['Item'])) { if (! empty($data['Item'])) {
$indicators[] = 'Item Name: '.Item::where('id', $data['Item'])->value('code'); $indicators[] = 'Item: '.Item::where('id', $data['Item'])->value('code');
} }
if (! empty($data['work_group_master'])) { if (! empty($data['work_group_master'])) {
$indicators[] = 'Group Work Center: '.WorkGroupMaster::where('id', $data['work_group_master'])->value('name'); $indicators[] = 'Work Group Master: '.WorkGroupMaster::where('id', $data['work_group_master'])->value('name');
} }
if (! empty($data['Machine'])) { if (! empty($data['Machine'])) {
$indicators[] = 'Work Center: '.Machine::where('id', $data['Machine'])->value('work_center'); $indicators[] = 'Machine: '.Machine::where('id', $data['Machine'])->value('work_center');
}
if (! empty($data['name'])) {
$indicators[] = 'Characteristics Name: '.$data['name'];
} }
if (! empty($data['characteristics_type'])) { if (! empty($data['characteristics_type'])) {
$indicators[] = 'Characteristics Type: '.$data['characteristics_type']; $indicators[] = 'Characteristics Type: '.$data['characteristics_type'];
} }
if (! empty($data['inspection_type'])) {
$indicators[] = 'Inspection Type: '.$data['inspection_type'];
}
if (! empty($data['created_from'])) { if (! empty($data['created_from'])) {
$indicators[] = 'From: '.$data['created_from']; $indicators[] = 'From: '.$data['created_from'];
} }

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

@@ -51,7 +51,6 @@ class QualityValidationResource extends Resource
->statePath('data') ->statePath('data')
->schema(components: [ ->schema(components: [
Forms\Components\Select::make('plant_id') Forms\Components\Select::make('plant_id')
->label('Plant Name')
->relationship('plant', 'name') ->relationship('plant', 'name')
->reactive() ->reactive()
->options(function (callable $get) { ->options(function (callable $get) {
@@ -95,7 +94,6 @@ class QualityValidationResource extends Resource
->default(fn () => session('last_selected_plant_id')), ->default(fn () => session('last_selected_plant_id')),
Forms\Components\Select::make('line_id') Forms\Components\Select::make('line_id')
->label('Line Name')
->relationship('line', titleAttribute: 'name') ->relationship('line', titleAttribute: 'name')
->reactive() ->reactive()
->required() ->required()
@@ -106,6 +104,7 @@ class QualityValidationResource extends Resource
} }
return Line::where('plant_id', $plantId) return Line::where('plant_id', $plantId)
->where('type', 'FG Line') // Filter by type
->pluck('name', 'id') ->pluck('name', 'id')
->toArray(); ->toArray();
}) })
@@ -131,7 +130,7 @@ class QualityValidationResource extends Resource
Forms\Components\Hidden::make('line') Forms\Components\Hidden::make('line')
->default(fn () => session('last_selected_line')), ->default(fn () => session('last_selected_line')),
Forms\Components\Hidden::make('sticker_master_id') Forms\Components\Hidden::make('sticker_master_id')
// ->relationship('stickerMaster', 'id') // ->relationship('stickerMaster', 'id')
->required(), ->required(),
Forms\Components\Hidden::make('uom') Forms\Components\Hidden::make('uom')
->required(), ->required(),
@@ -2348,7 +2347,6 @@ class QualityValidationResource extends Resource
->hintColor('danger'), ->hintColor('danger'),
Forms\Components\TextInput::make('part_validation1') Forms\Components\TextInput::make('part_validation1')
->label('Part Validation 1')
->hidden(fn (callable $get) => ! $get('part_validation1_visible')) ->hidden(fn (callable $get) => ! $get('part_validation1_visible'))
->default('') ->default('')
->reactive() ->reactive()
@@ -2446,7 +2444,6 @@ class QualityValidationResource extends Resource
->reactive(), ->reactive(),
Forms\Components\TextInput::make('part_validation2') Forms\Components\TextInput::make('part_validation2')
->label('Part Validation 2')
->hidden(fn (callable $get) => ! $get('part_validation2_visible')) ->hidden(fn (callable $get) => ! $get('part_validation2_visible'))
->default('') ->default('')
->required() ->required()
@@ -2541,7 +2538,6 @@ class QualityValidationResource extends Resource
->reactive(), ->reactive(),
Forms\Components\TextInput::make('part_validation3') Forms\Components\TextInput::make('part_validation3')
->label('Part Validation 3')
->hidden(fn (callable $get) => ! $get('part_validation3_visible')) ->hidden(fn (callable $get) => ! $get('part_validation3_visible'))
->default('') ->default('')
->required() ->required()
@@ -2635,7 +2631,6 @@ class QualityValidationResource extends Resource
->reactive(), ->reactive(),
Forms\Components\TextInput::make('part_validation4') Forms\Components\TextInput::make('part_validation4')
->label('Part Validation 4')
->hidden(fn (callable $get) => ! $get('part_validation4_visible')) ->hidden(fn (callable $get) => ! $get('part_validation4_visible'))
->default('') ->default('')
->required() ->required()
@@ -2720,7 +2715,6 @@ class QualityValidationResource extends Resource
->reactive(), ->reactive(),
Forms\Components\TextInput::make('part_validation5') Forms\Components\TextInput::make('part_validation5')
->label('Part Validation 5')
->hidden(fn (callable $get) => ! $get('part_validation5_visible')) ->hidden(fn (callable $get) => ! $get('part_validation5_visible'))
->default('') ->default('')
->required() ->required()
@@ -2879,11 +2873,11 @@ class QualityValidationResource extends Resource
return ($currentPage - 1) * $perPage + $rowLoop->iteration; return ($currentPage - 1) * $perPage + $rowLoop->iteration;
}), }),
Tables\Columns\TextColumn::make('plant.name') Tables\Columns\TextColumn::make('plant.name')
->label('Plant Name') ->label('Plant')
->alignCenter() ->alignCenter()
->sortable(), ->sortable(),
Tables\Columns\TextColumn::make('line.name') Tables\Columns\TextColumn::make('line.name')
->label('Line Name') ->label('Line')
->searchable() ->searchable()
->alignCenter() ->alignCenter()
->sortable(), ->sortable(),
@@ -2899,10 +2893,6 @@ class QualityValidationResource extends Resource
->label('Item Code') ->label('Item Code')
->alignCenter() ->alignCenter()
->sortable(), ->sortable(),
Tables\Columns\TextColumn::make('stickerMaster.item.description')
->label('Item Description')
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('uom') Tables\Columns\TextColumn::make('uom')
->label('Unit of Measure') ->label('Unit of Measure')
->alignCenter() ->alignCenter()
@@ -3002,11 +2992,6 @@ class QualityValidationResource extends Resource
->alignCenter() ->alignCenter()
->sortable() ->sortable()
->toggleable(isToggledHiddenByDefault: true), ->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('updated_by')
->label('Updated By')
->alignCenter()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('deleted_at') Tables\Columns\TextColumn::make('deleted_at')
->label('Deleted At') ->label('Deleted At')
->dateTime() ->dateTime()
@@ -3022,22 +3007,17 @@ class QualityValidationResource extends Resource
->label('Advanced Filters') ->label('Advanced Filters')
->form([ ->form([
Select::make('Plant') Select::make('Plant')
->label('Search by Plant Name') ->label('Select Plant')
->nullable() ->nullable()
->searchable() // ->options(function () {
->reactive() // return Plant::pluck('name', 'id');
// })
->options(function (callable $get) { ->options(function (callable $get) {
$userHas = Filament::auth()->user()->plant_id; $userHas = Filament::auth()->user()->plant_id;
if ($userHas && strlen($userHas) > 0) { return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray();
return Plant::where('id', $userHas)->pluck('name', 'id')->toArray();
} else {
return Plant::whereHas('qualityValidations', function ($query) {
$query->whereNotNull('id');
})->orderBy('code')->pluck('name', 'id');
}
// return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray();
}) })
->reactive()
->afterStateUpdated(function ($state, callable $set, callable $get) { ->afterStateUpdated(function ($state, callable $set, callable $get) {
$set('sticker_master_id', null); $set('sticker_master_id', null);
$set('sap_msg_status', null); $set('sap_msg_status', null);
@@ -3045,23 +3025,20 @@ class QualityValidationResource extends Resource
$set('operator_id', null); $set('operator_id', null);
}), }),
Select::make('Line') Select::make('Line')
->label('Search by Line Name') ->label('Select Line')
->nullable() ->nullable()
->searchable()
->reactive()
->options(function (callable $get) { ->options(function (callable $get) {
$plantId = $get('Plant'); $plantId = $get('Plant');
if (! $plantId) { if (! $plantId) {
return []; return [];
} }
return Line::whereHas('qualityValidations', function ($query) use ($plantId) { return Line::where('plant_id', $plantId)
if ($plantId) { ->where('type', 'FG Line') // Filter by type
$query->where('plant_id', $plantId); ->pluck('name', 'id')
} ->toArray();
})->pluck('name', 'id');
// return Line::where('plant_id', $plantId)->pluck('name', 'id')->toArray();
}) })
->reactive()
->afterStateUpdated(function ($state, callable $set, callable $get) { ->afterStateUpdated(function ($state, callable $set, callable $get) {
$set('sticker_master_id', null); $set('sticker_master_id', null);
$set('sap_msg_status', null); $set('sap_msg_status', null);
@@ -3076,8 +3053,6 @@ class QualityValidationResource extends Resource
Select::make('sticker_master_id') Select::make('sticker_master_id')
->label('Search by Item Code') ->label('Search by Item Code')
->nullable() ->nullable()
->searchable()
->reactive()
->options(function (callable $get) { ->options(function (callable $get) {
$pId = $get('Plant'); $pId = $get('Plant');
@@ -3087,12 +3062,12 @@ class QualityValidationResource extends Resource
} }
$query->whereHas('qualityValidations'); $query->whereHas('qualityValidations');
})->pluck('code', 'id'); })->pluck('code', 'id');
}), })
->searchable()
->reactive(),
Select::make('sap_msg_status') Select::make('sap_msg_status')
->label('Select SAP Message Status') ->label('Select SAP Message Status')
->nullable() ->nullable()
->searchable()
->reactive()
->options(function (callable $get) { ->options(function (callable $get) {
$plantId = $get('Plant'); $plantId = $get('Plant');
@@ -3101,13 +3076,12 @@ class QualityValidationResource extends Resource
} else { } else {
return QualityValidation::where('plant_id', $plantId)->whereNotNull('sap_msg_status')->select('sap_msg_status')->distinct()->pluck('sap_msg_status', 'sap_msg_status'); return QualityValidation::where('plant_id', $plantId)->whereNotNull('sap_msg_status')->select('sap_msg_status')->distinct()->pluck('sap_msg_status', 'sap_msg_status');
} }
}), })
// ->options(QualityValidation::whereNotNull('sap_msg_status')->select('sap_msg_status')->distinct()->pluck('sap_msg_status', 'sap_msg_status')) // ->options(QualityValidation::whereNotNull('sap_msg_status')->select('sap_msg_status')->distinct()->pluck('sap_msg_status', 'sap_msg_status'))
->reactive(),
Select::make('operator_id') Select::make('operator_id')
->label('Created By') ->label('Created By')
->nullable() ->nullable()
->searchable()
->reactive()
->options(function (callable $get) { ->options(function (callable $get) {
$plantId = $get('Plant'); $plantId = $get('Plant');
$lineId = $get('Line'); $lineId = $get('Line');
@@ -3118,7 +3092,9 @@ class QualityValidationResource extends Resource
} else { // if ($plantId && $lineId) } else { // if ($plantId && $lineId)
return QualityValidation::where('plant_id', $plantId)->where('line_id', $lineId)->whereNotNull('operator_id')->select('operator_id')->distinct()->pluck('operator_id', 'operator_id'); return QualityValidation::where('plant_id', $plantId)->where('line_id', $lineId)->whereNotNull('operator_id')->select('operator_id')->distinct()->pluck('operator_id', 'operator_id');
} }
}), })
->searchable()
->reactive(),
DateTimePicker::make(name: 'created_from') DateTimePicker::make(name: 'created_from')
->label('Created From') ->label('Created From')
->placeholder(placeholder: 'Select From DateTime') ->placeholder(placeholder: 'Select From DateTime')
@@ -3151,11 +3127,11 @@ class QualityValidationResource extends Resource
} }
if (! empty($data['production_order'])) { if (! empty($data['production_order'])) {
$query->where('production_order', 'like', '%'.$data['production_order'].'%'); $query->where('production_order', $data['production_order']);
} }
if (! empty($data['serial_number'])) { if (! empty($data['serial_number'])) {
$query->where('serial_number', 'like', '%'.$data['serial_number'].'%'); $query->where('serial_number', $data['serial_number']);
} }
if (! empty($data['sap_msg_status'])) { if (! empty($data['sap_msg_status'])) {
@@ -3190,7 +3166,7 @@ class QualityValidationResource extends Resource
$indicators = []; $indicators = [];
if (! empty($data['Plant'])) { if (! empty($data['Plant'])) {
$indicators[] = 'Plant Name: '.Plant::where('id', $data['Plant'])->value('name'); $indicators[] = 'Plant: '.Plant::where('id', $data['Plant'])->value('name');
} else { } else {
$userHas = Filament::auth()->user()->plant_id; $userHas = Filament::auth()->user()->plant_id;
@@ -3200,7 +3176,7 @@ class QualityValidationResource extends Resource
} }
if (! empty($data['Line'])) { if (! empty($data['Line'])) {
$indicators[] = 'Line Name: '.Line::where('id', $data['Line'])->value('name'); $indicators[] = 'Line: '.Line::where('id', $data['Line'])->value('name');
} }
if (! empty($data['production_order'])) { if (! empty($data['production_order'])) {
@@ -3213,7 +3189,7 @@ class QualityValidationResource extends Resource
if (! empty($data['sticker_master_id'])) { if (! empty($data['sticker_master_id'])) {
$itemCode = Item::find($data['sticker_master_id'])->code ?? 'Unknown'; $itemCode = Item::find($data['sticker_master_id'])->code ?? 'Unknown';
$indicators[] = 'Item Code: '.$itemCode; $indicators[] = 'Item Codes: '.$itemCode;
} }
if (! empty($data['sap_msg_status'])) { if (! empty($data['sap_msg_status'])) {

View File

@@ -1,310 +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';
protected static ?string $navigationGroup = 'Master Packing';
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

@@ -109,8 +109,8 @@ class CharacteristicsController extends Controller
->get([ ->get([
'line_id', 'line_id',
'machine_id', 'machine_id',
'name',
'characteristics_type', 'characteristics_type',
'name',
'inspection_type', 'inspection_type',
'lower', 'lower',
'middle', 'middle',
@@ -167,7 +167,6 @@ class CharacteristicsController extends Controller
// ]; // ];
// return response()->json($response); // return response()->json($response);
foreach ($characteristics as $char) { foreach ($characteristics as $char) {
$line = Line::find($char->line_id); $line = Line::find($char->line_id);
@@ -204,6 +203,7 @@ class CharacteristicsController extends Controller
return response()->json([ return response()->json([
'items' => $items, 'items' => $items,
]); ]);
} }
/** /**
@@ -2142,6 +2142,7 @@ class CharacteristicsController extends Controller
public function getCharMaster(Request $request) public function getCharMaster(Request $request)
{ {
$expectedUser = env('API_AUTH_USER'); $expectedUser = env('API_AUTH_USER');
$expectedPw = env('API_AUTH_PW'); $expectedPw = env('API_AUTH_PW');
$header_auth = $request->header('Authorization'); $header_auth = $request->header('Authorization');
@@ -2231,92 +2232,63 @@ class CharacteristicsController extends Controller
], 404); ], 404);
} }
$line = Line::where('plant_id', $plantId)->where('name', $lineName)->first(); $lineAgaPlant = Line::where('plant_id', $plantId)->where('name', $lineName)->first();
if (! $line) { if (! $lineAgaPlant) {
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => "Line Name not found in lines table for the plant : '$plant->name'!", 'status_description' => "Line Name not found in lines table for the plant : '$plant->name'!",
], 404); ], 404);
} }
$lineId = $line->id; $work = Machine::where('work_center', $workCenter)->first();
$machine = Machine::where('work_center', $workCenter)->first(); if (! $work) {
if (! $machine) {
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => 'Work Center not found in machines table!', 'status_description' => 'Work Center not found in machines table!',
], 404); ], 404);
} }
$machine = Machine::where('plant_id', $plantId)->where('work_center', $workCenter)->first(); $workAgaPlant = Machine::where('plant_id', $plantId)->where('work_center', $workCenter)->first();
if (! $machine) { if (! $workAgaPlant) {
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => "Work center not found in machines table for the plant : '$plant->name'!", 'status_description' => "Work center not found in machines table for the plant : '$plant->name'!",
], 404); ], 404);
} }
$machine = Machine::where('plant_id', $plantId)->where('line_id', $lineId)->where('work_center', $workCenter)->first();
if (! $machine) {
return response()->json([
'status_code' => 'ERROR',
'status_description' => 'Work center is not mapped for the given line!',
], 404);
}
$machineId = $machine->id;
// $description = $item ? $item->description : ''; // $description = $item ? $item->description : '';
// $uom = $item ? $item->uom : ''; // $uom = $item ? $item->uom : '';
// $category = $item ? $item->category : ''; // $category = $item ? $item->category : '';
$charMasters = ProductCharacteristicsMaster::with('workGroupMaster')->where('plant_id', $plantId)->where('item_id', $ItemId)->where('line_id', $lineId)->where('machine_id', $machineId)->get(); // ->select(['name', 'characteristics_type', 'inspection_type', 'lower', 'middle', 'upper', 'work_group_master_id']) $charMaster = ProductCharacteristicsMaster::where('plant_id', $plantId)->where('item_id', $ItemId)
->where('line_id', $lineAgaPlant->id)->where('machine_id', $workAgaPlant->id)
->first();
if ($charMasters->count() <= 0) { if (! $charMaster) {
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => "Characteristics not found in product master table for the plant : '$plant->name'!", 'status_description' => "Characteristics not found in product master table for the plant : '$plant->name'!",
], 404); ], 404);
} else {
if ($charMasters->count() == 1) {
$charMasters = ProductCharacteristicsMaster::with('workGroupMaster')->where('plant_id', $plantId)->where('item_id', $ItemId)->where('line_id', $lineId)->where('machine_id', $machineId)->first();
// $workGroup = WorkGroupMaster::find($charMasters->work_group_master_id);
// $workGroupName = $workGroup?->name ?? '';
$output = [
'work_group_master' => $charMasters?->workGroupMaster->name ?? '', // $workGroupName ?? '',
'name' => $charMasters?->name ?? '',
'characteristics_type' => $charMasters?->characteristics_type ?? '',
'inspection_type' => $charMasters?->inspection_type ?? '',
'lower' => (string) $charMasters?->lower ?? '',
'middle' => (string) $charMasters?->middle ?? '',
'upper' => (string) $charMasters?->upper ?? '',
];
} else {
$output = $charMasters->map(function ($charMast) {
$charMaster = [
'work_group_master' => $charMast?->workGroupMaster->name ?? '', // optional($charMast->workGroupMaster)->name ?? '',
'name' => $charMast?->name ?? '',
'characteristics_type' => $charMast?->characteristics_type ?? '',
'inspection_type' => $charMast?->inspection_type ?? '',
'lower' => (string) $charMast?->lower ?? '',
'middle' => (string) $charMast?->middle ?? '',
'upper' => (string) $charMast?->upper ?? '',
];
return $charMaster;
});
}
} }
$workGroup = WorkGroupMaster::find($charMaster->work_group_master_id);
$workGroupName = $workGroup?->name ?? '';
$output = [
'work_group_master' => $workGroupName ?? '',
'name' => $charMaster?->name ?? '',
'inspection_type' => $charMaster?->inspection_type ?? '',
'characteristics_type' => $charMaster?->characteristics_type ?? '',
'lower' => (string) $charMaster?->lower ?? '',
'middle' => (string) $charMaster?->middle ?? '',
'upper' => (string) $charMaster?->upper ?? '',
];
return response()->json($output, 200); return response()->json($output, 200);
} }
@@ -2376,15 +2348,15 @@ class CharacteristicsController extends Controller
], 404); ], 404);
} }
$line = Line::where('plant_id', $plantId)->where('name', $lineName)->first(); $lineAgaPlant = Line::where('plant_id', $plantId)->where('name', $lineName)->first();
if (! $line) { if (! $lineAgaPlant) {
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => "Line '{$lineName}' not found against plant code '$plantCode'!", 'status_description' => "Line '{$lineName}' not found against plant code '$plantCode'!",
], 404); ], 404);
} }
$lineId = $line->id; $lineId = $lineAgaPlant->id;
if ($itemCode == null || $itemCode == '') { if ($itemCode == null || $itemCode == '') {
return response()->json([ return response()->json([
@@ -2401,15 +2373,15 @@ class CharacteristicsController extends Controller
], 404); ], 404);
} }
$item = Item::where('plant_id', $plantId)->where('code', $itemCode)->first(); $itemAgaPlant = Item::where('plant_id', $plantId)->where('code', $itemCode)->first();
if (! $item) { if (! $itemAgaPlant) {
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => "Item code '{$itemCode}' not found against plant code '$plantCode'!", 'status_description' => "Item code '{$itemCode}' not found against plant code '$plantCode'!",
], 404); ], 404);
} }
$itemId = $item->id; $itemId = $itemAgaPlant->id;
if ($workCenter == null || $workCenter == '') { if ($workCenter == null || $workCenter == '') {
return response()->json([ return response()->json([
@@ -2426,23 +2398,23 @@ class CharacteristicsController extends Controller
], 404); ], 404);
} }
$machine = Machine::where('plant_id', $plantId)->where('work_center', $workCenter)->first(); $machineAgaPlant = Machine::where('plant_id', $plantId)->where('work_center', $workCenter)->first();
if (! $machine) { if (! $machineAgaPlant) {
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => "Work center '{$workCenter}' not found against plant code '$plantCode'!", 'status_description' => "Work center '{$workCenter}' not found against plant code '$plantCode'!",
], 404); ], 404);
} }
$machine = Machine::where('plant_id', $plantId)->where('line_id', $lineId)->where('work_center', $workCenter)->first(); $machineAgaPlantLine = Machine::where('plant_id', $plantId)->where('line_id', $lineId)->where('work_center', $workCenter)->first();
if (! $machine) { if (! $machineAgaPlantLine) {
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => "Work center '{$workCenter}' not found against plant code '$plantCode' and line name '$lineName'!", 'status_description' => "Work center '{$workCenter}' not found against plant code '$plantCode' and line name '$lineName'!",
], 404); ], 404);
} }
$machineId = $machine->id; $machineId = $machineAgaPlantLine->id;
$data = $request->all(); $data = $request->all();

View File

@@ -13,7 +13,10 @@ class ObdController extends Controller
/** /**
* Display a listing of the resource. * Display a listing of the resource.
*/ */
public function index() {} public function index()
{
}
/** /**
* Store a newly created resource in storage. * Store a newly created resource in storage.
@@ -21,40 +24,36 @@ class ObdController extends Controller
public function store(Request $request) public function store(Request $request)
{ {
$expectedUser = env('API_AUTH_USER'); $expectedUser = env('API_AUTH_USER');
$expectedPw = env('API_AUTH_PW'); $expectedPw = env('API_AUTH_PW');
$header_auth = $request->header('Authorization'); $header_auth = $request->header('Authorization');
$expectedToken = $expectedUser.':'.$expectedPw; $expectedToken = $expectedUser . ':' . $expectedPw;
// if("Bearer " . $expectedToken != $header_auth) // if("Bearer " . $expectedToken != $header_auth)
// { // {
// return response("ERROR: Unauthorized", 403) // return response("ERROR: Unauthorized", 403)
// ->header('Content-Type', 'text/plain'); // ->header('Content-Type', 'text/plain');
// } // }
if ('Bearer '.$expectedToken != $header_auth) { if ("Bearer " . $expectedToken != $header_auth)
{
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => 'Invalid authorization token!', 'status_description' => 'Invalid authorization token!'
], 403); ], 403);
} }
try { try
{
$data = $request->all(); $data = $request->all();
// Validate required fields // Validate required fields
$missing = []; $missing = [];
if (empty($data['plant_name'])) { if (empty($data['plant_name'])) $missing[] = 'plant_name';
$missing[] = 'plant_name'; if (empty($data['obd_number'])) $missing[] = 'obd_number';
} if (empty($data['line_numbers'])) $missing[] = 'line_numbers';
if (empty($data['obd_number'])) {
$missing[] = 'obd_number';
}
if (empty($data['line_numbers'])) {
$missing[] = 'line_numbers';
}
if (! empty($missing)) {
$message = 'Missing required field(s): '.implode(', ', $missing);
if (!empty($missing))
{
$message = "Missing required field(s): " . implode(', ', $missing);
// return response($message, 400)->header('Content-Type', 'text/plain'); // return response($message, 400)->header('Content-Type', 'text/plain');
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
@@ -64,49 +63,53 @@ class ObdController extends Controller
// OBD Number validation // OBD Number validation
$obdNumber = $data['obd_number']; $obdNumber = $data['obd_number'];
if (Str::length($obdNumber) < 8 || ! ctype_alnum($obdNumber)) { if (Str::length($obdNumber) < 8 || !ctype_alnum($obdNumber))
{
// return response("ERROR: OBD Number should contain minimum 8 digits", 400) // return response("ERROR: OBD Number should contain minimum 8 digits", 400)
// ->header('Content-Type', 'text/plain'); // ->header('Content-Type', 'text/plain');
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => 'OBD number should contain minimum 8 digit alpha-numeric values only!', 'status_description' => "OBD number should contain minimum 8 digit alpha-numeric values only!"
], 400); ], 400);
} }
// Lookup plant_id by plant_name // Lookup plant_id by plant_name
$plantId = Plant::where('name', $data['plant_name'])->value('id'); $plantId = Plant::where('name', $data['plant_name'])->value('id');
if (! $plantId) { if (!$plantId) {
// return response("ERROR: Plant '{$data['plant_name']}' not found", 404) // return response("ERROR: Plant '{$data['plant_name']}' not found", 404)
// ->header('Content-Type', 'text/plain'); // ->header('Content-Type', 'text/plain');
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => "Plant '{$data['plant_name']}' not found!", 'status_description' => "Plant '{$data['plant_name']}' not found!"
], 404); ], 404);
} }
// Check if OBD number exists for that plant //Check if OBD number exists for that plant
$obdRecords = WeightValidation::where('plant_id', $plantId) $obdRecords = WeightValidation::where('plant_id', $plantId)
->where('obd_number', $obdNumber) ->where('obd_number', $obdNumber)
->exists(); ->exists();
if (! $obdRecords) { if (!$obdRecords)
{
// return response( "ERROR: OBD Number '$obdNumber' not found for plant '{$data['plant_name']}'",404)->header('Content-Type', 'text/plain'); // return response( "ERROR: OBD Number '$obdNumber' not found for plant '{$data['plant_name']}'",404)->header('Content-Type', 'text/plain');
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => "OBD Number '$obdNumber' not found for plant '{$data['plant_name']}'!", 'status_description' => "OBD Number '$obdNumber' not found for plant '{$data['plant_name']}'!"
], 404); ], 404);
} }
$missingLines = []; $missingLines = [];
$alreadyUpdatedLines = []; $alreadyUpdatedLines = [];
foreach ($data['line_numbers'] as $line) { foreach ($data['line_numbers'] as $line)
if ($line['line_number'] == '' || $line['line_number'] == null) { {
if ($line['line_number'] == '' || $line['line_number'] == null)
{
// return response("ERROR: Line Number can't be empty", 400) // return response("ERROR: Line Number can't be empty", 400)
// ->header('Content-Type', 'text/plain'); // ->header('Content-Type', 'text/plain');
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => "Line Number can't be empty!", 'status_description' => "Line Number can't be empty!"
], 404); ], 404);
} }
@@ -115,46 +118,50 @@ class ObdController extends Controller
->where('line_number', $line['line_number']) ->where('line_number', $line['line_number'])
->first(); ->first();
if (! $record) { if (!$record)
{
$missingLines[] = $line['line_number']; $missingLines[] = $line['line_number'];
continue; continue;
} }
$mandatoryFields = ['vehicle_number', 'bundle_number', 'heat_number', 'picked_weight', 'scanned_by']; $mandatoryFields = ['vehicle_number', 'bundle_number', 'heat_number', 'picked_weight', 'scanned_by'];
$missingFields = []; $missingFields = [];
foreach ($mandatoryFields as $field) { foreach ($mandatoryFields as $field)
if ($line[$field] == '' || $line[$field] == null) { {
if ($line[$field] == '' || $line[$field] == null)
{
$missingFields[] = ucwords(str_replace('_', ' ', $field)); $missingFields[] = ucwords(str_replace('_', ' ', $field));
} }
} }
if (! empty($missingFields)) { if (!empty($missingFields))
if (count($missingFields) == 1) { {
if (count($missingFields) == 1)
{
$fieldsString = $missingFields[0]; $fieldsString = $missingFields[0];
} else { }
else
{
$lastField = array_pop($missingFields); $lastField = array_pop($missingFields);
$fieldsString = implode(', ', $missingFields).' and '.$lastField; $fieldsString = implode(', ', $missingFields) . ' and ' . $lastField;
} }
$message = $fieldsString." can't be empty for line_number {$line['line_number']}!"; $message = $fieldsString . " can't be empty for line_number {$line['line_number']}!";
// return response($message, 400)->header('Content-Type', 'text/plain'); // return response($message, 400)->header('Content-Type', 'text/plain');
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => $message, 'status_description' => $message
], 400); ], 400);
} }
} }
if (! empty($missingLines)) { if (!empty($missingLines)) {
$message = 'Line(s) '.implode(', ', $missingLines)." not found for Plant '{$data['plant_name']}' and OBD Number: '{$data['obd_number']}'!"; $message = "Line(s) " . implode(', ', $missingLines) . " not found for Plant '{$data['plant_name']}' and OBD Number: '{$data['obd_number']}'!";
// return response($message, 404)->header('Content-Type', 'text/plain'); // return response($message, 404)->header('Content-Type', 'text/plain');
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => $message, 'status_description' => $message
], 404); ], 404);
} }
@@ -162,11 +169,11 @@ class ObdController extends Controller
$internalDuplicates = []; $internalDuplicates = [];
$bundleChecks = []; $bundleChecks = [];
// Check for duplicates within the request //Check for duplicates within the request
foreach ($data['line_numbers'] as $line) { foreach ($data['line_numbers'] as $line) {
$lineNumber = $line['line_number']; $lineNumber = $line['line_number'];
$bundleNumber = trim((string) $line['bundle_number']); $bundleNumber = trim((string)$line['bundle_number']);
$pairKey = $lineNumber.'|'.$bundleNumber; $pairKey = $lineNumber . '|' . $bundleNumber;
if (isset($seenPairs[$pairKey])) { if (isset($seenPairs[$pairKey])) {
$internalDuplicates[] = "Line Number {$lineNumber} with Bundle Number {$bundleNumber}"; $internalDuplicates[] = "Line Number {$lineNumber} with Bundle Number {$bundleNumber}";
@@ -179,7 +186,7 @@ class ObdController extends Controller
} }
} }
// Check for duplicates in the database //Check for duplicates in the database
$bundleNumbers = array_column($bundleChecks, 'bundle_number'); $bundleNumbers = array_column($bundleChecks, 'bundle_number');
$lineNumbers = array_column($bundleChecks, 'line_number'); $lineNumbers = array_column($bundleChecks, 'line_number');
@@ -195,10 +202,10 @@ class ObdController extends Controller
$line = $row->line_number; $line = $row->line_number;
$bundle = $row->bundle_number; $bundle = $row->bundle_number;
if (! isset($grouped[$line])) { if (!isset($grouped[$line])) {
$grouped[$line] = []; $grouped[$line] = [];
} }
if ($bundle && ! in_array($bundle, $grouped[$line])) { if ($bundle && !in_array($bundle, $grouped[$line])) {
$grouped[$line][] = $bundle; $grouped[$line][] = $bundle;
} }
} }
@@ -209,80 +216,85 @@ class ObdController extends Controller
$dbDuplicates[] = "Line {$line}, has bundle numbers : {$bundlesStr}"; $dbDuplicates[] = "Line {$line}, has bundle numbers : {$bundlesStr}";
} }
// Return all errors if any duplicates found //Return all errors if any duplicates found
$allDuplicates = []; $allDuplicates = [];
if (! empty($internalDuplicates)) { if (!empty($internalDuplicates))
$allDuplicates[] = 'Duplicate(s) '.implode(', ', $internalDuplicates); {
$allDuplicates[] = "Duplicate(s) " . implode(', ', $internalDuplicates);
} }
if (! empty($dbDuplicates)) { if (!empty($dbDuplicates))
$allDuplicates[] = 'Already exists in database: '.implode('; ', $dbDuplicates); {
$allDuplicates[] = "Already exists in database: " . implode('; ', $dbDuplicates);
} }
if (! empty($allDuplicates)) { if (!empty($allDuplicates)) {
// return response( // return response(
// "Error:" . implode("\n", $allDuplicates), // "Error:" . implode("\n", $allDuplicates),
// 400 // 400
// )->header('Content-Type', 'text/plain'); // )->header('Content-Type', 'text/plain');
$retRes = implode(', and ', $allDuplicates); $retRes = implode(", and ", $allDuplicates);
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => $retRes, 'status_description' => $retRes
], 400); ], 400);
} }
// .. //..
$updated = 0; $updated = 0;
$inserted = 0; $inserted = 0;
$updatedLines = []; $updatedLines = [];
$insertedLines = []; $insertedLines = [];
$lineTracker = []; $lineTracker = [];
foreach ($data['line_numbers'] as $line) { foreach ($data['line_numbers'] as $line)
{
$lineNumber = $line['line_number']; $lineNumber = $line['line_number'];
$existing = WeightValidation::where('plant_id', $plantId) $existing = WeightValidation::where('plant_id', $plantId)
->where('obd_number', $obdNumber) ->where('obd_number', $obdNumber)
->where('line_number', $lineNumber) ->where('line_number', $lineNumber)
->where(function ($query) { ->where(function ($query) {
$query->whereNull('bundle_number') $query->whereNull('bundle_number')
->orWhere('bundle_number', ''); ->orWhere('bundle_number', '');
}) })
->first(); ->first();
if ($existing) { if($existing)
{
$existing->update([ $existing->update([
'vehicle_number' => $line['vehicle_number'] ?? null, 'vehicle_number' => $line['vehicle_number'] ?? null,
'bundle_number' => $line['bundle_number'] ?? null, 'bundle_number' => $line['bundle_number'] ?? null,
'heat_number' => $line['heat_number'] ?? null, 'heat_number' => $line['heat_number'] ?? null,
'picked_weight' => $line['picked_weight'] ?? null, 'picked_weight' => $line['picked_weight'] ?? null,
'scanned_by' => $line['scanned_by'] ?? null, 'scanned_by' => $line['scanned_by'] ?? null,
'updated_at' => now(), 'updated_at' => now(),
]); ]);
$updated++; $updated++;
$updatedLines[] = $lineNumber; $updatedLines[] = $lineNumber;
$lineTracker[$lineNumber] = 1; $lineTracker[$lineNumber] = 1;
} else { }
else
{
$original = WeightValidation::where([ $original = WeightValidation::where([
'plant_id' => $plantId, 'plant_id' => $plantId,
'obd_number' => $obdNumber, 'obd_number' => $obdNumber,
'line_number' => $lineNumber, 'line_number' => $lineNumber,
])->orderBy('id')->first(); ])->orderBy('id')->first();
WeightValidation::create([ WeightValidation::create([
'plant_id' => $plantId, 'plant_id' => $plantId,
'obd_number' => $obdNumber, 'obd_number' => $obdNumber,
'line_number' => $lineNumber, 'line_number' => $lineNumber,
'item_id' => $original->item_id ?? null, 'item_id' => $original->item_id ?? null,
'vehicle_number' => $line['vehicle_number'] ?? null, 'vehicle_number' => $line['vehicle_number'] ?? null,
'bundle_number' => $line['bundle_number'] ?? null, 'bundle_number' => $line['bundle_number'] ?? null,
'picked_weight' => $line['picked_weight'] ?? null, 'picked_weight' => $line['picked_weight'] ?? null,
'scanned_by' => $line['scanned_by'] ?? null, 'scanned_by' => $line['scanned_by'] ?? null,
'batch_number' => $original->batch_number ?? null, 'batch_number' => $original->batch_number ?? null,
'heat_number' => $line['heat_number'] ?? null, 'heat_number' => $line['heat_number'] ?? null,
'obd_weight' => $original->obd_weight ?? null, 'obd_weight' => $original->obd_weight ?? null,
'created_at' => now(), 'created_at' => now(),
'updated_at' => now(), 'updated_at' => now(),
]); ]);
$inserted++; $inserted++;
@@ -294,11 +306,11 @@ class ObdController extends Controller
$responseMessage = "OBD Number '{$obdNumber}'"; $responseMessage = "OBD Number '{$obdNumber}'";
if ($updated > 0) { if ($updated > 0) {
$responseMessage .= ' updated successfully. Line Numbers: {'.implode(', ', $updatedLines).'}'; $responseMessage .= " updated successfully. Line Numbers: {" . implode(', ', $updatedLines) . "}";
} }
if ($inserted > 0) { if ($inserted > 0) {
$responseMessage .= 'Inserted successfully. Line Numbers: {'.implode(', ', $insertedLines).'}'; $responseMessage .= "Inserted successfully. Line Numbers: {" . implode(', ', $insertedLines) . "}";
} }
// return response($responseMessage, 200) // return response($responseMessage, 200)
@@ -308,28 +320,31 @@ class ObdController extends Controller
'status_description' => $responseMessage, 'status_description' => $responseMessage,
], 200); ], 200);
} catch (\Exception $e) { }
catch (\Exception $e)
{
// response("ERROR: Server error", 500)->header('Content-Type', 'text/plain'); // response("ERROR: Server error", 500)->header('Content-Type', 'text/plain');
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => 'Store OBD data internal server error : '.$e?->getCode(), 'status_description' => 'Store OBD data internal server error : '.$e?->getCode()
], 500); ], 500);
} }
} }
// Route::get('obd/get-test-datas', [ObdController::class, 'get_test']); //Route::get('obd/get-test-datas', [ObdController::class, 'get_test']);
public function get_test(Request $request) public function get_test(Request $request)
{ {
$expectedUser = env('API_AUTH_USER'); $expectedUser = env('API_AUTH_USER');
$expectedPw = env('API_AUTH_PW'); $expectedPw = env('API_AUTH_PW');
$header_auth = $request->header('Authorization'); $header_auth = $request->header('Authorization');
$expectedToken = $expectedUser.':'.$expectedPw; $expectedToken = $expectedUser . ':' . $expectedPw;
if ('Bearer '.$expectedToken != $header_auth) { if ("Bearer " . $expectedToken != $header_auth)
{
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => 'Invalid authorization token!', 'status_description' => 'Invalid authorization token!'
], 403); ], 403);
} }
@@ -359,41 +374,48 @@ class ObdController extends Controller
// ], 400); // ], 400);
// } // }
$productionOrder = $request->header('production-order'); $productionOrder = $request->header('production-order');
if (empty($productionOrder)) { if (empty($productionOrder))
{
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => "Production order can't be empty!", 'status_description' => "Production order can't be empty!"
], 400); ], 400);
} elseif (Str::length($productionOrder) < 7 || ! is_numeric($productionOrder)) { }
else if(Str::length($productionOrder) < 7 || !is_numeric($productionOrder))
{
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => 'Production order should contain minimum 7 digits numeric values only!', 'status_description' => "Production order should contain minimum 7 digits numeric values only!"
], 400); ], 400);
} }
$prodOrderExist = ($productionOrder == '1234567' || $productionOrder == '7654321'); $prodOrderExist = ($productionOrder == '1234567' || $productionOrder == '7654321');
if (! $prodOrderExist) { if (!$prodOrderExist)
{
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => 'Production order not found!', 'status_description' => "Production order not found!"
], 400); ], 400);
} }
try { try
// return response("Successfully GET request Received", 200)->header('Content-Type', 'text/plain'); {
//return response("Successfully GET request Received", 200)->header('Content-Type', 'text/plain');
$itemCode = Item::where('code', '123456')->where('plant_id', 1)->first(); $itemCode = Item::where('code', '123456')->where('plant_id', 1)->first();
return response()->json([ return response()->json([
'item_code' => $itemCode->code, 'item_code' => $itemCode->code,
'item_description' => $itemCode->description, 'item_description' => $itemCode->description
], 200); ], 200);
} catch (\Exception $e) { }
// return response("ERROR: GET test data server error", 500)->header('Content-Type', 'text/plain'); catch (\Exception $e)
{
//return response("ERROR: GET test data server error", 500)->header('Content-Type', 'text/plain');
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => 'Get test data internal server error : '.$e?->getCode(), 'status_description' => 'Get test data internal server error : '.$e?->getCode()
], 500); ], 500);
} }
} }
@@ -401,9 +423,9 @@ class ObdController extends Controller
public function get_obd(Request $request) public function get_obd(Request $request)
{ {
$expectedUser = env('API_AUTH_USER'); $expectedUser = env('API_AUTH_USER');
$expectedPw = env('API_AUTH_PW'); $expectedPw = env('API_AUTH_PW');
$header_auth = $request->header('Authorization'); $header_auth = $request->header('Authorization');
$expectedToken = $expectedUser.':'.$expectedPw; $expectedToken = $expectedUser . ':' . $expectedPw;
// if ("Bearer " . $expectedToken != $header_auth) // if ("Bearer " . $expectedToken != $header_auth)
// { // {
@@ -411,81 +433,88 @@ class ObdController extends Controller
// ->header('Content-Type', 'text/plain'); // ->header('Content-Type', 'text/plain');
// } // }
if ('Bearer '.$expectedToken != $header_auth) { if ("Bearer " . $expectedToken != $header_auth)
{
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => 'Invalid authorization token!', 'status_description' => 'Invalid authorization token!'
], 403); ], 403);
} }
$plantName = $request->header('plant-name'); $plantName = $request->header('plant-name');
$obdNumber = $request->header('obd-number'); $obdNumber = $request->header('obd-number');
if (empty($plantName)) { if (empty($plantName))
{
// return response("ERROR: Plant Name can't be empty", 400) // return response("ERROR: Plant Name can't be empty", 400)
// ->header('Content-Type', 'text/plain'); // ->header('Content-Type', 'text/plain');
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => "Plant Name can't be empty!", 'status_description' => "Plant Name can't be empty!"
], 400); ], 400);
} elseif (empty($obdNumber)) { }
else if(empty($obdNumber))
{
// return response("ERROR: OBD Number can't be empty", 400) // return response("ERROR: OBD Number can't be empty", 400)
// ->header('Content-Type', 'text/plain'); // ->header('Content-Type', 'text/plain');
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => "OBD Number can't be empty!", 'status_description' => "OBD Number can't be empty!"
], 400); ], 400);
} elseif (Str::length($obdNumber) < 8 || ! ctype_alnum($obdNumber)) { }
else if(Str::length($obdNumber) < 8 || !ctype_alnum($obdNumber))
{
// return response("ERROR: OBD Number should contain minimum 8 digits: '$obdNumber'", 400) // return response("ERROR: OBD Number should contain minimum 8 digits: '$obdNumber'", 400)
// ->header('Content-Type', 'text/plain'); // ->header('Content-Type', 'text/plain');
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => 'OBD number should contain minimum 8 digit alpha-numeric values only!', 'status_description' => "OBD number should contain minimum 8 digit alpha-numeric values only!"
], 400); ], 400);
} }
// Fetch the plant id by name // Fetch the plant id by name
$plantId = Plant::where('name', $plantName)->value('id'); $plantId = Plant::where('name', $plantName)->value('id');
if (! $plantId) { if (!$plantId) {
// return response("ERROR: Plant not found", 400) // return response("ERROR: Plant not found", 400)
// ->header('Content-Type', 'text/plain'); // ->header('Content-Type', 'text/plain');
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => 'Plant not found!', 'status_description' => "Plant not found!"
], 400); ], 400);
} }
// $records = WeightValidation::where('plant_id', $plantId) // $records = WeightValidation::where('plant_id', $plantId)
// ->where('obd_number', $obdNumber) // ->where('obd_number', $obdNumber)
// ->get(); // ->get();
// Fetch and filter records where vehicle_number is empty or null // Fetch and filter records where vehicle_number is empty or null
$exists = WeightValidation::where('plant_id', $plantId) $exists = WeightValidation::where('plant_id', $plantId)
->where('obd_number', $obdNumber) ->where('obd_number', $obdNumber)
->exists(); ->exists();
if (! $exists) { if (!$exists)
{
// return response("ERROR: OBD number $obdNumber does not exist for plant '$plantName'", 404) // return response("ERROR: OBD number $obdNumber does not exist for plant '$plantName'", 404)
// ->header('Content-Type', 'text/plain'); // ->header('Content-Type', 'text/plain');
return response()->json([ return response()->json([
'status_code' => 'ERROR', 'status_code' => 'ERROR',
'status_description' => "OBD number $obdNumber does not exist for plant '$plantName'!", 'status_description' => "OBD number $obdNumber does not exist for plant '$plantName'!"
], 400); ], 400);
} }
$records = WeightValidation::where('plant_id', $plantId) $records = WeightValidation::where('plant_id', $plantId)
->where('obd_number', $obdNumber) ->where('obd_number', $obdNumber)
->get() ->get()
->filter(function ($record) { ->filter(function ($record) {
return $record->vehicle_number == '' || $record->vehicle_number == null; return $record->vehicle_number == '' || $record->vehicle_number == null;
}); });
if ($records->isEmpty()) { if ($records->isEmpty()) {
// return response("SUCCESS: Already scanning process completed for the OBD Number", 200)->header('Content-Type', values: 'text/plain'); // return response("SUCCESS: Already scanning process completed for the OBD Number", 200)->header('Content-Type', values: 'text/plain');
return response()->json([ return response()->json([
'status_code' => 'SUCCESS', 'status_code' => 'SUCCESS',
'status_description' => 'Already weight validation completed for the OBD Number!', 'status_description' => "Already weight validation completed for the OBD Number!"
], 200); ], 200);
} }
@@ -501,20 +530,18 @@ class ObdController extends Controller
'OBD_Number' => $obdNumber, 'OBD_Number' => $obdNumber,
'Line_Numbers' => $records->map(function ($item) use ($itemCodes) { 'Line_Numbers' => $records->map(function ($item) use ($itemCodes) {
$itemInfo = $itemCodes[$item->item_id] ?? null; $itemInfo = $itemCodes[$item->item_id] ?? null;
return [ return [
'Line' => $item->line_number ?? '', 'Line' => $item->line_number ?? "",
'Material_Code' => $itemInfo->code ?? '', 'Material_Code' => $itemInfo->code ?? "",
'Material_Description' => $itemInfo->description ?? '', 'Material_Description' => $itemInfo->description ?? "",
'Batch_Number' => $item->batch_number ?? '', 'Batch_Number' => $item->batch_number ?? "",
// 'Heat_Number' => $item->heat_number ?? "", // 'Heat_Number' => $item->heat_number ?? "",
'Actual_Weight' => $item->obd_weight ?? '', 'Actual_Weight' => $item->obd_weight ?? "",
]; ];
})->values()->toArray(), })->values()->toArray()
], ]
], ]
]; ];
return response()->json($ObdResponseStructure); return response()->json($ObdResponseStructure);
} }

View File

@@ -1,317 +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

@@ -994,21 +994,6 @@ class PdfController extends Controller
]); ]);
} }
} else { } else {
if ($coilNo >= 1) {
$prevCoilNo = (string) ($coilNo - 1);
$existPrevCoil = ProcessOrder::where('plant_id', $plantId)
->where('process_order', $processOrder)
->where('coil_number', $prevCoilNo)
->first();
if (! $existPrevCoil) {
return response()->json([
'status_code' => 'ERROR',
'status_description' => "Previouse coil number '{$prevCoilNo}' not exist against plant code '{$plantCode}' and process order '{$processOrder}'!",
], 404);
}
}
$existingCoil = ProcessOrder::where('plant_id', $plantId) $existingCoil = ProcessOrder::where('plant_id', $plantId)
->where('process_order', $processOrder) ->where('process_order', $processOrder)
->where('line_id', $lineNamePlantId) ->where('line_id', $lineNamePlantId)
@@ -1070,21 +1055,6 @@ class PdfController extends Controller
], 404); ], 404);
} }
if ($coilNo >= 1) {
$prevCoilNo = (string) ($coilNo - 1);
$existPrevCoil = ProcessOrder::where('plant_id', $plantId)
->where('process_order', $processOrder)
->where('coil_number', $prevCoilNo)
->first();
if (! $existPrevCoil) {
return response()->json([
'status_code' => 'ERROR',
'status_description' => "Previouse coil number '{$prevCoilNo}' not exist against plant code '{$plantCode}' and process order '{$processOrder}'!",
], 404);
}
}
ProcessOrder::Create( ProcessOrder::Create(
[ [
'plant_id' => $plantId, 'plant_id' => $plantId,

View File

@@ -77,6 +77,14 @@ class ProductionStickerReprintController extends Controller
} }
else else
{ {
// if ($item->category == 'Submersible Motor')
// {
// $copies = 1;
// }
// elseif ($item->category == 'Submersible Pump')
// {
// $copies = 1;
// }
$copies = 1; $copies = 1;
if ($serialNumberRaw) { if ($serialNumberRaw) {

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,11 +203,9 @@ 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',
'items.hourly_quantity as hourly_quantity',
'lines.name as line_name', 'lines.name as line_name',
// 'lines.line_capacity as line_capacity', 'lines.line_capacity as line_capacity',
'plants.name as plant_name' 'plants.name as plant_name'
) )
->get(); ->get();
@@ -235,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) =>
@@ -258,10 +247,10 @@ class ProductionTargetPlan extends Component
$remainingDays = (int) ($row['working_days'] ?? 0); $remainingDays = (int) ($row['working_days'] ?? 0);
$lineCapacity = (float) ($row['line_capacity'] ?? 0); $lineCapacity = (float) ($row['line_capacity'] ?? 0);
$dailyHourlyQuantity = (float) ($row['hourly_quantity'] ?? 0); $dailyLineCapacity = (float) ($row['line_capacity'] ?? 0);
$row['category'] = $row['category'] ?? '-';
$row['daily_hourly_quantity'] = []; $row['daily_line_capacity'] = [];
$row['daily_target_dynamic'] = []; $row['daily_target_dynamic'] = [];
$row['produced_quantity'] = []; $row['produced_quantity'] = [];
@@ -271,7 +260,7 @@ class ProductionTargetPlan extends Component
// Skip leave dates fast // Skip leave dates fast
if (isset($leaveDates) && in_array($date, $leaveDates)) { if (isset($leaveDates) && in_array($date, $leaveDates)) {
$row['daily_hourly_quantity'][$date] = '-'; $row['daily_line_capacity'][$date] = '-';
$row['daily_target_dynamic'][$date] = '-'; $row['daily_target_dynamic'][$date] = '-';
$row['produced_quantity'][$date] = '-'; $row['produced_quantity'][$date] = '-';
continue; continue;
@@ -285,7 +274,7 @@ class ProductionTargetPlan extends Component
$row['daily_target_dynamic'][$date] = $todayTarget; $row['daily_target_dynamic'][$date] = $todayTarget;
$row['produced_quantity'][$date] = $producedQty; $row['produced_quantity'][$date] = $producedQty;
$row['daily_hourly_quantity'][$date] = $dailyHourlyQuantity * 22.5; $row['daily_line_capacity'][$date] = $dailyLineCapacity;
// Carry forward remaining qty // Carry forward remaining qty
$remainingQty = max(0, $remainingQty - $producedQty); $remainingQty = max(0, $remainingQty - $producedQty);
@@ -302,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

@@ -3,6 +3,7 @@
namespace App\Models; namespace App\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
class Item extends Model class Item extends Model
@@ -59,11 +60,6 @@ class Item extends Model
return $this->hasMany(ProductCharacteristicsMaster::class); return $this->hasMany(ProductCharacteristicsMaster::class);
} }
public function characteristicValues()
{
return $this->hasMany(CharacteristicValue::class);
}
public function weightValidations() public function weightValidations()
{ {
return $this->hasMany(WeightValidation::class); return $this->hasMany(WeightValidation::class);

View File

@@ -41,11 +41,6 @@ class Line extends Model
return $this->belongsTo(Block::class); return $this->belongsTo(Block::class);
} }
public function qualityValidations()
{
return $this->hasMany(QualityValidation::class);
}
public function testingPanelReadings() public function testingPanelReadings()
{ {
return $this->hasMany(TestingPanelReading::class); return $this->hasMany(TestingPanelReading::class);
@@ -56,21 +51,6 @@ class Line extends Model
return $this->belongsTo(WorkGroupMaster::class); return $this->belongsTo(WorkGroupMaster::class);
} }
public function processOrders()
{
return $this->hasMany(ProcessOrder::class);
}
public function productCharacteristicsMasters()
{
return $this->hasMany(ProductCharacteristicsMaster::class);
}
public function characteristicValues()
{
return $this->hasMany(CharacteristicValue::class);
}
public function workGroup1() public function workGroup1()
{ {
return $this->belongsTo(WorkGroupMaster::class, 'work_group1_id', 'id'); return $this->belongsTo(WorkGroupMaster::class, 'work_group1_id', 'id');

View File

@@ -12,9 +12,9 @@ class Machine extends Model
protected $fillable = [ protected $fillable = [
'plant_id', 'plant_id',
'line_id', 'line_id',
'work_group_master_id', 'work_group_master_id',
'name', 'name',
'work_center', 'work_center',
]; ];
@@ -23,7 +23,7 @@ class Machine extends Model
return $this->belongsTo(Plant::class); return $this->belongsTo(Plant::class);
} }
public function line(): BelongsTo public function line(): BelongsTo
{ {
return $this->belongsTo(Line::class); return $this->belongsTo(Line::class);
} }
@@ -33,16 +33,6 @@ class Machine extends Model
return $this->belongsTo(WorkGroupMaster::class); return $this->belongsTo(WorkGroupMaster::class);
} }
public function productCharacteristicsMasters()
{
return $this->hasMany(ProductCharacteristicsMaster::class);
}
public function characteristicValues()
{
return $this->hasMany(CharacteristicValue::class);
}
public function testingPanelReadings() public function testingPanelReadings()
{ {
return $this->hasMany(TestingPanelReading::class); return $this->hasMany(TestingPanelReading::class);
@@ -52,4 +42,5 @@ class Machine extends Model
{ {
return $this->hasMany(EquipmentMaster::class, 'machine_id', 'id'); return $this->hasMany(EquipmentMaster::class, 'machine_id', 'id');
} }
} }

View File

@@ -25,12 +25,12 @@ class Plant extends Model
public function blocks(): HasMany public function blocks(): HasMany
{ {
return $this->hasMany(Block::class, 'plant_id', 'id'); return $this->hasMany(Block::class);
} }
public function lines(): HasMany public function lines(): HasMany
{ {
return $this->hasMany(Line::class, 'plant_id', 'id'); return $this->hasMany(Line::class);
} }
public function getLineNames() public function getLineNames()
@@ -40,27 +40,27 @@ class Plant extends Model
public function items(): HasMany public function items(): HasMany
{ {
return $this->hasMany(Item::class, 'plant_id', 'id'); return $this->hasMany(Item::class);
} }
public function stickersMasters(): HasMany public function stickersMasters(): HasMany
{ {
return $this->hasMany(StickerMaster::class, 'plant_id', 'id'); return $this->hasMany(StickerMaster::class);
} }
public function invoiceValidations() public function invoiceValidations()
{ {
return $this->hasMany(InvoiceValidation::class, 'plant_id', 'id'); return $this->hasMany(InvoiceValidation::class, 'sticker_master_id');
} }
public function qualityValidations() public function qualityValidations()
{ {
return $this->hasMany(QualityValidation::class, 'plant_id', 'id'); return $this->hasMany(QualityValidation::class, 'sticker_master_id');
} }
public function testingPanelReadings() public function testingPanelReadings()
{ {
return $this->hasMany(TestingPanelReading::class, 'plant_id', 'id'); return $this->hasMany(TestingPanelReading::class);
} }
public function guardNames() public function guardNames()
@@ -88,21 +88,6 @@ class Plant extends Model
return $this->hasMany(WorkGroupMaster::class, 'plant_id', 'id'); return $this->hasMany(WorkGroupMaster::class, 'plant_id', 'id');
} }
public function processOrders()
{
return $this->hasMany(ProcessOrder::class, 'plant_id', 'id');
}
public function productCharacteristicsMasters()
{
return $this->hasMany(ProductCharacteristicsMaster::class, 'plant_id', 'id');
}
public function characteristicValues()
{
return $this->hasMany(CharacteristicValue::class, 'plant_id', 'id');
}
public function equipmentMasters() public function equipmentMasters()
{ {
return $this->hasMany(EquipmentMaster::class, 'plant_id', 'id'); return $this->hasMany(EquipmentMaster::class, 'plant_id', 'id');

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

@@ -8,7 +8,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
class WorkGroupMaster extends Model class WorkGroupMaster extends Model
{ {
use SoftDeletes; use SoftDeletes;
protected $fillable = [ protected $fillable = [
'plant_id', 'plant_id',
@@ -25,11 +25,6 @@ class WorkGroupMaster extends Model
return $this->belongsTo(Plant::class); return $this->belongsTo(Plant::class);
} }
public function productCharacteristicsMasters()
{
return $this->hasMany(ProductCharacteristicsMaster::class);
}
// public function rejectReasons() // public function rejectReasons()
// { // {
// return $this->hasMany(RejectReason::class, 'work_group_master_id', 'id'); // return $this->hasMany(RejectReason::class, 'work_group_master_id', '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

@@ -213,7 +213,7 @@ return [
'user_model' => \App\Models\User::class, 'user_model' => \App\Models\User::class,
'user_model_class' => \App\Models\User::class, // 'user_model_class' => \App\Models\User::class,
'policies_namespace' => 'App\Policies', 'policies_namespace' => 'App\Policies',
], ],

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

@@ -105,9 +105,6 @@ return new class extends Migration
zmm_tagno TEXT DEFAULT NULL, zmm_tagno TEXT DEFAULT NULL,
zmm_year TEXT DEFAULT NULL, zmm_year TEXT DEFAULT NULL,
zmm_laser_name TEXT DEFAULT NULL, zmm_laser_name TEXT DEFAULT NULL,
zmm_logo_cp TEXT DEFAULT NULL,
zmm_logo_ce TEXT DEFAULT NULL,
zmm_logo_nsf TEXT DEFAULT NULL,
zmm_beenote TEXT DEFAULT NULL, zmm_beenote TEXT DEFAULT NULL,
zmm_beenumber TEXT DEFAULT NULL, zmm_beenumber TEXT DEFAULT NULL,
zmm_beestar TEXT DEFAULT NULL, zmm_beestar TEXT DEFAULT NULL,
@@ -132,6 +129,9 @@ return new class extends Migration
zmm_newt_motor TEXT DEFAULT NULL, zmm_newt_motor TEXT DEFAULT NULL,
zmm_newt_pf TEXT DEFAULT NULL, zmm_newt_pf TEXT DEFAULT NULL,
zmm_newt_pump TEXT DEFAULT NULL, zmm_newt_pump TEXT DEFAULT NULL,
zmm_logo_cp TEXT DEFAULT NULL,
zmm_logo_ce TEXT DEFAULT NULL,
zmm_logo_nsf TEXT DEFAULT NULL,
zmm_packtype TEXT DEFAULT NULL, zmm_packtype TEXT DEFAULT NULL,
zmm_panel TEXT DEFAULT NULL, zmm_panel TEXT DEFAULT NULL,
zmm_performance_factor TEXT DEFAULT NULL, zmm_performance_factor TEXT DEFAULT NULL,
@@ -143,34 +143,24 @@ return new class extends Migration
zmm_usp TEXT DEFAULT NULL, zmm_usp TEXT DEFAULT NULL,
mark_status TEXT DEFAULT NULL, mark_status TEXT DEFAULT NULL,
marked_datetime TIMESTAMP DEFAULT NULL, marked_datetime TIMESTAMP DEFAULT NULL,
marked_physical_count TEXT DEFAULT '0',
marked_expected_time TEXT DEFAULT '0',
marked_by TEXT DEFAULT NULL, marked_by TEXT DEFAULT NULL,
man_marked_status TEXT DEFAULT '0', man_marked_status TEXT DEFAULT '0',
man_marked_datetime TIMESTAMP DEFAULT NULL, man_marked_datetime TIMESTAMP DEFAULT NULL,
man_marked_by TEXT DEFAULT NULL, man_marked_by TEXT DEFAULT NULL,
motor_marked_status TEXT DEFAULT NULL, motor_marked_status TEXT DEFAULT NULL,
motor_marked_physical_count TEXT DEFAULT '0',
motor_expected_time TEXT DEFAULT '0',
motor_marked_by TEXT DEFAULT NULL, motor_marked_by TEXT DEFAULT NULL,
pump_marked_status TEXT DEFAULT NULL, pump_marked_status TEXT DEFAULT NULL,
pump_marked_physical_count TEXT DEFAULT '0',
pump_expected_time TEXT DEFAULT '0',
pump_marked_by TEXT DEFAULT NULL, pump_marked_by TEXT DEFAULT NULL,
name_plate_marked_status TEXT DEFAULT NULL,
name_plate_expected_time TEXT DEFAULT '0',
name_plate_marked_by TEXT DEFAULT NULL,
motor_pump_pumpset_status TEXT DEFAULT NULL, motor_pump_pumpset_status TEXT DEFAULT NULL,
winded_serial_number TEXT DEFAULT NULL,
motor_machine_name TEXT DEFAULT NULL, motor_machine_name TEXT DEFAULT NULL,
pump_machine_name TEXT DEFAULT NULL, pump_machine_name TEXT DEFAULT NULL,
name_plate_machine_name TEXT DEFAULT NULL,
pumpset_machine_name TEXT DEFAULT NULL, pumpset_machine_name TEXT DEFAULT NULL,
part_validation_1 TEXT DEFAULT NULL, part_validation_1 TEXT DEFAULT NULL,
part_validation_2 TEXT DEFAULT NULL, part_validation_2 TEXT DEFAULT NULL,
samlight_logged_name TEXT DEFAULT NULL, samlight_logged_name TEXT DEFAULT NULL,
pending_released_status INTEGER DEFAULT 0, pending_released_status INTEGER DEFAULT 0,
has_work_flow_id TEXT DEFAULT '0', motor_expected_time TEXT DEFAULT '0',
pump_expected_time TEXT DEFAULT '0',
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(),

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,9 +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']);
Permission::updateOrCreate(['name' => 'view cycle count page']);
} }
} }

View File

@@ -87,15 +87,6 @@
} }
}); });
window.addEventListener('focus-qr-input', () => {
const input = document.getElementById('qr-scan-input');
if (input) {
input.focus();
input.select();
}
});
document.addEventListener('DOMContentLoaded', function () { document.addEventListener('DOMContentLoaded', function () {
const scanInput = document.getElementById('qr-scan-input'); const scanInput = document.getElementById('qr-scan-input');
if (!scanInput) return; if (!scanInput) return;
@@ -106,10 +97,10 @@
const value = scanInput.value.trim(); const value = scanInput.value.trim();
// if (value != '') { if (value !== '') {
Livewire.dispatch('handleQrScan', { value: value }); Livewire.dispatch('handleQrScan', { value: value });
scanInput.value = ''; scanInput.value = '';
// } }
} }
}); });

View File

@@ -34,33 +34,22 @@
</div> </div>
@push('scripts') @push('scripts')
<script> <script>
window.addEventListener('focus-qr-input', () => {
const input = document.getElementById('qr-scan-input');
if (input) {
input.focus();
input.select();
}
});
document.addEventListener('DOMContentLoaded', function () { document.addEventListener('DOMContentLoaded', function () {
const scanInput = document.getElementById('qr-scan-input'); const scanInput = document.getElementById('qr-scan-input');
if (!scanInput) return; if (!scanInput) return;
scanInput.addEventListener('keydown', function (event) { scanInput.addEventListener('keydown', function (event) {
if (event.key == 'Enter') { if (event.key === 'Enter') {
event.preventDefault(); event.preventDefault();
const value = scanInput.value.trim(); const value = scanInput.value.trim();
//if (value !== '') { if (value !== '') {
Livewire.dispatch('handleQrScan', { value: value }); Livewire.dispatch('handleQrScan', { value: value });
scanInput.value = ''; scanInput.value = '';
//} }
} }
}); });
window.addEventListener('open-pdf', event => { window.addEventListener('open-pdf', event => {

View File

@@ -6,7 +6,7 @@
CRI Digital Manufacturing IIoT Platform CRI Digital Manufacturing IIoT Platform
</h1> </h1>
<p class="text-lg text-gray-600 mt-2"> <p class="text-lg text-gray-600 mt-2">
Complete visibility, traceability, and control across your manufacturing operations. Complete visibility, traceability, and control across your manufacturing operations
</p> </p>
</div> </div>

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
@@ -28,7 +27,7 @@
</tr> </tr>
<tr> <tr>
@foreach($dates as $date) @foreach($dates as $date)
<th class="border px-4 py-2 whitespace-nowrap">Item Quantity</th> <th class="border px-4 py-2 whitespace-nowrap">Line Capacity</th>
<th class="border px-4 py-2 whitespace-nowrap">Target Plan</th> <th class="border px-4 py-2 whitespace-nowrap">Target Plan</th>
<th class="border px-4 py-2 whitespace-nowrap border-r-4 border-gray-400"> <th class="border px-4 py-2 whitespace-nowrap border-r-4 border-gray-400">
Produced Quantity Produced Quantity
@@ -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>
@@ -61,7 +59,7 @@
@else @else
{{-- <td class="border px-4 py-2 whitespace-nowrap">{{ $record['daily_target'] ?? '-' }}</td> --}} {{-- <td class="border px-4 py-2 whitespace-nowrap">{{ $record['daily_target'] ?? '-' }}</td> --}}
<td class="border px-4 py-2 whitespace-nowrap"> <td class="border px-4 py-2 whitespace-nowrap">
{{ $record['daily_hourly_quantity'][$date] ?? '-' }} {{ $record['daily_line_capacity'][$date] ?? '-' }}
</td> </td>
<td class="border px-4 py-2 whitespace-nowrap"> <td class="border px-4 py-2 whitespace-nowrap">
{{ $record['daily_target_dynamic'][$date] ?? '-' }} {{ $record['daily_target_dynamic'][$date] ?? '-' }}

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

@@ -61,11 +61,9 @@
<th style="text-align: center; border: 1px solid #444; padding: 8px; background: #f2f2f2;">No</th> <th style="text-align: center; border: 1px solid #444; padding: 8px; background: #f2f2f2;">No</th>
<th style="text-align: center; border: 1px solid #444; padding: 8px; background: #f2f2f2; white-space: nowrap;">Plant</th> <th style="text-align: center; border: 1px solid #444; padding: 8px; background: #f2f2f2; white-space: nowrap;">Plant</th>
<th style="text-align: center; border: 1px solid #444; padding: 8px; background: #f2f2f2; white-space: nowrap;">Line</th> <th style="text-align: center; border: 1px solid #444; padding: 8px; background: #f2f2f2; white-space: nowrap;">Line</th>
<th style="text-align: center; border: 1px solid #444; padding: 8px; background: #f2f2f2;">Line Type</th>
<th style="text-align: center; border: 1px solid #444; padding: 8px; background: #f2f2f2;">Capacity Quantity</th>
<th style="text-align: center; border: 1px solid #444; padding: 8px; background: #f2f2f2;">Target Quantity</th> <th style="text-align: center; border: 1px solid #444; padding: 8px; background: #f2f2f2;">Target Quantity</th>
<th style="text-align: center; border: 1px solid #444; padding: 8px; background: #f2f2f2;">Line Type</th>
<th style="text-align: center; border: 1px solid #444; padding: 8px; background: #f2f2f2;">Production Quantity</th> <th style="text-align: center; border: 1px solid #444; padding: 8px; background: #f2f2f2;">Production Quantity</th>
<th style="text-align: center; border: 1px solid #444; padding: 8px; background: #f2f2f2;">OverAll Efficiency(%)</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@@ -74,11 +72,9 @@
<td style="border: 1px solid #444; padding: 8px; text-align: center;">{{ $row['no'] }}</td> <td style="border: 1px solid #444; padding: 8px; text-align: center;">{{ $row['no'] }}</td>
<td style="border: 1px solid #444; padding: 8px; text-align: center; white-space: nowrap;">{{ $row['plant'] }}</td> <td style="border: 1px solid #444; padding: 8px; text-align: center; white-space: nowrap;">{{ $row['plant'] }}</td>
<td style="border: 1px solid #444; padding: 8px; text-align: center; white-space: nowrap;">{{ $row['line'] }}</td> <td style="border: 1px solid #444; padding: 8px; text-align: center; white-space: nowrap;">{{ $row['line'] }}</td>
<td style="border: 1px solid #444; padding: 8px; text-align: center;">{{ $row['type'] }}</td>
<td style="border: 1px solid #444; padding: 8px; text-align: center;">{{ $row['capacityQuantity'] }}</td>
<td style="border: 1px solid #444; padding: 8px; text-align: center;">{{ $row['targetQuantity'] }}</td> <td style="border: 1px solid #444; padding: 8px; text-align: center;">{{ $row['targetQuantity'] }}</td>
<td style="border: 1px solid #444; padding: 8px; text-align: center;">{{ $row['type'] }}</td>
<td style="border: 1px solid #444; padding: 8px; text-align: center;">{{ $row['productionQuantity'] }}</td> <td style="border: 1px solid #444; padding: 8px; text-align: center;">{{ $row['productionQuantity'] }}</td>
<td style="border: 1px solid #444; padding: 8px; text-align: center;">{{ $row['efficiency'] }}</td>
</tr> </tr>
@endforeach @endforeach
</tbody> </tbody>

View File

@@ -1,379 +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;
}
* {
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;
@@ -34,9 +34,8 @@ use App\Http\Controllers\StickerMasterController;
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 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) {
@@ -152,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']);
@@ -182,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']);
@@ -216,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']);