From 7f3ce1503b678b26c331c86c44d0c176f9ec0a4b Mon Sep 17 00:00:00 2001 From: Gadha2311 Date: Fri, 12 Sep 2025 09:06:16 +0530 Subject: [PATCH 1/2] fix : uom-batch filter --- models/inventory/StockMovementItem.ts | 26 ++++++++++++++++++++++++++ src/pages/POS/ModernPOS.vue | 3 +++ src/pages/POS/POSQuickActions.vue | 13 ++++++++----- 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/models/inventory/StockMovementItem.ts b/models/inventory/StockMovementItem.ts index 6fdcbe05..7b79a526 100644 --- a/models/inventory/StockMovementItem.ts +++ b/models/inventory/StockMovementItem.ts @@ -15,6 +15,7 @@ import { safeParseFloat } from 'utils/index'; import { StockMovement } from './StockMovement'; import { TransferItem } from './TransferItem'; import { MovementTypeEnum } from './types'; +import { Doc } from 'fyo/model/doc'; export class StockMovementItem extends TransferItem { name?: string; @@ -54,6 +55,31 @@ export class StockMovementItem extends TransferItem { static filters: FiltersMap = { item: () => ({ trackItem: true }), + transferUnit: async (doc: Doc) => { + const conversionItems = await doc.fyo.db.getAll( + ModelNameEnum.UOMConversionItem, + { + fields: ['uom'], + filters: { parent: doc.item as string }, + } + ); + const conversionUoms = conversionItems.map((i) => i.uom) as string[]; + + return { + name: ['in', conversionUoms], + }; + }, + batch: async (doc: Doc) => { + const batches = await doc.fyo.db.getAll(ModelNameEnum.Batch, { + fields: ['name'], + filters: { item: doc.item as string }, + }); + const batchName = batches.map((b) => b.name) as string[]; + + return { + name: ['in', batchName], + }; + }, }; async validate() { diff --git a/src/pages/POS/ModernPOS.vue b/src/pages/POS/ModernPOS.vue index 1d402d08..e549fa08 100644 --- a/src/pages/POS/ModernPOS.vue +++ b/src/pages/POS/ModernPOS.vue @@ -102,6 +102,7 @@ :border="true" :value="sinvDoc?.party" :df="sinvDoc?.fieldMap.party" + :show-clear-button="true" @change="(value:string) => $emit('setCustomer',value)" /> @@ -309,6 +310,7 @@ }" :border="true" :value="itemSearchTerm" + :show-clear-button="true" @keyup.enter="(item) => emitEvent('handleItemSearch', item.target.value as string, true) " @@ -324,6 +326,7 @@ target: 'ItemGroup', }" :border="true" + :show-clear-button="true" :value="selectedItemGroup" @change="(group: string) => emitEvent('setItemGroup',group)" /> diff --git a/src/pages/POS/POSQuickActions.vue b/src/pages/POS/POSQuickActions.vue index 1ca96de7..df9040d4 100644 --- a/src/pages/POS/POSQuickActions.vue +++ b/src/pages/POS/POSQuickActions.vue @@ -304,13 +304,16 @@ > From a254af2cbd8f9f483701422777f58ca29593ba00 Mon Sep 17 00:00:00 2001 From: Gadha2311 Date: Fri, 12 Sep 2025 10:43:32 +0530 Subject: [PATCH 2/2] fix: add filter for uom --- models/baseModels/InvoiceItem/InvoiceItem.ts | 11 ++++++++++- models/inventory/StockMovementItem.ts | 10 +++++++++- src/components/POS/Classic/SelectedItemRow.vue | 1 - 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/models/baseModels/InvoiceItem/InvoiceItem.ts b/models/baseModels/InvoiceItem/InvoiceItem.ts index eb998b20..137c467d 100644 --- a/models/baseModels/InvoiceItem/InvoiceItem.ts +++ b/models/baseModels/InvoiceItem/InvoiceItem.ts @@ -659,8 +659,17 @@ export abstract class InvoiceItem extends Doc { ); const conversionUoms = conversionItems.map((i) => i.uom) as string[]; + const baseUnit = await doc.fyo.getValue( + ModelNameEnum.Item, + doc.item as string, + 'unit' + ); + const validUoms = [...conversionUoms, baseUnit].filter( + Boolean + ) as string[]; + return { - name: ['in', conversionUoms], + name: ['in', validUoms], }; }, }; diff --git a/models/inventory/StockMovementItem.ts b/models/inventory/StockMovementItem.ts index 7b79a526..6a501f8e 100644 --- a/models/inventory/StockMovementItem.ts +++ b/models/inventory/StockMovementItem.ts @@ -65,8 +65,16 @@ export class StockMovementItem extends TransferItem { ); const conversionUoms = conversionItems.map((i) => i.uom) as string[]; + const baseUnit = await doc.fyo.getValue( + ModelNameEnum.Item, + doc.item as string, + 'unit' + ); + const validUoms = [...conversionUoms, baseUnit].filter( + Boolean + ) as string[]; return { - name: ['in', conversionUoms], + name: ['in', validUoms], }; }, batch: async (doc: Doc) => { diff --git a/src/components/POS/Classic/SelectedItemRow.vue b/src/components/POS/Classic/SelectedItemRow.vue index 936245f1..37ee2da5 100644 --- a/src/components/POS/Classic/SelectedItemRow.vue +++ b/src/components/POS/Classic/SelectedItemRow.vue @@ -483,7 +483,6 @@ export default defineComponent({ this.row.set('setItemDiscountAmount', false); this.row.set('itemDiscountPercent', 0); } - this.row.set('rate', this.fyo.pesa(0)); if (hasManualDiscount) { this.row.set('setItemDiscountAmount', true);