1
0
forked from poc/pds

resolved logic invoice report

This commit is contained in:
dhanabalan
2025-07-10 17:46:34 +05:30
parent 6a8978f676
commit b73202e03f
2 changed files with 211 additions and 159 deletions

View File

@@ -16,7 +16,7 @@ class SendInvoiceReport extends Command
* @var string * @var string
*/ */
// protected $signature = 'app:send-invoice-report'; // protected $signature = 'app:send-invoice-report';
protected $signature = 'send:invoice-report'; protected $signature = 'send:invoice-report{schedule_type} {plant}';
/** /**
@@ -29,168 +29,220 @@ class SendInvoiceReport extends Command
/** /**
* Execute the console command. * Execute the console command.
*/ */
// public function handle()
// {
// //
// }
// public function handle() // public function handle()
// { // {
// $mailRules = \App\Models\AlertMailRule::where('module', 'InvoiceValidation') // $schedule = $this->argument('schedule_type');
// ->where('rule_name', 'InvoiceMailAlert') // $plantid = $this->argument('plant');
// ->get();
// $emails = $mailRules->pluck('email')->unique()->toArray(); // $mailRules = \App\Models\AlertMailRule::where('module', 'InvoiceValidation')->get()->groupBy('rule_name');
// $startDate = now()->setTime(8, 0, 0);
// $endDate = now()->copy()->addDay()->setTime(8, 0, 0);
// $plants = InvoiceValidation::select('plant_id')->distinct()->pluck('plant_id'); // $plants = InvoiceValidation::select('plant_id')->distinct()->pluck('plant_id');
// $tableData = [];
// $no = 1; // $serialTableData = [];
// $materialTableData = [];
// $bundleTableData = [];
// $noSerial = 1;
// $noMaterial = 1;
// $noBundle = 1;
// foreach ($plants as $plantId) { // foreach ($plants as $plantId) {
// $plant = Plant::find($plantId); // $plant = Plant::find($plantId);
// $plantName = $plant ? $plant->name : $plantId; // $plantName = $plant ? $plant->name : $plantId;
// $totalInvoice = InvoiceValidation::where('plant_id', $plantId) // //..Serial Invoice
// $totalSerialCount = InvoiceValidation::where('plant_id', $plantId)
// ->whereNull('quantity')
// ->whereBetween('created_at', [$startDate, $endDate])
// ->distinct('invoice_number') // ->distinct('invoice_number')
// ->count('invoice_number'); // ->count('invoice_number');
// $startDate = now()->setTime(8, 0, 0); // $scannedSerialCount = InvoiceValidation::select('invoice_number')
// $endDate = now()->copy()->addDay()->setTime(8, 0, 0);
// $scannedInvoice = InvoiceValidation::select('invoice_number')
// ->where('plant_id', $plantId) // ->where('plant_id', $plantId)
// ->whereNull('quantity') // ->whereNull('quantity')
// ->whereBetween('updated_at', [$startDate, $endDate]) // ->whereBetween('updated_at', [$startDate, $endDate])
// ->groupBy('invoice_number') // ->groupBy('invoice_number')
// ->havingRaw("COUNT(*) = SUM(CASE WHEN scanned_status = 'Scanned' THEN 1 ELSE 0 END)") // ->havingRaw(
// "COUNT(*) = SUM(CASE WHEN scanned_status = 'Scanned' THEN 1 ELSE 0 END)"
// )
// ->count(); // ->count();
// $tableData[] = [ // $serialTableData[] = [
// 'no' => $no++, // 'no' => $noSerial++,
// 'plant' => $plantName, // 'plant' => $plantName,
// 'totalInvoice' => $totalInvoice, // 'totalInvoice' => $totalSerialCount,
// 'scannedInvoice' => $scannedInvoice, // 'scannedInvoice' => $scannedSerialCount,
// ];
// //..Individual Invoice
// $TotalMatCount = InvoiceValidation::where('plant_id', $plantId)
// ->where('quantity', 1)
// ->whereBetween('created_at', [$startDate, $endDate])
// ->distinct('invoice_number')
// ->count('invoice_number');
// $scannedMatCount = InvoiceValidation::select('invoice_number')
// ->where('plant_id', $plantId)
// ->where('quantity', 1)
// ->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();
// $materialTableData[] = [
// 'no' => $noMaterial++,
// 'plant' => $plantName,
// 'totalInvoice' => $TotalMatCount,
// 'scannedInvoice' => $scannedMatCount,
// ];
// //..BUndle Invoice
// $totalBundleCount = InvoiceValidation::where('plant_id', $plantId)
// ->where('quantity', '>', 1)
// ->whereBetween('created_at', [$startDate, $endDate])
// ->distinct('invoice_number')
// ->count('invoice_number');
// $scannedBundleCount = InvoiceValidation::select('invoice_number')
// ->where('plant_id', $plantId)
// ->where('quantity', '>', 1)
// ->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();
// $bundleTableData[] = [
// 'no' => $noBundle++,
// 'plant' => $plantName,
// 'totalInvoice' => $totalBundleCount,
// 'scannedInvoice' => $scannedBundleCount,
// ]; // ];
// } // }
// // Mail::to('jothikumar.padmanaban@cripumps.com')->send( // // Send to SerialInvoiceMail recipients
// // new test($tableData) // if ($mailRules->has('SerialInvoiceMail')) {
// // ); // $emails = $mailRules['SerialInvoiceMail']->pluck('email')->unique()->toArray();
// if (!empty($emails))
// {
// // Mail::to($emails)->send(new test($tableData));
// // $this->info('Invoice report email sent successfully to: ' . implode(', ', $emails));
// foreach ($emails as $email) { // foreach ($emails as $email) {
// Mail::to($email)->send(new test($tableData)); // Mail::to($email)->send(new test($serialTableData, [], []));
// } // }
// } // }
// else // // Send to MaterialInvoiceMail recipients (material + bundle table)
// { // if ($mailRules->has('MaterialInvoiceMail')) {
// $this->info('No recipients found for InvoiceMailAlert.'); // $emails = $mailRules['MaterialInvoiceMail']->pluck('email')->unique()->toArray();
// foreach ($emails as $email) {
// Mail::to($email)->send(new test([], $materialTableData, $bundleTableData));
// }
// } // }
// // 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));
// }
// }
// //$this->info(json_encode($materialTableData));
// } // }
public function handle() public function handle()
{ {
// Group emails by rule name $schedule = $this->argument('schedule_type');
$plantId = $this->argument('plant');
$mailRules = \App\Models\AlertMailRule::where('module', 'InvoiceValidation')->get()->groupBy('rule_name'); $mailRules = \App\Models\AlertMailRule::where('module', 'InvoiceValidation')->get()->groupBy('rule_name');
$startDate = now()->setTime(8, 0, 0); $startDate = now()->setTime(8, 0, 0);
$endDate = now()->copy()->addDay()->setTime(8, 0, 0); $endDate = now()->copy()->addDay()->setTime(8, 0, 0);
$plants = InvoiceValidation::select('plant_id')->distinct()->pluck('plant_id');
// Build all tables once
$serialTableData = []; $serialTableData = [];
$materialTableData = []; $materialTableData = [];
$bundleTableData = []; $bundleTableData = [];
$noSerial = 1;
$noMaterial = 1;
$noBundle = 1;
foreach ($plants as $plantId) { $plant = Plant::find($plantId);
$plant = Plant::find($plantId); $plantName = $plant ? $plant->name : $plantId;
$plantName = $plant ? $plant->name : $plantId;
//..Serial Invoice // Serial Invoice
$totalSerialCount = InvoiceValidation::where('plant_id', $plantId)
->whereNull('quantity')
->whereBetween('created_at', [$startDate, $endDate])
->distinct('invoice_number')
->count('invoice_number');
$totalSerialCount = InvoiceValidation::where('plant_id', $plantId) $scannedSerialCount = InvoiceValidation::select('invoice_number')
->whereNull('quantity') ->where('plant_id', $plantId)
->whereBetween('created_at', [$startDate, $endDate]) ->whereNull('quantity')
->distinct('invoice_number') ->whereBetween('updated_at', [$startDate, $endDate])
->count('invoice_number'); ->groupBy('invoice_number')
->havingRaw(
"COUNT(*) = SUM(CASE WHEN scanned_status = 'Scanned' THEN 1 ELSE 0 END)"
)
->count();
$scannedSerialCount = InvoiceValidation::select('invoice_number') $serialTableData[] = [
->where('plant_id', $plantId) 'no' => 1,
->whereNull('quantity') 'plant' => $plantName,
->whereBetween('updated_at', [$startDate, $endDate]) 'totalInvoice' => $totalSerialCount,
->groupBy('invoice_number') 'scannedInvoice' => $scannedSerialCount,
->havingRaw( ];
"COUNT(*) = SUM(CASE WHEN scanned_status = 'Scanned' THEN 1 ELSE 0 END)"
)
->count();
$serialTableData[] = [ // Individual Material Invoice
'no' => $noSerial++, $TotalMatCount = InvoiceValidation::where('plant_id', $plantId)
'plant' => $plantName, ->where('quantity', 1)
'totalInvoice' => $totalSerialCount, ->whereBetween('created_at', [$startDate, $endDate])
'scannedInvoice' => $scannedSerialCount, ->distinct('invoice_number')
]; ->count('invoice_number');
//..Individual Invoice $scannedMatCount = InvoiceValidation::select('invoice_number')
->where('plant_id', $plantId)
->where('quantity', 1)
->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();
$TotalMatCount = InvoiceValidation::where('plant_id', $plantId) $materialTableData[] = [
->where('quantity', 1) 'no' => 1,
->whereBetween('created_at', [$startDate, $endDate]) 'plant' => $plantName,
->distinct('invoice_number') 'totalInvoice' => $TotalMatCount,
->count('invoice_number'); 'scannedInvoice' => $scannedMatCount,
];
$scannedMatCount = InvoiceValidation::select('invoice_number') // Bundle Invoice
->where('plant_id', $plantId) $totalBundleCount = InvoiceValidation::where('plant_id', $plantId)
->where('quantity', 1) ->where('quantity', '>', 1)
->whereBetween('updated_at', [$startDate, $endDate]) ->whereBetween('created_at', [$startDate, $endDate])
->groupBy('invoice_number') ->distinct('invoice_number')
->havingRaw( ->count('invoice_number');
"COUNT(*) = SUM(CASE WHEN serial_number IS NOT NULL AND serial_number != '' THEN 1 ELSE 0 END)"
)
->count();
$materialTableData[] = [ $scannedBundleCount = InvoiceValidation::select('invoice_number')
'no' => $noMaterial++, ->where('plant_id', $plantId)
'plant' => $plantName, ->where('quantity', '>', 1)
'totalInvoice' => $TotalMatCount, ->whereBetween('updated_at', [$startDate, $endDate])
'scannedInvoice' => $scannedMatCount, ->groupBy('invoice_number')
]; ->havingRaw(
"COUNT(*) = SUM(CASE WHEN serial_number IS NOT NULL AND serial_number != '' THEN 1 ELSE 0 END)"
)
->count();
//..BUndle Invoice $bundleTableData[] = [
'no' => 1,
$totalBundleCount = InvoiceValidation::where('plant_id', $plantId) 'plant' => $plantName,
->where('quantity', '>', 1) 'totalInvoice' => $totalBundleCount,
->whereBetween('created_at', [$startDate, $endDate]) 'scannedInvoice' => $scannedBundleCount,
->distinct('invoice_number') ];
->count('invoice_number');
$scannedBundleCount = InvoiceValidation::select('invoice_number')
->where('plant_id', $plantId)
->where('quantity', '>', 1)
->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();
$bundleTableData[] = [
'no' => $noBundle++,
'plant' => $plantName,
'totalInvoice' => $totalBundleCount,
'scannedInvoice' => $scannedBundleCount,
];
}
// Send to SerialInvoiceMail recipients // Send to SerialInvoiceMail recipients
if ($mailRules->has('SerialInvoiceMail')) { if ($mailRules->has('SerialInvoiceMail')) {
@@ -216,8 +268,10 @@ class SendInvoiceReport extends Command
} }
} }
//$this->info(json_encode($materialTableData)); // $this->table(
// ['No', 'Plant', 'Total Invoice', 'Scanned Invoice'],
// $serialTableData
// );
} }
} }

