import { useQuery } from "@apollo/client/react"; import { format, subDays } from "date-fns"; import React, { useState } from "react"; import styles from "./Inventory.module.css"; import { GQLError } from "../../components/GQLError"; import { InventoryReportDocument } from "../../types"; import { formatCurrency } from "../../utils/currency"; const today = () => format(new Date(), "yyyy-MM-dd"); const monthAgo = () => format(subDays(new Date(), 30), "yyyy-MM-dd"); const timestampAt = (date: string, endOfDay = false) => `${date}T${endOfDay ? "23:59:59.999999" : "00:00:00"}`; const InventoryReport = () => { const [startDate, setStartDate] = useState(monthAgo); const [endDate, setEndDate] = useState(today); const [appliedRange, setAppliedRange] = useState({ startDate: monthAgo(), endDate: today() }); const invalidRange = startDate > endDate; const { data, loading, error } = useQuery(InventoryReportDocument, { variables: { startTime: timestampAt(appliedRange.startDate), endTime: timestampAt(appliedRange.endDate, true), }, }); const onSubmit = (event: React.FormEvent) => { event.preventDefault(); if (!invalidRange) setAppliedRange({ startDate, endDate }); }; if (error) return ; const report = data?.inventoryReport; const balanceChange = report ? Number(report.balanceAtEnd) - Number(report.balanceAtStart) : 0; const inventoryChange = report ? Number(report.inventoryPurchases) - Number(report.productSales) : 0; return (

Varerapport

{invalidRange &&

Startdato må være før eller lik sluttdato.

} {loading &&
Loading...
} {report && ( <>

Beholdningsendring

{report.products.map((product) => ( ))} {!report.products.length && ( )}
Vare Innkjøp Salg Endring verdi
{product.productName} {formatCurrency(Number(product.purchaseValue))} kr ({product.purchaseUnits} stk) {formatCurrency(Number(product.salesValue))} kr ({product.salesUnits} stk) {formatCurrency(Number(product.purchaseValue) - Number(product.salesValue))} kr
Ingen varetransaksjoner i perioden.
Totalt {formatCurrency(Number(report.inventoryPurchases))} kr {formatCurrency(Number(report.productSales))} kr {formatCurrency(inventoryChange)} kr

Innskudd og kjøp

Post Saldo Innskudd Kjøp
Saldo ved periodestart {formatCurrency(Number(report.balanceAtStart))} kr
Endring i perioden {formatCurrency(balanceChange)} kr {formatCurrency(Number(report.deposits))} kr {formatCurrency(Number(report.orderPurchases))} kr
Saldo ved periodeslutt {formatCurrency(Number(report.balanceAtEnd))} kr
)}
); }; export default InventoryReport;