2
0
mirror of https://github.com/frappe/books.git synced 2024-09-20 11:29:00 +00:00
books/models/inventory/StockMovement.ts

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

84 lines
1.9 KiB
TypeScript
Raw Normal View History

import { Doc } from 'fyo/model/doc';
import {
DefaultMap,
FiltersMap,
FormulaMap,
ListViewSettings
} from 'fyo/model/types';
import { ModelNameEnum } from 'models/types';
import { Money } from 'pesa';
2022-10-29 06:15:23 +00:00
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', 'date', 'movementType'] };
}
2022-10-29 06:15:23 +00:00
async afterSubmit(): Promise<void> {
await this._transferStock();
}
async afterCancel(): Promise<void> {
await this._transferStock();
}
async _transferStock() {
2022-10-29 07:07:52 +00:00
const stockManager = this._getStockManager();
this._makeTransfers(stockManager);
await stockManager.sync();
2022-10-29 06:15:23 +00:00
}
2022-10-29 07:07:52 +00:00
_makeTransfers(stockManager: StockManager) {
2022-10-29 06:15:23 +00:00
for (const row of this.items ?? []) {
2022-10-29 07:07:52 +00:00
stockManager.transferStock({
item: row.item!,
rate: row.rate!,
quantity: row.quantity!,
fromLocation: row.fromLocation,
toLocation: row.toLocation,
});
2022-10-29 06:15:23 +00:00
}
}
2022-10-29 07:07:52 +00:00
_getStockManager(): StockManager {
2022-10-29 06:15:23 +00:00
return new StockManager(
{
date: this.date!,
referenceName: this.name!,
referenceType: this.schemaName,
},
2022-10-29 07:07:52 +00:00
this.isCancelled,
2022-10-29 06:15:23 +00:00
this.fyo
);
}
}