diff --git a/models/baseModels/Invoice/Invoice.ts b/models/baseModels/Invoice/Invoice.ts index 4deca408..42d1b944 100644 --- a/models/baseModels/Invoice/Invoice.ts +++ b/models/baseModels/Invoice/Invoice.ts @@ -48,7 +48,7 @@ import { AppliedCouponCodes } from '../AppliedCouponCodes/AppliedCouponCodes'; import { CouponCode } from '../CouponCode/CouponCode'; import { SalesInvoice } from '../SalesInvoice/SalesInvoice'; import { SalesInvoiceItem } from '../SalesInvoiceItem/SalesInvoiceItem'; -import { PriceListItem } from '../PriceList/PriceListItem'; +import { PricingRuleItem } from '../PricingRuleItem/PricingRuleItem'; export type TaxDetail = { account: string; @@ -1332,7 +1332,7 @@ export abstract class Invoice extends Transactional { item: item.item as string, unit: item.unit as string, }, - })) as PriceListItem[]; + })) as PricingRuleItem[]; return docs.map((doc) => doc.parent) as string[]; } diff --git a/models/baseModels/InvoiceItem/InvoiceItem.ts b/models/baseModels/InvoiceItem/InvoiceItem.ts index 1f0f4ed1..39f5a124 100644 --- a/models/baseModels/InvoiceItem/InvoiceItem.ts +++ b/models/baseModels/InvoiceItem/InvoiceItem.ts @@ -17,9 +17,9 @@ import { safeParseFloat } from 'utils/index'; import { Invoice } from '../Invoice/Invoice'; import { Item } from '../Item/Item'; import { StockTransfer } from 'models/inventory/StockTransfer'; -import { PriceList } from '../PriceList/PriceList'; import { isPesa } from 'fyo/utils'; import { PricingRule } from '../PricingRule/PricingRule'; +import { getItemRateFromPriceList } from 'models/helpers'; export abstract class InvoiceItem extends Doc { item?: string; @@ -629,7 +629,10 @@ async function getItemRate(doc: InvoiceItem): Promise<Money | undefined> { let priceListRate: Money | undefined; if (doc.fyo.singles.AccountingSettings?.enablePriceList) { - priceListRate = await getItemRateFromPriceList(doc); + priceListRate = await getItemRateFromPriceList( + doc, + doc.parentdoc?.priceList as string + ); } if (priceListRate) { @@ -675,43 +678,6 @@ async function getItemRateFromPricingRule( return pricingRuleDoc.discountRate; } -async function getItemRateFromPriceList( - doc: InvoiceItem -): Promise<Money | undefined> { - const priceListName = doc.parentdoc?.priceList; - const item = doc.item; - if (!priceListName || !item) { - return; - } - - const priceList = await doc.fyo.doc.getDoc( - ModelNameEnum.PriceList, - priceListName - ); - - if (!(priceList instanceof PriceList)) { - return; - } - - const unit = doc.unit; - const transferUnit = doc.transferUnit; - const plItem = priceList.priceListItem?.find((pli) => { - if (pli.item !== item) { - return false; - } - - if (transferUnit && pli.unit !== transferUnit) { - return false; - } else if (unit && pli.unit !== unit) { - return false; - } - - return true; - }); - - return plItem?.rate; -} - function getDiscountedTotalBeforeTaxation( rate: Money, quantity: number, diff --git a/models/helpers.ts b/models/helpers.ts index 942179a1..3963e207 100644 --- a/models/helpers.ts +++ b/models/helpers.ts @@ -33,6 +33,9 @@ import { ValidationError } from 'fyo/utils/errors'; import { isPesa } from 'fyo/utils'; import { numberSeriesDefaultsMap } from './baseModels/Defaults/Defaults'; import { safeParseFloat } from 'utils/index'; +import { PriceList } from './baseModels/PriceList/PriceList'; +import { InvoiceItem } from './baseModels/InvoiceItem/InvoiceItem'; +import { SalesInvoiceItem } from './baseModels/SalesInvoiceItem/SalesInvoiceItem'; export function getQuoteActions( fyo: Fyo, @@ -947,6 +950,43 @@ export async function getPricingRule( return pricingRules; } +export async function getItemRateFromPriceList( + doc: InvoiceItem | SalesInvoiceItem, + priceListName: string +): Promise<Money | undefined> { + const item = doc.item; + if (!priceListName || !item) { + return; + } + + const priceList = await doc.fyo.doc.getDoc( + ModelNameEnum.PriceList, + priceListName + ); + + if (!(priceList instanceof PriceList)) { + return; + } + + const unit = doc.unit; + const transferUnit = doc.transferUnit; + const plItem = priceList.priceListItem?.find((pli) => { + if (pli.item !== item) { + return false; + } + + if (transferUnit && pli.unit !== transferUnit) { + return false; + } else if (unit && pli.unit !== unit) { + return false; + } + + return true; + }); + + return plItem?.rate; +} + export function filterPricingRules( pricingRuleDocsForItem: PricingRule[], sinvDate: Date, diff --git a/src/pages/POS/POS.vue b/src/pages/POS/POS.vue index 1fe2467e..bfaac791 100644 --- a/src/pages/POS/POS.vue +++ b/src/pages/POS/POS.vue @@ -126,6 +126,7 @@ import { getPricingRule, removeFreeItems, getAddedLPWithGrandTotal, + getItemRateFromPriceList, } from 'models/helpers'; import { POSItem, @@ -460,6 +461,17 @@ export default defineComponent({ item: item.name, }); + if (this.sinvDoc.priceList) { + let itemData = this.sinvDoc.items?.filter( + (val) => val.item == item.name + ) as SalesInvoiceItem[]; + + itemData[0].rate = await getItemRateFromPriceList( + itemData[0], + this.sinvDoc.priceList + ); + } + await this.applyPricingRule(); await this.sinvDoc.runFormulas(); },