Skip to content

Commit a716e92

Browse files
authored
chore: some math (#27)
1 parent 5925f1c commit a716e92

6 files changed

Lines changed: 42 additions & 21 deletions

File tree

apps/web-app/app/components/chart/KitchenRevenue.client.vue

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@
2020
<VisLine
2121
:x="x"
2222
:y="y"
23-
color="var(--ui-secondary)"
23+
:color="color"
24+
:line-dash-array="lineDashArray"
2425
/>
2526
<VisArea
2627
:x="x"
27-
:y="y"
28+
:y="yArea"
2829
color="var(--ui-secondary)"
2930
:opacity="0.1"
3031
/>
@@ -55,12 +56,13 @@ type DataRecord = {
5556
date: Date
5657
total: number
5758
checks: number
59+
commonTotal: number
5860
}
5961
6062
const { period, range, values } = defineProps<{
6163
period: Period
6264
range: Range
63-
values: { date: string, total: number, checks: number }[]
65+
values: { date: string, total: number, checks: number, commonTotal: number }[]
6466
}>()
6567
6668
const cardRef = useTemplateRef<HTMLElement | null>('cardRef')
@@ -84,12 +86,20 @@ watch([() => period, () => range, () => values], () => {
8486
date,
8587
total: value?.total ?? 0,
8688
checks: value?.checks ?? 0,
89+
commonTotal: value?.commonTotal ?? 0,
8790
}
8891
})
8992
}, { immediate: true })
9093
9194
const x = (_: DataRecord, i: number) => i
92-
const y = (d: DataRecord) => d.total
95+
const y = [
96+
(d: DataRecord) => d.total,
97+
(d: DataRecord) => d.commonTotal,
98+
]
99+
const yArea = (d: DataRecord) => d.total
100+
101+
const color = (_: DataRecord, i: number) => ['var(--ui-secondary)', 'var(--ui-secondary)'][i]
102+
const lineDashArray = (_: DataRecord, i: number) => [i === 0 ? undefined : 4]
93103
94104
const total = computed(() => data.value.reduce((acc: number, { total }) => acc + total, 0))
95105
@@ -111,7 +121,7 @@ function xTicks(i: number) {
111121
return formatDate(data.value[i].date)
112122
}
113123
114-
const template = (d: DataRecord) => `${formatDate(d.date)}: ${formatNumber(d.total)}, ${d.checks} ${pluralizationRu(d.checks, ['чек', 'чека', 'чеков'])}`
124+
const template = (d: DataRecord) => `${formatDate(d.date)}, ${format(d.date, 'eeeeee', { locale: ru })}: ${d.checks} ${pluralizationRu(d.checks, ['чек', 'чека', 'чеков'])}<br> Выручка: ${formatNumber(d.total)}<br> Средняя: ${formatNumber(d.commonTotal)}`
115125
</script>
116126

117127
<style scoped>

apps/web-app/nuxt.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export default defineNuxtConfig({
3737
tasks: true,
3838
},
3939
scheduledTasks: {
40-
'* * * * *': ['task:auto-create', 'kitchen:average-update'], // Every minute
40+
'* * * * *': ['task:auto-create'], // Every minute
4141
'0 * * * *': ['kitchen:revenue-update'], // Every hour
4242
'0 0 * * *': ['kitchen:rating-update'], // Every day
4343
},

apps/web-app/server/api/kitchen/revenue/iiko-daily.post.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ async function parseFileAndUpdateData(file: MultiPartData) {
121121
})
122122
}
123123

124-
const parsedKitchens: { name: string, total: number, checks: number }[] = []
124+
const parsedKitchens: { name: string, total: number, checks: number, averageCheck: number, commonAverageCheck: number, commonTotal: number }[] = []
125125

126126
for (const row of dataRows) {
127127
const name = row[indexOfName]
@@ -132,13 +132,27 @@ async function parseFileAndUpdateData(file: MultiPartData) {
132132
continue
133133
}
134134

135+
const averageCheck = Math.round(total / checks)
136+
135137
parsedKitchens.push({
136138
name,
137139
total,
138140
checks,
141+
averageCheck,
142+
commonAverageCheck: 0,
143+
commonTotal: 0,
139144
})
140145
}
141146

