1 Commits

Author SHA1 Message Date
dhanabalan
d7d27a9dc0 added unwanted enters in between code for testing
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 11s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 12s
Laravel Pint / pint (pull_request) Has been cancelled
Laravel Larastan / larastan (pull_request) Has been cancelled
Gemini PR Review / review (pull_request) Has been cancelled
2025-12-02 12:16:34 +05:30
230 changed files with 8158 additions and 26321 deletions

View File

@@ -5,20 +5,15 @@ name: Gemini PR Review
on:
pull_request:
types: [opened, reopened, synchronize]
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
gemini-pr-review:
review:
runs-on: ubuntu-latest
name: Gemini PR Review
steps:
- name: Checkout code
uses: actions/checkout@v6
uses: actions/checkout@v5
with:
fetch-depth: 0 # This fetches the full history
@@ -27,6 +22,7 @@ jobs:
with:
node-version: '24'
- name: Get npm cache directory
id: npm-cache-dir
run: |
@@ -40,14 +36,8 @@ jobs:
restore-keys: |
${{ runner.os }}-npm-global-
- name: Install Gemini CLI globally (if not already installed)
run: |
if ! command -v gemini &> /dev/null; then
echo "Gemini CLI not found, installing..."
npm install -g --loglevel=http @google/gemini-cli
else
echo "Gemini CLI already installed."
fi
- name: Install Gemini CLI globally
run: npm install -g --loglevel=http @google/gemini-cli
- name: Generate git diff and review with Gemini
id: review
@@ -62,6 +52,7 @@ jobs:
cat /tmp/gemini-client-error*.json || true
- name: Post output to PR comment
id: post_comment
run: |

View File

@@ -1,252 +0,0 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Console\Scheduling\Schedule;
use App\Models\AlertMailRule;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Log;
class Scheduler extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
// protected $signature = 'app:scheduler';
protected $signature = 'custom:scheduler';
/**
* The console command description.
*
* @var string
*/
// protected $description = 'Command description';
protected $description = 'Manually trigger scheduler logic';
/**
* Execute the console command.
*/
// public function handle()
// {
// //
// }
public function handle()
{
$this->call('approval:trigger-mails');
// --- Production Rules ---
$productionRules = AlertMailRule::where('module', 'ProductionQuantities')
->where('rule_name', 'ProductionMail')
->select('plant', 'schedule_type')
->distinct()
->get();
foreach ($productionRules as $rule) {
switch ($rule->schedule_type) {
case 'Live':
// Run every minute
\Artisan::call('send:production-report', [
'schedule_type' => $rule->schedule_type,
'plant' => $rule->plant,
]);
break;
case 'Hourly':
if (now()->minute == 0) {
\Artisan::call('send:production-report', [
'schedule_type' => $rule->schedule_type,
'plant' => $rule->plant,
]);
}
break;
case 'Daily':
if (now()->format('H:i') == '07:59') {
\Artisan::call('send:production-report', [
'schedule_type' => $rule->schedule_type,
'plant' => $rule->plant,
]);
}
break;
}
}
// --- Invoice Validation Rules ---
$invoiceRules = AlertMailRule::where('module', 'InvoiceValidation')
->where('rule_name', 'InvoiceMail')
->select('plant', 'schedule_type')
->distinct()
->get();
foreach ($invoiceRules as $rule) {
switch ($rule->schedule_type) {
case 'Live':
// Run every minute
\Artisan::call('send:invoice-report', [
'schedule_type' => $rule->schedule_type,
'plant' => $rule->plant,
]);
break;
case 'Hourly':
if (now()->minute == 0) {
\Artisan::call('send:invoice-report', [
'schedule_type' => $rule->schedule_type,
'plant' => $rule->plant,
]);
}
break;
case 'Daily':
if (now()->format('H:i') == '07:59') {
\Artisan::call('send:invoice-report', [
'schedule_type' => $rule->schedule_type,
'plant' => $rule->plant,
]);
}
break;
}
}
// foreach ($invoiceRules as $rule) {
// switch ($rule->schedule_type) {
// case 'Live':
// try {
// Artisan::call('send:invoice-report', [
// 'schedule_type' => $rule->schedule_type,
// 'plant' => $rule->plant,
// ]);
// Log::info('Invoice report sent | Plant: '.$rule->plant);
// } catch (\Throwable $e) {
// Log::error("Invoice Live Failed ({$rule->plant}): ".$e->getMessage());
// }
// break;
// case 'Hourly':
// if (now()->minute == 0) {
// Artisan::call('send:invoice-report', [
// 'schedule_type' => $rule->schedule_type,
// 'plant' => $rule->plant,
// ]);
// }
// break;
// case 'Daily':
// if (now()->format('H:i') == '07:59') {
// Artisan::call('send:invoice-report', [
// 'schedule_type' => $rule->schedule_type,
// 'plant' => $rule->plant,
// ]);
// }
// break;
// }
// }
// --- Invoice Data Report Rules ---
$invoiceDataRules = AlertMailRule::where('module', 'InvoiceDataReport')
->where('rule_name', 'InvoiceDataMail')
->select('plant', 'schedule_type')
->distinct()
->get();
foreach ($invoiceDataRules as $rule) {
switch ($rule->schedule_type) {
case 'Live':
// Run every minute
\Artisan::call('send:invoice-data-report', [
'schedule_type' => $rule->schedule_type,
'plant' => $rule->plant,
]);
break;
case 'Hourly':
if (now()->minute == 0) {
\Artisan::call('send:invoice-data-report', [
'schedule_type' => $rule->schedule_type,
'plant' => $rule->plant,
]);
}
break;
case 'Daily':
if (now()->format('H:i') == '11:30') {
\Artisan::call('send:invoice-data-report', [
'schedule_type' => $rule->schedule_type,
'plant' => $rule->plant,
]);
}
break;
}
}
$invoiceTransitRules = AlertMailRule::where('module', 'InvoiceTransit')
->where('rule_name', 'InvoiceTransitMail')
->select('plant', 'schedule_type')
->distinct()
->get();
foreach ($invoiceTransitRules as $rule) {
switch ($rule->schedule_type) {
case 'Live':
// Run every minute
\Artisan::call('send:invoice-transit-report', [
'schedule_type' => $rule->schedule_type,
'plant' => $rule->plant,
]);
break;
case 'Hourly':
if (now()->minute == 0) {
\Artisan::call('send:invoice-transit-report', [
'schedule_type' => $rule->schedule_type,
'plant' => $rule->plant,
]);
}
break;
case 'Daily':
if (now()->format('H:i') == '10:45') {
try {
\Artisan::call('send:invoice-transit-report', [
'schedule_type' => $rule->schedule_type,
'plant' => $rule->plant,
]);
Log::info('Invoice Transit executed', [
'plant' => $rule->plant,
'type' => $rule->schedule_type,
]);
}
catch (\Throwable $e) {
Log::error('Invoice Transit FAILED', [
'plant' => $rule->plant,
'error' => $e->getMessage(),
'trace' => $e->getTraceAsString(),
]);
}
}
break;
}
}
}
/**
* Helper to call Artisan commands with parameters.
*/
protected function callArtisanCommand($commandName, $rule)
{
\Artisan::call($commandName, [
'schedule_type' => $rule->schedule_type,
'plant' => $rule->plant,
]);
$this->info("Executed {$commandName} for plant: {$rule->plant}");
\Log::info("Executed {$commandName} for plant: {$rule->plant}");
}
}

View File

@@ -6,8 +6,12 @@ use App\Mail\InvoiceDataMail;
use App\Models\AlertMailRule;
use App\Models\InvoiceDataValidation;
use App\Models\InvoiceOutValidation;
use App\Models\Line;
use App\Models\Plant;
use App\Models\ProductionPlan;
use App\Models\ProductionQuantity;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Mail;
class SendInvoiceDataReport extends Command
{
@@ -45,7 +49,7 @@ class SendInvoiceDataReport extends Command
$plants = ($plantId == 0) ? Plant::all() : Plant::where('id', $plantId)->get();
if ($plants->isEmpty()) {
$this->error('No valid plant(s) found.');
$this->error("No valid plant(s) found.");
return;
}
@@ -101,7 +105,7 @@ class SendInvoiceDataReport extends Command
->where('distribution_channel_desc', $selectedDistribution)
->whereBetween('document_date', [$startDate, $endDate])
->orderBy('document_date', 'asc')
->select('customer_code', 'document_number', 'document_date', 'customer_trade_name', 'customer_location', 'location', 'remark')
->select('customer_code', 'document_number', 'document_date', 'customer_trade_name', 'customer_location', 'location')
->get()
->unique('document_number')
->values();
@@ -110,6 +114,7 @@ class SendInvoiceDataReport extends Command
continue;
}
// Filter invoices directly — exclude ones with '-' in document_number
$invoices = $invoices->filter(function ($inv) {
return !empty($inv->document_number) && !str_contains($inv->document_number, '-');
});
@@ -129,6 +134,7 @@ class SendInvoiceDataReport extends Command
->map(fn($n) => preg_replace('/\s+/', '', strtoupper((string) $n)))
->toArray();
//where('plant_id', $plant->id)
$wentOutInvoices = InvoiceOutValidation::whereIn('qr_code', $invoiceNumbers)
//->whereBetween('scanned_at', [$startDate, $endDate])
->distinct('qr_code')
@@ -158,6 +164,7 @@ class SendInvoiceDataReport extends Command
return !in_array($doc, $wentOutInvoices, true);
});
if ($pendingInvoices->isEmpty()) {
continue;
}
@@ -175,7 +182,7 @@ class SendInvoiceDataReport extends Command
}
$tableData[] = [
// 'no' => $no++,
//'no' => $no++,
'plant' => $plant->name,
// 'distribution_type' => $selectedDistribution,
'customer_code' => $inv->customer_code,
@@ -187,7 +194,6 @@ class SendInvoiceDataReport extends Command
'no_of_days_pending' => abs((int)now()->diffInDays($documentDate)),
'status' => 'Pending',
'status_class' => $statusColor,
'remark' => $inv->remark,
];
}
}
@@ -197,7 +203,6 @@ class SendInvoiceDataReport extends Command
->values()
->map(function ($item, $index) {
$item['no'] = $index + 1;
return $item;
})
->toArray();
@@ -209,7 +214,7 @@ class SendInvoiceDataReport extends Command
$this->info($contentVars['greeting'] ?? 'Invoice Data Report');
$this->table(
['No', 'Plant', 'Customer Code', 'Document Number', 'Document Date', 'Trade Name', 'Location', 'Pending Days', 'Status', 'Remark'],// 'Distribution Type'
['No', 'Plant', 'Customer Code', 'Document Number', 'Document Date', 'Trade Name', 'Location', 'Pending Days', 'Status'],//'Distribution Type'
$tableData
);
$this->info($contentVars['wishes'] ?? '');
@@ -231,13 +236,13 @@ class SendInvoiceDataReport extends Command
->toArray();
if (empty($toEmails)) {
$this->info("Skipping rule ID {$rule->id} — no valid To emails found.");
$this->warn("Skipping rule ID {$rule->id} — no valid To emails found.");
continue;
}
\Mail::to($toEmails)->cc($ccEmails)->send($mail);
$this->info("Mail sent for rule ID {$rule->id} → To: ".implode(', ', $toEmails).($ccEmails ? ' | CC: '.implode(', ', $ccEmails) : ''));
$this->info("Mail sent for rule ID {$rule->id} → To: " . implode(', ', $toEmails) . ($ccEmails ? " | CC: " . implode(', ', $ccEmails) : ''));
}
}
}

View File

@@ -2,11 +2,11 @@
namespace App\Console\Commands;
use App\Mail\test;
use App\Models\InvoiceValidation;
use App\Models\Plant;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Mail;
use App\Mail\test;
class SendInvoiceReport extends Command
{
@@ -15,8 +15,9 @@ class SendInvoiceReport extends Command
*
* @var string
*/
// protected $signature = 'app:send-invoice-report';
protected $signature = 'send:invoice-report {schedule_type} {plant}';
// protected $signature = 'app:send-invoice-report';
protected $signature = 'send:invoice-report{schedule_type} {plant}';
/**
* The console command description.
@@ -28,10 +29,12 @@ class SendInvoiceReport extends Command
/**
* Execute the console command.
*/
public function handle()
{
$schedule = $this->argument('schedule_type');
// $scheduleType = $this->argument('scheduleType');
//$scheduleType = $this->argument('scheduleType');
$plantIdArg = (int) $this->argument('plant'); // can be 0 for all plants
$mailRules = \App\Models\AlertMailRule::where('module', 'InvoiceValidation')->get()->groupBy('rule_name');
@@ -49,14 +52,18 @@ class SendInvoiceReport extends Command
: [$plantIdArg];
$no = 1;
if (strtolower($schedule) == 'daily') {
if (strtolower($schedule) == 'daily')
{
$startDate = now()->subDay()->setTime(8, 0, 0);
$endDate = now()->setTime(8, 0, 0);
} else {
}
else
{
$startDate = now()->setTime(8, 0, 0);
$endDate = now()->copy()->addDay()->setTime(8, 0, 0);
}
foreach ($plantIds as $plantId) {
foreach ($plantIds as $plantId)
{
$plant = Plant::find($plantId);
$plantName = $plant ? $plant->name : $plantId;
@@ -70,7 +77,7 @@ class SendInvoiceReport extends Command
$scannedSerialCount = InvoiceValidation::select('invoice_number')
->where('plant_id', $plantId)
->whereNull('quantity')
->whereBetween('created_at', [$startDate, $endDate])
->whereBetween('updated_at', [$startDate, $endDate])
->groupBy('invoice_number')
->havingRaw("COUNT(*) = SUM(CASE WHEN scanned_status = 'Scanned' THEN 1 ELSE 0 END)")
->count();
@@ -82,11 +89,11 @@ class SendInvoiceReport extends Command
$scannedInvoiceQuan = InvoiceValidation::where('plant_id', $plantId)
->where('scanned_status', 'Scanned')
->where(function ($query) {
->where(function($query) {
$query->whereNull('quantity')
->orWhere('quantity', 0);
})
->whereBetween('created_at', [$startDate, $endDate])
->whereBetween('updated_at', [$startDate, $endDate])
->count();
$serialTableData[] = [
@@ -108,7 +115,7 @@ class SendInvoiceReport extends Command
$scannedMatCount = InvoiceValidation::select('invoice_number')
->where('plant_id', $plantId)
->where('quantity', 1)
->whereBetween('created_at', [$startDate, $endDate])
->whereBetween('updated_at', [$startDate, $endDate])
->groupBy('invoice_number')
->havingRaw("COUNT(*) = SUM(CASE WHEN serial_number IS NOT NULL AND serial_number != '' THEN 1 ELSE 0 END)")
->count();
@@ -121,8 +128,8 @@ class SendInvoiceReport extends Command
$scannedMatInvoiceQuan = InvoiceValidation::where('plant_id', $plantId)
->where('quantity', 1)
->whereNotNull('serial_number')
->where('serial_number', '!=', '')
->whereBetween('created_at', [$startDate, $endDate])
->where('serial_number','!=', '')
->whereBetween('updated_at', [$startDate, $endDate])
->count();
$materialTableData[] = [
@@ -144,7 +151,7 @@ class SendInvoiceReport extends Command
$scannedBundleCount = InvoiceValidation::select('invoice_number')
->where('plant_id', $plantId)
->where('quantity', '>', 1)
->whereBetween('created_at', [$startDate, $endDate])
->whereBetween('updated_at', [$startDate, $endDate])
->groupBy('invoice_number')
->havingRaw("COUNT(*) = SUM(CASE WHEN serial_number IS NOT NULL AND serial_number != '' THEN 1 ELSE 0 END)")
->count();
@@ -157,8 +164,8 @@ class SendInvoiceReport extends Command
$scannedBundleInvoiceQuan = InvoiceValidation::where('plant_id', $plantId)
->where('quantity', '>', 1)
->whereNotNull('serial_number')
->where('serial_number', '!=', '')
->whereBetween('created_at', [$startDate, $endDate])
->where('serial_number','!=', '')
->whereBetween('updated_at', [$startDate, $endDate])
->count();
$bundleTableData[] = [
@@ -180,118 +187,41 @@ class SendInvoiceReport extends Command
// Send to SerialInvoiceMail recipients
if ($mailRules->has('SerialInvoiceMail')) {
// $emails = $mailRules['SerialInvoiceMail']->pluck('email')->unique()->toArray();
// foreach ($emails as $email) {
// Mail::to($email)->send(new test($serialTableData, [], [], $schedule));
// }
foreach ($mailRules->get('SerialInvoiceMail') as $rule) {
$toEmails = collect(explode(',', $rule->email))
->map(fn ($e) => trim($e))
->filter()
->unique()
->values()
->toArray();
$ccEmails = collect(explode(',', $rule->cc_emails ?? ''))
->map(fn ($e) => trim($e))
->filter()
->unique()
->values()
->toArray();
if (empty($toEmails)) {
$this->warn("Skipping rule ID {$rule->id} — no valid To emails found.");
continue;
}
\Mail::to($toEmails)->cc($ccEmails)->send(new test($serialTableData, [], [], $schedule));
$this->info("Mail sent for rule ID {$rule->id} → To: ".implode(', ', $toEmails).($ccEmails ? ' | CC: '.implode(', ', $ccEmails) : ''));
$emails = $mailRules['SerialInvoiceMail']->pluck('email')->unique()->toArray();
foreach ($emails as $email) {
Mail::to($email)->send(new test($serialTableData, [], [], $schedule));
}
}
// Send to MaterialInvoiceMail recipients (material + bundle table)
if ($mailRules->has('MaterialInvoiceMail')) {
// $emails = $mailRules['MaterialInvoiceMail']->pluck('email')->unique()->toArray();
// foreach ($emails as $email) {
// Mail::to($email)->send(new test([], $materialTableData, $bundleTableData, $schedule));
// }
foreach ($mailRules->get('MaterialInvoiceMail') as $rule) {
$toEmails = collect(explode(',', $rule->email))
->map(fn ($e) => trim($e))
->filter()
->unique()
->values()
->toArray();
$ccEmails = collect(explode(',', $rule->cc_emails ?? ''))
->map(fn ($e) => trim($e))
->filter()
->unique()
->values()
->toArray();
if (empty($toEmails)) {
$this->warn("Skipping rule ID {$rule->id} — no valid To emails found.");
continue;
}
\Mail::to($toEmails)->cc($ccEmails)->send(new test([], $materialTableData, $bundleTableData, $schedule));
$this->info("Mail sent for rule ID {$rule->id} → To: ".implode(', ', $toEmails).($ccEmails ? ' | CC: '.implode(', ', $ccEmails) : ''));
$emails = $mailRules['MaterialInvoiceMail']->pluck('email')->unique()->toArray();
foreach ($emails as $email) {
Mail::to($email)->send(new test([], $materialTableData, $bundleTableData, $schedule));
}
}
// Send to InvoiceMail recipients (all three tables)
if ($mailRules->has('InvoiceMail')) {
//$emails = $mailRules['InvoiceMail']->pluck('email')->unique()->toArray();
// foreach ($emails as $email) {
// Mail::to($email)->send(new test($serialTableData, $materialTableData, $bundleTableData, $schedule));
// $this->info("✅ Sent InvoiceMail to: {$email}");
// }
foreach ($mailRules->get('InvoiceMail') as $rule) {
$toEmails = collect(explode(',', $rule->email))
->map(fn ($e) => trim($e))
->filter()
->unique()
->values()
->toArray();
$ccEmails = collect(explode(',', $rule->cc_emails ?? ''))
->map(fn ($e) => trim($e))
->filter()
->unique()
->values()
->toArray();
if (empty($toEmails)) {
$this->warn("Skipping rule ID {$rule->id} — no valid To emails found.");
continue;
}
\Mail::to($toEmails)->cc($ccEmails)->send(new test($serialTableData, $materialTableData, $bundleTableData, $schedule));
$this->info("Mail sent for rule ID {$rule->id} → To: ".implode(', ', $toEmails).($ccEmails ? ' | CC: '.implode(', ', $ccEmails) : ''));
$emails = $mailRules['InvoiceMail']->pluck('email')->unique()->toArray();
foreach ($emails as $email) {
Mail::to($email)->send(new test($serialTableData, $materialTableData, $bundleTableData, $schedule));
}
}
// Show preview in console
$this->info('--- Serial Invoice Table ---');
$this->table(['#', 'Plant', 'Total Invoice', 'Scanned Invoice', 'TotalInvoice Quantity', 'ScannedInvoice Quantity'], $serialTableData);
$this->table(['#', 'Plant', 'Total Invoice', 'Scanned Invoice','TotalInvoice Quantity', 'ScannedInvoice Quantity'], $serialTableData);
$this->info('--- Material Invoice Table ---');
$this->table(['#', 'Plant', 'Total Invoice', 'Scanned Invoice', 'TotalInvoice Quantity', 'ScannedInvoice Quantity'], $materialTableData);
$this->table(['#', 'Plant', 'Total Invoice', 'Scanned Invoice','TotalInvoice Quantity', 'ScannedInvoice Quantity'], $materialTableData);
$this->info('--- Bundle Invoice Table ---');
$this->table(['#', 'Plant', 'Total Invoice', 'Scanned Invoice', 'TotalInvoice Quantity', 'ScannedInvoice Quantity'], $bundleTableData);
$this->table(['#', 'Plant', 'Total Invoice', 'Scanned Invoice','TotalInvoice Quantity', 'ScannedInvoice Quantity'], $bundleTableData);
$this->info($contentVars['wishes'] ?? '');
}
}

View File

@@ -1,169 +0,0 @@
<?php
namespace App\Console\Commands;
use App\Mail\InvoiceTransitMail;
use App\Models\AlertMailRule;
use App\Models\InvoiceMaster;
use App\Models\Plant;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
class SendInvoiceTransitReport extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'send:invoice-transit-report {schedule_type} {plant}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* Execute the console command.
*/
public function handle()
{
$scheduleType = $this->argument('schedule_type');
$plantId = (int) $this->argument('plant');
$mailRules = AlertMailRule::where('module', 'InvoiceTransit')
->where('rule_name', 'InvoiceTransitMail')
->where('schedule_type', $scheduleType)
->where('plant', $plantId)
->get();
$plants = ($plantId == 0)
? Plant::all()
: Plant::where('id', $plantId)->get();
$plantCodes = $plants->pluck('name', 'id');
if ($plants->isEmpty()) {
$this->error('No valid plant(s) found.');
return;
}
if (strtolower($scheduleType) == 'daily')
{
$results = DB::table('invoice_in_transits as it')
->join('invoice_masters as im', function ($join) {
$join->on('im.receiving_plant_name', '=', 'it.receiving_plant_name')->on('im.transport_name', '=', 'it.transport_name');
})
->select(
'it.invoice_number',
'it.receiving_plant',
'it.plant_id',
'it.receiving_plant_name',
'it.lr_bl_aw_date',
'it.lr_bl_aw_number',
'im.id as invoice_master_id',
'im.transport_name',
DB::raw('CAST(im.transit_days AS INTEGER) as transit_days'),
// DB::raw('(CURRENT_DATE - CAST(it.lr_bl_aw_date AS DATE)) as delayed_days')
// DB::raw('
// GREATEST(
// 0,
// (CURRENT_DATE - CAST(it.lr_bl_aw_date AS DATE) - 1)
// - CAST(im.transit_days AS INTEGER)
// ) AS delayed_days
// ')
DB::raw('
GREATEST(
1,
(CURRENT_DATE - CAST(it.lr_bl_aw_date AS DATE))
- CAST(im.transit_days AS INTEGER)
) AS delayed_days
')
)
->when($plantId != 0, fn($q) => $q->where('it.plant_id', $plantId))
->whereNotNull('it.lr_bl_aw_date')
->whereRaw('
(CURRENT_DATE - CAST(it.lr_bl_aw_date AS DATE))
- CAST(im.transit_days AS INTEGER) > 0
')
->get();
if ($results->isEmpty()) {
$this->info('No invoice transit records found for today.');
return;
}
$tableData = [];
foreach ($mailRules as $rule) {
$ruleInvoices = $results->where('invoice_master_id', $rule->invoice_master_id);
//$ruleInvoices = $results->filter(fn($item) => $item->invoice_master_id == (int)$rule->invoice_master_id);
if ($ruleInvoices->isEmpty()) {
$this->info("Skipping rule {$rule->id} — no invoice transit data.");
continue; // ❌ DO NOT SEND MAIL
}
$invoiceMaster = InvoiceMaster::find($rule->invoice_master_id);
$mailSubject = $invoiceMaster
? "Despatch Invoice In Transit ({$invoiceMaster->receiving_plant_name} - {$invoiceMaster->transport_name})"
: "Despatch Invoice In Transit";
if ($ruleInvoices->isEmpty()) {
$tableData = [];
$this->info("No despatch invoices in transit found for rule {$rule->id}.");
} else {
$tableData = $ruleInvoices->values()->map(function ($item, $index) use ($plantCodes) {
return [
'no' => $index + 1,
'plant' => $plantCodes[$item->plant_id],
'receiving_plant' => $item->receiving_plant,
'receiving_plant_name' => $item->receiving_plant_name,
'invoice_number' => $item->invoice_number,
'transport_name' => $item->transport_name,
'lr_bl_aw_date' => $item->lr_bl_aw_date,
'lr_bl_aw_number' => $item->lr_bl_aw_number,
'transit_days' => $item->transit_days,
'status' => $item->delayed_days . ' Days',
];
})->toArray();
}
$mail = new InvoiceTransitMail($scheduleType, $tableData, $mailSubject);
$toEmails = collect(explode(',', $rule->email))
->map(fn ($e) => trim($e))
->filter()
->unique()
->values()
->toArray();
$ccEmails = collect(explode(',', $rule->cc_emails))
->map(fn ($e) => trim($e))
->filter()
->unique()
->values()
->toArray();
if (empty($toEmails)) {
$this->warn("Skipping rule {$rule->id} — no To emails.");
continue;
}
\Mail::to($toEmails)->cc($ccEmails)->send($mail);
$this->info(
"Mail sent → Rule {$rule->id} | Invoice Master ID: {$rule->invoice_master_id} | To: " . implode(', ', $toEmails)
);
}
}
}
}

View File

@@ -2,13 +2,15 @@
namespace App\Console\Commands;
use App\Mail\ProductionMail;
use App\Models\Line;
use App\Models\InvoiceValidation;
use App\Models\Plant;
use App\Models\ProductionPlan;
use App\Models\ProductionQuantity;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Mail;
use App\Mail\ProductionMail;
use App\Models\Line;
use App\Models\ProductionPlan;
use App\Models\ProductionQuantity;
use DB;
class SendProductionReport extends Command
{
@@ -17,7 +19,7 @@ class SendProductionReport extends Command
*
* @var string
*/
// protected $signature = 'send:production-report';
//protected $signature = 'send:production-report';
protected $signature = 'send:production-report {schedule_type} {plant}';
/**
@@ -30,10 +32,11 @@ class SendProductionReport extends Command
/**
* Execute the console command.
*/
public function handle()
{
// ini_set('max_execution_time', 0); // disable limit
// set_time_limit(0);
ini_set('max_execution_time', 0); // disable limit
set_time_limit(0);
$scheduleType = $this->argument('schedule_type');
$plantId = (int) $this->argument('plant'); // cast to int for safety
@@ -52,30 +55,33 @@ class SendProductionReport extends Command
: Plant::where('id', $plantId)->get();
if ($plants->isEmpty()) {
$this->error('No valid plant(s) found.');
$this->error("No valid plant(s) found.");
return;
}
// $startDate = now()->setTime(8, 0, 0);
// $endDate = now()->copy()->addDay()->setTime(8, 0, 0);
if (strtolower($scheduleType) == 'daily') {
if (strtolower($scheduleType) == 'daily')
{
$startDate = now()->subDay()->setTime(8, 0, 0);
$endDate = now()->setTime(8, 0, 0);
} else {
}
else
{
$startDate = now()->setTime(8, 0, 0);
$endDate = now()->copy()->addDay()->setTime(8, 0, 0);
}
$PlanstartDate = now()->subDay()->setTime(8, 0, 0);
$planendDate = now()->setTime(7, 59, 0);
$PlanstartDate = now()->setTime(8, 0, 0);
$planendDate = now()->copy()->addDay()->setTime(7, 59, 0);
$tableData = [];
$no = 1;
// .
//.
foreach ($plants as $plant) {
foreach ($plants as $plant)
{
$lines = Line::where('plant_id', $plant->id)->get();
foreach ($lines as $line) {
@@ -84,7 +90,6 @@ class SendProductionReport extends Command
->whereBetween('created_at', [$PlanstartDate, $planendDate])
->sum('plan_quantity');
/** @phpstan-ignore property.notFound */
if (strtolower($line->type) == 'fg line') {
$productionQuantity = \App\Models\QualityValidation::where('plant_id', $plant->id)
->where('line_id', $line->id)
@@ -108,7 +113,9 @@ class SendProductionReport extends Command
}
}
// $this->table(['No', 'Plant', 'Line', 'Target Quantity', 'Production Quantity'], $fgTableData);
//$this->table(['No', 'Plant', 'Line', 'Target Quantity', 'Production Quantity'], $fgTableData);
// $this->table(['No', 'Plant', 'Line', 'Target Quantity', 'Production Quantity'], $tableData);
@@ -121,7 +128,7 @@ class SendProductionReport extends Command
// }
// $this->info("Production report sent to " . count($emails) . " recipient(s).");
// Preview in console
// Preview in console
$mail = new ProductionMail($scheduleType, $tableData);
$contentVars = $mail->content()->with;
@@ -133,39 +140,13 @@ class SendProductionReport extends Command
$this->info($contentVars['wishes'] ?? '');
// Send mails
// if (! empty($emails)) {
// foreach ($emails as $email) {
// Mail::to($email)->send(new ProductionMail($scheduleType, $tableData));
// }
// $this->info('Production report sent to '.count($emails).' recipient(s).');
// } else {
// $this->warn('No recipients found for ProductionMailAlert.');
// }
foreach ($mailRules as $rule)
{
$toEmails = collect(explode(',', $rule->email))
->map(fn ($e) => trim($e))
->filter()
->unique()
->values()
->toArray();
$ccEmails = collect(explode(',', $rule->cc_emails))
->map(fn ($e) => trim($e))
->filter()
->unique()
->values()
->toArray();
if (empty($toEmails)) {
$this->warn("Skipping rule ID {$rule->id} — no valid To emails found.");
continue;
if (!empty($emails)) {
foreach ($emails as $email) {
Mail::to($email)->send(new ProductionMail($scheduleType, $tableData));
}
\Mail::to($toEmails)->cc($ccEmails)->send($mail);
$this->info("Mail sent for rule ID {$rule->id} → To: ".implode(', ', $toEmails).($ccEmails ? ' | CC: '.implode(', ', $ccEmails) : ''));
$this->info("Production report sent to " . count($emails) . " recipient(s).");
} else {
$this->warn('No recipients found for ProductionMailAlert.');
}
}
}

View File

@@ -1,204 +0,0 @@
<?php
namespace App\Console\Commands;
use App\Mail\CharacteristicApprovalMail;
use App\Models\CharacteristicApproverMaster;
use App\Models\RequestCharacteristic;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Carbon;
class TriggerPendingApprovalMails extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
// protected $signature = 'app:trigger-pending-approval-mails';
/**
* The console command description.
*
* @var string
*/
// protected $description = 'Command description';
// /**
// * Execute the console command.
// */
// public function handle()
// {
// //
// }
protected $signature = 'approval:trigger-mails';
protected $description = 'Trigger approval mail manually';
public $pdfPath;
public function handle()
{
$this->info('Approval mail job started');
$records = RequestCharacteristic::whereNull('approver_status1')
->whereNull('approver_status2')
->whereNull('approver_status3')
->get();
if ($records->isEmpty()) {
$this->info('No pending approvals');
return;
}
$grouped = $records->groupBy(function ($item) {
return $item->plant_id . '|' . $item->machine_id . '|' . $item->aufnr . '|' . $item->work_flow_id;
});
$rows = [];
foreach ($grouped as $groupRecords) {
$first = $groupRecords->first();
$approver = CharacteristicApproverMaster::where('plant_id', $first->plant_id)
->where('machine_id', $first->machine_id)
->where('id', $first->characteristic_approver_master_id)
->first();
if (!$approver) {
continue;
}
$characteristics = $groupRecords->map(fn ($r) => [
'work_flow_id' => $r->work_flow_id,
'characteristic_name' => $r->characteristic_name,
'current_value' => $r->current_value,
'update_value' => $r->update_value,
])->toArray();
$level = null;
$mail = null;
$name = null;
$updateData = [];
$now = Carbon::now();
// --- FIRST MAIL ---
if (is_null($first->mail_status)){
$level = 1;
$mail = $approver->mail1;
$name = $approver->name1;
$updateData['mail_status'] = 'Sent';
// $updateData['trigger_at'] = $approver->duration1 > 0
// ? $now->copy()->addMinutes($approver->duration1 * 10)
// : null;
if ($approver->duration1 > 0)
{
$duration = number_format((float)$approver->duration1, 2, '.', '');
[$hours, $minutes] = explode('.', $duration);
$totalMinutes = ((int)$hours * 60) + (int)$minutes;
$updateData['trigger_at'] = $now
->copy()
->addMinutes($totalMinutes)
->startOfMinute();
}
else
{
$updateData['trigger_at'] = null;
}
}
// --- SECOND MAIL ---
elseif (
$first->mail_status == 'Sent' &&
is_null($first->approver_status1) &&
$first->trigger_at &&
\Carbon\Carbon::parse($first->trigger_at)->lte($now)
// $first->trigger_at <= $now
) {
$level = 2;
$mail = $approver->mail2;
$name = $approver->name2;
// $updateData['trigger_at'] = $approver->duration2 > 0
// ? $now->copy()->addMinutes($approver->duration2 * 10)
// : null;
// $updateData['mail_status'] = 'Sent-Mail2';
if ($approver->duration2 > 0) {
$duration = number_format((float)$approver->duration2, 2, '.', '');
[$hours, $minutes] = explode('.', $duration);
$totalMinutes = ((int)$hours * 60) + (int)$minutes;
// IMPORTANT: use NOW, not old trigger
$updateData['trigger_at'] = $now->copy()->addMinutes($totalMinutes);
} else {
$updateData['trigger_at'] = null;
}
$updateData['mail_status'] = 'Sent-Mail2';
}
// --- THIRD MAIL ---
elseif (
$first->mail_status == 'Sent-Mail2' &&
is_null($first->approver_status1) &&
is_null($first->approver_status2) &&
$first->trigger_at &&
// $first->trigger_at <= $now
\Carbon\Carbon::parse($first->trigger_at)->lte($now)
) {
$level = 3;
$mail = $approver->mail3;
$name = $approver->name3;
$updateData['trigger_at'] = null;
$updateData['mail_status'] = 'Sent-Mail3';
}
if (!$level || !$mail) {
continue;
}
$pdfPath = 'uploads/LaserDocs/' . $first->work_flow_id . '.pdf';
Mail::to($mail)->send(
new CharacteristicApprovalMail(
$first,
$name,
$level,
$pdfPath,
$characteristics
)
);
RequestCharacteristic::whereIn('id', $groupRecords->pluck('id'))
->update($updateData);
$rows[] = [
$first->id,
$first->plant_id,
$first->machine_id,
"Level $level",
$mail,
'SENT'
];
}
$this->table(
['ID', 'Plant', 'Machine', 'Level', 'Mail', 'Status'],
$rows
);
$this->info('Approval mail job completed');
}
}

View File

@@ -1,48 +0,0 @@
<?php
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\FromArray;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
class InvoicePendingReasonExport implements FromArray, WithHeadings, WithMapping
{
/**
* @return \Illuminate\Support\Collection
*/
protected array $data;
public function __construct(array $data)
{
$this->data = $data;
}
public function array(): array
{
return $this->data;
}
public function headings(): array
{
return [
'Plant Code',
'Document Number',
'Remark',
'Customer Trade Name',
'Location',
];
}
public function map($row): array
{
return [
$row['plant_id'] ?? '',
$row['document_number'] ?? '',
$row['remark'] ?? '',
$row['customer_trade_name'] ?? '',
$row['location'] ?? '',
];
}
}

View File

@@ -1,73 +0,0 @@
<?php
namespace App\Filament\Exports;
use App\Models\AlertMailRule;
use App\Models\Plant;
use Filament\Actions\Exports\ExportColumn;
use Filament\Actions\Exports\Exporter;
use Filament\Actions\Exports\Models\Export;
class AlertMailRuleExporter extends Exporter
{
protected static ?string $model = AlertMailRule::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('module')
->label('MODULE'),
ExportColumn::make('rule_name')
->label('RULE NAME'),
ExportColumn::make('email')
->label('EMAIL'),
ExportColumn::make('schedule_type')
->label('SCHEDULE TYPE'),
ExportColumn::make('plant')
->label('PLANT CODE')
->formatStateUsing(function ($state) {
// $state is the plant ID from the database
if ($state == 0) {
return 'All Plants';
}
$plant = Plant::find($state);
return $plant ? $plant->code : 'Unknown';
}),
ExportColumn::make('cc_emails')
->label('CC EMAILS'),
ExportColumn::make('invoiceMaster.receiving_plant_name')
->label('RECEIVING PLANT NAME'),
ExportColumn::make('invoiceMaster.transport_name')
->label('TRANSPORT NAME'),
ExportColumn::make('created_at')
->label('CREATED AT'),
ExportColumn::make('created_by')
->label('CREATED BY'),
ExportColumn::make('updated_at')
->label('UPDATED AT'),
ExportColumn::make('deleted_at')
->label('DELETED AT')
->enabledByDefault(false),
];
}
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your alert mail rule export has completed and ' . number_format($export->successful_rows) . ' ' . str('row')->plural($export->successful_rows) . ' exported.';
if ($failedRowsCount = $export->getFailedRowsCount()) {
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;
}
}

View File

@@ -24,27 +24,26 @@ class BlockExporter extends Exporter
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.code')
->label('PLANT CODE'),
ExportColumn::make('plant.name')
->label('PLANT'),
ExportColumn::make('name')
->label('BLOCK NAME'),
->label('NAME'),
ExportColumn::make('created_at')
->label('CREATED AT'),
ExportColumn::make('updated_at')
->label('UPDATED AT')
->enabledByDefault(true),
->label('UPDATED AT'),
ExportColumn::make('deleted_at')
->label('DELETED AT')
->enabledByDefault(false),
->enabledByDefault(false)
->label('DELETED AT'),
];
}
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your block export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your block 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;

View File

@@ -1,77 +0,0 @@
<?php
namespace App\Filament\Exports;
use App\Models\CharacteristicApproverMaster;
use Filament\Actions\Exports\ExportColumn;
use Filament\Actions\Exports\Exporter;
use Filament\Actions\Exports\Models\Export;
class CharacteristicApproverMasterExporter extends Exporter
{
protected static ?string $model = CharacteristicApproverMaster::class;
public static function getColumns(): array
{
static $rowNumber = 0;
return [
// ExportColumn::make('id')
// ->label('ID'),
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('machine.work_center')
->label('WORK CENTER'),
ExportColumn::make('machine_name')
->label('MACHINE NAME'),
ExportColumn::make('characteristic_field')
->label('MASTER CHARACTERISTIC FIELD 1'),
ExportColumn::make('name1')
->label('APPROVER NAME 1'),
ExportColumn::make('mail1')
->label('APPROVER MAIL 1'),
ExportColumn::make('duration1')
->label('DURATION 1'),
ExportColumn::make('name2')
->label('APPROVER NAME 2'),
ExportColumn::make('mail2')
->label('APPROVER MAIL 2'),
ExportColumn::make('duration2')
->label('DURATION 2'),
ExportColumn::make('name3')
->label('APPROVER NAME 3'),
ExportColumn::make('mail3')
->label('APPROVER MAIL 3'),
ExportColumn::make('duration3')
->label('DURATION 3'),
ExportColumn::make('created_at')
->label('CREATED AT'),
ExportColumn::make('created_by')
->label('CREATED BY'),
ExportColumn::make('updated_at')
->label('UPDATED AT'),
ExportColumn::make('updated_by')
->label('UPDATED BY'),
ExportColumn::make('deleted_at')
->enabledByDefault(false)
->label('DELETED AT'),
];
}
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your characteristic approver master export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
if ($failedRowsCount = $export->getFailedRowsCount()) {
$body .= ' '.number_format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to export.';
}
return $body;
}
}

View File

@@ -1,64 +0,0 @@
<?php
namespace App\Filament\Exports;
use App\Models\CharacteristicValue;
use Filament\Actions\Exports\ExportColumn;
use Filament\Actions\Exports\Exporter;
use Filament\Actions\Exports\Models\Export;
class CharacteristicValueExporter extends Exporter
{
protected static ?string $model = CharacteristicValue::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('line.name')
->label('LINE NAME'),
ExportColumn::make('item.code')
->label('ITEM CODE'),
ExportColumn::make('machine.name')
->label('WORK CENTER'),
ExportColumn::make('process_order')
->label('PROCESS ORDER'),
ExportColumn::make('coil_number')
->label('COIL NUMBER'),
ExportColumn::make('status')
->label('STATUS'),
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')
->enabledByDefault(false)
->label('DELETED AT'),
];
}
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your characteristic value export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
if ($failedRowsCount = $export->getFailedRowsCount()) {
$body .= ' '.number_format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to export.';
}
return $body;
}
}

View File

@@ -24,8 +24,8 @@ class CheckPointNameExporter extends Exporter
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.code')
->label('PLANT CODE'),
ExportColumn::make('plant.name')
->label('PLANT'),
ExportColumn::make('name')
->label('CHECK POINT NAME'),
ExportColumn::make('created_at')
@@ -42,10 +42,10 @@ class CheckPointNameExporter extends Exporter
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your check point name export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your check point name 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;

View File

@@ -24,8 +24,8 @@ class CheckPointTimeExporter extends Exporter
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.code')
->label('PLANT CODE'),
ExportColumn::make('plant.name')
->label('PLANT'),
ExportColumn::make('checkPointNames1.name')
->label('CHECK POINT 1'),
ExportColumn::make('checkPointNames2.name')
@@ -50,10 +50,10 @@ class CheckPointTimeExporter extends Exporter
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your check point time export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your check point time 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;

View File

@@ -1,335 +0,0 @@
<?php
namespace App\Filament\Exports;
use App\Models\ClassCharacteristic;
use Filament\Actions\Exports\ExportColumn;
use Filament\Actions\Exports\Exporter;
use Filament\Actions\Exports\Models\Export;
class ClassCharacteristicExporter extends Exporter
{
protected static ?string $model = ClassCharacteristic::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('aufnr')
->label('AUFNR'),
ExportColumn::make('class')
->label('CLASS'),
ExportColumn::make('arbid')
->label('ARBID'),
ExportColumn::make('gamng')
->label('GAMNG'),
ExportColumn::make('lmnga')
->label('LMNGA'),
ExportColumn::make('gernr')
->label('GERNR'),
ExportColumn::make('zz1_cn_bill_ord')
->label('ZZ1 CN BILL ORD'),
ExportColumn::make('zmm_amps')
->label('ZMM AMPSTEXT'),
ExportColumn::make('zmm_brand')
->label('ZMM BRAND'),
ExportColumn::make('zmm_degreeofprotection')
->label('ZMM DEGREEOFPROTECTION'),
ExportColumn::make('zmm_delivery')
->label('ZMM DELIVERY'),
ExportColumn::make('zmm_dir_rot')
->label('ZMM DIR ROT'),
ExportColumn::make('zmm_discharge')
->label('ZMM DISCHARGE'),
ExportColumn::make('zmm_discharge_max')
->label('ZMM DISCHARGE MAX'),
ExportColumn::make('zmm_discharge_min')
->label('ZMM DISCHARGE MIN'),
ExportColumn::make('zmm_duty')
->label('ZMM DUTY'),
ExportColumn::make('zmm_eff_motor')
->label('ZMM EFF MOTOR'),
ExportColumn::make('zmm_eff_pump')
->label('ZMM EFF PUMP'),
ExportColumn::make('zmm_frequency')
->label('ZMM FREQUENCY'),
ExportColumn::make('zmm_head')
->label('ZMM HEAD'),
ExportColumn::make('zmm_heading')
->label('ZMM HEADING'),
ExportColumn::make('zmm_head_max')
->label('ZMM HEAD MAX'),
ExportColumn::make('zmm_head_minimum')
->label('ZMM HEAD MINIMUM'),
ExportColumn::make('zmm_idx_eff_mtr')
->label('ZMM IDX EFF MTR'),
ExportColumn::make('zmm_idx_eff_pump')
->label('ZMM IDX EFF PUMP'),
ExportColumn::make('zmm_kvacode')
->label('ZMM KVACODE'),
ExportColumn::make('zmm_maxambtemp')
->label('ZMM MAXAMBTEMP'),
ExportColumn::make('zmm_mincoolingflow')
->label('ZMM MINCOOLING FLOW'),
ExportColumn::make('zmm_motorseries')
->label('ZMM MOTORSERIES'),
ExportColumn::make('zmm_motor_model')
->label('ZMM MOTOR MODEL'),
ExportColumn::make('zmm_outlet')
->label('ZMM OUTLET'),
ExportColumn::make('zmm_phase')
->label('ZMM PHASE'),
ExportColumn::make('zmm_pressure')
->label('ZMM PRESSURE'),
ExportColumn::make('zmm_pumpflowtype')
->label('ZMM PUMPFLOWTYPE'),
ExportColumn::make('zmm_pumpseries')
->label('ZMM PUMPSERIES'),
ExportColumn::make('zmm_pump_model')
->label('ZMM PUMP MODEL'),
ExportColumn::make('zmm_ratedpower')
->label('ZMM RATEDPOWER'),
ExportColumn::make('zmm_region')
->label('ZMM REGION'),
ExportColumn::make('zmm_servicefactor')
->label('ZMM SERVICEFACTOR'),
ExportColumn::make('zmm_servicefactormaximumamps')
->label('ZMM SERVICEFACTORMAXIMUMAMPS'),
ExportColumn::make('zmm_speed')
->label('ZMM SPEED'),
ExportColumn::make('zmm_suction')
->label('ZMM SUCTION'),
ExportColumn::make('zmm_suctionxdelivery')
->label('ZMM SUCTIONXDELIVERY'),
ExportColumn::make('zmm_supplysource')
->label('ZMM SUPPLYSOURCE'),
ExportColumn::make('zmm_temperature')
->label('ZMM TEMPERATURE'),
ExportColumn::make('zmm_thrustload')
->label('ZMM THRUSTLOAD'),
ExportColumn::make('zmm_volts')
->label('ZMM VOLTS'),
ExportColumn::make('zmm_wire')
->label('ZMM WIRE'),
ExportColumn::make('zmm_package')
->label('ZMM PACKAGE'),
ExportColumn::make('zmm_pvarrayrating')
->label('ZMM PVARRAYRATING'),
ExportColumn::make('zmm_isi')
->label('ZMM ISI'),
ExportColumn::make('zmm_isimotor')
->label('ZMM ISIMOTOR'),
ExportColumn::make('zmm_isipump')
->label('ZMM ISIPUMP'),
ExportColumn::make('zmm_isipumpset')
->label('ZMM ISIPUMPSET'),
ExportColumn::make('zmm_pumpset_model')
->label('ZMM PUMPSET MODEL'),
ExportColumn::make('zmm_stages')
->label('ZMM STAGES'),
ExportColumn::make('zmm_headrange')
->label('ZMM HEADRANGE'),
ExportColumn::make('zmm_overall_efficiency')
->label('ZMM OVERALL EFFICIENCY'),
ExportColumn::make('zmm_connection')
->label('ZMM CONNECTION'),
ExportColumn::make('zmm_min_bore_size')
->label('ZMM MIN BORE SIZE'),
ExportColumn::make('zmm_isireference')
->label('ZMM ISIREFERENCE'),
ExportColumn::make('zmm_category')
->label('ZMM CATEGORY'),
ExportColumn::make('zmm_submergence')
->label('ZMM SUBMERGENCE'),
ExportColumn::make('zmm_capacitorstart')
->label('ZMM CAPACITORSTART'),
ExportColumn::make('zmm_capacitorrun')
->label('ZMM CAPACITORRUN'),
ExportColumn::make('zmm_inch')
->label('ZMM INCH'),
ExportColumn::make('zmm_motor_type')
->label('ZMM MOTOR TYPE'),
ExportColumn::make('zmm_dismantle_direction')
->label('ZMM DISMANTLE DIRECTION'),
ExportColumn::make('zmm_eff_ovrall')
->label('ZMM EFF OVRALL'),
ExportColumn::make('zmm_bodymoc')
->label('ZMM BODYMOC'),
ExportColumn::make('zmm_rotormoc')
->label('ZMM ROTORMOC'),
ExportColumn::make('zmm_dlwl')
->label('ZMM DLWL'),
ExportColumn::make('zmm_inputpower')
->label('ZMM INPUTPOWER'),
ExportColumn::make('zmm_imp_od')
->label('ZMM IMP OD'),
ExportColumn::make('zmm_ambtemp')
->label('ZMM AMBTEMP'),
ExportColumn::make('zmm_de')
->label('ZMM DE'),
ExportColumn::make('zmm_dischargerange')
->label('ZMM DISCHARGERANGE'),
ExportColumn::make('zmm_efficiency_class')
->label('ZMM EFFICIENCY CLASS'),
ExportColumn::make('zmm_framesize')
->label('ZMM FRAMESIZE'),
ExportColumn::make('zmm_impellerdiameter')
->label('ZMM IMPELLERDIAMETER'),
ExportColumn::make('zmm_insulationclass')
->label('ZMM INSULATIONCLASS'),
ExportColumn::make('zmm_maxflow')
->label('ZMM MAXFLOW'),
ExportColumn::make('zmm_minhead')
->label('ZMM MINHEAD'),
ExportColumn::make('zmm_mtrlofconst')
->label('ZMM MTRLOFCONST'),
ExportColumn::make('zmm_nde')
->label('ZMM NDE'),
ExportColumn::make('zmm_powerfactor')
->label('ZMM POWERFACTOR'),
ExportColumn::make('zmm_tagno')
->label('ZMM TANGO'),
ExportColumn::make('zmm_year')
->label('ZMM YEAR'),
ExportColumn::make('zmm_laser_name')
->label('ZMM LASER NAME'),
ExportColumn::make('zmm_beenote')
->label('ZMM BEENOTE'),
ExportColumn::make('zmm_beenumber')
->label('ZMM BEENUMBER'),
ExportColumn::make('zmm_beestar')
->label('ZMM BEESTAR'),
ExportColumn::make('zmm_codeclass')
->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')
->label('ZMM GRWT PSET'),
ExportColumn::make('zmm_grwt_cable')
->label('ZMM GRWT CABLE'),
ExportColumn::make('zmm_grwt_motor')
->label('ZMM GRWT MOTOR'),
ExportColumn::make('zmm_grwt_pf')
->label('ZMM GRWT PF'),
ExportColumn::make('zmm_grwt_pump')
->label('ZMM GRWT PUMP'),
ExportColumn::make('zmm_isivalve')
->label('ZMM ISIVALVE'),
ExportColumn::make('zmm_isi_wc')
->label('ZMM ISI WC'),
ExportColumn::make('zmm_labelperiod')
->label('ZMM LABELPERIOD'),
ExportColumn::make('zmm_length')
->label('ZMM LENGTH'),
ExportColumn::make('zmm_license_cml_no')
->label('ZMM LICENSE CML NO'),
ExportColumn::make('zmm_mfgmonyr')
->label('ZMM MFGMONYR'),
ExportColumn::make('zmm_modelyear')
->label('ZMM MODELYEAR'),
ExportColumn::make('zmm_motoridentification')
->label('ZMM MOTORIDENTIFICATION'),
ExportColumn::make('zmm_newt_pset')
->label('ZMM NEWT PSET'),
ExportColumn::make('zmm_newt_cable')
->label('ZMM NEWT CABLE'),
ExportColumn::make('zmm_newt_motor')
->label('ZMM NEWT MOTOR'),
ExportColumn::make('zmm_newt_pf')
->label('ZMM NEWT PF'),
ExportColumn::make('zmm_newt_pump')
->label('ZMM NEWT PUMP'),
ExportColumn::make('zmm_packtype')
->label('ZMM PACKTYPE'),
ExportColumn::make('zmm_panel')
->label('ZMM PANEL'),
ExportColumn::make('zmm_performance_factor')
->label('ZMM PERFORMANCE FACTOR'),
ExportColumn::make('zmm_pumpidentification')
->label('ZMM PUMPIDENTIFICATION'),
ExportColumn::make('zmm_psettype')
->label('ZMM PSETTYPE'),
ExportColumn::make('zmm_size')
->label('ZMM SIZE'),
ExportColumn::make('zmm_eff_ttl')
->label('ZMM EFF TTL'),
ExportColumn::make('zmm_type')
->label('ZMM TYPE'),
ExportColumn::make('zmm_usp')
->label('ZMM USP'),
ExportColumn::make('mark_status')
->label('MARKED STATUS'),
ExportColumn::make('marked_datetime')
->label('MARKED DATETIME'),
ExportColumn::make('marked_by')
->label('MARKED BY'),
ExportColumn::make('man_marked_status')
->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('pump_marked_status')
->label('PUMP MARKED STATUS'),
ExportColumn::make('motor_pump_pumpset_status')
->label('MOTOR PUMP PUMPSET STATUS'),
ExportColumn::make('part_validation_1')
->label('PART VALIDATION 1'),
ExportColumn::make('part_validation_2')
->label('PART VALIDATION 2'),
ExportColumn::make('samlight_logged_name')
->label('SAMLIGHT LOGGED NAME'),
ExportColumn::make('pending_released_status')
->label('PENDING RELEASED STATUS'),
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')
->label('CREATED BY'),
ExportColumn::make('updated_at')
->label('UPDATED AT')
->enabledByDefault(true),
ExportColumn::make('updated_by')
->label('UPDATED BY')
->enabledByDefault(true),
ExportColumn::make('deleted_at')
->label('DELETED AT')
->enabledByDefault(false),
];
}
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your class characteristic export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
if ($failedRowsCount = $export->getFailedRowsCount()) {
$body .= ' '.number_format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to export.';
}
return $body;
}
}

View File

@@ -17,11 +17,11 @@ class ConfigurationExporter extends Exporter
return [
ExportColumn::make('no')
->label('NO')
->state(function ($record) use (&$rowNumber) {
// Increment and return the row number
return ++$rowNumber;
}),
->label('NO')
->state(function ($record) use (&$rowNumber) {
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.code')
->label('PLANT'),
ExportColumn::make('line.name')
@@ -46,10 +46,10 @@ class ConfigurationExporter extends Exporter
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your configuration export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your configuration 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;

View File

@@ -14,7 +14,6 @@ class DeviceMasterExporter extends Exporter
public static function getColumns(): array
{
static $rowNumber = 0;
return [
ExportColumn::make('no')
->label('NO')
@@ -22,32 +21,32 @@ class DeviceMasterExporter extends Exporter
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.code')
->label('PLANT CODE'),
ExportColumn::make('plant.name')
->label('PLANT'),
ExportColumn::make('name')
->label('DEVICE NAME'),
->label('DEVICE NAME'),
ExportColumn::make('mac_address')
->label('MAC ADDRESS'),
->label('MAC ADDRESS'),
ExportColumn::make('ip_address')
->label('IP ADDRESS'),
->label('IP ADDRESS'),
ExportColumn::make('created_at')
->label('CREATED AT'),
->label('CREATED AT'),
ExportColumn::make('updated_at')
->label('UPDATED AT'),
->label('UPDATED AT'),
ExportColumn::make('deleted_at')
->enabledByDefault(false)
->label('DELETED AT'),
->enabledByDefault(false)
->label('DELETED AT'),
ExportColumn::make('created_by')
->label('CREATED BY'),
->label('CREATED BY'),
];
}
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your device master export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your device 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;

View File

@@ -10,118 +10,116 @@ use Filament\Actions\Exports\Models\Export;
class EbReadingExporter extends Exporter
{
protected static ?string $model = EbReading::class;
public static $rowNumber = 0;
static $rowNumber = 0;
public static function getColumns(): array
{
return [
ExportColumn::make('no')
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('plant.name')
->label('PLANT'),
ExportColumn::make('lcd_segment_check')
->label('LCD SEGMENT CHECK'),
->label('LCD SEGMENT CHECK'),
ExportColumn::make('meter_serial_no')
->label('METER SERIAL NO'),
->label('METER SERIAL NO'),
ExportColumn::make('eb_date_time')
->label('EB DATE TIME'),
->label('EB DATE TIME'),
ExportColumn::make('ph_seq_of_volt')
->label('PH SEQ OF VOLT'),
->label('PH SEQ OF VOLT'),
ExportColumn::make('ph_assoc_conn_check')
->label('PH ASSOC CONN CHECK'),
->label('PH ASSOC CONN CHECK'),
ExportColumn::make('instantaneous_ph_volt')
->label('INSTANTANEOUS PH VOLT'),
->label('INSTANTANEOUS PH VOLT'),
ExportColumn::make('instantaneous_curr')
->label('INSTANTANEOUS CURR'),
->label('INSTANTANEOUS CURR'),
ExportColumn::make('instantaneous_freq')
->label('INSTANTANEOUS FREQ'),
->label('INSTANTANEOUS FREQ'),
ExportColumn::make('instantaneous_kw_with_sign')
->label('INSTANTANEOUS KW WITH SIGN'),
->label('INSTANTANEOUS KW WITH SIGN'),
ExportColumn::make('instantaneous_kva')
->label('INSTANTANEOUS KVA'),
->label('INSTANTANEOUS KVA'),
ExportColumn::make('instantaneous_kv_ar')
->label('INSTANTANEOUS KV AR'),
->label('INSTANTANEOUS KV AR'),
ExportColumn::make('instantaneous_pf_with_sign')
->label('INSTANTANEOUS PF WITH SIGN'),
->label('INSTANTANEOUS PF WITH SIGN'),
ExportColumn::make('rd_with_elapsed_time_kva')
->label('RD WITH ELAPSED TIME KVA'),
->label('RD WITH ELAPSED TIME KVA'),
ExportColumn::make('cum_active_import_energy')
->label('CUM ACTIVE IMPORT ENERGY'),
->label('CUM ACTIVE IMPORT ENERGY'),
ExportColumn::make('tod1_active_energy_6_9')
->label('TOD1 ACTIVE ENERGY 6-9'),
->label('TOD1 ACTIVE ENERGY 6-9'),
ExportColumn::make('tod2_active_energy_18_21')
->label('TOD2 ACTIVE ENERGY 18-21'),
->label('TOD2 ACTIVE ENERGY 18-21'),
ExportColumn::make('tod3_active_energy_21_22')
->label('TOD3 ACTIVE ENERGY 21-22'),
->label('TOD3 ACTIVE ENERGY 21-22'),
ExportColumn::make('tod4_active_energy_5_6_9_18')
->label('TOD4 ACTIVE ENERGY 5-6-9-18'),
->label('TOD4 ACTIVE ENERGY 5-6-9-18'),
ExportColumn::make('tod5_active_energy_22_5')
->label('TOD5 ACTIVE ENERGY 22-5'),
->label('TOD5 ACTIVE ENERGY 22-5'),
ExportColumn::make('cum_reac_lag_energy')
->label('CUM REAC LAG ENERGY'),
->label('CUM REAC LAG ENERGY'),
ExportColumn::make('cum_reac_lead_energy')
->label('CUM REAC LEAD ENERGY'),
->label('CUM REAC LEAD ENERGY'),
ExportColumn::make('cum_appar_energy')
->label('CUM APPAR ENERGY'),
->label('CUM APPAR ENERGY'),
ExportColumn::make('tod1_appar_energy_6_9')
->label('TOD1 APPAR ENERGY 6-9'),
->label('TOD1 APPAR ENERGY 6-9'),
ExportColumn::make('tod2_appar_energy_18_21')
->label('TOD2 APPAR ENERGY 18-21'),
->label('TOD2 APPAR ENERGY 18-21'),
ExportColumn::make('tod3_appar_energy_21_22')
->label('TOD3 APPAR ENERGY 21-22'),
->label('TOD3 APPAR ENERGY 21-22'),
ExportColumn::make('tod4_appar_energy_5_6_9_18')
->label('TOD4 APPAR ENERGY 5-6-9-18'),
->label('TOD4 APPAR ENERGY 5-6-9-18'),
ExportColumn::make('tod5_appar_energy_22_5')
->label('TOD5 APPAR ENERGY 22-5'),
->label('TOD5 APPAR ENERGY 22-5'),
ExportColumn::make('avg_pow_factor')
->label('AVG POW FACTOR'),
->label('AVG POW FACTOR'),
ExportColumn::make('avg_freq_15min_last_ip')
->label('AVG FREQ 15MIN LAST IP'),
->label('AVG FREQ 15MIN LAST IP'),
ExportColumn::make('net_kv_arh_high')
->label('NET KV ARH HIGH'),
->label('NET KV ARH HIGH'),
ExportColumn::make('net_kv_arh_low')
->label('NET KV ARH LOW'),
->label('NET KV ARH LOW'),
ExportColumn::make('cum_md_kva')
->label('CUM MD KVA'),
->label('CUM MD KVA'),
ExportColumn::make('present_md_kva')
->label('PRESENT MD KVA'),
->label('PRESENT MD KVA'),
ExportColumn::make('present_md_kva_date_time')
->label('PRESENT MD KVA DATE TIME'),
->label('PRESENT MD KVA DATE TIME'),
ExportColumn::make('tod1_md_kva_6_9')
->label('TOD1 MD KVA 6-9'),
->label('TOD1 MD KVA 6-9'),
ExportColumn::make('tod2_md_kva_18_21')
->label('TOD2 MD KVA 18-21'),
->label('TOD2 MD KVA 18-21'),
ExportColumn::make('tod3_md_kva_21_22')
->label('TOD3 MD KVA 21-22'),
->label('TOD3 MD KVA 21-22'),
ExportColumn::make('tod4_md_kva_5_6_9_18')
->label('TOD4 MD KVA 5-6-9-18'),
->label('TOD4 MD KVA 5-6-9-18'),
ExportColumn::make('tod5_md_kva_22_5')
->label('TOD5 MD KVA 22-5'),
->label('TOD5 MD KVA 22-5'),
ExportColumn::make('total_pow_off_hours')
->label('TOTAL POW OFF HOURS'),
->label('TOTAL POW OFF HOURS'),
ExportColumn::make('programming_count')
->label('PROGRAMMING COUNT'),
->label('PROGRAMMING COUNT'),
ExportColumn::make('last_occ_res_event_type')
->label('LAST OCC RES EVENT TYPE'),
->label('LAST OCC RES EVENT TYPE'),
ExportColumn::make('last_occ_res_event_date_time')
->label('LAST OCC RES EVENT DATE TIME'),
->label('LAST OCC RES EVENT DATE TIME'),
ExportColumn::make('tamper_count')
->label('TAMPER COUNT'),
->label('TAMPER COUNT'),
ExportColumn::make('reset_count')
->label('RESET COUNT'),
->label('RESET COUNT'),
ExportColumn::make('last_md_reset_date_time')
->label('LAST MD RESET DATE TIME'),
->label('LAST MD RESET DATE TIME'),
ExportColumn::make('electrician_sign')
->label('ELECTRICIAN SIGN'),
->label('ELECTRICIAN SIGN'),
ExportColumn::make('created_at')
->label('CREATED AT'),
->label('CREATED AT'),
ExportColumn::make('updated_at')
->label('UPDATED AT'),
->label('UPDATED AT'),
ExportColumn::make('deleted_at')
->enabledByDefault(false),
ExportColumn::make('updated_by')
@@ -131,10 +129,10 @@ class EbReadingExporter extends Exporter
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your eb reading export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your eb reading 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;

View File

@@ -14,60 +14,59 @@ class EquipmentMasterExporter extends Exporter
public static function getColumns(): array
{
static $rowNumber = 0;
return [
ExportColumn::make('no')
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('plant.name')
->label('PLANT'),
ExportColumn::make('machine.name')
->label('MACHINE NAME'),
->label('MACHINE NAME'),
ExportColumn::make('name')
->label('NAME'),
->label('NAME'),
ExportColumn::make('description')
->label('DESCRIPTION'),
->label('DESCRIPTION'),
ExportColumn::make('make')
->label('MAKE'),
->label('MAKE'),
ExportColumn::make('model')
->label('MODEL'),
->label('MODEL'),
ExportColumn::make('equipment_number')
->label('EQUIPMENT NUMBER'),
->label('EQUIPMENT NUMBER'),
ExportColumn::make('instrument_serial_number')
->label('INSTRUMENT SERIAL NUMBER'),
->label('INSTRUMENT SERIAL NUMBER'),
ExportColumn::make('calibrated_on')
->label('CALIBRATED ON'),
->label('CALIBRATED ON'),
ExportColumn::make('frequency')
->label('FREQUENCY'),
->label('FREQUENCY'),
ExportColumn::make('next_calibration_date')
->label('NEXT CALIBRATION DATE'),
->label('NEXT CALIBRATION DATE'),
ExportColumn::make('calibrated_by')
->label('CALIBRATED BY'),
->label('CALIBRATED BY'),
ExportColumn::make('calibration_certificate')
->label('CALIBRATION CERTIFICATE'),
->label('CALIBRATION CERTIFICATE'),
ExportColumn::make('created_at')
->label('CREATED AT'),
->label('CREATED AT'),
ExportColumn::make('updated_at')
->label('UPDATED AT'),
->label('UPDATED AT'),
ExportColumn::make('created_by')
->label('CREATED BY'),
->label('CREATED BY'),
ExportColumn::make('updated_by')
->label('UPDATED BY'),
->label('UPDATED BY'),
ExportColumn::make('deleted_at')
->label('DELETED AT')
->enabledByDefault(false),
->label('DELETED AT')
->enabledByDefault(false),
];
}
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your equipment master export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your equipment 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;

View File

@@ -14,7 +14,6 @@ class GrMasterExporter extends Exporter
public static function getColumns(): array
{
static $rowNumber = 0;
return [
ExportColumn::make('no')
->label('NO')
@@ -22,36 +21,36 @@ class GrMasterExporter extends Exporter
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.code')
->label('PLANT CODE'),
ExportColumn::make('plant.name')
->label('PLANT'),
ExportColumn::make('item.code')
->label('ITEM CODE'),
->label('ITEM'),
ExportColumn::make('serial_number')
->label('SERIAL NUMBER'),
->label('SERIAL NUMBER'),
ExportColumn::make('gr_number')
->label('GR NUMBER'),
->label('GR NUMBER'),
ExportColumn::make('status')
->label('STATUS'),
->label('STATUS'),
ExportColumn::make('created_at')
->label('CREATED AT'),
->label('CREATED AT'),
ExportColumn::make('updated_at')
->label('UPDATED AT'),
->label('UPDATED AT'),
ExportColumn::make('created_by')
->label('CREATED BY'),
->label('CREATED BY'),
ExportColumn::make('updated_by')
->label('UPDATED BY'),
->label('UPDATED BY'),
ExportColumn::make('deleted_at')
->label('DELETED AT')
->enabledByDefault(false),
->label('DELETED AT')
->enabledByDefault(false),
];
}
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your gr master export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your gr 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;

View File

@@ -24,8 +24,8 @@ class GuardNameExporter extends Exporter
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.code')
->label('PLANT CODE'),
ExportColumn::make('plant.name')
->label('PLANT'),
ExportColumn::make('name')
->label('GUARD NAME'),
ExportColumn::make('identification1')
@@ -46,10 +46,10 @@ class GuardNameExporter extends Exporter
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your guard name export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your guard name 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;

View File

@@ -24,8 +24,8 @@ class GuardPatrolEntryExporter extends Exporter
}),
// ExportColumn::make('id')
// ->label('ID'),
ExportColumn::make('plant.code')
->label('PLANT CODE'),
ExportColumn::make('plant.name')
->label('PLANT'),
ExportColumn::make('guardNames.name')
->label('GUARD NAME'),
ExportColumn::make('checkPointNames.name')
@@ -54,10 +54,10 @@ class GuardPatrolEntryExporter extends Exporter
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your guard patrol entry export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your guard patrol entry 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;

View File

@@ -1,92 +0,0 @@
<?php
namespace App\Filament\Exports;
use App\Models\InvoiceInTransit;
use Filament\Actions\Exports\ExportColumn;
use Filament\Actions\Exports\Exporter;
use Filament\Actions\Exports\Models\Export;
class InvoiceInTransitExporter extends Exporter
{
protected static ?string $model = InvoiceInTransit::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'),
ExportColumn::make('receiving_plant')
->label('RECEIVING PLANT'),
ExportColumn::make('receiving_plant_name')
->label('RECEIVING PLANT NAME'),
ExportColumn::make('invoice_number')
->label('INVOICE NUMBER'),
ExportColumn::make('invoice_date')
->label('INVOICE DATE'),
ExportColumn::make('item_code')
->label('ITEM CODE'),
ExportColumn::make('description')
->label('DESCRIPTION'),
ExportColumn::make('quantity')
->label('QUANTITY'),
ExportColumn::make('transport_name')
->label('TRANSPORT NAME'),
ExportColumn::make('lr_bl_aw_number')
->label('LR_BL_AW NUMBER'),
ExportColumn::make('lr_bl_aw_date')
->label('LR_BL_AW DATE'),
ExportColumn::make('pending_days')
->label('PENDING DAYS'),
ExportColumn::make('obd_number')
->label('OBD NUMBER'),
ExportColumn::make('obd_date')
->label('OBD DATE'),
ExportColumn::make('shipment_weight')
->label('SHIPMENT WEIGHT'),
ExportColumn::make('unit_price')
->label('UNIT PRICE'),
ExportColumn::make('net_value')
->label('NET VALUE'),
ExportColumn::make('total_item_amount')
->label('TOTAL ITEM AMOUNT'),
ExportColumn::make('tax_amount')
->label('TAX AMOUNT'),
ExportColumn::make('transport_mode')
->label('TRANSPORT MODE'),
ExportColumn::make('vehicle_number')
->label('VEHICLE NUMBER'),
ExportColumn::make('e_waybill_number')
->label('E_WAYBILL NUMBER'),
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 invoice in transit export has completed and ' . number_format($export->successful_rows) . ' ' . str('row')->plural($export->successful_rows) . ' exported.';
if ($failedRowsCount = $export->getFailedRowsCount()) {
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;
}
}

View File

@@ -1,57 +0,0 @@
<?php
namespace App\Filament\Exports;
use App\Models\InvoiceMaster;
use Filament\Actions\Exports\ExportColumn;
use Filament\Actions\Exports\Exporter;
use Filament\Actions\Exports\Models\Export;
class InvoiceMasterExporter extends Exporter
{
protected static ?string $model = InvoiceMaster::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('receiving_plant')
->label('Receiving Plant'),
ExportColumn::make('receiving_plant_name')
->label('Receiving Plant Name'),
ExportColumn::make('transit_days')
->label('Transit Days'),
ExportColumn::make('transport_name')
->label('Transport Name'),
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 invoice master export has completed and ' . number_format($export->successful_rows) . ' ' . str('row')->plural($export->successful_rows) . ' exported.';
if ($failedRowsCount = $export->getFailedRowsCount()) {
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;
}
}

View File

@@ -24,16 +24,14 @@ class InvoiceValidationExporter extends Exporter
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.code')
->label('PLANT CODE'),
ExportColumn::make('plant.name')
->label('PLANT'),
ExportColumn::make('invoice_number')
->label('INVOICE NUMBER'),
ExportColumn::make('serial_number')
->label('SERIAL NUMBER'),
ExportColumn::make('stickerMaster.item.code')
->label('ITEM CODE'),
ExportColumn::make('stickerMaster.item.description')
->label('ITEM DESCRIPTION'),
ExportColumn::make('motor_scanned_status')
->label('MOTOR SCANNED STATUS'),
ExportColumn::make('pump_scanned_status')
@@ -60,23 +58,23 @@ class InvoiceValidationExporter extends Exporter
->label('OPERATOR ID'),
ExportColumn::make('created_at')
->label('CREATED AT'),
// ->dateTimeFormat('d-m-Y H:i:s'),
//->dateTimeFormat('d-m-Y H:i:s'),
ExportColumn::make('updated_at')
->label('UPDATED AT'),
// ->dateTimeFormat('d-m-Y H:i:s'),
//->dateTimeFormat('d-m-Y H:i:s'),
ExportColumn::make('deleted_at')
->enabledByDefault(false)
->label('DELETED AT'),
// ->dateTimeFormat('d-m-Y H:i:s'),
//->dateTimeFormat('d-m-Y H:i:s'),
];
}
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your invoice validation export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your invoice validation 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;

View File

@@ -24,8 +24,8 @@ class ItemExporter extends Exporter
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.code')
->label('PLANT CODE'),
ExportColumn::make('plant.name')
->label('PLANT'),
ExportColumn::make('category')
->label('CATEGORY'),
ExportColumn::make('code')

View File

@@ -24,12 +24,12 @@ class LineExporter extends Exporter
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.code')
->label('PLANT CODE'),
ExportColumn::make('plant.name')
->label('PLANT'),
ExportColumn::make('name')
->label('LINE NAME'),
->label('NAME'),
ExportColumn::make('type')
->label('LINE TYPE'),
->label('TYPE'),
ExportColumn::make('no_of_operation')
->label('NO OF OPERATION'),
ExportColumn::make('workGroup1.name')
@@ -84,10 +84,10 @@ class LineExporter extends Exporter
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your line export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your line 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;

View File

@@ -22,12 +22,12 @@ class MachineExporter extends Exporter
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.code')
->label('PLANT CODE'),
ExportColumn::make('plant.name')
->label('PLANT'),
ExportColumn::make('line.name')
->label('LINE NAME'),
->label('LINE'),
ExportColumn::make('name')
->label('MACHINE NAME'),
->label('MACHINE'),
ExportColumn::make('work_center')
->label('WORK CENTER'),
ExportColumn::make('workGroupMaster.name')
@@ -44,10 +44,10 @@ class MachineExporter extends Exporter
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your machine export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your machine 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;

View File

@@ -14,40 +14,39 @@ class MfmMeterExporter extends Exporter
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'),
->label('NO')
->state(function ($record) use (&$rowNumber) {
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.name')
->label('PLANT'),
ExportColumn::make('device.name')
->label('DEVICE NAME'),
->label('DEVICE NAME'),
ExportColumn::make('sequence')
->label('SEQUENCE'),
->label('SEQUENCE'),
ExportColumn::make('name')
->label('METER NAME'),
->label('NAME'),
ExportColumn::make('created_at')
->label('CREATED AT'),
->label('CREATED AT'),
ExportColumn::make('updated_at')
->label('UPDATED AT'),
->label('UPDATED AT'),
ExportColumn::make('deleted_at')
->label('DELETED AT')
->enabledByDefault(false),
->label('DELETED AT')
->enabledByDefault(false),
ExportColumn::make('created_by')
->label('CREATED BY'),
->label('CREATED BY'),
];
}
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your mfm meter export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your mfm meter 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;

View File

@@ -14,49 +14,48 @@ class MfmParameterExporter extends Exporter
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'),
->label('NO')
->state(function ($record) use (&$rowNumber) {
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.name')
->label('PLANT'),
ExportColumn::make('deviceName.name')
->label('Device Name'),
->label('Device Name'),
ExportColumn::make('name')
->label('PARAMETER NAME'),
->label('NAME'),
ExportColumn::make('mfmMeter.name')
->label('MFM METER'),
->label('MFM METER'),
ExportColumn::make('register_id')
->label('REGISTER ID'),
->label('REGISTER ID'),
ExportColumn::make('identifier')
->label('IDENTIFIER'),
->label('IDENTIFIER'),
ExportColumn::make('byte_to_convert')
->label('BYTE TO CONVERT'),
->label('BYTE TO CONVERT'),
ExportColumn::make('type_to_convert')
->label('TYPE TO CONVERT'),
->label('TYPE TO CONVERT'),
ExportColumn::make('decimal_to_display')
->label('DECIMAL TO DISPLAY'),
->label('DECIMAL TO DISPLAY'),
ExportColumn::make('created_at')
->label('CREATED AT'),
->label('CREATED AT'),
ExportColumn::make('updated_at')
->label('UPDATED AT'),
->label('UPDATED AT'),
ExportColumn::make('deleted_at')
->label('DELETED AT')
->enabledByDefault(false),
->label('DELETED AT')
->enabledByDefault(false),
];
}
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your mfm parameter export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your mfm parameter 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;

View File

@@ -17,13 +17,13 @@ class MotorTestingMasterExporter extends Exporter
return [
ExportColumn::make('no')
->label('NO')
->state(function ($record) use (&$rowNumber) {
// Increment and return the row number
return ++$rowNumber;
}),
->label('NO')
->state(function ($record) use (&$rowNumber) {
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.code')
->label('PLANT CODE'),
->label('PLANT'),
ExportColumn::make('item.category')
->label('CATEGORY'),
ExportColumn::make('item.code')
@@ -106,10 +106,10 @@ class MotorTestingMasterExporter extends Exporter
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your motor testing master export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your motor testing 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;

View File

@@ -1,71 +0,0 @@
<?php
namespace App\Filament\Exports;
use App\Models\ProductCharacteristicsMaster;
use Filament\Actions\Exports\ExportColumn;
use Filament\Actions\Exports\Exporter;
use Filament\Actions\Exports\Models\Export;
class ProductCharacteristicsMasterExporter extends Exporter
{
protected static ?string $model = ProductCharacteristicsMaster::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('line.name')
->label('LINE NAME'), // machine.workGroupMaster.name
ExportColumn::make('machine.workGroupMaster.name')
->label('WORK GROUP MASTER'),
ExportColumn::make('machine.work_center')
->label('WORK CENTER'),
ExportColumn::make('characteristics_type')
->label('CHARACTERISTICS TYPE'),
ExportColumn::make('name')
->label('CHARACTERISTICS NAME'),
ExportColumn::make('inspection_type')
->label('INSPECTION TYPE'),
ExportColumn::make('lower')
->label('LOWER'),
ExportColumn::make('middle')
->label('MIDDLE'),
ExportColumn::make('upper')
->label('UPPER'),
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 product characteristics master export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
if ($failedRowsCount = $export->getFailedRowsCount()) {
$body .= ' '.number_format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to export.';
}
return $body;
}
}

View File

@@ -37,13 +37,13 @@ class ProductionLineStopExporter extends Exporter
ExportColumn::make('stop_min')
->label('STOP MINUTE'),
ExportColumn::make('line.name')
->label('LINE NAME'),
->label('LINE'),
ExportColumn::make('shift.block.name')
->label('BLOCK NAME'),
->label('BLOCK'),
ExportColumn::make('shift.name')
->label('SHIFT NAME'),
ExportColumn::make('plant.code')
->label('PLANT CODE'),
->label('SHIFT'),
ExportColumn::make('plant.name')
->label('PLANT'),
ExportColumn::make('operator_id')
->label('OPERATOR ID'),
ExportColumn::make('created_at')
@@ -58,10 +58,10 @@ class ProductionLineStopExporter extends Exporter
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your production line stop export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your production line stop 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;

View File

@@ -29,13 +29,13 @@ class ProductionPlanExporter extends Exporter
ExportColumn::make('production_quantity')
->label('PRODUCTION QUANTITY'),
ExportColumn::make('line.name')
->label('LINE NAME'),
->label('LINE'),
ExportColumn::make('shift.block.name')
->label('BLOCK NAME'),
->label('BLOCK'),
ExportColumn::make('shift.name')
->label('SHIFT NAME'),
ExportColumn::make('plant.code')
->label('PLANT CODE'),
->label('SHIFT'),
ExportColumn::make('plant.name')
->label('PLANT'),
ExportColumn::make('operator_id')
->label('OPERATOR ID'),
ExportColumn::make('created_at')
@@ -50,10 +50,10 @@ class ProductionPlanExporter extends Exporter
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your production plan export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your production plan 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;

View File

@@ -33,13 +33,13 @@ class ProductionQuantityExporter extends Exporter
ExportColumn::make('item.uom')
->label('UNIT OF MEASURE'),
ExportColumn::make('line.name')
->label('LINE NAME'),
->label('LINE'),
ExportColumn::make('shift.block.name')
->label('BLOCK NAME'),
->label('BLOCK'),
ExportColumn::make('shift.name')
->label('SHIFT NAME'),
ExportColumn::make('plant.code')
->label('PLANT CODE'),
->label('SHIFT'),
ExportColumn::make('plant.name')
->label('PLANT'),
ExportColumn::make('sap_msg_status')
->label('SAP MESSAGE STATUS'),
ExportColumn::make('sap_msg_description')
@@ -58,10 +58,10 @@ class ProductionQuantityExporter extends Exporter
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your production quantity export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your production quantity 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;

View File

@@ -24,10 +24,10 @@ class QualityValidationExporter extends Exporter
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.code')
->label('PLANT CODE'),
ExportColumn::make('plant.name')
->label('PLANT'),
ExportColumn::make('line.name')
->label('LINE NAME'),
->label('LINE'),
ExportColumn::make('production_order')
->label('PRODUCTION ORDER'),
ExportColumn::make('serial_number')
@@ -54,14 +54,14 @@ class QualityValidationExporter extends Exporter
->label('NAME PLATE PUMP'),
ExportColumn::make('name_plate_pumpset')
->label('NAME PLATE PUMPSET'),
ExportColumn::make('warranty_card')
->label('WARRANTY CARD'),
ExportColumn::make('tube_sticker_motor')
->label('TUBE STICKER MOTOR'),
ExportColumn::make('tube_sticker_pump')
->label('TUBE STICKER PUMP'),
ExportColumn::make('tube_sticker_pumpset')
->label('TUBE STICKER PUMPSET'),
ExportColumn::make('warranty_card')
->label('WARRANTY CARD'),
ExportColumn::make('part_validation1')
->label('PART VALIDATION 1'),
ExportColumn::make('part_validation2')
@@ -90,10 +90,10 @@ class QualityValidationExporter extends Exporter
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your quality validation export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your quality validation 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;

View File

@@ -1,99 +0,0 @@
<?php
namespace App\Filament\Exports;
use App\Models\RequestCharacteristic;
use Filament\Actions\Exports\ExportColumn;
use Filament\Actions\Exports\Exporter;
use Filament\Actions\Exports\Models\Export;
class RequestCharacteristicExporter extends Exporter
{
protected static ?string $model = RequestCharacteristic::class;
public static function getColumns(): array
{
static $rowNumber = 0;
return [
// ExportColumn::make('id')
// ->label('ID'),
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('machine.work_center')
->label('WORK CENTER'),
ExportColumn::make('work_flow_id')
->label('WORK FLOW ID'),
ExportColumn::make('item.code')
->label('ITEM CODE'),
ExportColumn::make('aufnr')
->label('AUFNR'),
ExportColumn::make('characteristicApproverMaster.machine_name')
->label('MACHINE NAME'),
ExportColumn::make('characteristicApproverMaster.characteristic_field')
->label('MASTER CHARACTERISTIC FIELD'),
ExportColumn::make('characteristic_name')
->label('CHARACTERISTIC NAME'),
ExportColumn::make('current_value')
->label('CURRENT VALUE'),
ExportColumn::make('update_value')
->label('UPDATE VALUE'),
ExportColumn::make('characteristicApproverMaster.name1')
->label('APPROVER NAME 1'),
ExportColumn::make('approver_status1')
->label('APPROVER STATUS 1'),
ExportColumn::make('approver_remark1')
->label('APPROVER REMARK 1'),
ExportColumn::make('approved1_at')
->label('APPROVED AT 1'),
ExportColumn::make('characteristicApproverMaster.name2')
->label('APPROVER NAME 2'),
ExportColumn::make('approver_status2')
->label('APPROVER STATUS 2'),
ExportColumn::make('approver_remark2')
->label('APPROVER REMARK 2'),
ExportColumn::make('approved2_at')
->label('APPROVED AT 2'),
ExportColumn::make('characteristicApproverMaster.name3')
->label('APPROVER NAME 3'),
ExportColumn::make('approver_status3')
->label('APPROVER STATUS 3'),
ExportColumn::make('approver_remark3')
->label('APPROVER REMARK 3'),
ExportColumn::make('approved3_at')
->label('APPROVED AT 1'),
ExportColumn::make('mail_status')
->label('MAIL STATUS'),
ExportColumn::make('trigger_at')
->label('TRIGGERED AT'),
ExportColumn::make('created_at')
->label('CREATED AT'),
ExportColumn::make('created_by')
->label('CREATED BY'),
ExportColumn::make('updated_at')
->label('UPDATED AT'),
ExportColumn::make('updated_by')
->label('UPDATED BY'),
ExportColumn::make('deleted_at')
->enabledByDefault(false)
->label('DELETED AT'),
];
}
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your request characteristic export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
if ($failedRowsCount = $export->getFailedRowsCount()) {
$body .= ' '.number_format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to export.';
}
return $body;
}
}

View File

@@ -14,16 +14,15 @@ class SerialValidationExporter extends Exporter
public static function getColumns(): array
{
static $rowNumber = 0;
return [
ExportColumn::make('no')
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('plant.name')
->label('PLANT'),
ExportColumn::make('invoice_number')
->label('INVOICE NUMBER'),
ExportColumn::make('serial_number')
@@ -56,10 +55,10 @@ class SerialValidationExporter extends Exporter
->label('OPERATOR ID'),
ExportColumn::make('created_at')
->label('CREATED AT'),
// ->dateTimeFormat('d-m-Y H:i:s'),
//->dateTimeFormat('d-m-Y H:i:s'),
ExportColumn::make('updated_at')
->label('UPDATED AT'),
// ->dateTimeFormat('d-m-Y H:i:s'),
//->dateTimeFormat('d-m-Y H:i:s'),
ExportColumn::make('deleted_at')
->enabledByDefault(false)
->label('DELETED AT'),
@@ -68,10 +67,10 @@ class SerialValidationExporter extends Exporter
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your serial validation export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your serial validation 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;

View File

@@ -25,11 +25,11 @@ class ShiftExporter extends Exporter
return ++$rowNumber;
}),
ExportColumn::make('block.name')
->label('BLOCK NAME'),
ExportColumn::make('plant.code')
->label('PLANT CODE'),
->label('BLOCK'),
ExportColumn::make('plant.name')
->label('PLANT'),
ExportColumn::make('name')
->label('SHIFT NAME'),
->label('NAME'),
ExportColumn::make('start_time')
->label('START TIME'),
ExportColumn::make('duration')
@@ -50,10 +50,10 @@ class ShiftExporter extends Exporter
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your shift export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your shift 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;

View File

@@ -24,8 +24,8 @@ class StickerMasterExporter extends Exporter
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.code')
->label('PLANT CODE'),
ExportColumn::make('plant.name')
->label('PLANT NAME'),
ExportColumn::make('item.code')
->label('ITEM CODE'),
ExportColumn::make('serial_number_motor')
@@ -88,10 +88,10 @@ class StickerMasterExporter extends Exporter
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your sticker master export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your sticker 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;

View File

@@ -24,18 +24,18 @@ class TestingPanelReadingExporter extends Exporter
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.code')
->label('PLANT CODE'),
ExportColumn::make('plant.name')
->label('PLANT'),
ExportColumn::make('line.name')
->label('LINE NAME'),
->label('LINE'),
ExportColumn::make('machine.name')
->label('MACHINE NAME'),
->label('MACHINE'),
ExportColumn::make('motorTestingMaster.item.code')
->label('ITEM CODE'),
ExportColumn::make('motorTestingMaster.item.description')
->label('MODEL DESCRIPTION'),
->label('MODEL'),
ExportColumn::make('output')
->label('OUTPUT NAME'),
->label('OUTPUT'),
ExportColumn::make('serial_number')
->label('SERIAL NUMBER'),
ExportColumn::make('winded_serial_number')
@@ -125,7 +125,7 @@ class TestingPanelReadingExporter extends Exporter
ExportColumn::make('rework_count')
->label('REWORK COUNT'),
ExportColumn::make('update_count')
->label('UPDATED COUNT'),
->label('UPDATE COUNT'),
ExportColumn::make('output_flag')
->label('OUTPUT FLAG'),
ExportColumn::make('tested_by')
@@ -146,10 +146,10 @@ class TestingPanelReadingExporter extends Exporter
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your testing panel reading export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your testing panel reading 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;

View File

@@ -24,8 +24,8 @@ class WeightValidationExporter extends Exporter
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.code')
->label('PLANT CODE'),
ExportColumn::make('plant.name')
->label('PLANT'),
ExportColumn::make('item.code')
->label('ITEM CODE'),
ExportColumn::make('obd_number')
@@ -58,10 +58,10 @@ class WeightValidationExporter extends Exporter
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your weight validation export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your weight validation 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;

View File

@@ -14,7 +14,6 @@ class WorkGroupMasterExporter extends Exporter
public static function getColumns(): array
{
static $rowNumber = 0;
return [
ExportColumn::make('no')
->label('NO')
@@ -22,32 +21,32 @@ class WorkGroupMasterExporter extends Exporter
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.code')
->label('PLANT CODE'),
ExportColumn::make('plant.name')
->label('PLANT'),
ExportColumn::make('name')
->label('WORK GROUP NAME'),
->label('NAME'),
ExportColumn::make('description')
->label('WORK GROUP DESCRIPTION'),
->label('DESCRIPTION'),
ExportColumn::make('operation_number')
->label('OPERATION NUMBER'),
->label('OPERATION NUMBER'),
ExportColumn::make('created_by')
->label('CREATED BY'),
->label('CREATED BY'),
ExportColumn::make('created_at')
->label('CREATED AT'),
->label('CREATED AT'),
ExportColumn::make('updated_at')
->label('UPDATED AT'),
->label('UPDATED AT'),
ExportColumn::make('deleted_at')
->label('DELETED AT')
->enabledByDefault(false),
->label('DELETED AT')
->enabledByDefault(false),
];
}
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your work group master export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your work group 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;

View File

@@ -1,141 +0,0 @@
<?php
namespace App\Filament\Imports;
use App\Models\AlertMailRule;
use App\Models\Plant;
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 AlertMailRuleImporter extends Importer
{
protected static ?string $model = AlertMailRule::class;
public static function getColumns(): array
{
return [
ImportColumn::make('module')
->requiredMapping()
->exampleHeader('Module')
->example('ProductionQuantities/InvoiceValidation/QualityValidation/InvoiceDataReport/InvoiceTransit')
->label('Module')
->rules(['required']),
ImportColumn::make('rule_name')
->requiredMapping()
->exampleHeader('Rule Name')
->example('ProductionMail/InvoiceMail/QualityMail/InvoiceDataMail/InvoiceTransitMail')
->label('Rule Name')
->rules(['required']),
ImportColumn::make('email')
->requiredMapping()
->exampleHeader('Email')
->example('admin@cripumps.com,ranjith.bala@cripumps.com')
->label('Email')
->rules(['required']),
ImportColumn::make('schedule_type')
->exampleHeader('Schedule Type')
->example('Daily/Live/Hourly')
->label('Schedule Type'),
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('Plant Code')
->example('1000 or All Plants')
->label('Plant Code')
->rules(['required']),
ImportColumn::make('cc_emails')
->exampleHeader('CC Email')
->example('admin@cripumps.com,ranjith.bala@cripumps.com')
->label('CC Email')
->rules(['nullable', 'string']),
//->rules(['cc_emails']),
// ImportColumn::make('invoiceMaster')
// ->relationship(),
ImportColumn::make('receiving_plant_name')
->exampleHeader('Receiving Plant Name')
->example('BANGALORE')
->label('Receiving Plant Name')
->requiredMapping(),
ImportColumn::make('transporter_name')
->exampleHeader('Transporter Name')
->example('SAFEXPRESS PRIVATE LIMITED')
->label('Transporter Name')
->requiredMapping(),
];
}
public function resolveRecord(): ?AlertMailRule
{
$warnMsg = [];
$user = Filament::auth()->user();
$operatorName = $user->name;
if (strtolower($this->data['plant']) == 'all plants') {
$this->data['plant'] = 0;
} else {
$plant = Plant::where('code', $this->data['plant'])->first();
if (!$plant) {
$warnMsg[] = "Plant code '{$this->data['plant']}' not found.";
$this->data['plant'] = null;
} else {
$this->data['plant'] = $plant->id;
}
}
$receivingPlantName = $this->data['receiving_plant_name'] ?? null;
$transporterName = $this->data['transporter_name'] ?? null;
if (!$receivingPlantName || !$transporterName)
{
$warnMsg [] = 'Both Receiving Plant Name and Transporter Name are required.';
}
$invoiceMaster = \App\Models\InvoiceMaster::where('receiving_plant_name', $receivingPlantName)
->where('transport_name', $transporterName)
->first();
if (!$invoiceMaster) {
$warnMsg [] = "Invoice Master not found for Receiving Plant '{$receivingPlantName}' and Transporter '{$transporterName}'.";
}
$this->data['invoice_master_id'] = $invoiceMaster->id;
unset($this->data['receiving_plant_name'], $this->data['transporter_name']);
if(! empty($warnMsg)){
throw new RowImportFailedException(implode(', ', $warnMsg));
}
return AlertMailRule::Create([
'module' => $this->data['module'],
'rule_name' => $this->data['rule_name'],
'email' => $this->data['email'],
'schedule_type' => $this->data['schedule_type'],
'plant' => $this->data['plant'],
'cc_emails' => $this->data['cc_emails'] ?? null,
'invoice_master_id' => $invoiceMaster->id,
'created_by' => $operatorName,
'updated_by' => $operatorName,
]);
//return new AlertMailRule();
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your alert mail rule import has completed and ' . number_format($import->successful_rows) . ' ' . str('row')->plural($import->successful_rows) . ' imported.';
if ($failedRowsCount = $import->getFailedRowsCount()) {
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;
}
}

View File

@@ -8,6 +8,7 @@ use Filament\Actions\Imports\Exceptions\RowImportFailedException;
use Filament\Actions\Imports\ImportColumn;
use Filament\Actions\Imports\Importer;
use Filament\Actions\Imports\Models\Import;
use Notification;
use Str;
class BlockImporter extends Importer
@@ -19,16 +20,16 @@ class BlockImporter extends Importer
return [
ImportColumn::make('name')
->requiredMapping()
->exampleHeader('BLOCK NAME')
->exampleHeader('Block Name')
->example('Block A')
->label('BLOCK NAME')
->label('Block Name')
->rules(['required']),
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('PLANT CODE')
->example('1000')
->label('PLANT CODE')
->relationship(resolveUsing: 'code')
->exampleHeader('Plant Name')
->example('Ransar Industries-I')
->label('Plant Name')
->relationship(resolveUsing:'name')
->rules(['required']),
];
}
@@ -36,28 +37,21 @@ class BlockImporter extends Importer
public function resolveRecord(): ?Block
{
$warnMsg = [];
$plantCod = $this->data['plant'];
$plant = 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';
// $warnMsg[] = "Plant '" . $plantCod . "' not found";
}
$plant = Plant::where('name', $this->data['plant'])->first();
if (!$plant) {
$warnMsg[] = "Plant not found";
// $warnMsg[] = "Plant '" . $this->data['plant'] . "' not found";
}
if (Str::length($this->data['name']) < 0) {
$warnMsg[] = 'Block name not found';
$warnMsg[] = "Block name not found";
}
if (! empty($warnMsg)) {
if (!empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
}
return Block::updateOrCreate([
'name' => $this->data['name'],
'plant_id' => $plant->id,
'plant_id' => $plant->id
]);
// return Block::firstOrNew([
// // Update existing records, matching them by `$this->data['column_name']`
@@ -69,10 +63,10 @@ class BlockImporter extends Importer
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your block import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your block 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -1,260 +0,0 @@
<?php
namespace App\Filament\Imports;
use App\Models\CharacteristicValue;
use App\Models\Item;
use App\Models\Line;
use App\Models\Machine;
use App\Models\Plant;
use App\Models\ProcessOrder;
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 CharacteristicValueImporter extends Importer
{
protected static ?string $model = CharacteristicValue::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('line')
->requiredMapping()
->exampleHeader('Line Name')
->example('4 inch pump line')
->label('Line Name')
->relationship(resolveUsing: 'name')
->rules(['required']),
ImportColumn::make('item')
->requiredMapping()
->exampleHeader('Item Code')
->example('123456')
->label('Item Code')
->relationship(resolveUsing: 'code')
->rules(['required']),
ImportColumn::make('machine')
->requiredMapping()
->exampleHeader('Work Center')
->example('RMGS09745')
->label('Work Center')
->relationship(resolveUsing: 'work_center')
->rules(['required']),
ImportColumn::make('process_order')
->requiredMapping()
->exampleHeader('Process Order')
->example('23455256352')
->label('Process Order'),
ImportColumn::make('coil_number')
->requiredMapping()
->exampleHeader('Coil Number')
->example('0')
->label('Coil Number'),
ImportColumn::make('status')
->requiredMapping()
->exampleHeader('Status')
->example('Ok')
->label('Status'),
ImportColumn::make('created_by')
->requiredMapping()
->exampleHeader('Created By')
->example('RAW01234')
->label('Created By'),
];
}
public function resolveRecord(): ?CharacteristicValue
{
// return CharacteristicValue::firstOrNew([
// // Update existing records, matching them by `$this->data['column_name']`
// 'email' => $this->data['email'],
// ]);
$warnMsg = [];
$plantId = null;
$itemId = null;
$LineId = null;
$machineId = null;
$itemAgainstPlant = null;
$plantCode = $this->data['plant'];
$processOrder = trim($this->data['process_order'] ?? '');
$iCode = trim($this->data['item']);
$workCenter = trim($this->data['machine']);
$lineName = trim($this->data['line']);
$status = trim($this->data['status']);
$createdBy = trim($this->data['created_by']);
$coilNo = trim($this->data['coil_number']);
if ($plantCode == null || $plantCode == '') {
$warnMsg[] = 'Plant code cannot be empty';
} elseif ($iCode == null || $iCode == '') {
$warnMsg[] = 'Process Order cannot be empty';
} elseif ($workCenter == null || $workCenter == '') {
$warnMsg[] = 'Work center cannot be empty';
} elseif ($lineName == null || $lineName == '') {
$warnMsg[] = 'Line cannot be empty';
}
if (Str::length($plantCode) < 4 || ! is_numeric($plantCode) || ! preg_match('/^[1-9]\d{3,}$/', $plantCode)) {
$warnMsg[] = 'Invalid plant code found';
} else {
$plant = Plant::where('code', $plantCode)->first();
if (! $plant) {
$warnMsg[] = 'Plant not found';
} else {
$plantId = $plant->id;
}
}
if (Str::length($iCode) < 6 || ! ctype_alnum($iCode)) {
$warnMsg[] = 'Invalid item code found';
} else {
$itemCode = Item::where('code', $iCode)->first();
if (! $itemCode) {
$warnMsg[] = 'Item code not found';
} else {
if ($plantId) {
$itemAgainstPlant = Item::where('code', $iCode)->where('plant_id', $plantId)->first();
if (! $itemAgainstPlant) {
$warnMsg[] = 'Item code not found for the given plant';
} else {
$itemId = $itemAgainstPlant->id;
}
}
}
}
$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;
}
}
}
$workCenterExist = Machine::where('work_center', $workCenter)->first();
if (! $workCenterExist) {
$warnMsg[] = 'Work Center not found';
}
// $workCenterAgainstPlant = Machine::where('work_center', $workCenter)
// ->where('plant_id', $plantId)
// ->first();
// if (!$workCenterAgainstPlant) {
// $warnMsg[] = 'Work center not found for the given plant';
// } else {
// $MachineId = $workCenterAgainstPlant->id;
// }
if ($plantId != null && $LineId != null) {
$machineAgaPlantLine = Machine::where('plant_id', $plantId)
->where('line_id', $LineId)
->where('work_center', $workCenter)
->first();
if (! $machineAgaPlantLine) {
$warnMsg[] = 'Work center not found for the given plant and line';
} else {
$machineId = $machineAgaPlantLine->id;
}
}
if ($processOrder == null || $processOrder == '') {
$warnMsg[] = 'Process Order cannot be empty';
}
if ($coilNo == null || $coilNo == '') {
$warnMsg[] = 'Coil No cannot be empty';
} elseif (! is_numeric($coilNo)) {
$warnMsg[] = 'Coil number should contain only numeric values!';
}
if ($status == null || $status == '' || ! $status) {
$warnMsg[] = 'Status cannot be empty';
} elseif (! in_array($status, ['Ok', 'NotOk'], true)) {
$warnMsg[] = "Status must be either 'Ok' or 'NotOk'!";
}
if ($createdBy == null || $createdBy == '' || ! $createdBy) {
$warnMsg[] = 'Created By cannot be empty';
}
// $existing = CharacteristicValue::where('plant_id', $plantId)
// ->where('process_order', $processOrder)
// ->where('coil_number', $coilNo)
// ->first();
// if ($existing) {
// $warnMsg[] = "Process order '{$processOrder}' with coil number '{$coilNo}' already exist for the plant code '{$plantCode}'!";
// }
if ($plantId && $processOrder) {
$existing = CharacteristicValue::where('plant_id', $plantId)
->where('process_order', $processOrder)
->where('coil_number', $coilNo)
->first();
if ($existing) {
$warnMsg[] = "Coil number '{$coilNo}' already exists for Plant '{$plantCode}' and Process Order '{$processOrder}'.";
}
}
if ($plant && $itemCode && $processOrder != '') {
$existingOrder = ProcessOrder::where('plant_id', $plant->id)
->where('process_order', $processOrder)
->first();
if ($existingOrder && $existingOrder->item_id !== ($itemCode->id ?? null)) {
$warnMsg[] = 'Same Process Order already exists for this Plant with a different Item Code';
}
}
if (! empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
}
return CharacteristicValue::create([
'plant_id' => $plantId,
'item_id' => $itemId,
'line_id' => $LineId,
'machine_id' => $machineId,
'process_order' => trim($this->data['process_order']),
'coil_number' => trim($this->data['coil_number']),
'status' => trim($this->data['status']),
'created_by' => trim($this->data['created_by']),
]);
// return null;
// return new CharacteristicValue;
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your characteristic value import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
if ($failedRowsCount = $import->getFailedRowsCount()) {
$body .= ' '.number_format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to import.';
}
return $body;
}
}

View File

@@ -20,10 +20,10 @@ class CheckPointNameImporter extends Importer
return [
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('Plant Code')
->example('1000')
->label('Plant Code')
->relationship(resolveUsing: 'code')
->exampleHeader('Plant Name')
->example('Ransar Industries-I')
->label('Plant Name')
->relationship(resolveUsing: 'name')
->rules(['required']),
ImportColumn::make('name')
->requiredMapping()
@@ -43,33 +43,27 @@ class CheckPointNameImporter extends Importer
public function resolveRecord(): ?CheckPointName
{
$warnMsg = [];
$plantCod = $this->data['plant'];
$plant = 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'; // '" . $plantCod . "'
}
$plant = Plant::where('name', $this->data['plant'])->first();
if (!$plant) {
$warnMsg[] = "Plant not found"; // '" . $this->data['plant'] . "'
}
if (Str::length($this->data['name']) < 3) { // || !ctype_alnum($this->data['name'])
$warnMsg[] = 'Invalid check point name found';
$warnMsg[] = "Invalid check point name found";
}
$createdBy = $this->data['created_by'];
if (Str::length($createdBy) < 3) { // || !ctype_alnum($createdBy)
$warnMsg[] = 'Invalid created by name found';
$warnMsg[] = "Invalid created by name found";
}
if (! empty($warnMsg)) {
if (!empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
}
return CheckPointName::updateOrCreate([
'name' => $this->data['name'],
'plant_id' => $plant->id,
],
[
'created_by' => $this->data['created_by'],
'plant_id' => $plant->id
],
[
'created_by' => $this->data['created_by']
]
);
// // return CheckPointName::firstOrNew([
@@ -82,10 +76,10 @@ class CheckPointNameImporter extends Importer
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your check point name import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your check point name 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -21,10 +21,10 @@ class CheckPointTimeImporter extends Importer
return [
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('Plant Code')
->example('1000')
->label('Plant Code')
->relationship(resolveUsing: 'code')
->exampleHeader('Plant Name')
->example('Ransar Industries-I')
->label('Plant Name')
->relationship(resolveUsing: 'name')
->rules(['required']),
ImportColumn::make('checkPointNames1')
->requiredMapping()
@@ -73,51 +73,50 @@ class CheckPointTimeImporter extends Importer
public function resolveRecord(): ?CheckPointTime
{
$warnMsg = [];
$plantCod = $this->data['plant'];
$plant = null;
$plant = Plant::where('name', $this->data['plant'])->first();
$checkPointNames1 = null;
$checkPointNames2 = 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'; // '" . $plantCod . "'
} else {
$checkPointNames1 = CheckPointName::where('name', $this->data['checkPointNames1'])->first();
if (! $checkPointNames1) {
$warnMsg[] = 'Check point 1 not found';
} else {
$checkPointNames2 = CheckPointName::where('name', $this->data['checkPointNames2'])->first();
if (! $checkPointNames2) {
$warnMsg[] = 'Check point 2 not found';
} else {
if ($checkPointNames1->id === $checkPointNames2->id) {
$warnMsg[] = "Check point 1 and 2 can't be the same";
}
if (!$plant) {
$warnMsg[] = "Plant not found"; // '" . $this->data['plant'] . "'
}
else
{
$checkPointNames1 = CheckPointName::where('name', $this->data['checkPointNames1'])->first();
if (!$checkPointNames1) {
$warnMsg[] = "Check point 1 not found";
}
else
{
$checkPointNames2 = CheckPointName::where('name', $this->data['checkPointNames2'])->first();
if (!$checkPointNames2) {
$warnMsg[] = "Check point 2 not found";
}
else
{
if ($checkPointNames1->id === $checkPointNames2->id) {
$warnMsg[] = "Check point 1 and 2 can't be the same";
}
}
}
}
if (Str::length($this->data['sequence_number']) < 1 || ! is_numeric($this->data['sequence_number']) || $this->data['sequence_number'] <= 0) {
$warnMsg[] = 'Invalid sequence number found';
if (Str::length($this->data['sequence_number']) < 1 || !is_numeric($this->data['sequence_number']) || $this->data['sequence_number'] <= 0) {
$warnMsg[] = "Invalid sequence number found";
}
if (Str::length($this->data['time_lapse']) < 1 || ! is_numeric($this->data['time_lapse']) || $this->data['time_lapse'] <= 0) {
$warnMsg[] = 'Invalid time lapse found';
if (Str::length($this->data['time_lapse']) < 1 || !is_numeric($this->data['time_lapse']) || $this->data['time_lapse'] <= 0) {
$warnMsg[] = "Invalid time lapse found";
}
if (Str::length($this->data['time_lapse_cushioning']) < 1 || ! is_numeric($this->data['time_lapse_cushioning']) || $this->data['time_lapse_cushioning'] <= 0) {
$warnMsg[] = 'Invalid time lapse cushioning found';
if (Str::length($this->data['time_lapse_cushioning']) < 1 || !is_numeric($this->data['time_lapse_cushioning']) || $this->data['time_lapse_cushioning'] <= 0) {
$warnMsg[] = "Invalid time lapse cushioning found";
}
$createdBy = $this->data['created_by'];
if (Str::length($createdBy) < 3) { // || !ctype_alnum($createdBy)
$warnMsg[] = 'Invalid created by name found';
$warnMsg[] = "Invalid created by name found";
}
if (! empty($warnMsg)) {
if (!empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
}
@@ -125,12 +124,12 @@ class CheckPointTimeImporter extends Importer
'plant_id' => $plant->id,
'check_point1_id' => $checkPointNames1->id,
'check_point2_id' => $checkPointNames2->id,
'sequence_number' => $this->data['sequence_number'],
'sequence_number' => $this->data['sequence_number']
],
[
'time_lapse' => $this->data['time_lapse'],
'time_lapse_cushioning' => $this->data['time_lapse_cushioning'],
'created_by' => $this->data['created_by'],
[
'time_lapse' => $this->data['time_lapse'],
'time_lapse_cushioning' => $this->data['time_lapse_cushioning'],
'created_by' => $this->data['created_by']
]
);
// // return CheckPointTime::firstOrNew([
@@ -143,10 +142,10 @@ class CheckPointTimeImporter extends Importer
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your check point time import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your check point time 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -1,651 +0,0 @@
<?php
namespace App\Filament\Imports;
use App\Models\ClassCharacteristic;
use Filament\Actions\Imports\ImportColumn;
use Filament\Actions\Imports\Importer;
use Filament\Actions\Imports\Models\Import;
class ClassCharacteristicImporter extends Importer
{
protected static ?string $model = ClassCharacteristic::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('aufnr')
->label('Aufnr')
->exampleHeader('Aufnr')
->example(''),
ImportColumn::make('class')
->label('Class')
->exampleHeader('Class')
->example(''),
ImportColumn::make('arbid')
->label('Arbid')
->exampleHeader('Arbid')
->example(''),
ImportColumn::make('gamng')
->label('Gamng')
->exampleHeader('Gamng')
->example(''),
ImportColumn::make('lmnga')
->label('Lmnga')
->exampleHeader('Lmnga')
->example(''),
ImportColumn::make('gernr')
->label('Gernr')
->exampleHeader('Gernr')
->example(''),
ImportColumn::make('zz1_cn_bill_ord')
->label('zz1 ccn bill ord')
->exampleHeader('zz1 ccn bill ord')
->example(''),
ImportColumn::make('zmm_amps')
->label('zmm amps')
->exampleHeader('zmm amps')
->example(''),
ImportColumn::make('zmm_brand')
->label('zmm brand')
->exampleHeader('zmm brand')
->example(''),
ImportColumn::make('zmm_degreeofprotection')
->label('zmm degreeofprotection')
->exampleHeader('zmm degreeofprotection')
->example(''),
ImportColumn::make('zmm_delivery')
->label('zmm delivery')
->exampleHeader('zmm delivery')
->example(''),
ImportColumn::make('zmm_dir_rot')
->label('zmm dir rot')
->exampleHeader('zmm dir rot')
->example(''),
ImportColumn::make('zmm_discharge')
->label('zmm discharge')
->exampleHeader('zmm discharge')
->example(''),
ImportColumn::make('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')
->example(''),
ImportColumn::make('zmm_duty')
->label('zmm duty')
->exampleHeader('zmm duty')
->example(''),
ImportColumn::make('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')
->example(''),
ImportColumn::make('zmm_frequency')
->label('zmm frequency')
->exampleHeader('zmm frequency')
->example(''),
ImportColumn::make('zmm_head')
->label('zmm head')
->exampleHeader('zmm head')
->example(''),
ImportColumn::make('zmm_heading')
->label('zmm heading')
->exampleHeader('zmm heading')
->example(''),
ImportColumn::make('zmm_head_max')
->label('zmm head max')
->exampleHeader('zmm head max')
->example(''),
ImportColumn::make('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')
->example(''),
ImportColumn::make('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')
->example(''),
ImportColumn::make('zmm_maxambtemp')
->label('zmm maxambtemp')
->exampleHeader('zmm maxambtemp')
->example(''),
ImportColumn::make('zmm_mincoolingflow')
->label('zmm mincoolingflow')
->exampleHeader('zmm mincoolingflow')
->example(''),
ImportColumn::make('zmm_motorseries')
->label('zmm motorseries')
->exampleHeader('zmm motorseries')
->example(''),
ImportColumn::make('zmm_motor_model')
->label('zmm motor model')
->exampleHeader('zmm motor model')
->example(''),
ImportColumn::make('zmm_outlet')
->label('zmm outlet')
->exampleHeader('zmm outlet')
->example(''),
ImportColumn::make('zmm_phase')
->label('zmm phase')
->exampleHeader('zmm phase')
->example(''),
ImportColumn::make('zmm_pressure')
->label('zmm pressure')
->exampleHeader('zmm pressure')
->example(''),
ImportColumn::make('zmm_pumpflowtype')
->label('zmm pumpflowtype')
->exampleHeader('zmm pumpflowtype')
->example(''),
ImportColumn::make('zmm_pumpseries')
->label('zmm pumpseries')
->exampleHeader('zmm pumpseries')
->example(''),
ImportColumn::make('zmm_pump_model')
->label('zmm pump model')
->exampleHeader('zmm pump model')
->example(''),
ImportColumn::make('zmm_ratedpower')
->label('zmm ratedpower')
->exampleHeader('zmm ratedpower')
->example(''),
ImportColumn::make('zmm_region')
->label('zmm region')
->exampleHeader('zmm region')
->example(''),
ImportColumn::make('zmm_servicefactor')
->label('zmm servicefactor')
->exampleHeader('zmm servicefactor')
->example(''),
ImportColumn::make('zmm_servicefactormaximumamps')
->label('zmm servicefactormaximumamps')
->exampleHeader('zmm servicefactormaximumamps')
->example(''),
ImportColumn::make('zmm_speed')
->label('zmm speed')
->exampleHeader('zmm speed')
->example(''),
ImportColumn::make('zmm_suction')
->label('zmm suction')
->exampleHeader('zmm suction')
->example(''),
ImportColumn::make('zmm_suctionxdelivery')
->label('zmm suctionxdelivery')
->exampleHeader('zmm suctionxdelivery')
->example(''),
ImportColumn::make('zmm_supplysource')
->label('zmm supplysource')
->exampleHeader('zmm supplysource')
->example(''),
ImportColumn::make('zmm_temperature')
->label('zmm temperature')
->exampleHeader('zmm temperature')
->example(''),
ImportColumn::make('zmm_thrustload')
->label('zmm thrustload')
->exampleHeader('zmm thrustload')
->example(''),
ImportColumn::make('zmm_volts')
->label('zmm volts')
->exampleHeader('zmm volts')
->example(''),
ImportColumn::make('zmm_wire')
->label('zmm wire')
->exampleHeader('zmm wire')
->example(''),
ImportColumn::make('zmm_package')
->label('zmm package')
->exampleHeader('zmm package')
->example(''),
ImportColumn::make('zmm_pvarrayrating')
->label('zmm pvarrayrating')
->exampleHeader('zmm pvarrayrating')
->example(''),
ImportColumn::make('zmm_isi')
->label('zmm isi')
->exampleHeader('zmm isi')
->example(''),
ImportColumn::make('zmm_isimotor')
->label('zmm isimotor')
->exampleHeader('zmm isimotor')
->example(''),
ImportColumn::make('zmm_isipump')
->label('zmm isipump')
->exampleHeader('zmm isipump')
->example(''),
ImportColumn::make('zmm_isipumpset')
->label('zmm isipumpset')
->exampleHeader('zmm isipumpset')
->example(''),
ImportColumn::make('zmm_pumpset_model')
->label('zmm pumpset model')
->exampleHeader('zmm pumpset model')
->example(''),
ImportColumn::make('zmm_stages')
->label('zmm stages')
->exampleHeader('zmm stages')
->example(''),
ImportColumn::make('zmm_headrange')
->label('zmm headrange')
->exampleHeader('zmm headrange')
->example(''),
ImportColumn::make('zmm_overall_efficiency')
->label('zmm overall efficiency')
->exampleHeader('zmm overall efficiency')
->example(''),
ImportColumn::make('zmm_connection')
->label('zmm connection')
->exampleHeader('zmm connection')
->example(''),
ImportColumn::make('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')
->example(''),
ImportColumn::make('zmm_category')
->label('zmm category')
->exampleHeader('zmm category')
->example(''),
ImportColumn::make('zmm_submergence')
->label('zmm submergence')
->exampleHeader('zmm submergence')
->example(''),
ImportColumn::make('zmm_capacitorstart')
->label('zmm capacitorstart')
->exampleHeader('zmm capacitorstart')
->example(''),
ImportColumn::make('zmm_capacitorrun')
->label('zmm capacitorrun')
->exampleHeader('zmm capacitorrun')
->example(''),
ImportColumn::make('zmm_inch')
->label('zmm inch')
->exampleHeader('zmm inch')
->example(''),
ImportColumn::make('zmm_motor_type')
->label('zmm motor type')
->exampleHeader('zmm motor type')
->example(''),
ImportColumn::make('zmm_dismantle_direction')
->label('zmm dismantle direction')
->exampleHeader('zmm dismantle direction')
->example(''),
ImportColumn::make('zmm_eff_ovrall')
->label('zmm eff ovrall')
->exampleHeader('zmm eff ovrall')
->example(''),
ImportColumn::make('zmm_bodymoc')
->label('zmm bodymoc')
->exampleHeader('zmm bodymoc')
->example(''),
ImportColumn::make('zmm_rotormoc')
->label('zmm rotormoc')
->exampleHeader('zmm rotormoc')
->example(''),
ImportColumn::make('zmm_dlwl')
->label('zmm dlwl')
->exampleHeader('zmm dlwl')
->example(''),
ImportColumn::make('zmm_inputpower')
->label('zmm inputpower')
->exampleHeader('zmm inputpower')
->example(''),
ImportColumn::make('zmm_imp_od')
->label('zmm imp od')
->exampleHeader('zmm imp od')
->example(''),
ImportColumn::make('zmm_ambtemp')
->label('zmm ambtemp')
->exampleHeader('zmm ambtemp')
->example(''),
ImportColumn::make('zmm_de')
->label('zmm de')
->exampleHeader('zmm de')
->example(''),
ImportColumn::make('zmm_dischargerange')
->label('zmm dischargerange')
->exampleHeader('zmm dischargerange')
->example(''),
ImportColumn::make('zmm_efficiency_class')
->label('zmm efficiency class')
->exampleHeader('zmm efficiency class')
->example(''),
ImportColumn::make('zmm_framesize')
->label('zmm framesize')
->exampleHeader('zmm framesize')
->example(''),
ImportColumn::make('zmm_impellerdiameter')
->label('zmm impellerdiameter')
->exampleHeader('zmm impellerdiameter')
->example(''),
ImportColumn::make('zmm_insulationclass')
->label('zmm insulationclass')
->exampleHeader('zmm insulationclass')
->example(''),
ImportColumn::make('zmm_maxflow')
->label('zmm maxflow')
->exampleHeader('zmm maxflow')
->example(''),
ImportColumn::make('zmm_minhead')
->label('zmm minhead')
->exampleHeader('zmm minhead')
->example(''),
ImportColumn::make('zmm_mtrlofconst')
->label('zmm mtrlofconst')
->exampleHeader('zmm mtrlofconst')
->example(''),
ImportColumn::make('zmm_nde')
->label('zmm nde')
->exampleHeader('zmm nde')
->example(''),
ImportColumn::make('zmm_powerfactor')
->label('zmm powerfactor')
->exampleHeader('zmm powerfactor')
->example(''),
ImportColumn::make('zmm_tagno')
->label('zmm tagno')
->exampleHeader('zmm tagno')
->example(''),
ImportColumn::make('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_beenote')
->label('zmm beenote')
->exampleHeader('zmm beenote')
->example(''),
ImportColumn::make('zmm_beenumber')
->label('zmm beenumber')
->exampleHeader('zmm beenumber')
->example(''),
ImportColumn::make('zmm_beestar')
->label('zmm beenumber')
->exampleHeader('zmm beenumber')
->example(''),
ImportColumn::make('zmm_codeclass')
->label('zmm codeclass')
->exampleHeader('zmm codeclass')
->example(''),
ImportColumn::make('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')
->example(''),
ImportColumn::make('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')
->example(''),
ImportColumn::make('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')
->example(''),
ImportColumn::make('zmm_grwt_pump')
->label('zmm grwt pump')
->exampleHeader('zmm grwt pump')
->example(''),
ImportColumn::make('zmm_isivalve')
->label('zmm isivalve')
->exampleHeader('zmm isivalve')
->example(''),
ImportColumn::make('zmm_isi_wc')
->label('zmm isi wc')
->exampleHeader('zmm isi wc')
->example(''),
ImportColumn::make('zmm_labelperiod')
->label('zmm labelperiod')
->exampleHeader('zmm labelperiod')
->example(''),
ImportColumn::make('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')
->example(''),
ImportColumn::make('zmm_mfgmonyr')
->label('zmm mfgmonyr')
->exampleHeader('zmm mfgmonyr')
->example(''),
ImportColumn::make('zmm_modelyear')
->label('zmm modelyear')
->exampleHeader('zmm modelyear')
->example(''),
ImportColumn::make('zmm_motoridentification')
->label('zmm motoridentification')
->exampleHeader('zmm motoridentification')
->example(''),
ImportColumn::make('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')
->example(''),
ImportColumn::make('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')
->example(''),
ImportColumn::make('zmm_newt_pump')
->label('zmm newt pump')
->exampleHeader('zmm newt pump')
->example(''),
ImportColumn::make('zmm_packtype')
->label('zmm packtype')
->exampleHeader('zmm packtype')
->example(''),
ImportColumn::make('zmm_panel')
->label('zmm panel')
->exampleHeader('zmm panel')
->example(''),
ImportColumn::make('zmm_performance_factor')
->label('zmm performance factor')
->exampleHeader('zmm performance factor')
->example(''),
ImportColumn::make('zmm_pumpidentification')
->label('zmm pumpidentification')
->exampleHeader('zmm pumpidentification')
->example(''),
ImportColumn::make('zmm_psettype')
->label('zmm psettype')
->exampleHeader('zmm psettype')
->example(''),
ImportColumn::make('zmm_size')
->label('zmm size')
->exampleHeader('zmm size')
->example(''),
ImportColumn::make('zmm_eff_ttl')
->label('zmm eff ttl')
->exampleHeader('zmm eff ttl')
->example(''),
ImportColumn::make('zmm_type')
->label('zmm type')
->exampleHeader('zmm type')
->example(''),
ImportColumn::make('zmm_usp')
->label('zmm usp')
->exampleHeader('zmm usp')
->example(''),
ImportColumn::make('mark_status')
->label('MARKED STATUS')
->exampleHeader('MARKED STATUS')
->example(''),
ImportColumn::make('marked_datetime')
->label('MARKED DATETIME')
->exampleHeader('MARKED DATETIME')
->example(''),
ImportColumn::make('marked_by')
->label('MARKED BY')
->exampleHeader('MARKED BY')
->example(''),
ImportColumn::make('man_marked_status')
->label('MANUAL MARKED STATUS')
->exampleHeader('MANUAL MARKED STATUS')
->example(''),
ImportColumn::make('man_marked_datetime')
->label('MANUAL MARKED DATETIME')
->exampleHeader('MANUAL MARKED DATETIME')
->example(''),
ImportColumn::make('man_marked_by')
->label('MANUAL MARKED BY')
->exampleHeader('MANUAL MARKED BY')
->example(''),
ImportColumn::make('motor_marked_status')
->label('MOTOR MARKED STATUS')
->exampleHeader('MOTOR MARKED STATUS')
->example(''),
ImportColumn::make('motor_marked_by')
->label('MOTOR MARKED BY')
->exampleHeader('MOTOR MARKED BY')
->example(''),
ImportColumn::make('pump_marked_status')
->label('PUMP MARKED STATUS')
->exampleHeader('PUMP MARKED STATUS')
->example(''),
ImportColumn::make('pump_marked_by')
->label('PUMP MARKED BY')
->exampleHeader('PUMP MARKED BY')
->example(''),
ImportColumn::make('motor_pump_pumpset_status')
->label('MOTOR PUMP PUMPSET STATUS')
->exampleHeader('MOTOR PUMP PUMPSET STATUS')
->example(''),
ImportColumn::make('motor_machine_name')
->label('MOTOR MACHINE NAME')
->exampleHeader('MOTOR MACHINE NAME')
->example(''),
ImportColumn::make('pump_machine_name')
->label('PUMP MACHINE NAME')
->exampleHeader('PUMP MACHINE NAME')
->example(''),
ImportColumn::make('pumpset_machine_name')
->label('PUMPSET MACHINE NAME')
->exampleHeader('PUMPSET MACHINE NAME')
->example(''),
ImportColumn::make('part_validation_1')
->label('PART VALIDATION 1')
->exampleHeader('PART VALIDATION 1')
->example(''),
ImportColumn::make('part_validation_2')
->label('PART VALIDATION 2')
->exampleHeader('PART VALIDATION 2')
->example(''),
ImportColumn::make('samlight_logged_name')
->label('SAMLGHT LOGGED NAME')
->exampleHeader('SAMLGHT LOGGED NAME')
->example(''),
ImportColumn::make('pending_released_status')
->label('PENDING RELEASED STATUS')
->exampleHeader('PENDING RELEASED STATUS')
->example(''),
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(''),
ImportColumn::make('created_by')
->label('CREATED BY')
->exampleHeader('CREATED BY')
->example('RAW01234'),
ImportColumn::make('updated_at')
->label('UPDATED AT')
->exampleHeader('UPDATED AT')
->example(''),
ImportColumn::make('updated_by')
->label('UPDATED BY')
->exampleHeader('UPDATED BY')
->example(''),
// ImportColumn::make('updated_by'),
];
}
public function resolveRecord(): ?ClassCharacteristic
{
// return ClassCharacteristic::firstOrNew([
// // Update existing records, matching them by `$this->data['column_name']`
// 'email' => $this->data['email'],
// ]);
return new ClassCharacteristic;
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your class characteristic import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
if ($failedRowsCount = $import->getFailedRowsCount()) {
$body .= ' '.number_format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to import.';
}
return $body;
}
}

View File

@@ -62,15 +62,15 @@ class ConfigurationImporter extends Importer
// 'email' => $this->data['email'],
// ]);
return new Configuration;
return new Configuration();
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your configuration import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your configuration 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -16,10 +16,10 @@ class DeviceMasterImporter extends Importer
return [
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('Plant Code')
->example('1000')
->label('Plant Code')
->relationship(resolveUsing: 'code')
->exampleHeader('Plant Name')
->example('Ransar Industries-I')
->label('Plant Name')
->relationship(resolveUsing:'name')
->rules(['required']),
ImportColumn::make('name')
->requiredMapping()
@@ -53,15 +53,15 @@ class DeviceMasterImporter extends Importer
// 'email' => $this->data['email'],
// ]);
return new DeviceMaster;
return new DeviceMaster();
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your device master import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your device 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -16,10 +16,10 @@ class EbReadingImporter extends Importer
return [
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('Plant Code')
->example('1000')
->label('Plant Code')
->relationship(resolveUsing: 'code')
->exampleHeader('Plant Name')
->example('Ransar Industries-I')
->label('Plant Name')
->relationship(resolveUsing:'name')
->rules(['required']),
ImportColumn::make('lcd_segment_check')
->label('LCD Segment Check')
@@ -227,15 +227,15 @@ class EbReadingImporter extends Importer
// 'email' => $this->data['email'],
// ]);
return new EbReading;
return new EbReading();
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your eb reading import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your eb reading 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -16,17 +16,17 @@ class EquipmentMasterImporter extends Importer
return [
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('Plant Code')
->example('1000')
->label('Plant Code')
->relationship(resolveUsing: 'code')
->exampleHeader('Plant Name')
->example('Ransar Industries-I')
->label('Plant Name')
->relationship(resolveUsing:'name')
->rules(['required']),
ImportColumn::make('machine')
->requiredMapping()
->exampleHeader('Machine Name')
->example('1006378')
->label('Machine Name')
->relationship(resolveUsing: 'name')
->relationship(resolveUsing:'name')
->rules(['required']),
ImportColumn::make('name')
->label('Name')
@@ -93,15 +93,15 @@ class EquipmentMasterImporter extends Importer
// 'email' => $this->data['email'],
// ]);
return new EquipmentMaster;
return new EquipmentMaster();
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your equipment master import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your equipment 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -3,14 +3,14 @@
namespace App\Filament\Imports;
use App\Models\GrMaster;
use App\Models\Item;
use App\Models\Plant;
use App\Models\User;
use Filament\Actions\Imports\Exceptions\RowImportFailedException;
use Filament\Actions\Imports\ImportColumn;
use Filament\Actions\Imports\Importer;
use Filament\Actions\Imports\Models\Import;
use App\Models\Plant;
use App\Models\Item;
use Str;
use Filament\Actions\Imports\Exceptions\RowImportFailedException;
use App\Models\User;
class GrMasterImporter extends Importer
{
@@ -21,17 +21,17 @@ class GrMasterImporter extends Importer
return [
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('Plant Code')
->example('1000')
->label('Plant Code')
->relationship(resolveUsing: 'code')
->exampleHeader('Plant Name')
->example('Ransar Industries-I')
->label('Plant Name')
->relationship(resolveUsing:'name')
->rules(['required']),
ImportColumn::make('item')
->requiredMapping()
->exampleHeader('Item Code')
->example('630214')
->label('Item Code')
->relationship(resolveUsing: 'code')
->relationship(resolveUsing:'code')
->rules(['required']),
ImportColumn::make('serial_number')
->requiredMapping()
@@ -51,7 +51,7 @@ class GrMasterImporter extends Importer
->example('Admin')
->label('Created By')
->rules(['required']),
// ImportColumn::make('updated_by'),
//ImportColumn::make('updated_by'),
];
}
@@ -63,47 +63,44 @@ class GrMasterImporter extends Importer
// ]);
$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';
}
$plant = Plant::where('name', $this->data['plant'])->first();
if (!$plant) {
$warnMsg[] = "Plant not found";
}
if (Str::length($this->data['serial_number']) < 9 || ! ctype_alnum($this->data['serial_number'])) {
$warnMsg[] = 'Invalid serial number found';
$item = null;
if ($plant) {
$item = Item::where('code', $this->data['item'])->where('plant_id', $plant->id)->first();
}
if (!$item) {
$warnMsg[] = "Item not found";
}
if (Str::length($this->data['serial_number']) < 9 || !ctype_alnum($this->data['serial_number'])) {
$warnMsg[] = "Invalid serial number found";
}
if (empty($this->data['gr_number'])) {
$warnMsg[] = 'GR Number cannot be empty.';
$warnMsg[] = "GR Number cannot be empty.";
}
$user = User::where('name', $this->data['created_by'])->first();
if (! $user) {
$warnMsg[] = 'User not found';
if (!$user) {
$warnMsg[] = "User not found";
}
if (! empty($warnMsg)) {
if (!empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
} else { // if (empty($warnMsg))
}
else { //if (empty($warnMsg))
$grMaster = GrMaster::where('plant_id', $plant->id)
->where('serial_number', $this->data['serial_number'])
->latest()
->first();
->where('serial_number', $this->data['serial_number'])
->latest()
->first();
if ($grMaster) {
throw new RowImportFailedException('Serial number already exist!');
throw new RowImportFailedException("Serial number already exist!");
}
}
@@ -116,15 +113,15 @@ class GrMasterImporter extends Importer
]);
return null;
// return new GrMaster();
//return new GrMaster();
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your gr master import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your gr 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -20,10 +20,10 @@ class GuardNameImporter extends Importer
return [
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('Plant Code')
->example('1000')
->label('Plant Code')
->relationship(resolveUsing: 'code')
->exampleHeader('Plant Name')
->example('Ransar Industries-I')
->label('Plant Name')
->relationship(resolveUsing: 'name')
->rules(['required']),
ImportColumn::make('name')
->requiredMapping()
@@ -54,38 +54,32 @@ class GuardNameImporter extends Importer
public function resolveRecord(): ?GuardName
{
$warnMsg = [];
$plantCod = $this->data['plant'];
$plant = 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'; // '" . $plantCod . "'
}
$plant = Plant::where('name', $this->data['plant'])->first();
if (!$plant) {
$warnMsg[] = "Plant not found"; // '" . $this->data['plant'] . "'
}
if (Str::length($this->data['name']) < 3) { // || !ctype_alnum($this->data['name'])
$warnMsg[] = 'Invalid guard name found';
$warnMsg[] = "Invalid guard name found";
}
if (Str::length($this->data['identification1']) < 5) {
$warnMsg[] = 'Invalid identification-1 found';
$warnMsg[] = "Invalid identification-1 found";
}
$createdBy = $this->data['created_by'];
if (Str::length($createdBy) < 3) { // || !ctype_alnum($createdBy)
$warnMsg[] = 'Invalid created by name found';
$warnMsg[] = "Invalid created by name found";
}
if (! empty($warnMsg)) {
if (!empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
}
return GuardName::updateOrCreate([
'name' => $this->data['name'],
'plant_id' => $plant->id,
'plant_id' => $plant->id
],
[
'identification1' => $this->data['identification1'],
'identification2' => $this->data['identification2'],
'created_by' => $this->data['created_by'],
[
'identification1' => $this->data['identification1'],
'identification2' => $this->data['identification2'],
'created_by' => $this->data['created_by']
]
);
@@ -93,15 +87,15 @@ class GuardNameImporter extends Importer
// // // Update existing records, matching them by `$this->data['column_name']`
// // 'email' => $this->data['email'],
// // ]);
// return new GuardName();
//return new GuardName();
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your guard name import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your guard name 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -23,10 +23,10 @@ class GuardPatrolEntryImporter extends Importer
return [
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('Plant Code')
->example('1000')
->label('Plant Code')
->relationship(resolveUsing: 'code')
->exampleHeader('Plant Name')
->example('Ransar Industries-I')
->label('Plant Name')
->relationship(resolveUsing: 'name')
->rules(['required']),
ImportColumn::make('guardNames')
->requiredMapping()
@@ -68,60 +68,61 @@ class GuardPatrolEntryImporter extends Importer
public function resolveRecord(): ?GuardPatrolEntry
{
$warnMsg = [];
$plantCod = $this->data['plant'];
$plant = null;
$plant = Plant::where('name', $this->data['plant'])->first();
$guardNames = null;
$checkPointNames = null;
$patrolDateTime = null; // $fdateTime = null;
$patrolDateTime = null; //$fdateTime = null;
if (!$plant) {
$warnMsg[] = "Plant not found"; // '" . $this->data['plant'] . "'
}
else
{
$guardNames = GuardName::where('plant_id', $plant->id)->where('name', $this->data['guardNames'])->first();
if (!$guardNames) {
$warnMsg[] = "Guard name not found";
}
else
{
$checkPointNames = CheckPointName::where('plant_id', $plant->id)->where('name', $this->data['checkPointNames'])->first();
if (!$checkPointNames) {
$warnMsg[] = "Check point name not found";
}
else
{
$patrolTime = $this->data['patrol_time'];//$fromDate = $this->data['from_datetime'];
$formats = ['d-m-Y H:i', 'd-m-Y H:i:s']; //'07-05-2025 08:00' or '07-05-2025 08:00:00'
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'; // '" . $plantCod . "'
} else {
$guardNames = GuardName::where('plant_id', $plant->id)->where('name', $this->data['guardNames'])->first();
if (! $guardNames) {
$warnMsg[] = 'Guard name not found';
} else {
$checkPointNames = CheckPointName::where('plant_id', $plant->id)->where('name', $this->data['checkPointNames'])->first();
if (! $checkPointNames) {
$warnMsg[] = 'Check point name not found';
} else {
$patrolTime = $this->data['patrol_time']; // $fromDate = $this->data['from_datetime'];
$formats = ['d-m-Y H:i', 'd-m-Y H:i:s']; // '07-05-2025 08:00' or '07-05-2025 08:00:00'
foreach ($formats as $format) {
try {
$patrolDateTime = Carbon::createFromFormat($format, $patrolTime);
break;
} catch (\Exception $e) {
// Optionally collect warning messages
// $warnMsg[] = "Date format mismatch with format: $format";
}
foreach ($formats as $format) {
try {
$patrolDateTime = Carbon::createFromFormat($format, $patrolTime);
break;
} catch (\Exception $e) {
// Optionally collect warning messages
// $warnMsg[] = "Date format mismatch with format: $format";
}
}
if (! isset($patrolDateTime)) {
// throw new \Exception('Invalid date time format');
$warnMsg[] = "Invalid 'Patrol DateTime' format. Expected DD-MM-YYYY HH:MM:SS";
} else {
$guardEntryFound = GuardPatrolEntry::where('plant_id', $plant->id)->where('guard_name_id', $guardNames->id)->where('check_point_name_id', $checkPointNames->id)->where('patrol_time', $patrolDateTime->format('Y-m-d H:i:s'))->first();
if ($guardEntryFound) {
$warnMsg[] = 'Duplicate guard patrol entry found';
}
if (!isset($patrolDateTime)) {
// throw new \Exception('Invalid date time format');
$warnMsg[] = "Invalid 'Patrol DateTime' format. Expected DD-MM-YYYY HH:MM:SS";
}
else
{
$guardEntryFound = GuardPatrolEntry::where('plant_id', $plant->id)->where('guard_name_id', $guardNames->id)->where('check_point_name_id', $checkPointNames->id)->where('patrol_time', $patrolDateTime->format('Y-m-d H:i:s'))->first();
if ($guardEntryFound) {
$warnMsg[] = "Duplicate guard patrol entry found";
}
}
}
}
}
$createdBy = Filament::auth()->user()->name; // ?? 'Admin'
if (! $createdBy) {
$warnMsg[] = 'Invalid created by name found';
$createdBy = Filament::auth()->user()->name;// ?? 'Admin'
if (!$createdBy) {
$warnMsg[] = "Invalid created by name found";
}
if (! empty($warnMsg)) {
if (!empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
}
@@ -129,15 +130,14 @@ class GuardPatrolEntryImporter extends Importer
'plant_id' => $plant->id,
'guard_name_id' => $guardNames->id,
'check_point_name_id' => $checkPointNames->id,
'patrol_time' => $patrolDateTime->format('Y-m-d H:i:s'),
'patrol_time' => $patrolDateTime->format('Y-m-d H:i:s')
],
[
'reader_code' => null,
'created_by' => $createdBy,
'updated_by' => $createdBy,
[
'reader_code' => null,
'created_by' => $createdBy,
'updated_by' => $createdBy
]
);
return null;
// // return GuardPatrolEntry::firstOrNew([
// // // Update existing records, matching them by `$this->data['column_name']`
@@ -149,10 +149,10 @@ class GuardPatrolEntryImporter extends Importer
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your guard patrol entry import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your guard patrol entry 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -8,8 +8,7 @@ use Filament\Actions\Imports\Exceptions\RowImportFailedException;
use Filament\Actions\Imports\ImportColumn;
use Filament\Actions\Imports\Importer;
use Filament\Actions\Imports\Models\Import;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Str;
use Str;
class ItemImporter extends Importer
{
@@ -49,10 +48,10 @@ class ItemImporter extends Importer
->label('Unit of Measure'),
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('Plant Code')
->example('1000')
->label('Plant Code')
->relationship(resolveUsing: 'code') // Lookup Plant by code column
->exampleHeader('Plant Name')
->example('Ransar Industries-I')
->label('Plant Name')
->relationship(resolveUsing: 'name')
->rules(['required']),
];
}
@@ -60,46 +59,36 @@ class ItemImporter extends Importer
public function resolveRecord(): ?Item
{
$warnMsg = [];
$plantCod = $this->data['plant'];
$plant = null;
Log::info('ResolveRecord triggered', $this->data);
$iCode = trim($this->data['code']);
$description = trim($this->data['description']);
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'; // '" . $plantCod . "'
}
$plant = Plant::where('name', $this->data['plant'])->first();
if (!$plant) {
$warnMsg[] = "Plant not found"; // '" . $this->data['plant'] . "'
}
if (Str::length($iCode) < 6 || ! ctype_alnum($iCode)) {
$warnMsg[] = 'Invalid item code found';
if (Str::length($iCode) < 6 || !ctype_alnum($iCode)) {
$warnMsg[] = "Invalid item code found";
}
// if (Str::length($this->data['uom']) <= 0) {
// $warnMsg[] = "Invalid unit of measure found";
// }
if (Str::length($description) < 5) {
$warnMsg[] = 'Invalid description found';
$warnMsg[] = "Invalid description found";
}
if (Str::length($this->data['hourly_quantity']) < 0 || ! is_numeric($this->data['hourly_quantity']) || $this->data['hourly_quantity'] <= 0) {
$warnMsg[] = 'Invalid hourly quantity found';
if (Str::length($this->data['hourly_quantity']) < 0 || !is_numeric($this->data['hourly_quantity']) || $this->data['hourly_quantity'] <= 0) {
$warnMsg[] = "Invalid hourly quantity found";
}
if (! empty($warnMsg)) {
if (!empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
}
return Item::updateOrCreate([
'code' => $iCode,
'plant_id' => $plant->id,
],
'code' => $iCode,
'plant_id' => $plant->id
],
[
'category' => trim($this->data['category']),
'description' => $description,
'hourly_quantity' => $this->data['hourly_quantity'],
'uom' => trim($this->data['uom']),
'uom' => trim($this->data['uom'])
]
);
// return new Item;

View File

@@ -87,10 +87,10 @@ class LineImporter extends Importer
->label('Work Group Center 10'),
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('Plant Code')
->example('1000')
->label('Plant Code')
->relationship(resolveUsing: 'code')
->exampleHeader('Plant Name')
->example('Ransar Industries-I')
->label('Plant Name')
->relationship(resolveUsing:'name')
->rules(['required']),
];
}
@@ -98,33 +98,28 @@ class LineImporter extends Importer
public function resolveRecord(): ?Line
{
$warnMsg = [];
$plantCod = $this->data['plant'];
$plant = 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) {
throw new RowImportFailedException('Plant not found');
}
$plant = Plant::where('name', $this->data['plant'])->first();
if (!$plant) {
throw new RowImportFailedException("Plant '{$this->data['plant']}' not found");
}
if (Str::length($this->data['name'] ?? '') <= 0) {
throw new RowImportFailedException('Line name not found');
throw new RowImportFailedException("Line name not found");
}
if (Str::length($this->data['type'] ?? '') <= 0) {
throw new RowImportFailedException('Line type not found');
throw new RowImportFailedException("Line type not found");
}
$noOfOps = (int) ($this->data['no_of_operation'] ?? 0);
if (($noOfOps == null || $noOfOps == '' || ! is_numeric($noOfOps)) && $noOfOps != 0) {
if (($noOfOps == null || $noOfOps == '' || !is_numeric($noOfOps)) && $noOfOps != 0) {
throw new RowImportFailedException("'No of Operation' is required and must be a number $noOfOps");
}
if ($noOfOps > 10) {
if ($noOfOps > 10)
{
throw new RowImportFailedException("Invalid 'No Of Operation' value: {$noOfOps}, maximum allowed is 10");
}
@@ -135,28 +130,28 @@ class LineImporter extends Importer
$missingGroups[] = "work_group{$i}_id";
}
}
if (! empty($missingGroups)) {
if (!empty($missingGroups)) {
throw new RowImportFailedException(
'Invalid data: Required work groups missing values in: '.implode(', ', $missingGroups)
"Invalid data: Required work groups missing values in: " . implode(', ', $missingGroups)
);
}
// Ensure no extra work groups are filled
$invalidGroups = [];
for ($i = $noOfOps + 1; $i <= 10; $i++) {
if (! empty($this->data["work_group{$i}_id"])) {
if (!empty($this->data["work_group{$i}_id"])) {
$invalidGroups[] = "work_group{$i}_id";
}
}
if (! empty($invalidGroups)) {
if (!empty($invalidGroups)) {
throw new RowImportFailedException(
"Invalid data: Only first {$noOfOps} work groups should be filled, but values found in: ".implode(', ', $invalidGroups)
"Invalid data: Only first {$noOfOps} work groups should be filled, but values found in: " . implode(', ', $invalidGroups)
);
}
for ($i = 1; $i <= 10; $i++) {
$workGroupName = $this->data["work_group{$i}_id"] ?? null;
if (! $workGroupName) {
if (!$workGroupName) {
continue;
}
@@ -164,8 +159,8 @@ class LineImporter extends Importer
->where('plant_id', $plant->id)
->first();
if (! $workGroupRecord) {
throw new RowImportFailedException("Work group '{$workGroupName}' not found in plant '{$plantCod}'");
if (!$workGroupRecord) {
throw new RowImportFailedException("Work group '{$workGroupName}' not found in plant '{$this->data['plant']}'");
}
$existsInLines = Line::where('plant_id', $plant->id)
@@ -174,34 +169,35 @@ class LineImporter extends Importer
->first();
if ($existsInLines) {
$warnMsg[] = "Work group '{$workGroupName}' is already assigned to another line in plant '{$plantCod}'";
$warnMsg[] = "Work group '{$workGroupName}' is already assigned to another line in plant '{$this->data['plant']}'";
}
$this->data["work_group{$i}_id"] = $workGroupRecord->id;
}
if (! empty($warnMsg)) {
if (!empty($warnMsg))
{
throw new RowImportFailedException(implode(', ', $warnMsg));
}
Line::updateOrCreate(
[
'name' => $this->data['name'],
'plant_id' => $plant->id,
'plant_id' => $plant->id
],
[
'type' => $this->data['type'],
'no_of_operation' => $noOfOps,
'work_group1_id' => $this->data['work_group1_id'] ?? null,
'work_group2_id' => $this->data['work_group2_id'] ?? null,
'work_group3_id' => $this->data['work_group3_id'] ?? null,
'work_group4_id' => $this->data['work_group4_id'] ?? null,
'work_group5_id' => $this->data['work_group5_id'] ?? null,
'work_group6_id' => $this->data['work_group6_id'] ?? null,
'work_group7_id' => $this->data['work_group7_id'] ?? null,
'work_group8_id' => $this->data['work_group8_id'] ?? null,
'work_group9_id' => $this->data['work_group9_id'] ?? null,
'work_group10_id' => $this->data['work_group10_id'] ?? null,
'work_group1_id' => $this->data['work_group1_id'] ?? null,
'work_group2_id' => $this->data['work_group2_id'] ?? null,
'work_group3_id' => $this->data['work_group3_id'] ?? null,
'work_group4_id' => $this->data['work_group4_id'] ?? null,
'work_group5_id' => $this->data['work_group5_id'] ?? null,
'work_group6_id' => $this->data['work_group6_id'] ?? null,
'work_group7_id' => $this->data['work_group7_id'] ?? null,
'work_group8_id' => $this->data['work_group8_id'] ?? null,
'work_group9_id' => $this->data['work_group9_id'] ?? null,
'work_group10_id' => $this->data['work_group10_id'] ?? null,
]
);
@@ -210,10 +206,10 @@ class LineImporter extends Importer
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your line import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your line 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -10,6 +10,7 @@ use Filament\Actions\Imports\Exceptions\RowImportFailedException;
use Filament\Actions\Imports\ImportColumn;
use Filament\Actions\Imports\Importer;
use Filament\Actions\Imports\Models\Import;
use Filament\Facades\Filament;
use Str;
class LocatorInvoiceValidationImporter extends Importer
@@ -114,49 +115,53 @@ class LocatorInvoiceValidationImporter extends Importer
$scannedBy = $this->data['scanned_by'];
$updatedBy = $this->data['updated_by'];
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 {
if (Str::length($invoiceNo) < 5 || ! ctype_alnum($invoiceNo)) {
$warnMsg[] = 'Invalid invoice number found';
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', $this->data['plant'])->first();
if (!$plant) {
$warnMsg[] = "Plant not found";
}
else
{
if (Str::length($invoiceNo) < 5 || !ctype_alnum($invoiceNo)) {
$warnMsg[] = "Invalid invoice number found";
}
if (Str::length($serialNo) < 9 || Str::length($serialNo) > 20 || ! ctype_alnum($serialNo)) {
$warnMsg[] = 'Invalid serial number found';
if (Str::length($serialNo) < 9 || Str::length($serialNo) > 20 || !ctype_alnum($serialNo)) {
$warnMsg[] = "Invalid serial number found";
}
if (Str::length($palletNo) > 0 && Str::length($palletNo) < 10) {
$warnMsg[] = 'Invalid pallet number found';
$warnMsg[] = "Invalid pallet number found";
}
if (Str::length($locatorNo) > 0 && Str::length($locatorNo) < 7) {
$warnMsg[] = 'Invalid locator number found';
$warnMsg[] = "Invalid locator number found";
}
if (Str::length($scannedStat) > 0 && $scannedStat != 'Scanned') {
$warnMsg[] = 'Invalid scanned status found';
$warnMsg[] = "Invalid scanned status found";
}
if ($uploadStat != 'Y' && $uploadStat != 'N') {
$warnMsg[] = 'Invalid upload status found';
$warnMsg[] = "Invalid upload status found";
}
$created = User::where('name', $createdBy)->first();
if (! $created) {
$warnMsg[] = 'Created by not found';
if (!$created) {
$warnMsg[] = "Created by not found";
}
if (Str::length($scannedBy) > 0) {
$scanned = User::where('name', $scannedBy)->first();
if (! $scanned) {
$warnMsg[] = 'Scanned by not found';
if (!$scanned) {
$warnMsg[] = "Scanned by not found";
}
}
if (Str::length($updatedBy) > 0) {
$updated = User::where('name', $updatedBy)->first();
if (! $updated) {
$warnMsg[] = 'Updated by not found';
if (!$updated) {
$warnMsg[] = "Updated by not found";
}
}
$formats = ['d-m-Y H:i', 'd-m-Y H:i:s']; // '07-05-2025 08:00' or '07-05-2025 08:00:00'
$formats = ['d-m-Y H:i', 'd-m-Y H:i:s']; //'07-05-2025 08:00' or '07-05-2025 08:00:00'
foreach ($formats as $format) {
try {
@@ -168,12 +173,13 @@ class LocatorInvoiceValidationImporter extends Importer
}
}
if (! isset($cDateTime)) {
if (!isset($cDateTime)) {
// throw new \Exception('Invalid date time format');
$warnMsg[] = "Invalid 'Created DateTime' format. Expected DD-MM-YYYY HH:MM:SS";
}
if (Str::length($scannedAt) > 0) {
if (Str::length($scannedAt) > 0)
{
foreach ($formats as $format) {
try {
$sDateTime = Carbon::createFromFormat($format, $scannedAt);
@@ -184,12 +190,13 @@ class LocatorInvoiceValidationImporter extends Importer
}
}
if (! isset($sDateTime)) {
if (!isset($sDateTime)) {
$warnMsg[] = "Invalid 'Scanned DateTime' format. Expected DD-MM-YYYY HH:MM:SS";
}
}
if (Str::length($updatedAt) > 0) {
if (Str::length($updatedAt) > 0)
{
foreach ($formats as $format) {
try {
$uDateTime = Carbon::createFromFormat($format, $updatedAt);
@@ -200,9 +207,11 @@ class LocatorInvoiceValidationImporter extends Importer
}
}
if (! isset($uDateTime)) {
if (!isset($uDateTime)) {
$warnMsg[] = "Invalid 'Updated DateTime' format. Expected DD-MM-YYYY HH:MM:SS";
} else {
}
else
{
if (isset($cDateTime) && isset($uDateTime)) {
if ($cDateTime->greaterThan($uDateTime)) {
$warnMsg[] = "'Created DataTime' is greater than 'Updated DateTime'.";
@@ -217,14 +226,14 @@ class LocatorInvoiceValidationImporter extends Importer
// $warnMsg[] = "Invalid locator quantity found";
// }
if (! empty($warnMsg)) {
if (!empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
}
LocatorInvoiceValidation::updateOrCreate(
[
'plant_id' => $plant->id,
'serial_number' => $serialNo,
'serial_number' => $serialNo
],
[
'invoice_number' => $invoiceNo,
@@ -237,10 +246,9 @@ class LocatorInvoiceValidationImporter extends Importer
'updated_at' => (Str::length($updatedAt) > 0) ? $uDateTime->format('Y-m-d H:i:s') : null,
'created_by' => $createdBy,
'scanned_by' => $scannedBy,
'updated_by' => $updatedBy,
'updated_by' => $updatedBy
]
);
return null;
// // return LocatorInvoiceValidation::firstOrNew([
// // // Update existing records, matching them by `$this->data['column_name']`
@@ -252,10 +260,10 @@ class LocatorInvoiceValidationImporter extends Importer
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your locator invoice validation import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your locator 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -21,9 +21,9 @@ class MachineImporter extends Importer
return [
ImportColumn::make('name')
->requiredMapping()
->exampleHeader('Machine Name')
->exampleHeader('Machine')
->example(['1600251'])
->label('Machine Name')
->label('Machine')
->rules(['required']),
ImportColumn::make('work_center')
->requiredMapping()
@@ -41,16 +41,16 @@ class MachineImporter extends Importer
ImportColumn::make('line')
->requiredMapping()
->relationship(resolveUsing: 'name')
->exampleHeader('Line Name')
->exampleHeader('Line')
->example(['4 inch pump line'])
->label('Line Name')
->label('Line')
->rules(['required']),
ImportColumn::make('plant')
->requiredMapping()
->relationship(resolveUsing: 'code')
->exampleHeader('Plant Code')
->example(['1000'])
->label('Plant Code')
->relationship(resolveUsing: 'name')
->exampleHeader('Plant')
->example(['Ransar Industries-I'])
->label('Plant')
->rules(['required']),
];
}
@@ -58,74 +58,74 @@ class MachineImporter extends Importer
public function resolveRecord(): ?Machine
{
$warnMsg = [];
$plantCod = $this->data['plant'];
$plant = null;
$plant = Plant::where('name', $this->data['plant'])->first();
$line = null;
$machine = $this->data['name'];
$workCenter = $this->data['work_center'];
$groupWorkCenter = WorkGroupMaster::where('name', $this->data['workGroupMaster'])->first();
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 {
$groupWorkCenter = WorkGroupMaster::where('name', $this->data['workGroupMaster'])->where('plant_id', $plant->id)->first();
$line = Line::where('name', $this->data['line'])->where('plant_id', $plant->id)->first();
if ($line) {
$grpWrkCnr = $line->no_of_operation;
if (! $grpWrkCnr || $grpWrkCnr < 1) {// Str::length($grpWrkCnr) < 1)
$warnMsg[] = 'Group work center line not found!';
} elseif (! $groupWorkCenter) {
$warnMsg[] = 'Group work center not found!';
} else {
$dupMachine = Machine::where('plant_id', $plant->id)->where('work_center', '!=', $workCenter)->where('name', $machine)->first();
if ($dupMachine) {
$warnMsg[] = 'Duplicate machine name found!';
} else {
$isValidGroupWork = false;
for ($i = 1; $i <= $line->no_of_operation; $i++) {
$column = "work_group{$i}_id";
if (! empty($line->$column)) {
if ($groupWorkCenter->id == $line->$column) {
$isValidGroupWork = true;
break;
}
if (!$plant) {
$warnMsg[] = "Plant not found!";
}
else {
$groupWorkCenter = WorkGroupMaster::where('name', $this->data['workGroupMaster'])->where('plant_id', $plant->id)->first();
$line = Line::where('name', $this->data['line'])->where('plant_id', $plant->id)->first();
if ($line) {
$grpWrkCnr = $line->no_of_operation;
if (!$grpWrkCnr || $grpWrkCnr < 1)//Str::length($grpWrkCnr) < 1)
{
$warnMsg[] = "Group work center line not found!";
}
else if (!$groupWorkCenter) {
$warnMsg[] = "Group work center not found!";
}
else {
$dupMachine = Machine::where('plant_id', $plant->id)->where('work_center', '!=', $workCenter)->where('name', $machine)->first();
if ($dupMachine) {
$warnMsg[] = "Duplicate machine name found!";
}
else {
$isValidGroupWork = false;
for ($i = 1; $i <= $line->no_of_operation; $i++) {
$column = "work_group{$i}_id";
if (!empty($line->$column)) {
if ($line->$column == $groupWorkCenter->id) {
$isValidGroupWork = true;
break;
}
}
}
if (! $isValidGroupWork) {
$warnMsg[] = 'Group work center does not match with line!';
}
if (!$isValidGroupWork) {
$warnMsg[] = "Group work center does not match with line!";
}
}
} else {
$warnMsg[] = 'Line not found!';
}
}
else
{
$warnMsg[] = "Line not found!";
}
}
if (Str::length($machine) <= 0) {
$warnMsg[] = 'Machine name not found!';
$warnMsg[] = "Machine name not found!";
}
if (! empty($warnMsg)) {
if (!empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
}
Machine::updateOrCreate(
[
'plant_id' => $plant->id,
'work_center' => $workCenter,
'work_center' => $workCenter
],
[
'line_id' => $line->id,
'name' => $machine,
'work_group_master_id' => $groupWorkCenter->id,
'work_group_master_id' => $groupWorkCenter->id
]
);
return null;
// // return Machine::firstOrNew([
// // // Update existing records, matching them by `$this->data['column_name']`
@@ -137,10 +137,10 @@ class MachineImporter extends Importer
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your machine import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your machine 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -15,18 +15,18 @@ class MfmMeterImporter extends Importer
{
return [
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('Plant Code')
->example('1000')
->label('Plant Code')
->relationship(resolveUsing: 'code')
->requiredMapping()
->exampleHeader('Plant Name')
->example('Ransar Industries-I')
->label('Plant Name')
->relationship(resolveUsing:'name')
->rules(['required']),
ImportColumn::make('Device Name')
->requiredMapping()
->exampleHeader('Device Name')
->example('REG001')
->label('Device Name')
->relationship(resolveUsing: 'name')
->relationship(resolveUsing:'name')
->rules(['required']),
ImportColumn::make('sequence')
->requiredMapping()
@@ -56,15 +56,15 @@ class MfmMeterImporter extends Importer
// 'email' => $this->data['email'],
// ]);
return new MfmMeter;
return new MfmMeter();
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your mfm meter import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your mfm meter 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -16,24 +16,24 @@ class MfmParameterImporter extends Importer
return [
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('Plant Code')
->example('1000')
->label('Plant Code')
->relationship(resolveUsing: 'code')
->exampleHeader('Plant Name')
->example('Ransar Industries-I')
->label('Plant Name')
->relationship(resolveUsing:'name')
->rules(['required']),
ImportColumn::make('deviceName')
->requiredMapping()
->exampleHeader('Device Name')
->example('REG001')
->label('Device Name')
->relationship(resolveUsing: 'name')
->relationship(resolveUsing:'name')
->rules(['required']),
ImportColumn::make('mfmMeter')
->requiredMapping()
->exampleHeader('Mfm Meter Sequence')
->example('1')
->label('Mfm Meter Sequence')
->relationship(resolveUsing: 'sequence')
->relationship(resolveUsing:'sequence')
->rules(['required']),
ImportColumn::make('name')
->requiredMapping()
@@ -82,15 +82,15 @@ class MfmParameterImporter extends Importer
// 'email' => $this->data['email'],
// ]);
return new MfmParameter;
return new MfmParameter();
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your mfm parameter import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your mfm parameter 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -24,7 +24,7 @@ class MotorTestingMasterImporter extends Importer
ImportColumn::make('item')
->requiredMapping()
->exampleHeader('Item Code')
->example(['123456', '123457', '123458'])
->example(['123456','123457','123458'])
->label('Item Code')
->relationship(resolveUsing: 'code')
->rules(['required']),
@@ -38,181 +38,181 @@ class MotorTestingMasterImporter extends Importer
->requiredMapping()
->boolean()
->exampleHeader('ISI Model')
->example(['Y', 'N', 'Y'])
->example(['Y','N','Y'])
->label('ISI Model')
->rules(['boolean']),
ImportColumn::make('phase')
->requiredMapping()
->exampleHeader('Phase')
->example(['Single', 'Three', 'Single'])
->example(['Single','Three','Single'])
->label('Phase')
->rules(['required']),
ImportColumn::make('hp')
->requiredMapping()
->exampleHeader('HP')
->example(['5', '10', '5'])
->example(['5','10','5'])
->label('HP')
->rules(['required']),
ImportColumn::make('kw')
->requiredMapping()
->exampleHeader('KW')
->example(['5', '7.5', '5'])
->example(['5','7.5','5'])
->label('KW')
->rules(['required']),
ImportColumn::make('volt')
->requiredMapping()
->exampleHeader('Volt')
->example(['230', '380', '230'])
->example(['230','380','230'])
->label('Volt')
->rules(['required']),
ImportColumn::make('current')
->requiredMapping()
->exampleHeader('Current')
->example(['7', '21.8', '7'])
->example(['7','21.8','7'])
->label('Current')
->rules(['required']),
ImportColumn::make('rpm')
->requiredMapping()
->exampleHeader('RPM')
->example(['2500', '3420', '2500'])
->example(['2500','3420','2500'])
->label('RPM')
->rules(['required']),
ImportColumn::make('torque')
->requiredMapping()
->exampleHeader('Torque')
->example(['0.5', '1.25', '0.5'])
->example(['0.5','1.25','0.5'])
->label('Torque')
->rules(['required']),
ImportColumn::make('frequency')
->requiredMapping()
->exampleHeader('Frequency')
->label('Frequency')
->example(['50', '60', '50'])
->example(['50','60','50'])
->rules(['required']),
ImportColumn::make('connection')
->requiredMapping()
->exampleHeader('Connection')
->label('Connection')
->example(['Star', 'Star-Delta', 'Delta'])
->example(['Star','Star-Delta','Delta'])
->rules(['required']),
ImportColumn::make('ins_res_limit')
->requiredMapping()
->exampleHeader('Insulation Resistance Limit')
->label('Insulation Resistance Limit')
->example(['1000', '2', '1000'])
->example(['1000','2','1000'])
->rules(['required']),
ImportColumn::make('ins_res_type')
->requiredMapping()
->exampleHeader('Insulation Resistance Type')
->label('Insulation Resistance Type')
->example(['O', 'G', 'O'])
->example(['O','G','O'])
->rules(['required']),
ImportColumn::make('routine_test_time')
->requiredMapping()
->exampleHeader('Routine Test Time')
->label('Routine Test Time')
->example(['00:40:00', '00:40:00', '00:40:00'])
->example(['00:40:00','00:40:00','00:40:00'])
->rules(['required']),
ImportColumn::make('res_ry_ll')
->requiredMapping()
->exampleHeader('Resistance RY LL')
->label('Resistance RY LL')
->example(['0.05', '0.05', '0.05'])
->example(['0.05','0.05','0.05'])
->rules(['required']),
ImportColumn::make('res_ry_ul')
->requiredMapping()
->exampleHeader('Resistance RY UL')
->label('Resistance RY UL')
->example(['99', '99', '99'])
->example(['99','99','99'])
->rules(['required']),
ImportColumn::make('res_yb_ll')
->requiredMapping()
->exampleHeader('Resistance YB LL')
->label('Resistance YB LL')
->example(['0.05', '0.05', '0.05'])
->example(['0.05','0.05','0.05'])
->rules(['required']),
ImportColumn::make('res_yb_ul')
->requiredMapping()
->exampleHeader('Resistance YB UL')
->label('Resistance YB UL')
->example(['99', '99', '99'])
->example(['99','99','99'])
->rules(['required']),
ImportColumn::make('res_br_ll')
->requiredMapping()
->exampleHeader('Resistance BR LL')
->label('Resistance BR LL')
->example(['0.05', '0.05', '0.05'])
->example(['0.05','0.05','0.05'])
->rules(['required']),
ImportColumn::make('res_br_ul')
->requiredMapping()
->exampleHeader('Resistance BR UL')
->label('Resistance BR UL')
->example(['99', '99', '99'])
->example(['99','99','99'])
->rules(['required']),
ImportColumn::make('lock_volt_limit')
->requiredMapping()
->exampleHeader('Lock Volt Limit')
->label('Lock Volt Limit')
->example(['80', '100', '80'])
->example(['80','100','80'])
->rules(['required']),
ImportColumn::make('leak_cur_limit')
->requiredMapping()
->exampleHeader('Leak Current Limit')
->label('Leak Current Limit')
->example(['50', '50', '50'])
->example(['50','50','50'])
->rules(['required']),
ImportColumn::make('lock_cur_ll')
->requiredMapping()
->exampleHeader('Lock Current LL')
->label('Lock Current LL')
->example(['10', '12.5', '10'])
->example(['10','12.5','10'])
->rules(['required']),
ImportColumn::make('lock_cur_ul')
->requiredMapping()
->exampleHeader('Lock Current UL')
->label('Lock Current UL')
->example(['15', '14.6', '15'])
->example(['15','14.6','15'])
->rules(['required']),
ImportColumn::make('noload_cur_ll')
->requiredMapping()
->exampleHeader('No Load Current LL')
->label('No Load Current LL')
->example(['3', '5.9', '3'])
->example(['3','5.9','3'])
->rules(['required']),
ImportColumn::make('noload_cur_ul')
->requiredMapping()
->exampleHeader('No Load Current UL')
->label('No Load Current UL')
->example(['15', '6.9', '15'])
->example(['15','6.9','15'])
->rules(['required']),
ImportColumn::make('noload_pow_ll')
->requiredMapping()
->exampleHeader('No Load Power LL')
->label('No Load Power LL')
->example(['250', '850', '250'])
->example(['250','850','250'])
->rules(['required']),
ImportColumn::make('noload_pow_ul')
->requiredMapping()
->exampleHeader('No Load Power UL')
->label('No Load Power UL')
->example(['500', '1200', '500'])
->example(['500','1200','500'])
->rules(['required']),
ImportColumn::make('noload_spd_ll')
->requiredMapping()
->exampleHeader('No Load Speed LL')
->label('No Load Speed LL')
->example(['2000', '2500', '2000'])
->example(['2000','2500','2000'])
->rules(['required']),
ImportColumn::make('noload_spd_ul')
->requiredMapping()
->exampleHeader('No Load Speed UL')
->label('No Load Speed UL')
->example(['4000', '3500', '4000'])
->example(['4000','3500','4000'])
->rules(['required']),
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('Plant')
->example(['1000', '1010', '1020'])
->example(['1000','1010','1020'])
->label('Plant')
->relationship(resolveUsing: 'code')
->rules(['required']),
@@ -237,7 +237,7 @@ class MotorTestingMasterImporter extends Importer
$plantCod = trim($this->data['plant']);
$iCode = trim($this->data['item']);
$sCode = trim($this->data['subassembly_code']);
$isiModel = (trim($this->data['isi_model']) == '1') ? true : false;
$isiModel = (trim($this->data['isi_model']) == "1") ? true : false;
$phase = trim($this->data['phase']);
$kw = trim($this->data['kw']);
$hp = trim($this->data['hp']);
@@ -270,25 +270,40 @@ class MotorTestingMasterImporter extends Importer
$updatedBy = trim($this->data['updated_by']);
$plant = null;
if (Str::length($plantCod) < 4 || ! is_numeric($plantCod) || ! preg_match('/^[1-9]\d{3,}$/', $plantCod)) {
$warnMsg[] = 'Invalid plant code found';
} elseif (Str::length($iCode) < 6 || ! ctype_alnum($iCode)) {
$warnMsg[] = 'Invalid item code found';
} elseif (Str::length($sCode) < 6 || ! ctype_alnum($sCode)) {
$warnMsg[] = 'Invalid sub-assembly code found';
} else {
if (Str::length($plantCod) < 4 || !is_numeric($plantCod) || !preg_match('/^[1-9]\d{3,}$/', $plantCod))
{
$warnMsg[] = "Invalid plant code found";
}
else if (Str::length($iCode) < 6 || !ctype_alnum($iCode))
{
$warnMsg[] = "Invalid item code found";
}
else if (Str::length($sCode) < 6 || !ctype_alnum($sCode))
{
$warnMsg[] = "Invalid sub-assembly code found";
}
else
{
$plant = Plant::where('code', $plantCod)->first();
$codeExist = Item::where('code', $iCode)->first();
if ($plant) {
if ($plant)
{
$iCode = Item::where('code', $iCode)->where('plant_id', $plant->id)->first();
}
if (! $plant) {
$warnMsg[] = 'Plant not found';
} elseif (! $codeExist) {
$warnMsg[] = 'Item code not found';
} elseif (! $iCode) {
$warnMsg[] = 'Item code not found for choosed plant';
} else {
if (!$plant)
{
$warnMsg[] = "Plant not found";
}
else if (!$codeExist)
{
$warnMsg[] = "Item code not found";
}
else if (!$iCode)
{
$warnMsg[] = "Item code not found for choosed plant";
}
else
{
// if (Str::length($isiModel) <= 0 || $isiModel == "0" || $isiModel == "1") {
// $warnMsg[] = "Invalid ISI Model found";
// }
@@ -296,123 +311,125 @@ class MotorTestingMasterImporter extends Importer
// {
// $isiModel = ($isiModel == "1");
// }
if (Str::length($phase) <= 0 || ($phase != 'Single' && $phase != 'Three')) {// !is_string($phase) ||
$warnMsg[] = 'Invalid phase found';
if (Str::length($phase) <= 0 || ($phase != "Single" && $phase != "Three")) {//!is_string($phase) ||
$warnMsg[] = "Invalid phase found";
}
if (Str::length($hp) <= 0 || ! is_numeric($hp)) {
$warnMsg[] = 'Invalid HP found';
if (Str::length($hp) <= 0 || !is_numeric($hp)) {
$warnMsg[] = "Invalid HP found";
}
if (Str::length($kw) <= 0 || ! is_numeric($kw)) {
$warnMsg[] = 'Invalid KW found';
if (Str::length($kw) <= 0 || !is_numeric($kw)) {
$warnMsg[] = "Invalid KW found";
}
if (Str::length($volt) <= 0 || ! is_numeric($volt)) {
$warnMsg[] = 'Invalid volt found';
if (Str::length($volt) <= 0 || !is_numeric($volt)) {
$warnMsg[] = "Invalid volt found";
}
if (Str::length($current) <= 0 || ! is_numeric($current)) {
$warnMsg[] = 'Invalid current found';
if (Str::length($current) <= 0 || !is_numeric($current)) {
$warnMsg[] = "Invalid current found";
}
if (Str::length($rpm) <= 0 || ! is_numeric($rpm)) {
$warnMsg[] = 'Invalid RPM found';
if (Str::length($rpm) <= 0 || !is_numeric($rpm)) {
$warnMsg[] = "Invalid RPM found";
}
if (Str::length($torque) <= 0 || ! is_numeric($torque)) {
$warnMsg[] = 'Invalid torque found';
if (Str::length($torque) <= 0 || !is_numeric($torque)) {
$warnMsg[] = "Invalid torque found";
}
if (Str::length($frequency) <= 0 || ! is_numeric($frequency)) {
$warnMsg[] = 'Invalid frequency found';
if (Str::length($frequency) <= 0 || !is_numeric($frequency)) {
$warnMsg[] = "Invalid frequency found";
}
if (Str::length($connection) <= 0 || ($connection != 'Star-Delta' && $connection != 'Star' && $connection != 'Delta')) {
$warnMsg[] = 'Invalid connection found';
if (Str::length($connection) <= 0 || ($connection != "Star-Delta" && $connection != "Star" && $connection != "Delta")) {
$warnMsg[] = "Invalid connection found";
}
if (Str::length($insResLimit) <= 0 || ! is_numeric($insResLimit)) {
$warnMsg[] = 'Invalid insulation resistance limit found';
if (Str::length($insResLimit) <= 0 || !is_numeric($insResLimit)) {
$warnMsg[] = "Invalid insulation resistance limit found";
}
if (Str::length($insResType) <= 0 || ($insResType != 'O' && $insResType != 'M' && $insResType != 'G')) {
$warnMsg[] = 'Invalid insulation resistance type found';
if (Str::length($insResType) <= 0 || ($insResType != "O" && $insResType != "M" && $insResType != "G")) {
$warnMsg[] = "Invalid insulation resistance type found";
}
if (Str::length($routineTestTime) <= 0 || ! isValidTimeFormat($routineTestTime)) {
$warnMsg[] = 'Invalid routine test time found';
if (Str::length($routineTestTime) <= 0 || !isValidTimeFormat($routineTestTime)) {
$warnMsg[] = "Invalid routine test time found";
}
if (Str::length($resRyLl) <= 0 || ! is_numeric($resRyLl)) {
$warnMsg[] = 'Invalid resistance RY lower limit found';
if (Str::length($resRyLl) <= 0 || !is_numeric($resRyLl)) {
$warnMsg[] = "Invalid resistance RY lower limit found";
}
if (Str::length($resRyUl) <= 0 || ! is_numeric($resRyUl)) {
$warnMsg[] = 'Invalid resistance RY upper limit found';
if (Str::length($resRyUl) <= 0 || !is_numeric($resRyUl)) {
$warnMsg[] = "Invalid resistance RY upper limit found";
}
if (Str::length($resYbLl) <= 0 || ! is_numeric($resYbLl)) {
$warnMsg[] = 'Invalid resistance YB lower limit found';
if (Str::length($resYbLl) <= 0 || !is_numeric($resYbLl)) {
$warnMsg[] = "Invalid resistance YB lower limit found";
}
if (Str::length($resYbUl) <= 0 || ! is_numeric($resYbUl)) {
$warnMsg[] = 'Invalid resistance YB upper limit found';
if (Str::length($resYbUl) <= 0 || !is_numeric($resYbUl)) {
$warnMsg[] = "Invalid resistance YB upper limit found";
}
if (Str::length($resBrLl) <= 0 || ! is_numeric($resBrLl)) {
$warnMsg[] = 'Invalid resistance BR lower limit found';
if (Str::length($resBrLl) <= 0 || !is_numeric($resBrLl)) {
$warnMsg[] = "Invalid resistance BR lower limit found";
}
if (Str::length($resBrUl) <= 0 || ! is_numeric($resBrUl)) {
$warnMsg[] = 'Invalid resistance BR upper limit found';
if (Str::length($resBrUl) <= 0 || !is_numeric($resBrUl)) {
$warnMsg[] = "Invalid resistance BR upper limit found";
}
if (Str::length($lockVoltLimit) <= 0 || ! is_numeric($lockVoltLimit)) {
$warnMsg[] = 'Invalid locked volt limit found';
if (Str::length($lockVoltLimit) <= 0 || !is_numeric($lockVoltLimit)) {
$warnMsg[] = "Invalid locked volt limit found";
}
if (Str::length($leakCurLimit) <= 0 || ! is_numeric($leakCurLimit)) {
$warnMsg[] = 'Invalid leakage current limit found';
if (Str::length($leakCurLimit) <= 0 || !is_numeric($leakCurLimit)) {
$warnMsg[] = "Invalid leakage current limit found";
}
if (Str::length($lockCurLl) <= 0 || ! is_numeric($lockCurLl)) {
$warnMsg[] = 'Invalid locked current lower limit found';
if (Str::length($lockCurLl) <= 0 || !is_numeric($lockCurLl)) {
$warnMsg[] = "Invalid locked current lower limit found";
}
if (Str::length($lockCurUl) <= 0 || ! is_numeric($lockCurUl)) {
$warnMsg[] = 'Invalid locked current upper limit found';
if (Str::length($lockCurUl) <= 0 || !is_numeric($lockCurUl)) {
$warnMsg[] = "Invalid locked current upper limit found";
}
if (Str::length($noloadCurLl) <= 0 || ! is_numeric($noloadCurLl)) {
$warnMsg[] = 'Invalid no load current lower limit found';
if (Str::length($noloadCurLl) <= 0 || !is_numeric($noloadCurLl)) {
$warnMsg[] = "Invalid no load current lower limit found";
}
if (Str::length($noloadCurUl) <= 0 || ! is_numeric($noloadCurUl)) {
$warnMsg[] = 'Invalid no load current upper limit found';
if (Str::length($noloadCurUl) <= 0 || !is_numeric($noloadCurUl)) {
$warnMsg[] = "Invalid no load current upper limit found";
}
if (Str::length($noloadPowLl) <= 0 || ! is_numeric($noloadPowLl)) {
$warnMsg[] = 'Invalid no load power lower limit found';
if (Str::length($noloadPowLl) <= 0 || !is_numeric($noloadPowLl)) {
$warnMsg[] = "Invalid no load power lower limit found";
}
if (Str::length($noloadPowUl) <= 0 || ! is_numeric($noloadPowUl)) {
$warnMsg[] = 'Invalid no load power upper limit found';
if (Str::length($noloadPowUl) <= 0 || !is_numeric($noloadPowUl)) {
$warnMsg[] = "Invalid no load power upper limit found";
}
if (Str::length($noloadSpdLl) <= 0 || ! is_numeric($noloadSpdLl)) {
$warnMsg[] = 'Invalid no load speed lower limit found';
if (Str::length($noloadSpdLl) <= 0 || !is_numeric($noloadSpdLl)) {
$warnMsg[] = "Invalid no load speed lower limit found";
}
if (Str::length($noloadSpdUl) <= 0 || ! is_numeric($noloadSpdUl)) {
$warnMsg[] = 'Invalid no load speed upper limit found';
if (Str::length($noloadSpdUl) <= 0 || !is_numeric($noloadSpdUl)) {
$warnMsg[] = "Invalid no load speed upper limit found";
}
$oldCode = MotorTestingMaster::where('item_id', $iCode->id)->where('plant_id', $plant->id)->first();
if ($oldCode) {
$created = $oldCode->created_by ? User::where('name', $oldCode->created_by)->first() : null;
if (! $created) {
$warnMsg[] = 'Created by not found on update';
if (!$created) {
$warnMsg[] = "Created by not found on update";
}
$updated = User::where('name', $updatedBy)->first();
if (! $updated) {
$warnMsg[] = 'Updated by not found on update';
if (!$updated) {
$warnMsg[] = "Updated by not found on update";
}
} else {
}
else
{
$created = User::where('name', $createdBy)->first();
if (! $created) {
$warnMsg[] = 'Created by not found';
if (!$created) {
$warnMsg[] = "Created by not found";
}
$updated = User::where('name', $updatedBy)->first();
if (! $updated) {
$warnMsg[] = 'Updated by not found';
if (!$updated) {
$warnMsg[] = "Updated by not found";
}
}
}
}
if (! empty($warnMsg)) {
if (!empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
}
MotorTestingMaster::updateOrCreate([
'plant_id' => $plant->id,
'item_id' => $iCode->id,
],
'item_id' => $iCode->id
],
[
'subassembly_code' => $sCode,
'isi_model' => $isiModel,
@@ -448,7 +465,6 @@ class MotorTestingMasterImporter extends Importer
'updated_by' => $updated->name,
]
);
return null;
// // return MotorTestingMaster::firstOrNew([
// // // Update existing records, matching them by `$this->data['column_name']`
@@ -460,24 +476,22 @@ class MotorTestingMasterImporter extends Importer
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your motor testing master import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your motor testing 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;
}
}
function isValidTimeFormat($time)
{
function isValidTimeFormat($time) {
// If time starts with a single digit hour without leading zero, pad it
if (preg_match('/^\d(:\d{2}:\d{2})$/', $time, $matches)) {
$time = '0'.$time;
$time = '0' . $time;
}
$dateTime = DateTime::createFromFormat('H:i:s', $time);
return $dateTime && $dateTime->format('H:i:s') === $time;
}

View File

@@ -12,6 +12,7 @@ use Filament\Actions\Imports\Importer;
use Filament\Actions\Imports\Models\Import;
use Str;
class PalletValidationImporter extends Importer
{
protected static ?string $model = PalletValidation::class;
@@ -121,45 +122,49 @@ class PalletValidationImporter extends Importer
$scannedBy = $this->data['scanned_by'];
$updatedBy = $this->data['updated_by'];
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 {
if (Str::length($serialNo) < 9 || Str::length($serialNo) > 20 || ! ctype_alnum($serialNo)) {
$warnMsg[] = 'Invalid serial number found';
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', $this->data['plant'])->first();
if (!$plant) {
$warnMsg[] = "Plant not found";
}
else
{
if (Str::length($serialNo) < 9 || Str::length($serialNo) > 20 || !ctype_alnum($serialNo)) {
$warnMsg[] = "Invalid serial number found";
}
if (Str::length($palletNo) > 0 && Str::length($palletNo) < 10) {
$warnMsg[] = 'Invalid pallet number found';
$warnMsg[] = "Invalid pallet number found";
}
if (Str::length($palletStat) > 0 && $palletStat != 'Completed') {
$warnMsg[] = 'Invalid pallet status found';
$warnMsg[] = "Invalid pallet status found";
}
if (Str::length($locatorNo) > 0 && Str::length($locatorNo) < 7) {
$warnMsg[] = 'Invalid locator number found';
$warnMsg[] = "Invalid locator number found";
}
if (Str::length($palletNo) <= 0 && Str::length($locatorNo) <= 0) {
$warnMsg[] = 'Pallet and locator number found';
$warnMsg[] = "Pallet and locator number found";
}
if (Str::length($locatorQty) < 0 || ! is_numeric($locatorQty) || $locatorQty < 0 || $locatorQty > 2) {
$warnMsg[] = 'Invalid locator quantity found';
if (Str::length($locatorQty) < 0 || !is_numeric($locatorQty) || $locatorQty < 0 || $locatorQty > 2) {
$warnMsg[] = "Invalid locator quantity found";
}
$created = User::where('name', $createdBy)->first();
if (! $created) {
$warnMsg[] = 'Created by not found';
if (!$created) {
$warnMsg[] = "Created by not found";
}
$scanned = User::where('name', $scannedBy)->first();
if (! $scanned) {
$warnMsg[] = 'Scanned by not found';
if (!$scanned) {
$warnMsg[] = "Scanned by not found";
}
$updated = User::where('name', $updatedBy)->first();
if (! $updated) {
$warnMsg[] = 'Updated by not found';
if (!$updated) {
$warnMsg[] = "Updated by not found";
}
$formats = ['d-m-Y H:i', 'd-m-Y H:i:s']; // '07-05-2025 08:00' or '07-05-2025 08:00:00'
$formats = ['d-m-Y H:i', 'd-m-Y H:i:s']; //'07-05-2025 08:00' or '07-05-2025 08:00:00'
foreach ($formats as $format) {
try {
@@ -171,7 +176,7 @@ class PalletValidationImporter extends Importer
}
}
if (! isset($cDateTime)) {
if (!isset($cDateTime)) {
// throw new \Exception('Invalid date time format');
$warnMsg[] = "Invalid 'Created DateTime' format. Expected DD-MM-YYYY HH:MM:SS";
}
@@ -186,12 +191,13 @@ class PalletValidationImporter extends Importer
}
}
if (! isset($sDateTime)) {
if (!isset($sDateTime)) {
$warnMsg[] = "Invalid 'Scanned DateTime' format. Expected DD-MM-YYYY HH:MM:SS";
}
foreach ($formats as $format) {
try {
try
{
$uDateTime = Carbon::createFromFormat($format, $updatedAt);
break;
} catch (\Exception $e) {
@@ -200,9 +206,11 @@ class PalletValidationImporter extends Importer
}
}
if (! isset($uDateTime)) {
if (!isset($uDateTime)) {
$warnMsg[] = "Invalid 'Updated DateTime' format. Expected DD-MM-YYYY HH:MM:SS";
} else {
}
else
{
if (isset($cDateTime) && isset($uDateTime)) {
if ($cDateTime->greaterThan($uDateTime)) {
$warnMsg[] = "'Created DataTime' is greater than 'Updated DateTime'.";
@@ -216,14 +224,14 @@ class PalletValidationImporter extends Importer
// $warnMsg[] = "Invalid locator quantity found";
// }
if (! empty($warnMsg)) {
if (!empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
}
PalletValidation::updateOrCreate(
[
'plant_id' => $plant->id,
'serial_number' => $serialNo,
'serial_number' => $serialNo
],
[
'pallet_number' => $palletNo,
@@ -235,10 +243,9 @@ class PalletValidationImporter extends Importer
'updated_at' => $uDateTime->format('Y-m-d H:i:s'),
'created_by' => $createdBy,
'scanned_by' => $scannedBy,
'updated_by' => $updatedBy,
'updated_by' => $updatedBy
]
);
return null;
// // return PalletValidation::firstOrNew([
// // // Update existing records, matching them by `$this->data['column_name']`
@@ -250,10 +257,10 @@ class PalletValidationImporter extends Importer
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your pallet validation import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your pallet 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -23,7 +23,7 @@ class PlantImporter extends Importer
->exampleHeader('Plant Code')
->example('1000')
->label('Plant Code')
->rules(['required']), // , 'integer'
->rules(['required']), //, 'integer'
ImportColumn::make('name')
->requiredMapping()
->exampleHeader('Plant Name')
@@ -41,7 +41,7 @@ class PlantImporter extends Importer
->exampleHeader('Company Name')
->example('C.R.I. Pumps Private Limited')
->label('Company Name')
->relationship(resolveUsing: 'name')
->relationship(resolveUsing:'name')
->rules(['required']),
];
}
@@ -50,40 +50,41 @@ class PlantImporter extends Importer
{
$warnMsg = [];
$company = Company::where('name', $this->data['company'])->first();
if (! $company) {
$warnMsg[] = 'Company name not found';
if (!$company) {
$warnMsg[] = "Company name not found";
}
if (Str::length($this->data['name']) < 0) {
$warnMsg[] = 'Plant name not found';
$warnMsg[] = "Plant name not found";
}
if (Str::length($this->data['code']) < 4 || ! is_numeric($this->data['code']) || ! preg_match('/^[1-9]\d{3,}$/', $this->data['code'])) {
$warnMsg[] = 'Invalid plant code found';
if (Str::length($this->data['code']) < 4 || !is_numeric($this->data['code']) || !preg_match('/^[1-9]\d{3,}$/', $this->data['code'])) {
$warnMsg[] = "Invalid plant code found";
}
if (Str::length($this->data['address']) < 3) {
$warnMsg[] = 'Invalid address found';
$warnMsg[] = "Invalid address found";
}
if (! empty($warnMsg)) {
if (!empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
}
$plantCN = Plant::where('code', $this->data['code'])->where('name', $this->data['name'])->first();
if (! $plantCN) {
if (!$plantCN) {
$plantCode = Plant::where('code', $this->data['code'])->first();
$plantName = Plant::where('name', $this->data['name'])->first();
if ($plantName) {
throw new RowImportFailedException('Duplicate plant name found');
} elseif ($plantCode) {
throw new RowImportFailedException('Duplicate plant code found');
throw new RowImportFailedException("Duplicate plant name found");
}
else if ($plantCode) {
throw new RowImportFailedException("Duplicate plant code found");
}
}
return Plant::updateOrCreate([
'code' => $this->data['code'],
'name' => $this->data['name'],
],
'code' => $this->data['code'],
'name' => $this->data['name'],
],
[
'address' => $this->data['address'],
'company_id' => $company->id,
'company_id' => $company->id
]
);
// return Plant::firstOrNew([
@@ -96,10 +97,10 @@ class PlantImporter extends Importer
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your plant import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your plant 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -10,7 +10,6 @@ use Filament\Actions\Imports\Exceptions\RowImportFailedException;
use Filament\Actions\Imports\ImportColumn;
use Filament\Actions\Imports\Importer;
use Filament\Actions\Imports\Models\Import;
use Filament\Facades\Filament;
use Str;
class ProcessOrderImporter extends Importer
@@ -39,57 +38,41 @@ class ProcessOrderImporter extends Importer
->example('202500123456')
->label('PROCESS ORDER')
->rules(['required']),
ImportColumn::make('order_quantity')
->exampleHeader('ORDER QUANTITY')
->example('100')
->label('ORDER QUANTITY')
ImportColumn::make('created_by')
->exampleHeader('CREATED BY')
->example('RAW01234')
->label('CREATED BY')
->rules(['required']),
// ImportColumn::make('created_by')
// ->exampleHeader('CREATED BY')
// ->example('RAW01234')
// ->label('CREATED BY')
// ->rules(['required']),
];
}
public function resolveRecord(): ?ProcessOrder
{
$warnMsg = [];
$plantCod = $this->data['plant'];
$plant = null;
$plant = Plant::where('code', $this->data['plant'])->first();
$itemCode = Item::where('code', $this->data['item'])->first();
$iCode = trim($this->data['item']);
$processOrder = trim($this->data['process_order'] ?? '');
$user = Filament::auth()->user();
$operatorName = $user->name;
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';
}
}
if (Str::length($iCode) < 6 || ! ctype_alnum($iCode)) {
if (! $plant) {
$warnMsg[] = 'Plant not found';
} elseif (Str::length($iCode) < 6 || ! ctype_alnum($iCode)) {
$warnMsg[] = 'Invalid item code found';
} else {
$itemCode = Item::where('code', $iCode)->first();
if (! $itemCode) {
$warnMsg[] = 'Item Code not found';
}
} elseif (! $itemCode) {
$warnMsg[] = 'Item Code not found';
}
$processOrder = trim($this->data['process_order'] ?? '');
if ($processOrder == '') {
$warnMsg[] = 'Process Order cannot be empty';
}
// $user = User::where('name', $this->data['created_by'])->first();
// if (! $user) {
// $warnMsg[] = 'User not found';
// }
$user = User::where('name', $this->data['created_by'])->first();
if (! $user) {
$warnMsg[] = 'User not found';
}
if ($plant && $itemCode && $processOrder != '') {
if ($plant && $processOrder != '') {
$existingOrder = ProcessOrder::where('plant_id', $plant->id)
->where('process_order', $processOrder)
@@ -111,7 +94,7 @@ class ProcessOrderImporter extends Importer
'coil_number' => '0',
'order_quantity' => 0,
'received_quantity' => 0,
'created_by' => $operatorName,
'created_by' => $user->name,
]);
// return new ProcessOrder();

View File

@@ -1,277 +0,0 @@
<?php
namespace App\Filament\Imports;
use App\Models\Item;
use App\Models\Line;
use App\Models\Machine;
use App\Models\Plant;
use App\Models\ProductCharacteristicsMaster;
use App\Models\User;
use App\Models\WorkGroupMaster;
use Filament\Actions\Imports\Exceptions\RowImportFailedException;
use Filament\Actions\Imports\ImportColumn;
use Filament\Actions\Imports\Importer;
use Filament\Actions\Imports\Models\Import;
use Illuminate\Support\Facades\Auth;
use Str;
class ProductCharacteristicsMasterImporter extends Importer
{
protected static ?string $model = ProductCharacteristicsMaster::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('line')
->requiredMapping()
->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')
->requiredMapping()
->exampleHeader('Group Work Center')
->example('RMGCGABC')
->relationship(resolveUsing: 'name')
->rules(['required']),
ImportColumn::make('machine')
->requiredMapping()
->exampleHeader('Work Center')
->example('RMGCE001')
->label('Work Center')
->relationship(resolveUsing: 'work_center')
->rules(['required']),
ImportColumn::make('characteristics_type')
->exampleHeader('Characteristics Type')
->example('Process or Product')
->label('Characteristics Type')
->rules(['required']),
ImportColumn::make('name')
->exampleHeader('Characteristics Name')
->example('Body')
->label('Characteristics Name')
->rules(['required']),
ImportColumn::make('inspection_type')
->exampleHeader('Inspection Type')
->example('Visual or Value')
->label('Inspection Type')
->rules(['required']),
ImportColumn::make('lower')
->exampleHeader('Lower')
->example('-0.2')
->label('Lower')
->rules(['numeric']),
ImportColumn::make('middle')
->exampleHeader('Middle')
->example('1')
->label('Middle')
->numeric()
->rules(['numeric']),
ImportColumn::make('upper')
->exampleHeader('Upper')
->example('0.2')
->label('Upper')
->rules(['numeric']),
ImportColumn::make('created_by')
->exampleHeader('Created By')
->example('Admin')
->label('Created By'),
// ImportColumn::make('updated_by'),
];
}
public function resolveRecord(): ?ProductCharacteristicsMaster
{
$warnMsg = [];
$plantCod = $this->data['plant'];
$plant = 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 {
$itemExists = Item::where('code', $this->data['item'])->first();
if (! $itemExists) {
$warnMsg[] = 'Item not found';
}
$itemAgainstPlant = Item::where('code', $this->data['item'])
->where('plant_id', $plant->id)
->first();
if (! $itemAgainstPlant) {
$warnMsg[] = 'Item code not found for the given plant';
} else {
$itemId = $itemAgainstPlant->id;
}
$lineExists = Line::where('name', $this->data['line'])->first();
if (! $lineExists) {
$warnMsg[] = 'Line not found';
}
$lineAgainstPlant = Line::where('name', $this->data['line'])
->where('plant_id', $plant->id)
->first();
if (! $lineAgainstPlant) {
$warnMsg[] = 'Line not found for the given plant';
} else {
$LineId = $lineAgainstPlant->id;
}
$WorkgroupMaster = WorkGroupMaster::where('name', $this->data['work_group_master_id'])->where('plant_id', $plant->id)->first();
if (! $WorkgroupMaster) {
$warnMsg[] = 'Work Group Master value not found';
} else {
$workGroupMasterId = $WorkgroupMaster->id;
// 2. Now check if this WorkGroupMaster id exists in ANY of the 10 columns
$existsInLine = Line::where('plant_id', $plant->id)
->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;
}
}
$machine = Machine::where('work_center', $this->data['machine'])->first();
if (! $machine) {
$warnMsg[] = 'Work Center not found';
} else {
$machineId = $machine->id;
}
$machineAgainstPlant = Machine::where('work_center', $this->data['machine'])
->where('plant_id', $plant->id)
->first();
if (! $machineAgainstPlant) {
$warnMsg[] = 'Work Center not found for the given plant';
} else {
$machineId = $machineAgainstPlant->id;
}
$user = User::where('name', $this->data['created_by'])->first();
if (! $user) {
$warnMsg[] = 'Operator ID not found';
}
if (($this->data['inspection_type'] ?? null) == 'Value') {
$upper = $this->data['upper'] ?? null;
$lower = $this->data['lower'] ?? null;
$middle = $this->data['middle'] ?? 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.";
}
}
}
}
if (! empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
} else {
$record = ProductCharacteristicsMaster::firstOrNew([
'plant_id' => $plant->id,
'item_id' => $itemId,
'line_id' => $LineId,
'work_group_master_id' => $workGroupMasterId,
'machine_id' => $machineId,
]);
$currentUser = Auth::check() ? Auth::user()->name : ($this->data['created_by'] ?? 'System');
// If record is new, fill all fields
if (! $record->exists) {
$record->name = $this->data['name'];
$record->characteristics_type = $this->data['characteristics_type'];
$record->inspection_type = $this->data['inspection_type'];
$record->upper = $this->data['upper'] ?? null;
$record->lower = $this->data['lower'] ?? null;
$record->middle = $this->data['middle'] ?? null;
$record->created_by = $currentUser;
} else {
// Record exists → update only updated_by and updated_at
$record->updated_by = $currentUser;
$record->touch();
}
$record->save();
return null;
}
// else
// {
// ProductCharacteristicsMaster::updateOrCreate(
// [
// 'plant_id' => $plant->id,
// 'item_id' => $itemId,
// 'line_id' => $LineId,
// 'work_group_master_id' => $workGroupMasterId,
// 'machine_id'=> $machineId,
// ],
// [
// 'name' => $this->data['name'],
// 'characteristics_type' => $this->data['characteristics_type'],
// 'inspection_type' => $this->data['inspection_type'],
// 'upper' => $this->data['upper'] ?? null,
// 'lower' => $this->data['lower'] ?? null,
// 'middle' => $this->data['middle'] ?? null,
// //'created_by' => user ?? $this->data['created_by'],
// 'created_by' => Auth::check() ? Auth::user()->name :($this->data['created_by'] ?? null)
// ]
// );
// return null;
// }
// return new WorkGroupMaster();
// return new ProductCharacteristicsMaster();
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your product characteristics master import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
if ($failedRowsCount = $import->getFailedRowsCount()) {
$body .= ' '.number_format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to import.';
}
return $body;
}
}

View File

@@ -15,7 +15,6 @@ use Filament\Actions\Imports\ImportColumn;
use Filament\Actions\Imports\Importer;
use Filament\Actions\Imports\Models\Import;
use Filament\Facades\Filament;
use Str;
class ProductionLineStopImporter extends Importer
{
@@ -29,7 +28,7 @@ class ProductionLineStopImporter extends Importer
->exampleHeader('From DateTime')
->example(['01-01-2025 00:00:00', '01-01-2025 20:00:00'])
->label('From DateTime')
->rules(['required']), // , 'date_format:"d-m-Y H:i:s"'
->rules(['required']), //, 'date_format:"d-m-Y H:i:s"'
ImportColumn::make('to_datetime')
->requiredMapping()
->exampleHeader('To DateTime')
@@ -46,7 +45,7 @@ class ProductionLineStopImporter extends Importer
ImportColumn::make('stop_min')
->requiredMapping()
->exampleHeader('Stop Min')
->example(['25', '0'])
->example(['25','0'])
->label('Stop Min')
->numeric()
->rules(['required', 'integer']),
@@ -55,14 +54,14 @@ class ProductionLineStopImporter extends Importer
->exampleHeader('Line Stop Code')
->example(['A7R', 'A1R'])
->label('Line Stop Code')
->relationship(resolveUsing: 'code')
->relationship(resolveUsing:'code')
->rules(['required']),
ImportColumn::make('line')
->requiredMapping()
->exampleHeader('Line Name')
->example(['4 inch pump line', '4 inch pump line'])
->label('Line Name')
->relationship(resolveUsing: 'name')
->relationship(resolveUsing:'name')
->rules(['required']),
ImportColumn::make('block_reference')
->requiredMapping() // Or optionalMapping() if not always present
@@ -79,10 +78,10 @@ class ProductionLineStopImporter extends Importer
->rules(['required']),
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('Plant Code')
->example(['1000', '1000'])
->label('Plant Code')
->relationship(resolveUsing: 'code')
->exampleHeader('Plant Name')
->example(['Ransar Industries-I', 'Ransar Industries-I'])
->label('Plant Name')
->relationship(resolveUsing:'name')
->rules(['required']),
ImportColumn::make('operator_id')
->requiredMapping()
@@ -96,62 +95,61 @@ class ProductionLineStopImporter extends Importer
public function resolveRecord(): ?ProductionLineStop
{
$warnMsg = [];
$plantCod = $this->data['plant'];
$plant = null;
$plant = Plant::where('name', $this->data['plant'])->first();
$line = null;
$block = null;
if (!$plant) {
$warnMsg[] = "Plant not found";
}
else {
$line = Line::where('name', $this->data['line'])->where('plant_id', $plant->id)->first();
//block_reference
$block = Block::where('name', $this->data['block_reference'])->where('plant_id', $plant->id)->first();
}
if (!$line) {
$warnMsg[] = "Line not found";
}
$shift = 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 {
$line = Line::where('name', $this->data['line'])->where('plant_id', $plant->id)->first();
// block_reference
$block = Block::where('name', $this->data['block_reference'])->where('plant_id', $plant->id)->first();
}
if (!$block) {
$warnMsg[] = "Block not found";
}
if (! $line) {
$warnMsg[] = 'Line not found';
}
if (! $block) {
$warnMsg[] = 'Block not found';
} elseif ($plant) {
else {
$shift = Shift::where('name', $this->data['shift'])->where('plant_id', $plant->id)->where('block_id', $block->id)->first();
}
// $shift = Shift::where('id', $this->data['shift'])->where('plant_id', $plant->id)->first();
if (! $shift) {
$warnMsg[] = 'Shift not found';
//$shift = Shift::where('id', $this->data['shift'])->where('plant_id', $plant->id)->first();
if (!$shift) {
$warnMsg[] = "Shift not found";
}
$linestop = LineStop::where('code', $this->data['linestop'])->first();
if (! $linestop) {
$warnMsg[] = 'Line stop code not found';
if (!$linestop) {
$warnMsg[] = "Line stop code not found";
}
$stophour = is_numeric($this->data['stop_hour']) && $this->data['stop_hour'] >= 0;
$stopmin = is_numeric($this->data['stop_min']) && $this->data['stop_min'] >= 0 && $this->data['stop_min'] <= 60;
if (! $stophour && ! $stopmin) {
$warnMsg[] = 'Invalid stop hour/minute found';
} elseif (! $stophour) {
$warnMsg[] = 'Invalid stop hour found';
} elseif (! $stopmin) {
$warnMsg[] = 'Invalid stop min found';
} else {
$stophour = (int) $this->data['stop_hour'];
$stopmin = (int) $this->data['stop_min'];
if (!$stophour && !$stopmin) {
$warnMsg[] = "Invalid stop hour/minute found";
}
else if (!$stophour) {
$warnMsg[] = "Invalid stop hour found";
}
else if (!$stopmin) {
$warnMsg[] = "Invalid stop min found";
}
else {
$stophour = (int)$this->data['stop_hour'];
$stopmin = (int)$this->data['stop_min'];
if ($stophour == 0 && $stopmin == 0) {
$warnMsg[] = 'Invalid stop hour/minute found';
$warnMsg[] = "Invalid stop hour/minute found";
}
}
$validHourMin = ($stophour == 0 && $stopmin == 0) ? false : true;
if (! $validHourMin) {
$warnMsg[] = 'Invalid stop hour/minute found';
if (!$validHourMin) {
$warnMsg[] = "Invalid stop hour/minute found";
}
$fromDate = $this->data['from_datetime'];
$toDate = $this->data['to_datetime'];
$formats = ['d-m-Y H:i', 'd-m-Y H:i:s']; // '07-05-2025 08:00' or '07-05-2025 08:00:00'
$formats = ['d-m-Y H:i', 'd-m-Y H:i:s']; //'07-05-2025 08:00' or '07-05-2025 08:00:00'
$fdateTime = null;
$tdateTime = null;
@@ -177,14 +175,14 @@ class ProductionLineStopImporter extends Importer
}
// $fDateOnly = '';
if (! isset($fdateTime)) {
if (!isset($fdateTime)) {
// throw new \Exception('Invalid date time format');
$warnMsg[] = "Invalid 'From DateTime' format. Expected DD-MM-YYYY HH:MM:SS";
}
// else {
// $fDateOnly = $fdateTime->toDateString();
// }
if (! isset($tdateTime)) {
if (!isset($tdateTime)) {
$warnMsg[] = "Invalid 'To DateTime' format. Expected DD-MM-YYYY HH:MM:SS";
}
@@ -202,11 +200,11 @@ class ProductionLineStopImporter extends Importer
// }
$user = User::where('name', $this->data['operator_id'])->first();
if (! $user) {
$warnMsg[] = 'Operator ID not found';
if (!$user) {
$warnMsg[] = "Operator ID not found";
}
if (! empty($warnMsg)) {
if (!empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
}
@@ -215,13 +213,12 @@ class ProductionLineStopImporter extends Importer
'line_id' => $line->id,
'shift_id' => $shift->id,
'linestop_id' => $linestop->id,
'from_datetime' => $fdateTime->format('Y-m-d H:i:s'), // $this->data['from_datetime'],
'to_datetime' => $tdateTime->format('Y-m-d H:i:s'), // $this->data['to_datetime'],
'stop_hour' => (int) $this->data['stop_hour'],
'stop_min' => (int) $this->data['stop_min'],
'from_datetime' => $fdateTime->format('Y-m-d H:i:s'),//$this->data['from_datetime'],
'to_datetime' => $tdateTime->format('Y-m-d H:i:s'),//$this->data['to_datetime'],
'stop_hour' => (int)$this->data['stop_hour'],
'stop_min' => (int)$this->data['stop_min'],
'operator_id' => $this->data['operator_id'],
]);
return null;
// return ProductionLineStop::firstOrNew([
// // Update existing records, matching them by `$this->data['column_name']`
@@ -233,10 +230,10 @@ class ProductionLineStopImporter extends Importer
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your production line stop import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your production line stop 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -48,7 +48,7 @@ class ProductionPlanImporter extends Importer
->exampleHeader('Line Name')
->example(['4 inch pump line', '4 inch pump line'])
->label('Line Name')
->relationship(resolveUsing: 'name')
->relationship(resolveUsing:'name')
->rules(['required']),
ImportColumn::make('block_reference')
->requiredMapping() // Or optionalMapping() if not always present
@@ -58,17 +58,17 @@ class ProductionPlanImporter extends Importer
->rules(['required']), // Or remove if not required
ImportColumn::make('shift')
->requiredMapping()
->exampleHeader('Shift Name') // ID
->example(['Day', 'Night']) // '2', '7'
->exampleHeader('Shift Name') //ID
->example(['Day', 'Night']) //'2', '7'
->label('Shift Name') // ID
->relationship(resolveUsing: 'name')
->rules(['required']),
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('Plant Code')
->example(['1000', '1000'])
->label('Plant Code')
->relationship(resolveUsing: 'code')
->exampleHeader('Plant Name')
->example(['Ransar Industries-I', 'Ransar Industries-I'])
->label('Plant Name')
->relationship(resolveUsing:'name')
->rules(['required']),
ImportColumn::make('updated_at')
->requiredMapping()
@@ -88,51 +88,42 @@ class ProductionPlanImporter extends Importer
public function resolveRecord(): ?ProductionPlan
{
$warnMsg = [];
$plantCod = $this->data['plant'];
$plant = null;
$plant = Plant::where('name', $this->data['plant'])->first();
$line = null;
$block = 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";
}
if (! $plant) {
$warnMsg[] = 'Plant not found';
} else {
else {
$line = Line::where('name', $this->data['line'])->where('plant_id', $plant->id)->first();
// block_reference
//block_reference
$block = Block::where('name', $this->data['block_reference'])->where('plant_id', $plant->id)->first();
}
if (! $line) {
$warnMsg[] = 'Line not found';
if (!$line) {
$warnMsg[] = "Line not found";
}
$shift = null;
if (! $block) {
$warnMsg[] = 'Block not found';
} elseif ($plant) {
if (!$block) {
$warnMsg[] = "Block not found";
}
else {
$shift = Shift::where('name', $this->data['shift'])->where('plant_id', $plant->id)->where('block_id', $block->id)->first();
}
// $shift = Shift::where('id', $this->data['shift'])->where('plant_id', $plant->id)->first();
if (! $shift) {
$warnMsg[] = 'Shift not found';
//$shift = Shift::where('id', $this->data['shift'])->where('plant_id', $plant->id)->first();
if (!$shift) {
$warnMsg[] = "Shift not found";
}
if (Str::length($this->data['plan_quantity']) < 0 || ! is_numeric($this->data['plan_quantity']) || $this->data['plan_quantity'] <= 0) {
$warnMsg[] = 'Invalid plan quantity found';
if (Str::length($this->data['plan_quantity']) < 0 || !is_numeric($this->data['plan_quantity']) || $this->data['plan_quantity'] <= 0) {
$warnMsg[] = "Invalid plan quantity found";
}
if (Str::length($this->data['production_quantity']) < 0 || ! is_numeric($this->data['production_quantity']) || $this->data['production_quantity'] < 0) {
$warnMsg[] = 'Invalid production quantity found';
if (Str::length($this->data['production_quantity']) < 0 || !is_numeric($this->data['production_quantity']) || $this->data['production_quantity'] < 0) {
$warnMsg[] = "Invalid production quantity found";
}
$fromDate = $this->data['created_at'];
$toDate = $this->data['updated_at'];
$formats = ['d-m-Y H:i', 'd-m-Y H:i:s']; // '07-05-2025 08:00' or '07-05-2025 08:00:00'
$formats = ['d-m-Y H:i', 'd-m-Y H:i:s']; //'07-05-2025 08:00' or '07-05-2025 08:00:00'
$fdateTime = null;
$tdateTime = null;
@@ -158,13 +149,14 @@ class ProductionPlanImporter extends Importer
}
$fDateOnly = '';
if (! isset($fdateTime)) {
if (!isset($fdateTime)) {
// throw new \Exception('Invalid date time format');
$warnMsg[] = "Invalid 'Created DateTime' format. Expected DD-MM-YYYY HH:MM:SS";
} else {
}
else {
$fDateOnly = $fdateTime->toDateString();
}
if (! isset($tdateTime)) {
if (!isset($tdateTime)) {
$warnMsg[] = "Invalid 'Updated DateTime' format. Expected DD-MM-YYYY HH:MM:SS";
}
@@ -182,20 +174,21 @@ class ProductionPlanImporter extends Importer
// }
$user = User::where('name', $this->data['operator_id'])->first();
if (! $user) {
$warnMsg[] = 'Operator ID not found';
if (!$user) {
$warnMsg[] = "Operator ID not found";
}
if (! empty($warnMsg)) {
if (!empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
} else { // if (empty($warnMsg))
}
else { //if (empty($warnMsg))
$productionPlan = ProductionPlan::where('plant_id', $plant->id)
->where('shift_id', $shift->id)
->where('line_id', $line->id)
->whereDate('created_at', $fDateOnly)
->where('shift_id', $shift->id)
->where('line_id', $line->id)
->whereDate('created_at', $fDateOnly)
// ->where('plan_quantity', $productionQuantity->plan_quantity)
->latest()
->first();
->latest()
->first();
if ($productionPlan) {
// if($productionPlan->production_quantity)
@@ -212,7 +205,6 @@ class ProductionPlanImporter extends Importer
'operator_id' => $this->data['operator_id'],
]);
$productionPlan->save();
return null;
}
}
@@ -223,11 +215,10 @@ class ProductionPlanImporter extends Importer
'shift_id' => $shift->id,
'plan_quantity' => $this->data['plan_quantity'],
'production_quantity' => $this->data['production_quantity'],
'created_at' => $fdateTime->format('Y-m-d H:i:s'), // $this->data['created_at'],
'updated_at' => $tdateTime->format('Y-m-d H:i:s'), // $this->data['updated_at'],
'created_at' => $fdateTime->format('Y-m-d H:i:s'),//$this->data['created_at'],
'updated_at' => $tdateTime->format('Y-m-d H:i:s'),//$this->data['updated_at'],
'operator_id' => $this->data['operator_id'],
]);
return null;
// return ProductionPlan::firstOrNew([
// // Update existing records, matching them by `$this->data['column_name']`
@@ -239,10 +230,10 @@ class ProductionPlanImporter extends Importer
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your production plan import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your production plan 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -42,7 +42,7 @@ class ProductionQuantityImporter extends Importer
->exampleHeader('Item Code')
->example(['123456', '123456'])
->label('Item Code')
->relationship(resolveUsing: 'code')
->relationship(resolveUsing:'code')
->rules(['required']),
ImportColumn::make('serial_number')
->requiredMapping()
@@ -55,27 +55,27 @@ class ProductionQuantityImporter extends Importer
->exampleHeader('Line Name')
->example(['4 inch pump line', '4 inch pump line'])
->label('Line Name')
->relationship(resolveUsing: 'name')
->relationship(resolveUsing:'name')
->rules(['required']),
ImportColumn::make('block_reference')
->requiredMapping() // Or optionalMapping() if not always present
->exampleHeader('Block Name')
->exampleHeader('Block')
->example(['Block A', 'Block A'])
->label('Block Name')
->label('Block')
->rules(['required']), // Or remove if not required
ImportColumn::make('shift')
->requiredMapping()
->exampleHeader('Shift Name')
->example(['Day', 'Night'])
->label('Shift Name')
->relationship(resolveUsing: 'name')
->relationship(resolveUsing:'name')
->rules(['required']),
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('Plant Code')
->example(['1000', '1000'])
->label('Plant Code')
->relationship(resolveUsing: 'code')
->exampleHeader('Plant Name')
->example(['Ransar Industries-I', 'Ransar Industries-I'])
->label('Plant Name')
->relationship(resolveUsing:'name')
->rules(['required']),
ImportColumn::make('updated_at')
->requiredMapping()
@@ -95,57 +95,49 @@ class ProductionQuantityImporter extends Importer
public function resolveRecord(): ?ProductionQuantity
{
$warnMsg = [];
$plantCod = $this->data['plant'];
$plant = null;
$plant = Plant::where('name', $this->data['plant'])->first();
$line = null;
$block = null;
$shift = 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";
}
if (! $plant) {
$warnMsg[] = 'Plant not found';
} else {
else {
$line = Line::where('name', $this->data['line'])->where('plant_id', $plant->id)->first();
// block_reference
//block_reference
$block = Block::where('name', $this->data['block_reference'])->where('plant_id', $plant->id)->first();
}
if (! $line) {
$warnMsg[] = 'Line not found';
if (!$line) {
$warnMsg[] = "Line not found";
}
if (! $block) {
$warnMsg[] = 'Block not found';
} elseif ($plant) {
$shift = null;
if (!$block) {
$warnMsg[] = "Block not found";
}
else {
$shift = Shift::where('name', $this->data['shift'])->where('plant_id', $plant->id)->where('block_id', $block->id)->first();
}
// $shift = Shift::where('id', $this->data['shift'])->where('plant_id', $plant->id)->first();
if (! $shift) {
$warnMsg[] = 'Shift not found';
//$shift = Shift::where('id', $this->data['shift'])->where('plant_id', $plant->id)->first();
if (!$shift) {
$warnMsg[] = "Shift not found";
}
$item = null;
if ($plant) {
$item = Item::where('code', $this->data['item'])->where('plant_id', $plant->id)->first();
}
if (! $item) {
$warnMsg[] = 'Item not found';
if (!$item) {
$warnMsg[] = "Item not found";
}
if (Str::length($this->data['serial_number']) < 9 || ! ctype_alnum($this->data['serial_number'])) {
$warnMsg[] = 'Invalid serial number found';
if (Str::length($this->data['serial_number']) < 9 || !ctype_alnum($this->data['serial_number'])) {
$warnMsg[] = "Invalid serial number found";
}
if (Str::length($this->data['production_order']) > 0 && (Str::length($this->data['production_order']) < 7 || Str::length($this->data['production_order']) > 14 || ! is_numeric($this->data['production_order']))) {
$warnMsg[] = 'Invalid production order found';
if (Str::length($this->data['production_order']) > 0 && (Str::length($this->data['production_order']) < 7 || Str::length($this->data['production_order']) > 14 || !is_numeric($this->data['production_order']))) {
$warnMsg[] = "Invalid production order found";
}
$fromDate = $this->data['created_at'];
$toDate = $this->data['updated_at'];
$formats = ['d-m-Y H:i', 'd-m-Y H:i:s']; // '07-05-2025 08:00' or '07-05-2025 08:00:00'
$formats = ['d-m-Y H:i', 'd-m-Y H:i:s']; //'07-05-2025 08:00' or '07-05-2025 08:00:00'
$fdateTime = null;
$tdateTime = null;
@@ -171,14 +163,14 @@ class ProductionQuantityImporter extends Importer
}
// $fDateOnly = '';
if (! isset($fdateTime)) {
if (!isset($fdateTime)) {
// throw new \Exception('Invalid date time format');
$warnMsg[] = "Invalid 'Created DateTime' format. Expected DD-MM-YYYY HH:MM:SS";
}
// else {
// $fDateOnly = $fdateTime->toDateString();
// }
if (! isset($tdateTime)) {
if (!isset($tdateTime)) {
$warnMsg[] = "Invalid 'Updated DateTime' format. Expected DD-MM-YYYY HH:MM:SS";
}
@@ -195,20 +187,21 @@ class ProductionQuantityImporter extends Importer
// }
$user = User::where('name', $this->data['operator_id'])->first();
if (! $user) {
$warnMsg[] = 'Operator ID not found';
if (!$user) {
$warnMsg[] = "Operator ID not found";
}
if (! empty($warnMsg)) {
if (!empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
} else { // if (empty($warnMsg))
}
else { //if (empty($warnMsg))
$productionQuan = ProductionQuantity::where('plant_id', $plant->id)
->where('serial_number', $this->data['serial_number'])
->latest()
->first();
->where('serial_number', $this->data['serial_number'])
->latest()
->first();
if ($productionQuan) {
throw new RowImportFailedException('Serial number already exist!');
throw new RowImportFailedException("Serial number already exist!");
}
}
@@ -219,11 +212,10 @@ class ProductionQuantityImporter extends Importer
'line_id' => $line->id,
'item_id' => $item->id,
'production_order' => $this->data['production_order'] ?? null,
'created_at' => $fdateTime->format('Y-m-d H:i:s'), // $this->data['created_at'],
'updated_at' => $tdateTime->format('Y-m-d H:i:s'), // $this->data['updated_at'],
'created_at' => $fdateTime->format('Y-m-d H:i:s'),//$this->data['created_at'],
'updated_at' => $tdateTime->format('Y-m-d H:i:s'),//$this->data['updated_at'],
'operator_id' => $this->data['operator_id'],
]);
// ProductionQuantity::updateOrCreate([
// 'serial_number' => $this->data['serial_number'],
// 'plant_id' => $plant->id,
@@ -244,10 +236,10 @@ class ProductionQuantityImporter extends Importer
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your production quantity import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your production quantity 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;
@@ -267,7 +259,7 @@ class ProductionQuantityImporter extends Importer
'line_id' => $this->resolveLineId($row['line']),
'shift_id' => $this->resolveShiftId($row['shift']),
'plant_id' => $this->resolvePlantId($row['plant']),
'updated_at' => $row['updated_at'],
'updated_at' => $row['updated_at']
]);
} finally {
// Always disable flag even if errors occur

View File

@@ -14,6 +14,7 @@ use Filament\Actions\Imports\ImportColumn;
use Filament\Actions\Imports\Importer;
use Filament\Actions\Imports\Models\Import;
use Filament\Facades\Filament;
use Illuminate\Validation\Rule;
use Str;
class QualityValidationImporter extends Importer
@@ -34,16 +35,16 @@ class QualityValidationImporter extends Importer
->exampleHeader('Item Code')
->example('123456')
->label('Item Code'),
// ->relationship(
// name: 'stickerMaster',
// resolveUsing: function ($state) {
// $state = trim($state);
// $item = Item::where('code', $state)->first();
// return $item
// ? StickerMaster::where('item_id', $item->id)->value('id')
// : null;
// }
// ),
// ->relationship(
// name: 'stickerMaster',
// resolveUsing: function ($state) {
// $state = trim($state);
// $item = Item::where('code', $state)->first();
// return $item
// ? StickerMaster::where('item_id', $item->id)->value('id')
// : null;
// }
// ),
ImportColumn::make('production_order')
->requiredMapping()
->exampleHeader('Production Order')
@@ -100,11 +101,6 @@ class QualityValidationImporter extends Importer
->exampleHeader('Name Plate PumpSet')
->example('1')
->label('Name Plate PumpSet'),
ImportColumn::make('warranty_card')
->requiredMapping()
->exampleHeader('Warranty Card')
->example('1')
->label('Warranty Card'),
ImportColumn::make('tube_sticker_motor')
->requiredMapping()
->exampleHeader('Tube Sticker Motor')
@@ -120,6 +116,11 @@ class QualityValidationImporter extends Importer
->exampleHeader('Tube Sticker PumpSet')
->example('1')
->label('Tube Sticker PumpSet'),
ImportColumn::make('warranty_card')
->requiredMapping()
->exampleHeader('Warranty Card')
->example('1')
->label('Warranty Card'),
ImportColumn::make('part_validation1')
->requiredMapping()
->exampleHeader('Part Validation 1')
@@ -155,14 +156,14 @@ class QualityValidationImporter extends Importer
->exampleHeader('Line Name')
->example('4 inch pump line')
->label('Line Name')
->relationship(resolveUsing: 'name')
->relationship(resolveUsing:'name')
->rules(['required']),
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('Plant Code')
->example('1000')
->label('Plant Code')
->relationship(resolveUsing: 'code')
->exampleHeader('Plant Name')
->example('Ransar Industries-I')
->label('Plant Name')
->relationship(resolveUsing:'name')
->rules(['required']),
ImportColumn::make('updated_at')
->requiredMapping()
@@ -182,41 +183,35 @@ class QualityValidationImporter extends Importer
public function resolveRecord(): ?QualityValidation
{
$warnMsg = [];
$plantCod = $this->data['plant'];
$plant = null;
$plant = Plant::where('name', $this->data['plant'])->first();
$line = null;
$stickMaster = 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";
}
if (! $plant) {
$warnMsg[] = 'Plant not found';
} else {
else {
$line = Line::where('name', $this->data['line'])->where('plant_id', $plant->id)->first();
$uniqueCode = trim($this->data['sticker_master_id_code']); // stickerMaster.item
$uniqueCode = trim($this->data['sticker_master_id_code']);// stickerMaster.item
$stickMaster = StickerMaster::select('id')->with('item')
->whereHas('item', function ($query) use ($uniqueCode, $plant) {
$query->where('code', $uniqueCode)->where('plant_id', $plant->id);
})->value('id');
}
if (! $line) {
$warnMsg[] = 'Line not found';
if (!$line) {
$warnMsg[] = "Line not found";
}
if (! $stickMaster) {
$warnMsg[] = 'Sticker item code not found';
if (!$stickMaster) {
$warnMsg[] = "Sticker item code not found";
}
if (! is_numeric($this->data['production_order']) || Str::length($this->data['production_order']) < 7 || Str::length($this->data['production_order']) > 14) {
$warnMsg[] = 'Invalid production order found';
if (!is_numeric($this->data['production_order']) || Str::length($this->data['production_order']) < 7 || Str::length($this->data['production_order']) > 14) {
$warnMsg[] = "Invalid production order found";
}
if (! ctype_alnum($this->data['serial_number']) || Str::length($this->data['serial_number']) < 9) {
$warnMsg[] = 'Invalid serial number found';
if (!ctype_alnum($this->data['serial_number']) || Str::length($this->data['serial_number']) < 9) {
$warnMsg[] = "Invalid serial number found";
}
// dd($stickMaster);
@@ -225,13 +220,13 @@ class QualityValidationImporter extends Importer
// }
$user = User::where('name', $this->data['operator_id'])->first();
if (! $user) {
$warnMsg[] = 'Operator ID not found';
if (!$user) {
$warnMsg[] = "Operator ID not found";
}
$fromDate = $this->data['created_at'];
$toDate = $this->data['updated_at'];
$formats = ['d-m-Y H:i', 'd-m-Y H:i:s']; // '07-05-2025 08:00' or '07-05-2025 08:00:00'
$formats = ['d-m-Y H:i', 'd-m-Y H:i:s']; //'07-05-2025 08:00' or '07-05-2025 08:00:00'
$fdateTime = null;
$tdateTime = null;
@@ -257,14 +252,14 @@ class QualityValidationImporter extends Importer
}
// $fDateOnly = '';
if (! isset($fdateTime)) {
if (!isset($fdateTime)) {
// throw new \Exception('Invalid date time format');
$warnMsg[] = "Invalid 'Created DateTime' format. Expected DD-MM-YYYY HH:MM:SS";
}
// else {
// $fDateOnly = $fdateTime->toDateString();
// }
if (! isset($tdateTime)) {
if (!isset($tdateTime)) {
$warnMsg[] = "Invalid 'Updated DateTime' format. Expected DD-MM-YYYY HH:MM:SS";
}
@@ -280,41 +275,41 @@ class QualityValidationImporter extends Importer
// $warnMsg[] = "Invalid 'Updated DateTime' format. Expected DD-MM-YYYY HH:MM:SS";
// }
if (! empty($warnMsg)) {
if (!empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
}
QualityValidation::updateOrCreate([
'plant_id' => $plant->id,
'sticker_master_id' => $stickMaster, // ->id
'serial_number' => $this->data['serial_number'],
'sticker_master_id' => $stickMaster,//->id
'serial_number' => $this->data['serial_number']
],
[
'line_id' => $line->id,
'uom' => $this->data['uom'],
'production_order' => $this->data['production_order'],
'serial_number_motor' => $this->data['serial_number_motor'],
'serial_number_pump' => $this->data['serial_number_pump'],
'serial_number_pumpset' => $this->data['serial_number_pumpset'],
'pack_slip_motor' => $this->data['pack_slip_motor'],
'pack_slip_pump' => $this->data['pack_slip_pump'],
'pack_slip_pumpset' => $this->data['pack_slip_pumpset'],
'name_plate_motor' => $this->data['name_plate_motor'],
'name_plate_pump' => $this->data['name_plate_pump'],
'name_plate_pumpset' => $this->data['name_plate_pumpset'],
'tube_sticker_motor' => $this->data['tube_sticker_motor'],
'tube_sticker_pump' => $this->data['tube_sticker_pump'],
'tube_sticker_pumpset' => $this->data['tube_sticker_pumpset'],
'warranty_card' => $this->data['warranty_card'],
'part_validation1' => $this->data['part_validation1'],
'part_validation2' => $this->data['part_validation2'],
'part_validation3' => $this->data['part_validation3'],
'part_validation4' => $this->data['part_validation4'],
'part_validation5' => $this->data['part_validation5'],
'created_at' => $fdateTime->format('Y-m-d H:i:s'), // $this->data['created_at'],
'updated_at' => $tdateTime->format('Y-m-d H:i:s'), // $this->data['updated_at'],
'operator_id' => $this->data['operator_id'],
]);
[
'line_id' => $line->id,
'uom' => $this->data['uom'],
'production_order' => $this->data['production_order'],
'serial_number_motor' => $this->data['serial_number_motor'],
'serial_number_pump' => $this->data['serial_number_pump'],
'serial_number_pumpset' => $this->data['serial_number_pumpset'],
'pack_slip_motor' => $this->data['pack_slip_motor'],
'pack_slip_pump' => $this->data['pack_slip_pump'],
'pack_slip_pumpset' => $this->data['pack_slip_pumpset'],
'name_plate_motor' => $this->data['name_plate_motor'],
'name_plate_pump' => $this->data['name_plate_pump'],
'name_plate_pumpset' => $this->data['name_plate_pumpset'],
'tube_sticker_motor' => $this->data['tube_sticker_motor'],
'tube_sticker_pump' => $this->data['tube_sticker_pump'],
'tube_sticker_pumpset' => $this->data['tube_sticker_pumpset'],
'warranty_card' => $this->data['warranty_card'],
'part_validation1' => $this->data['part_validation1'],
'part_validation2' => $this->data['part_validation2'],
'part_validation3' => $this->data['part_validation3'],
'part_validation4' => $this->data['part_validation4'],
'part_validation5' => $this->data['part_validation5'],
'created_at' => $fdateTime->format('Y-m-d H:i:s'),//$this->data['created_at'],
'updated_at' => $tdateTime->format('Y-m-d H:i:s'),//$this->data['updated_at'],
'operator_id' => $this->data['operator_id'],
]);
return null;
// return QualityValidation::firstOrNew([
@@ -327,10 +322,10 @@ class QualityValidationImporter extends Importer
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your quality validation import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your quality 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -134,51 +134,55 @@ class ReworkLocatorInvoiceValidationImporter extends Importer
$updatedBy = $this->data['updated_by'];
$reworkedBy = $this->data['reworked_by'];
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 {
if (Str::length($invoiceNo) < 5 || ! ctype_alnum($invoiceNo)) {
$warnMsg[] = 'Invalid invoice number found';
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', $this->data['plant'])->first();
if (!$plant) {
$warnMsg[] = "Plant not found";
}
else
{
if (Str::length($invoiceNo) < 5 || !ctype_alnum($invoiceNo)) {
$warnMsg[] = "Invalid invoice number found";
}
if (Str::length($serialNo) < 9 || Str::length($serialNo) > 20 || ! ctype_alnum($serialNo)) {
$warnMsg[] = 'Invalid serial number found';
if (Str::length($serialNo) < 9 || Str::length($serialNo) > 20 || !ctype_alnum($serialNo)) {
$warnMsg[] = "Invalid serial number found";
}
if (Str::length($palletNo) > 0 && Str::length($palletNo) < 10) {
$warnMsg[] = 'Invalid pallet number found';
$warnMsg[] = "Invalid pallet number found";
}
if (Str::length($locatorNo) > 0 && Str::length($locatorNo) < 7) {
$warnMsg[] = 'Invalid locator number found';
$warnMsg[] = "Invalid locator number found";
}
if ($scannedStat != 'Scanned') {
$warnMsg[] = 'Invalid scanned status found';
$warnMsg[] = "Invalid scanned status found";
}
if ($uploadStat != 'Y' && $uploadStat != 'N') {
$warnMsg[] = 'Invalid upload status found';
$warnMsg[] = "Invalid upload status found";
}
$created = User::where('name', $createdBy)->first();
if (! $created) {
$warnMsg[] = 'Created by not found';
if (!$created) {
$warnMsg[] = "Created by not found";
}
$scanned = User::where('name', $scannedBy)->first();
if (! $scanned) {
$warnMsg[] = 'Scanned by not found';
if (!$scanned) {
$warnMsg[] = "Scanned by not found";
}
if (Str::length($updatedBy) > 0) {
$updated = User::where('name', $updatedBy)->first();
if (! $updated) {
$warnMsg[] = 'Updated by not found';
if (!$updated) {
$warnMsg[] = "Updated by not found";
}
}
$reworked = User::where('name', $reworkedBy)->first();
if (! $reworked) {
$warnMsg[] = 'Reworked by not found';
if (!$reworked) {
$warnMsg[] = "Reworked by not found";
}
$formats = ['d-m-Y H:i', 'd-m-Y H:i:s']; // '07-05-2025 08:00' or '07-05-2025 08:00:00'
$formats = ['d-m-Y H:i', 'd-m-Y H:i:s']; //'07-05-2025 08:00' or '07-05-2025 08:00:00'
foreach ($formats as $format) {
try {
@@ -190,7 +194,7 @@ class ReworkLocatorInvoiceValidationImporter extends Importer
}
}
if (! isset($cDateTime)) {
if (!isset($cDateTime)) {
// throw new \Exception('Invalid date time format');
$warnMsg[] = "Invalid 'Created DateTime' format. Expected DD-MM-YYYY HH:MM:SS";
}
@@ -205,7 +209,7 @@ class ReworkLocatorInvoiceValidationImporter extends Importer
}
}
if (! isset($sDateTime)) {
if (!isset($sDateTime)) {
$warnMsg[] = "Invalid 'Scanned DateTime' format. Expected DD-MM-YYYY HH:MM:SS";
}
@@ -219,9 +223,11 @@ class ReworkLocatorInvoiceValidationImporter extends Importer
}
}
if (! isset($uDateTime)) {
if (!isset($uDateTime)) {
$warnMsg[] = "Invalid 'Updated DateTime' format. Expected DD-MM-YYYY HH:MM:SS";
} else {
}
else
{
if (isset($cDateTime) && isset($uDateTime)) {
if ($cDateTime->greaterThan($uDateTime)) {
$warnMsg[] = "'Created DataTime' is greater than 'Updated DateTime'.";
@@ -239,9 +245,11 @@ class ReworkLocatorInvoiceValidationImporter extends Importer
}
}
if (! isset($rDateTime)) {
if (!isset($rDateTime)) {
$warnMsg[] = "Invalid 'Reworked DateTime' format. Expected DD-MM-YYYY HH:MM:SS";
} else {
}
else
{
if (isset($cDateTime) && isset($rDateTime)) {
if ($cDateTime->greaterThan($rDateTime)) {
$warnMsg[] = "'Created DataTime' is greater than 'Reworked DateTime'.";
@@ -252,10 +260,10 @@ class ReworkLocatorInvoiceValidationImporter extends Importer
}
// if (!is_numeric($locatorQuantity) || $locatorQuantity < 0 || $locatorQuantity > 2) {
// $warnMsg[] = "Invalid locator quantity found";
// $warnMsg[] = "Invalid locator quantity found";
// }
if (! empty($warnMsg)) {
if (!empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
}
@@ -275,11 +283,10 @@ class ReworkLocatorInvoiceValidationImporter extends Importer
'created_by' => $createdBy,
'scanned_by' => $scannedBy,
'updated_by' => $updatedBy,
'reworked_by' => $reworkedBy,
]
);
return null;
'reworked_by' => $reworkedBy
]
);
return null;
// // return ReworkLocatorInvoiceValidation::firstOrNew([
// // // Update existing records, matching them by `$this->data['column_name']`
// // 'email' => $this->data['email'],
@@ -290,10 +297,10 @@ class ReworkLocatorInvoiceValidationImporter extends Importer
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your rework locator invoice validation import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your rework locator 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -18,89 +18,79 @@ class ShiftImporter extends Importer
public static function getColumns(): array
{
return [
ImportColumn::make('name')
->requiredMapping()
->exampleHeader('Shift Name')
->example('Day')
->label('Shift Name')
->rules(['required']),
ImportColumn::make('start_time')
->requiredMapping()
->exampleHeader('Start Time')
->example('08:00:00')
->label('Start Time')
->rules(['required']),
ImportColumn::make('duration')
->requiredMapping()
->numeric()
->exampleHeader('Shift Duration')
->example('11.30')
->label('Shift Duration')
->rules(['required']),
ImportColumn::make('end_time')
->requiredMapping()
->exampleHeader('End Time')
->example('19:30:00')
->label('End Time')
->rules(['required']),
ImportColumn::make('block')
->requiredMapping()
->exampleHeader('Block Name')
->example('Block A')
->label('Block Name')
->relationship(resolveUsing: 'name')
->rules(['required']),
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('Plant Code')
->example('1000')
->label('Plant Code')
->relationship(resolveUsing: 'code')
->rules(['required']),
ImportColumn::make('status')
->requiredMapping()
->exampleHeader('Active Status')
->example('Active')
->label('Active Status')
->rules(['required']),
ImportColumn::make('name')
->requiredMapping()
->exampleHeader('Shift Name')
->example('Day')
->label('Shift Name')
->rules(['required']),
ImportColumn::make('start_time')
->requiredMapping()
->exampleHeader('Start Time')
->example('08:00:00')
->label('Start Time')
->rules(['required']),
ImportColumn::make('duration')
->requiredMapping()
->numeric()
->exampleHeader('Shift Duration')
->example('11.30')
->label('Shift Duration')
->rules(['required']),
ImportColumn::make('end_time')
->requiredMapping()
->exampleHeader('End Time')
->example('19:30:00')
->label('End Time')
->rules(['required']),
ImportColumn::make('block')
->requiredMapping()
->exampleHeader('Block Name')
->example('Block A')
->label('Block Name')
->relationship(resolveUsing:'name')
->rules(['required']),
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('Plant Name')
->example('Ransar Industries-I')
->label('Plant Name')
->relationship(resolveUsing:'name')
->rules(['required']),
ImportColumn::make('status')
->requiredMapping()
->exampleHeader('Active Status')
->example('Active')
->label('Active Status')
->rules(['required']),
];
}
public function resolveRecord(): ?Shift
{
$warnMsg = [];
$plantCod = $this->data['plant'];
$plant = null;
$block = 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();
$plant = Plant::where('name', $this->data['plant'])->first();
if (!$plant) {
$warnMsg[] = "Plant not found";
}
if (! $plant) {
$warnMsg[] = 'Plant not found';
} else {
$block = Block::where('name', $this->data['block'])->where('plant_id', $plant->id)->first();
$block = Block::where('name', $this->data['block'])->where('plant_id', $plant->id)->first();
if (!$block) {
$warnMsg[] = "Block not found";
}
if (! $block) {
$warnMsg[] = 'Block not found';
}
if (Str::length($this->data['duration']) < 0 || ! is_numeric($this->data['duration'])) {
$warnMsg[] = 'Invalid duration found';
if (Str::length($this->data['duration']) < 0 || !is_numeric($this->data['duration'])) {
$warnMsg[] = "Invalid duration found";
}
if (Str::length($this->data['start_time']) < 0) {
$warnMsg[] = 'Invalid start time found';
$warnMsg[] = "Invalid start time found";
}
if (Str::length($this->data['end_time']) < 0) {
$warnMsg[] = 'Invalid end time found';
$warnMsg[] = "Invalid end time found";
}
if (Str::length($this->data['status']) < 0 || $this->data['status'] != 'Active') {
$warnMsg[] = 'Invalid shift status found';
$warnMsg[] = "Invalid shift status found";
}
if (! empty($warnMsg)) {
if (!empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
}
@@ -115,9 +105,8 @@ class ShiftImporter extends Importer
'start_time' => $this->data['start_time'],
'duration' => $this->data['duration'],
'end_time' => $this->data['end_time'],
'status' => $this->data['status'],
'status' => $this->data['status']
]);
return $shift;
} else {
// Safe to create new
@@ -128,7 +117,7 @@ class ShiftImporter extends Importer
'start_time' => $this->data['start_time'],
'duration' => $this->data['duration'],
'end_time' => $this->data['end_time'],
'status' => $this->data['status'],
'status' => $this->data['status']
]);
}
// return Shift::firstOrNew([
@@ -141,10 +130,10 @@ class ShiftImporter extends Importer
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your shift import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your shift 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -151,10 +151,10 @@ class StickerMasterImporter extends Importer
->example(''),
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('Plant Code')
->example('1000')
->label('PLANT CODE')
->relationship(resolveUsing: 'code')
->exampleHeader('Plant Name')
->example('Ransar Industries-I')
->label('PLANT NAME')
->relationship(resolveUsing: 'name')
->rules(['required']),
];
}
@@ -162,111 +162,107 @@ class StickerMasterImporter extends Importer
public function resolveRecord(): ?StickerMaster
{
$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();
$plant = Plant::where('name', $this->data['plant'])->first();
if (!$plant) {
$warnMsg[] = "Plant not found";
}
if (! $plant) {
$warnMsg[] = 'Plant not found';
} else {
else
{
$item = Item::where('code', $this->data['item'])->where('plant_id', $plant->id)->first();
if (! $item) {
$warnMsg[] = 'Item code not found';
} else {
if (!$item) {
$warnMsg[] = "Item code not found";
}
else
{
if (Str::length($this->data['serial_number_motor']) > 0 && $this->data['serial_number_motor'] != '1') {
$warnMsg[] = 'Serial number motor must be 1 or empty';
$warnMsg[] = "Serial number motor must be 1 or empty";
}
if (Str::length($this->data['serial_number_pump']) > 0 && $this->data['serial_number_pump'] != '1') {
$warnMsg[] = 'Serial number pump must be 1 or empty';
$warnMsg[] = "Serial number pump must be 1 or empty";
}
if (Str::length($this->data['serial_number_pumpset']) > 0 && $this->data['serial_number_pumpset'] != '1') {
$warnMsg[] = 'Serial number pumpset must be 1 or empty';
$warnMsg[] = "Serial number pumpset must be 1 or empty";
}
if (Str::length($this->data['pack_slip_motor']) > 0 && $this->data['pack_slip_motor'] != '1') {
$warnMsg[] = 'Pack slip motor must be 1 or empty';
$warnMsg[] = "Pack slip motor must be 1 or empty";
}
if (Str::length($this->data['pack_slip_pump']) > 0 && $this->data['pack_slip_pump'] != '1') {
$warnMsg[] = 'Pack slip pump must be 1 or empty';
$warnMsg[] = "Pack slip pump must be 1 or empty";
}
if (Str::length($this->data['pack_slip_pumpset']) > 0 && $this->data['pack_slip_pumpset'] != '1') {
$warnMsg[] = 'Pack slip pumpset must be 1 or empty';
$warnMsg[] = "Pack slip pumpset must be 1 or empty";
}
if (Str::length($this->data['name_plate_motor']) > 0 && $this->data['name_plate_motor'] != '1') {
$warnMsg[] = 'Name plate motor must be 1 or empty';
$warnMsg[] = "Name plate motor must be 1 or empty";
}
if (Str::length($this->data['name_plate_pump']) > 0 && $this->data['name_plate_pump'] != '1') {
$warnMsg[] = 'Name plate pump must be 1 or empty';
$warnMsg[] = "Name plate pump must be 1 or empty";
}
if (Str::length($this->data['name_plate_pumpset']) > 0 && $this->data['name_plate_pumpset'] != '1') {
$warnMsg[] = 'Name plate pumpset must be 1 or empty';
$warnMsg[] = "Name plate pumpset must be 1 or empty";
}
if (Str::length($this->data['tube_sticker_motor']) > 0 && $this->data['tube_sticker_motor'] != '1') {
$warnMsg[] = 'Tube sticker motor must be 1 or empty';
$warnMsg[] = "Tube sticker motor must be 1 or empty";
}
if (Str::length($this->data['tube_sticker_pump']) > 0 && $this->data['tube_sticker_pump'] != '1') {
$warnMsg[] = 'Tube sticker pump must be 1 or empty';
$warnMsg[] = "Tube sticker pump must be 1 or empty";
}
if (Str::length($this->data['tube_sticker_pumpset']) > 0 && $this->data['tube_sticker_pumpset'] != '1') {
$warnMsg[] = 'Tube sticker pumpset must be 1 or empty';
$warnMsg[] = "Tube sticker pumpset must be 1 or empty";
}
if (Str::length($this->data['warranty_card']) > 0 && $this->data['warranty_card'] != '1') {
$warnMsg[] = 'Warranty card must be 1 or empty';
$warnMsg[] = "Warranty card must be 1 or empty";
}
if (Str::length($this->data['panel_box_code']) > 0 && (Str::length($this->data['panel_box_code']) < 6 || ! ctype_alnum($this->data['panel_box_code']))) {
$warnMsg[] = 'Invalid panel box code found';
if (Str::length($this->data['panel_box_code']) > 0 && (Str::length($this->data['panel_box_code']) < 6 || !ctype_alnum($this->data['panel_box_code']))) {
$warnMsg[] = "Invalid panel box code found";
}
if (Str::length($this->data['load_rate']) < 0 || ! is_numeric($this->data['load_rate']) || $this->data['load_rate'] < 0) {
$warnMsg[] = 'Load rate must be greater than or equal to 0';
if (Str::length($this->data['load_rate']) < 0 || !is_numeric($this->data['load_rate']) || $this->data['load_rate'] < 0) {
$warnMsg[] = "Load rate must be greater than or equal to 0";
}
if (Str::length($this->data['bundle_quantity']) > 0 && (! is_numeric($this->data['bundle_quantity']) || $this->data['bundle_quantity'] <= 1)) {
if (Str::length($this->data['bundle_quantity']) > 0 && (!is_numeric($this->data['bundle_quantity']) || $this->data['bundle_quantity'] <= 1)) {
$warnMsg[] = "Bundle quantity must be greater than or equal to '2' or empty";
}
if (Str::length($this->data['material_type']) > 0 && $this->data['material_type'] != '1' && $this->data['material_type'] != '2' && $this->data['material_type'] != '3') { // ($this->data['material_type'] != null) &&
$warnMsg[] = 'Material type must be 1 or 2 or 3 or empty';
if (Str::length($this->data['material_type']) > 0 && $this->data['material_type'] != '1' && $this->data['material_type'] != '2' && $this->data['material_type'] != '3') { //($this->data['material_type'] != null) &&
$warnMsg[] = "Material type must be 1 or 2 or 3 or empty";
}
}
}
if (! empty($warnMsg)) {
if (!empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
}
StickerMaster::updateOrCreate([
'item_id' => $item->id,
'plant_id' => $plant->id,
'plant_id' => $plant->id
],
[
'serial_number_motor' => $this->data['serial_number_motor'],
'serial_number_pump' => $this->data['serial_number_pump'],
'serial_number_pumpset' => $this->data['serial_number_pumpset'],
'pack_slip_motor' => $this->data['pack_slip_motor'],
'pack_slip_pump' => $this->data['pack_slip_pump'],
'pack_slip_pumpset' => $this->data['pack_slip_pumpset'],
'name_plate_motor' => $this->data['name_plate_motor'],
'name_plate_pump' => $this->data['name_plate_pump'],
'name_plate_pumpset' => $this->data['name_plate_pumpset'],
'tube_sticker_motor' => $this->data['tube_sticker_motor'],
'tube_sticker_pump' => $this->data['tube_sticker_pump'],
'tube_sticker_pumpset' => $this->data['tube_sticker_pumpset'],
'warranty_card' => $this->data['warranty_card'],
'part_validation1' => $this->data['part_validation1'],
'part_validation2' => $this->data['part_validation2'],
'part_validation3' => $this->data['part_validation3'],
'part_validation4' => $this->data['part_validation4'],
'part_validation5' => $this->data['part_validation5'],
'laser_part_validation1' => $this->data['laser_part_validation1'],
'laser_part_validation2' => $this->data['laser_part_validation2'],
'panel_box_code' => $this->data['panel_box_code'],
'load_rate' => $this->data['load_rate'],
'bundle_quantity' => $this->data['bundle_quantity'],
'material_type' => $this->data['material_type'],
]);
[
'serial_number_motor' => $this->data['serial_number_motor'],
'serial_number_pump' => $this->data['serial_number_pump'],
'serial_number_pumpset' => $this->data['serial_number_pumpset'],
'pack_slip_motor' => $this->data['pack_slip_motor'],
'pack_slip_pump' => $this->data['pack_slip_pump'],
'pack_slip_pumpset' => $this->data['pack_slip_pumpset'],
'name_plate_motor' => $this->data['name_plate_motor'],
'name_plate_pump' => $this->data['name_plate_pump'],
'name_plate_pumpset' => $this->data['name_plate_pumpset'],
'tube_sticker_motor' => $this->data['tube_sticker_motor'],
'tube_sticker_pump' => $this->data['tube_sticker_pump'],
'tube_sticker_pumpset' => $this->data['tube_sticker_pumpset'],
'warranty_card' => $this->data['warranty_card'],
'part_validation1' => $this->data['part_validation1'],
'part_validation2' => $this->data['part_validation2'],
'part_validation3' => $this->data['part_validation3'],
'part_validation4' => $this->data['part_validation4'],
'part_validation5' => $this->data['part_validation5'],
'laser_part_validation1' => $this->data['laser_part_validation1'],
'laser_part_validation2' => $this->data['laser_part_validation2'],
'panel_box_code' => $this->data['panel_box_code'],
'load_rate' => $this->data['load_rate'],
'bundle_quantity' => $this->data['bundle_quantity'],
'material_type' => $this->data['material_type']
]);
return null;
// return StickerMaster::firstOrNew([
// // Update existing records, matching them by `$this->data['column_name']`
@@ -278,10 +274,10 @@ class StickerMasterImporter extends Importer
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your sticker master import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your sticker 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -2,14 +2,15 @@
namespace App\Filament\Imports;
use App\Models\Plant;
use App\Models\StickerPrinting;
use Filament\Actions\Imports\Exceptions\RowImportFailedException;
use Filament\Actions\Imports\ImportColumn;
use Filament\Actions\Imports\Importer;
use Filament\Actions\Imports\Models\Import;
use Filament\Facades\Filament;
use Filament\Actions\Imports\Exceptions\RowImportFailedException;
use App\Models\Plant;
use App\Models\User;
use Str;
use Filament\Facades\Filament;
class StickerPrintingImporter extends Importer
{
@@ -48,29 +49,33 @@ class StickerPrintingImporter extends Importer
// ]);
$warnMsg = [];
$plantCod = $this->data['plant'];
$plant = null;
$plant = Plant::where('code', $this->data['plant'])->first();
if (Str::length($this->data['serial_number']) < 9 || !ctype_alnum($this->data['serial_number'])) {
$warnMsg[] = "Invalid serial number found";
}
$existing = StickerPrinting::where('plant_id', $plant->id)
->where('serial_number', $this->data['serial_number'])
->first();
if ($existing) {
$warnMsg[] = "Serial number already exists for this plant!";//throw new RowImportFailedException("Serial number already exists for this plant!");
}
$serial = $this->data['serial_number'];
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!';
}
// --- Check duplicate in DB ---
$existsInDB = StickerPrinting::where('plant_id', $plant->id)
->where('serial_number', $serial)
->first();
if ($existsInDB) {
//throw new RowImportFailedException("Serial number '{$serial}' already exists in DB for this plant!");
$warnMsg[] = "Serial number '{$serial}' already exists in DB for this plant!";
}
if (Str::length($serial) < 9 || ! ctype_alnum($serial)) {
$warnMsg[] = 'Invalid serial number found';
} elseif ($plant) {
$existing = StickerPrinting::where('plant_id', $plant->id)->where('serial_number', $serial)->first();
if ($existing) {
$warnMsg[] = "Serial number '{$serial}' already exists for plant '{$plantCod}'!"; // throw new RowImportFailedException("Serial number already exists for this plant!");
}
}
if (! empty($warnMsg)) {
if (!empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
}
@@ -79,21 +84,21 @@ class StickerPrintingImporter extends Importer
'reference_number' => $this->data['reference_number'],
'serial_number' => $this->data['serial_number'],
'created_at' => now(),
'updated_at' => now(),
'updated_at' =>now(),
'created_by' => Filament::auth()->user()?->name,
]);
return null;
// return new StickerPrinting();
//return new StickerPrinting();
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your sticker printing import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your sticker printing 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -80,17 +80,11 @@ class TestingPanelReadingImporter extends Importer
->rules(['required']),
ImportColumn::make('line')
->requiredMapping()
->relationship(resolveUsing: 'name')
->exampleHeader('Line Name')
->example(['4 inch pump line'])
->label('Line Name')
->relationship()
->rules(['required']),
ImportColumn::make('plant')
->requiredMapping()
->relationship(resolveUsing: 'code')
->exampleHeader('Plant Code')
->example(['1000'])
->label('Plant Code')
->relationship()
->rules(['required']),
ImportColumn::make('tested_by'),
ImportColumn::make('updated_by'),
@@ -107,15 +101,15 @@ class TestingPanelReadingImporter extends Importer
// 'email' => $this->data['email'],
// ]);
return new TestingPanelReading;
return new TestingPanelReading();
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your testing panel reading import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your testing panel reading 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -29,19 +29,19 @@ class UserImporter extends Importer
->exampleHeader('Name')
->example('RAW00001')
->label('Name')
->rules(['required']), // , 'max:255'
->rules(['required']),//, 'max:255'
ImportColumn::make('email')
->requiredMapping()
->exampleHeader('E-Mail')
->example('RAW00001@cripumps.com')
->label('E-Mail')
->rules(['required', 'email']), // , 'max:255'
->rules(['required', 'email']),//, 'max:255'
ImportColumn::make('password')
->requiredMapping()
->exampleHeader('Password')
->example('RAW00001')
->label('Password')
->rules(['required']), // , 'max:255'
->rules(['required']),//, 'max:255'
ImportColumn::make('roles')
->requiredMapping()
->exampleHeader('Roles')
@@ -54,61 +54,65 @@ class UserImporter extends Importer
public function resolveRecord(): ?User
{
$warnMsg = [];
$plantCod = $this->data['plant'];
$plant = 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 {
$plant = $plant->id ?? null;
if (Str::length($this->data['plant']) > 0) {
if (Str::length($this->data['plant']) < 4 || !is_numeric($this->data['plant']) || !preg_match('/^[1-9]\d{3,}$/', $this->data['plant'])) {
$warnMsg[] = "Invalid plant code found!";
}
else {
$plant = Plant::where('code', $this->data['plant'])->first();
if (!$plant) {
$warnMsg[] = "Plant not found";
}
else {
$plant = $plant->id ?? null;
}
}
}
if (Str::length($this->data['name']) < 3) {
$warnMsg[] = 'Invalid user name found!';
if (Str::length($this->data['name']) < 1) {
$warnMsg[] = "User name not found!";
}
// || !is_numeric($this->data['code']) || !preg_match('/^[1-9]\d{3,}$/', $this->data['code'])
if (Str::length($this->data['email']) < 5) {
$warnMsg[] = 'Invalid email found!';
$warnMsg[] = "Invalid email found!";
}
if (Str::length($this->data['password']) < 3) {
$warnMsg[] = 'Invalid password found!';
$warnMsg[] = "Invalid password found!";
}
// Validate roles if provided
$roles = [];
if (! empty($this->data['roles'])) {
if (!empty($this->data['roles'])) {
$roles = collect(explode(',', $this->data['roles']))
->map(fn ($role) => trim($role))
->map(fn($role) => trim($role))
->filter()
->toArray();
foreach ($roles as $roleName) {
if (! Role::where('name', $roleName)->exists()) {
if (!Role::where('name', $roleName)->exists()) {
$warnMsg[] = "Role : '{$roleName}' does not exist!";
}
}
} else {
$warnMsg[] = 'User roles not found!';
}
else {
$warnMsg[] = "User roles not found!";
}
if (! empty($warnMsg)) {
if (!empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
}
$user = User::updateOrCreate([
'email' => $this->data['email'],
],
[
'name' => $this->data['name'],
'password' => $this->data['password'],
'plant_id' => $plant,
]);
[
'name' => $this->data['name'],
'password' => $this->data['password'],
'plant_id' => $plant,
]);
// Assign roles
if (! empty($roles)) {
if (!empty($roles)) {
$user->syncRoles($roles);
}
@@ -118,15 +122,15 @@ class UserImporter extends Importer
// 'email' => $this->data['email'],
// ]);
// return new User();
//return new User();
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your user import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your user 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -75,10 +75,10 @@ class WeightValidationImporter extends Importer
->rules(['required']),
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('Plant Code')
->example('1000')
->label('PLANT CODE')
->relationship(resolveUsing: 'code')
->exampleHeader('Plant Name')
->example('Ransar Industries-I')
->label('PLANT NAME')
->relationship(resolveUsing: 'name')
->rules(['required']),
ImportColumn::make('scanned_by')
->requiredMapping()
@@ -92,95 +92,82 @@ class WeightValidationImporter extends Importer
public function resolveRecord(): ?WeightValidation
{
$warnMsg = [];
$plantCod = $this->data['plant'];
$iCode = $this->data['item'];
$plantId = null;
$itemId = 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 {
$plantId = $plant->id;
}
$plant = Plant::where('name', $this->data['plant'])->first();
if (!$plant) {
$warnMsg[] = "Plant not found";
}
if (Str::length($iCode) < 6 || ! ctype_alnum($iCode)) {
$warnMsg[] = 'Invalid item code found';
} else {
$itemCode = Item::where('code', $iCode)->first();
if (! $itemCode) {
$warnMsg[] = 'Item code not found';
} else {
if ($plantId) {
$itemAgainstPlant = Item::where('code', $iCode)->where('plant_id', $plantId)->first();
if (! $itemAgainstPlant) {
$warnMsg[] = 'Item code not found for the given plant';
} else {
$itemId = $itemAgainstPlant->id;
}
$item = null;
if ($plant) {
if (Str::length($this->data['item']) < 6 || !ctype_alnum($this->data['item'])) {
$warnMsg[] = "Invalid item code found";
}
else
{
$item = Item::where('code', $this->data['item'])->where('plant_id', $plant->id)->first();
if (!$item) {
$warnMsg[] = "Item code not found";
}
}
}
else { //if (!$item)
$warnMsg[] = "Item code not found";
}
$obdNum = $this->data['obd_number'];
if (Str::length($obdNum) < 8 || ! ctype_alnum($obdNum)) {
$warnMsg[] = 'Invalid OBD number found';
if (Str::length($obdNum) < 8 || !ctype_alnum($obdNum)) {
$warnMsg[] = "Invalid OBD number found";
}
$lineNum = $this->data['line_number'];
if (Str::length($lineNum) < 1 || ! is_numeric($lineNum)) {
$warnMsg[] = 'Invalid line number found';
if (Str::length($lineNum) < 1 || !is_numeric($lineNum)) {
$warnMsg[] = "Invalid line number found";
}
$batchNum = $this->data['batch_number'];
if (Str::length($batchNum) < 8 || ! is_numeric($batchNum)) {
$warnMsg[] = 'Invalid batch number found';
if (Str::length($batchNum) < 8 || !is_numeric($batchNum)) {
$warnMsg[] = "Invalid batch number found";
}
$heatNum = $this->data['heat_number'];
if (Str::length($heatNum) < 4) {
$warnMsg[] = 'Invalid heat number found';
$warnMsg[] = "Invalid heat number found";
}
$actWeight = $this->data['obd_weight'];
if (Str::length($actWeight) < 1 || ! is_numeric($actWeight)) {
$warnMsg[] = 'Invalid actual weight found';
if (Str::length($actWeight) < 1 || !is_numeric($actWeight)) {
$warnMsg[] = "Invalid actual weight found";
}
$vehicleNum = $this->data['vehicle_number'];
if (Str::length($vehicleNum) < 10 || ! ctype_alnum($vehicleNum)) {
$warnMsg[] = 'Invalid vehicle number found';
if (Str::length($vehicleNum) < 10 || !ctype_alnum($vehicleNum)) {
$warnMsg[] = "Invalid vehicle number found";
}
$bundleNum = $this->data['bundle_number'];
if (Str::length($bundleNum) < 1 || ! is_numeric($bundleNum)) {
$warnMsg[] = 'Invalid bundle number found';
if (Str::length($bundleNum) < 1 || !is_numeric($bundleNum)) {
$warnMsg[] = "Invalid bundle number found";
}
$pickWeight = $this->data['picked_weight'];
if (Str::length($pickWeight) < 1 || ! is_numeric($pickWeight)) {
$warnMsg[] = 'Invalid picked weight found';
if (Str::length($pickWeight) < 1 || !is_numeric($pickWeight)) {
$warnMsg[] = "Invalid picked weight found";
}
$scanBy = $this->data['scanned_by'];
if (Str::length($scanBy) < 3 || ! ctype_alnum($scanBy)) {
$warnMsg[] = 'Invalid scanned by name found';
if (Str::length($scanBy) < 3 || !ctype_alnum($scanBy)) {
$warnMsg[] = "Invalid scanned by name found";
}
if (! empty($warnMsg)) {
if (!empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
}
return WeightValidation::updateOrCreate([
'plant_id' => $plantId,
'obd_number' => $obdNum,
'line_number' => $lineNum,
],
'plant_id' => $plant->id,
'obd_number' => $obdNum,
'line_number' => $lineNum
],
[
'item_id' => $itemId,
'item_id' => $item->id,
'batch_number' => $batchNum,
'heat_number' => $heatNum,
'obd_weight' => $actWeight,
'vehicle_number' => $vehicleNum,
'bundle_number' => $bundleNum,
'picked_weight' => $pickWeight,
'scanned_by' => $scanBy,
'scanned_by' => $scanBy
]
);
// return WeightValidation::firstOrNew([
@@ -193,10 +180,10 @@ class WeightValidationImporter extends Importer
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your weight validation import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your weight 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -20,22 +20,22 @@ class WorkGroupMasterImporter extends Importer
return [
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('Plant Code')
->example('1000')
->label('Plant Code')
->relationship(resolveUsing: 'code')
->exampleHeader('Plant Name')
->example('Ransar Industries-I')
->label('Plant Name')
->relationship(resolveUsing:'name')
->rules(['required']),
ImportColumn::make('name')
->requiredMapping()
->exampleHeader('Work Group Name')
->exampleHeader('Name')
->example('RMGCEABC')
->label('Work Group Name')
->label('Name')
->rules(['required']),
ImportColumn::make('description')
->requiredMapping()
->exampleHeader('Work Group Description')
->exampleHeader('Description')
->example('Testing Model 1')
->label('Work Group Description')
->label('Description')
->rules(['required']),
ImportColumn::make('operation_number')
->requiredMapping()
@@ -52,6 +52,8 @@ class WorkGroupMasterImporter extends Importer
];
}
public function resolveRecord(): ?WorkGroupMaster
{
// return WorkGroupMaster::firstOrNew([
@@ -59,81 +61,75 @@ class WorkGroupMasterImporter extends Importer
// 'email' => $this->data['email'],
// ]);
$warnMsg = [];
$plantCod = $this->data['plant'];
$plantId = 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 {
$plantId = $plant->id;
}
$plant = Plant::where('name', $this->data['plant'])->first();
if (!$plant) {
$warnMsg[] = "Plant not found";
}
if (Str::length($this->data['name']) <= 0) { // || !ctype_alnum($this->data['description'])
$warnMsg[] = 'Invalid work group name found';
if (Str::length($this->data['name']) <= 0) { //|| !ctype_alnum($this->data['description'])
$warnMsg[] = "Invalid name found";
}
if (Str::length(trim($this->data['description'])) <= 0) {
$warnMsg[] = 'Invalid work group description found';
$warnMsg[] = "Invalid description found";
}
$desc = trim($this->data['description']);
if (Str::length($desc) > 44) {
$warnMsg[] = ' work group description should be less than 44 digits.';
$warnMsg[] = "Description should be less than 44 digits.";
}
if (Str::length($this->data['operation_number']) <= 0) {
$warnMsg[] = 'Invalid operation number found';
$warnMsg[] = "Invalid operation number found";
}
if (! is_numeric($this->data['operation_number'])) {
$warnMsg[] = 'Invalid operation number found must be numeric';
if(!is_numeric($this->data['operation_number']))
{
$warnMsg[] = "Invalid operation number found must be numeric";
}
$user = User::where('name', $this->data['created_by'])->first();
if (! $user) {
$warnMsg[] = 'Operator ID not found';
if (!$user) {
$warnMsg[] = "Operator ID not found";
}
if (! empty($warnMsg)) {
if (!empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
} else {
// Check (plant_id, name)
$existingByName = WorkGroupMaster::where('plant_id', $plantId)
}
else
{
//Check (plant_id, name)
$existingByName = WorkGroupMaster::where('plant_id', $plant->id)
->where('name', $this->data['name'])
->first();
if ($existingByName) {
throw new RowImportFailedException('Work group name already exists for this plant!');
throw new RowImportFailedException("Work group name already exists for this plant!");
}
// Check (plant_id, operation_number)
$existingByOpNum = WorkGroupMaster::where('plant_id', $plantId)
//Check (plant_id, operation_number)
$existingByOpNum = WorkGroupMaster::where('plant_id', $plant->id)
->where('operation_number', $this->data['operation_number'])
->where('name', $this->data['name'])
->first();
if ($existingByOpNum) {
throw new RowImportFailedException('Operation number already exists for this plant!');
throw new RowImportFailedException("Operation number already exists for this plant!");
}
// Check (plant_id)
$existingByOperator = WorkGroupMaster::where('plant_id', $plantId)
//Check (plant_id)
$existingByOperator = WorkGroupMaster::where('plant_id', $plant->id)
->where('name', $this->data['name'])
->first();
if ($existingByOperator) {
throw new RowImportFailedException('Already work group name assigned to another plant!');
throw new RowImportFailedException("Already work group name assigned to another plant!");
}
}
WorkGroupMaster::updateOrCreate([
'plant_id' => $plantId,
'plant_id' => $plant->id,
'name' => $this->data['name'],
'description' => $this->data['description'],
'operation_number' => $this->data['operation_number'],
@@ -142,15 +138,15 @@ class WorkGroupMasterImporter extends Importer
return null;
// return new WorkGroupMaster();
//return new WorkGroupMaster();
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your work group master import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
$body = 'Your work group 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.';
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;

View File

@@ -20,7 +20,7 @@ class InvoiceDataDashboard extends Page
protected static string $view = 'filament.pages.invoice-data-dashboard';
protected static ?string $navigationGroup = 'Manufacturing SD';
protected static ?string $navigationGroup = 'Invoice Management';
public function mount(): void
{

View File

@@ -1,472 +0,0 @@
<?php
namespace App\Filament\Pages;
use App\Imports\InvoicePendingReasonImport;
use App\Models\InvoiceDataValidation;
use App\Models\InvoiceOutValidation;
use App\Models\Plant;
use Filament\Pages\Page;
use Filament\Forms\Contracts\HasForms;
use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Form;
use Filament\Facades\Filament;
use Filament\Forms\Components\FileUpload;
use Filament\Forms\Components\Hidden;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Notifications\Notification;
use Filament\Pages\Dashboard\Concerns\HasFiltersForm;
use Illuminate\Support\Facades\Auth;
use Maatwebsite\Excel\Facades\Excel;
use Storage;
class InvoicePendingReason extends Page
{
use HasFiltersForm;
protected static ?string $navigationIcon = 'heroicon-o-document-text';
protected static string $view = 'filament.pages.invoice-pending-reason';
protected static ?string $navigationGroup = 'Manufacturing SD';
public ?string $file = null;
public array $importErrors = [];
public array $invoicePending = [];
public function mount(): void
{
$this->filtersForm->fill([
'plant_id' => null,
'document_number' => null,
'remark' => null,
]);
}
public function filtersForm(Form $form): Form
{
return $form
->statePath('filters')
->schema([
Select::make('plant_id')
->label('Plant')
->reactive()
->required()
->columnSpan(1)
->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();
})
->afterStateUpdated(function ($state, $set, callable $get,$livewire) {
$plantId = $get('plant_id');
if($plantId){
$this->dispatch('loadData' ,$plantId);
}
else{
$this->dispatch('emptyData');
}
$set('document_number', null);
$set('customer_trade_name', null);
$set('location', null);
})
->hint(fn ($get) => $get('pqPlantError') ? $get('pqPlantError') : null)
->hintColor('danger'),
Select::make('document_number')
->label('Document Number')
->required()
->reactive()
->columnSpan(1)
->options(function (callable $get) {
$plantId = $get('plant_id');
if (empty($plantId)) {
return [];
}
$distributions = InvoiceDataValidation::whereNotNull('distribution_channel_desc')
->distinct()
->pluck('distribution_channel_desc')
->filter(fn ($v) => trim($v) !== '')
->values()
->toArray();
$distributions[] = '';
$pendingInvoices = collect();
foreach ($distributions as $distribution) {
$invoices = InvoiceDataValidation::where('plant_id', $plantId)
->where('distribution_channel_desc', $distribution)
->select('id', 'document_number')
->get()
->unique('document_number')
->filter(fn ($inv) =>
! empty($inv->document_number) &&
! str_contains($inv->document_number, '-')
);
if (trim($distribution) == '') {
$invoices = $invoices->filter(fn ($inv) =>
str_starts_with($inv->document_number, '7')
);
}
if ($invoices->isEmpty()) {
continue;
}
$invoiceNumbers = $invoices->pluck('document_number')
->map(fn ($n) => preg_replace('/\s+/', '', strtoupper($n)))
->toArray();
$wentOut = InvoiceOutValidation::whereIn('qr_code', $invoiceNumbers)
->distinct()
->pluck('qr_code')
->map(fn ($n) => preg_replace('/\s+/', '', strtoupper($n)))
->toArray();
$pending = $invoices->filter(function ($inv) use ($wentOut) {
$doc = preg_replace('/\s+/', '', strtoupper($inv->document_number));
return ! in_array($doc, $wentOut, true);
});
$pendingInvoices = $pendingInvoices->merge($pending);
}
return $pendingInvoices
->unique('document_number')
->pluck('document_number', 'document_number')
->toArray();
})
->afterStateUpdated(function ($state, callable $set, callable $get) {
$plantId = $get('plant_id');
if (empty($plantId)) {
return [];
}
$documentNumber = $get('document_number');
$customers = InvoiceDataValidation::where('plant_id', $plantId)
->where('document_number', $documentNumber)
->value('customer_trade_name');
$location = InvoiceDataValidation::where('plant_id', $plantId)
->where('document_number', $documentNumber)
->value('location');
$set('customer_trade_name', $customers);
$set('location', $location);
})
->extraAttributes(fn ($get) => [
'class' => $get('pqBlockError') ? 'border-red-500' : '',
])
->hint(fn ($get) => $get('pqBlockError') ? $get('pqBlockError') : null)
->hintColor('danger'),
TextInput::make('customer_trade_name')
->label('Customer Trade Name')
->required()
->readOnly()
->reactive()
->columnSpan(1),
TextInput::make('location')
->label('Location')
->required()
->readOnly()
->reactive()
->columnSpan(1),
TextInput::make('remark')
->label('Remark')
->reactive()
->maxLength(40)
->helperText('Max 40 characters allowed.')
->extraAttributes([
'wire:keydown.enter.prevent' => 'addRemark($event.target.value)',
])
->autofocus()
->required(),
FileUpload::make('file')
->label('Upload Excel File')
->required()
->disk('local')
->multiple(false)
->directory('invoice-pending')
->dehydrated(false)
//->preserveFilenames()
//->storeFiles()
//storeFileNamesIn('original_name')
// ->visibility('private')
->acceptedFileTypes([
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'application/vnd.ms-excel',
'text/csv',
])
->rules(['mimes:xlsx,xls,csv'])
->afterStateUpdated(function ($state, callable $set) {
if ($state instanceof \Livewire\Features\SupportFileUploads\TemporaryUploadedFile) {
$set('file', $state->store('invoice-pending'));
}
}),
])
->columns(3);
}
public function addRemark(){
$plantId = $this->filters['plant_id'] ?? null;
$documentNumber = $this->filters['document_number'] ?? null;
$remark = $this->filters['remark'] ?? null;
if (! $plantId) {
Notification::make()
->title('Plant')
->body("please select plant first..!")
->danger()
->send();
return;
}
if (! $documentNumber) {
Notification::make()
->title('Document Number')
->body("please select document number..!")
->danger()
->send();
return;
}
if ($remark == '') {
Notification::make()
->title('Remark')
->body("Remark can't be empty..!")
->danger()
->send();
return;
}
InvoiceDataValidation::where('plant_id', $plantId)
->where('document_number', $documentNumber)
->update([
'remark' => $remark,
'updated_at' => now(),
]);
$this->filtersForm->fill([
'plant_id' => $plantId,
'document_number' => $documentNumber,
'remark' => null,
]);
Notification::make()
->title('Remark updated successfully')
->success()
->send();
}
// public function importPendingReason()
// {
// $file = $this->filters['file'] ?? null;
// $absolutePath = Storage::disk('local')->path($file);
// Excel::import(new InvoicePendingReasonImport, $absolutePath);
// $this->reset('filters.file');
// Notification::make()
// ->title('File processed and database updated successfully')
// ->success()
// ->send();
// }
public function importPendingReason()
{
$file = $this->filters['file'] ?? null;
$plantId = $this->filters['plant_id'] ?? null;
if (empty($file)) {
Notification::make()
->title('Please upload a file')
->danger()
->send();
return;
}
// if (
// empty($fileFilter) ||
// !is_array($fileFilter) ||
// empty($fileFilter[0])
// ) {
// Notification::make()
// ->title('Please upload a file')
// ->danger()
// ->send();
// return;
// }
// $filePath = $fileFilter[0];
// if (!is_string($filePath)) {
// Notification::make()
// ->title('Invalid file upload')
// ->danger()
// ->send();
// return;
// }
$absolutePath = Storage::disk('local')->path($file);
$import = new InvoicePendingReasonImport();
try {
Excel::import(
$import,
$absolutePath
);
if(!empty($import->plantCodeEmpty)) {
Notification::make()
->title('Import failed')
->body("Plant code can't be empty")
->danger()
->send();
$this->filtersForm->fill([
'file' => null,
'plant_id' => $plantId,
]);
return;
}
else if(!empty($import->docNoEmpty)) {
Notification::make()
->title('Import failed')
->body("Document number can't be empty")
->danger()
->send();
$this->filtersForm->fill([
'file' => null,
'plant_id' => $plantId,
]);
return;
}
// else if(!empty($import->remarkEmpty)) {
// Notification::make()
// ->title('Import failed')
// ->body("Remark can't be empty")
// ->danger()
// ->send();
// $this->filtersForm->fill([
// 'file' => null,
// ]);
// return;
// }
else if (! empty($import->duplicateExcelDocs)) {
$duplicates = collect($import->duplicateExcelDocs)
->map(function ($rows, $key) {
[$plant, $doc] = explode('|', $key);
return "{$plant}-{$doc}";
})
->implode(', ');
Notification::make()
->title('Import failed')
->body("Duplicate Document Numbers found in Excel: {$duplicates}")
->danger()
->send();
$this->filtersForm->fill([
'file' => null,
'plant_id' => $plantId,
]);
return;
}
else if(!empty($import->missingPlantCodes)) {
$codes = implode(', ', array_keys($import->missingPlantCodes));
Notification::make()
->title('Import failed')
->body("Plant codes not found: {$codes}")
->danger()
->send();
$this->filtersForm->fill([
'file' => null,
'plant_id' => $plantId,
]);
return;
}
else if(!empty($import->missingDocNo)) {
$docNo = implode(', ', array_keys($import->missingDocNo));
Notification::make()
->title('Import failed')
->body("Document numbers not found: {$docNo}")
->danger()
->send();
$this->filtersForm->fill([
'file' => null,
'plant_id' => $plantId,
]);
return;
}
foreach ($import->validRows as $row) {
InvoiceDataValidation::where('plant_id', $row['plant_id'])
->where('document_number', $row['document_number'])
->update([
'remark' => $row['remark'],
'updated_at' => now(),
]);
}
Notification::make()
->title('Import successful')
->body('All records updated successfully.')
->success()
->send();
$this->dispatch('loadData' ,$plantId);
$this->filtersForm->fill([
'file' => null,
'plant_id' => $plantId,
]);
} catch (\Throwable $e) {
Notification::make()
->title('Import error')
->body($e->getMessage())
->danger()
->send();
}
}
public function exportPendingReason()
{
$plantId = $this->filters['plant_id'] ?? null;
if (! $plantId) {
Notification::make()
->title('Plant')
->body("please select plant to export data..!")
->danger()
->send();
return;
}
$this->dispatch('loadData1' ,$plantId);
}
public static function canAccess(): bool
{
return Auth::check() && Auth::user()->can('view invoice pending reason');
}
}

View File

@@ -641,322 +641,322 @@ class StickerReprint extends Page implements HasForms
// ********************************
// $exists = \App\Models\ProductionPlan::where('plant_id', $this->pId)
// ->where('shift_id', $this->sId)
// ->where('line_id', $this->lId)
// ->whereDate('created_at', today())
// ->latest()
// ->exists();
$exists = \App\Models\ProductionPlan::where('plant_id', $this->pId)
->where('shift_id', $this->sId)
->where('line_id', $this->lId)
->whereDate('created_at', today())
->latest()
->exists();
// if ($exists)
// {
// $currentDate = date('Y-m-d');
if ($exists)
{
$currentDate = date('Y-m-d');
// $shiftId = Shift::where('id', $this->sId)
// ->first();
$shiftId = Shift::where('id', $this->sId)
->first();
// [$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0];
// $hRs = (int) $hRs;
// //$miNs = (int) $miNs;-*/
[$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0];
$hRs = (int) $hRs;
//$miNs = (int) $miNs;-*/
// $totalMinutes = $hRs * 60 + $miNs;
$totalMinutes = $hRs * 60 + $miNs;
// $from_dt = $currentDate . ' ' . $shiftId->start_time;
$from_dt = $currentDate . ' ' . $shiftId->start_time;
// $to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes"));
$to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes"));
// $currentDateTime = date('Y-m-d H:i:s');
$currentDateTime = date('Y-m-d H:i:s');
// // Check if current date time is within the range
// if (!($currentDateTime >= $from_dt && $currentDateTime < $to_dt)) {
// //echo "Choosed a valid shift...";
// // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')');
// Check if current date time is within the range
if (!($currentDateTime >= $from_dt && $currentDateTime < $to_dt)) {
//echo "Choosed a valid shift...";
// $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')');
// $this->form->fill([
// 'plant_id'=> $this->pId,
// 'block_name'=> $this->bId,
// 'shift_id'=> $this->sId,
// 'line_id'=> $this->lId,
// 'item_id'=> null,
// 'serial_number'=> null,
// 'success_msg'=> null,
// 'production_order'=> $this->prodOrder,
// 'sap_msg_status' => null,
// 'sap_msg_description' => null,
// 'operator_id'=> $operatorName,
// 'recent_qr' => $this->recQr,
// ]);
// Notification::make()
// ->title('Invalid Shift')
// ->body("Please select a valid shift.")
// ->danger()
// ->send();
// //$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')');
// return;
// }
// else
// {
// $this->form->fill([
// 'plant_id'=> $this->pId,
// 'block_name'=> $this->bId,
// 'shift_id'=> $this->sId,
// 'line_id'=> $this->lId,
// 'item_id'=> null,
// 'serial_number'=> null,
// 'success_msg'=> null,
// 'production_order'=> $this->prodOrder,
// 'sap_msg_status' => null,
// 'sap_msg_description' => null,
// 'operator_id'=> $operatorName,
// 'recent_qr' => $this->recQr,
// ]);
// }
// }
// else
// {
// $existShifts = \App\Models\ProductionPlan::where('plant_id', $this->pId)
// ->where('shift_id', $this->sId)
// ->where('line_id', $this->lId)
// ->whereDate('created_at', Carbon::yesterday())
// ->latest()
// ->exists();
$this->form->fill([
'plant_id'=> $this->pId,
'block_name'=> $this->bId,
'shift_id'=> $this->sId,
'line_id'=> $this->lId,
'item_id'=> null,
'serial_number'=> null,
'success_msg'=> null,
'production_order'=> $this->prodOrder,
'sap_msg_status' => null,
'sap_msg_description' => null,
'operator_id'=> $operatorName,
'recent_qr' => $this->recQr,
]);
Notification::make()
->title('Invalid Shift')
->body("Please select a valid shift.")
->danger()
->send();
//$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')');
return;
}
else
{
$this->form->fill([
'plant_id'=> $this->pId,
'block_name'=> $this->bId,
'shift_id'=> $this->sId,
'line_id'=> $this->lId,
'item_id'=> null,
'serial_number'=> null,
'success_msg'=> null,
'production_order'=> $this->prodOrder,
'sap_msg_status' => null,
'sap_msg_description' => null,
'operator_id'=> $operatorName,
'recent_qr' => $this->recQr,
]);
}
}
else
{
$existShifts = \App\Models\ProductionPlan::where('plant_id', $this->pId)
->where('shift_id', $this->sId)
->where('line_id', $this->lId)
->whereDate('created_at', Carbon::yesterday())
->latest()
->exists();
// if ($existShifts) //if ($existShifts->count() > 0)
// { // record exist on yesterday
// //$currentDate = date('Y-m-d');
// $yesterday = date('Y-m-d', strtotime('-1 days'));
if ($existShifts) //if ($existShifts->count() > 0)
{ // record exist on yesterday
//$currentDate = date('Y-m-d');
$yesterday = date('Y-m-d', strtotime('-1 days'));
// $shiftId = Shift::where('id', $this->sId)
// ->first();
$shiftId = Shift::where('id', $this->sId)
->first();
// [$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0];
// $hRs = (int) $hRs;
// // $miNs = (int) $miNs;-*/
[$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0];
$hRs = (int) $hRs;
// $miNs = (int) $miNs;-*/
// $totalMinutes = $hRs * 60 + $miNs;
$totalMinutes = $hRs * 60 + $miNs;
// $from_dt = $yesterday . ' ' . $shiftId->start_time;
$from_dt = $yesterday . ' ' . $shiftId->start_time;
// $to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes"));
$to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes"));
// $currentDateTime = date('Y-m-d H:i:s');
$currentDateTime = date('Y-m-d H:i:s');
// // Check if current date time is within the range
// if ($currentDateTime >= $from_dt && $currentDateTime < $to_dt) {
// $this->form->fill([
// 'plant_id'=> $this->pId,
// 'block_name'=> $this->bId,
// 'shift_id'=> $this->sId,
// 'line_id'=> $this->lId,
// 'item_id'=> null,
// 'serial_number'=> null,
// 'success_msg'=> null,
// 'production_order'=> $this->prodOrder,
// 'sap_msg_status' => null,
// 'sap_msg_description' => null,
// 'operator_id'=> $operatorName,
// 'recent_qr' => $this->recQr,
// ]);
// }
// else
// {
// $currentDate = date('Y-m-d');
// Check if current date time is within the range
if ($currentDateTime >= $from_dt && $currentDateTime < $to_dt) {
$this->form->fill([
'plant_id'=> $this->pId,
'block_name'=> $this->bId,
'shift_id'=> $this->sId,
'line_id'=> $this->lId,
'item_id'=> null,
'serial_number'=> null,
'success_msg'=> null,
'production_order'=> $this->prodOrder,
'sap_msg_status' => null,
'sap_msg_description' => null,
'operator_id'=> $operatorName,
'recent_qr' => $this->recQr,
]);
}
else
{
$currentDate = date('Y-m-d');
// $shiftId = Shift::where('id', $this->sId)
// ->first();
$shiftId = Shift::where('id', $this->sId)
->first();
// [$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0];
// $hRs = (int) $hRs;
// // $miNs = (int) $miNs;-*/
[$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0];
$hRs = (int) $hRs;
// $miNs = (int) $miNs;-*/
// $totalMinutes = $hRs * 60 + $miNs;
$totalMinutes = $hRs * 60 + $miNs;
// $from_dt = $currentDate . ' ' . $shiftId->start_time;
$from_dt = $currentDate . ' ' . $shiftId->start_time;
// $to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes"));
$to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes"));
// $currentDateTime = date('Y-m-d H:i:s');
$currentDateTime = date('Y-m-d H:i:s');
// // Check if current date time is within the range
// if ($currentDateTime >= $from_dt && $currentDateTime < $to_dt) {
// //echo "Choosed a valid shift...";
// // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')');
// Check if current date time is within the range
if ($currentDateTime >= $from_dt && $currentDateTime < $to_dt) {
//echo "Choosed a valid shift...";
// $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')');
// $this->form->fill([
// 'plant_id'=> $this->pId,
// 'block_name'=> $this->bId,
// 'shift_id'=> $this->sId,
// 'line_id'=> $this->lId,
// 'item_id'=> null,
// 'serial_number'=> null,
// 'success_msg'=> null,
// 'production_order'=> $this->prodOrder,
// 'sap_msg_status' => null,
// 'sap_msg_description' => null,
// 'operator_id'=> $operatorName,
// 'recent_qr' => $this->recQr,
// ]);
// Notification::make()
// ->title('Plan Not Found')
// ->body("Please set production plan first.")
// ->danger()
// ->send();
// //$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')');
// return;
// }
// else
// {
// //echo "Choosed a valid shift...";
// // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')');
$this->form->fill([
'plant_id'=> $this->pId,
'block_name'=> $this->bId,
'shift_id'=> $this->sId,
'line_id'=> $this->lId,
'item_id'=> null,
'serial_number'=> null,
'success_msg'=> null,
'production_order'=> $this->prodOrder,
'sap_msg_status' => null,
'sap_msg_description' => null,
'operator_id'=> $operatorName,
'recent_qr' => $this->recQr,
]);
Notification::make()
->title('Plan Not Found')
->body("Please set production plan first.")
->danger()
->send();
//$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')');
return;
}
else
{
//echo "Choosed a valid shift...";
// $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')');
// $this->form->fill([
// 'plant_id'=> $this->pId,
// 'block_name'=> $this->bId,
// 'shift_id'=> $this->sId,
// 'line_id'=> $this->lId,
// 'item_id'=> null,
// 'serial_number'=> null,
// 'success_msg'=> null,
// 'production_order'=> $this->prodOrder,
// 'sap_msg_status' => null,
// 'sap_msg_description' => null,
// 'operator_id'=> $operatorName,
// 'recent_qr' => $this->recQr,
// ]);
// Notification::make()
// ->title('Invalid Shift')
// ->body("Please select a valid shift.")
// ->danger()
// ->send();
// //$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')');
// return;
// }
// }
// }
// else
// { // record not exist on yesterday
$this->form->fill([
'plant_id'=> $this->pId,
'block_name'=> $this->bId,
'shift_id'=> $this->sId,
'line_id'=> $this->lId,
'item_id'=> null,
'serial_number'=> null,
'success_msg'=> null,
'production_order'=> $this->prodOrder,
'sap_msg_status' => null,
'sap_msg_description' => null,
'operator_id'=> $operatorName,
'recent_qr' => $this->recQr,
]);
Notification::make()
->title('Invalid Shift')
->body("Please select a valid shift.")
->danger()
->send();
//$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')');
return;
}
}
}
else
{ // record not exist on yesterday
// //$currentDate = date('Y-m-d');
// $yesterday = date('Y-m-d', strtotime('-1 days'));
//$currentDate = date('Y-m-d');
$yesterday = date('Y-m-d', strtotime('-1 days'));
// $shiftId = Shift::where('id', $this->sId)
// ->first();
$shiftId = Shift::where('id', $this->sId)
->first();
// [$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0];
// $hRs = (int) $hRs;
// // $miNs = (int) $miNs;-*/
[$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0];
$hRs = (int) $hRs;
// $miNs = (int) $miNs;-*/
// $totalMinutes = $hRs * 60 + $miNs;
$totalMinutes = $hRs * 60 + $miNs;
// $from_dt = $yesterday . ' ' . $shiftId->start_time;
$from_dt = $yesterday . ' ' . $shiftId->start_time;
// $to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes"));
$to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes"));
// $currentDateTime = date('Y-m-d H:i:s');
$currentDateTime = date('Y-m-d H:i:s');
// // Check if current date time is within the range
// if ($currentDateTime >= $from_dt && $currentDateTime < $to_dt) {
// //echo "Choosed a valid shift...";
// // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')');
// Check if current date time is within the range
if ($currentDateTime >= $from_dt && $currentDateTime < $to_dt) {
//echo "Choosed a valid shift...";
// $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')');
// $this->form->fill([
// 'plant_id'=> $this->pId,
// 'block_name'=> $this->bId,
// 'shift_id'=> $this->sId,
// 'line_id'=> $this->lId,
// 'item_id'=> null,
// 'serial_number'=> null,
// 'success_msg'=> null,
// 'production_order'=> $this->prodOrder,
// 'sap_msg_status' => null,
// 'sap_msg_description' => null,
// 'operator_id'=> $operatorName,
// 'recent_qr' => $this->recQr,
// ]);
// Notification::make()
// ->title('Plan Not Found')
// ->body("Please set production plan first.")
// ->danger()
// ->send();
// //$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')');
// return;
// }
// else
// {
// $currentDate = date('Y-m-d');
$this->form->fill([
'plant_id'=> $this->pId,
'block_name'=> $this->bId,
'shift_id'=> $this->sId,
'line_id'=> $this->lId,
'item_id'=> null,
'serial_number'=> null,
'success_msg'=> null,
'production_order'=> $this->prodOrder,
'sap_msg_status' => null,
'sap_msg_description' => null,
'operator_id'=> $operatorName,
'recent_qr' => $this->recQr,
]);
Notification::make()
->title('Plan Not Found')
->body("Please set production plan first.")
->danger()
->send();
//$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')');
return;
}
else
{
$currentDate = date('Y-m-d');
// $shiftId = Shift::where('id', $this->sId)
// ->first();
$shiftId = Shift::where('id', $this->sId)
->first();
// [$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0];
// $hRs = (int) $hRs;
// // $miNs = (int) $miNs;-*/
[$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0];
$hRs = (int) $hRs;
// $miNs = (int) $miNs;-*/
// $totalMinutes = $hRs * 60 + $miNs;
$totalMinutes = $hRs * 60 + $miNs;
// $from_dt = $currentDate . ' ' . $shiftId->start_time;
$from_dt = $currentDate . ' ' . $shiftId->start_time;
// $to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes"));
$to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes"));
// $currentDateTime = date('Y-m-d H:i:s');
$currentDateTime = date('Y-m-d H:i:s');
// // Check if current date time is within the range
// if ($currentDateTime >= $from_dt && $currentDateTime < $to_dt) {
// //echo "Choosed a valid shift...";
// // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')');
// Check if current date time is within the range
if ($currentDateTime >= $from_dt && $currentDateTime < $to_dt) {
//echo "Choosed a valid shift...";
// $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')');
// $this->form->fill([
// 'plant_id'=> $this->pId,
// 'block_name'=> $this->bId,
// 'shift_id'=> $this->sId,
// 'line_id'=> $this->lId,
// 'item_id'=> null,
// 'serial_number'=> null,
// 'success_msg'=> null,
// 'production_order'=> $this->prodOrder,
// 'sap_msg_status' => null,
// 'sap_msg_description' => null,
// 'operator_id'=> $operatorName,
// 'recent_qr' => $this->recQr,
// ]);
// Notification::make()
// ->title('Plan Not Found')
// ->body("Please set production plan first.")
// ->danger()
// ->send();
// //$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')');
// return;
// }
// else
// {
// //echo "Choosed a valid shift...";
// // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')');
$this->form->fill([
'plant_id'=> $this->pId,
'block_name'=> $this->bId,
'shift_id'=> $this->sId,
'line_id'=> $this->lId,
'item_id'=> null,
'serial_number'=> null,
'success_msg'=> null,
'production_order'=> $this->prodOrder,
'sap_msg_status' => null,
'sap_msg_description' => null,
'operator_id'=> $operatorName,
'recent_qr' => $this->recQr,
]);
Notification::make()
->title('Plan Not Found')
->body("Please set production plan first.")
->danger()
->send();
//$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')');
return;
}
else
{
//echo "Choosed a valid shift...";
// $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')');
// $this->form->fill([
// 'plant_id'=> $this->pId,
// 'block_name'=> $this->bId,
// 'shift_id'=> $this->sId,
// 'line_id'=> $this->lId,
// 'item_id'=> null,
// 'serial_number'=> null,
// 'success_msg'=> null,
// 'production_order'=> $this->prodOrder,
// 'sap_msg_status' => null,
// 'sap_msg_description' => null,
// 'operator_id'=> $operatorName,
// 'recent_qr' => $this->recQr,
// ]);
// Notification::make()
// ->title('Invalid Shift')
// ->body("Please select a valid shift.")
// ->danger()
// ->send();
// //$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')');
// return;
// }
// }
// }
// }
$this->form->fill([
'plant_id'=> $this->pId,
'block_name'=> $this->bId,
'shift_id'=> $this->sId,
'line_id'=> $this->lId,
'item_id'=> null,
'serial_number'=> null,
'success_msg'=> null,
'production_order'=> $this->prodOrder,
'sap_msg_status' => null,
'sap_msg_description' => null,
'operator_id'=> $operatorName,
'recent_qr' => $this->recQr,
]);
Notification::make()
->title('Invalid Shift')
->body("Please select a valid shift.")
->danger()
->send();
//$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')');
return;
}
}
}
}
// ********************************
@@ -976,9 +976,7 @@ class StickerReprint extends Page implements HasForms
]);
}
// if (!preg_match('/^[a-zA-Z0-9]{6,}+\|[1-9][a-zA-Z0-9]{8,}+(\|)?$/', $formQRData))
// {
if (!preg_match('/^[A-Za-z0-9]{6,}\|[1-9][A-Za-z0-9]{7,}(\/[A-Za-z0-9]*)?(\|)?$/', $formQRData)) {
if (!preg_match('/^[a-zA-Z0-9]{6,}+\|[1-9][a-zA-Z0-9]{8,}+(\|)?$/', $formQRData)) {
if (strpos($formQRData, '|') === false) {
$this->form->fill([
'plant_id'=> $this->pId,
@@ -1006,14 +1004,7 @@ class StickerReprint extends Page implements HasForms
{
$splits = explode('|', $formQRData);
$iCode = trim($splits[0]);
$sNumberRaw = isset($splits[1]) ? trim($splits[1]) : null;
if ($sNumberRaw !== null) {
$sNumber = preg_replace('/\/.*/', '', $sNumberRaw);
$sNumber = trim($sNumber);
} else {
$sNumber = null;
}
$sNumber = isset($splits[1]) ? trim($splits[1]) : null;
if (!ctype_alnum($iCode)) {
$this->form->fill([
@@ -1061,7 +1052,6 @@ class StickerReprint extends Page implements HasForms
->send();
return;
}
else if (!ctype_alnum($sNumber)) {
$this->form->fill([
'plant_id'=> $this->pId,
@@ -1155,33 +1145,9 @@ class StickerReprint extends Page implements HasForms
// Only search when all parent IDs are selected
$parts = explode('|', $formQRData);
$itemCode = trim($parts[0]);
$serialNumberRaw = isset($parts[1]) ? trim($parts[1]) : null;
// // Remove slash and everything after it
// if ($serialNumberRaw != null) {
// $serialNumber = preg_replace('/\/.*/', '', $serialNumberRaw);
// $serialNumber = trim($serialNumber);
// } else {
// $serialNumber = null;
// }
if ($serialNumberRaw != null) {
if (strpos($serialNumberRaw, '/') !== false) {
$serialNumber = strstr($serialNumberRaw, '/', true); // gets text before slash
} else {
$serialNumber = $serialNumberRaw; // keep original
}
$serialNumber = trim($serialNumber);
} else {
$serialNumber = null;
}
$serialNumber = isset($parts[1]) ? trim($parts[1]) : null;
$item = Item::where('code', $itemCode)->first();
if (!$item) {
// Handle unknown item code
$this->form->fill([
@@ -1284,86 +1250,86 @@ class StickerReprint extends Page implements HasForms
return;
}
//$line = Line::find($this->lId);
//$lineName = $line ? $line->name : null;
$line = Line::find($this->lId);
$lineName = $line ? $line->name : null;
// $categoryName = (Str::length($item->category) > 0) ? $item->category : "";
$categoryName = (Str::length($item->category) > 0) ? $item->category : "";
// if ($categoryName == 'Submersible Motor')
// {
// if ($lineName != '6 inch motor line')
// {
// $this->form->fill([
// 'plant_id'=> $this->pId,
// 'block_name'=> $this->bId,
// 'shift_id'=> $this->sId,
// 'line_id'=> $this->lId,
// 'item_id'=> null,
// 'serial_number'=> null,
// 'success_msg'=> null,
// 'production_order'=> $this->prodOrder,
// 'sap_msg_status' => null,
// 'sap_msg_description' => null,
// 'operator_id'=> $operatorName,
// 'recent_qr' => $this->recQr,
// ]);
// Notification::make()
// ->title('Invalid Line Found')
// ->body("Choose '6 inch motor line' to proceed..!")
// ->danger()
// ->send();
// return;
// }
// }
// else if ($categoryName == 'Submersible Pump')
// {
// if ($lineName != '6 inch pump line')
// {
// $this->form->fill([
// 'plant_id'=> $this->pId,
// 'block_name'=> $this->bId,
// 'shift_id'=> $this->sId,
// 'line_id'=> $this->lId,
// 'item_id'=> null,
// 'serial_number'=> null,
// 'success_msg'=> null,
// 'production_order'=> $this->prodOrder,
// 'sap_msg_status' => null,
// 'sap_msg_description' => null,
// 'operator_id'=> $operatorName,
// 'recent_qr' => $this->recQr,
// ]);
// Notification::make()
// ->title('Invalid Line Found')
// ->body("Choose '6 inch pump line' to proceed..!")
// ->danger()
// ->send();
// return;
// }
// }
// else
// {
// $this->form->fill([
// 'plant_id'=> $this->pId,
// 'block_name'=> $this->bId,
// 'shift_id'=> $this->sId,
// 'line_id'=> $this->lId,
// 'item_id'=> null,
// 'serial_number'=> null,
// 'success_msg'=> null,
// 'production_order'=> $this->prodOrder,
// 'sap_msg_status' => null,
// 'sap_msg_description' => null,
// 'operator_id'=> $operatorName,
// 'recent_qr' => $this->recQr,
// ]);
// Notification::make()
// ->title('Invalid Category Found')
// ->body("Set proper category to proceed..!")
// ->danger()
// ->send();
// return;
// }
if ($categoryName == 'Submersible Motor')
{
if ($lineName != '6 inch motor line')
{
$this->form->fill([
'plant_id'=> $this->pId,
'block_name'=> $this->bId,
'shift_id'=> $this->sId,
'line_id'=> $this->lId,
'item_id'=> null,
'serial_number'=> null,
'success_msg'=> null,
'production_order'=> $this->prodOrder,
'sap_msg_status' => null,
'sap_msg_description' => null,
'operator_id'=> $operatorName,
'recent_qr' => $this->recQr,
]);
Notification::make()
->title('Invalid Line Found')
->body("Choose '6 inch motor line' to proceed..!")
->danger()
->send();
return;
}
}
else if ($categoryName == 'Submersible Pump')
{
if ($lineName != '6 inch pump line')
{
$this->form->fill([
'plant_id'=> $this->pId,
'block_name'=> $this->bId,
'shift_id'=> $this->sId,
'line_id'=> $this->lId,
'item_id'=> null,
'serial_number'=> null,
'success_msg'=> null,
'production_order'=> $this->prodOrder,
'sap_msg_status' => null,
'sap_msg_description' => null,
'operator_id'=> $operatorName,
'recent_qr' => $this->recQr,
]);
Notification::make()
->title('Invalid Line Found')
->body("Choose '6 inch pump line' to proceed..!")
->danger()
->send();
return;
}
}
else
{
$this->form->fill([
'plant_id'=> $this->pId,
'block_name'=> $this->bId,
'shift_id'=> $this->sId,
'line_id'=> $this->lId,
'item_id'=> null,
'serial_number'=> null,
'success_msg'=> null,
'production_order'=> $this->prodOrder,
'sap_msg_status' => null,
'sap_msg_description' => null,
'operator_id'=> $operatorName,
'recent_qr' => $this->recQr,
]);
Notification::make()
->title('Invalid Category Found')
->body("Set proper category to proceed..!")
->danger()
->send();
return;
}
if ($this->succId == null) {
$this->form->fill([
@@ -1398,42 +1364,6 @@ class StickerReprint extends Page implements HasForms
$itemCode = trim($parts[0]);
$this->sNoId = isset($parts[1]) ? trim($parts[1]) : null;
$originalQR = $this->qrData;
if (strpos($originalQR, '/') != false)
{
// Allowed endings
$allowed = ['/m', '/M', '/p', '/P', '/m|', '/M|', '/p|', '/P|'];
$foundValidEnding = false;
foreach ($allowed as $end) {
if (str_ends_with($originalQR, $end)) {
$foundValidEnding = true;
break;
}
}
if (!$foundValidEnding) {
Notification::make()
->title('Invalid QR Code')
->body("Invalid QR format: '$originalQR'")
->danger()
->send();
return;
}
}
if ($this->sNoId != null) {
$this->sNoId = preg_replace('/\/.*/', '', $serialNumberRaw);
$this->sNoId = trim($this->sNoId);
} else {
$this->sNoId = null;
}
//$this->qrData = preg_replace('/\/.*/', '', $this->qrData);
ProductionQuantity::create([
'plant_id'=> $this->pId,
'shift_id'=> $this->sId,
@@ -1448,6 +1378,7 @@ class StickerReprint extends Page implements HasForms
// after success insertion
$this->form->fill([
'plant_id'=> $this->pId,
'block_name'=> $this->bId,
'shift_id'=> $this->sId,
@@ -1470,7 +1401,7 @@ class StickerReprint extends Page implements HasForms
->duration(1000)
->send();
$url = route('download-qr1-pdf', ['palletNo' => urlencode($originalQR)]);
$url = route('download-qr1-pdf', ['palletNo' => $this->qrData]);
$this->js(<<<JS
window.dispatchEvent(new CustomEvent('open-pdf', {
detail: {
@@ -1487,16 +1418,11 @@ class StickerReprint extends Page implements HasForms
// Save the form data to the database or perform other operations
// For example:
$model = ProductionQuantity::create($formValues);
// $formValues['serial_number'] = $this->serialNumber;
// ProductionQuantity::create($formValues);
// dd('Production Updated Event Dispatched');
$this->dispatch('productionUpdated');
// // Optionally, you can emit an event or perform a redirect after saving
// $this->emit('formSaved', $model->id);
}

View File

@@ -1,25 +0,0 @@
<?php
namespace App\Filament\Pages;
use Filament\Pages\Page;
use Illuminate\Support\Facades\Auth;
class Welcome extends Page
{
protected static ?string $navigationIcon = 'heroicon-o-document-text';
protected static string $view = 'filament.pages.welcome';
public function getHeading(): string
{
return '';
}
// public static function canAccess(): bool
// {
// return Auth::check() && Auth::user()->can('view welcome page');
// }
}

View File

@@ -2,12 +2,9 @@
namespace App\Filament\Resources;
use App\Filament\Exports\AlertMailRuleExporter;
use App\Filament\Imports\AlertMailRuleImporter;
use App\Filament\Resources\AlertMailRuleResource\Pages;
use App\Filament\Resources\AlertMailRuleResource\RelationManagers;
use App\Models\AlertMailRule;
use App\Models\InvoiceMaster;
use App\Models\Plant;
use Dotenv\Exception\ValidationException;
use Filament\Facades\Filament;
@@ -20,13 +17,7 @@ use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Actions\Action;
use Filament\Notifications\Notification;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\DB;
use Illuminate\Validation\ValidationException as ValidationValidationException;
use Filament\Tables\Actions\ImportAction;
use Filament\Tables\Actions\ExportAction;
class AlertMailRuleResource extends Resource
{
@@ -60,7 +51,6 @@ class AlertMailRuleResource extends Resource
'InvoiceDataReport' => 'InvoiceDataReport',
'ProductionQuantities' => 'ProductionQuantities',
'QualityValidation' => 'QualityValidation',
'InvoiceTransit' => 'InvoiceTransit',
]),
Forms\Components\Select::make('rule_name')
->label('Rule Name')
@@ -71,7 +61,6 @@ class AlertMailRuleResource extends Resource
'ProductionMail' => 'Production Mail',
'InvoiceDataMail' => 'Invoice Data Mail',
'QualityMail' => 'Quality Mail',
'InvoiceTransitMail' => 'Invoice Transit Mail',
])
->required(),
Forms\Components\TextInput::make('email')
@@ -81,81 +70,35 @@ class AlertMailRuleResource extends Resource
->label('CC Emails'),
Forms\Components\Select::make('schedule_type')
->label('Schedule Type')
->required()
->options([
'Live' => 'Live',
'Hourly' => 'Hourly',
'Daily' => 'Daily',
]),
Forms\Components\Select::make('receiving_plant_name')
->label('Receiving Plant')
->options(
InvoiceMaster::query()
->whereNotNull('receiving_plant_name')
->select('receiving_plant_name')
->distinct()
->pluck('receiving_plant_name', 'receiving_plant_name')
)
->searchable()
->reactive()
->afterStateUpdated(function (callable $set) {
$set('invoice_master_id', null);
}),
Forms\Components\Select::make('invoice_master_id')
->label('Transporter Name')
->options(function (callable $get) {
$recPlant = $get('receiving_plant_name');
if (! $recPlant) {
return [];
}
return InvoiceMaster::query()
->where('receiving_plant_name', $recPlant)
->whereNotNull('transport_name')
->where('transport_name', '!=', '')
->orderBy('transport_name')
->pluck('transport_name', 'id')
->toArray();
})
->searchable(),
Checkbox::make('is_active')
->label('All Plants Reports')
->afterStateUpdated(fn ($state, callable $set) => $state ? $set('plant', null) : null)
->reactive(),
// Forms\Components\Actions::make([
// Action::make('sendInvoiceData')
// ->label('Invoice Data Report')
// ->action(function ($get) {
// $plantIds = AlertMailRule::where('module', 'InvoiceDataReport')
// ->orderBy('plant')
// ->pluck('plant')
// ->toArray();
// foreach ($plantIds as $plantId) {
// Artisan::call('send:invoice-data-report', [
// 'schedule_type' => 'Daily',
// 'plant' => $plantId,
// ]);
// }
// // Notify user in Filament
// Notification::make()
// ->title('Invoice data report sent successfully!')
// ->success()
// ->send();
// }),
// ]),
Forms\Components\Hidden::make('created_by')
->default(fn () => Filament::auth()->user()?->name),
Forms\Components\Hidden::make('updated_by')
->default(fn () => Filament::auth()->user()?->name),
])
->columns(2),
->columns(6),
]);
}
// Optionally, also override for update/editing
// public static function mutateFormDataBeforeSave(array $data): array
// {
// dd('test');
// if ($data['is_active']) {
// $data['plant'] = 'All Plants';
// }
// return $data;
// }
public static function table(Table $table): Table
{
return $table
@@ -190,14 +133,6 @@ class AlertMailRuleResource extends Resource
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('invoiceMaster.receiving_plant_name')
->label('Receiving Plant')
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('invoiceMaster.transport_name')
->label('Transporter')
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('email')
->label('TO Emails')
->searchable()
@@ -254,22 +189,6 @@ class AlertMailRuleResource extends Resource
Tables\Actions\ForceDeleteBulkAction::make(),
Tables\Actions\RestoreBulkAction::make(),
]),
])
->headerActions([
ImportAction::make()
->label('Import Alert Mail Rule')
->color('warning')
->importer(AlertMailRuleImporter::class)
->visible(function() {
return Filament::auth()->user()->can('view import alert mail rule');
}),
ExportAction::make()
->label('Export Alert Mail Rule')
->color('warning')
->exporter(AlertMailRuleExporter::class)
->visible(function() {
return Filament::auth()->user()->can('view export alert mail rule');
}),
]);
}

View File

@@ -1,332 +0,0 @@
<?php
namespace App\Filament\Resources;
use App\Filament\Exports\CharacteristicApproverMasterExporter;
use App\Filament\Resources\CharacteristicApproverMasterResource\Pages;
use App\Models\CharacteristicApproverMaster;
use App\Models\Machine;
use Filament\Facades\Filament;
use Filament\Forms;
use Filament\Forms\Components\Section;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Actions\ExportAction;
use Filament\Tables\Actions\ImportAction;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
class CharacteristicApproverMasterResource extends Resource
{
protected static ?string $model = CharacteristicApproverMaster::class;
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $navigationGroup = 'Laser Marking';
public static function form(Form $form): Form
{
return $form
->schema([
Section::make('')
->schema([
Forms\Components\Select::make('plant_id')
->label('Plant')
->columnSpan(2)
->reactive()
->relationship('plant', 'name')
->required()
->default(function () {
return optional(CharacteristicApproverMaster::latest()->first())->plant_id;
})
->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\Select::make('machine_id')
->label('Work Center')
->columnSpan(2)
// ->relationship('machine', 'name')
->reactive()
->searchable()
->options(function (callable $get) {
$plantId = $get('plant_id');
if (empty($plantId)) {
return [];
}
return Machine::where('plant_id', $plantId)->pluck('work_center', 'id');
})
->required()
->default(function () {
return optional(CharacteristicApproverMaster::latest()->first())->machine_id ?? [];
})
->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\TextInput::make('characteristic_field')
->label('Master Characteristic Field')
->columnSpan(2)
->required()
->default('NIL')
->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\TextInput::make('machine_name')
->label('Machine')
->columnSpan(2)
->required()
->default(function () {
return optional(CharacteristicApproverMaster::latest()->first())->machine_name ?? '';
})
->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Section::make('Approver - 1')
// ->description('Prevent abuse by limiting the number of requests per period')
->columnSpan(['default' => 2, 'sm' => 4])
->schema([
Forms\Components\TextInput::make('name1')
->label('Name')
->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\TextInput::make('mail1')
->label('Mail')
->columnSpan(['default' => 1, 'sm' => 2])
->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\TextInput::make('duration1')
->label('Duration (HH.MM)')
->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
])
->collapsed()// collapsible()
->columns(['default' => 1, 'sm' => 4]),
Section::make('Approver - 2')
->columnSpan(['default' => 2, 'sm' => 4])
->schema([
Forms\Components\TextInput::make('name2')
->label('Name')
->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\TextInput::make('mail2')
->label('Mail')
->columnSpan(['default' => 1, 'sm' => 2])
->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\TextInput::make('duration2')
->label('Duration (HH.MM)')
->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
])
->collapsed()// collapsible()
->columns(['default' => 1, 'sm' => 4]),
Section::make('Approver - 3')
->columnSpan(['default' => 2, 'sm' => 4])
->schema([
Forms\Components\TextInput::make('name3')
->label('Name')
->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\TextInput::make('mail3')
->label('Mail')
->columnSpan(['default' => 1, 'sm' => 2])
->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\TextInput::make('duration3')
->label('Duration (HH.MM)')
->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
])
->collapsed()// collapsible()
->columns(['default' => 1, 'sm' => 4]),
Forms\Components\Hidden::make('created_by')
->label('Created By')
->default(Filament::auth()->user()?->name),
Forms\Components\Hidden::make('updated_by')
->label('Updated By')
->default(Filament::auth()->user()?->name),
Forms\Components\TextInput::make('id')
->hidden()
->readOnly(),
])
->columns(['default' => 1, 'sm' => 4]),
]);
}
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()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('machine.work_center')
->label('Work Center')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('characteristic_field')
->label('Master Characteristic Field')
->alignCenter()
->searchable()
->formatStateUsing(fn (string $state): string => strtoupper(__($state)))
->extraAttributes(['class' => 'uppercase'])
->sortable(),
Tables\Columns\TextColumn::make('machine_name')
->label('Machine Name')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('name1')
->label('Approver Name 1')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('mail1')
->label('Mail 1')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('duration1')
->label('Duration 1 (Hour.Minute)')
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('name2')
->label('Approver Name 2')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('mail2')
->label('Mail 2')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('duration2')
->label('Duration 2 (Hour.Minute)')
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('name3')
->label('Approver Name 3')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('mail3')
->label('Mail 3')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('duration3')
->label('Duration 3 (Hour.Minute)')
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('created_at')
->label('Created At')
->alignCenter()
->dateTime()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('created_by')
->label('Created By')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('updated_at')
->label('Updated At')
->alignCenter()
->dateTime()
->searchable()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('updated_by')
->label('Updated By')
->alignCenter()
->searchable()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('deleted_at')
->label('Deleted At')
->dateTime()
->alignCenter()
->searchable()
->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 Request Characteristics')
// ->color('warning')
// ->importer(CharacteristicApproverMasterImporter::class)
// ->visible(function () {
// return Filament::auth()->user()->can('view import characteristic approver master');
// }),
ExportAction::make()
->label('Export Request Characteristics')
->color('warning')
->exporter(CharacteristicApproverMasterExporter::class)
->visible(function () {
return Filament::auth()->user()->can('view export characteristic approver master');
}),
]);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => Pages\ListCharacteristicApproverMasters::route('/'),
'create' => Pages\CreateCharacteristicApproverMaster::route('/create'),
'view' => Pages\ViewCharacteristicApproverMaster::route('/{record}'),
'edit' => Pages\EditCharacteristicApproverMaster::route('/{record}/edit'),
];
}
public static function getEloquentQuery(): Builder
{
return parent::getEloquentQuery()
->withoutGlobalScopes([
SoftDeletingScope::class,
]);
}
}

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,536 +0,0 @@
<?php
namespace App\Filament\Resources;
use App\Filament\Exports\CharacteristicValueExporter;
use App\Filament\Imports\CharacteristicValueImporter;
use App\Filament\Resources\CharacteristicValueResource\Pages;
use App\Models\CharacteristicValue;
use App\Models\Item;
use App\Models\Line;
use App\Models\Machine;
use App\Models\Plant;
use Filament\Facades\Filament;
use Filament\Forms;
use Filament\Forms\Components\DateTimePicker;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Actions\ExportAction;
use Filament\Tables\Actions\ImportAction;
use Filament\Tables\Filters\Filter;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
class CharacteristicValueResource extends Resource
{
protected static ?string $model = CharacteristicValue::class;
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $navigationGroup = 'Process Order';
public static function form(Form $form): Form
{
return $form
->schema([
Forms\Components\Select::make('plant_id')
->label('Plant')
->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::pluck('name', 'id')->toArray();
})
->reactive()
->afterStateUpdated(function ($state, $set, callable $get) {
$plantId = $get('plant_id');
$set('item_id', null);
$set('line_id', null);
$set('machine_id', null);
if (! $plantId) {
$set('poPlantError', 'Please select a plant first.');
}
})
->extraAttributes(fn ($get) => [
'class' => $get('poPlantError') ? 'border-red-500' : '',
])
->hint(fn ($get) => $get('poPlantError') ? $get('poPlantError') : null)
->hintColor('danger')
->required(),
Forms\Components\Select::make('line_id')
->label('Line')
->options(function (callable $get) {
if (! $get('plant_id')) {
return [];
}
return Line::where('plant_id', $get('plant_id'))
->pluck('name', 'id')
->toArray();
})
->afterStateUpdated(function ($state, $set, callable $get) {
$plantId = $get('plant_id');
$set('item_id', null);
$set('machine_id', null);
if (! $plantId) {
$set('poPlantError', 'Please select a plant first.');
}
})
->reactive()
->required(),
Forms\Components\Select::make('item_id')
->label('Item')
->options(function (callable $get) {
if (! $get('plant_id') || ! $get('line_id')) {
return [];
}
return Item::where('plant_id', $get('plant_id'))
->pluck('code', 'id')
->toArray();
})
->afterStateUpdated(function ($state, $set, callable $get) {
$plantId = $get('plant_id');
$set('machine_id', null);
if (! $plantId) {
$set('poPlantError', 'Please select a plant first.');
}
})
->reactive()
->required()
->searchable(),
Forms\Components\Select::make('machine_id')
->label('Machine')
->options(function (callable $get) {
if (! $get('plant_id') || ! $get('line_id') || ! $get('item_id')) {
return [];
}
return Machine::where('plant_id', $get('plant_id'))
->where('line_id', $get('line_id'))
->pluck('work_center', 'id')
->toArray();
})
->afterStateUpdated(function ($state, $set, callable $get) {
$plantId = $get('plant_id');
$set('process_order', null);
$set('coil_number', null);
$set('status', null);
if (! $plantId) {
$set('poPlantError', 'Please select a plant first.');
}
})
->reactive()
->required(),
Forms\Components\TextInput::make('process_order')
->label('Process Order')
->reactive()
->afterStateUpdated(function ($state, $set, callable $get) {
$plantId = $get('plant_id');
$set('coil_number', null);
$set('status', null);
if (! $plantId) {
$set('poPlantError', 'Please select a plant first.');
}
})
->required(),
Forms\Components\TextInput::make('coil_number')
->label('Coil Number')
// ->reactive()
// ->afterStateUpdated(function ($state, $set, callable $get) {
// $plantId = $get('plant_id');
// $set('status', null);
// if (! $plantId) {
// $set('poPlantError', 'Please select a plant first.');
// }
// })
// ->required(),
->label('Coil Number')
->default('0')
->reactive()
->afterStateUpdated(function ($state, $set, callable $get, $livewire) {
$plantId = $get('plant_id');
$processOrder = $get('process_order');
$coilNo = $get('coil_number');
if (! $plantId) {
$set('poPlantError', 'Please select a plant first.');
} elseif (! $processOrder) {
$set('coil_number', null);
$set('poPlantError', null);
} elseif ($coilNo || $coilNo == '0') {
$existing = CharacteristicValue::where('plant_id', $plantId)
->where('process_order', $processOrder)
->where('coil_number', $coilNo)
->first();
if ($existing) {
$set('poPlantError', null);
$set('coil_number', null);
$set('coilNumberError', "Duplicate Coil : '{$coilNo}' found!");
} else {
$set('poPlantError', null);
$set('coilNumberError', null);
}
}
})
->extraAttributes(fn ($get) => [
'class' => $get('coilNumberError') ? 'border-red-500' : '',
])
->hint(fn ($get) => $get('coilNumberError') ? $get('coilNumberError') : null)
->hintColor('danger')
->required(),
Forms\Components\TextInput::make('observed_value')
->label('Observed Value')
->reactive()
->required(),
Forms\Components\Select::make('status')
->label('Status')
->options([
'Ok' => 'OK',
'NotOk' => 'Not Ok',
])
->reactive()
->required(),
Forms\Components\Hidden::make('created_by')
->label('Created By')
->default(Filament::auth()->user()?->name),
Forms\Components\Hidden::make('updated_by')
->label('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')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('line.name')
->label('Line')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('item.code')
->label('Item')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('machine.work_center')
->label('Machine')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('process_order')
->label('Process Order')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('coil_number')
->label('Coil Number')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('observed_value')
->label('Observed value')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('status')
->label('Status')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('created_by')
->label('Created By')
->searchable()
->alignCenter()
->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')
->label('Deleted At')
->alignCenter()
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
])
// ->filters([
// Tables\Filters\TrashedFilter::make(),
// ])
->filters([
Tables\Filters\TrashedFilter::make(),
Filter::make('advanced_filters')
->label('Advanced Filters')
->form([
Select::make('Plant')
->label('Select Plant')
->nullable()
->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();
})
->reactive()
->afterStateUpdated(function ($state, callable $set, callable $get) {
$set('Item', null);
}),
Select::make('Line')
->label('Select Line')
->nullable()
->options(function (callable $get) {
$plantId = $get('Plant');
if (empty($plantId)) {
return [];
}
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);
}),
Select::make('Item')
->label('Item Code')
->nullable()
->searchable()
->options(function (callable $get) {
$plantId = $get('Plant');
if (empty($plantId)) {
return [];
}
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('Select Machine')
->nullable()
->options(function (callable $get) {
$plantId = $get('Plant');
$lineId = $get('Line');
if (empty($plantId) || empty($lineId)) {
return [];
}
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('coil_number')
->label('Coil Number')
->placeholder(placeholder: 'Enter Coil Number'),
Select::make('status')
->label('Status')
->options([
'Ok' => 'OK',
'NotOk' => 'Not Ok',
]),
DateTimePicker::make(name: 'created_from')
->label('Created From')
->placeholder(placeholder: 'Select From DateTime')
->reactive()
->native(false),
DateTimePicker::make('created_to')
->label('Created To')
->placeholder(placeholder: 'Select To DateTime')
->reactive()
->native(false),
])
->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['Machine']) && empty($data['process_order']) && empty($data['coil_number']) && empty($data['status']) && empty($data['created_from']) && empty($data['created_to'])) {
return $query->whereRaw('1 = 0');
}
if (! empty($data['Plant'])) {
$query->where('plant_id', $data['Plant']);
} else {
$userHas = Filament::auth()->user()->plant_id;
if ($userHas && strlen($userHas) > 0) {
return $query->whereRaw('1 = 0');
}
}
if (! empty($data['Line'])) {
$query->where('line_id', $data['Line']);
}
if (! empty($data['Item'])) {
$query->where('item_id', $data['Item']);
}
if (! empty($data['Machine'])) {
$query->where('machine_id', $data['Machine']);
}
if (! empty($data['process_order'])) {
$query->where('process_order', $data['process_order']);
}
if (! empty($data['coil_number'])) {
$query->where('coil_number', $data['coil_number']);
}
if (! empty($data['status'])) {
$query->where('status', $data['status']);
}
if (! empty($data['created_from'])) {
$query->where('created_at', '>=', $data['created_from']);
}
if (! empty($data['created_to'])) {
$query->where('created_at', '<=', $data['created_to']);
}
// $query->orderBy('created_at', 'asc');
})
->indicateUsing(function (array $data) {
$indicators = [];
if (! empty($data['Plant'])) {
$indicators[] = 'Plant: '.Plant::where('id', $data['Plant'])->value('name');
} else {
$userHas = Filament::auth()->user()->plant_id;
if ($userHas && strlen($userHas) > 0) {
return 'Plant: Choose plant to filter records.';
}
}
if (! empty($data['Line'])) {
$indicators[] = 'Line: '.Line::where('id', $data['Line'])->value('name');
}
if (! empty($data['Item'])) {
$indicators[] = 'Item: '.Item::where('id', $data['Item'])->value('code');
}
if (! empty($data['Machine'])) {
$indicators[] = 'Machine: '.Machine::where('id', $data['Machine'])->value('work_center');
}
if (! empty($data['process_order'])) {
$indicators[] = 'Process Order: '.$data['process_order'];
}
if (! empty($data['coil_number'])) {
$indicators[] = 'Coil Number: '.$data['coil_number'];
}
if (! empty($data['status'])) {
$indicators[] = 'Status: '.$data['status'];
}
if (! empty($data['created_from'])) {
$indicators[] = 'From: '.$data['created_from'];
}
if (! empty($data['created_to'])) {
$indicators[] = 'To: '.$data['created_to'];
}
return $indicators;
}),
])
->filtersFormMaxHeight('280px')
->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()
->importer(CharacteristicValueImporter::class)
->label('Import Characteristic Value')
->color('warning')
->visible(function () {
return Filament::auth()->user()->can('view import characteristic value');
}),
ExportAction::make()
->exporter(CharacteristicValueExporter::class)
->label('Export Characteristic Value')
->color('warning')
->visible(function () {
return Filament::auth()->user()->can('view export characteristic value');
}),
]);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => Pages\ListCharacteristicValues::route('/'),
'create' => Pages\CreateCharacteristicValue::route('/create'),
'view' => Pages\ViewCharacteristicValue::route('/{record}'),
'edit' => Pages\EditCharacteristicValue::route('/{record}/edit'),
];
}
public static function getEloquentQuery(): Builder
{
return parent::getEloquentQuery()
->withoutGlobalScopes([
SoftDeletingScope::class,
]);
}
}

View File

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

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

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

View File

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

View File

@@ -5,22 +5,23 @@ namespace App\Filament\Resources;
use App\Filament\Exports\EbReadingExporter;
use App\Filament\Imports\EbReadingImporter;
use App\Filament\Resources\EbReadingResource\Pages;
use App\Filament\Resources\EbReadingResource\RelationManagers;
use App\Models\EbReading;
use App\Models\Plant;
use Filament\Facades\Filament;
use Filament\Forms;
use Filament\Forms\Components\DateTimePicker;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Actions\ExportAction;
use Filament\Tables\Actions\ImportAction;
use Filament\Tables\Filters\Filter;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Tables\Actions\ImportAction;
use Filament\Tables\Actions\ExportAction;
use Filament\Facades\Filament;
use Filament\Tables\Filters\Filter;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\DateTimePicker;
class EbReadingResource extends Resource
{
@@ -38,7 +39,6 @@ class EbReadingResource extends Resource
->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::pluck('name', 'id')->toArray();
})
->required(),
@@ -154,7 +154,6 @@ class EbReadingResource extends Resource
$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')
@@ -335,7 +334,6 @@ class EbReadingResource extends Resource
// })
->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();
})
->reactive()
@@ -361,25 +359,19 @@ class EbReadingResource extends Resource
return $query->whereRaw('1 = 0');
}
if (! empty($data['Plant'])) {
if (!empty($data['Plant'])) {
$query->where('plant_id', $data['Plant']);
} else {
$userHas = Filament::auth()->user()->plant_id;
if ($userHas && strlen($userHas) > 0) {
return $query->whereRaw('1 = 0');
}
}
if (! empty($data['created_from'])) {
if (!empty($data['created_from'])) {
$query->where('created_at', '>=', $data['created_from']);
}
if (! empty($data['created_to'])) {
if (!empty($data['created_to'])) {
$query->where('created_at', '<=', $data['created_to']);
}
if (! empty($data['electrician_sign'])) {
if (!empty($data['electrician_sign'])) {
$query->where('electrician_sign', $data['electrician_sign']);
}
@@ -387,30 +379,24 @@ class EbReadingResource extends Resource
->indicateUsing(function (array $data) {
$indicators = [];
if (! empty($data['Plant'])) {
$indicators[] = 'Plant: '.Plant::where('id', $data['Plant'])->value('name');
} else {
$userHas = Filament::auth()->user()->plant_id;
if ($userHas && strlen($userHas) > 0) {
return 'Plant: Choose plant to filter records.';
}
if (!empty($data['Plant'])) {
$indicators[] = 'Plant: ' . Plant::where('id', $data['Plant'])->value('name');
}
if (! empty($data['electrician_sign'])) {
$indicators[] = 'Created By: '.$data['electrician_sign'];
if (!empty($data['electrician_sign'])) {
$indicators[] = 'Created By: ' . $data['electrician_sign'];
}
if (! empty($data['created_from'])) {
$indicators[] = 'From: '.$data['created_from'];
if (!empty($data['created_from'])) {
$indicators[] = 'From: ' . $data['created_from'];
}
if (! empty($data['created_to'])) {
$indicators[] = 'To: '.$data['created_to'];
if (!empty($data['created_to'])) {
$indicators[] = 'To: ' . $data['created_to'];
}
return $indicators;
}),
})
])
->filtersFormMaxHeight('280px')
->actions([
@@ -429,14 +415,14 @@ class EbReadingResource extends Resource
->label('Import EB Readings')
->color('warning')
->importer(EbReadingImporter::class)
->visible(function () {
->visible(function() {
return Filament::auth()->user()->can('view import eb reading');
}),
ExportAction::make()
->label('Export EB Readings')
->color('warning')
->exporter(EbReadingExporter::class)
->visible(function () {
->visible(function() {
return Filament::auth()->user()->can('view export eb reading');
}),
]);

Some files were not shown because too many files have changed in this diff Show More