feat: Enhance pricing and sales API with free goods and discount scheme support

This commit is contained in:
2026-10-22 16:38:09 +05:30
parent b1bda1448e
commit 801276559d
2 changed files with 26 additions and 2 deletions
+12 -2
View File
@@ -21,16 +21,22 @@ export interface ShopPOItemBody {
itemId: string
quantity: number
unitPrice?: number | null
/** Free issue accepted from a scheme suggestion; priced 0 by the server. */
isFree?: boolean
schemeId?: string | null
}
export interface CreateShopPOBody {
storeId: string
items: ShopPOItemBody[]
raisedByUserId?: string | null
/** The one flat/slab discount scheme the user accepted. */
discountSchemeIds?: string[]
}
export interface UpdateShopPOItemsBody {
items: ShopPOItemBody[]
discountSchemeIds?: string[]
}
export interface ShopPOListParams extends PageParams {
@@ -97,8 +103,12 @@ export const invoices = {
finalize: (id: string, finalizedByUserId?: string | null, adjustments?: { invoiceItemId: string; adjustedQuantity: number; isRemoved?: boolean }[]) =>
api.post<InvoiceResponse>(`/invoices/${id}/finalize`, { finalizedByUserId, adjustments }).then(r => r.data),
updateItems: (id: string, items: { invoiceItemId?: string; itemId?: string; quantity: number; unitPrice?: number | null; isRemoved?: boolean }[], editedByUserId?: string | null) =>
api.put<InvoiceResponse>(`/invoices/${id}/items`, { items, editedByUserId }).then(r => r.data),
updateItems: (id: string, items: { invoiceItemId?: string; itemId?: string; quantity: number; unitPrice?: number | null; isRemoved?: boolean }[], editedByUserId?: string | null, discountSchemeIds?: string[]) =>
api.put<InvoiceResponse>(`/invoices/${id}/items`, { items, editedByUserId, discountSchemeIds }).then(r => r.data),
/** What the discount and total would be for these unsaved lines (draft editor preview). */
previewTotals: (id: string, items: { itemId: string; quantity: number; unitPrice: number; isFree?: boolean; isRemoved?: boolean; schemeId?: string | null }[], discountSchemeIds?: string[]) =>
api.post<{ discountAmount: number; totalAmount: number; freeEntitlements: { schemeId: string; quantity: number }[] }>(`/invoices/${id}/preview-totals`, { items, discountSchemeIds }).then(r => r.data),
versions: (id: string) =>
api.get<InvoiceVersionResponse[]>(`/invoices/${id}/versions`).then(r => r.data),