Merge pull request 'Changed whole logic for invoice report' (#653) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled

Reviewed-on: #653
This commit was merged in pull request #653.
This commit is contained in:
2026-05-26 12:28:25 +00:00
2 changed files with 125 additions and 20 deletions

View File

@@ -77,7 +77,7 @@ class Scheduler extends Command
} }
} }
// --- Invoice Validation Rules --- // --- Invoice Validation Rules --- (Invoice Mail)
$invoiceRules = AlertMailRule::where('module', 'InvoiceValidation') $invoiceRules = AlertMailRule::where('module', 'InvoiceValidation')
->where('rule_name', 'InvoiceMail') ->where('rule_name', 'InvoiceMail')
->select('plant', 'schedule_type') ->select('plant', 'schedule_type')
@@ -104,7 +104,83 @@ class Scheduler extends Command
} }
break; break;
case 'Daily': case 'Daily':
if (now()->format('H:i') == '07:59') { if (now()->format('H:i') == '17:55') {
\Artisan::call('send:invoice-report', [
'schedule_type' => $rule->schedule_type,
'plant' => $rule->plant,
]);
}
break;
}
}
//..SerialInvoice
$invoiceSerialRules = AlertMailRule::where('module', 'InvoiceValidation')
->where('rule_name', 'SerialInvoiceMail')
->select('plant', 'schedule_type')
->distinct()
->get();
foreach ($invoiceSerialRules 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') == '17:55') {
\Artisan::call('send:invoice-report', [
'schedule_type' => $rule->schedule_type,
'plant' => $rule->plant,
]);
}
break;
}
}
//..MaterialInvoice
$invoiceMaterialRules = AlertMailRule::where('module', 'InvoiceValidation')
->where('rule_name', 'MaterialInvoiceMail')
->select('plant', 'schedule_type')
->distinct()
->get();
foreach ($invoiceMaterialRules 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') == '17:55') {
\Artisan::call('send:invoice-report', [ \Artisan::call('send:invoice-report', [
'schedule_type' => $rule->schedule_type, 'schedule_type' => $rule->schedule_type,
'plant' => $rule->plant, 'plant' => $rule->plant,

View File

@@ -3,6 +3,7 @@
namespace App\Console\Commands; namespace App\Console\Commands;
use App\Mail\test; use App\Mail\test;
use App\Models\AlertMailRule;
use App\Models\InvoiceValidation; use App\Models\InvoiceValidation;
use App\Models\Plant; use App\Models\Plant;
use Illuminate\Console\Command; use Illuminate\Console\Command;
@@ -31,19 +32,31 @@ class SendInvoiceReport extends Command
public function handle() public function handle()
{ {
$schedule = $this->argument('schedule_type'); $schedule = $this->argument('schedule_type');
// $scheduleType = $this->argument('scheduleType');
$plantIdArg = (int) $this->argument('plant'); $plantIdArg = (int) $this->argument('plant');
$mailRules = \App\Models\AlertMailRule::where('module', 'InvoiceValidation')->get()->groupBy('rule_name'); $invoiceRules = AlertMailRule::where('module', 'InvoiceValidation')
->where('rule_name', 'InvoiceMail')
->where('plant', $plantIdArg)
->get();
// $startDate = now()->setTime(8, 0, 0); $serialRules = AlertMailRule::where('module', 'InvoiceValidation')
// $endDate = now()->copy()->addDay()->setTime(8, 0, 0); ->where('rule_name', 'SerialInvoiceMail')
->where('plant', $plantIdArg)
->get();
$materialRules = AlertMailRule::where('module', 'InvoiceValidation')
->where('rule_name', 'MaterialInvoiceMail')
->where('plant', $plantIdArg)
->get();
// $this->info('Invoice Rules: ' . $invoiceRules->toJson());
// $this->info('Serial Rules: ' . $serialRules->toJson());
// $this->info('Material Rules: ' . $materialRules->toJson());
$serialTableData = []; $serialTableData = [];
$materialTableData = []; $materialTableData = [];
$bundleTableData = []; $bundleTableData = [];
// Get plant IDs: either one plant or all
$plantIds = $plantIdArg == 0 $plantIds = $plantIdArg == 0
? InvoiceValidation::select('plant_id')->distinct()->pluck('plant_id')->toArray() ? InvoiceValidation::select('plant_id')->distinct()->pluck('plant_id')->toArray()
: [$plantIdArg]; : [$plantIdArg];
@@ -251,11 +264,23 @@ class SendInvoiceReport extends Command
// } // }
// } // }
if ($mailRules->has('SerialInvoiceMail')) { if ($serialRules->isNotEmpty()) {
foreach ($mailRules->get('SerialInvoiceMail') as $rule) { foreach ($serialRules as $rule) {
if ($isPlantRun && $rule->plant != $plantIdArg && $rule->plant != 0) { if (
$isPlantRun &&
$plantIdArg != 0 &&
$rule->plant != 0 &&
$rule->plant != $plantIdArg
) {
continue;
}
if (
$plantIdArg == 0 &&
$rule->plant != 0
) {
continue; continue;
} }
@@ -273,12 +298,12 @@ class SendInvoiceReport extends Command
} }
// Send to MaterialInvoiceMail recipients (material + bundle table) // Send to MaterialInvoiceMail recipients (material + bundle table)
if ($mailRules->has('MaterialInvoiceMail')) { if ($materialRules->isNotEmpty()) {
// $emails = $mailRules['MaterialInvoiceMail']->pluck('email')->unique()->toArray(); // $emails = $mailRules['MaterialInvoiceMail']->pluck('email')->unique()->toArray();
// foreach ($emails as $email) { // foreach ($emails as $email) {
// Mail::to($email)->send(new test([], $materialTableData, $bundleTableData, $schedule)); // Mail::to($email)->send(new test([], $materialTableData, $bundleTableData, $schedule));
// } // }
foreach ($mailRules->get('MaterialInvoiceMail') as $rule) { foreach ($materialRules as $rule) {
$toEmails = collect(explode(',', $rule->email)) $toEmails = collect(explode(',', $rule->email))
->map(fn ($e) => trim($e)) ->map(fn ($e) => trim($e))
@@ -334,17 +359,21 @@ class SendInvoiceReport extends Command
} }
} }
// Send to InvoiceMail recipients (all three tables) if ($invoiceRules->isNotEmpty()) {
if ($mailRules->has('InvoiceMail')) {
$invoiceRules = $mailRules->get('InvoiceMail');
$hasGlobalRule = $invoiceRules->contains('plant', 0);
// foreach ($mailRules->get('InvoiceMail') as $rule) {
foreach ($invoiceRules as $rule) { foreach ($invoiceRules as $rule) {
if ($hasGlobalRule && $rule->plant != 0) { // During global run, only execute plant=0 rule
$this->info("Skipping rule ID {$rule->id} (plant={$rule->plant}) — covered by global plant=0 rule."); if ($plantIdArg == 0 && $rule->plant != 0) {
continue;
}
// During plant run, only execute matching rule
if (
$plantIdArg != 0 &&
$rule->plant != 0 &&
$rule->plant != $plantIdArg
) {
continue; continue;
} }