2
0
mirror of https://github.com/frappe/books.git synced 2024-12-31 22:11:48 +00:00

Merge pull request #586 from frappe/manual-backref

fix(ux): allow setting of Stock Transfer backref
This commit is contained in:
Alan 2023-03-28 23:49:33 -07:00 committed by GitHub
commit a0eced5fe0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 89 additions and 2 deletions

View File

@ -3,6 +3,7 @@ import { Attachment } from 'fyo/core/types';
import { Doc } from 'fyo/model/doc';
import {
Action,
ChangeArg,
DefaultMap,
FiltersMap,
FormulaMap,
@ -15,6 +16,7 @@ import { addItem, getLedgerLinkAction, getNumberSeries } from 'models/helpers';
import { LedgerPosting } from 'models/Transactional/LedgerPosting';
import { ModelNameEnum } from 'models/types';
import { Money } from 'pesa';
import { TargetField } from 'schemas/types';
import { validateBatch } from './helpers';
import { StockTransferItem } from './StockTransferItem';
import { Transfer } from './Transfer';
@ -66,6 +68,11 @@ export abstract class StockTransfer extends Transfer {
role: ['in', [doc.isSales ? 'Customer' : 'Supplier', 'Both']],
}),
numberSeries: (doc: Doc) => ({ referenceType: doc.schemaName }),
backReference: () => ({
stockNotTransferred: ['!=', 0],
submitted: true,
cancelled: false,
}),
};
override _getTransferDetails() {
@ -257,4 +264,37 @@ export abstract class StockTransfer extends Transfer {
async addItem(name: string) {
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);
}
}

View File

@ -8,6 +8,7 @@ import { RawValue } from 'schemas/types';
import test from 'tape';
import { closeTestFyo, getTestFyo, setupTestFyo } from 'tests/helpers';
import { InventorySettings } from '../InventorySettings';
import { Shipment } from '../Shipment';
import { StockTransfer } from '../StockTransfer';
import { ValuationMethod } from '../types';
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);

View File

@ -20,7 +20,6 @@
"label": "Back Reference",
"fieldtype": "Link",
"target": "PurchaseInvoice",
"readOnly": true,
"section": "References"
},
{

View File

@ -20,7 +20,6 @@
"label": "Back Reference",
"fieldtype": "Link",
"target": "SalesInvoice",
"readOnly": true,
"section": "References"
},
{