View File

@@ -12,57 +12,55 @@ Artisan::command('inspire', function () {
// Schedule::command('send:invoice-report'); // Schedule::command('send:invoice-report');
// Schedule::command('send:production-report'); // Schedule::command('send:production-report');
// app()->booted(function () { app()->booted(function () {
// $schedule = app(Schedule::class); $schedule = app(Schedule::class);
// $productionRules = AlertMailRule::where('module', 'ProductionQuantities') //Production report scheduling
// ->where('rule_name', 'ProductionMail')
// ->get();
// $types = $productionRules->pluck('schedule_type')->unique(); $productionRules = AlertMailRule::where('module', 'ProductionQuantities')
->where('rule_name', 'ProductionMail')
->get();
// foreach ($types as $type) { foreach ($productionRules as $rule) {
// $command = $schedule->command("send:production-report", [$type]); $type = $rule->schedule_type;
// switch ($type) { $plantId = $rule->plant;
// case 'Live':
// $command->everyMinute();
// break;
// case 'Hourly':
// $command->hourly();
// break;
// case 'Daily':
// $command->dailyAt('07:59');
// break;
// }
// }
// });
app()->booted(function () { $command = $schedule->command('send:production-report', [$type, $plantId]);
$schedule = app(Schedule::class);
$productionRules = AlertMailRule::where('module', 'ProductionQuantities') switch ($type) {
->where('rule_name', 'ProductionMail') case 'Live':
->get(); $command->everyMinute();
break;
// Loop each mail rule individually (plant + schedule_type) case 'Hourly':
foreach ($productionRules as $rule) { $command->hourly();
$type = $rule->schedule_type; break;
$plantId = $rule->plant; case 'Daily':
$command->dailyAt('07:59');
$command = $schedule->command('send:production-report', [$type, $plantId]); break;
}
switch ($type) {
case 'Live':
$command->everyMinute();
break;
case 'Hourly':
$command->hourly();
break;
case 'Daily':
$command->dailyAt('07:59');
break;
} }
}
}); //Invoice report scheduling
$invoiceRules = AlertMailRule::where('module', 'InvoiceValidation')->get();
foreach ($invoiceRules as $rule) {
$type = $rule->schedule_type;
$plantId = $rule->plant;
$command = $schedule->command('send:invoice-report', [$type, $plantId]);
switch ($type) {
case 'Live':
$command->everyMinute();
break;
case 'Hourly':
$command->hourly();
break;
case 'Daily':
$command->dailyAt('07:59');
break;
}
}
});