import { DefaultMap, FiltersMap, FormulaMap, ListViewSettings, } from 'fyo/model/types'; import { getDocStatusListColumn } from 'models/helpers'; import { LedgerPosting } from 'models/Transactional/LedgerPosting'; import { ModelNameEnum } from 'models/types'; import { Money } from 'pesa'; import { StockMovementItem } from './StockMovementItem'; import { Transfer } from './Transfer'; import { MovementType } from './types'; export class StockMovement extends Transfer { name?: string; date?: Date; numberSeries?: string; movementType?: MovementType; items?: StockMovementItem[]; amount?: Money; override get isTransactional(): boolean { return false; } override async getPosting(): Promise { return null; } formulas: FormulaMap = { amount: { formula: () => { return this.items?.reduce( (acc, item) => acc.add(item.amount ?? 0), this.fyo.pesa(0) ); }, dependsOn: ['items'], }, }; static filters: FiltersMap = { numberSeries: () => ({ referenceType: ModelNameEnum.StockMovement }), }; static defaults: DefaultMap = { date: () => new Date(), }; static getListViewSettings(): ListViewSettings { return { columns: ['name', getDocStatusListColumn(), 'date', 'movementType'], }; } _getTransferDetails() { return (this.items ?? []).map((row) => ({ item: row.item!, rate: row.rate!, quantity: row.quantity!, fromLocation: row.fromLocation, toLocation: row.toLocation, })); } }