Compare commits
1 Commits
9895297570
...
renovate/a
| Author | SHA1 | Date | |
|---|---|---|---|
| e501e91673 |
@@ -49,13 +49,6 @@ class SendInvoiceDataReport extends Command
|
||||
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') {
|
||||
// $startDate = now()->subDay()->setTime(10, 0, 0);//8:00
|
||||
// $endDate = now()->setTime(10, 0, 0);//8
|
||||
|
||||
@@ -4,7 +4,6 @@ namespace App\Console\Commands;
|
||||
|
||||
use App\Mail\InvoiceTransitMail;
|
||||
use App\Models\AlertMailRule;
|
||||
use App\Models\InvoiceInTransit;
|
||||
use App\Models\InvoiceMaster;
|
||||
use App\Models\Plant;
|
||||
use Illuminate\Console\Command;
|
||||
@@ -53,13 +52,6 @@ class SendInvoiceTransitReport extends Command
|
||||
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') {
|
||||
$results = DB::table('invoice_in_transits as it')
|
||||
->join('invoice_masters as im', function ($join) {
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use App\Mail\ProductionMail;
|
||||
use App\Models\Item;
|
||||
use App\Models\Line;
|
||||
use App\Models\Plant;
|
||||
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) {
|
||||
|
||||
$lines = Line::where('plant_id', $plant->id)->get();
|
||||
|
||||
foreach ($lines as $line) {
|
||||
|
||||
$month = $startDate->month;
|
||||
$year = $startDate->year;
|
||||
|
||||
$workingDays = ProductionPlan::where('plant_id', $plant->id)
|
||||
$targetQuantity = ProductionPlan::where('plant_id', $plant->id)
|
||||
->where('line_id', $line->id)
|
||||
->whereMonth('created_at', $month)
|
||||
->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)
|
||||
->whereBetween('created_at', [$PlanstartDate, $planendDate])
|
||||
->sum('plan_quantity');
|
||||
|
||||
$dailyTarget = $workingDays > 0 ? $monthlyPlan / $workingDays : 0;
|
||||
|
||||
$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;
|
||||
|
||||
/** @phpstan-ignore property.notFound */
|
||||
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)
|
||||
->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();
|
||||
}
|
||||
|
||||
if ($capacityQuan > 0) {
|
||||
$efficiency = ($productionQuantity / $capacityQuan) * 100;
|
||||
} else {
|
||||
$efficiency = 0;
|
||||
}
|
||||
|
||||
$efficiency = round($efficiency, 2);
|
||||
|
||||
$tableData[] = [
|
||||
'no' => $no++,
|
||||
'plant' => $plant->name,
|
||||
'type' => $line->type,
|
||||
'line' => $line->name,
|
||||
'capacityQuantity' => floor($capacityQuan),
|
||||
'targetQuantity' => floor($totalTargetQuantity),
|
||||
'type' => $line->type,
|
||||
'targetQuantity' => $targetQuantity,
|
||||
'productionQuantity' => $productionQuantity,
|
||||
'efficiency' => $efficiency . '%',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
// $service = new \App\Services\ProductionTargetService();
|
||||
// $this->table(['No', 'Plant', 'Line', 'Target Quantity', 'Production Quantity'], $fgTableData);
|
||||
|
||||
// $year = $startDate->year;
|
||||
// $month = $startDate->month;
|
||||
// $this->table(['No', 'Plant', 'Line', 'Target Quantity', 'Production Quantity'], $tableData);
|
||||
|
||||
// [$records, $dates] = $service->generate(
|
||||
// $plantId,
|
||||
// $year,
|
||||
// $month,
|
||||
// );
|
||||
// if (!empty($emails)) {
|
||||
// foreach ($emails as $email) {
|
||||
// Mail::to($email)->send(new ProductionMail($tableData));
|
||||
// }
|
||||
// } 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,$records,$dates);
|
||||
|
||||
$contentVars = $mail->content()->with;
|
||||
|
||||
$this->info($contentVars['greeting'] ?? 'Production Report');
|
||||
$this->table(
|
||||
['No', 'Plant', 'Line', 'Type', 'Capacity Quantity', 'Target Quantity', 'Production Quantity'],
|
||||
['No', 'Plant', 'Line', 'Type', 'Target Quantity', 'Production Quantity'],
|
||||
$tableData
|
||||
);
|
||||
$this->info($contentVars['wishes'] ?? '');
|
||||
|
||||
@@ -34,7 +34,7 @@ class ProductionPlanExport implements FromArray, WithHeadings, WithMapping
|
||||
|
||||
// Add dynamic headings for each date: Target / Produced
|
||||
foreach ($this->dates as $date) {
|
||||
$headings[] = $date . ' - Item Quantity';
|
||||
$headings[] = $date . ' - Line Capacity';
|
||||
$headings[] = $date . ' - Target Plan';
|
||||
$headings[] = $date . ' - Produced Quantity';
|
||||
}
|
||||
@@ -51,7 +51,7 @@ class ProductionPlanExport implements FromArray, WithHeadings, WithMapping
|
||||
];
|
||||
|
||||
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['produced_quantity'][$date] ?? '-';
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
namespace App\Filament\Exports;
|
||||
|
||||
use App\Models\CharacteristicValue;
|
||||
use App\Models\ProductCharacteristicsMaster;
|
||||
use Filament\Actions\Exports\ExportColumn;
|
||||
use Filament\Actions\Exports\Exporter;
|
||||
use Filament\Actions\Exports\Models\Export;
|
||||
@@ -29,8 +28,6 @@ class CharacteristicValueExporter extends Exporter
|
||||
->label('LINE NAME'),
|
||||
ExportColumn::make('item.code')
|
||||
->label('ITEM CODE'),
|
||||
ExportColumn::make('item.description')
|
||||
->label('DESCRIPTION'),
|
||||
ExportColumn::make('machine.work_center')
|
||||
->label('WORK CENTER'),
|
||||
ExportColumn::make('process_order')
|
||||
@@ -39,18 +36,6 @@ class CharacteristicValueExporter extends Exporter
|
||||
->label('COIL NUMBER'),
|
||||
ExportColumn::make('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')
|
||||
->label('OBSERVED VALUE'),
|
||||
ExportColumn::make('created_at')
|
||||
|
||||
@@ -24,8 +24,6 @@ class ClassCharacteristicExporter extends Exporter
|
||||
}),
|
||||
ExportColumn::make('plant.code')
|
||||
->label('PLANT CODE'),
|
||||
ExportColumn::make('machine.work_center')
|
||||
->label('WORK CENTER'),
|
||||
ExportColumn::make('item.code')
|
||||
->label('ITEM CODE'),
|
||||
ExportColumn::make('aufnr')
|
||||
@@ -43,7 +41,7 @@ class ClassCharacteristicExporter extends Exporter
|
||||
ExportColumn::make('zz1_cn_bill_ord')
|
||||
->label('ZZ1 CN BILL ORD'),
|
||||
ExportColumn::make('zmm_amps')
|
||||
->label('ZMM AMPS'),
|
||||
->label('ZMM AMPSTEXT'),
|
||||
ExportColumn::make('zmm_brand')
|
||||
->label('ZMM BRAND'),
|
||||
ExportColumn::make('zmm_degreeofprotection')
|
||||
@@ -83,7 +81,7 @@ class ClassCharacteristicExporter extends Exporter
|
||||
ExportColumn::make('zmm_maxambtemp')
|
||||
->label('ZMM MAXAMBTEMP'),
|
||||
ExportColumn::make('zmm_mincoolingflow')
|
||||
->label('ZMM MINCOOLINGFLOW'),
|
||||
->label('ZMM MINCOOLING FLOW'),
|
||||
ExportColumn::make('zmm_motorseries')
|
||||
->label('ZMM MOTORSERIES'),
|
||||
ExportColumn::make('zmm_motor_model')
|
||||
@@ -206,12 +204,6 @@ class ClassCharacteristicExporter extends Exporter
|
||||
->label('ZMM YEAR'),
|
||||
ExportColumn::make('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')
|
||||
->label('ZMM BEENOTE'),
|
||||
ExportColumn::make('zmm_beenumber')
|
||||
@@ -222,6 +214,12 @@ class ClassCharacteristicExporter extends Exporter
|
||||
->label('ZMM CODECLASS'),
|
||||
ExportColumn::make('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')
|
||||
->label('ZMM GRADE'),
|
||||
ExportColumn::make('zmm_grwt_pset')
|
||||
@@ -282,52 +280,20 @@ class ClassCharacteristicExporter extends Exporter
|
||||
->label('MARKED STATUS'),
|
||||
ExportColumn::make('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')
|
||||
->label('MARKED BY'),
|
||||
ExportColumn::make('man_marked_status')
|
||||
->label('MANUAL MARKED PHYSICAL COUNT'),
|
||||
->label('MANUAL MARKED STATUS'),
|
||||
ExportColumn::make('man_marked_datetime')
|
||||
->label('MANUAL MARKED DATETIME'),
|
||||
ExportColumn::make('man_marked_by')
|
||||
->label('MANUAL MARKED BY'),
|
||||
ExportColumn::make('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')
|
||||
->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')
|
||||
->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')
|
||||
->label('PART VALIDATION 1'),
|
||||
ExportColumn::make('part_validation_2')
|
||||
@@ -336,8 +302,10 @@ class ClassCharacteristicExporter extends Exporter
|
||||
->label('SAMLIGHT LOGGED NAME'),
|
||||
ExportColumn::make('pending_released_status')
|
||||
->label('PENDING RELEASED STATUS'),
|
||||
ExportColumn::make('has_work_flow_id')
|
||||
->label('HAS WORK FLOW ID'),
|
||||
ExportColumn::make('motor_expected_time')
|
||||
->label('MOTOR EXPECTED TIME'),
|
||||
ExportColumn::make('pump_expected_time')
|
||||
->label('PUMP EXPECTED TIME'),
|
||||
ExportColumn::make('created_at')
|
||||
->label('CREATED AT'),
|
||||
ExportColumn::make('created_by')
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -28,8 +28,6 @@ class ProcessOrderExporter extends Exporter
|
||||
->label('LINE NAME'),
|
||||
ExportColumn::make('item.code')
|
||||
->label('ITEM CODE'),
|
||||
ExportColumn::make('item.description')
|
||||
->label('ITEM DESCRIPTION'),
|
||||
ExportColumn::make('process_order')
|
||||
->label('PROCESS ORDER'),
|
||||
ExportColumn::make('coil_number')
|
||||
|
||||
@@ -26,8 +26,6 @@ class ProductCharacteristicsMasterExporter extends Exporter
|
||||
->label('PLANT CODE'),
|
||||
ExportColumn::make('item.code')
|
||||
->label('ITEM CODE'),
|
||||
ExportColumn::make('item.description')
|
||||
->label('ITEM DESCRIPTION'),
|
||||
ExportColumn::make('line.name')
|
||||
->label('LINE NAME'), // machine.workGroupMaster.name
|
||||
ExportColumn::make('machine.workGroupMaster.name')
|
||||
|
||||
@@ -34,8 +34,6 @@ class QualityValidationExporter extends Exporter
|
||||
->label('SERIAL NUMBER'),
|
||||
ExportColumn::make('stickerMaster.item.code')
|
||||
->label('ITEM CODE'),
|
||||
ExportColumn::make('stickerMaster.item.description')
|
||||
->label('ITEM DESCRIPTION'),
|
||||
ExportColumn::make('uom')
|
||||
->label('UNIT OF MEASURE'),
|
||||
ExportColumn::make('serial_number_motor')
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -16,524 +16,517 @@ class ClassCharacteristicImporter extends Importer
|
||||
return [
|
||||
ImportColumn::make('plant')
|
||||
->requiredMapping()
|
||||
->exampleHeader('PLANT CODE')
|
||||
->exampleHeader('Plant Code')
|
||||
->example('1000')
|
||||
->label('PLANT CODE')
|
||||
->label('Plant Code')
|
||||
->relationship(resolveUsing: 'code')
|
||||
->rules(['required']),
|
||||
ImportColumn::make('machine')
|
||||
->requiredMapping()
|
||||
->exampleHeader('WORK CENTER')
|
||||
->example('RMGLAS01')
|
||||
->label('WORK CENTER')
|
||||
->relationship(resolveUsing: 'work_center')
|
||||
->rules(['required']),
|
||||
ImportColumn::make('item')
|
||||
->requiredMapping()
|
||||
->exampleHeader('ITEM CODE')
|
||||
->exampleHeader('Item Code')
|
||||
->example('630214')
|
||||
->label('ITEM CODE')
|
||||
->label('Item Code')
|
||||
->relationship(resolveUsing: 'code')
|
||||
->rules(['required']),
|
||||
ImportColumn::make('aufnr')
|
||||
->label('AUFNR')
|
||||
->exampleHeader('AUFNR')
|
||||
->example('1234567'),
|
||||
->label('Aufnr')
|
||||
->exampleHeader('Aufnr')
|
||||
->example(''),
|
||||
ImportColumn::make('class')
|
||||
->label('CLASS')
|
||||
->exampleHeader('CLASS')
|
||||
->example('ZLASER'),
|
||||
->label('Class')
|
||||
->exampleHeader('Class')
|
||||
->example(''),
|
||||
ImportColumn::make('arbid')
|
||||
->label('ARBID')
|
||||
->exampleHeader('ARBID')
|
||||
->example('LASER'),
|
||||
->label('Arbid')
|
||||
->exampleHeader('Arbid')
|
||||
->example(''),
|
||||
ImportColumn::make('gamng')
|
||||
->label('GAMNG')
|
||||
->exampleHeader('GAMNG')
|
||||
->example('1.000'),
|
||||
->label('Gamng')
|
||||
->exampleHeader('Gamng')
|
||||
->example(''),
|
||||
ImportColumn::make('lmnga')
|
||||
->label('LMNGA')
|
||||
->exampleHeader('LMNGA')
|
||||
->example('1'),
|
||||
->label('Lmnga')
|
||||
->exampleHeader('Lmnga')
|
||||
->example(''),
|
||||
ImportColumn::make('gernr')
|
||||
->label('GERNR')
|
||||
->exampleHeader('GERNR')
|
||||
->example('12345678901234'),
|
||||
->label('Gernr')
|
||||
->exampleHeader('Gernr')
|
||||
->example(''),
|
||||
ImportColumn::make('zz1_cn_bill_ord')
|
||||
->label('ZZ1 CN BILL ORD')
|
||||
->exampleHeader('ZZ1 CN BILL ORD')
|
||||
->example('INDIA'),
|
||||
->label('zz1 ccn bill ord')
|
||||
->exampleHeader('zz1 ccn bill ord')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_amps')
|
||||
->label('ZMM AMPS')
|
||||
->exampleHeader('ZMM AMPS')
|
||||
->example('11A'),
|
||||
->label('zmm amps')
|
||||
->exampleHeader('zmm amps')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_brand')
|
||||
->label('ZMM BRAND')
|
||||
->exampleHeader('ZMM BRAND')
|
||||
->example('CRI'),
|
||||
->label('zmm brand')
|
||||
->exampleHeader('zmm brand')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_degreeofprotection')
|
||||
->label('ZMM DEGREEOFPROTECTION')
|
||||
->exampleHeader('ZMM DEGREEOFPROTECTION')
|
||||
->example('IP55'),
|
||||
->label('zmm degreeofprotection')
|
||||
->exampleHeader('zmm degreeofprotection')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_delivery')
|
||||
->label('ZMM DELIVERY')
|
||||
->exampleHeader('ZMM DELIVERY')
|
||||
->example('65MM'),
|
||||
->label('zmm delivery')
|
||||
->exampleHeader('zmm delivery')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_dir_rot')
|
||||
->label('ZMM DIR ROT')
|
||||
->exampleHeader('ZMM DIR ROT')
|
||||
->label('zmm dir rot')
|
||||
->exampleHeader('zmm dir rot')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_discharge')
|
||||
->label('ZMM DISCHARGE')
|
||||
->exampleHeader('ZMM DISCHARGE')
|
||||
->example('17m³/h'),
|
||||
->label('zmm discharge')
|
||||
->exampleHeader('zmm discharge')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_discharge_max')
|
||||
->label('ZMM DISCHARGE MAX')
|
||||
->exampleHeader('ZMM DISCHARGE MAX')
|
||||
->label('zmm discharge max')
|
||||
->exampleHeader('zmm discharge max')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_discharge_min')
|
||||
->label('ZMM DISCHARGE MIN')
|
||||
->exampleHeader('ZMM DISCHARGE MIN')
|
||||
->label('zmm discharge min')
|
||||
->exampleHeader('zmm discharge min')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_duty')
|
||||
->label('ZMM DUTY')
|
||||
->exampleHeader('ZMM DUTY')
|
||||
->example('DUTY S1'),
|
||||
->label('zmm duty')
|
||||
->exampleHeader('zmm duty')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_eff_motor')
|
||||
->label('ZMM EFF MOTOR')
|
||||
->exampleHeader('ZMM EFF MOTOR')
|
||||
->label('zmm eff motor')
|
||||
->exampleHeader('zmm eff motor')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_eff_pump')
|
||||
->label('ZMM EFF PUMP')
|
||||
->exampleHeader('ZMM EFF PUMP')
|
||||
->label('zmm eff pump')
|
||||
->exampleHeader('zmm eff pump')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_frequency')
|
||||
->label('ZMM FREQUENCY')
|
||||
->exampleHeader('ZMM FREQUENCY')
|
||||
->example('50Hz'),
|
||||
->label('zmm frequency')
|
||||
->exampleHeader('zmm frequency')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_head')
|
||||
->label('ZMM HEAD')
|
||||
->exampleHeader('ZMM HEAD')
|
||||
->example('77M'),
|
||||
->label('zmm head')
|
||||
->exampleHeader('zmm head')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_heading')
|
||||
->label('ZMM HEADING')
|
||||
->exampleHeader('ZMM HEADING')
|
||||
->example('PRESSURE BOOSTER SYSTEM'),
|
||||
->label('zmm heading')
|
||||
->exampleHeader('zmm heading')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_head_max')
|
||||
->label('ZMM HEAD MAX')
|
||||
->exampleHeader('ZMM HEAD MAX')
|
||||
->example('96m'),
|
||||
->label('zmm head max')
|
||||
->exampleHeader('zmm head max')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_head_minimum')
|
||||
->label('ZMM HEAD MINIMUM')
|
||||
->exampleHeader('ZMM HEAD MINIMUM')
|
||||
->label('zmm head minimum')
|
||||
->exampleHeader('zmm head minimum')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_idx_eff_mtr')
|
||||
->label('ZMM IDX EFF MTR')
|
||||
->exampleHeader('ZMM IDX EFF MTR')
|
||||
->label('zmm idx eff mtr')
|
||||
->exampleHeader('zmm idx eff mtr')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_idx_eff_pump')
|
||||
->label('ZMM IDX EFF PUMP')
|
||||
->exampleHeader('ZMM IDX EFF PUMP')
|
||||
->label('zmm idx eff pump')
|
||||
->exampleHeader('zmm idx eff pump')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_kvacode')
|
||||
->label('ZMM KVACODE')
|
||||
->exampleHeader('ZMM KVACODE')
|
||||
->label('zmm kvacode')
|
||||
->exampleHeader('zmm kvacode')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_maxambtemp')
|
||||
->label('ZMM MAXAMBTEMP')
|
||||
->exampleHeader('ZMM MAXAMBTEMP')
|
||||
->label('zmm maxambtemp')
|
||||
->exampleHeader('zmm maxambtemp')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_mincoolingflow')
|
||||
->label('ZMM MINCOOLINGFLOW')
|
||||
->exampleHeader('ZMM MINCOOLINGFLOW')
|
||||
->label('zmm mincoolingflow')
|
||||
->exampleHeader('zmm mincoolingflow')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_motorseries')
|
||||
->label('ZMM MOTORSERIES')
|
||||
->exampleHeader('ZMM MOTORSERIES')
|
||||
->label('zmm motorseries')
|
||||
->exampleHeader('zmm motorseries')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_motor_model')
|
||||
->label('ZMM MOTOR MODEL')
|
||||
->exampleHeader('ZMM MOTOR MODEL')
|
||||
->label('zmm motor model')
|
||||
->exampleHeader('zmm motor model')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_outlet')
|
||||
->label('ZMM OUTLET')
|
||||
->exampleHeader('ZMM OUTLET')
|
||||
->example('IE2'),
|
||||
->label('zmm outlet')
|
||||
->exampleHeader('zmm outlet')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_phase')
|
||||
->label('ZMM PHASE')
|
||||
->exampleHeader('ZMM PHASE')
|
||||
->example('3Ph'),
|
||||
->label('zmm phase')
|
||||
->exampleHeader('zmm phase')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_pressure')
|
||||
->label('ZMM PRESSURE')
|
||||
->exampleHeader('ZMM PRESSURE')
|
||||
->example('16bar'),
|
||||
->label('zmm pressure')
|
||||
->exampleHeader('zmm pressure')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_pumpflowtype')
|
||||
->label('ZMM PUMPFLOWTYPE')
|
||||
->exampleHeader('ZMM PUMPFLOWTYPE')
|
||||
->label('zmm pumpflowtype')
|
||||
->exampleHeader('zmm pumpflowtype')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_pumpseries')
|
||||
->label('ZMM PUMPSERIES')
|
||||
->exampleHeader('ZMM PUMPSERIES')
|
||||
->label('zmm pumpseries')
|
||||
->exampleHeader('zmm pumpseries')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_pump_model')
|
||||
->label('ZMM PUMP MODEL')
|
||||
->exampleHeader('ZMM PUMP MODEL')
|
||||
->example('MVHS-15/07TR'),
|
||||
->label('zmm pump model')
|
||||
->exampleHeader('zmm pump model')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_ratedpower')
|
||||
->label('ZMM RATEDPOWER')
|
||||
->exampleHeader('ZMM RATEDPOWER')
|
||||
->example('5.5kW/7.5HP'),
|
||||
->label('zmm ratedpower')
|
||||
->exampleHeader('zmm ratedpower')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_region')
|
||||
->label('ZMM REGION')
|
||||
->exampleHeader('ZMM REGION')
|
||||
->label('zmm region')
|
||||
->exampleHeader('zmm region')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_servicefactor')
|
||||
->label('ZMM SERVICEFACTOR')
|
||||
->exampleHeader('ZMM SERVICEFACTOR')
|
||||
->label('zmm servicefactor')
|
||||
->exampleHeader('zmm servicefactor')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_servicefactormaximumamps')
|
||||
->label('ZMM SERVICEFACTORMAXIMUMAMPS')
|
||||
->exampleHeader('ZMM SERVICEFACTORMAXIMUMAMPS')
|
||||
->label('zmm servicefactormaximumamps')
|
||||
->exampleHeader('zmm servicefactormaximumamps')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_speed')
|
||||
->label('ZMM SPEED')
|
||||
->exampleHeader('ZMM SPEED')
|
||||
->example('2900rpm'),
|
||||
->label('zmm speed')
|
||||
->exampleHeader('zmm speed')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_suction')
|
||||
->label('ZMM SUCTION')
|
||||
->exampleHeader('ZMM SUCTION')
|
||||
->example('65mm'),
|
||||
->label('zmm suction')
|
||||
->exampleHeader('zmm suction')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_suctionxdelivery')
|
||||
->label('ZMM SUCTIONXDELIVERY')
|
||||
->exampleHeader('ZMM SUCTIONXDELIVERY')
|
||||
->example('50 x 50mm'),
|
||||
->label('zmm suctionxdelivery')
|
||||
->exampleHeader('zmm suctionxdelivery')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_supplysource')
|
||||
->label('ZMM SUPPLYSOURCE')
|
||||
->exampleHeader('ZMM SUPPLYSOURCE')
|
||||
->example('AC SUPPLY'),
|
||||
->label('zmm supplysource')
|
||||
->exampleHeader('zmm supplysource')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_temperature')
|
||||
->label('ZMM TEMPERATURE')
|
||||
->exampleHeader('ZMM TEMPERATURE')
|
||||
->example('90°C'),
|
||||
->label('zmm temperature')
|
||||
->exampleHeader('zmm temperature')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_thrustload')
|
||||
->label('ZMM THRUSTLOAD')
|
||||
->exampleHeader('ZMM THRUSTLOAD')
|
||||
->label('zmm thrustload')
|
||||
->exampleHeader('zmm thrustload')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_volts')
|
||||
->label('ZMM VOLTS')
|
||||
->exampleHeader('ZMM VOLTS')
|
||||
->example('415V'),
|
||||
->label('zmm volts')
|
||||
->exampleHeader('zmm volts')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_wire')
|
||||
->label('ZMM WIRE')
|
||||
->exampleHeader('ZMM WIRE')
|
||||
->label('zmm wire')
|
||||
->exampleHeader('zmm wire')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_package')
|
||||
->label('ZMM PACKAGE')
|
||||
->exampleHeader('ZMM PACKAGE')
|
||||
->label('zmm package')
|
||||
->exampleHeader('zmm package')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_pvarrayrating')
|
||||
->label('ZMM PVARRAYRATING')
|
||||
->exampleHeader('ZMM PVARRAYRATING')
|
||||
->label('zmm pvarrayrating')
|
||||
->exampleHeader('zmm pvarrayrating')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_isi')
|
||||
->label('ZMM ISI')
|
||||
->exampleHeader('ZMM ISI')
|
||||
->example('Y'),
|
||||
->label('zmm isi')
|
||||
->exampleHeader('zmm isi')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_isimotor')
|
||||
->label('ZMM ISIMOTOR')
|
||||
->exampleHeader('ZMM ISIMOTOR')
|
||||
->example('IS:12615'),
|
||||
->label('zmm isimotor')
|
||||
->exampleHeader('zmm isimotor')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_isipump')
|
||||
->label('ZMM ISIPUMP')
|
||||
->exampleHeader('ZMM ISIPUMP')
|
||||
->label('zmm isipump')
|
||||
->exampleHeader('zmm isipump')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_isipumpset')
|
||||
->label('ZMM ISIPUMPSET')
|
||||
->exampleHeader('ZMM ISIPUMPSET')
|
||||
->example('IS:12615'),
|
||||
->label('zmm isipumpset')
|
||||
->exampleHeader('zmm isipumpset')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_pumpset_model')
|
||||
->label('ZMM PUMPSET MODEL')
|
||||
->exampleHeader('ZMM PUMPSET MODEL')
|
||||
->example('MVHS-15/07TR'),
|
||||
->label('zmm pumpset model')
|
||||
->exampleHeader('zmm pumpset model')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_stages')
|
||||
->label('ZMM STAGES')
|
||||
->exampleHeader('ZMM STAGES')
|
||||
->example('7'),
|
||||
->label('zmm stages')
|
||||
->exampleHeader('zmm stages')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_headrange')
|
||||
->label('ZMM HEADRANGE')
|
||||
->exampleHeader('ZMM HEADRANGE')
|
||||
->label('zmm headrange')
|
||||
->exampleHeader('zmm headrange')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_overall_efficiency')
|
||||
->label('ZMM OVERALL EFFICIENCY')
|
||||
->exampleHeader('ZMM OVERALL EFFICIENCY')
|
||||
->label('zmm overall efficiency')
|
||||
->exampleHeader('zmm overall efficiency')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_connection')
|
||||
->label('ZMM CONNECTION')
|
||||
->exampleHeader('ZMM CONNECTION')
|
||||
->example('STAR/DELTA'),
|
||||
->label('zmm connection')
|
||||
->exampleHeader('zmm connection')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_min_bore_size')
|
||||
->label('ZMM MIN BORE SIZE')
|
||||
->exampleHeader('ZMM MIN BORE SIZE')
|
||||
->label('zmm min bore size')
|
||||
->exampleHeader('zmm min bore size')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_isireference')
|
||||
->label('ZMM ISIREFERENCE')
|
||||
->exampleHeader('ZMM ISIREFERENCE')
|
||||
->label('zmm isireference')
|
||||
->exampleHeader('zmm isireference')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_category')
|
||||
->label('ZMM CATEGORY')
|
||||
->exampleHeader('ZMM CATEGORY')
|
||||
->example('B'),
|
||||
->label('zmm category')
|
||||
->exampleHeader('zmm category')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_submergence')
|
||||
->label('ZMM SUBMERGENCE')
|
||||
->exampleHeader('ZMM SUBMERGENCE')
|
||||
->label('zmm submergence')
|
||||
->exampleHeader('zmm submergence')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_capacitorstart')
|
||||
->label('ZMM CAPACITORSTART')
|
||||
->exampleHeader('ZMM CAPACITORSTART')
|
||||
->label('zmm capacitorstart')
|
||||
->exampleHeader('zmm capacitorstart')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_capacitorrun')
|
||||
->label('ZMM CAPACITORRUN')
|
||||
->exampleHeader('ZMM CAPACITORRUN')
|
||||
->label('zmm capacitorrun')
|
||||
->exampleHeader('zmm capacitorrun')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_inch')
|
||||
->label('ZMM INCH')
|
||||
->exampleHeader('ZMM INCH')
|
||||
->label('zmm inch')
|
||||
->exampleHeader('zmm inch')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_motor_type')
|
||||
->label('ZMM MOTOR TYPE')
|
||||
->exampleHeader('ZMM MOTOR TYPE')
|
||||
->example('TEFC'),
|
||||
->label('zmm motor type')
|
||||
->exampleHeader('zmm motor type')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_dismantle_direction')
|
||||
->label('ZMM DISMANTLE DIRECTION')
|
||||
->exampleHeader('ZMM DISMANTLE DIRECTION')
|
||||
->label('zmm dismantle direction')
|
||||
->exampleHeader('zmm dismantle direction')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_eff_ovrall')
|
||||
->label('ZMM EFF OVERALL')
|
||||
->exampleHeader('ZMM EFF OVERALL')
|
||||
->label('zmm eff ovrall')
|
||||
->exampleHeader('zmm eff ovrall')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_bodymoc')
|
||||
->label('ZMM BODYMOC')
|
||||
->exampleHeader('ZMM BODYMOC')
|
||||
->label('zmm bodymoc')
|
||||
->exampleHeader('zmm bodymoc')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_rotormoc')
|
||||
->label('ZMM ROTORMOC')
|
||||
->exampleHeader('ZMM ROTORMOC')
|
||||
->label('zmm rotormoc')
|
||||
->exampleHeader('zmm rotormoc')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_dlwl')
|
||||
->label('ZMM DLWL')
|
||||
->exampleHeader('ZMM DLWL')
|
||||
->label('zmm dlwl')
|
||||
->exampleHeader('zmm dlwl')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_inputpower')
|
||||
->label('ZMM INPUTPOWER')
|
||||
->exampleHeader('ZMM INPUTPOWER')
|
||||
->label('zmm inputpower')
|
||||
->exampleHeader('zmm inputpower')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_imp_od')
|
||||
->label('ZMM IMP OD')
|
||||
->exampleHeader('ZMM IMP OD')
|
||||
->label('zmm imp od')
|
||||
->exampleHeader('zmm imp od')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_ambtemp')
|
||||
->label('ZMM AMBTEMP')
|
||||
->exampleHeader('ZMM AMBTEMP')
|
||||
->label('zmm ambtemp')
|
||||
->exampleHeader('zmm ambtemp')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_de')
|
||||
->label('ZMM DE')
|
||||
->exampleHeader('ZMM DE')
|
||||
->label('zmm de')
|
||||
->exampleHeader('zmm de')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_dischargerange')
|
||||
->label('ZMM DISCHARGERANGE')
|
||||
->exampleHeader('ZMM DISCHARGERANGE')
|
||||
->label('zmm dischargerange')
|
||||
->exampleHeader('zmm dischargerange')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_efficiency_class')
|
||||
->label('ZMM EFFICIENCY CLASS')
|
||||
->exampleHeader('ZMM EFFICIENCY CLASS')
|
||||
->example('IE2'),
|
||||
->label('zmm efficiency class')
|
||||
->exampleHeader('zmm efficiency class')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_framesize')
|
||||
->label('ZMM FRAMESIZE')
|
||||
->exampleHeader('ZMM FRAMESIZE')
|
||||
->label('zmm framesize')
|
||||
->exampleHeader('zmm framesize')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_impellerdiameter')
|
||||
->label('ZMM IMPELLERDIAMETER')
|
||||
->exampleHeader('ZMM IMPELLERDIAMETER')
|
||||
->label('zmm impellerdiameter')
|
||||
->exampleHeader('zmm impellerdiameter')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_insulationclass')
|
||||
->label('ZMM INSULATIONCLASS')
|
||||
->exampleHeader('ZMM INSULATIONCLASS')
|
||||
->example('F'),
|
||||
->label('zmm insulationclass')
|
||||
->exampleHeader('zmm insulationclass')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_maxflow')
|
||||
->label('ZMM MAXFLOW')
|
||||
->exampleHeader('ZMM MAXFLOW')
|
||||
->label('zmm maxflow')
|
||||
->exampleHeader('zmm maxflow')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_minhead')
|
||||
->label('ZMM MINHEAD')
|
||||
->exampleHeader('ZMM MINHEAD')
|
||||
->label('zmm minhead')
|
||||
->exampleHeader('zmm minhead')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_mtrlofconst')
|
||||
->label('ZMM MTRLOFCONST')
|
||||
->exampleHeader('ZMM MTRLOFCONST')
|
||||
->label('zmm mtrlofconst')
|
||||
->exampleHeader('zmm mtrlofconst')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_nde')
|
||||
->label('ZMM NDE')
|
||||
->exampleHeader('ZMM NDE')
|
||||
->label('zmm nde')
|
||||
->exampleHeader('zmm nde')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_powerfactor')
|
||||
->label('ZMM POWERFACTOR')
|
||||
->exampleHeader('ZMM POWERFACTOR')
|
||||
->label('zmm powerfactor')
|
||||
->exampleHeader('zmm powerfactor')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_tagno')
|
||||
->label('ZMM TAGNO')
|
||||
->exampleHeader('ZMM TAGNO')
|
||||
->label('zmm tagno')
|
||||
->exampleHeader('zmm tagno')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_year')
|
||||
->label('ZMM YEAR')
|
||||
->exampleHeader('ZMM YEAR')
|
||||
->label('zmm year')
|
||||
->exampleHeader('zmm year')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_laser_name')
|
||||
->label('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')
|
||||
->label('zmm laser name')
|
||||
->exampleHeader('zmm laser name')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_beenote')
|
||||
->label('ZMM BEENOTE')
|
||||
->exampleHeader('ZMM BEENOTE')
|
||||
->label('zmm beenote')
|
||||
->exampleHeader('zmm beenote')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_beenumber')
|
||||
->label('ZMM BEENUMBER')
|
||||
->exampleHeader('ZMM BEENUMBER')
|
||||
->label('zmm beenumber')
|
||||
->exampleHeader('zmm beenumber')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_beestar')
|
||||
->label('ZMM BEESTAR')
|
||||
->exampleHeader('ZMM BEESTAR')
|
||||
->label('zmm beenumber')
|
||||
->exampleHeader('zmm beenumber')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_codeclass')
|
||||
->label('ZMM CODECLASS')
|
||||
->exampleHeader('ZMM CODECLASS')
|
||||
->label('zmm codeclass')
|
||||
->exampleHeader('zmm codeclass')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_colour')
|
||||
->label('ZMM COLOUR')
|
||||
->exampleHeader('ZMM COLOUR')
|
||||
->label('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(''),
|
||||
ImportColumn::make('zmm_grade')
|
||||
->label('ZMM GRADE')
|
||||
->exampleHeader('ZMM GRADE')
|
||||
->label('zmm grade')
|
||||
->exampleHeader('zmm grade')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_grwt_pset')
|
||||
->label('ZMM GRWT PSET')
|
||||
->exampleHeader('ZMM GRWT PSET')
|
||||
->label('zmm grwt pset')
|
||||
->exampleHeader('zmm grwt pset')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_grwt_cable')
|
||||
->label('ZMM GRWT CABLE')
|
||||
->exampleHeader('ZMM GRWT CABLE')
|
||||
->label('zmm grwt cable')
|
||||
->exampleHeader('zmm grwt cable')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_grwt_motor')
|
||||
->label('ZMM GRWT MOTOR')
|
||||
->exampleHeader('ZMM GRWT MOTOR')
|
||||
->label('zmm grwt motor')
|
||||
->exampleHeader('zmm grwt motor')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_grwt_pf')
|
||||
->label('ZMM GRWT PF')
|
||||
->exampleHeader('ZMM GRWT PF')
|
||||
->label('zmm grwt pf')
|
||||
->exampleHeader('zmm grwt pf')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_grwt_pump')
|
||||
->label('ZMM GRWT PUMP')
|
||||
->exampleHeader('ZMM GRWT PUMP')
|
||||
->label('zmm grwt pump')
|
||||
->exampleHeader('zmm grwt pump')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_isivalve')
|
||||
->label('ZMM ISIVALVE')
|
||||
->exampleHeader('ZMM ISIVALVE')
|
||||
->label('zmm isivalve')
|
||||
->exampleHeader('zmm isivalve')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_isi_wc')
|
||||
->label('ZMM ISI WC')
|
||||
->exampleHeader('ZMM ISI WC')
|
||||
->label('zmm isi wc')
|
||||
->exampleHeader('zmm isi wc')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_labelperiod')
|
||||
->label('ZMM LABELPERIOD')
|
||||
->exampleHeader('ZMM LABELPERIOD')
|
||||
->label('zmm labelperiod')
|
||||
->exampleHeader('zmm labelperiod')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_length')
|
||||
->label('ZMM LENGTH')
|
||||
->exampleHeader('ZMM LENGTH')
|
||||
->label('zmm length')
|
||||
->exampleHeader('zmm length')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_license_cml_no')
|
||||
->label('ZMM LICENSE CML NO')
|
||||
->exampleHeader('ZMM LICENSE CML NO')
|
||||
->label('zmm license cml no')
|
||||
->exampleHeader('zmm license cml no')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_mfgmonyr')
|
||||
->label('ZMM MFGMONYR')
|
||||
->exampleHeader('ZMM MFGMONYR')
|
||||
->label('zmm mfgmonyr')
|
||||
->exampleHeader('zmm mfgmonyr')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_modelyear')
|
||||
->label('ZMM MODELYEAR')
|
||||
->exampleHeader('ZMM MODELYEAR')
|
||||
->label('zmm modelyear')
|
||||
->exampleHeader('zmm modelyear')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_motoridentification')
|
||||
->label('ZMM MOTORIDENTIFICATION')
|
||||
->exampleHeader('ZMM MOTORIDENTIFICATION')
|
||||
->label('zmm motoridentification')
|
||||
->exampleHeader('zmm motoridentification')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_newt_pset')
|
||||
->label('ZMM NEWT PSET')
|
||||
->exampleHeader('ZMM NEWT PSET')
|
||||
->label('zmm newt pset')
|
||||
->exampleHeader('zmm newt pset')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_newt_cable')
|
||||
->label('ZMM NEWT CABLE')
|
||||
->exampleHeader('ZMM NEWT CABLE')
|
||||
->label('zmm newt cable')
|
||||
->exampleHeader('zmm newt cable')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_newt_motor')
|
||||
->label('ZMM NEWT MOTOR')
|
||||
->exampleHeader('ZMM NEWT MOTOR')
|
||||
->label('zmm newt motor')
|
||||
->exampleHeader('zmm newt motor')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_newt_pf')
|
||||
->label('ZMM NEWT PF')
|
||||
->exampleHeader('ZMM NEWT PF')
|
||||
->label('zmm newt pf')
|
||||
->exampleHeader('zmm newt pf')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_newt_pump')
|
||||
->label('ZMM NEWT PUMP')
|
||||
->exampleHeader('ZMM NEWT PUMP')
|
||||
->label('zmm newt pump')
|
||||
->exampleHeader('zmm newt pump')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_packtype')
|
||||
->label('ZMM PACKTYPE')
|
||||
->exampleHeader('ZMM PACKTYPE')
|
||||
->label('zmm packtype')
|
||||
->exampleHeader('zmm packtype')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_panel')
|
||||
->label('ZMM PANEL')
|
||||
->exampleHeader('ZMM PANEL')
|
||||
->label('zmm panel')
|
||||
->exampleHeader('zmm panel')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_performance_factor')
|
||||
->label('ZMM PERFORMANCE FACTOR')
|
||||
->exampleHeader('ZMM PERFORMANCE FACTOR')
|
||||
->label('zmm performance factor')
|
||||
->exampleHeader('zmm performance factor')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_pumpidentification')
|
||||
->label('ZMM PUMPIDENTIFICATION')
|
||||
->exampleHeader('ZMM PUMPIDENTIFICATION')
|
||||
->label('zmm pumpidentification')
|
||||
->exampleHeader('zmm pumpidentification')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_psettype')
|
||||
->label('ZMM PSETTYPE')
|
||||
->exampleHeader('ZMM PSETTYPE')
|
||||
->label('zmm psettype')
|
||||
->exampleHeader('zmm psettype')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_size')
|
||||
->label('ZMM SIZE')
|
||||
->exampleHeader('ZMM SIZE')
|
||||
->label('zmm size')
|
||||
->exampleHeader('zmm size')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_eff_ttl')
|
||||
->label('ZMM EFF TTL')
|
||||
->exampleHeader('ZMM EFF TTL')
|
||||
->label('zmm eff ttl')
|
||||
->exampleHeader('zmm eff ttl')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_type')
|
||||
->label('ZMM TYPE')
|
||||
->exampleHeader('ZMM TYPE')
|
||||
->label('zmm type')
|
||||
->exampleHeader('zmm type')
|
||||
->example(''),
|
||||
ImportColumn::make('zmm_usp')
|
||||
->label('ZMM USP')
|
||||
->exampleHeader('ZMM USP')
|
||||
->label('zmm usp')
|
||||
->exampleHeader('zmm usp')
|
||||
->example(''),
|
||||
ImportColumn::make('mark_status')
|
||||
->label('MARKED STATUS')
|
||||
@@ -542,23 +535,15 @@ class ClassCharacteristicImporter extends Importer
|
||||
ImportColumn::make('marked_datetime')
|
||||
->label('MARKED DATETIME')
|
||||
->exampleHeader('MARKED DATETIME')
|
||||
->example('01-01-2026 00:08:00'),
|
||||
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'),
|
||||
->example(''),
|
||||
ImportColumn::make('marked_by')
|
||||
->label('MARKED BY')
|
||||
->exampleHeader('MARKED BY')
|
||||
->example('TEST001'),
|
||||
->example(''),
|
||||
ImportColumn::make('man_marked_status')
|
||||
->label('MANUAL MARKED PHYSICAL COUNT')
|
||||
->label('MANUAL MARKED STATUS')
|
||||
->exampleHeader('MANUAL MARKED STATUS')
|
||||
->example('0'),
|
||||
->example(''),
|
||||
ImportColumn::make('man_marked_datetime')
|
||||
->label('MANUAL MARKED DATETIME')
|
||||
->exampleHeader('MANUAL MARKED DATETIME')
|
||||
@@ -571,14 +556,6 @@ class ClassCharacteristicImporter extends Importer
|
||||
->label('MOTOR MARKED STATUS')
|
||||
->exampleHeader('MOTOR MARKED STATUS')
|
||||
->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')
|
||||
->label('MOTOR MARKED BY')
|
||||
->exampleHeader('MOTOR MARKED BY')
|
||||
@@ -587,38 +564,14 @@ class ClassCharacteristicImporter extends Importer
|
||||
->label('PUMP MARKED STATUS')
|
||||
->exampleHeader('PUMP MARKED STATUS')
|
||||
->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')
|
||||
->label('PUMP MARKED BY')
|
||||
->exampleHeader('PUMP MARKED BY')
|
||||
->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')
|
||||
->label('MOTOR PUMP PUMPSET STATUS')
|
||||
->exampleHeader('MOTOR PUMP PUMPSET STATUS')
|
||||
->example(''),
|
||||
ImportColumn::make('winded_serial_number')
|
||||
->label('WINDED SERIAL NUMBER')
|
||||
->exampleHeader('WINDED SERIAL NUMBER')
|
||||
->example(''),
|
||||
ImportColumn::make('motor_machine_name')
|
||||
->label('MOTOR MACHINE NAME')
|
||||
->exampleHeader('MOTOR MACHINE NAME')
|
||||
@@ -627,10 +580,6 @@ class ClassCharacteristicImporter extends Importer
|
||||
->label('PUMP MACHINE NAME')
|
||||
->exampleHeader('PUMP MACHINE NAME')
|
||||
->example(''),
|
||||
ImportColumn::make('name_plate_machine_name')
|
||||
->label('NAME PLATE MACHINE NAME')
|
||||
->exampleHeader('NAME PLATE MACHINE NAME')
|
||||
->example(''),
|
||||
ImportColumn::make('pumpset_machine_name')
|
||||
->label('PUMPSET MACHINE NAME')
|
||||
->exampleHeader('PUMPSET MACHINE NAME')
|
||||
@@ -651,26 +600,31 @@ class ClassCharacteristicImporter extends Importer
|
||||
->label('PENDING RELEASED STATUS')
|
||||
->exampleHeader('PENDING RELEASED STATUS')
|
||||
->example(''),
|
||||
ImportColumn::make('has_work_flow_id')
|
||||
->label('HAS WORK FLOW ID')
|
||||
->exampleHeader('HAS WORK FLOW ID')
|
||||
->example('0'),
|
||||
ImportColumn::make('motor_expected_time')
|
||||
->label('MOTOR EXPECTED TIME')
|
||||
->exampleHeader('MOTOR EXPECTED TIME')
|
||||
->example(''),
|
||||
ImportColumn::make('pump_expected_time')
|
||||
->label('PUMP EXPECTED TIME')
|
||||
->exampleHeader('PUMP EXPECTED TIME')
|
||||
->example(''),
|
||||
ImportColumn::make('created_at')
|
||||
->label('CREATED AT')
|
||||
->exampleHeader('CREATED AT')
|
||||
->example('01-01-2026 00:08:00'),
|
||||
->example(''),
|
||||
ImportColumn::make('created_by')
|
||||
->label('CREATED BY')
|
||||
->exampleHeader('CREATED BY')
|
||||
->example('TEST001'),
|
||||
->example('RAW01234'),
|
||||
ImportColumn::make('updated_at')
|
||||
->label('UPDATED AT')
|
||||
->exampleHeader('UPDATED AT')
|
||||
->example('01-01-2026 00:08:00'),
|
||||
->example(''),
|
||||
ImportColumn::make('updated_by')
|
||||
->label('UPDATED BY')
|
||||
->exampleHeader('UPDATED BY')
|
||||
->example('TEST001'),
|
||||
->example(''),
|
||||
// ImportColumn::make('updated_by'),
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -24,13 +24,13 @@ class ProcessOrderImporter extends Importer
|
||||
ImportColumn::make('plant')
|
||||
->requiredMapping()
|
||||
->exampleHeader('PLANT CODE')
|
||||
->example('1200')
|
||||
->example('1000')
|
||||
->label('PLANT CODE')
|
||||
->relationship(resolveUsing: 'code')
|
||||
->rules(['required']),
|
||||
ImportColumn::make('line')
|
||||
->exampleHeader('LINE NAME')
|
||||
->example(' Poly Wrapped Wire SFG')
|
||||
->example(' Polywrapped line')
|
||||
->label('LINE NAME')
|
||||
->relationship(resolveUsing: 'name'),
|
||||
ImportColumn::make('item')
|
||||
@@ -43,54 +43,54 @@ class ProcessOrderImporter extends Importer
|
||||
ImportColumn::make('process_order')
|
||||
->requiredMapping()
|
||||
->exampleHeader('PROCESS ORDER')
|
||||
->example('2025002123456')
|
||||
->example('202500123456')
|
||||
->label('PROCESS ORDER')
|
||||
->rules(['required']),
|
||||
ImportColumn::make('order_quantity')
|
||||
->requiredMapping()
|
||||
->exampleHeader('ORDER QUANTITY')
|
||||
->example('1000')
|
||||
->label('ORDER QUANTITY')
|
||||
->rules(['required']),
|
||||
ImportColumn::make('coil_number')
|
||||
->exampleHeader('COIL NUMBER')
|
||||
// ->example('01')
|
||||
->example('01')
|
||||
->label('COIL NUMBER'),
|
||||
ImportColumn::make('order_quantity')
|
||||
->requiredMapping()
|
||||
->exampleHeader('ORDER QUANTITY')
|
||||
->example('100')
|
||||
->label('ORDER QUANTITY')
|
||||
->rules(['required']),
|
||||
ImportColumn::make('received_quantity')
|
||||
->exampleHeader('RECEIVED QUANTITY')
|
||||
// ->example('01')
|
||||
->example('01')
|
||||
->label('RECEIVED QUANTITY'),
|
||||
ImportColumn::make('sfg_number')
|
||||
->exampleHeader('SFG NUMBER')
|
||||
// ->example('200000220613-72')
|
||||
->example('200000220613-72')
|
||||
->label('SFG NUMBER'),
|
||||
ImportColumn::make('machine_name')
|
||||
->exampleHeader('MACHINE NAME')
|
||||
// ->example('WMIWRM13 - 2-L2')
|
||||
->example('WMIWRM13 - 2-L2')
|
||||
->label('MACHINE NAME'),
|
||||
ImportColumn::make('scrap_quantity')
|
||||
->exampleHeader('SCRAP QUANTITY')
|
||||
// ->example('0')
|
||||
->example('0')
|
||||
->label('SCRAP QUANTITY'),
|
||||
ImportColumn::make('rework_status')
|
||||
->exampleHeader('REWORK STATUS')
|
||||
// ->example('0')
|
||||
->example('0')
|
||||
->label('REWORK STATUS'),
|
||||
ImportColumn::make('created_at')
|
||||
->exampleHeader('CREATED AT')
|
||||
// ->example('2026-02-20 13:00:00')
|
||||
->example('2026-02-20 13:00:00')
|
||||
->label('CREATED AT'),
|
||||
ImportColumn::make('updated_at')
|
||||
->exampleHeader('UPDATED AT')
|
||||
// ->example('2026-02-20 13:00:00')
|
||||
->example('2026-02-20 13:00:00')
|
||||
->label('UPDATED AT'),
|
||||
ImportColumn::make('created_by')
|
||||
->exampleHeader('CREATED BY')
|
||||
// ->example('RAW01234')
|
||||
->example('RAW01234')
|
||||
->label('CREATED BY'),
|
||||
ImportColumn::make('updated_by')
|
||||
->exampleHeader('UPDATED BY')
|
||||
// ->example('RAW01234')
|
||||
->example('RAW01234')
|
||||
->label('UPDATED BY'),
|
||||
];
|
||||
}
|
||||
@@ -98,13 +98,12 @@ class ProcessOrderImporter extends Importer
|
||||
public function resolveRecord(): ?ProcessOrder
|
||||
{
|
||||
$warnMsg = [];
|
||||
$plantCod = $this->data['plant'];
|
||||
$plant = null;
|
||||
$plantCod = trim($this->data['plant']) ?? '';
|
||||
$plantId = null;
|
||||
$item = null;
|
||||
$iCode = trim($this->data['item']) ?? '';
|
||||
$itemId = null;
|
||||
$lineNam = trim($this->data['line']) ?? '';
|
||||
$iCode = trim($this->data['item']);
|
||||
$lineName = trim($this->data['line']);
|
||||
$processOrder = trim($this->data['process_order'] ?? '');
|
||||
$coilNo = trim($this->data['coil_number'] ?? '');
|
||||
$sfgNo = trim($this->data['sfg_number'] ?? '');
|
||||
@@ -121,29 +120,18 @@ class ProcessOrderImporter extends Importer
|
||||
// $operatorName = $user->name;
|
||||
|
||||
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';
|
||||
$warnMsg[] = 'Plant code cannot be empty';
|
||||
}
|
||||
if ($iCode == null || $iCode == '') {
|
||||
$warnMsg[] = "Item code can't be empty!";
|
||||
} elseif (Str::length($iCode) < 6 || ! ctype_alnum($iCode)) {
|
||||
$warnMsg[] = 'Invalid item code found';
|
||||
$warnMsg[] = 'Item code cannot be empty';
|
||||
}
|
||||
if ($processOrder == null || $processOrder == '') {
|
||||
$warnMsg[] = "Process order can't be empty!";
|
||||
} elseif ($processOrder && Str::contains($processOrder, '.')) {
|
||||
$warnMsg[] = 'Invalid process order found!';
|
||||
}
|
||||
if ($lineNam == null || $lineNam == '') {
|
||||
$warnMsg[] = "Line name can't be empty!";
|
||||
$warnMsg[] = 'Process order cannot be empty';
|
||||
}
|
||||
if ($orderQuan == null || $orderQuan == '') {
|
||||
$warnMsg[] = "Order quantity can't be empty!";
|
||||
$warnMsg[] = 'Order quantity cannot be empty';
|
||||
} elseif ($orderQuan == 0 || $orderQuan == '0') {
|
||||
$warnMsg[] = "Order quantity can't be zero!";
|
||||
} elseif (Str::length($orderQuan) >= 1 && ! is_numeric($orderQuan)) {
|
||||
$warnMsg[] = 'Invalid order quantity found!';
|
||||
$warnMsg[] = 'Order quantity cannot be zero';
|
||||
}
|
||||
if ($coilNo == null || $coilNo == '') {
|
||||
$coilNo = '0';
|
||||
@@ -154,70 +142,46 @@ class ProcessOrderImporter extends Importer
|
||||
if ($recQuan == null || $recQuan == '') {
|
||||
$recQuan = 0;
|
||||
}
|
||||
if ($reworkStatus == null || $reworkStatus = '' || $reworkStatus == 0 || $reworkStatus = '0') {
|
||||
if ($reworkStatus == null || $reworkStatus = '') {
|
||||
$reworkStatus = 0;
|
||||
} elseif ($reworkStatus == 1 || $reworkStatus = '1') {
|
||||
$reworkStatus = 1;
|
||||
} else {
|
||||
$warnMsg[] = 'Invalid rework status found';
|
||||
}
|
||||
|
||||
if (! empty($warnMsg)) {
|
||||
throw new RowImportFailedException(implode(', ', $warnMsg));
|
||||
if ($createdBy == null || $createdBy == '') {
|
||||
$createdBy = Filament::auth()->user()?->name;
|
||||
$updatedBy = $createdBy;
|
||||
}
|
||||
|
||||
$plant = Plant::where('code', $plantCod)->first();
|
||||
if (! $plant) {
|
||||
$warnMsg[] = 'Plant not found!';
|
||||
if (Str::length($plantCod) < 4 || ! is_numeric($plantCod) || ! preg_match('/^[1-9]\d{3,}$/', $plantCod)) {
|
||||
$warnMsg[] = 'Invalid plant code found';
|
||||
} 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
|
||||
// $existing = ProcessOrder::where('plant_id', $plantId)->where('process_order', $processOrder)->first();
|
||||
// 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!';
|
||||
if (Str::length($iCode) < 6 || ! ctype_alnum($iCode)) {
|
||||
$warnMsg[] = 'Invalid item code found';
|
||||
} else {
|
||||
if ($plantId) {
|
||||
$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;
|
||||
$itemCode = Item::where('code', $iCode)->first();
|
||||
if (! $itemCode) {
|
||||
$warnMsg[] = 'Item code not found';
|
||||
} else {
|
||||
if ($plantId) {
|
||||
$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 (! $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 ($plant && $itemCode && $processOrder != '') {
|
||||
|
||||
if ($plantId && $itemCode && $lineId && $processOrder != '') {
|
||||
$existingOrder = ProcessOrder::where('plant_id', $plantId)
|
||||
->where('process_order', $processOrder)
|
||||
->first();
|
||||
@@ -227,23 +191,46 @@ class ProcessOrderImporter extends Importer
|
||||
}
|
||||
}
|
||||
|
||||
// $user = User::where('name', $this->data['created_by'])->first();
|
||||
// if (! $user) {
|
||||
// $warnMsg[] = 'User not found!';
|
||||
// }
|
||||
if ($lineName != null && $lineName != '') {
|
||||
$lineExists = Line::where('name', $lineName)->first();
|
||||
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) {
|
||||
$createdBy = Filament::auth()->user()->name;
|
||||
$updatedBy = Filament::auth()->user()->name;
|
||||
} elseif (! $updatedBy) {
|
||||
$updatedBy = Filament::auth()->user()->name;
|
||||
if ($createdBy != null && $createdBy != '') {
|
||||
if ($plantId) {
|
||||
$user = User::where('name', $createdBy)->first();
|
||||
|
||||
$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)) {
|
||||
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)
|
||||
->where('process_order', $processOrder)
|
||||
->where('line_id', $lineId)
|
||||
@@ -286,17 +273,16 @@ class ProcessOrderImporter extends Importer
|
||||
'updated_at' => $updatedAt,
|
||||
]);
|
||||
}
|
||||
} else {
|
||||
$coilNo = '0';
|
||||
|
||||
} elseif ($lineName == null || $lineName == '') {
|
||||
$existing = ProcessOrder::where('plant_id', $plantId)
|
||||
->where('process_order', $processOrder)
|
||||
// ->where('coil_number', $coilNo)
|
||||
->where('coil_number', $coilNo)
|
||||
->first();
|
||||
|
||||
if (! $existing && ($coilNo == '0' || $coilNo == 0)) {
|
||||
if (! $existing && $coilNo == '0' || $coilNo == 0) {
|
||||
ProcessOrder::create([
|
||||
'plant_id' => $plantId,
|
||||
'line_id' => $lineId,
|
||||
'item_id' => $itemId,
|
||||
'process_order' => $processOrder,
|
||||
'coil_number' => '0',
|
||||
@@ -311,8 +297,8 @@ class ProcessOrderImporter extends Importer
|
||||
[
|
||||
'plant_id' => $plantId,
|
||||
'line_id' => $lineId,
|
||||
'item_id' => $itemId,
|
||||
'process_order' => $processOrder,
|
||||
'item_id' => $itemId,
|
||||
'coil_number' => $coilNo,
|
||||
'order_quantity' => $orderQuan,
|
||||
'received_quantity' => $recQuan,
|
||||
@@ -320,32 +306,26 @@ class ProcessOrderImporter extends Importer
|
||||
'sfg_number' => $sfgNo,
|
||||
'machine_name' => $machineName,
|
||||
'rework_status' => $reworkStatus,
|
||||
// 'created_at' => $createdAt,
|
||||
// 'updated_at' => $updatedAt,
|
||||
'created_at' => $createdAt,
|
||||
'updated_at' => $updatedAt,
|
||||
'created_by' => $createdBy,
|
||||
'updated_by' => $updatedBy,
|
||||
]
|
||||
);
|
||||
} else {// $coilNo = '0'
|
||||
if ($existing->process_order == $processOrder) {
|
||||
throw new RowImportFailedException('Process order already exist for the given plant!');
|
||||
} elseif ($existing->rework_status == 1 && $reworkStatus == 0) {
|
||||
throw new RowImportFailedException('Rework coil number already exist for the given Plant and Process Order!');
|
||||
} else {
|
||||
ProcessOrder::where('plant_id', $plantId)
|
||||
->where('process_order', $processOrder)
|
||||
->where('coil_number', $coilNo)
|
||||
->update([
|
||||
// 'order_quantity' => $orderQty,
|
||||
'received_quantity' => $recQuan,
|
||||
'scrap_quantity' => $scrapQuan,
|
||||
// 'sfg_number' => $sfgNo,
|
||||
// 'machine_name' => $machineId,
|
||||
'rework_status' => $reworkStatus,
|
||||
'updated_by' => $updatedBy,
|
||||
// 'updated_at' => $updatedAt,
|
||||
]);
|
||||
}
|
||||
ProcessOrder::where('plant_id', $plantId)
|
||||
->where('process_order', $processOrder)
|
||||
->where('coil_number', $coilNo)
|
||||
->update([
|
||||
// 'order_quantity' => $orderQty,
|
||||
'received_quantity' => $recQuan,
|
||||
'scrap_quantity' => $scrapQuan,
|
||||
// 'sfg_number' => $sfgNo,
|
||||
// 'machine_name' => $machineId,
|
||||
'rework_status' => $reworkStatus,
|
||||
'updated_by' => $updatedBy,
|
||||
'updated_at' => $updatedAt,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -24,77 +24,75 @@ class ProductCharacteristicsMasterImporter extends Importer
|
||||
{
|
||||
return [
|
||||
ImportColumn::make('plant')
|
||||
->label('PLANT CODE')
|
||||
->requiredMapping()
|
||||
->exampleHeader('PLANT CODE')
|
||||
->example(['1000', '1000'])
|
||||
->exampleHeader('Plant Code')
|
||||
->example('1000')
|
||||
->label('Plant Code')
|
||||
->relationship(resolveUsing: 'code')
|
||||
->rules(['required']),
|
||||
ImportColumn::make('item')
|
||||
->label('ITEM CODE')
|
||||
->requiredMapping()
|
||||
->exampleHeader('ITEM CODE')
|
||||
->example(['123456', '123456'])
|
||||
->exampleHeader('Item Code')
|
||||
->example('630214')
|
||||
->label('Item Code')
|
||||
->relationship(resolveUsing: 'code')
|
||||
->rules(['required']),
|
||||
ImportColumn::make('line')
|
||||
->label('LINE NAME')
|
||||
->requiredMapping()
|
||||
->exampleHeader('LINE NAME')
|
||||
->example(['4 inch pump line', '4 inch pump line'])
|
||||
->exampleHeader('Line Name')
|
||||
->example('4 inch pump line')
|
||||
->label('Line Name')
|
||||
->relationship(resolveUsing: 'name')
|
||||
->rules(['required']),
|
||||
ImportColumn::make('work_group_master_id')
|
||||
->label('GROUP WORK CENTER')
|
||||
->label('Group Work Center')
|
||||
->requiredMapping()
|
||||
->exampleHeader('GROUP WORK CENTER')
|
||||
->example(['RMGSTR01', 'RMGSTR01'])
|
||||
->exampleHeader('Group Work Center')
|
||||
->example('RMGCGABC')
|
||||
->relationship(resolveUsing: 'name')
|
||||
->rules(['required']),
|
||||
ImportColumn::make('machine')
|
||||
->label('WORK CENTER')
|
||||
->requiredMapping()
|
||||
->exampleHeader('WORK CENTER')
|
||||
->example(['RMISTR01', 'RMISTR02'])
|
||||
->exampleHeader('Work Center')
|
||||
->example('RMGCE001')
|
||||
->label('Work Center')
|
||||
->relationship(resolveUsing: 'work_center')
|
||||
->rules(['required']),
|
||||
ImportColumn::make('characteristics_type')
|
||||
->label('CHARACTERISTICS TYPE')
|
||||
->requiredMapping()
|
||||
->exampleHeader('CHARACTERISTICS TYPE')
|
||||
->example(['Product', 'Process'])
|
||||
->exampleHeader('Characteristics Type')
|
||||
->example('Process or Product')
|
||||
->label('Characteristics Type')
|
||||
->rules(['required']),
|
||||
ImportColumn::make('name')
|
||||
->label('CHARACTERISTICS NAME')
|
||||
->requiredMapping()
|
||||
->exampleHeader('CHARACTERISTICS NAME')
|
||||
->example(['TEST01', 'TEST02'])
|
||||
->exampleHeader('Characteristics Name')
|
||||
->example('Body')
|
||||
->label('Characteristics Name')
|
||||
->rules(['required']),
|
||||
ImportColumn::make('inspection_type')
|
||||
->label('INSPECTION TYPE')
|
||||
->requiredMapping()
|
||||
->exampleHeader('INSPECTION TYPE')
|
||||
->example(['Value', 'Visual'])
|
||||
->exampleHeader('Inspection Type')
|
||||
->example('Visual or Value')
|
||||
->label('Inspection Type')
|
||||
->rules(['required']),
|
||||
ImportColumn::make('lower')
|
||||
->label('LOWER')
|
||||
->requiredMapping()
|
||||
->exampleHeader('LOWER')
|
||||
->example(['5', '0'])
|
||||
->rules(['required']),
|
||||
->exampleHeader('Lower')
|
||||
->example('0')
|
||||
->label('Lower')
|
||||
->rules(['numeric']),
|
||||
ImportColumn::make('middle')
|
||||
->label('MIDDLE')
|
||||
->requiredMapping()
|
||||
->exampleHeader('MIDDLE')
|
||||
->example(['10', '0'])
|
||||
->rules(['required']),
|
||||
->exampleHeader('Middle')
|
||||
->example('1')
|
||||
->label('Middle')
|
||||
->numeric()
|
||||
->rules(['numeric']),
|
||||
ImportColumn::make('upper')
|
||||
->label('UPPER')
|
||||
->requiredMapping()
|
||||
->exampleHeader('UPPER')
|
||||
->example(['15', '0'])
|
||||
->rules(['required']),
|
||||
// ImportColumn::make('created_by'),
|
||||
->exampleHeader('Upper')
|
||||
->example('2')
|
||||
->label('Upper')
|
||||
->rules(['numeric']),
|
||||
ImportColumn::make('created_by')
|
||||
->exampleHeader('Created By')
|
||||
->example('Admin')
|
||||
->label('Created By'),
|
||||
// ImportColumn::make('updated_by'),
|
||||
|
||||
];
|
||||
@@ -104,174 +102,117 @@ class ProductCharacteristicsMasterImporter extends Importer
|
||||
{
|
||||
|
||||
$warnMsg = [];
|
||||
$plantCod = trim($this->data['plant']) ?? null;
|
||||
$itemCod = trim($this->data['item']) ?? null;
|
||||
$lineNam = trim($this->data['line']) ?? null;
|
||||
$groupWorkCenter = trim($this->data['work_group_master_id']) ?? null;
|
||||
$workCenter = trim($this->data['machine']) ?? 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;
|
||||
|
||||
$plantCod = $this->data['plant'];
|
||||
$updatedBy = Filament::auth()->user()->name; // ?? 'Admin'
|
||||
$lower = null;
|
||||
$middle = null;
|
||||
$upper = null;
|
||||
$plantId = null;
|
||||
$itemId = null;
|
||||
$lineId = null;
|
||||
$workGroupMasterId = null;
|
||||
$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!';
|
||||
$name = trim($this->data['name']);
|
||||
if (Str::length($plantCod) < 4 || ! is_numeric($plantCod) || ! preg_match('/^[1-9]\d{3,}$/', $plantCod)) {
|
||||
$warnMsg[] = 'Invalid plant code found';
|
||||
} else {
|
||||
$plantId = $plant->id;
|
||||
$itemExists = Item::where('code', $itemCod)->first();
|
||||
if (! $itemExists) {
|
||||
$warnMsg[] = 'Item code not found!';
|
||||
$plant = Plant::where('code', $plantCod)->first();
|
||||
if (! $plant) {
|
||||
$warnMsg[] = 'Plant not found';
|
||||
} 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) {
|
||||
$warnMsg[] = 'Item code not found for the given plant!';
|
||||
$warnMsg[] = 'Item code not found for the given plant';
|
||||
} else {
|
||||
$itemId = $itemAgainstPlant->id;
|
||||
}
|
||||
}
|
||||
|
||||
$lineExists = Line::where('name', $lineNam)->first();
|
||||
if (! $lineExists) {
|
||||
$warnMsg[] = 'Line name not found!';
|
||||
} else {
|
||||
$lineAgainstPlant = Line::where('name', $lineNam)->where('plant_id', $plantId)->first();
|
||||
$lineExists = Line::where('name', $this->data['line'])->first();
|
||||
if (! $lineExists) {
|
||||
$warnMsg[] = 'Line not found';
|
||||
}
|
||||
|
||||
$lineAgainstPlant = Line::where('name', $this->data['line'])
|
||||
->where('plant_id', $plantId)
|
||||
->first();
|
||||
|
||||
if (! $lineAgainstPlant) {
|
||||
$warnMsg[] = 'Line name not found for the given plant!';
|
||||
$warnMsg[] = 'Line not found for the given plant';
|
||||
} else {
|
||||
$lineId = $lineAgainstPlant->id;
|
||||
$LineId = $lineAgainstPlant->id;
|
||||
}
|
||||
|
||||
$WorkgroupMaster = WorkGroupMaster::where('name', $groupWorkCenter)->first();
|
||||
if (! $WorkgroupMaster) {
|
||||
$warnMsg[] = 'Group work center not found!';
|
||||
} 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;
|
||||
$WorkgroupMaster = WorkGroupMaster::where('name', $this->data['work_group_master_id'])->where('plant_id', $plantId)->first();
|
||||
if (! $WorkgroupMaster) {
|
||||
$warnMsg[] = 'Work Group Master value not found';
|
||||
} else {
|
||||
|
||||
// 2. Now check if this WorkGroupMaster id exists in ANY of the 10 columns
|
||||
$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();
|
||||
$workGroupMasterId = $WorkgroupMaster->id;
|
||||
|
||||
if (! $existsInLine) {
|
||||
$workGroupMasterId = null;
|
||||
$warnMsg[] = "Group work center '{$WorkgroupMaster->name}' is not mapped for the given line!";
|
||||
} else {
|
||||
$workGroupMasterId = $WorkgroupMaster->id;
|
||||
|
||||
$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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 2. Now check if this WorkGroupMaster id exists in ANY of the 10 columns
|
||||
$existsInLine = Line::where('plant_id', $plantId)
|
||||
->where(function ($q) use ($workGroupMasterId) {
|
||||
for ($i = 1; $i <= 10; $i++) {
|
||||
$q->orWhere("work_group{$i}_id", $workGroupMasterId);
|
||||
}
|
||||
}
|
||||
})
|
||||
->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();
|
||||
if (! $user) {
|
||||
$warnMsg[] = 'Created by user 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.';
|
||||
$machine = Machine::where('work_center', $this->data['machine'])->first();
|
||||
if (! $machine) {
|
||||
$warnMsg[] = 'Work Center not found';
|
||||
} else {
|
||||
$lower = (float) $lower;
|
||||
$middle = (float) $middle;
|
||||
$upper = (float) $upper;
|
||||
if ($lower == $upper) {
|
||||
if ($lower != $middle) {
|
||||
$warnMsg[] = "For 'Value' inspection type, values must satisfy: Lower = Middle = Upper.";
|
||||
}
|
||||
} elseif (! ($lower < $middle && $middle < $upper)) {
|
||||
$warnMsg[] = "For 'Value' inspection type, values must satisfy: Lower < Middle < Upper.";
|
||||
$machineId = $machine->id;
|
||||
}
|
||||
|
||||
$machineAgainstPlant = Machine::where('work_center', $this->data['machine'])
|
||||
->where('plant_id', $plantId)
|
||||
->first();
|
||||
|
||||
if (! $machineAgainstPlant) {
|
||||
$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));
|
||||
}
|
||||
|
||||
if ($machineId) {
|
||||
$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();
|
||||
if ($record) {
|
||||
$createdBy = $record->created_by ?? $createdBy;
|
||||
}
|
||||
// $record = ProductCharacteristicsMaster::firstOrNew([
|
||||
// 'plant_id' => $plantId,
|
||||
// 'item_id' => $itemId,
|
||||
// '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(
|
||||
[
|
||||
'plant_id' => $plantId,
|
||||
'item_id' => $itemId,
|
||||
'line_id' => $lineId,
|
||||
'work_group_master_id' => $workGroupMasterId,
|
||||
'machine_id' => $machineId,
|
||||
'characteristics_type' => $charTyp,
|
||||
'name' => $charNam,
|
||||
],
|
||||
[
|
||||
'inspection_type' => $inspectTyp,
|
||||
'lower' => $lower,
|
||||
'middle' => $middle,
|
||||
'upper' => $upper,
|
||||
'created_by' => $createdBy,
|
||||
'updated_by' => $updatedBy,
|
||||
]);
|
||||
}
|
||||
ProductCharacteristicsMaster::updateOrCreate(
|
||||
[
|
||||
'plant_id' => $plantId,
|
||||
'item_id' => $itemId,
|
||||
'line_id' => $LineId,
|
||||
'work_group_master_id' => $workGroupMasterId,
|
||||
'machine_id' => $machineId,
|
||||
],
|
||||
[
|
||||
'name' => $name,
|
||||
'characteristics_type' => $this->data['characteristics_type'],
|
||||
'inspection_type' => $this->data['inspection_type'],
|
||||
'lower' => $lower,
|
||||
'middle' => $middle,
|
||||
'upper' => $upper,
|
||||
// 'created_by' => user ?? $this->data['created_by'],
|
||||
'created_by' => $this->data['created_by'] ?? null,
|
||||
'updated_by' => $updatedBy ?? null,
|
||||
]);
|
||||
|
||||
return null;
|
||||
|
||||
|
||||
@@ -158,20 +158,8 @@ class ProductionPlanImporter extends Importer
|
||||
|
||||
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([
|
||||
'plan_quantity' => $this->data['plan_quantity'],
|
||||
'working_days' => $workingDays,
|
||||
'operator_id' => $operatorName,
|
||||
]);
|
||||
$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([
|
||||
'plant_id' => $plant->id,
|
||||
'line_id' => $line->id,
|
||||
'item_id' => $itemAgaPlant->id,
|
||||
// 'shift_id' => $shift->id,
|
||||
'plan_quantity' => $this->data['plan_quantity'],
|
||||
'working_days' => $workingDays,
|
||||
'created_at' =>now(),
|
||||
'updated_at' => now(),
|
||||
'operator_id' => $operatorName,
|
||||
|
||||
@@ -163,15 +163,11 @@ class ProductionQuantityPage extends Page implements HasForms
|
||||
return $form
|
||||
->statePath('filters')
|
||||
->schema([
|
||||
|
||||
Select::make('plant_id')
|
||||
// ->options(Plant::pluck('name', 'id'))
|
||||
->options(Plant::pluck('name', 'id'))
|
||||
->label('Plant')
|
||||
->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()
|
||||
->columnSpan(1)
|
||||
->default(function () {
|
||||
@@ -352,8 +348,7 @@ class ProductionQuantityPage extends Page implements HasForms
|
||||
}
|
||||
})
|
||||
->extraAttributes(fn ($get) => [
|
||||
'id' => 'production_order',
|
||||
'wire:keydown.enter' => '$dispatch("focus-qr-input")',
|
||||
'id' => 'scan_locator_no',
|
||||
'class' => $get('productionError') ? 'border-red-500' : '',
|
||||
])
|
||||
->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();
|
||||
|
||||
if (! $machinenotAgaPlant) {
|
||||
if (!$machinenotAgaPlant) {
|
||||
Notification::make()
|
||||
->title('Unknown WorkCenter')
|
||||
->body('Work Center not found')
|
||||
->body("Work Center not found")
|
||||
->danger()
|
||||
->send();
|
||||
$this->form->fill([
|
||||
$this->form->fill([
|
||||
'plant_id' => $this->pId,
|
||||
'machine_id' => $this->mNam,
|
||||
'block_name' => $this->bNam,
|
||||
@@ -445,9 +440,9 @@ class ProductionQuantityPage extends Page implements HasForms
|
||||
// 'operator_id'=> $operatorName,
|
||||
'recent_qr' => $this->recQr,
|
||||
]);
|
||||
|
||||
return;
|
||||
} elseif (! $machineAgaPlant) {
|
||||
}
|
||||
else if (!$machineAgaPlant) {
|
||||
Notification::make()
|
||||
->title('Unknown WorkCenter')
|
||||
->body("Work Center not found against plant code $PlaCo")
|
||||
@@ -469,20 +464,20 @@ class ProductionQuantityPage extends Page implements HasForms
|
||||
// 'operator_id'=> $operatorName,
|
||||
'recent_qr' => $this->recQr,
|
||||
]);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$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();
|
||||
|
||||
$itemCode = $item?->code ?? '';
|
||||
$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,
|
||||
'recent_qr' => $this->recQr,
|
||||
]);
|
||||
$this->dispatch('focus-production-order');
|
||||
$this->triggerChartUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
// Method to process the value when Enter is pressed
|
||||
|
||||
#[On('handleQrScan')]
|
||||
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 )')
|
||||
->danger()
|
||||
->send();
|
||||
|
||||
return;
|
||||
} else {
|
||||
if (! $this->pId) {
|
||||
@@ -1128,6 +1125,7 @@ class ProductionQuantityPage extends Page implements HasForms
|
||||
$iCode = trim($splits[0]);
|
||||
$sNumber = isset($splits[1]) ? trim($splits[1]) : null;
|
||||
|
||||
|
||||
if (! ctype_alnum($iCode)) {
|
||||
|
||||
$this->form->fill([
|
||||
|
||||
@@ -31,6 +31,47 @@ class ProductionTarget extends Page
|
||||
->schema([
|
||||
Section::make('')
|
||||
->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')
|
||||
->label('Year')
|
||||
->reactive()
|
||||
@@ -56,13 +97,9 @@ class ProductionTarget extends Page
|
||||
->required()
|
||||
->afterStateUpdated(function ($state, callable $get, $set) {
|
||||
$set('month', null);
|
||||
$set('plant_id', null);
|
||||
$set('line_id', null);
|
||||
$set('category', null);
|
||||
$plantId = $get('plant_id');
|
||||
$lineId = $get('line_id');
|
||||
// $this->dispatch('loadData',$plantId, $lineId, $state, '');
|
||||
$this->dispatch('loadData',$state, '', '', '', '');
|
||||
$this->dispatch('loadData',$plantId, $lineId, $state, '');
|
||||
}),
|
||||
|
||||
Select::make('month')
|
||||
@@ -84,86 +121,23 @@ class ProductionTarget extends Page
|
||||
'12' => 'December',
|
||||
])
|
||||
->required()
|
||||
->afterStateUpdated(function ($state, callable $get, $set) {
|
||||
|
||||
$set('plant_id', null);
|
||||
$set('line_id', null);
|
||||
$set('category', null);
|
||||
->afterStateUpdated(function ($state, callable $get) {
|
||||
|
||||
$plantId = $get('plant_id');
|
||||
$lineId = $get('line_id');
|
||||
// $month = $get('month');
|
||||
$year = $get('year');
|
||||
|
||||
$this->dispatch('loadData',$year, $state, '', '', '');
|
||||
$month = (int) $get('month');
|
||||
|
||||
// $plantId = $get('plant_id');
|
||||
// $lineId = $get('line_id');
|
||||
// // $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 [];
|
||||
if (!$month) {
|
||||
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');
|
||||
$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);
|
||||
$this->dispatch('loadData', $plantId, $lineId, $month, $year);
|
||||
}),
|
||||
|
||||
])
|
||||
->columns(5)
|
||||
->columns(4)
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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');
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,6 @@
|
||||
namespace App\Filament\Resources;
|
||||
|
||||
use App\Filament\Exports\CharacteristicApproverMasterExporter;
|
||||
use App\Filament\Imports\CharacteristicApproverMasterImporter;
|
||||
use App\Filament\Resources\CharacteristicApproverMasterResource\Pages;
|
||||
use App\Models\CharacteristicApproverMaster;
|
||||
use App\Models\Machine;
|
||||
@@ -399,13 +398,13 @@ class CharacteristicApproverMasterResource extends Resource
|
||||
]),
|
||||
])
|
||||
->headerActions([
|
||||
ImportAction::make()
|
||||
->label('Import Characteristics Approver Master')
|
||||
->color('warning')
|
||||
->importer(CharacteristicApproverMasterImporter::class)
|
||||
->visible(function () {
|
||||
return Filament::auth()->user()->can('view import characteristic approver master');
|
||||
}),
|
||||
// ImportAction::make()
|
||||
// ->label('Import Characteristics Approver Master')
|
||||
// ->color('warning')
|
||||
// ->importer(CharacteristicApproverMasterImporter::class)
|
||||
// ->visible(function () {
|
||||
// return Filament::auth()->user()->can('view import characteristic approver master');
|
||||
// }),
|
||||
ExportAction::make()
|
||||
->label('Export Characteristics Approver Master')
|
||||
->color('warning')
|
||||
|
||||
@@ -17,7 +17,6 @@ use Filament\Forms\Components\DateTimePicker;
|
||||
use Filament\Forms\Components\Select;
|
||||
use Filament\Forms\Components\TextInput;
|
||||
use Filament\Forms\Form;
|
||||
use Filament\Forms\Get;
|
||||
use Filament\Resources\Resource;
|
||||
use Filament\Tables;
|
||||
use Filament\Tables\Actions\ExportAction;
|
||||
@@ -42,22 +41,20 @@ class CharacteristicValueResource extends Resource
|
||||
return $form
|
||||
->schema([
|
||||
Forms\Components\Select::make('plant_id')
|
||||
->label('Plant Name')
|
||||
->nullable()
|
||||
->label('Plant')
|
||||
->searchable()
|
||||
->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();
|
||||
})
|
||||
->disabled(fn (Get $get) => ! empty($get('id')))
|
||||
->default(function () {
|
||||
$userHas = Filament::auth()->user()->plant_id;
|
||||
|
||||
return ($userHas && strlen($userHas) > 0) ? $userHas : optional(CharacteristicValue::latest()->first())->plant_id;
|
||||
})
|
||||
->reactive()
|
||||
->afterStateUpdated(function ($state, $set, callable $get) {
|
||||
$plantId = $get('plant_id');
|
||||
$set('line_id', null);
|
||||
@@ -79,10 +76,8 @@ class CharacteristicValueResource extends Resource
|
||||
->hintColor('danger')
|
||||
->required(),
|
||||
Forms\Components\Select::make('line_id')
|
||||
->label('Line Name')
|
||||
->nullable()
|
||||
->label('Line')
|
||||
->searchable()
|
||||
->reactive()
|
||||
->options(function (callable $get) {
|
||||
if (! $get('plant_id')) {
|
||||
return [];
|
||||
@@ -92,7 +87,6 @@ class CharacteristicValueResource extends Resource
|
||||
->pluck('name', 'id')
|
||||
->toArray();
|
||||
})
|
||||
->disabled(fn (Get $get) => ! empty($get('id')))
|
||||
->afterStateUpdated(function ($state, $set, callable $get) {
|
||||
$plantId = $get('plant_id');
|
||||
$set('item_id', null);
|
||||
@@ -107,12 +101,11 @@ class CharacteristicValueResource extends Resource
|
||||
$set('poPlantError', 'Please select a plant first.');
|
||||
}
|
||||
})
|
||||
->reactive()
|
||||
->required(),
|
||||
Forms\Components\Select::make('item_id')
|
||||
->label('Item Code')
|
||||
->nullable()
|
||||
->label('Item')
|
||||
->searchable()
|
||||
->reactive()
|
||||
->options(function (callable $get) {
|
||||
if (! $get('plant_id') || ! $get('line_id')) {
|
||||
return [];
|
||||
@@ -122,7 +115,6 @@ class CharacteristicValueResource extends Resource
|
||||
->pluck('code', 'id')
|
||||
->toArray();
|
||||
})
|
||||
->disabled(fn (Get $get) => ! empty($get('id')))
|
||||
->afterStateUpdated(function ($state, $set, callable $get) {
|
||||
$plantId = $get('plant_id');
|
||||
$set('machine_id', null);
|
||||
@@ -136,12 +128,11 @@ class CharacteristicValueResource extends Resource
|
||||
$set('poPlantError', 'Please select a plant first.');
|
||||
}
|
||||
})
|
||||
->reactive()
|
||||
->required(),
|
||||
Forms\Components\Select::make('machine_id')
|
||||
->label('Work Center')
|
||||
->nullable()
|
||||
->label('Machine')
|
||||
->searchable()
|
||||
->reactive()
|
||||
->options(function (callable $get) {
|
||||
if (! $get('plant_id') || ! $get('line_id') || ! $get('item_id')) {
|
||||
return [];
|
||||
@@ -152,7 +143,6 @@ class CharacteristicValueResource extends Resource
|
||||
->pluck('work_center', 'id')
|
||||
->toArray();
|
||||
})
|
||||
->disabled(fn (Get $get) => ! empty($get('id')))
|
||||
->afterStateUpdated(function ($state, $set, callable $get) {
|
||||
$plantId = $get('plant_id');
|
||||
$set('process_order', null);
|
||||
@@ -165,6 +155,7 @@ class CharacteristicValueResource extends Resource
|
||||
$set('poPlantError', 'Please select a plant first.');
|
||||
}
|
||||
})
|
||||
->reactive()
|
||||
->required(),
|
||||
Forms\Components\TextInput::make('process_order')
|
||||
->label('Process Order')
|
||||
@@ -334,12 +325,12 @@ class CharacteristicValueResource extends Resource
|
||||
return ($currentPage - 1) * $perPage + $rowLoop->iteration;
|
||||
}),
|
||||
Tables\Columns\TextColumn::make('plant.name')
|
||||
->label('Plant Name')
|
||||
->label('Plant')
|
||||
->searchable()
|
||||
->alignCenter()
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('line.name')
|
||||
->label('Line Name')
|
||||
->label('Line')
|
||||
->searchable()
|
||||
->alignCenter()
|
||||
->sortable(),
|
||||
@@ -348,13 +339,8 @@ class CharacteristicValueResource extends Resource
|
||||
->searchable()
|
||||
->alignCenter()
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('item.description')
|
||||
->label('Item Description')
|
||||
->searchable()
|
||||
->alignCenter()
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('machine.work_center')
|
||||
->label('Work Center')
|
||||
->label('Machine')
|
||||
->searchable()
|
||||
->alignCenter()
|
||||
->sortable(),
|
||||
@@ -436,32 +422,20 @@ class CharacteristicValueResource extends Resource
|
||||
->label('Advanced Filters')
|
||||
->form([
|
||||
Select::make('Plant')
|
||||
->label('Search by Plant Name')
|
||||
->label('Select Plant')
|
||||
->nullable()
|
||||
->searchable()
|
||||
->reactive()
|
||||
->options(function (callable $get) {
|
||||
$userHas = Filament::auth()->user()->plant_id;
|
||||
|
||||
if ($userHas && strlen($userHas) > 0) {
|
||||
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();
|
||||
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) {
|
||||
$set('Item', null);
|
||||
$set('Machine', null);
|
||||
}),
|
||||
Select::make('Line')
|
||||
->label('Search by Line Name')
|
||||
->label('Select Line')
|
||||
->nullable()
|
||||
->searchable()
|
||||
->reactive()
|
||||
->options(function (callable $get) {
|
||||
$plantId = $get('Plant');
|
||||
|
||||
@@ -469,22 +443,18 @@ class CharacteristicValueResource extends Resource
|
||||
return [];
|
||||
}
|
||||
|
||||
return Line::whereHas('characteristicValues', function ($query) use ($plantId) {
|
||||
if ($plantId) {
|
||||
$query->where('plant_id', $plantId);
|
||||
}
|
||||
})->pluck('name', 'id');
|
||||
return Line::where('plant_id', $plantId)->pluck('name', 'id');
|
||||
|
||||
// return $plantId ? Item::where('plant_id', $plantId)->pluck('code', 'id') : [];
|
||||
})
|
||||
->reactive()
|
||||
->afterStateUpdated(function ($state, callable $set, callable $get) {
|
||||
$set('Item', null);
|
||||
$set('Machine', null);
|
||||
}),
|
||||
Select::make('Item')
|
||||
->label('Search by Item Code')
|
||||
->label('Item Code')
|
||||
->nullable()
|
||||
->searchable()
|
||||
->reactive()
|
||||
->options(function (callable $get) {
|
||||
$plantId = $get('Plant');
|
||||
|
||||
@@ -492,21 +462,17 @@ class CharacteristicValueResource extends Resource
|
||||
return [];
|
||||
}
|
||||
|
||||
return Item::whereHas('characteristicValues', function ($query) use ($plantId) {
|
||||
if ($plantId) {
|
||||
$query->where('plant_id', $plantId);
|
||||
}
|
||||
})->pluck('code', 'id');
|
||||
return 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) {
|
||||
$set('process_order', null);
|
||||
}),
|
||||
Select::make('Machine')
|
||||
->label('Search by Work Center')
|
||||
->label('Select Machine')
|
||||
->nullable()
|
||||
->searchable()
|
||||
->reactive()
|
||||
->options(function (callable $get) {
|
||||
$plantId = $get('Plant');
|
||||
$lineId = $get('Line');
|
||||
@@ -515,13 +481,11 @@ class CharacteristicValueResource extends Resource
|
||||
return [];
|
||||
}
|
||||
|
||||
return Machine::whereHas('characteristicValues', function ($query) use ($plantId, $lineId) {
|
||||
if ($plantId && $lineId) {
|
||||
$query->where('plant_id', $plantId)->where('line_id', $lineId);
|
||||
}
|
||||
})->pluck('work_center', 'id');
|
||||
return Machine::where('plant_id', $plantId)->where('line_id', $lineId)->pluck('work_center', 'id');
|
||||
|
||||
// return $plantId ? Item::where('plant_id', $plantId)->pluck('code', 'id') : [];
|
||||
})
|
||||
->reactive()
|
||||
->afterStateUpdated(function ($state, callable $set, callable $get) {
|
||||
$set('process_order', null);
|
||||
}),
|
||||
@@ -577,11 +541,11 @@ class CharacteristicValueResource extends Resource
|
||||
}
|
||||
|
||||
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'])) {
|
||||
$query->where('coil_number', 'like', '%'.$data['coil_number'].'%');
|
||||
$query->where('coil_number', $data['coil_number']);
|
||||
}
|
||||
|
||||
if (! empty($data['status'])) {
|
||||
@@ -602,7 +566,7 @@ class CharacteristicValueResource extends Resource
|
||||
$indicators = [];
|
||||
|
||||
if (! empty($data['Plant'])) {
|
||||
$indicators[] = 'Plant Name: '.Plant::where('id', $data['Plant'])->value('name');
|
||||
$indicators[] = 'Plant: '.Plant::where('id', $data['Plant'])->value('name');
|
||||
} else {
|
||||
$userHas = Filament::auth()->user()->plant_id;
|
||||
|
||||
@@ -612,15 +576,15 @@ class CharacteristicValueResource extends Resource
|
||||
}
|
||||
|
||||
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'])) {
|
||||
$indicators[] = 'Item Code: '.Item::where('id', $data['Item'])->value('code');
|
||||
$indicators[] = 'Item: '.Item::where('id', $data['Item'])->value('code');
|
||||
}
|
||||
|
||||
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'])) {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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(),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -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(),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -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(),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -12,7 +12,6 @@ use Filament\Facades\Filament;
|
||||
use Filament\Forms;
|
||||
use Filament\Forms\Components\Actions\Action;
|
||||
use Filament\Forms\Form;
|
||||
use Filament\Forms\Get;
|
||||
use Filament\Notifications\Notification;
|
||||
use Filament\Resources\Resource;
|
||||
use Filament\Tables;
|
||||
@@ -46,7 +45,6 @@ class GrMasterResource extends Resource
|
||||
->reactive()
|
||||
->searchable()
|
||||
->relationship('plant', 'name')
|
||||
->disabled(fn (Get $get) => ! empty($get('id')))
|
||||
->options(function (callable $get) {
|
||||
$userHas = Filament::auth()->user()->plant_id;
|
||||
|
||||
@@ -58,7 +56,6 @@ class GrMasterResource extends Resource
|
||||
// ->relationship('item', 'id')
|
||||
->reactive()
|
||||
->searchable()
|
||||
->disabled(fn (Get $get) => ! empty($get('id')))
|
||||
->options(function (callable $get) {
|
||||
$plantId = $get('plant_id');
|
||||
if (empty($plantId)) {
|
||||
@@ -449,7 +446,7 @@ class GrMasterResource extends Resource
|
||||
->alignCenter()
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('item.code')
|
||||
->label('Item')
|
||||
->label('Item Code')
|
||||
->searchable()
|
||||
->alignCenter()
|
||||
->sortable(),
|
||||
|
||||
@@ -351,12 +351,12 @@ class InvoiceInTransitResource extends Resource
|
||||
if (empty($transportName)) {
|
||||
$invalidTransportName[] = "Row {$index}";
|
||||
}
|
||||
// if (empty($LRBAWNo)) {
|
||||
// $invalidLRBLAWNo[] = "Row {$index}";
|
||||
// }
|
||||
// if (empty($LRBAWDt)) {
|
||||
// $invalidLRBLAWDt[] = "Row {$index}";
|
||||
// }
|
||||
if (empty($LRBAWNo)) {
|
||||
$invalidLRBLAWNo[] = "Row {$index}";
|
||||
}
|
||||
if (empty($LRBAWDt)) {
|
||||
$invalidLRBLAWDt[] = "Row {$index}";
|
||||
}
|
||||
if (empty($pendingDays)) {
|
||||
$invalidPenDay[] = "Row {$index}";
|
||||
}
|
||||
@@ -367,56 +367,50 @@ class InvoiceInTransitResource extends Resource
|
||||
$invalidPlaCoFound[] = $plantCode;
|
||||
}
|
||||
|
||||
if($LRBAWNo){
|
||||
if(strlen($LRBAWNo) < 2){
|
||||
$invalidLRBLAWNo[] = $LRBAWNo;
|
||||
}
|
||||
}
|
||||
|
||||
$plant = Plant::where('code', $plantCode)->first();
|
||||
|
||||
// $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 = '';
|
||||
|
||||
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)) {
|
||||
$errorMsg .= 'Missing Receiving Plant in rows: '.implode(', ', $invalidRecPlant).'<br>';
|
||||
$errorMsg .= 'Missing Receiving Plant Name in rows: '.implode(', ', $invalidRecPlant).'<br>';
|
||||
}
|
||||
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)) {
|
||||
$errorMsg .= 'Missing Invoice Number in rows: '.implode(', ', $invalidInvNo).'<br>';
|
||||
$errorMsg .= 'Missing Transport Name in rows: '.implode(', ', $invalidInvNo).'<br>';
|
||||
}
|
||||
if (! empty($invalidInvDt)) {
|
||||
$errorMsg .= 'Missing Invoice Dates in rows: '.implode(', ', $invalidInvDt).'<br>';
|
||||
$errorMsg .= 'Missing Receiving Plant in rows: '.implode(', ', $invalidInvDt).'<br>';
|
||||
}
|
||||
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)) {
|
||||
$errorMsg .= 'Missing Item Description in rows: '.implode(', ', $invalidDesc).'<br>';
|
||||
$errorMsg .= 'Missing Transit Days in rows: '.implode(', ', $invalidDesc).'<br>';
|
||||
}
|
||||
if (! empty($invalidQty)) {
|
||||
$errorMsg .= 'Missing Quantity in rows: '.implode(', ', $invalidQty).'<br>';
|
||||
$errorMsg .= 'Missing Transport Name in rows: '.implode(', ', $invalidQty).'<br>';
|
||||
}
|
||||
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)) {
|
||||
$errorMsg .= 'Missing Pending Days in rows: '.implode(', ', $invalidPenDay).'<br>';
|
||||
$errorMsg .= 'Missing Transport Name in rows: '.implode(', ', $invalidPenDay).'<br>';
|
||||
}
|
||||
|
||||
Notification::make()
|
||||
@@ -460,30 +454,19 @@ class InvoiceInTransitResource extends Resource
|
||||
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;
|
||||
|
||||
$firstRow = $rows[0] ?? [];
|
||||
|
||||
if (count($firstRow) < $mandatoryColumns) {
|
||||
|
||||
Notification::make()
|
||||
->title('Invalid Excel Format')
|
||||
->body('Few columns not found. Columns A to W are mandatory.')
|
||||
->danger()
|
||||
->persistent()
|
||||
->send();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -547,7 +530,7 @@ class InvoiceInTransitResource extends Resource
|
||||
if (! empty($OBDDate)) {
|
||||
if (preg_match('/^\d{2}[-\/]\d{2}[-\/]\d{4}$/', $OBDDate)) {
|
||||
[$day, $month, $year] = preg_split('/[-\/]/', $OBDDate);
|
||||
$formatted = "{$year}-{$month}-{$day}";
|
||||
$formattedDate = "{$year}-{$month}-{$day}";
|
||||
} elseif (is_numeric($OBDDate)) {
|
||||
$formatted = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($OBDDate)->format('Y-m-d');
|
||||
} else {
|
||||
@@ -557,16 +540,6 @@ class InvoiceInTransitResource extends Resource
|
||||
$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([
|
||||
'plant_id' => $plant->id,
|
||||
'receiving_plant' => $receivingPlant,
|
||||
@@ -594,28 +567,10 @@ class InvoiceInTransitResource extends Resource
|
||||
'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) {
|
||||
$message = "Invoice in transit uploaded successfully!";
|
||||
|
||||
if (!empty($formattedMissed)) {
|
||||
$message .= "\n\nSkipped Invoices (Missing LR/Date):\n"
|
||||
. implode("\n", $formattedMissed);
|
||||
}
|
||||
|
||||
Notification::make()
|
||||
->title('Upload Completed')
|
||||
->body($message)
|
||||
->title('Upload Success')
|
||||
->body('Invoice in transit uploaded successfully!')
|
||||
->success()
|
||||
->send();
|
||||
|
||||
@@ -626,6 +581,7 @@ class InvoiceInTransitResource extends Resource
|
||||
->body('Invoice in transit upload failed!')
|
||||
->success()
|
||||
->send();
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ namespace App\Filament\Resources;
|
||||
|
||||
use AlperenErsoy\FilamentExport\Actions\FilamentExportBulkAction;
|
||||
use App\Filament\Exports\InvoiceValidationExporter;
|
||||
use App\Filament\Imports\InvoiceValidationImporter;
|
||||
use App\Filament\Resources\InvoiceValidationResource\Pages;
|
||||
use App\Mail\InvoiceNotification;
|
||||
use App\Models\InvoiceValidation;
|
||||
@@ -28,7 +27,6 @@ use Filament\Resources\Resource;
|
||||
use Filament\Tables;
|
||||
use Filament\Tables\Actions\Action;
|
||||
use Filament\Tables\Actions\ExportAction;
|
||||
use Filament\Tables\Actions\ImportAction;
|
||||
use Filament\Tables\Filters\Filter;
|
||||
use Filament\Tables\Table;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
@@ -1127,13 +1125,6 @@ class InvoiceValidationResource extends Resource
|
||||
->visible(function () {
|
||||
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()
|
||||
->label('Export Invoices')
|
||||
->color('warning')
|
||||
@@ -1198,23 +1189,17 @@ class InvoiceValidationResource extends Resource
|
||||
->inlineLabel(false)
|
||||
->inline(),
|
||||
Select::make('Plant')
|
||||
->label('Search by Plant Name')
|
||||
->label('Select Plant')
|
||||
->nullable()
|
||||
->searchable()
|
||||
->reactive()
|
||||
// ->options(function () {
|
||||
// return Plant::pluck('name', 'id');
|
||||
// })
|
||||
->options(function (callable $get) {
|
||||
$userHas = Filament::auth()->user()->plant_id;
|
||||
|
||||
if ($userHas && strlen($userHas) > 0) {
|
||||
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();
|
||||
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 {
|
||||
$set('sticker_master_id', null);
|
||||
$set('operator_id', null);
|
||||
@@ -1228,8 +1213,6 @@ class InvoiceValidationResource extends Resource
|
||||
Select::make('sticker_master_id')
|
||||
->label('Search by Item Code')
|
||||
->nullable()
|
||||
->searchable()
|
||||
->reactive()
|
||||
->options(function (callable $get) {
|
||||
$pId = $get('Plant');
|
||||
|
||||
@@ -1242,7 +1225,9 @@ class InvoiceValidationResource extends Resource
|
||||
}
|
||||
$query->whereHas('invoiceValidations');
|
||||
})->pluck('code', 'id');
|
||||
}),
|
||||
})
|
||||
->searchable()
|
||||
->reactive(),
|
||||
Select::make('scanned_status')
|
||||
->label('Scanned Status')
|
||||
->nullable()
|
||||
@@ -1362,7 +1347,7 @@ class InvoiceValidationResource extends Resource
|
||||
$indicators = [];
|
||||
|
||||
if (! empty($data['Plant'])) {
|
||||
$indicators[] = 'Plant Name: '.Plant::where('id', $data['Plant'])->value('name');
|
||||
$indicators[] = 'Plant: '.Plant::where('id', $data['Plant'])->value('name');
|
||||
} else {
|
||||
$userHas = Filament::auth()->user()->plant_id;
|
||||
|
||||
|
||||
@@ -50,15 +50,14 @@ class ProcessOrderResource extends Resource
|
||||
return $form
|
||||
->schema([
|
||||
Forms\Components\Select::make('plant_id')
|
||||
->label('Plant Name')
|
||||
->relationship('plant', 'name')
|
||||
->label('Plant')
|
||||
->searchable()
|
||||
->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();
|
||||
})
|
||||
->disabled(fn (Get $get) => ! empty($get('id')))
|
||||
->default(function () {
|
||||
$userHas = Filament::auth()->user()->plant_id;
|
||||
|
||||
@@ -94,8 +93,7 @@ class ProcessOrderResource extends Resource
|
||||
->hintColor('danger')
|
||||
->required(),
|
||||
Forms\Components\Select::make('line_id')
|
||||
->label('Line Name')
|
||||
->reactive()
|
||||
->label('Line')
|
||||
->searchable()
|
||||
->options(function (callable $get) {
|
||||
$plantId = $get('plant_id');
|
||||
@@ -105,7 +103,7 @@ class ProcessOrderResource extends Resource
|
||||
|
||||
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) {
|
||||
$set('item_id', null);
|
||||
$set('item_description', null);
|
||||
@@ -125,7 +123,6 @@ class ProcessOrderResource extends Resource
|
||||
// ->relationship('item', 'id')
|
||||
// ->required(),
|
||||
->searchable()
|
||||
->reactive()
|
||||
->options(function (callable $get) {
|
||||
$plantId = $get('plant_id');
|
||||
if (empty($plantId)) {
|
||||
@@ -134,7 +131,7 @@ class ProcessOrderResource extends Resource
|
||||
|
||||
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) {
|
||||
$plantId = $get('plant_id');
|
||||
$itemId = $get('item_id');
|
||||
@@ -169,8 +166,9 @@ class ProcessOrderResource extends Resource
|
||||
$set('updated_by', Filament::auth()->user()?->name);
|
||||
})
|
||||
->required(),
|
||||
|
||||
Forms\Components\TextInput::make('item_description')
|
||||
->label('Item Description')
|
||||
->label('Description')
|
||||
->readOnly()
|
||||
->required()
|
||||
->reactive()
|
||||
@@ -189,7 +187,7 @@ class ProcessOrderResource extends Resource
|
||||
$set('updated_by', Filament::auth()->user()?->name);
|
||||
}),
|
||||
Forms\Components\TextInput::make('item_uom')
|
||||
->label('Item UOM')
|
||||
->label('UOM')
|
||||
->readOnly()
|
||||
->required()
|
||||
->reactive()
|
||||
@@ -264,11 +262,12 @@ class ProcessOrderResource extends Resource
|
||||
->first();
|
||||
|
||||
if ($existing) {
|
||||
// Notification::make()
|
||||
// ->title('Duplicate Process Order!')
|
||||
// ->body("Process Order '{$value}' is already exist with item code '{$existing->item->code}'.")
|
||||
// ->danger()
|
||||
// ->send();
|
||||
|
||||
Notification::make()
|
||||
->title('Duplicate Process Order!')
|
||||
->body("Process Order '{$value}' is already exist with item code '{$existing->item->code}'.")
|
||||
->danger()
|
||||
->send();
|
||||
$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)
|
||||
->hintColor('danger'),
|
||||
Forms\Components\TextInput::make('machine_name')
|
||||
->label('Machine Name')
|
||||
->label('Machine ID')
|
||||
->reactive()
|
||||
->readOnly(fn ($get) => ($get('process_order') == null))
|
||||
->afterStateUpdated(function (callable $set, callable $get, ?string $state) {
|
||||
@@ -681,27 +680,27 @@ class ProcessOrderResource extends Resource
|
||||
return ($currentPage - 1) * $perPage + $rowLoop->iteration;
|
||||
}),
|
||||
Tables\Columns\TextColumn::make('plant.name')
|
||||
->label('Plant Name')
|
||||
->label('Plant')
|
||||
->alignCenter()
|
||||
->searchable()
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('line.name')
|
||||
->label('Line Name')
|
||||
->label('Line')
|
||||
->searchable()
|
||||
->alignCenter()
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('item.code')
|
||||
->label('Item Code')
|
||||
->label('Item')
|
||||
->searchable()
|
||||
->alignCenter()
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('item.description')
|
||||
->label('Item Description')
|
||||
->label('Description')
|
||||
->alignCenter()
|
||||
->searchable()
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('item.uom')
|
||||
->label('Item UOM')
|
||||
->label('Uom')
|
||||
->alignCenter()
|
||||
->searchable()
|
||||
->sortable(),
|
||||
@@ -736,7 +735,7 @@ class ProcessOrderResource extends Resource
|
||||
->searchable()
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('machine_name')
|
||||
->label('Machine Name')
|
||||
->label('Machine ID')
|
||||
->alignCenter()
|
||||
->searchable()
|
||||
->sortable(),
|
||||
@@ -779,47 +778,16 @@ class ProcessOrderResource extends Resource
|
||||
->label('Advanced Filters')
|
||||
->form([
|
||||
Select::make('Plant')
|
||||
->label('Search by Plant Name')
|
||||
->label('Select Plant Name')
|
||||
->nullable()
|
||||
->searchable()
|
||||
->reactive()
|
||||
->options(function (callable $get) {
|
||||
$userHas = Filament::auth()->user()->plant_id;
|
||||
|
||||
if ($userHas && strlen($userHas) > 0) {
|
||||
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();
|
||||
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) {
|
||||
$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')
|
||||
->label('Search by Item Code')
|
||||
@@ -829,10 +797,6 @@ class ProcessOrderResource extends Resource
|
||||
->options(function (callable $get) {
|
||||
$plantId = $get('Plant');
|
||||
|
||||
if (empty($plantId)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return Item::whereHas('processOrders', function ($query) use ($plantId) {
|
||||
if ($plantId) {
|
||||
$query->where('plant_id', $plantId);
|
||||
@@ -883,7 +847,7 @@ class ProcessOrderResource extends Resource
|
||||
])
|
||||
->query(function ($query, array $data) {
|
||||
// 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');
|
||||
}
|
||||
|
||||
@@ -897,10 +861,6 @@ class ProcessOrderResource extends Resource
|
||||
}
|
||||
}
|
||||
|
||||
if (! empty($data['Line'])) {
|
||||
$query->where('line_id', $data['Line']);
|
||||
}
|
||||
|
||||
if (! empty($data['Item'])) {
|
||||
$query->where('item_id', $data['Item']);
|
||||
}
|
||||
@@ -940,21 +900,17 @@ class ProcessOrderResource extends Resource
|
||||
$indicators = [];
|
||||
|
||||
if (! empty($data['Plant'])) {
|
||||
$indicators[] = 'Plant Name: '.Plant::where('id', $data['Plant'])->value('name');
|
||||
$indicators[] = 'Plant: '.Plant::where('id', $data['Plant'])->value('name');
|
||||
} else {
|
||||
$userHas = Filament::auth()->user()->plant_id;
|
||||
|
||||
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'])) {
|
||||
$indicators[] = 'Item Code: '.Item::where('id', $data['Item'])->value('code');
|
||||
$indicators[] = 'Item: '.Item::where('id', $data['Item'])->value('code');
|
||||
}
|
||||
|
||||
if (! empty($data['process_order'])) {
|
||||
|
||||
@@ -27,8 +27,6 @@ use Filament\Tables\Filters\Filter;
|
||||
use Filament\Tables\Table;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\SoftDeletingScope;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Str;
|
||||
|
||||
class ProductCharacteristicsMasterResource extends Resource
|
||||
{
|
||||
@@ -43,7 +41,7 @@ class ProductCharacteristicsMasterResource extends Resource
|
||||
return $form
|
||||
->schema([
|
||||
Forms\Components\Select::make('plant_id')
|
||||
->label('Plant Name')
|
||||
->label('Plant')
|
||||
->relationship('plant', 'name')
|
||||
->searchable()
|
||||
->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();
|
||||
})
|
||||
->disabled(fn (Get $get) => ! empty($get('id')))
|
||||
->default(function () {
|
||||
$userHas = Filament::auth()->user()->plant_id;
|
||||
|
||||
@@ -59,10 +56,6 @@ class ProductCharacteristicsMasterResource extends Resource
|
||||
})
|
||||
->afterStateUpdated(function ($state, callable $set) {
|
||||
$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()
|
||||
->required(),
|
||||
@@ -77,38 +70,14 @@ class ProductCharacteristicsMasterResource extends Resource
|
||||
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) {
|
||||
$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(),
|
||||
Forms\Components\Select::make('line_id')
|
||||
->label('Line Name')
|
||||
->label('Line')
|
||||
->reactive()
|
||||
->searchable()
|
||||
->options(function (callable $get) {
|
||||
@@ -119,14 +88,15 @@ class ProductCharacteristicsMasterResource extends Resource
|
||||
|
||||
return Line::where('plant_id', $plantId)->pluck('name', 'id');
|
||||
})
|
||||
// ->disabled(fn (Get $get) => ! empty($get('id')))
|
||||
->afterStateUpdated(function ($state, callable $set, callable $get) {
|
||||
$set('updated_by', Filament::auth()->user()?->name);
|
||||
$set('work_group_master_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(),
|
||||
// ->relationship('line', 'name'),
|
||||
Forms\Components\Select::make('work_group_master_id')
|
||||
->label('Group Work Center')
|
||||
->required()
|
||||
@@ -148,13 +118,13 @@ class ProductCharacteristicsMasterResource extends Resource
|
||||
|
||||
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) {
|
||||
$lineId = $get('line_id');
|
||||
$set('updated_by', Filament::auth()->user()?->name);
|
||||
$set('machine_id', null);
|
||||
if (! $lineId) {
|
||||
$set('mGroupWorkError', 'Please select a line first.');
|
||||
$set('machine_id', null);
|
||||
|
||||
return;
|
||||
} else {
|
||||
@@ -166,12 +136,13 @@ class ProductCharacteristicsMasterResource extends Resource
|
||||
// return;
|
||||
// }
|
||||
$set('mGroupWorkError', null);
|
||||
$set('machine_id', null);
|
||||
}
|
||||
})
|
||||
->extraAttributes(fn ($get) => [
|
||||
'class' => $get('mGroupWorkError') ? 'border-red-500' : '',
|
||||
])
|
||||
// ->dehydrateStateUsing(fn ($state) => null)
|
||||
// ->dehydrateStateUsing(fn ($state) => null)
|
||||
->hint(fn ($get) => $get('mGroupWorkError') ? $get('mGroupWorkError') : null)
|
||||
->hintColor('danger'),
|
||||
Forms\Components\Select::make('machine_id')
|
||||
@@ -193,7 +164,6 @@ class ProductCharacteristicsMasterResource extends Resource
|
||||
->where('work_group_master_id', $workGroupId)
|
||||
->pluck('work_center', 'id');
|
||||
})
|
||||
// ->disabled(fn (Get $get) => ! empty($get('id')))
|
||||
->afterStateUpdated(function ($state, callable $set, callable $get) {
|
||||
if (! $get('plant_id') || ! $get('line_id') || ! $get('work_group_master_id')) {
|
||||
$set('machine_id', null);
|
||||
@@ -210,13 +180,12 @@ class ProductCharacteristicsMasterResource extends Resource
|
||||
->reactive()
|
||||
->searchable()
|
||||
// ->preload()
|
||||
->disabled(fn (Get $get) => ! empty($get('id') && ! Filament::auth()->user()->hasRole('Super Admin')))
|
||||
->afterStateUpdated(function ($state, callable $set) {
|
||||
$set('updated_by', Filament::auth()->user()?->name);
|
||||
})
|
||||
->required(),
|
||||
Forms\Components\TextInput::make('name')
|
||||
->label('Characteristics Name')
|
||||
->label('Name')
|
||||
->reactive()
|
||||
->afterStateUpdated(function ($state, callable $set) {
|
||||
$set('updated_by', Filament::auth()->user()?->name);
|
||||
@@ -230,17 +199,10 @@ class ProductCharacteristicsMasterResource extends Resource
|
||||
])
|
||||
->reactive()
|
||||
// ->preload()
|
||||
->disabled(fn (Get $get) => ! empty($get('id') && ! Filament::auth()->user()->hasRole('Super Admin')))
|
||||
->afterStateUpdated(function ($state, callable $set) {
|
||||
if ($state == 'Visual') {
|
||||
$set('lower', 0);
|
||||
$set('middle', 0);
|
||||
$set('upper', 0);
|
||||
}
|
||||
$set('updated_by', Filament::auth()->user()?->name);
|
||||
})
|
||||
->required(),
|
||||
|
||||
// Forms\Components\Select::make('result')
|
||||
// ->label('Visual Type')
|
||||
// ->reactive()
|
||||
@@ -258,7 +220,6 @@ class ProductCharacteristicsMasterResource extends Resource
|
||||
// session()->put('temp_result', $state);
|
||||
// })
|
||||
// ->hidden(fn (callable $get) => $get('inspection_type') != 'Visual'),
|
||||
|
||||
Forms\Components\TextInput::make('lower')
|
||||
->label('Lower')
|
||||
->numeric()
|
||||
@@ -271,8 +232,7 @@ class ProductCharacteristicsMasterResource extends Resource
|
||||
$set('middle', ($state + $get('upper')) / 2);
|
||||
$set('updated_by', Filament::auth()->user()?->name);
|
||||
})
|
||||
// ->visible(fn (callable $get) => $get('inspection_type') == 'Value')
|
||||
->readOnly(fn (callable $get) => $get('inspection_type') != 'Value'),
|
||||
->visible(fn (callable $get) => $get('inspection_type') == 'Value'),
|
||||
Forms\Components\TextInput::make('upper')
|
||||
->label('Upper')
|
||||
->numeric()
|
||||
@@ -285,8 +245,7 @@ class ProductCharacteristicsMasterResource extends Resource
|
||||
$set('middle', ($get('lower') + $state) / 2);
|
||||
$set('updated_by', Filament::auth()->user()?->name);
|
||||
})
|
||||
// ->visible(fn (callable $get) => $get('inspection_type') == 'Value')
|
||||
->readOnly(fn (callable $get) => $get('inspection_type') != 'Value'),
|
||||
->visible(fn (callable $get) => $get('inspection_type') == 'Value'),
|
||||
Forms\Components\TextInput::make('middle')
|
||||
->label('Middle')
|
||||
->readOnly()
|
||||
@@ -309,8 +268,8 @@ class ProductCharacteristicsMasterResource extends Resource
|
||||
->dehydrateStateUsing(fn ($state, Get $get) => ($get('lower') + $get('upper')) / 2)
|
||||
->afterStateUpdated(function ($state, callable $set) {
|
||||
$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')
|
||||
->label('Created By')
|
||||
->default(Filament::auth()->user()?->name),
|
||||
@@ -337,7 +296,7 @@ class ProductCharacteristicsMasterResource extends Resource
|
||||
return ($currentPage - 1) * $perPage + $rowLoop->iteration;
|
||||
}),
|
||||
Tables\Columns\TextColumn::make('plant.name')
|
||||
->label('Plant Name')
|
||||
->label('Plant')
|
||||
->searchable()
|
||||
->alignCenter()
|
||||
->sortable(),
|
||||
@@ -346,13 +305,13 @@ class ProductCharacteristicsMasterResource extends Resource
|
||||
->alignCenter()
|
||||
->searchable()
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('item.description')
|
||||
->label('Item Description')
|
||||
Tables\Columns\TextColumn::make('line.name')
|
||||
->label('Line')
|
||||
->alignCenter()
|
||||
->searchable()
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('line.name')
|
||||
->label('Line Name')
|
||||
Tables\Columns\TextColumn::make('characteristics_type')
|
||||
->label('Characteristics Type')
|
||||
->alignCenter()
|
||||
->searchable()
|
||||
->sortable(),
|
||||
@@ -366,16 +325,10 @@ class ProductCharacteristicsMasterResource extends Resource
|
||||
->alignCenter()
|
||||
->searchable()
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('characteristics_type')
|
||||
->label('Characteristics Type')
|
||||
->alignCenter()
|
||||
->searchable()
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('name')
|
||||
->label('Characteristics Name')
|
||||
->alignCenter()
|
||||
->searchable()
|
||||
->sortable(),
|
||||
// Tables\Columns\TextColumn::make('machine.work_center')
|
||||
// ->label('Work Center')
|
||||
// ->alignCenter()
|
||||
// ->sortable(),
|
||||
Tables\Columns\TextColumn::make('inspection_type')
|
||||
->label('Inspection Type')
|
||||
->alignCenter()
|
||||
@@ -431,34 +384,20 @@ class ProductCharacteristicsMasterResource extends Resource
|
||||
->label('Advanced Filters')
|
||||
->form([
|
||||
Select::make('Plant')
|
||||
->label('Search by Plant Name')
|
||||
->label('Select Plant')
|
||||
->nullable()
|
||||
->searchable()
|
||||
->reactive()
|
||||
->options(function (callable $get) {
|
||||
$userHas = Filament::auth()->user()->plant_id;
|
||||
|
||||
if ($userHas && strlen($userHas) > 0) {
|
||||
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();
|
||||
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) {
|
||||
$set('Item', null);
|
||||
$set('Line', null);
|
||||
$set('work_group_master', null);
|
||||
$set('Machine', null);
|
||||
}),
|
||||
Select::make('Line')
|
||||
->label('Search by Line Name')
|
||||
->label('Select Line')
|
||||
->nullable()
|
||||
->searchable()
|
||||
->reactive()
|
||||
->options(function (callable $get) {
|
||||
$plantId = $get('Plant');
|
||||
|
||||
@@ -466,42 +405,34 @@ class ProductCharacteristicsMasterResource extends Resource
|
||||
return [];
|
||||
}
|
||||
|
||||
return Line::whereHas('productCharacteristicsMasters', function ($query) use ($plantId) {
|
||||
if ($plantId) {
|
||||
$query->where('plant_id', $plantId);
|
||||
}
|
||||
})->pluck('name', 'id');
|
||||
return Line::where('plant_id', $plantId)->pluck('name', 'id');
|
||||
|
||||
// return $plantId ? Item::where('plant_id', $plantId)->pluck('code', 'id') : [];
|
||||
})
|
||||
->reactive()
|
||||
->afterStateUpdated(function ($state, callable $set, callable $get) {
|
||||
$set('work_group_master', null);
|
||||
$set('Machine', null);
|
||||
$set('Item', null);
|
||||
}),
|
||||
Select::make('Item')
|
||||
->label('Search by Item Code')
|
||||
->nullable()
|
||||
->searchable()
|
||||
->reactive()
|
||||
->options(function (callable $get) {
|
||||
$plantId = $get('Plant');
|
||||
|
||||
if (empty($plantId)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return Item::whereHas('productCharacteristicsMasters', function ($query) use ($plantId) {
|
||||
if ($plantId) {
|
||||
$query->where('plant_id', $plantId);
|
||||
}
|
||||
})->pluck('code', 'id');
|
||||
}),
|
||||
})
|
||||
->reactive(),
|
||||
// ->afterStateUpdated(function ($state, callable $set, callable $get) {
|
||||
// $set('process_order', null);
|
||||
// }),
|
||||
Select::make('work_group_master')
|
||||
->label('Search by Group Work Center')
|
||||
->label('Select Work Group Master')
|
||||
->nullable()
|
||||
->searchable()
|
||||
->reactive()
|
||||
->options(function (callable $get) {
|
||||
$plantId = $get('Plant');
|
||||
|
||||
@@ -509,65 +440,45 @@ class ProductCharacteristicsMasterResource extends Resource
|
||||
return [];
|
||||
}
|
||||
|
||||
return WorkGroupMaster::whereHas('productCharacteristicsMasters', function ($query) use ($plantId) {
|
||||
if ($plantId) {
|
||||
$query->where('plant_id', $plantId);
|
||||
}
|
||||
})->pluck('name', 'id');
|
||||
return WorkGroupMaster::where('plant_id', $plantId)->pluck('name', 'id');
|
||||
|
||||
// return $plantId ? Item::where('plant_id', $plantId)->pluck('code', 'id') : [];
|
||||
})
|
||||
->reactive()
|
||||
->afterStateUpdated(function ($state, callable $set, callable $get) {
|
||||
$set('Machine', null);
|
||||
}),
|
||||
Select::make('Machine')
|
||||
->label('Search by Work Center')
|
||||
->label('Select Machine')
|
||||
->nullable()
|
||||
->searchable()
|
||||
->reactive()
|
||||
->options(function (callable $get) {
|
||||
$plantId = $get('Plant');
|
||||
$lineId = $get('Line');
|
||||
$workGroupMasterId = $get('work_group_master');
|
||||
|
||||
if (empty($plantId) || empty($lineId) || empty($workGroupMasterId)) {
|
||||
if (empty($plantId) || empty($lineId)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return Machine::whereHas('productCharacteristicsMasters', function ($query) use ($plantId, $lineId, $workGroupMasterId) {
|
||||
if ($plantId && $lineId && $workGroupMasterId) {
|
||||
$query->where('plant_id', $plantId)->where('line_id', $lineId)->where('work_group_master_id', $workGroupMasterId);
|
||||
}
|
||||
})->pluck('work_center', 'id');
|
||||
return Machine::where('plant_id', $plantId)->where('line_id', $lineId)->pluck('work_center', 'id');
|
||||
|
||||
// return $plantId ? Item::where('plant_id', $plantId)->pluck('code', 'id') : [];
|
||||
}),
|
||||
})
|
||||
->reactive(),
|
||||
// ->afterStateUpdated(function ($state, callable $set, callable $get) {
|
||||
// $set('process_order', null);
|
||||
// }),
|
||||
// TextInput::make('process_order')
|
||||
// ->label('Process Order')
|
||||
// ->placeholder('Enter Process Order'),
|
||||
TextInput::make('name')
|
||||
->label('characteristics Name')
|
||||
->reactive()
|
||||
->placeholder(placeholder: 'Enter characteristics Name'),
|
||||
// TextInput::make('coil_number')
|
||||
// ->label('Coil Number')
|
||||
// ->placeholder(placeholder: 'Enter Coil Number'),
|
||||
Select::make('characteristics_type')
|
||||
->label('Search by Characteristics Type')
|
||||
->nullable()
|
||||
->searchable()
|
||||
->reactive()
|
||||
->label('Characteristics Type')
|
||||
->options([
|
||||
'Product' => 'Product',
|
||||
'Process' => 'Process',
|
||||
]),
|
||||
Select::make('inspection_type')
|
||||
->label('Search by Inspection Type')
|
||||
->nullable()
|
||||
->searchable()
|
||||
->reactive()
|
||||
->options([
|
||||
'Visual' => 'Visual',
|
||||
'Value' => 'Value',
|
||||
]),
|
||||
DateTimePicker::make(name: 'created_from')
|
||||
->label('Created From')
|
||||
->placeholder(placeholder: 'Select From DateTime')
|
||||
@@ -581,7 +492,7 @@ class ProductCharacteristicsMasterResource extends Resource
|
||||
])
|
||||
->query(function ($query, array $data) {
|
||||
// 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');
|
||||
}
|
||||
|
||||
@@ -611,18 +522,10 @@ class ProductCharacteristicsMasterResource extends Resource
|
||||
$query->where('machine_id', $data['Machine']);
|
||||
}
|
||||
|
||||
if (! empty($data['name'])) {
|
||||
$query->where('name', 'like', '%'.$data['name'].'%');
|
||||
}
|
||||
|
||||
if (! empty($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'])) {
|
||||
$query->where('created_at', '>=', $data['created_from']);
|
||||
}
|
||||
@@ -637,7 +540,7 @@ class ProductCharacteristicsMasterResource extends Resource
|
||||
$indicators = [];
|
||||
|
||||
if (! empty($data['Plant'])) {
|
||||
$indicators[] = 'Plant Name: '.Plant::where('id', $data['Plant'])->value('name');
|
||||
$indicators[] = 'Plant: '.Plant::where('id', $data['Plant'])->value('name');
|
||||
} else {
|
||||
$userHas = Filament::auth()->user()->plant_id;
|
||||
|
||||
@@ -647,33 +550,25 @@ class ProductCharacteristicsMasterResource extends Resource
|
||||
}
|
||||
|
||||
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'])) {
|
||||
$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'])) {
|
||||
$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'])) {
|
||||
$indicators[] = 'Work Center: '.Machine::where('id', $data['Machine'])->value('work_center');
|
||||
}
|
||||
|
||||
if (! empty($data['name'])) {
|
||||
$indicators[] = 'Characteristics Name: '.$data['name'];
|
||||
$indicators[] = 'Machine: '.Machine::where('id', $data['Machine'])->value('work_center');
|
||||
}
|
||||
|
||||
if (! empty($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'])) {
|
||||
$indicators[] = 'From: '.$data['created_from'];
|
||||
}
|
||||
|
||||
@@ -48,7 +48,6 @@ class ProductionPlanResource extends Resource
|
||||
Section::make('')
|
||||
->schema([
|
||||
Forms\Components\Select::make('plant_id')
|
||||
->label('Plant')
|
||||
->relationship('plant', 'name')
|
||||
->required()
|
||||
// ->nullable()
|
||||
@@ -80,7 +79,6 @@ class ProductionPlanResource extends Resource
|
||||
->hint(fn ($get) => $get('ppPlantError') ? $get('ppPlantError') : null)
|
||||
->hintColor('danger'),
|
||||
Forms\Components\Select::make('line_id')
|
||||
->label('Line')
|
||||
->relationship('line', 'name')
|
||||
->required()
|
||||
// ->nullable()
|
||||
@@ -439,7 +437,7 @@ class ProductionPlanResource extends Resource
|
||||
->sortable()
|
||||
->searchable(),
|
||||
Tables\Columns\TextColumn::make('line.name')
|
||||
->label('Line')
|
||||
->label('Plant')
|
||||
->alignCenter()
|
||||
->sortable()
|
||||
->searchable(),
|
||||
|
||||
@@ -51,7 +51,6 @@ class QualityValidationResource extends Resource
|
||||
->statePath('data')
|
||||
->schema(components: [
|
||||
Forms\Components\Select::make('plant_id')
|
||||
->label('Plant Name')
|
||||
->relationship('plant', 'name')
|
||||
->reactive()
|
||||
->options(function (callable $get) {
|
||||
@@ -95,7 +94,6 @@ class QualityValidationResource extends Resource
|
||||
->default(fn () => session('last_selected_plant_id')),
|
||||
|
||||
Forms\Components\Select::make('line_id')
|
||||
->label('Line Name')
|
||||
->relationship('line', titleAttribute: 'name')
|
||||
->reactive()
|
||||
->required()
|
||||
@@ -106,6 +104,7 @@ class QualityValidationResource extends Resource
|
||||
}
|
||||
|
||||
return Line::where('plant_id', $plantId)
|
||||
->where('type', 'FG Line') // Filter by type
|
||||
->pluck('name', 'id')
|
||||
->toArray();
|
||||
})
|
||||
@@ -131,7 +130,7 @@ class QualityValidationResource extends Resource
|
||||
Forms\Components\Hidden::make('line')
|
||||
->default(fn () => session('last_selected_line')),
|
||||
Forms\Components\Hidden::make('sticker_master_id')
|
||||
// ->relationship('stickerMaster', 'id')
|
||||
// ->relationship('stickerMaster', 'id')
|
||||
->required(),
|
||||
Forms\Components\Hidden::make('uom')
|
||||
->required(),
|
||||
@@ -2348,7 +2347,6 @@ class QualityValidationResource extends Resource
|
||||
->hintColor('danger'),
|
||||
|
||||
Forms\Components\TextInput::make('part_validation1')
|
||||
->label('Part Validation 1')
|
||||
->hidden(fn (callable $get) => ! $get('part_validation1_visible'))
|
||||
->default('')
|
||||
->reactive()
|
||||
@@ -2446,7 +2444,6 @@ class QualityValidationResource extends Resource
|
||||
->reactive(),
|
||||
|
||||
Forms\Components\TextInput::make('part_validation2')
|
||||
->label('Part Validation 2')
|
||||
->hidden(fn (callable $get) => ! $get('part_validation2_visible'))
|
||||
->default('')
|
||||
->required()
|
||||
@@ -2541,7 +2538,6 @@ class QualityValidationResource extends Resource
|
||||
->reactive(),
|
||||
|
||||
Forms\Components\TextInput::make('part_validation3')
|
||||
->label('Part Validation 3')
|
||||
->hidden(fn (callable $get) => ! $get('part_validation3_visible'))
|
||||
->default('')
|
||||
->required()
|
||||
@@ -2635,7 +2631,6 @@ class QualityValidationResource extends Resource
|
||||
->reactive(),
|
||||
|
||||
Forms\Components\TextInput::make('part_validation4')
|
||||
->label('Part Validation 4')
|
||||
->hidden(fn (callable $get) => ! $get('part_validation4_visible'))
|
||||
->default('')
|
||||
->required()
|
||||
@@ -2720,7 +2715,6 @@ class QualityValidationResource extends Resource
|
||||
->reactive(),
|
||||
|
||||
Forms\Components\TextInput::make('part_validation5')
|
||||
->label('Part Validation 5')
|
||||
->hidden(fn (callable $get) => ! $get('part_validation5_visible'))
|
||||
->default('')
|
||||
->required()
|
||||
@@ -2879,11 +2873,11 @@ class QualityValidationResource extends Resource
|
||||
return ($currentPage - 1) * $perPage + $rowLoop->iteration;
|
||||
}),
|
||||
Tables\Columns\TextColumn::make('plant.name')
|
||||
->label('Plant Name')
|
||||
->label('Plant')
|
||||
->alignCenter()
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('line.name')
|
||||
->label('Line Name')
|
||||
->label('Line')
|
||||
->searchable()
|
||||
->alignCenter()
|
||||
->sortable(),
|
||||
@@ -2899,10 +2893,6 @@ class QualityValidationResource extends Resource
|
||||
->label('Item Code')
|
||||
->alignCenter()
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('stickerMaster.item.description')
|
||||
->label('Item Description')
|
||||
->alignCenter()
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('uom')
|
||||
->label('Unit of Measure')
|
||||
->alignCenter()
|
||||
@@ -3002,11 +2992,6 @@ class QualityValidationResource extends Resource
|
||||
->alignCenter()
|
||||
->sortable()
|
||||
->toggleable(isToggledHiddenByDefault: true),
|
||||
Tables\Columns\TextColumn::make('updated_by')
|
||||
->label('Updated By')
|
||||
->alignCenter()
|
||||
->sortable()
|
||||
->toggleable(isToggledHiddenByDefault: true),
|
||||
Tables\Columns\TextColumn::make('deleted_at')
|
||||
->label('Deleted At')
|
||||
->dateTime()
|
||||
@@ -3022,22 +3007,17 @@ class QualityValidationResource extends Resource
|
||||
->label('Advanced Filters')
|
||||
->form([
|
||||
Select::make('Plant')
|
||||
->label('Search by Plant Name')
|
||||
->label('Select Plant')
|
||||
->nullable()
|
||||
->searchable()
|
||||
->reactive()
|
||||
// ->options(function () {
|
||||
// return Plant::pluck('name', 'id');
|
||||
// })
|
||||
->options(function (callable $get) {
|
||||
$userHas = Filament::auth()->user()->plant_id;
|
||||
|
||||
if ($userHas && strlen($userHas) > 0) {
|
||||
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();
|
||||
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) {
|
||||
$set('sticker_master_id', null);
|
||||
$set('sap_msg_status', null);
|
||||
@@ -3045,23 +3025,20 @@ class QualityValidationResource extends Resource
|
||||
$set('operator_id', null);
|
||||
}),
|
||||
Select::make('Line')
|
||||
->label('Search by Line Name')
|
||||
->label('Select Line')
|
||||
->nullable()
|
||||
->searchable()
|
||||
->reactive()
|
||||
->options(function (callable $get) {
|
||||
$plantId = $get('Plant');
|
||||
if (! $plantId) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return Line::whereHas('qualityValidations', function ($query) use ($plantId) {
|
||||
if ($plantId) {
|
||||
$query->where('plant_id', $plantId);
|
||||
}
|
||||
})->pluck('name', 'id');
|
||||
// return Line::where('plant_id', $plantId)->pluck('name', 'id')->toArray();
|
||||
return Line::where('plant_id', $plantId)
|
||||
->where('type', 'FG Line') // Filter by type
|
||||
->pluck('name', 'id')
|
||||
->toArray();
|
||||
})
|
||||
->reactive()
|
||||
->afterStateUpdated(function ($state, callable $set, callable $get) {
|
||||
$set('sticker_master_id', null);
|
||||
$set('sap_msg_status', null);
|
||||
@@ -3076,8 +3053,6 @@ class QualityValidationResource extends Resource
|
||||
Select::make('sticker_master_id')
|
||||
->label('Search by Item Code')
|
||||
->nullable()
|
||||
->searchable()
|
||||
->reactive()
|
||||
->options(function (callable $get) {
|
||||
$pId = $get('Plant');
|
||||
|
||||
@@ -3087,12 +3062,12 @@ class QualityValidationResource extends Resource
|
||||
}
|
||||
$query->whereHas('qualityValidations');
|
||||
})->pluck('code', 'id');
|
||||
}),
|
||||
})
|
||||
->searchable()
|
||||
->reactive(),
|
||||
Select::make('sap_msg_status')
|
||||
->label('Select SAP Message Status')
|
||||
->nullable()
|
||||
->searchable()
|
||||
->reactive()
|
||||
->options(function (callable $get) {
|
||||
$plantId = $get('Plant');
|
||||
|
||||
@@ -3101,13 +3076,12 @@ class QualityValidationResource extends Resource
|
||||
} else {
|
||||
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')
|
||||
->label('Created By')
|
||||
->nullable()
|
||||
->searchable()
|
||||
->reactive()
|
||||
->options(function (callable $get) {
|
||||
$plantId = $get('Plant');
|
||||
$lineId = $get('Line');
|
||||
@@ -3118,7 +3092,9 @@ class QualityValidationResource extends Resource
|
||||
} 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');
|
||||
}
|
||||
}),
|
||||
})
|
||||
->searchable()
|
||||
->reactive(),
|
||||
DateTimePicker::make(name: 'created_from')
|
||||
->label('Created From')
|
||||
->placeholder(placeholder: 'Select From DateTime')
|
||||
@@ -3151,11 +3127,11 @@ class QualityValidationResource extends Resource
|
||||
}
|
||||
|
||||
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'])) {
|
||||
$query->where('serial_number', 'like', '%'.$data['serial_number'].'%');
|
||||
$query->where('serial_number', $data['serial_number']);
|
||||
}
|
||||
|
||||
if (! empty($data['sap_msg_status'])) {
|
||||
@@ -3190,7 +3166,7 @@ class QualityValidationResource extends Resource
|
||||
$indicators = [];
|
||||
|
||||
if (! empty($data['Plant'])) {
|
||||
$indicators[] = 'Plant Name: '.Plant::where('id', $data['Plant'])->value('name');
|
||||
$indicators[] = 'Plant: '.Plant::where('id', $data['Plant'])->value('name');
|
||||
} else {
|
||||
$userHas = Filament::auth()->user()->plant_id;
|
||||
|
||||
@@ -3200,7 +3176,7 @@ class QualityValidationResource extends Resource
|
||||
}
|
||||
|
||||
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'])) {
|
||||
@@ -3213,7 +3189,7 @@ class QualityValidationResource extends Resource
|
||||
|
||||
if (! empty($data['sticker_master_id'])) {
|
||||
$itemCode = Item::find($data['sticker_master_id'])->code ?? 'Unknown';
|
||||
$indicators[] = 'Item Code: '.$itemCode;
|
||||
$indicators[] = 'Item Codes: '.$itemCode;
|
||||
}
|
||||
|
||||
if (! empty($data['sap_msg_status'])) {
|
||||
|
||||
@@ -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,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -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 [];
|
||||
}
|
||||
}
|
||||
@@ -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(),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -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(),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -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(),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -109,8 +109,8 @@ class CharacteristicsController extends Controller
|
||||
->get([
|
||||
'line_id',
|
||||
'machine_id',
|
||||
'name',
|
||||
'characteristics_type',
|
||||
'name',
|
||||
'inspection_type',
|
||||
'lower',
|
||||
'middle',
|
||||
@@ -167,7 +167,6 @@ class CharacteristicsController extends Controller
|
||||
// ];
|
||||
|
||||
// return response()->json($response);
|
||||
|
||||
foreach ($characteristics as $char) {
|
||||
|
||||
$line = Line::find($char->line_id);
|
||||
@@ -204,6 +203,7 @@ class CharacteristicsController extends Controller
|
||||
return response()->json([
|
||||
'items' => $items,
|
||||
]);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2142,6 +2142,7 @@ class CharacteristicsController extends Controller
|
||||
|
||||
public function getCharMaster(Request $request)
|
||||
{
|
||||
|
||||
$expectedUser = env('API_AUTH_USER');
|
||||
$expectedPw = env('API_AUTH_PW');
|
||||
$header_auth = $request->header('Authorization');
|
||||
@@ -2231,92 +2232,63 @@ class CharacteristicsController extends Controller
|
||||
], 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([
|
||||
'status_code' => 'ERROR',
|
||||
'status_description' => "Line Name not found in lines table for the plant : '$plant->name'!",
|
||||
], 404);
|
||||
}
|
||||
|
||||
$lineId = $line->id;
|
||||
$work = Machine::where('work_center', $workCenter)->first();
|
||||
|
||||
$machine = Machine::where('work_center', $workCenter)->first();
|
||||
|
||||
if (! $machine) {
|
||||
if (! $work) {
|
||||
return response()->json([
|
||||
'status_code' => 'ERROR',
|
||||
'status_description' => 'Work Center not found in machines table!',
|
||||
], 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([
|
||||
'status_code' => 'ERROR',
|
||||
'status_description' => "Work center not found in machines table for the plant : '$plant->name'!",
|
||||
], 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 : '';
|
||||
|
||||
// $uom = $item ? $item->uom : '';
|
||||
|
||||
// $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([
|
||||
'status_code' => 'ERROR',
|
||||
'status_description' => "Characteristics not found in product master table for the plant : '$plant->name'!",
|
||||
], 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);
|
||||
}
|
||||
|
||||
@@ -2376,15 +2348,15 @@ class CharacteristicsController extends Controller
|
||||
], 404);
|
||||
}
|
||||
|
||||
$line = Line::where('plant_id', $plantId)->where('name', $lineName)->first();
|
||||
if (! $line) {
|
||||
$lineAgaPlant = Line::where('plant_id', $plantId)->where('name', $lineName)->first();
|
||||
if (! $lineAgaPlant) {
|
||||
return response()->json([
|
||||
'status_code' => 'ERROR',
|
||||
'status_description' => "Line '{$lineName}' not found against plant code '$plantCode'!",
|
||||
], 404);
|
||||
}
|
||||
|
||||
$lineId = $line->id;
|
||||
$lineId = $lineAgaPlant->id;
|
||||
|
||||
if ($itemCode == null || $itemCode == '') {
|
||||
return response()->json([
|
||||
@@ -2401,15 +2373,15 @@ class CharacteristicsController extends Controller
|
||||
], 404);
|
||||
}
|
||||
|
||||
$item = Item::where('plant_id', $plantId)->where('code', $itemCode)->first();
|
||||
if (! $item) {
|
||||
$itemAgaPlant = Item::where('plant_id', $plantId)->where('code', $itemCode)->first();
|
||||
if (! $itemAgaPlant) {
|
||||
return response()->json([
|
||||
'status_code' => 'ERROR',
|
||||
'status_description' => "Item code '{$itemCode}' not found against plant code '$plantCode'!",
|
||||
], 404);
|
||||
}
|
||||
|
||||
$itemId = $item->id;
|
||||
$itemId = $itemAgaPlant->id;
|
||||
|
||||
if ($workCenter == null || $workCenter == '') {
|
||||
return response()->json([
|
||||
@@ -2426,23 +2398,23 @@ class CharacteristicsController extends Controller
|
||||
], 404);
|
||||
}
|
||||
|
||||
$machine = Machine::where('plant_id', $plantId)->where('work_center', $workCenter)->first();
|
||||
if (! $machine) {
|
||||
$machineAgaPlant = Machine::where('plant_id', $plantId)->where('work_center', $workCenter)->first();
|
||||
if (! $machineAgaPlant) {
|
||||
return response()->json([
|
||||
'status_code' => 'ERROR',
|
||||
'status_description' => "Work center '{$workCenter}' not found against plant code '$plantCode'!",
|
||||
], 404);
|
||||
}
|
||||
|
||||
$machine = Machine::where('plant_id', $plantId)->where('line_id', $lineId)->where('work_center', $workCenter)->first();
|
||||
if (! $machine) {
|
||||
$machineAgaPlantLine = Machine::where('plant_id', $plantId)->where('line_id', $lineId)->where('work_center', $workCenter)->first();
|
||||
if (! $machineAgaPlantLine) {
|
||||
return response()->json([
|
||||
'status_code' => 'ERROR',
|
||||
'status_description' => "Work center '{$workCenter}' not found against plant code '$plantCode' and line name '$lineName'!",
|
||||
], 404);
|
||||
}
|
||||
|
||||
$machineId = $machine->id;
|
||||
$machineId = $machineAgaPlantLine->id;
|
||||
|
||||
$data = $request->all();
|
||||
|
||||
|
||||
@@ -13,7 +13,10 @@ class ObdController extends Controller
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index() {}
|
||||
public function index()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
@@ -21,40 +24,36 @@ class ObdController extends Controller
|
||||
public function store(Request $request)
|
||||
{
|
||||
$expectedUser = env('API_AUTH_USER');
|
||||
$expectedPw = env('API_AUTH_PW');
|
||||
$expectedPw = env('API_AUTH_PW');
|
||||
|
||||
$header_auth = $request->header('Authorization');
|
||||
$expectedToken = $expectedUser.':'.$expectedPw;
|
||||
$expectedToken = $expectedUser . ':' . $expectedPw;
|
||||
|
||||
// if("Bearer " . $expectedToken != $header_auth)
|
||||
// {
|
||||
// return response("ERROR: Unauthorized", 403)
|
||||
// ->header('Content-Type', 'text/plain');
|
||||
// }
|
||||
if ('Bearer '.$expectedToken != $header_auth) {
|
||||
if ("Bearer " . $expectedToken != $header_auth)
|
||||
{
|
||||
return response()->json([
|
||||
'status_code' => 'ERROR',
|
||||
'status_description' => 'Invalid authorization token!',
|
||||
'status_description' => 'Invalid authorization token!'
|
||||
], 403);
|
||||
}
|
||||
|
||||
try {
|
||||
try
|
||||
{
|
||||
$data = $request->all();
|
||||
// Validate required fields
|
||||
$missing = [];
|
||||
if (empty($data['plant_name'])) {
|
||||
$missing[] = 'plant_name';
|
||||
}
|
||||
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($data['plant_name'])) $missing[] = 'plant_name';
|
||||
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);
|
||||
// return response($message, 400)->header('Content-Type', 'text/plain');
|
||||
return response()->json([
|
||||
'status_code' => 'ERROR',
|
||||
@@ -64,49 +63,53 @@ class ObdController extends Controller
|
||||
|
||||
// OBD Number validation
|
||||
$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)
|
||||
// ->header('Content-Type', 'text/plain');
|
||||
return response()->json([
|
||||
'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);
|
||||
}
|
||||
|
||||
// Lookup plant_id by plant_name
|
||||
$plantId = Plant::where('name', $data['plant_name'])->value('id');
|
||||
if (! $plantId) {
|
||||
if (!$plantId) {
|
||||
// return response("ERROR: Plant '{$data['plant_name']}' not found", 404)
|
||||
// ->header('Content-Type', 'text/plain');
|
||||
return response()->json([
|
||||
'status_code' => 'ERROR',
|
||||
'status_description' => "Plant '{$data['plant_name']}' not found!",
|
||||
'status_description' => "Plant '{$data['plant_name']}' not found!"
|
||||
], 404);
|
||||
}
|
||||
|
||||
// Check if OBD number exists for that plant
|
||||
//Check if OBD number exists for that plant
|
||||
$obdRecords = WeightValidation::where('plant_id', $plantId)
|
||||
->where('obd_number', $obdNumber)
|
||||
->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()->json([
|
||||
'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);
|
||||
}
|
||||
|
||||
$missingLines = [];
|
||||
$alreadyUpdatedLines = [];
|
||||
|
||||
foreach ($data['line_numbers'] as $line) {
|
||||
if ($line['line_number'] == '' || $line['line_number'] == null) {
|
||||
foreach ($data['line_numbers'] as $line)
|
||||
{
|
||||
if ($line['line_number'] == '' || $line['line_number'] == null)
|
||||
{
|
||||
// return response("ERROR: Line Number can't be empty", 400)
|
||||
// ->header('Content-Type', 'text/plain');
|
||||
return response()->json([
|
||||
'status_code' => 'ERROR',
|
||||
'status_description' => "Line Number can't be empty!",
|
||||
'status_description' => "Line Number can't be empty!"
|
||||
], 404);
|
||||
}
|
||||
|
||||
@@ -115,46 +118,50 @@ class ObdController extends Controller
|
||||
->where('line_number', $line['line_number'])
|
||||
->first();
|
||||
|
||||
if (! $record) {
|
||||
if (!$record)
|
||||
{
|
||||
$missingLines[] = $line['line_number'];
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
$mandatoryFields = ['vehicle_number', 'bundle_number', 'heat_number', 'picked_weight', 'scanned_by'];
|
||||
$missingFields = [];
|
||||
|
||||
foreach ($mandatoryFields as $field) {
|
||||
if ($line[$field] == '' || $line[$field] == null) {
|
||||
foreach ($mandatoryFields as $field)
|
||||
{
|
||||
if ($line[$field] == '' || $line[$field] == null)
|
||||
{
|
||||
$missingFields[] = ucwords(str_replace('_', ' ', $field));
|
||||
}
|
||||
}
|
||||
|
||||
if (! empty($missingFields)) {
|
||||
if (count($missingFields) == 1) {
|
||||
if (!empty($missingFields))
|
||||
{
|
||||
if (count($missingFields) == 1)
|
||||
{
|
||||
$fieldsString = $missingFields[0];
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
$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()->json([
|
||||
'status_code' => 'ERROR',
|
||||
'status_description' => $message,
|
||||
'status_description' => $message
|
||||
], 400);
|
||||
}
|
||||
}
|
||||
|
||||
if (! empty($missingLines)) {
|
||||
$message = 'Line(s) '.implode(', ', $missingLines)." not found for Plant '{$data['plant_name']}' and OBD Number: '{$data['obd_number']}'!";
|
||||
|
||||
if (!empty($missingLines)) {
|
||||
$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()->json([
|
||||
'status_code' => 'ERROR',
|
||||
'status_description' => $message,
|
||||
'status_description' => $message
|
||||
], 404);
|
||||
}
|
||||
|
||||
@@ -162,11 +169,11 @@ class ObdController extends Controller
|
||||
$internalDuplicates = [];
|
||||
$bundleChecks = [];
|
||||
|
||||
// Check for duplicates within the request
|
||||
//Check for duplicates within the request
|
||||
foreach ($data['line_numbers'] as $line) {
|
||||
$lineNumber = $line['line_number'];
|
||||
$bundleNumber = trim((string) $line['bundle_number']);
|
||||
$pairKey = $lineNumber.'|'.$bundleNumber;
|
||||
$bundleNumber = trim((string)$line['bundle_number']);
|
||||
$pairKey = $lineNumber . '|' . $bundleNumber;
|
||||
|
||||
if (isset($seenPairs[$pairKey])) {
|
||||
$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');
|
||||
$lineNumbers = array_column($bundleChecks, 'line_number');
|
||||
@@ -195,10 +202,10 @@ class ObdController extends Controller
|
||||
$line = $row->line_number;
|
||||
$bundle = $row->bundle_number;
|
||||
|
||||
if (! isset($grouped[$line])) {
|
||||
if (!isset($grouped[$line])) {
|
||||
$grouped[$line] = [];
|
||||
}
|
||||
if ($bundle && ! in_array($bundle, $grouped[$line])) {
|
||||
if ($bundle && !in_array($bundle, $grouped[$line])) {
|
||||
$grouped[$line][] = $bundle;
|
||||
}
|
||||
}
|
||||
@@ -209,80 +216,85 @@ class ObdController extends Controller
|
||||
$dbDuplicates[] = "Line {$line}, has bundle numbers : {$bundlesStr}";
|
||||
}
|
||||
|
||||
// Return all errors if any duplicates found
|
||||
//Return all errors if any duplicates found
|
||||
$allDuplicates = [];
|
||||
if (! empty($internalDuplicates)) {
|
||||
$allDuplicates[] = 'Duplicate(s) '.implode(', ', $internalDuplicates);
|
||||
if (!empty($internalDuplicates))
|
||||
{
|
||||
$allDuplicates[] = "Duplicate(s) " . implode(', ', $internalDuplicates);
|
||||
}
|
||||
if (! empty($dbDuplicates)) {
|
||||
$allDuplicates[] = 'Already exists in database: '.implode('; ', $dbDuplicates);
|
||||
if (!empty($dbDuplicates))
|
||||
{
|
||||
$allDuplicates[] = "Already exists in database: " . implode('; ', $dbDuplicates);
|
||||
}
|
||||
|
||||
if (! empty($allDuplicates)) {
|
||||
if (!empty($allDuplicates)) {
|
||||
// return response(
|
||||
// "Error:" . implode("\n", $allDuplicates),
|
||||
// 400
|
||||
// )->header('Content-Type', 'text/plain');
|
||||
|
||||
$retRes = implode(', and ', $allDuplicates);
|
||||
|
||||
$retRes = implode(", and ", $allDuplicates);
|
||||
return response()->json([
|
||||
'status_code' => 'ERROR',
|
||||
'status_description' => $retRes,
|
||||
'status_description' => $retRes
|
||||
], 400);
|
||||
}
|
||||
|
||||
// ..
|
||||
//..
|
||||
$updated = 0;
|
||||
$inserted = 0;
|
||||
$updatedLines = [];
|
||||
$insertedLines = [];
|
||||
$lineTracker = [];
|
||||
|
||||
foreach ($data['line_numbers'] as $line) {
|
||||
foreach ($data['line_numbers'] as $line)
|
||||
{
|
||||
$lineNumber = $line['line_number'];
|
||||
$existing = WeightValidation::where('plant_id', $plantId)
|
||||
->where('obd_number', $obdNumber)
|
||||
->where('line_number', $lineNumber)
|
||||
->where(function ($query) {
|
||||
$query->whereNull('bundle_number')
|
||||
->orWhere('bundle_number', '');
|
||||
})
|
||||
->first();
|
||||
->where('obd_number', $obdNumber)
|
||||
->where('line_number', $lineNumber)
|
||||
->where(function ($query) {
|
||||
$query->whereNull('bundle_number')
|
||||
->orWhere('bundle_number', '');
|
||||
})
|
||||
->first();
|
||||
|
||||
if ($existing) {
|
||||
if($existing)
|
||||
{
|
||||
$existing->update([
|
||||
'vehicle_number' => $line['vehicle_number'] ?? null,
|
||||
'vehicle_number' => $line['vehicle_number'] ?? null,
|
||||
'bundle_number' => $line['bundle_number'] ?? null,
|
||||
'heat_number' => $line['heat_number'] ?? null,
|
||||
'picked_weight' => $line['picked_weight'] ?? null,
|
||||
'scanned_by' => $line['scanned_by'] ?? null,
|
||||
'updated_at' => now(),
|
||||
'scanned_by' => $line['scanned_by'] ?? null,
|
||||
'updated_at' => now(),
|
||||
]);
|
||||
$updated++;
|
||||
$updatedLines[] = $lineNumber;
|
||||
$lineTracker[$lineNumber] = 1;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
$original = WeightValidation::where([
|
||||
'plant_id' => $plantId,
|
||||
'obd_number' => $obdNumber,
|
||||
'plant_id' => $plantId,
|
||||
'obd_number' => $obdNumber,
|
||||
'line_number' => $lineNumber,
|
||||
])->orderBy('id')->first();
|
||||
|
||||
WeightValidation::create([
|
||||
'plant_id' => $plantId,
|
||||
'obd_number' => $obdNumber,
|
||||
'line_number' => $lineNumber,
|
||||
'item_id' => $original->item_id ?? null,
|
||||
'plant_id' => $plantId,
|
||||
'obd_number' => $obdNumber,
|
||||
'line_number' => $lineNumber,
|
||||
'item_id' => $original->item_id ?? null,
|
||||
'vehicle_number' => $line['vehicle_number'] ?? null,
|
||||
'bundle_number' => $line['bundle_number'] ?? null,
|
||||
'picked_weight' => $line['picked_weight'] ?? null,
|
||||
'scanned_by' => $line['scanned_by'] ?? null,
|
||||
'batch_number' => $original->batch_number ?? null,
|
||||
'heat_number' => $line['heat_number'] ?? null,
|
||||
'obd_weight' => $original->obd_weight ?? null,
|
||||
'created_at' => now(),
|
||||
'updated_at' => now(),
|
||||
'bundle_number' => $line['bundle_number'] ?? null,
|
||||
'picked_weight' => $line['picked_weight'] ?? null,
|
||||
'scanned_by' => $line['scanned_by'] ?? null,
|
||||
'batch_number' => $original->batch_number ?? null,
|
||||
'heat_number' => $line['heat_number'] ?? null,
|
||||
'obd_weight' => $original->obd_weight ?? null,
|
||||
'created_at' => now(),
|
||||
'updated_at' => now(),
|
||||
]);
|
||||
|
||||
$inserted++;
|
||||
@@ -294,11 +306,11 @@ class ObdController extends Controller
|
||||
$responseMessage = "OBD Number '{$obdNumber}'";
|
||||
|
||||
if ($updated > 0) {
|
||||
$responseMessage .= ' updated successfully. Line Numbers: {'.implode(', ', $updatedLines).'}';
|
||||
$responseMessage .= " updated successfully. Line Numbers: {" . implode(', ', $updatedLines) . "}";
|
||||
}
|
||||
|
||||
if ($inserted > 0) {
|
||||
$responseMessage .= 'Inserted successfully. Line Numbers: {'.implode(', ', $insertedLines).'}';
|
||||
$responseMessage .= "Inserted successfully. Line Numbers: {" . implode(', ', $insertedLines) . "}";
|
||||
}
|
||||
|
||||
// return response($responseMessage, 200)
|
||||
@@ -308,28 +320,31 @@ class ObdController extends Controller
|
||||
'status_description' => $responseMessage,
|
||||
], 200);
|
||||
|
||||
} catch (\Exception $e) {
|
||||
}
|
||||
catch (\Exception $e)
|
||||
{
|
||||
// response("ERROR: Server error", 500)->header('Content-Type', 'text/plain');
|
||||
return response()->json([
|
||||
'status_code' => 'ERROR',
|
||||
'status_description' => 'Store OBD data internal server error : '.$e?->getCode(),
|
||||
'status_description' => 'Store OBD data internal server error : '.$e?->getCode()
|
||||
], 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)
|
||||
{
|
||||
$expectedUser = env('API_AUTH_USER');
|
||||
$expectedPw = env('API_AUTH_PW');
|
||||
$expectedPw = env('API_AUTH_PW');
|
||||
|
||||
$header_auth = $request->header('Authorization');
|
||||
$expectedToken = $expectedUser.':'.$expectedPw;
|
||||
$expectedToken = $expectedUser . ':' . $expectedPw;
|
||||
|
||||
if ('Bearer '.$expectedToken != $header_auth) {
|
||||
if ("Bearer " . $expectedToken != $header_auth)
|
||||
{
|
||||
return response()->json([
|
||||
'status_code' => 'ERROR',
|
||||
'status_description' => 'Invalid authorization token!',
|
||||
'status_description' => 'Invalid authorization token!'
|
||||
], 403);
|
||||
}
|
||||
|
||||
@@ -359,41 +374,48 @@ class ObdController extends Controller
|
||||
// ], 400);
|
||||
// }
|
||||
|
||||
|
||||
$productionOrder = $request->header('production-order');
|
||||
if (empty($productionOrder)) {
|
||||
if (empty($productionOrder))
|
||||
{
|
||||
return response()->json([
|
||||
'status_code' => 'ERROR',
|
||||
'status_description' => "Production order can't be empty!",
|
||||
'status_description' => "Production order can't be empty!"
|
||||
], 400);
|
||||
} elseif (Str::length($productionOrder) < 7 || ! is_numeric($productionOrder)) {
|
||||
}
|
||||
else if(Str::length($productionOrder) < 7 || !is_numeric($productionOrder))
|
||||
{
|
||||
return response()->json([
|
||||
'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);
|
||||
}
|
||||
|
||||
$prodOrderExist = ($productionOrder == '1234567' || $productionOrder == '7654321');
|
||||
|
||||
if (! $prodOrderExist) {
|
||||
if (!$prodOrderExist)
|
||||
{
|
||||
return response()->json([
|
||||
'status_code' => 'ERROR',
|
||||
'status_description' => 'Production order not found!',
|
||||
'status_description' => "Production order not found!"
|
||||
], 400);
|
||||
}
|
||||
|
||||
try {
|
||||
// return response("Successfully GET request Received", 200)->header('Content-Type', 'text/plain');
|
||||
try
|
||||
{
|
||||
//return response("Successfully GET request Received", 200)->header('Content-Type', 'text/plain');
|
||||
$itemCode = Item::where('code', '123456')->where('plant_id', 1)->first();
|
||||
|
||||
return response()->json([
|
||||
'item_code' => $itemCode->code,
|
||||
'item_description' => $itemCode->description,
|
||||
'item_description' => $itemCode->description
|
||||
], 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([
|
||||
'status_code' => 'ERROR',
|
||||
'status_description' => 'Get test data internal server error : '.$e?->getCode(),
|
||||
'status_description' => 'Get test data internal server error : '.$e?->getCode()
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
@@ -401,9 +423,9 @@ class ObdController extends Controller
|
||||
public function get_obd(Request $request)
|
||||
{
|
||||
$expectedUser = env('API_AUTH_USER');
|
||||
$expectedPw = env('API_AUTH_PW');
|
||||
$header_auth = $request->header('Authorization');
|
||||
$expectedToken = $expectedUser.':'.$expectedPw;
|
||||
$expectedPw = env('API_AUTH_PW');
|
||||
$header_auth = $request->header('Authorization');
|
||||
$expectedToken = $expectedUser . ':' . $expectedPw;
|
||||
|
||||
// if ("Bearer " . $expectedToken != $header_auth)
|
||||
// {
|
||||
@@ -411,81 +433,88 @@ class ObdController extends Controller
|
||||
// ->header('Content-Type', 'text/plain');
|
||||
// }
|
||||
|
||||
if ('Bearer '.$expectedToken != $header_auth) {
|
||||
if ("Bearer " . $expectedToken != $header_auth)
|
||||
{
|
||||
return response()->json([
|
||||
'status_code' => 'ERROR',
|
||||
'status_description' => 'Invalid authorization token!',
|
||||
'status_description' => 'Invalid authorization token!'
|
||||
], 403);
|
||||
}
|
||||
|
||||
$plantName = $request->header('plant-name');
|
||||
$obdNumber = $request->header('obd-number');
|
||||
|
||||
if (empty($plantName)) {
|
||||
if (empty($plantName))
|
||||
{
|
||||
// return response("ERROR: Plant Name can't be empty", 400)
|
||||
// ->header('Content-Type', 'text/plain');
|
||||
return response()->json([
|
||||
'status_code' => 'ERROR',
|
||||
'status_description' => "Plant Name can't be empty!",
|
||||
'status_description' => "Plant Name can't be empty!"
|
||||
], 400);
|
||||
} elseif (empty($obdNumber)) {
|
||||
}
|
||||
else if(empty($obdNumber))
|
||||
{
|
||||
// return response("ERROR: OBD Number can't be empty", 400)
|
||||
// ->header('Content-Type', 'text/plain');
|
||||
return response()->json([
|
||||
'status_code' => 'ERROR',
|
||||
'status_description' => "OBD Number can't be empty!",
|
||||
'status_description' => "OBD Number can't be empty!"
|
||||
], 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)
|
||||
// ->header('Content-Type', 'text/plain');
|
||||
return response()->json([
|
||||
'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);
|
||||
}
|
||||
|
||||
// Fetch the plant id by name
|
||||
$plantId = Plant::where('name', $plantName)->value('id');
|
||||
|
||||
if (! $plantId) {
|
||||
if (!$plantId) {
|
||||
// return response("ERROR: Plant not found", 400)
|
||||
// ->header('Content-Type', 'text/plain');
|
||||
return response()->json([
|
||||
'status_code' => 'ERROR',
|
||||
'status_description' => 'Plant not found!',
|
||||
'status_description' => "Plant not found!"
|
||||
], 400);
|
||||
}
|
||||
|
||||
// $records = WeightValidation::where('plant_id', $plantId)
|
||||
// ->where('obd_number', $obdNumber)
|
||||
// ->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)
|
||||
->where('obd_number', $obdNumber)
|
||||
->exists();
|
||||
$exists = WeightValidation::where('plant_id', $plantId)
|
||||
->where('obd_number', $obdNumber)
|
||||
->exists();
|
||||
|
||||
if (! $exists) {
|
||||
if (!$exists)
|
||||
{
|
||||
// return response("ERROR: OBD number $obdNumber does not exist for plant '$plantName'", 404)
|
||||
// ->header('Content-Type', 'text/plain');
|
||||
return response()->json([
|
||||
'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);
|
||||
}
|
||||
|
||||
$records = WeightValidation::where('plant_id', $plantId)
|
||||
->where('obd_number', $obdNumber)
|
||||
->get()
|
||||
->filter(function ($record) {
|
||||
return $record->vehicle_number == '' || $record->vehicle_number == null;
|
||||
});
|
||||
->where('obd_number', $obdNumber)
|
||||
->get()
|
||||
->filter(function ($record) {
|
||||
return $record->vehicle_number == '' || $record->vehicle_number == null;
|
||||
});
|
||||
|
||||
if ($records->isEmpty()) {
|
||||
// return response("SUCCESS: Already scanning process completed for the OBD Number", 200)->header('Content-Type', values: 'text/plain');
|
||||
return response()->json([
|
||||
'status_code' => 'SUCCESS',
|
||||
'status_description' => 'Already weight validation completed for the OBD Number!',
|
||||
'status_description' => "Already weight validation completed for the OBD Number!"
|
||||
], 200);
|
||||
}
|
||||
|
||||
@@ -501,20 +530,18 @@ class ObdController extends Controller
|
||||
'OBD_Number' => $obdNumber,
|
||||
'Line_Numbers' => $records->map(function ($item) use ($itemCodes) {
|
||||
$itemInfo = $itemCodes[$item->item_id] ?? null;
|
||||
|
||||
return [
|
||||
'Line' => $item->line_number ?? '',
|
||||
'Material_Code' => $itemInfo->code ?? '',
|
||||
'Material_Description' => $itemInfo->description ?? '',
|
||||
'Batch_Number' => $item->batch_number ?? '',
|
||||
'Line' => $item->line_number ?? "",
|
||||
'Material_Code' => $itemInfo->code ?? "",
|
||||
'Material_Description' => $itemInfo->description ?? "",
|
||||
'Batch_Number' => $item->batch_number ?? "",
|
||||
// 'Heat_Number' => $item->heat_number ?? "",
|
||||
'Actual_Weight' => $item->obd_weight ?? '',
|
||||
'Actual_Weight' => $item->obd_weight ?? "",
|
||||
];
|
||||
})->values()->toArray(),
|
||||
],
|
||||
],
|
||||
})->values()->toArray()
|
||||
]
|
||||
]
|
||||
];
|
||||
|
||||
return response()->json($ObdResponseStructure);
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
@@ -994,21 +994,6 @@ class PdfController extends Controller
|
||||
]);
|
||||
}
|
||||
} 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)
|
||||
->where('process_order', $processOrder)
|
||||
->where('line_id', $lineNamePlantId)
|
||||
@@ -1070,21 +1055,6 @@ class PdfController extends Controller
|
||||
], 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(
|
||||
[
|
||||
'plant_id' => $plantId,
|
||||
|
||||
@@ -77,6 +77,14 @@ class ProductionStickerReprintController extends Controller
|
||||
}
|
||||
else
|
||||
{
|
||||
// if ($item->category == 'Submersible Motor')
|
||||
// {
|
||||
// $copies = 1;
|
||||
// }
|
||||
// elseif ($item->category == 'Submersible Pump')
|
||||
// {
|
||||
// $copies = 1;
|
||||
// }
|
||||
$copies = 1;
|
||||
|
||||
if ($serialNumberRaw) {
|
||||
|
||||
@@ -26,7 +26,6 @@ class ProductionTargetPlan extends Component
|
||||
|
||||
protected $listeners = [
|
||||
'loadData' => 'loadProductionData',
|
||||
'loadCategoryData' => 'loadProductionDataCategory',
|
||||
'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) {
|
||||
$this->records = [];
|
||||
@@ -196,9 +195,6 @@ class ProductionTargetPlan extends Component
|
||||
->where('production_plans.line_id', $lineId)
|
||||
->whereMonth('production_plans.created_at', $month)
|
||||
->whereYear('production_plans.created_at', $year)
|
||||
->when($category, function ($query) use ($category) {
|
||||
$query->where('items.category', $category);
|
||||
})
|
||||
->select(
|
||||
'production_plans.item_id',
|
||||
'production_plans.plant_id',
|
||||
@@ -207,11 +203,9 @@ class ProductionTargetPlan extends Component
|
||||
'production_plans.working_days',
|
||||
'production_plans.leave_dates',
|
||||
'items.code as item_code',
|
||||
'items.category as category',
|
||||
'items.description as item_description',
|
||||
'items.hourly_quantity as hourly_quantity',
|
||||
'lines.name as line_name',
|
||||
// 'lines.line_capacity as line_capacity',
|
||||
'lines.line_capacity as line_capacity',
|
||||
'plants.name as plant_name'
|
||||
)
|
||||
->get();
|
||||
@@ -235,11 +229,6 @@ class ProductionTargetPlan extends Component
|
||||
->where('line_id', $lineId)
|
||||
->whereMonth('created_at', $month)
|
||||
->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)'))
|
||||
->get()
|
||||
->groupBy(fn($row) =>
|
||||
@@ -258,10 +247,10 @@ class ProductionTargetPlan extends Component
|
||||
$remainingDays = (int) ($row['working_days'] ?? 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['produced_quantity'] = [];
|
||||
|
||||
@@ -271,7 +260,7 @@ class ProductionTargetPlan extends Component
|
||||
|
||||
// Skip leave dates fast
|
||||
if (isset($leaveDates) && in_array($date, $leaveDates)) {
|
||||
$row['daily_hourly_quantity'][$date] = '-';
|
||||
$row['daily_line_capacity'][$date] = '-';
|
||||
$row['daily_target_dynamic'][$date] = '-';
|
||||
$row['produced_quantity'][$date] = '-';
|
||||
continue;
|
||||
@@ -285,7 +274,7 @@ class ProductionTargetPlan extends Component
|
||||
|
||||
$row['daily_target_dynamic'][$date] = $todayTarget;
|
||||
$row['produced_quantity'][$date] = $producedQty;
|
||||
$row['daily_hourly_quantity'][$date] = $dailyHourlyQuantity * 22.5;
|
||||
$row['daily_line_capacity'][$date] = $dailyLineCapacity;
|
||||
|
||||
// Carry forward remaining qty
|
||||
$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()
|
||||
{
|
||||
return Excel::download(
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,8 @@ class ClassCharacteristic extends Model
|
||||
|
||||
protected $fillable = [
|
||||
'plant_id',
|
||||
'machine_id',
|
||||
'item_id',
|
||||
'machine_id',
|
||||
'aufnr',
|
||||
'class',
|
||||
'arbid',
|
||||
@@ -106,14 +106,14 @@ class ClassCharacteristic extends Model
|
||||
'zmm_tagno',
|
||||
'zmm_year',
|
||||
'zmm_laser_name',
|
||||
'zmm_logo_cp',
|
||||
'zmm_logo_ce',
|
||||
'zmm_logo_nsf',
|
||||
'zmm_beenote',
|
||||
'zmm_beenumber',
|
||||
'zmm_beestar',
|
||||
'zmm_codeclass',
|
||||
'zmm_colour',
|
||||
'zmm_logo_cp',
|
||||
'zmm_logo_ce',
|
||||
'zmm_logo_nsf',
|
||||
'zmm_grade',
|
||||
'zmm_grwt_pset',
|
||||
'zmm_grwt_cable',
|
||||
@@ -144,34 +144,24 @@ class ClassCharacteristic extends Model
|
||||
'zmm_usp',
|
||||
'mark_status',
|
||||
'marked_datetime',
|
||||
'marked_physical_count',
|
||||
'marked_expected_time',
|
||||
'marked_by',
|
||||
'man_marked_status',
|
||||
'man_marked_datetime',
|
||||
'man_marked_by',
|
||||
'motor_marked_status',
|
||||
'motor_marked_physical_count',
|
||||
'motor_expected_time',
|
||||
'motor_marked_by',
|
||||
'pump_marked_status',
|
||||
'pump_marked_physical_count',
|
||||
'pump_expected_time',
|
||||
'pump_marked_by',
|
||||
'name_plate_marked_status',
|
||||
'name_plate_expected_time',
|
||||
'name_plate_marked_by',
|
||||
'motor_pump_pumpset_status',
|
||||
'winded_serial_number',
|
||||
'motor_machine_name',
|
||||
'pump_machine_name',
|
||||
'name_plate_machine_name',
|
||||
'pumpset_machine_name',
|
||||
'part_validation_1',
|
||||
'part_validation_2',
|
||||
'samlight_logged_name',
|
||||
'pending_released_status',
|
||||
'has_work_flow_id',
|
||||
'motor_expected_time',
|
||||
'pump_expected_time',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'created_by',
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -33,8 +33,6 @@ class InvoiceValidation extends Model
|
||||
'operator_id',
|
||||
'created_by',
|
||||
'updated_by',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
];
|
||||
|
||||
public function plant(): BelongsTo
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
|
||||
class Item extends Model
|
||||
@@ -59,11 +60,6 @@ class Item extends Model
|
||||
return $this->hasMany(ProductCharacteristicsMaster::class);
|
||||
}
|
||||
|
||||
public function characteristicValues()
|
||||
{
|
||||
return $this->hasMany(CharacteristicValue::class);
|
||||
}
|
||||
|
||||
public function weightValidations()
|
||||
{
|
||||
return $this->hasMany(WeightValidation::class);
|
||||
|
||||
@@ -41,11 +41,6 @@ class Line extends Model
|
||||
return $this->belongsTo(Block::class);
|
||||
}
|
||||
|
||||
public function qualityValidations()
|
||||
{
|
||||
return $this->hasMany(QualityValidation::class);
|
||||
}
|
||||
|
||||
public function testingPanelReadings()
|
||||
{
|
||||
return $this->hasMany(TestingPanelReading::class);
|
||||
@@ -56,21 +51,6 @@ class Line extends Model
|
||||
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()
|
||||
{
|
||||
return $this->belongsTo(WorkGroupMaster::class, 'work_group1_id', 'id');
|
||||
|
||||
@@ -12,9 +12,9 @@ class Machine extends Model
|
||||
|
||||
protected $fillable = [
|
||||
'plant_id',
|
||||
'line_id',
|
||||
'line_id',
|
||||
'work_group_master_id',
|
||||
'name',
|
||||
'name',
|
||||
'work_center',
|
||||
];
|
||||
|
||||
@@ -23,7 +23,7 @@ class Machine extends Model
|
||||
return $this->belongsTo(Plant::class);
|
||||
}
|
||||
|
||||
public function line(): BelongsTo
|
||||
public function line(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Line::class);
|
||||
}
|
||||
@@ -33,16 +33,6 @@ class Machine extends Model
|
||||
return $this->belongsTo(WorkGroupMaster::class);
|
||||
}
|
||||
|
||||
public function productCharacteristicsMasters()
|
||||
{
|
||||
return $this->hasMany(ProductCharacteristicsMaster::class);
|
||||
}
|
||||
|
||||
public function characteristicValues()
|
||||
{
|
||||
return $this->hasMany(CharacteristicValue::class);
|
||||
}
|
||||
|
||||
public function testingPanelReadings()
|
||||
{
|
||||
return $this->hasMany(TestingPanelReading::class);
|
||||
@@ -52,4 +42,5 @@ class Machine extends Model
|
||||
{
|
||||
return $this->hasMany(EquipmentMaster::class, 'machine_id', 'id');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -25,12 +25,12 @@ class Plant extends Model
|
||||
|
||||
public function blocks(): HasMany
|
||||
{
|
||||
return $this->hasMany(Block::class, 'plant_id', 'id');
|
||||
return $this->hasMany(Block::class);
|
||||
}
|
||||
|
||||
public function lines(): HasMany
|
||||
{
|
||||
return $this->hasMany(Line::class, 'plant_id', 'id');
|
||||
return $this->hasMany(Line::class);
|
||||
}
|
||||
|
||||
public function getLineNames()
|
||||
@@ -40,27 +40,27 @@ class Plant extends Model
|
||||
|
||||
public function items(): HasMany
|
||||
{
|
||||
return $this->hasMany(Item::class, 'plant_id', 'id');
|
||||
return $this->hasMany(Item::class);
|
||||
}
|
||||
|
||||
public function stickersMasters(): HasMany
|
||||
{
|
||||
return $this->hasMany(StickerMaster::class, 'plant_id', 'id');
|
||||
return $this->hasMany(StickerMaster::class);
|
||||
}
|
||||
|
||||
public function invoiceValidations()
|
||||
{
|
||||
return $this->hasMany(InvoiceValidation::class, 'plant_id', 'id');
|
||||
return $this->hasMany(InvoiceValidation::class, 'sticker_master_id');
|
||||
}
|
||||
|
||||
public function qualityValidations()
|
||||
{
|
||||
return $this->hasMany(QualityValidation::class, 'plant_id', 'id');
|
||||
return $this->hasMany(QualityValidation::class, 'sticker_master_id');
|
||||
}
|
||||
|
||||
public function testingPanelReadings()
|
||||
{
|
||||
return $this->hasMany(TestingPanelReading::class, 'plant_id', 'id');
|
||||
return $this->hasMany(TestingPanelReading::class);
|
||||
}
|
||||
|
||||
public function guardNames()
|
||||
@@ -88,21 +88,6 @@ class Plant extends Model
|
||||
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()
|
||||
{
|
||||
return $this->hasMany(EquipmentMaster::class, 'plant_id', 'id');
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
|
||||
class WorkGroupMaster extends Model
|
||||
{
|
||||
use SoftDeletes;
|
||||
use SoftDeletes;
|
||||
|
||||
protected $fillable = [
|
||||
'plant_id',
|
||||
@@ -25,11 +25,6 @@ class WorkGroupMaster extends Model
|
||||
return $this->belongsTo(Plant::class);
|
||||
}
|
||||
|
||||
public function productCharacteristicsMasters()
|
||||
{
|
||||
return $this->hasMany(ProductCharacteristicsMaster::class);
|
||||
}
|
||||
|
||||
// public function rejectReasons()
|
||||
// {
|
||||
// return $this->hasMany(RejectReason::class, 'work_group_master_id', 'id');
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,7 @@
|
||||
"require": {
|
||||
"php": "^8.2",
|
||||
"alperenersoy/filament-export": "^3.0",
|
||||
"althinect/filament-spatie-roles-permissions": "^2.3",
|
||||
"althinect/filament-spatie-roles-permissions": "^3.0",
|
||||
"erag/laravel-pwa": "^1.9",
|
||||
"filament/filament": "^3.3",
|
||||
"intervention/image": "^3.11",
|
||||
|
||||
@@ -213,7 +213,7 @@ return [
|
||||
|
||||
'user_model' => \App\Models\User::class,
|
||||
|
||||
'user_model_class' => \App\Models\User::class,
|
||||
// 'user_model_class' => \App\Models\User::class,
|
||||
|
||||
'policies_namespace' => 'App\Policies',
|
||||
],
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
@@ -8,6 +9,7 @@ return new class extends Migration
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
|
||||
public function up(): void
|
||||
{
|
||||
$sql = <<<'SQL'
|
||||
@@ -20,10 +22,10 @@ return new class extends Migration
|
||||
machine_id BIGINT DEFAULT NULL,
|
||||
name TEXT DEFAULT NULL,
|
||||
inspection_type TEXT DEFAULT NULL,
|
||||
characteristics_type TEXT DEFAULT NULL,
|
||||
characteristics_type TEXT DEFAULT NULL
|
||||
upper 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(),
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
created_by TEXT DEFAULT NULL,
|
||||
@@ -40,6 +42,7 @@ return new class extends Migration
|
||||
DB::statement($sql);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
|
||||
@@ -105,9 +105,6 @@ return new class extends Migration
|
||||
zmm_tagno TEXT DEFAULT NULL,
|
||||
zmm_year 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_beenumber 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_pf 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_panel TEXT DEFAULT NULL,
|
||||
zmm_performance_factor TEXT DEFAULT NULL,
|
||||
@@ -143,34 +143,24 @@ return new class extends Migration
|
||||
zmm_usp TEXT DEFAULT NULL,
|
||||
mark_status TEXT DEFAULT NULL,
|
||||
marked_datetime TIMESTAMP DEFAULT NULL,
|
||||
marked_physical_count TEXT DEFAULT '0',
|
||||
marked_expected_time TEXT DEFAULT '0',
|
||||
marked_by TEXT DEFAULT NULL,
|
||||
man_marked_status TEXT DEFAULT '0',
|
||||
man_marked_datetime TIMESTAMP DEFAULT NULL,
|
||||
man_marked_by 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,
|
||||
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,
|
||||
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,
|
||||
winded_serial_number TEXT DEFAULT NULL,
|
||||
motor_machine_name TEXT DEFAULT NULL,
|
||||
pump_machine_name TEXT DEFAULT NULL,
|
||||
name_plate_machine_name TEXT DEFAULT NULL,
|
||||
pumpset_machine_name TEXT DEFAULT NULL,
|
||||
part_validation_1 TEXT DEFAULT NULL,
|
||||
part_validation_2 TEXT DEFAULT NULL,
|
||||
samlight_logged_name TEXT DEFAULT NULL,
|
||||
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(),
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
};
|
||||
@@ -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');
|
||||
}
|
||||
};
|
||||
@@ -1,61 +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 stock_data_masters (
|
||||
id BIGINT GENERATED always AS IDENTITY PRIMARY KEY,
|
||||
|
||||
plant_id BIGINT NOT NULL,
|
||||
sticker_master_id BIGINT NOT NULL,
|
||||
location TEXT DEFAULT NULL,
|
||||
bin TEXT DEFAULT NULL,
|
||||
serial_number TEXT DEFAULT NULL,
|
||||
batch TEXT DEFAULT NULL,
|
||||
quantity TEXT DEFAULT NULL,
|
||||
doc_no TEXT DEFAULT NULL,
|
||||
type TEXT DEFAULT '0',
|
||||
motor_scanned_status TEXT DEFAULT NULL,
|
||||
pump_scanned_status TEXT DEFAULT NULL,
|
||||
capacitor_scanned_status TEXT DEFAULT NULL,
|
||||
scanned_status_set TEXT DEFAULT NULL,
|
||||
panel_box_item_code TEXT DEFAULT NULL,
|
||||
panel_box_supplier TEXT DEFAULT NULL,
|
||||
panel_box_sno TEXT DEFAULT NULL,
|
||||
scanned_status TEXT DEFAULT NULL,
|
||||
|
||||
scanned_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,
|
||||
|
||||
UNIQUE (plant_id, serial_number),
|
||||
|
||||
FOREIGN KEY (plant_id) REFERENCES plants(id),
|
||||
FOREIGN KEY (sticker_master_id) REFERENCES sticker_masters (id)
|
||||
);
|
||||
SQL;
|
||||
DB::statement($sql);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('stock_data_masters');
|
||||
}
|
||||
};
|
||||
|
||||
@@ -90,7 +90,6 @@ class PermissionSeeder extends Seeder
|
||||
|
||||
Permission::updateOrCreate(['name' => 'view import serial invoice']);
|
||||
Permission::updateOrCreate(['name' => 'view import material invoice']);
|
||||
Permission::updateOrCreate(['name' => 'view import invoice']);
|
||||
Permission::updateOrCreate(['name' => 'view export invoice']);
|
||||
|
||||
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 target page']);
|
||||
|
||||
Permission::updateOrCreate(['name' => 'view wire master print page']);
|
||||
Permission::updateOrCreate(['name' => 'view cycle count page']);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 () {
|
||||
const scanInput = document.getElementById('qr-scan-input');
|
||||
if (!scanInput) return;
|
||||
@@ -106,10 +97,10 @@
|
||||
|
||||
const value = scanInput.value.trim();
|
||||
|
||||
// if (value != '') {
|
||||
if (value !== '') {
|
||||
Livewire.dispatch('handleQrScan', { value: value });
|
||||
scanInput.value = '';
|
||||
// }
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -34,33 +34,22 @@
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
|
||||
window.addEventListener('focus-qr-input', () => {
|
||||
const input = document.getElementById('qr-scan-input');
|
||||
|
||||
if (input) {
|
||||
input.focus();
|
||||
input.select();
|
||||
}
|
||||
});
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
const scanInput = document.getElementById('qr-scan-input');
|
||||
if (!scanInput) return;
|
||||
|
||||
scanInput.addEventListener('keydown', function (event) {
|
||||
if (event.key == 'Enter') {
|
||||
if (event.key === 'Enter') {
|
||||
event.preventDefault();
|
||||
|
||||
const value = scanInput.value.trim();
|
||||
|
||||
//if (value !== '') {
|
||||
if (value !== '') {
|
||||
Livewire.dispatch('handleQrScan', { value: value });
|
||||
scanInput.value = '';
|
||||
//}
|
||||
}
|
||||
}
|
||||
});
|
||||
window.addEventListener('open-pdf', event => {
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
CRI Digital Manufacturing IIoT Platform
|
||||
</h1>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -64,57 +64,57 @@ document.addEventListener('DOMContentLoaded', function () {
|
||||
});
|
||||
|
||||
|
||||
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; // 1–12 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) {
|
||||
// function updateWorkingDays(date) {
|
||||
// let totalDays = new Date(
|
||||
// date.getFullYear(),
|
||||
// date.getMonth() + 1,
|
||||
// date.getMonth()+1,
|
||||
// 0
|
||||
// ).getDate();
|
||||
|
||||
// let workingDays = totalDays - selectedDates.length;
|
||||
// // document.querySelector('input[name="working_days"]').value = workingDays;
|
||||
|
||||
// // 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(',');
|
||||
// const input = document.querySelector('#working_days');
|
||||
|
||||
// input.value = workingDays;
|
||||
|
||||
// input.dispatchEvent(new Event('input'));
|
||||
|
||||
// const monthInput = document.querySelector('#month');
|
||||
// monthInput.value = date.getMonth() + 1; // 1–12 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();
|
||||
});
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -6,11 +6,10 @@
|
||||
<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" 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">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">Category</th>
|
||||
|
||||
<th class="border px-4 py-2 whitespace-nowrap" colspan="{{ count($dates) * 3 }}" class="text-center">
|
||||
Production Plan Dates
|
||||
@@ -28,7 +27,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
@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 border-r-4 border-gray-400">
|
||||
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['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['category'] }}</td>
|
||||
|
||||
{{-- @foreach($dates as $date)
|
||||
<td class="border px-4 py-2 whitespace-nowrap">{{ $record['target_plan'][$date] ?? '-' }}</td>
|
||||
@@ -61,7 +59,7 @@
|
||||
@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_hourly_quantity'][$date] ?? '-' }}
|
||||
{{ $record['daily_line_capacity'][$date] ?? '-' }}
|
||||
</td>
|
||||
<td class="border px-4 py-2 whitespace-nowrap">
|
||||
{{ $record['daily_target_dynamic'][$date] ?? '-' }}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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; 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;">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;">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;">OverAll Efficiency(%)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<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; 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;">{{ $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['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['efficiency'] }}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
|
||||
@@ -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
|
||||
MADE IN INDIA
|
||||
*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>
|
||||
@@ -24,7 +24,7 @@ use App\Http\Controllers\ModuleProductionLineStopController;
|
||||
use App\Http\Controllers\ModuleProductionOrderDataController;
|
||||
use App\Http\Controllers\ObdController;
|
||||
use App\Http\Controllers\PalletController;
|
||||
use App\Http\Controllers\PalletPrintController;
|
||||
// use App\Http\Controllers\PalletPrintController;
|
||||
use App\Http\Controllers\PdfController;
|
||||
use App\Http\Controllers\PlantController;
|
||||
use App\Http\Controllers\ProductionStickerReprintController;
|
||||
@@ -34,9 +34,8 @@ use App\Http\Controllers\StickerMasterController;
|
||||
use App\Http\Controllers\TestingPanelController;
|
||||
use App\Http\Controllers\UserController;
|
||||
use App\Http\Controllers\VehicleController;
|
||||
// use App\Http\Controllers\VehicleController;
|
||||
// use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;
|
||||
// use Illuminate\Http\Request;
|
||||
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
// 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('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
|
||||
|
||||
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']);
|
||||
|
||||
// ..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
|
||||
|
||||
Route::get('get-characteristics/master-data', [CharacteristicsController::class, 'getCharacteristicsMaster']);
|
||||
|
||||
Route::get('characteristics/get/master', [CharacteristicsController::class, 'getCharMaster']); // LIVEEEE
|
||||
Route::get('characteristics/get/master', [CharacteristicsController::class, 'getCharMaster']);
|
||||
|
||||
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::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']);
|
||||
|
||||
Reference in New Issue
Block a user