mirror of
https://github.com/frappe/books.git
synced 2024-11-10 07:40:55 +00:00
b5f8e49299
- hide inventory defaults until enabled
88 lines
2.1 KiB
TypeScript
88 lines
2.1 KiB
TypeScript
import { Doc } from 'fyo/model/doc';
|
|
import {
|
|
DefaultMap,
|
|
FiltersMap,
|
|
FormulaMap,
|
|
ListViewSettings
|
|
} from 'fyo/model/types';
|
|
import { getDocStatusListColumn } from 'models/helpers';
|
|
import { ModelNameEnum } from 'models/types';
|
|
import { Money } from 'pesa';
|
|
import { StockManager } from './StockManager';
|
|
import { StockMovementItem } from './StockMovementItem';
|
|
import { MovementType } from './types';
|
|
|
|
export class StockMovement extends Doc {
|
|
name?: string;
|
|
date?: Date;
|
|
numberSeries?: string;
|
|
movementType?: MovementType;
|
|
items?: StockMovementItem[];
|
|
amount?: Money;
|
|
|
|
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'],
|
|
};
|
|
}
|
|
|
|
async beforeSubmit(): Promise<void> {
|
|
await super.beforeSubmit();
|
|
const transferDetails = this._getTransferDetails();
|
|
await this._getStockManager().validateTransfers(transferDetails);
|
|
}
|
|
|
|
async afterSubmit(): Promise<void> {
|
|
await super.afterSubmit();
|
|
const transferDetails = this._getTransferDetails();
|
|
await this._getStockManager().createTransfers(transferDetails);
|
|
}
|
|
|
|
async afterCancel(): Promise<void> {
|
|
await super.afterCancel();
|
|
await this._getStockManager().cancelTransfers();
|
|
}
|
|
|
|
_getTransferDetails() {
|
|
return (this.items ?? []).map((row) => ({
|
|
item: row.item!,
|
|
rate: row.rate!,
|
|
quantity: row.quantity!,
|
|
fromLocation: row.fromLocation,
|
|
toLocation: row.toLocation,
|
|
}));
|
|
}
|
|
|
|
_getStockManager(): StockManager {
|
|
return new StockManager(
|
|
{
|
|
date: this.date!,
|
|
referenceName: this.name!,
|
|
referenceType: this.schemaName,
|
|
},
|
|
this.isCancelled,
|
|
this.fyo
|
|
);
|
|
}
|
|
}
|