diff --git a/client/src/modules/sales/SalesDetailPage.tsx b/client/src/modules/sales/SalesDetailPage.tsx index ccf0060..2c895b9 100644 --- a/client/src/modules/sales/SalesDetailPage.tsx +++ b/client/src/modules/sales/SalesDetailPage.tsx @@ -162,6 +162,26 @@ export function SalesDetailPage({ entity }: { entity: SalesDocumentEntity }) {
${activeDocument.subtotal.toFixed(2)}
+
+
+

Discount

+
-${activeDocument.discountAmount.toFixed(2)}
+
{activeDocument.discountPercent.toFixed(2)}%
+
+
+

Tax

+
${activeDocument.taxAmount.toFixed(2)}
+
{activeDocument.taxPercent.toFixed(2)}%
+
+
+

Freight

+
${activeDocument.freightAmount.toFixed(2)}
+
+
+

Total

+
${activeDocument.total.toFixed(2)}
+
+

Customer

diff --git a/client/src/modules/sales/SalesFormPage.tsx b/client/src/modules/sales/SalesFormPage.tsx index 803aa69..f5b9336 100644 --- a/client/src/modules/sales/SalesFormPage.tsx +++ b/client/src/modules/sales/SalesFormPage.tsx @@ -24,6 +24,12 @@ export function SalesFormPage({ entity, mode }: { entity: SalesDocumentEntity; m const [activeLinePicker, setActiveLinePicker] = useState(null); const [isSaving, setIsSaving] = useState(false); + const subtotal = form.lines.reduce((sum, line) => sum + line.quantity * line.unitPrice, 0); + const discountAmount = subtotal * (form.discountPercent / 100); + const taxableSubtotal = subtotal - discountAmount; + const taxAmount = taxableSubtotal * (form.taxPercent / 100); + const total = taxableSubtotal + taxAmount + form.freightAmount; + useEffect(() => { if (!token) { return; @@ -46,6 +52,9 @@ export function SalesFormPage({ entity, mode }: { entity: SalesDocumentEntity; m status: document.status, issueDate: document.issueDate, expiresAt: entity === "quote" ? document.expiresAt : null, + discountPercent: document.discountPercent, + taxPercent: document.taxPercent, + freightAmount: document.freightAmount, notes: document.notes, lines: document.lines.map((line) => ({ itemId: line.itemId, @@ -74,6 +83,10 @@ export function SalesFormPage({ entity, mode }: { entity: SalesDocumentEntity; m return customers.find((customer) => customer.id === customerId)?.name ?? ""; } + function getSelectedCustomer(customerId: string) { + return customers.find((customer) => customer.id === customerId) ?? null; + } + function updateLine(index: number, nextLine: SalesLineInput) { setForm((current: SalesDocumentInput) => ({ ...current, @@ -201,6 +214,7 @@ export function SalesFormPage({ entity, mode }: { entity: SalesDocumentEntity; m onMouseDown={(event) => { event.preventDefault(); updateField("customerId", customer.id); + updateField("discountPercent", customer.resellerDiscountPercent); setCustomerSearchTerm(customer.name); setCustomerPickerOpen(false); }} @@ -226,6 +240,11 @@ export function SalesFormPage({ entity, mode }: { entity: SalesDocumentEntity; m
{form.customerId ? getSelectedCustomerName(form.customerId) : "No customer selected"}
+ {form.customerId ? ( +
+ Default reseller discount: {getSelectedCustomer(form.customerId)?.resellerDiscountPercent.toFixed(2) ?? "0.00"}% +
+ ) : null} +
+ + + +
@@ -290,7 +346,7 @@ export function SalesFormPage({ entity, mode }: { entity: SalesDocumentEntity; m
{form.lines.map((line: SalesLineInput, index: number) => (
-
+