mirror of
https://github.com/frappe/books.git
synced 2026-08-24 10:04:45 -05:00
feat: enable selecting batches for batched items
This commit is contained in:
@@ -27,6 +27,7 @@ import {
|
||||
getReturnQtyTotal,
|
||||
getReturnLoyaltyPoints,
|
||||
getItemQtyMap,
|
||||
getItemVisibility,
|
||||
} from 'models/helpers';
|
||||
import { StockTransfer } from 'models/inventory/StockTransfer';
|
||||
import { validateBatch } from 'models/inventory/helpers';
|
||||
@@ -1329,17 +1330,17 @@ export abstract class Invoice extends Transactional {
|
||||
linkedEntries = await getLinkedEntries(sinvDoc);
|
||||
}
|
||||
|
||||
const itemVisibility = this.fyo.singles.POSSettings?.itemVisibility;
|
||||
const itemVisibility = await getItemVisibility(this.fyo);
|
||||
|
||||
if (!this.stockNotTransferred && itemVisibility === 'Inventory Items') {
|
||||
return null;
|
||||
}
|
||||
|
||||
const schemaName = this.stockTransferSchemaName;
|
||||
|
||||
const defaults = (this.fyo.singles.Defaults as Defaults) ?? {};
|
||||
let terms;
|
||||
let numberSeries;
|
||||
|
||||
if (this.isSales) {
|
||||
terms = defaults.shipmentTerms ?? '';
|
||||
numberSeries = defaults.shipmentNumberSeries ?? undefined;
|
||||
@@ -1367,6 +1368,7 @@ export abstract class Invoice extends Transactional {
|
||||
}
|
||||
|
||||
const transfer = this.fyo.doc.getNewDoc(schemaName, data) as StockTransfer;
|
||||
|
||||
for (const row of this.items ?? []) {
|
||||
if (!row.item) {
|
||||
continue;
|
||||
@@ -1398,6 +1400,7 @@ export abstract class Invoice extends Transactional {
|
||||
} else {
|
||||
quantity = row.quantity;
|
||||
}
|
||||
|
||||
const item = row.item;
|
||||
const batch = row.batch || null;
|
||||
const description = row.description;
|
||||
|
||||
+15
-1
@@ -40,7 +40,7 @@ import { safeParseFloat } from 'utils/index';
|
||||
import { PriceList } from './baseModels/PriceList/PriceList';
|
||||
import { InvoiceItem } from './baseModels/InvoiceItem/InvoiceItem';
|
||||
import { SalesInvoiceItem } from './baseModels/SalesInvoiceItem/SalesInvoiceItem';
|
||||
import { ItemQtyMap, POSItem } from 'src/components/POS/types';
|
||||
import { ItemQtyMap, ItemVisibility, POSItem } from 'src/components/POS/types';
|
||||
import { ValuationMethod } from './inventory/types';
|
||||
import {
|
||||
getRawStockLedgerEntries,
|
||||
@@ -113,6 +113,20 @@ export async function getItemQtyMap(doc: SalesInvoice): Promise<ItemQtyMap> {
|
||||
return itemQtyMap;
|
||||
}
|
||||
|
||||
export async function getItemVisibility(fyo: Fyo): Promise<ItemVisibility> {
|
||||
const posProfileName = fyo.singles.POSSettings?.posProfile as string;
|
||||
|
||||
if (posProfileName) {
|
||||
const posProfile = await fyo.doc.getDoc(
|
||||
ModelNameEnum.POSProfile,
|
||||
posProfileName
|
||||
);
|
||||
return posProfile?.itemVisibility as ItemVisibility;
|
||||
}
|
||||
|
||||
return fyo.singles.POSSettings?.itemVisibility as ItemVisibility;
|
||||
}
|
||||
|
||||
export function getStockTransferActions(
|
||||
fyo: Fyo,
|
||||
schemaName: ModelNameEnum.Shipment | ModelNameEnum.PurchaseReceipt
|
||||
|
||||
@@ -5,6 +5,7 @@ import { Money } from 'pesa';
|
||||
import { StockLedgerEntry } from './StockLedgerEntry';
|
||||
import { SMDetails, SMIDetails, SMTransferDetails } from './types';
|
||||
import { getSerialNumbers } from './helpers';
|
||||
import { getItemVisibility } from 'models/helpers';
|
||||
|
||||
export class StockManager {
|
||||
/**
|
||||
@@ -86,13 +87,13 @@ export class StockManager {
|
||||
|
||||
async #validate(details: SMIDetails) {
|
||||
this.#validateRate(details);
|
||||
this.#validateQuantity(details);
|
||||
await this.#validateQuantity(details);
|
||||
this.#validateLocation(details);
|
||||
await this.#validateStockAvailability(details);
|
||||
}
|
||||
|
||||
#validateQuantity(details: SMIDetails) {
|
||||
const itemVisibility = this.fyo.singles.POSSettings?.itemVisibility;
|
||||
async #validateQuantity(details: SMIDetails) {
|
||||
const itemVisibility = await getItemVisibility(this.fyo);
|
||||
if (itemVisibility !== 'Inventory Items') {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -290,7 +290,7 @@ import { SalesInvoiceItem } from 'models/baseModels/SalesInvoiceItem/SalesInvoic
|
||||
import { Money } from 'pesa';
|
||||
import { DiscountType } from '../types';
|
||||
import { validateSerialNumberCount } from 'src/utils/pos';
|
||||
import { validateQty } from 'models/helpers';
|
||||
import { getItemVisibility, validateQty } from 'models/helpers';
|
||||
import { InvoiceItem } from 'models/baseModels/InvoiceItem/InvoiceItem';
|
||||
import { SalesInvoice } from 'models/baseModels/SalesInvoice/SalesInvoice';
|
||||
import { showToast } from 'src/utils/interactive';
|
||||
@@ -371,17 +371,13 @@ export default defineComponent({
|
||||
!!profile?.canChangeRate ||
|
||||
!!this.fyo.singles.POSSettings?.canChangeRate;
|
||||
|
||||
this.itemVisibility = profile?.itemVisibility as string;
|
||||
this.itemVisibility = await getItemVisibility(this.fyo);
|
||||
} else {
|
||||
this.profileDiscountSetting =
|
||||
!!this.fyo.singles.POSSettings?.canEditDiscount;
|
||||
|
||||
this.profileRateSetting = !!this.fyo.singles.POSSettings?.canChangeRate;
|
||||
}
|
||||
|
||||
if (!this.itemVisibility) {
|
||||
this.itemVisibility = this.fyo.singles.POSSettings
|
||||
?.itemVisibility as string;
|
||||
this.itemVisibility = await getItemVisibility(this.fyo);
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@@ -10,6 +10,8 @@ export type ItemGroupMap = Record<string, string>;
|
||||
|
||||
export type DiscountType = 'percent' | 'amount';
|
||||
|
||||
export type ItemVisibility = 'Inventory Items' | 'Non-Inventory Items'
|
||||
|
||||
export const modalNames = [
|
||||
'Keyboard',
|
||||
'Payment',
|
||||
|
||||
@@ -158,6 +158,7 @@ import {
|
||||
getPricingRule,
|
||||
removeFreeItems,
|
||||
getItemRateFromPriceList,
|
||||
getItemVisibility,
|
||||
} from 'models/helpers';
|
||||
import {
|
||||
POSItem,
|
||||
@@ -677,9 +678,7 @@ export default defineComponent({
|
||||
},
|
||||
async setItems() {
|
||||
const filters: Record<string, boolean | string> = {};
|
||||
const itemVisibility =
|
||||
this.posProfile?.itemVisibility ??
|
||||
this.fyo.singles.POSSettings?.itemVisibility;
|
||||
const itemVisibility = await getItemVisibility(this.fyo);
|
||||
|
||||
const hideUnavailable =
|
||||
this.posProfile?.hideUnavailableItems ??
|
||||
@@ -1058,7 +1057,7 @@ export default defineComponent({
|
||||
await this.validate();
|
||||
await this.submitSinvDoc();
|
||||
|
||||
const itemVisibility = this.fyo.singles.POSSettings?.itemVisibility;
|
||||
const itemVisibility = await getItemVisibility(this.fyo);
|
||||
|
||||
if (
|
||||
this.sinvDoc.stockNotTransferred &&
|
||||
|
||||
@@ -329,7 +329,7 @@ export default defineComponent({
|
||||
return false;
|
||||
},
|
||||
},
|
||||
async activated() {
|
||||
async mounted() {
|
||||
await this.setPaymentMethods();
|
||||
},
|
||||
methods: {
|
||||
|
||||
Reference in New Issue
Block a user