Skip to content

Commit b5d27a3

Browse files
committed
Refactor: improve command outputs + import UI section
1 parent 3006026 commit b5d27a3

File tree

2 files changed

+100
-30
lines changed

2 files changed

+100
-30
lines changed

src/backend/app/Console/Commands/ApplianceRateChecker.php

Lines changed: 76 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,32 @@ public function __construct(
3030
}
3131

3232
public function handle(): void {
33-
$this->remindUpComingRates();
34-
$this->findOverDueRates();
33+
$smsApplianceRemindRates = $this->getApplianceRemindRates();
34+
35+
if ($smsApplianceRemindRates->isEmpty()) {
36+
$this->info('No enabled appliance reminder configurations found.');
37+
38+
return;
39+
}
40+
41+
$this->info('Found '.$smsApplianceRemindRates->count().' enabled reminder configuration(s).');
42+
$this->newLine();
43+
44+
$upcomingRates = $this->remindUpComingRates($smsApplianceRemindRates);
45+
$overdueRates = $this->findOverDueRates($smsApplianceRemindRates);
46+
47+
$this->newLine();
48+
$this->displaySummary($upcomingRates, $overdueRates);
3549
}
3650

37-
private function remindUpComingRates(): void {
38-
$smsApplianceRemindRates = $this->getApplianceRemindRates();
39-
$smsApplianceRemindRates->each(function (SmsApplianceRemindRate $smsApplianceRemindRate) {
51+
/**
52+
* @param Collection<int, SmsApplianceRemindRate> $smsApplianceRemindRates
53+
*
54+
* @return Collection<int, ApplianceRate>
55+
*/
56+
private function remindUpComingRates(Collection $smsApplianceRemindRates): Collection {
57+
$allUpcoming = new Collection();
58+
$smsApplianceRemindRates->each(function (SmsApplianceRemindRate $smsApplianceRemindRate) use ($allUpcoming) {
4059
$dueApplianceRates = $this->applianceRate::with([
4160
'appliancePerson.appliance.smsReminderRate',
4261
'appliancePerson.appliance.applianceType',
@@ -54,14 +73,21 @@ function ($q) {
5473
}
5574
)
5675
->get();
57-
echo "\n".count($dueApplianceRates).' upcoming rates found'."\n";
76+
$allUpcoming->push(...$dueApplianceRates);
5877
$this->sendReminders($dueApplianceRates, SmsTypes::APPLIANCE_RATE);
5978
});
79+
80+
return $allUpcoming;
6081
}
6182

62-
private function findOverDueRates(): void {
63-
$smsApplianceRemindRates = $this->getApplianceRemindRates();
64-
$smsApplianceRemindRates->each(function (SmsApplianceRemindRate $smsApplianceRemindRate) {
83+
/**
84+
* @param Collection<int, SmsApplianceRemindRate> $smsApplianceRemindRates
85+
*
86+
* @return Collection<int, ApplianceRate>
87+
*/
88+
private function findOverDueRates(Collection $smsApplianceRemindRates): Collection {
89+
$allOverdue = new Collection();
90+
$smsApplianceRemindRates->each(function (SmsApplianceRemindRate $smsApplianceRemindRate) use ($allOverdue) {
6591
$overDueRates = $this->applianceRate::with(['appliancePerson.appliance.applianceType', 'appliancePerson.person.addresses'])
6692
->whereBetween('due_date', [
6793
now()->toDateString(),
@@ -70,10 +96,49 @@ private function findOverDueRates(): void {
7096
->where('remaining', '>', 0)
7197
->where('remind', 0)
7298
->get();
73-
74-
echo "\n".count($overDueRates).' overdue rates found'."\n";
99+
$allOverdue->push(...$overDueRates);
75100
$this->sendReminders($overDueRates, SmsTypes::OVER_DUE_APPLIANCE_RATE);
76101
});
102+
103+
return $allOverdue;
104+
}
105+
106+
/**
107+
* @param Collection<int, ApplianceRate> $upcomingRates
108+
* @param Collection<int, ApplianceRate> $overdueRates
109+
*/
110+
private function displaySummary(Collection $upcomingRates, Collection $overdueRates): void {
111+
if ($upcomingRates->isEmpty() && $overdueRates->isEmpty()) {
112+
$this->info('No upcoming or overdue appliance rates found.');
113+
114+
return;
115+
}
116+
117+
if ($upcomingRates->isNotEmpty()) {
118+
$this->info('Upcoming Rates ('.$upcomingRates->count().'):');
119+
$this->table(
120+
['Appliance', 'Customer', 'Due Date', 'Remaining'],
121+
$upcomingRates->map(fn (ApplianceRate $rate): array => [
122+
$rate->appliancePerson->appliance->applianceType->name ?? 'N/A',
123+
$rate->appliancePerson->person->name ?? 'N/A',
124+
(string) $rate->due_date,
125+
$rate->remaining,
126+
])->all(),
127+
);
128+
}
129+
130+
if ($overdueRates->isNotEmpty()) {
131+
$this->info('Overdue Rates ('.$overdueRates->count().'):');
132+
$this->table(
133+
['Appliance', 'Customer', 'Due Date', 'Remaining'],
134+
$overdueRates->map(fn (ApplianceRate $rate): array => [
135+
$rate->appliancePerson->appliance->applianceType->name ?? 'N/A',
136+
$rate->appliancePerson->person->name ?? 'N/A',
137+
(string) $rate->due_date,
138+
$rate->remaining,
139+
])->all(),
140+
);
141+
}
77142
}
78143

79144
private function sendReminderSms(ApplianceRate $applianceRate, int $smsType): void {

src/frontend/src/modules/Settings/Configuration/SmsSettings.vue

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -53,25 +53,26 @@
5353
</md-tab>
5454
<md-tab @click="tab = 'reminder'" id="tab-reminder" md-label="Reminder">
5555
<sms-appliance-remind-rate />
56-
<div
57-
v-for="(smsBody, index) in smsBodiesService.reminderList"
58-
:key="index"
59-
>
60-
<sms-body
61-
ref="smsBody_reminder_ref"
62-
:sms-variable-default-values="smsVariableDefaultValueService.list"
63-
:sms-body="smsBody"
64-
/>
65-
</div>
66-
<div class="md-layout md-alignment-bottom-right">
67-
<md-button
68-
class="md-primary md-dense md-raised"
69-
@click="updateSmsBodies()"
70-
v-show="tab !== 'android-gateway'"
56+
<widget title="SMS Reminder Templates" class="reminder-templates">
57+
<div
58+
v-for="(smsBody, index) in smsBodiesService.reminderList"
59+
:key="index"
7160
>
72-
Save
73-
</md-button>
74-
</div>
61+
<sms-body
62+
ref="smsBody_reminder_ref"
63+
:sms-variable-default-values="smsVariableDefaultValueService.list"
64+
:sms-body="smsBody"
65+
/>
66+
</div>
67+
<div class="md-layout md-alignment-bottom-right">
68+
<md-button
69+
class="md-primary md-dense md-raised"
70+
@click="updateSmsBodies()"
71+
>
72+
Save
73+
</md-button>
74+
</div>
75+
</widget>
7576
</md-tab>
7677
<md-tab
7778
@click="tab = 'resend-information'"
@@ -168,11 +169,12 @@ import { SmsBodiesService } from "@/services/SmsBodiesService.js"
168169
import { SmsResendInformationKeyService } from "@/services/SmsResendInformationKeyService.js"
169170
import { SmsVariableDefaultValueService } from "@/services/SmsVariableDefaultValueService.js"
170171
import { EventBus } from "@/shared/eventbus.js"
172+
import Widget from "@/shared/Widget.vue"
171173
172174
export default {
173175
name: "SmsSettings",
174176
mixins: [notify],
175-
components: { SmsAndroidSetting, SmsApplianceRemindRate, SmsBody },
177+
components: { SmsAndroidSetting, SmsApplianceRemindRate, SmsBody, Widget },
176178
props: {
177179
smsBodies: {
178180
type: Array,
@@ -346,6 +348,9 @@ export default {
346348
</script>
347349

348350
<style scoped lang="scss">
351+
.reminder-templates {
352+
margin-top: 1.5rem;
353+
}
349354
.notice-message-area {
350355
padding: 20px;
351356
background-color: #badee4;

0 commit comments

Comments
 (0)