xport async function dailyTotals(input: DailyTotalsInput) {
const year = db
.select({ year: irrigationYear.year })
.from(irrigationYear)
.where(eq(irrigationYear.id, input.irrigationYearId));
const dateSeries = db
.select({
date_series_date: sql`"date"`.as('date_series_date'),
})
.from(
sql`generate_series(date_trunc('Month', concat(${input.month}::text,' 01, ', ${year})::date), (date_trunc('Month', concat(${input.month}::text, ' 01, ', ${year})::date) + '1 month - 1 day'::interval), '1 day'::interval) as date`
)
.as('date_series_query');
const irrigations = db
.select({
date: irrigation.date,
used: sum(getUsedColumn(irrigation.unit, irrigation.amount))
.mapWith(Number)
.as('used'),
})
.from(irrigationYear)
.innerJoin(irrigation, eq(irrigationYear.id, irrigation.irrigationYearId))
.where(
and(
eq(irrigationYear.id, input.irrigationYearId),
sql`trim(to_char(date(${irrigation.date}), 'Month')) like ${input.month}`
)
)
.groupBy(irrigation.date)
.as('irrigations_query');
return await db
.select({ date: dateSeries.date_series_date, used: irrigations.used })
.from(dateSeries)
.leftJoin(irrigations, eq(dateSeries.date_series_date, irrigations.date));
}
xport async function dailyTotals(input: DailyTotalsInput) {
const year = db
.select({ year: irrigationYear.year })
.from(irrigationYear)
.where(eq(irrigationYear.id, input.irrigationYearId));
const dateSeries = db
.select({
date_series_date: sql`"date"`.as('date_series_date'),
})
.from(
sql`generate_series(date_trunc('Month', concat(${input.month}::text,' 01, ', ${year})::date), (date_trunc('Month', concat(${input.month}::text, ' 01, ', ${year})::date) + '1 month - 1 day'::interval), '1 day'::interval) as date`
)
.as('date_series_query');
const irrigations = db
.select({
date: irrigation.date,
used: sum(getUsedColumn(irrigation.unit, irrigation.amount))
.mapWith(Number)
.as('used'),
})
.from(irrigationYear)
.innerJoin(irrigation, eq(irrigationYear.id, irrigation.irrigationYearId))
.where(
and(
eq(irrigationYear.id, input.irrigationYearId),
sql`trim(to_char(date(${irrigation.date}), 'Month')) like ${input.month}`
)
)
.groupBy(irrigation.date)
.as('irrigations_query');
return await db
.select({ date: dateSeries.date_series_date, used: irrigations.used })
.from(dateSeries)
.leftJoin(irrigations, eq(dateSeries.date_series_date, irrigations.date));
}