147+
// Update common data
148+
const commonAverageCheck = Math.round(parsedKitchens.reduce((acc, curr) => acc + curr.averageCheck, 0) / parsedKitchens.length)
149+
const commonTotal = Math.round(parsedKitchens.reduce((acc, curr) => acc + curr.total, 0) / parsedKitchens.length)
150+
151+
for (const kitchen of parsedKitchens) {
152+
kitchen.commonAverageCheck = commonAverageCheck
153+
kitchen.commonTotal = commonTotal
154+
}
155+
142156
// Every kitchen: find in DB and add amount for this day
143157
const kitchens = await repository.kitchen.list()
144158
let rowsUpdated = 0
@@ -155,11 +169,17 @@ async function parseFileAndUpdateData(file: MultiPartData) {
155169
date: dateOnly,
156170
total: kitchen.total,
157171
checks: kitchen.checks,
172+
averageCheck: kitchen.averageCheck,
173+
commonAverageCheck: kitchen.commonAverageCheck,
174+
commonTotal: kitchen.commonTotal,
158175
})
159176
} else {
160177
await repository.kitchen.updateRevenue(revenue.id, {
161178
total: kitchen.total,
162179
checks: kitchen.checks,
180+
averageCheck: kitchen.averageCheck,
181+
commonAverageCheck: kitchen.commonAverageCheck,
182+
commonTotal: kitchen.commonTotal,
163183
})
164184
}
165185

apps/web-app/server/tasks/kitchen/average-update.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,11 @@ export default defineTask({
99
try {
1010
const revenuesToUpdate = await repository.kitchen.listRevenuesToUpdate()
1111
for (const revenue of revenuesToUpdate) {
12-
// Average check
13-
const averageCheck = Math.round(revenue.total / revenue.checks)
14-
1512
// common
1613
const allRevenuesThisPeriod = await repository.kitchen.listRevenuesForDate(revenue.date)
1714
const commonAverageCheck = Math.round(allRevenuesThisPeriod.reduce((acc, curr) => acc + curr.averageCheck, 0) / allRevenuesThisPeriod.length)
18-
const commonTotal = Math.round(allRevenuesThisPeriod.reduce((acc, curr) => acc + curr.total, 0) / allRevenuesThisPeriod.length)
19-
2015
await repository.kitchen.updateRevenue(revenue.id, {
21-
averageCheck,
2216
commonAverageCheck,
23-
commonTotal,
2417
})
2518
}
2619
} catch (error) {

apps/web-app/server/tasks/kitchen/revenue-update.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import { repository } from '@roll-stack/database'
22
import { endOfWeek, startOfWeek } from 'date-fns'
33

4-
const logger = useLogger('kitchen:revenue-update')
5-
64
export default defineTask({
75
meta: {
86
name: 'kitchen:revenue-update',
@@ -19,12 +17,13 @@ export default defineTask({
1917
const thisMonday = startOfWeek(utcNow, { weekStartsOn: 1 })
2018
const thisSunday = endOfWeek(utcNow, { weekStartsOn: 1 })
2119

22-
logger.log(thisMonday, thisSunday)
23-
2420
for (const kitchen of kitchens) {
2521
const revenues = await repository.kitchen.listRevenuesByKitchenForPeriod(kitchen.id, thisMonday, thisSunday)
2622

27-
const revenueForThisWeek = revenues.reduce((acc, curr) => acc + curr.total, 0)
23+
const revenueForThisWeek = Math.round(revenues.reduce((acc, curr) => acc + curr.total, 0))
24+
if (revenueForThisWeek === kitchen.revenueForThisWeek) {
25+
continue
26+
}
2827

2928
await repository.kitchen.update(kitchen.id, {
3029
revenueForThisWeek,

packages/database/src/repository/kitchen.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,7 @@ export class Kitchen {
6666
static async listRevenuesToUpdate() {
6767
return useDatabase().query.kitchenRevenues.findMany({
6868
where: (revenues, { eq, or }) => or(
69-
eq(revenues.averageCheck, 0),
70-
eq(revenues.commonTotal, 0),
69+
eq(revenues.commonAverageCheck, 0),
7170
),
7271
limit: 50,
7372
})

0 commit comments

Comments
 (0)