mirror of
https://github.com/frappe/books.git
synced 2025-01-03 15:17:30 +00:00
Merge pull request #586 from frappe/manual-backref
fix(ux): allow setting of Stock Transfer backref
This commit is contained in:
commit
a0eced5fe0
@ -3,6 +3,7 @@ import { Attachment } from 'fyo/core/types';
|
|||||||
import { Doc } from 'fyo/model/doc';
|
import { Doc } from 'fyo/model/doc';
|
||||||
import {
|
import {
|
||||||
Action,
|
Action,
|
||||||
|
ChangeArg,
|
||||||
DefaultMap,
|
DefaultMap,
|
||||||
FiltersMap,
|
FiltersMap,
|
||||||
FormulaMap,
|
FormulaMap,
|
||||||
@ -15,6 +16,7 @@ import { addItem, getLedgerLinkAction, getNumberSeries } from 'models/helpers';
|
|||||||
import { LedgerPosting } from 'models/Transactional/LedgerPosting';
|
import { LedgerPosting } from 'models/Transactional/LedgerPosting';
|
||||||
import { ModelNameEnum } from 'models/types';
|
import { ModelNameEnum } from 'models/types';
|
||||||
import { Money } from 'pesa';
|
import { Money } from 'pesa';
|
||||||
|
import { TargetField } from 'schemas/types';
|
||||||
import { validateBatch } from './helpers';
|
import { validateBatch } from './helpers';
|
||||||
import { StockTransferItem } from './StockTransferItem';
|
import { StockTransferItem } from './StockTransferItem';
|
||||||
import { Transfer } from './Transfer';
|
import { Transfer } from './Transfer';
|
||||||
@ -66,6 +68,11 @@ export abstract class StockTransfer extends Transfer {
|
|||||||
role: ['in', [doc.isSales ? 'Customer' : 'Supplier', 'Both']],
|
role: ['in', [doc.isSales ? 'Customer' : 'Supplier', 'Both']],
|
||||||
}),
|
}),
|
||||||
numberSeries: (doc: Doc) => ({ referenceType: doc.schemaName }),
|
numberSeries: (doc: Doc) => ({ referenceType: doc.schemaName }),
|
||||||
|
backReference: () => ({
|
||||||
|
stockNotTransferred: ['!=', 0],
|
||||||
|
submitted: true,
|
||||||
|
cancelled: false,
|
||||||
|
}),
|
||||||
};
|
};
|
||||||
|
|
||||||
override _getTransferDetails() {
|
override _getTransferDetails() {
|
||||||
@ -257,4 +264,37 @@ export abstract class StockTransfer extends Transfer {
|
|||||||
async addItem(name: string) {
|
async addItem(name: string) {
|
||||||
return await addItem(name, this);
|
return await addItem(name, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override async change({ doc, changed }: ChangeArg): Promise<void> {
|
||||||
|
if (doc.name === this.name && changed === 'backReference') {
|
||||||
|
await this.setFieldsFromBackReference();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async setFieldsFromBackReference() {
|
||||||
|
const backReference = this.backReference;
|
||||||
|
const { target } = this.fyo.getField(
|
||||||
|
this.schemaName,
|
||||||
|
'backReference'
|
||||||
|
) as TargetField;
|
||||||
|
|
||||||
|
if (!backReference || !target) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const brDoc = await this.fyo.doc.getDoc(target, backReference);
|
||||||
|
if (!(brDoc instanceof Invoice)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const stDoc = await brDoc.getStockTransfer();
|
||||||
|
if (!stDoc) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await this.set('party', stDoc.party);
|
||||||
|
await this.set('terms', stDoc.terms);
|
||||||
|
await this.set('date', stDoc.date);
|
||||||
|
await this.set('items', stDoc.items);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import { RawValue } from 'schemas/types';
|
|||||||
import test from 'tape';
|
import test from 'tape';
|
||||||
import { closeTestFyo, getTestFyo, setupTestFyo } from 'tests/helpers';
|
import { closeTestFyo, getTestFyo, setupTestFyo } from 'tests/helpers';
|
||||||
import { InventorySettings } from '../InventorySettings';
|
import { InventorySettings } from '../InventorySettings';
|
||||||
|
import { Shipment } from '../Shipment';
|
||||||
import { StockTransfer } from '../StockTransfer';
|
import { StockTransfer } from '../StockTransfer';
|
||||||
import { ValuationMethod } from '../types';
|
import { ValuationMethod } from '../types';
|
||||||
import { getALEs, getItem, getSLEs, getStockTransfer } from './helpers';
|
import { getALEs, getItem, getSLEs, getStockTransfer } from './helpers';
|
||||||
@ -536,4 +537,52 @@ test('Cancel and Delete Sales Invoice with cancelled Shipments', async (t) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('Create Shipment from manually set Back Ref', async (t) => {
|
||||||
|
const rate = (testDocs['Item'][item].rate as number) ?? 0;
|
||||||
|
const totalQuantity = 10;
|
||||||
|
const prec = await getStockTransfer(
|
||||||
|
ModelNameEnum.PurchaseReceipt,
|
||||||
|
party,
|
||||||
|
new Date('2022-01-08'),
|
||||||
|
[
|
||||||
|
{
|
||||||
|
item,
|
||||||
|
location,
|
||||||
|
quantity: totalQuantity,
|
||||||
|
rate,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
fyo
|
||||||
|
);
|
||||||
|
await (await prec.sync()).submit();
|
||||||
|
|
||||||
|
const sinv = fyo.doc.getNewDoc(ModelNameEnum.SalesInvoice) as Invoice;
|
||||||
|
const quantity = 5;
|
||||||
|
await sinv.set({
|
||||||
|
party,
|
||||||
|
date: new Date('2022-01-09'),
|
||||||
|
account: 'Debtors',
|
||||||
|
});
|
||||||
|
await sinv.append('items', { item, quantity, rate });
|
||||||
|
await (await sinv.sync()).submit();
|
||||||
|
|
||||||
|
t.equal(sinv.stockNotTransferred, quantity, "stock hasn't been transferred");
|
||||||
|
|
||||||
|
const shpm = fyo.doc.getNewDoc(ModelNameEnum.Shipment) as Shipment;
|
||||||
|
await shpm.set('backReference', sinv.name);
|
||||||
|
await shpm.set('date', new Date('2022-01-10'));
|
||||||
|
shpm.items?.[0].set('location', location);
|
||||||
|
|
||||||
|
t.equal(shpm.party, sinv.party, 'party set');
|
||||||
|
|
||||||
|
await (await shpm.sync()).submit();
|
||||||
|
t.equal(
|
||||||
|
await fyo.db.getStockQuantity(item, location),
|
||||||
|
totalQuantity - quantity,
|
||||||
|
'quantity shipped'
|
||||||
|
);
|
||||||
|
|
||||||
|
t.equal(sinv.stockNotTransferred, 0, 'stock has been transferred');
|
||||||
|
});
|
||||||
|
|
||||||
closeTestFyo(fyo, __filename);
|
closeTestFyo(fyo, __filename);
|
||||||
|
@ -20,7 +20,6 @@
|
|||||||
"label": "Back Reference",
|
"label": "Back Reference",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"target": "PurchaseInvoice",
|
"target": "PurchaseInvoice",
|
||||||
"readOnly": true,
|
|
||||||
"section": "References"
|
"section": "References"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -20,7 +20,6 @@
|
|||||||
"label": "Back Reference",
|
"label": "Back Reference",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"target": "SalesInvoice",
|
"target": "SalesInvoice",
|
||||||
"readOnly": true,
|
|
||||||
"section": "References"
|
"section": "References"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user