feat: Fetch Payment Terms from linked Purchase Order
This commit is contained in:
parent
d45ebaf61c
commit
5a62467a3e
@ -508,6 +508,8 @@ frappe.ui.form.on("Purchase Invoice", {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
frm.events.set_payment_terms(frm);
|
||||||
},
|
},
|
||||||
|
|
||||||
refresh: function(frm) {
|
refresh: function(frm) {
|
||||||
@ -570,4 +572,21 @@ frappe.ui.form.on("Purchase Invoice", {
|
|||||||
company: function(frm) {
|
company: function(frm) {
|
||||||
erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
|
erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
|
||||||
},
|
},
|
||||||
})
|
|
||||||
|
set_payment_terms: function (frm) {
|
||||||
|
frappe.call({
|
||||||
|
'method': 'erpnext.accounts.doctype.purchase_invoice.purchase_invoice.set_payment_terms_from_po',
|
||||||
|
'args': {
|
||||||
|
doc: frm.doc
|
||||||
|
},
|
||||||
|
'callback': (r) => {
|
||||||
|
if (r.message) {
|
||||||
|
var doc = frappe.model.sync(r.message)[0];
|
||||||
|
console.log("doc: ", doc)
|
||||||
|
frappe.set_route("Form", doc.doctype, doc.name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
},
|
||||||
|
})
|
||||||
@ -7,6 +7,8 @@ import frappe, erpnext
|
|||||||
from frappe.utils import cint, cstr, formatdate, flt, getdate, nowdate, get_link_to_form
|
from frappe.utils import cint, cstr, formatdate, flt, getdate, nowdate, get_link_to_form
|
||||||
from frappe import _, throw
|
from frappe import _, throw
|
||||||
import frappe.defaults
|
import frappe.defaults
|
||||||
|
import json
|
||||||
|
import six
|
||||||
|
|
||||||
from erpnext.assets.doctype.asset_category.asset_category import get_asset_category_account
|
from erpnext.assets.doctype.asset_category.asset_category import get_asset_category_account
|
||||||
from erpnext.controllers.buying_controller import BuyingController
|
from erpnext.controllers.buying_controller import BuyingController
|
||||||
@ -1171,6 +1173,43 @@ class PurchaseInvoice(BuyingController):
|
|||||||
if update:
|
if update:
|
||||||
self.db_set('status', self.status, update_modified = update_modified)
|
self.db_set('status', self.status, update_modified = update_modified)
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def set_payment_terms_from_po(doc):
|
||||||
|
if isinstance(doc, six.string_types):
|
||||||
|
doc = json.loads(doc)
|
||||||
|
|
||||||
|
purchase_order = doc.get('items')[0].get('purchase_order')
|
||||||
|
|
||||||
|
if linked_po_has_payment_terms(doc, purchase_order) and all_items_have_same_po(doc, purchase_order):
|
||||||
|
purchase_order = frappe.get_cached_doc('Purchase Order', purchase_order)
|
||||||
|
doc['payment_terms_template'] = purchase_order.payment_terms_template
|
||||||
|
doc['terms'] = purchase_order.payment_terms_template
|
||||||
|
|
||||||
|
for schedule in purchase_order.payment_schedule:
|
||||||
|
payment_schedule = {
|
||||||
|
'payment_term': schedule.payment_term,
|
||||||
|
'due_date': schedule.due_date,
|
||||||
|
'invoice_portion': schedule.invoice_portion,
|
||||||
|
'discount_type': schedule.discount_type,
|
||||||
|
'discount': schedule.discount,
|
||||||
|
'base_payment_amount': schedule.base_payment_amount,
|
||||||
|
'payment_amount': schedule.payment_amount,
|
||||||
|
'outstanding': schedule.outstanding
|
||||||
|
}
|
||||||
|
doc['payment_schedule'].append(payment_schedule)
|
||||||
|
|
||||||
|
return doc
|
||||||
|
|
||||||
|
def linked_po_has_payment_terms(doc, purchase_order):
|
||||||
|
return not doc.get('payment_schedule') and purchase_order
|
||||||
|
|
||||||
|
def all_items_have_same_po(doc, purchase_order):
|
||||||
|
for item in doc.get('items'):
|
||||||
|
if item.get('purchase_order') != purchase_order:
|
||||||
|
return False
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
# to get details of purchase invoice/receipt from which this doc was created for exchange rate difference handling
|
# to get details of purchase invoice/receipt from which this doc was created for exchange rate difference handling
|
||||||
def get_purchase_document_details(doc):
|
def get_purchase_document_details(doc):
|
||||||
if doc.doctype == 'Purchase Invoice':
|
if doc.doctype == 'Purchase Invoice':
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user