49 lines
1.4 KiB
TypeScript
49 lines
1.4 KiB
TypeScript
import { eq } from 'drizzle-orm';
|
|
import { db } from './index';
|
|
import { pricingConfig, catalogItems } from './schema';
|
|
import type { PricingConfig, CatalogItem, ManoObraKey } from '@/budget/types';
|
|
import { getCurrentTenantId as getTenantId } from '@/lib/auth/current-user';
|
|
|
|
const MANO_OBRA_DEFAULT: Record<ManoObraKey, number> = {
|
|
demolicion: 0,
|
|
fontaneria: 0,
|
|
electricidad: 0,
|
|
mano_de_obra: 0,
|
|
};
|
|
|
|
export async function getPricingConfig(): Promise<PricingConfig> {
|
|
const tenantId = await getTenantId();
|
|
const [row] = await db
|
|
.select()
|
|
.from(pricingConfig)
|
|
.where(eq(pricingConfig.tenantId, tenantId))
|
|
.limit(1);
|
|
|
|
if (!row) {
|
|
return { alturaTechoDefault: 2.5, factorZona: {}, manoObra: { ...MANO_OBRA_DEFAULT } };
|
|
}
|
|
return {
|
|
alturaTechoDefault: row.alturaTechoDefault,
|
|
factorZona: row.factorZona,
|
|
manoObra: { ...MANO_OBRA_DEFAULT, ...(row.manoObra as Record<ManoObraKey, number>) },
|
|
};
|
|
}
|
|
|
|
export async function getCatalog(): Promise<CatalogItem[]> {
|
|
const tenantId = await getTenantId();
|
|
const rows = await db.select().from(catalogItems).where(eq(catalogItems.tenantId, tenantId));
|
|
return rows.map((r) => ({
|
|
id: r.id,
|
|
categoria: r.categoria,
|
|
nombre: r.nombre,
|
|
calidad: r.calidad,
|
|
precioUnit: r.precioUnit,
|
|
unidad: r.unidad,
|
|
descriptorRender: r.descriptorRender,
|
|
esDefault: r.esDefault,
|
|
sku: r.sku,
|
|
}));
|
|
}
|
|
|
|
export { getTenantId };
|