Files
openmonetis/lib/dashboard/lancamento-filters.ts

57 lines
1.4 KiB
TypeScript

import { and, eq, ilike, isNull, ne, not, or } from "drizzle-orm";
import { contas, lancamentos } from "@/db/schema";
import {
ACCOUNT_AUTO_INVOICE_NOTE_PREFIX,
INITIAL_BALANCE_NOTE,
} from "@/lib/contas/constants";
type DashboardAdminFiltersParams = {
userId: string;
adminPagadorId: string;
};
type DashboardAdminPeriodFiltersParams = DashboardAdminFiltersParams & {
period: string;
};
export const buildDashboardAdminFilters = ({
userId,
adminPagadorId,
}: DashboardAdminFiltersParams) =>
[
eq(lancamentos.userId, userId),
eq(lancamentos.pagadorId, adminPagadorId),
] as const;
export const buildDashboardAdminPeriodFilters = ({
userId,
period,
adminPagadorId,
}: DashboardAdminPeriodFiltersParams) =>
[
...buildDashboardAdminFilters({ userId, adminPagadorId }),
eq(lancamentos.period, period),
] as const;
export const excludeAutoInvoiceEntries = () =>
or(
isNull(lancamentos.note),
not(ilike(lancamentos.note, `${ACCOUNT_AUTO_INVOICE_NOTE_PREFIX}%`)),
);
export const excludeAutoGeneratedEntryNotes = () =>
or(
isNull(lancamentos.note),
and(
ne(lancamentos.note, INITIAL_BALANCE_NOTE),
not(ilike(lancamentos.note, `${ACCOUNT_AUTO_INVOICE_NOTE_PREFIX}%`)),
),
);
export const excludeInitialBalanceWhenConfigured = () =>
or(
ne(lancamentos.note, INITIAL_BALANCE_NOTE),
isNull(contas.excludeInitialBalanceFromIncome),
eq(contas.excludeInitialBalanceFromIncome, false),
);