mirror of
https://github.com/frappe/books.git
synced 2024-12-22 19:09:01 +00:00
fix: item-batch validation
This commit is contained in:
parent
fc75a8b536
commit
81d84f4220
@ -132,6 +132,26 @@ export class BespokeQueries {
|
|||||||
`);
|
`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static async itemHasTransactions(
|
||||||
|
db: DatabaseCore,
|
||||||
|
item: string
|
||||||
|
): Promise<boolean> {
|
||||||
|
/*
|
||||||
|
* to check if an item of given name is present in the SLE
|
||||||
|
* taking the count of items from SLE which has the given item name
|
||||||
|
* if the count is greater than 0 considers item exists in SLE, returns true
|
||||||
|
* if the count is lesser than 0 considers item does not exist in SLE, returns false
|
||||||
|
*/
|
||||||
|
const query = db.knex!(ModelNameEnum.StockLedgerEntry)
|
||||||
|
.select('item')
|
||||||
|
.where('item', item);
|
||||||
|
|
||||||
|
const value = (await query) as Record<string, string | null>[];
|
||||||
|
|
||||||
|
if (!value) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static async getStockQuantity(
|
static async getStockQuantity(
|
||||||
db: DatabaseCore,
|
db: DatabaseCore,
|
||||||
item: string,
|
item: string,
|
||||||
@ -168,5 +188,3 @@ export class BespokeQueries {
|
|||||||
return value[0][Object.keys(value[0])[0]];
|
return value[0][Object.keys(value[0])[0]];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
@ -325,6 +325,12 @@ export class DatabaseHandler extends DatabaseBase {
|
|||||||
)) as number | null;
|
)) as number | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async itemHasTransactions(item: string): Promise<boolean | null> {
|
||||||
|
return (await this.#demux.callBespoke('itemHasTransactions', item)) as
|
||||||
|
| boolean
|
||||||
|
| null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Internal methods
|
* Internal methods
|
||||||
*/
|
*/
|
||||||
|
@ -20,6 +20,31 @@ export class Item extends Doc {
|
|||||||
for?: 'Purchases' | 'Sales' | 'Both';
|
for?: 'Purchases' | 'Sales' | 'Both';
|
||||||
hasBatchNumber?: boolean;
|
hasBatchNumber?: boolean;
|
||||||
|
|
||||||
|
async beforeSync() {
|
||||||
|
/*
|
||||||
|
* This code block is to prevent users from changing the value of Has Batch No Checkbox
|
||||||
|
of the items which already did transactions
|
||||||
|
* allowing users to change the value of Has Batch No of the items which already did
|
||||||
|
transactions will result in incorect SLEs
|
||||||
|
*/
|
||||||
|
const ifItemHasBatchNumber = await Boolean(
|
||||||
|
this.fyo.db.get('Item', this.name! || '', 'hasBatchNumber')
|
||||||
|
);
|
||||||
|
|
||||||
|
if (this.hasBatchNumber == ifItemHasBatchNumber) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const isItemExistsInSLE = await this.fyo.db.itemHasTransactions(this.name!);
|
||||||
|
|
||||||
|
if (ifItemHasBatchNumber && isItemExistsInSLE) {
|
||||||
|
throw new ValidationError(
|
||||||
|
this.fyo.t`Cannot change value of Has Batch No as ${this
|
||||||
|
.name!} already has transactions against it. `
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
formulas: FormulaMap = {
|
formulas: FormulaMap = {
|
||||||
incomeAccount: {
|
incomeAccount: {
|
||||||
formula: async () => {
|
formula: async () => {
|
||||||
@ -121,6 +146,7 @@ export class Item extends Doc {
|
|||||||
!this.fyo.singles.AccountingSettings?.enableInventory ||
|
!this.fyo.singles.AccountingSettings?.enableInventory ||
|
||||||
this.itemType !== 'Product' ||
|
this.itemType !== 'Product' ||
|
||||||
(this.inserted && !this.trackItem),
|
(this.inserted && !this.trackItem),
|
||||||
|
hasBatchNumber: () => !this.trackItem || false,
|
||||||
};
|
};
|
||||||
|
|
||||||
readOnly: ReadOnlyMap = {
|
readOnly: ReadOnlyMap = {
|
||||||
|
Loading…
Reference in New Issue
Block a user