2023-06-06 08:59:19 +00:00
|
|
|
import test from 'tape';
|
|
|
|
import { getDefaultMetaFieldValueMap } from 'backend/helpers';
|
|
|
|
import { closeTestFyo, getTestFyo, setupTestFyo } from 'tests/helpers';
|
|
|
|
import { ModelNameEnum } from 'models/types';
|
|
|
|
import { getItem } from 'models/inventory/tests/helpers';
|
|
|
|
import { SalesInvoiceItem } from '../SalesInvoiceItem/SalesInvoiceItem';
|
|
|
|
import { SalesInvoice } from '../SalesInvoice/SalesInvoice';
|
|
|
|
import { PurchaseInvoiceItem } from '../PurchaseInvoiceItem/PurchaseInvoiceItem';
|
|
|
|
|
|
|
|
const fyo = getTestFyo();
|
|
|
|
setupTestFyo(fyo, __filename);
|
|
|
|
|
|
|
|
const itemMap = {
|
|
|
|
Pen: {
|
|
|
|
name: 'Pen',
|
|
|
|
rate: 100,
|
2023-06-07 05:07:13 +00:00
|
|
|
unit: 'Unit',
|
2023-06-06 08:59:19 +00:00
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
const partyMap = {
|
|
|
|
partyOne: {
|
|
|
|
name: 'John Whoe',
|
|
|
|
email: 'john@whoe.com',
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
const priceListMap = {
|
|
|
|
PL_SELL: {
|
|
|
|
name: 'PL_SELL',
|
2023-06-07 05:07:13 +00:00
|
|
|
isSales: true,
|
|
|
|
priceListItem: [
|
2023-06-06 08:59:19 +00:00
|
|
|
{
|
|
|
|
item: itemMap.Pen.name,
|
|
|
|
rate: 101,
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
2023-06-07 05:07:13 +00:00
|
|
|
test('Price List: create dummy item, party, price lists', async (t) => {
|
2023-06-06 08:59:19 +00:00
|
|
|
// Create Items
|
|
|
|
for (const { name, rate } of Object.values(itemMap)) {
|
|
|
|
const item = getItem(name, rate, false);
|
|
|
|
await fyo.doc.getNewDoc(ModelNameEnum.Item, item).sync();
|
|
|
|
t.ok(await fyo.db.exists(ModelNameEnum.Item, name), `Item: ${name} exists`);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Create Parties
|
|
|
|
for (const { name, email } of Object.values(partyMap)) {
|
|
|
|
await fyo.doc.getNewDoc(ModelNameEnum.Party, { name, email }).sync();
|
|
|
|
t.ok(
|
|
|
|
await fyo.db.exists(ModelNameEnum.Party, name),
|
|
|
|
`Party: ${name} exists`
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
for (const priceListItem of Object.values(priceListMap)) {
|
|
|
|
await fyo.doc.getNewDoc(ModelNameEnum.PriceList, priceListItem).sync();
|
|
|
|
t.ok(
|
|
|
|
await fyo.db.exists(ModelNameEnum.PriceList, priceListItem.name),
|
2023-06-07 05:07:13 +00:00
|
|
|
`Price List: ${priceListItem.name} exists`
|
2023-06-06 08:59:19 +00:00
|
|
|
);
|
|
|
|
}
|
2023-06-07 05:07:13 +00:00
|
|
|
|
|
|
|
await fyo.singles.AccountingSettings?.set('enablePriceList', true);
|
2023-06-06 08:59:19 +00:00
|
|
|
});
|
|
|
|
|
2023-06-07 05:07:13 +00:00
|
|
|
test('Check if InvoiceItem rate fetched from PriceList', async (t) => {
|
2023-06-06 08:59:19 +00:00
|
|
|
const sinv = fyo.doc.getNewDoc(ModelNameEnum.SalesInvoice, {
|
2023-06-07 05:07:13 +00:00
|
|
|
date: new Date('2023-01-01'),
|
2023-06-06 08:59:19 +00:00
|
|
|
party: partyMap.partyOne.name,
|
|
|
|
}) as SalesInvoice;
|
|
|
|
|
2023-06-07 05:07:13 +00:00
|
|
|
await sinv.set('priceList', priceListMap.PL_SELL.name);
|
|
|
|
await sinv.append('items', {});
|
|
|
|
await sinv.items?.[0].set('item', itemMap.Pen.name);
|
2023-06-06 08:59:19 +00:00
|
|
|
|
|
|
|
t.equal(
|
2023-06-07 05:07:13 +00:00
|
|
|
sinv.items?.[0].rate?.float,
|
|
|
|
priceListMap.PL_SELL.priceListItem[0].rate,
|
|
|
|
`sales invoice rate fetched from price list`
|
2023-06-06 08:59:19 +00:00
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
closeTestFyo(fyo, __filename);
|