mirror of
https://github.com/frappe/books.git
synced 2025-02-08 23:18:31 +00:00
feat: apply price list in POS
This commit is contained in:
parent
73c40d755e
commit
f573f13dff
@ -48,7 +48,7 @@ import { AppliedCouponCodes } from '../AppliedCouponCodes/AppliedCouponCodes';
|
|||||||
import { CouponCode } from '../CouponCode/CouponCode';
|
import { CouponCode } from '../CouponCode/CouponCode';
|
||||||
import { SalesInvoice } from '../SalesInvoice/SalesInvoice';
|
import { SalesInvoice } from '../SalesInvoice/SalesInvoice';
|
||||||
import { SalesInvoiceItem } from '../SalesInvoiceItem/SalesInvoiceItem';
|
import { SalesInvoiceItem } from '../SalesInvoiceItem/SalesInvoiceItem';
|
||||||
import { PriceListItem } from '../PriceList/PriceListItem';
|
import { PricingRuleItem } from '../PricingRuleItem/PricingRuleItem';
|
||||||
|
|
||||||
export type TaxDetail = {
|
export type TaxDetail = {
|
||||||
account: string;
|
account: string;
|
||||||
@ -1332,7 +1332,7 @@ export abstract class Invoice extends Transactional {
|
|||||||
item: item.item as string,
|
item: item.item as string,
|
||||||
unit: item.unit as string,
|
unit: item.unit as string,
|
||||||
},
|
},
|
||||||
})) as PriceListItem[];
|
})) as PricingRuleItem[];
|
||||||
|
|
||||||
return docs.map((doc) => doc.parent) as string[];
|
return docs.map((doc) => doc.parent) as string[];
|
||||||
}
|
}
|
||||||
|
@ -17,9 +17,9 @@ import { safeParseFloat } from 'utils/index';
|
|||||||
import { Invoice } from '../Invoice/Invoice';
|
import { Invoice } from '../Invoice/Invoice';
|
||||||
import { Item } from '../Item/Item';
|
import { Item } from '../Item/Item';
|
||||||
import { StockTransfer } from 'models/inventory/StockTransfer';
|
import { StockTransfer } from 'models/inventory/StockTransfer';
|
||||||
import { PriceList } from '../PriceList/PriceList';
|
|
||||||
import { isPesa } from 'fyo/utils';
|
import { isPesa } from 'fyo/utils';
|
||||||
import { PricingRule } from '../PricingRule/PricingRule';
|
import { PricingRule } from '../PricingRule/PricingRule';
|
||||||
|
import { getItemRateFromPriceList } from 'models/helpers';
|
||||||
|
|
||||||
export abstract class InvoiceItem extends Doc {
|
export abstract class InvoiceItem extends Doc {
|
||||||
item?: string;
|
item?: string;
|
||||||
@ -629,7 +629,10 @@ async function getItemRate(doc: InvoiceItem): Promise<Money | undefined> {
|
|||||||
let priceListRate: Money | undefined;
|
let priceListRate: Money | undefined;
|
||||||
|
|
||||||
if (doc.fyo.singles.AccountingSettings?.enablePriceList) {
|
if (doc.fyo.singles.AccountingSettings?.enablePriceList) {
|
||||||
priceListRate = await getItemRateFromPriceList(doc);
|
priceListRate = await getItemRateFromPriceList(
|
||||||
|
doc,
|
||||||
|
doc.parentdoc?.priceList as string
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (priceListRate) {
|
if (priceListRate) {
|
||||||
@ -675,43 +678,6 @@ async function getItemRateFromPricingRule(
|
|||||||
return pricingRuleDoc.discountRate;
|
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(
|
function getDiscountedTotalBeforeTaxation(
|
||||||
rate: Money,
|
rate: Money,
|
||||||
quantity: number,
|
quantity: number,
|
||||||
|
@ -33,6 +33,9 @@ import { ValidationError } from 'fyo/utils/errors';
|
|||||||
import { isPesa } from 'fyo/utils';
|
import { isPesa } from 'fyo/utils';
|
||||||
import { numberSeriesDefaultsMap } from './baseModels/Defaults/Defaults';
|
import { numberSeriesDefaultsMap } from './baseModels/Defaults/Defaults';
|
||||||
import { safeParseFloat } from 'utils/index';
|
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(
|
export function getQuoteActions(
|
||||||
fyo: Fyo,
|
fyo: Fyo,
|
||||||
@ -947,6 +950,43 @@ export async function getPricingRule(
|
|||||||
return pricingRules;
|
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(
|
export function filterPricingRules(
|
||||||
pricingRuleDocsForItem: PricingRule[],
|
pricingRuleDocsForItem: PricingRule[],
|
||||||
sinvDate: Date,
|
sinvDate: Date,
|
||||||
|
@ -126,6 +126,7 @@ import {
|
|||||||
getPricingRule,
|
getPricingRule,
|
||||||
removeFreeItems,
|
removeFreeItems,
|
||||||
getAddedLPWithGrandTotal,
|
getAddedLPWithGrandTotal,
|
||||||
|
getItemRateFromPriceList,
|
||||||
} from 'models/helpers';
|
} from 'models/helpers';
|
||||||
import {
|
import {
|
||||||
POSItem,
|
POSItem,
|
||||||
@ -460,6 +461,17 @@ export default defineComponent({
|
|||||||
item: item.name,
|
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.applyPricingRule();
|
||||||
await this.sinvDoc.runFormulas();
|
await this.sinvDoc.runFormulas();
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user