Merge pull request #5641 from rohitwaghchaure/rename_prevdoc_fields

Rename prevdoc field in purchase order and purchase receipt doctype
This commit is contained in:
Nabin Hait 2016-07-06 12:21:38 +05:30 committed by GitHub
commit f1439c8f78
12 changed files with 195 additions and 121 deletions

View File

@ -23,13 +23,13 @@ class PurchaseOrder(BuyingController):
self.status_updater = [{ self.status_updater = [{
'source_dt': 'Purchase Order Item', 'source_dt': 'Purchase Order Item',
'target_dt': 'Material Request Item', 'target_dt': 'Material Request Item',
'join_field': 'prevdoc_detail_docname', 'join_field': 'material_request_item',
'target_field': 'ordered_qty', 'target_field': 'ordered_qty',
'target_parent_dt': 'Material Request', 'target_parent_dt': 'Material Request',
'target_parent_field': 'per_ordered', 'target_parent_field': 'per_ordered',
'target_ref_field': 'qty', 'target_ref_field': 'qty',
'source_field': 'stock_qty', 'source_field': 'stock_qty',
'percent_join_field': 'prevdoc_docname', 'percent_join_field': 'material_request',
'overflow_type': 'order' 'overflow_type': 'order'
}] }]
@ -92,9 +92,9 @@ class PurchaseOrder(BuyingController):
def get_schedule_dates(self): def get_schedule_dates(self):
for d in self.get('items'): for d in self.get('items'):
if d.prevdoc_detail_docname and not d.schedule_date: if d.material_request_item and not d.schedule_date:
d.schedule_date = frappe.db.get_value("Material Request Item", d.schedule_date = frappe.db.get_value("Material Request Item",
d.prevdoc_detail_docname, "schedule_date") d.material_request_item, "schedule_date")
def get_last_purchase_rate(self): def get_last_purchase_rate(self):
@ -125,15 +125,15 @@ class PurchaseOrder(BuyingController):
def check_for_closed_status(self, pc_obj): def check_for_closed_status(self, pc_obj):
check_list =[] check_list =[]
for d in self.get('items'): for d in self.get('items'):
if d.meta.get_field('prevdoc_docname') and d.prevdoc_docname and d.prevdoc_docname not in check_list: if d.meta.get_field('material_request') and d.material_request and d.material_request not in check_list:
check_list.append(d.prevdoc_docname) check_list.append(d.material_request)
pc_obj.check_for_closed_status( d.prevdoc_doctype, d.prevdoc_docname) pc_obj.check_for_closed_status('Material Request', d.material_request)
def update_requested_qty(self): def update_requested_qty(self):
material_request_map = {} material_request_map = {}
for d in self.get("items"): for d in self.get("items"):
if d.prevdoc_doctype and d.prevdoc_doctype == "Material Request" and d.prevdoc_detail_docname: if d.material_request_item:
material_request_map.setdefault(d.prevdoc_docname, []).append(d.prevdoc_detail_docname) material_request_map.setdefault(d.material_request, []).append(d.material_request_item)
for mr, mr_item_rows in material_request_map.items(): for mr, mr_item_rows in material_request_map.items():
if mr and mr_item_rows: if mr and mr_item_rows:
@ -225,9 +225,9 @@ class PurchaseOrder(BuyingController):
"""Update delivered qty in Sales Order for drop ship""" """Update delivered qty in Sales Order for drop ship"""
sales_orders_to_update = [] sales_orders_to_update = []
for item in self.items: for item in self.items:
if item.prevdoc_doctype == "Sales Order" and item.delivered_by_supplier == 1: if item.sales_order and item.delivered_by_supplier == 1:
if item.prevdoc_docname not in sales_orders_to_update: if item.sales_order not in sales_orders_to_update:
sales_orders_to_update.append(item.prevdoc_docname) sales_orders_to_update.append(item.sales_order)
for so_name in sales_orders_to_update: for so_name in sales_orders_to_update:
so = frappe.get_doc("Sales Order", so_name) so = frappe.get_doc("Sales Order", so_name)
@ -239,7 +239,7 @@ class PurchaseOrder(BuyingController):
return any([d.delivered_by_supplier for d in self.items]) return any([d.delivered_by_supplier for d in self.items])
def is_against_so(self): def is_against_so(self):
return any([d.prevdoc_doctype for d in self.items if d.prevdoc_doctype=="Sales Order"]) return any([d.sales_order for d in self.items if d.sales_order])
def set_received_qty_for_drop_ship_items(self): def set_received_qty_for_drop_ship_items(self):
for item in self.items: for item in self.items:
@ -288,9 +288,8 @@ def make_purchase_receipt(source_name, target_doc=None):
"Purchase Order Item": { "Purchase Order Item": {
"doctype": "Purchase Receipt Item", "doctype": "Purchase Receipt Item",
"field_map": { "field_map": {
"name": "prevdoc_detail_docname", "name": "purchase_order_item",
"parent": "prevdoc_docname", "parent": "purchase_order",
"parenttype": "prevdoc_doctype",
}, },
"postprocess": update_item, "postprocess": update_item,
"condition": lambda doc: abs(doc.received_qty) < abs(doc.qty) and doc.delivered_by_supplier!=1 "condition": lambda doc: abs(doc.received_qty) < abs(doc.qty) and doc.delivered_by_supplier!=1

View File

@ -3,6 +3,7 @@
"allow_import": 0, "allow_import": 0,
"allow_rename": 0, "allow_rename": 0,
"autoname": "hash", "autoname": "hash",
"beta": 0,
"creation": "2013-05-24 19:29:06", "creation": "2013-05-24 19:29:06",
"custom": 0, "custom": 0,
"docstatus": 0, "docstatus": 0,
@ -959,46 +960,19 @@
"allow_on_submit": 0, "allow_on_submit": 0,
"bold": 0, "bold": 0,
"collapsible": 0, "collapsible": 0,
"fieldname": "prevdoc_doctype", "fieldname": "material_request",
"fieldtype": "Link", "fieldtype": "Link",
"hidden": 1,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Reference Document Type",
"length": 0,
"no_copy": 1,
"oldfieldname": "prevdoc_doctype",
"oldfieldtype": "Data",
"options": "DocType",
"permlevel": 0,
"print_hide": 1,
"print_hide_if_no_value": 0,
"read_only": 1,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "prevdoc_docname",
"fieldtype": "Dynamic Link",
"hidden": 0, "hidden": 0,
"ignore_user_permissions": 0, "ignore_user_permissions": 0,
"ignore_xss_filter": 0, "ignore_xss_filter": 0,
"in_filter": 1, "in_filter": 1,
"in_list_view": 0, "in_list_view": 0,
"label": "Reference Name", "label": "Material Request",
"length": 0, "length": 0,
"no_copy": 1, "no_copy": 1,
"oldfieldname": "prevdoc_docname", "oldfieldname": "prevdoc_docname",
"oldfieldtype": "Link", "oldfieldtype": "Link",
"options": "prevdoc_doctype", "options": "Material Request",
"permlevel": 0, "permlevel": 0,
"print_hide": 1, "print_hide": 1,
"print_hide_if_no_value": 0, "print_hide_if_no_value": 0,
@ -1015,14 +989,14 @@
"allow_on_submit": 0, "allow_on_submit": 0,
"bold": 0, "bold": 0,
"collapsible": 0, "collapsible": 0,
"fieldname": "prevdoc_detail_docname", "fieldname": "material_request_item",
"fieldtype": "Data", "fieldtype": "Data",
"hidden": 1, "hidden": 1,
"ignore_user_permissions": 0, "ignore_user_permissions": 0,
"ignore_xss_filter": 0, "ignore_xss_filter": 0,
"in_filter": 1, "in_filter": 1,
"in_list_view": 0, "in_list_view": 0,
"label": "Material Request Detail No", "label": "Material Request Item",
"length": 0, "length": 0,
"no_copy": 1, "no_copy": 1,
"oldfieldname": "prevdoc_detail_docname", "oldfieldname": "prevdoc_detail_docname",
@ -1037,6 +1011,57 @@
"set_only_once": 0, "set_only_once": 0,
"unique": 0 "unique": 0
}, },
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "sales_order",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Sales Order",
"length": 0,
"no_copy": 1,
"options": "Sales Order",
"permlevel": 0,
"precision": "",
"print_hide": 1,
"print_hide_if_no_value": 0,
"read_only": 1,
"report_hide": 0,
"reqd": 0,
"search_index": 1,
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "sales_order_item",
"fieldtype": "Data",
"hidden": 1,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Sales Order Item",
"length": 0,
"no_copy": 1,
"permlevel": 0,
"precision": "",
"print_hide": 1,
"print_hide_if_no_value": 0,
"read_only": 1,
"report_hide": 0,
"reqd": 0,
"search_index": 1,
"set_only_once": 0,
"unique": 0
},
{ {
"allow_on_submit": 0, "allow_on_submit": 0,
"bold": 0, "bold": 0,
@ -1378,20 +1403,23 @@
"hide_heading": 0, "hide_heading": 0,
"hide_toolbar": 0, "hide_toolbar": 0,
"idx": 1, "idx": 1,
"image_view": 0,
"in_create": 0, "in_create": 0,
"in_dialog": 0, "in_dialog": 0,
"is_submittable": 0, "is_submittable": 0,
"issingle": 0, "issingle": 0,
"istable": 1, "istable": 1,
"max_attachments": 0, "max_attachments": 0,
"modified": "2016-03-18 05:08:54.505417", "modified": "2016-07-04 16:29:19.624908",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Buying", "module": "Buying",
"name": "Purchase Order Item", "name": "Purchase Order Item",
"owner": "Administrator", "owner": "Administrator",
"permissions": [], "permissions": [],
"quick_entry": 1,
"read_only": 0, "read_only": 0,
"read_only_onload": 0, "read_only_onload": 0,
"sort_field": "modified", "sort_field": "modified",
"sort_order": "DESC" "sort_order": "DESC",
"track_seen": 0
} }

View File

@ -78,9 +78,8 @@ def make_purchase_order(source_name, target_doc=None):
["parent", "supplier_quotation"], ["parent", "supplier_quotation"],
["uom", "stock_uom"], ["uom", "stock_uom"],
["uom", "uom"], ["uom", "uom"],
["prevdoc_detail_docname", "prevdoc_detail_docname"], ["material_request", "material_request"],
["prevdoc_doctype", "prevdoc_doctype"], ["material_request_item", "material_request_item"]
["prevdoc_docname", "prevdoc_docname"]
], ],
"postprocess": update_item "postprocess": update_item
}, },

View File

@ -366,8 +366,8 @@ class BuyingController(StockController):
po_map = {} po_map = {}
for d in self.get("items"): for d in self.get("items"):
if self.doctype=="Purchase Receipt" \ if self.doctype=="Purchase Receipt" \
and d.prevdoc_doctype=="Purchase Order" and d.prevdoc_detail_docname: and d.purchase_order:
po_map.setdefault(d.prevdoc_docname, []).append(d.prevdoc_detail_docname) po_map.setdefault(d.purchase_order, []).append(d.purchase_order_item)
elif self.doctype=="Purchase Invoice" and d.purchase_order and d.po_detail: elif self.doctype=="Purchase Invoice" and d.purchase_order and d.po_detail:
po_map.setdefault(d.purchase_order, []).append(d.po_detail) po_map.setdefault(d.purchase_order, []).append(d.po_detail)

View File

@ -287,3 +287,4 @@ erpnext.patches.v7_0.update_maintenance_module_in_doctype
erpnext.patches.v7_0.update_prevdoc_values_for_supplier_quotation_item erpnext.patches.v7_0.update_prevdoc_values_for_supplier_quotation_item
erpnext.patches.v7_0.rename_advance_table_fields erpnext.patches.v7_0.rename_advance_table_fields
erpnext.patches.v7_0.rename_salary_components erpnext.patches.v7_0.rename_salary_components
erpnext.patches.v7_0.rename_prevdoc_fields

View File

@ -0,0 +1,75 @@
import frappe
import json
from frappe.model.utils.rename_field import update_reports, rename_field, update_property_setters
from frappe.custom.doctype.property_setter.property_setter import make_property_setter
def execute():
frappe.reload_doctype('Purchase Order Item')
frappe.reload_doctype('Purchase Receipt Item')
update_po_fields()
update_prop_setters_reports_print_format_for_po()
set_sales_order_field()
rename_pr_fields()
def update_po_fields():
for data in frappe.db.sql(""" select prevdoc_docname, prevdoc_detail_docname, name, prevdoc_doctype
from `tabPurchase Order Item` where prevdoc_doctype is not null""", as_dict=True):
if data.prevdoc_doctype == 'Material Request':
frappe.db.set_value("Purchase Order Item", data.name, "material_request", data.prevdoc_docname, update_modified=False)
frappe.db.set_value("Purchase Order Item", data.name, "material_request_item", data.prevdoc_detail_docname, update_modified=False)
elif data.prevdoc_doctype == 'Sales Order':
frappe.db.set_value("Purchase Order Item", data.name, "sales_order", data.prevdoc_docname, update_modified=False)
frappe.db.set_value("Purchase Order Item", data.name, "sales_order_item", data.prevdoc_detail_docname, update_modified=False)
def get_columns():
return {
'prevdoc_docname': 'material_request',
'prevdoc_detail_docname': 'material_request_item'
}
def update_prop_setters_reports_print_format_for_po():
for key, val in get_columns().items():
update_property_setters('Purchase Order Item', key, val)
update_reports('Purchase Order Item', key, val)
update_print_format_for_po(key, val, 'Purchase Order')
def update_print_format_for_po(old_fieldname, new_fieldname, doc_type):
column_mapper = get_columns()
for data in frappe.db.sql(""" select name, format_data from `tabPrint Format` where
format_data like %(old_fieldname)s and doc_type = %(doc_type)s""",
{'old_fieldname': '%%%s%%'%(old_fieldname), 'doc_type': doc_type}, as_dict=True):
update_print_format_fields(old_fieldname, new_fieldname, data)
def update_print_format_fields(old_fieldname, new_fieldname, args):
report_dict = json.loads(args.format_data)
update = False
for col in report_dict:
if col.get('fieldname') and col.get('fieldname') == old_fieldname:
col['fieldname'] = new_fieldname
update = True
if col.get('visible_columns'):
for key in col.get('visible_columns'):
if key.get('fieldname') == old_fieldname:
key['fieldname'] = new_fieldname
update = True
if update:
val = json.dumps(report_dict)
frappe.db.sql("""update `tabPrint Format` set `format_data`=%s where name=%s""", (val, args.name))
def set_sales_order_field():
for data in frappe.db.sql("""select doc_type, field_name, property, value, property_type
from `tabProperty Setter` where doc_type = 'Purchase Order Item'
and field_name in('material_request', 'material_request_item')""", as_dict=True):
if data.field_name == 'material_request':
make_property_setter(data.doc_type, 'sales_order', data.property, data.value, data.property_type)
else:
make_property_setter(data.doc_type, 'sales_order_item', data.property, data.value, data.property_type)
def rename_pr_fields():
rename_field("Purchase Receipt Item", "prevdoc_docname", "purchase_order")
rename_field("Purchase Receipt Item", "prevdoc_detail_docname", "purchase_order_item")

View File

@ -286,8 +286,7 @@ class SalesOrder(SellingController):
if item.delivered_by_supplier: if item.delivered_by_supplier:
item_delivered_qty = frappe.db.sql("""select sum(qty) item_delivered_qty = frappe.db.sql("""select sum(qty)
from `tabPurchase Order Item` poi, `tabPurchase Order` po from `tabPurchase Order Item` poi, `tabPurchase Order` po
where poi.prevdoc_detail_docname = %s where poi.sales_order_item = %s
and poi.prevdoc_doctype = 'Sales Order'
and poi.item_code = %s and poi.item_code = %s
and poi.parent = po.name and poi.parent = po.name
and po.docstatus = 1 and po.docstatus = 1
@ -611,9 +610,8 @@ def make_purchase_order_for_drop_shipment(source_name, for_supplier, target_doc=
"Sales Order Item": { "Sales Order Item": {
"doctype": "Purchase Order Item", "doctype": "Purchase Order Item",
"field_map": [ "field_map": [
["name", "prevdoc_detail_docname"], ["name", "sales_order_item"],
["parent", "prevdoc_docname"], ["parent", "sales_order"],
["parenttype", "prevdoc_doctype"],
["uom", "stock_uom"], ["uom", "stock_uom"],
["delivery_date", "schedule_date"] ["delivery_date", "schedule_date"]
], ],

View File

@ -376,8 +376,7 @@ class TestSalesOrder(unittest.TestCase):
dn = create_dn_against_so(so.name, delivered_qty=1) dn = create_dn_against_so(so.name, delivered_qty=1)
self.assertEquals(so.customer, po.customer) self.assertEquals(so.customer, po.customer)
self.assertEquals(po.items[0].prevdoc_doctype, "Sales Order") self.assertEquals(po.items[0].sales_order, so.name)
self.assertEquals(po.items[0].prevdoc_docname, so.name)
self.assertEquals(po.items[0].item_code, po_item.item_code) self.assertEquals(po.items[0].item_code, po_item.item_code)
self.assertEquals(dn.items[0].item_code, dn_item.item_code) self.assertEquals(dn.items[0].item_code, dn_item.item_code)

View File

@ -50,7 +50,7 @@ erpnext.buying.MaterialRequestController = erpnext.buying.BuyingController.exten
if(doc.docstatus == 1 && doc.status != 'Stopped') { if(doc.docstatus == 1 && doc.status != 'Stopped') {
this.frm.dashboard.show_dashboard(); // this.frm.dashboard.show_dashboard();
if(flt(doc.per_ordered, 2) < 100) { if(flt(doc.per_ordered, 2) < 100) {
// make // make

View File

@ -213,9 +213,8 @@ def make_purchase_order(source_name, target_doc=None):
"Material Request Item": { "Material Request Item": {
"doctype": "Purchase Order Item", "doctype": "Purchase Order Item",
"field_map": [ "field_map": [
["name", "prevdoc_detail_docname"], ["name", "material_request_item"],
["parent", "prevdoc_docname"], ["parent", "material_request"],
["parenttype", "prevdoc_doctype"],
["uom", "stock_uom"], ["uom", "stock_uom"],
["uom", "uom"] ["uom", "uom"]
], ],
@ -274,9 +273,8 @@ def make_purchase_order_based_on_supplier(source_name, target_doc=None):
"Material Request Item": { "Material Request Item": {
"doctype": "Purchase Order Item", "doctype": "Purchase Order Item",
"field_map": [ "field_map": [
["name", "prevdoc_detail_docname"], ["name", "material_request_item"],
["parent", "prevdoc_docname"], ["parent", "material_request"],
["parenttype", "prevdoc_doctype"],
["uom", "stock_uom"], ["uom", "stock_uom"],
["uom", "uom"] ["uom", "uom"]
], ],

View File

@ -23,36 +23,35 @@ class PurchaseReceipt(BuyingController):
self.status_updater = [{ self.status_updater = [{
'source_dt': 'Purchase Receipt Item', 'source_dt': 'Purchase Receipt Item',
'target_dt': 'Purchase Order Item', 'target_dt': 'Purchase Order Item',
'join_field': 'prevdoc_detail_docname', 'join_field': 'purchase_order_item',
'target_field': 'received_qty', 'target_field': 'received_qty',
'target_parent_dt': 'Purchase Order', 'target_parent_dt': 'Purchase Order',
'target_parent_field': 'per_received', 'target_parent_field': 'per_received',
'target_ref_field': 'qty', 'target_ref_field': 'qty',
'source_field': 'qty', 'source_field': 'qty',
'percent_join_field': 'prevdoc_docname', 'percent_join_field': 'purchase_order',
'overflow_type': 'receipt' 'overflow_type': 'receipt'
}, },
{ {
'source_dt': 'Purchase Receipt Item', 'source_dt': 'Purchase Receipt Item',
'target_dt': 'Purchase Order Item', 'target_dt': 'Purchase Order Item',
'join_field': 'prevdoc_detail_docname', 'join_field': 'purchase_order_item',
'target_field': 'returned_qty', 'target_field': 'returned_qty',
'target_parent_dt': 'Purchase Order', 'target_parent_dt': 'Purchase Order',
# 'target_parent_field': 'per_received', # 'target_parent_field': 'per_received',
# 'target_ref_field': 'qty', # 'target_ref_field': 'qty',
'source_field': '-1 * qty', 'source_field': '-1 * qty',
# 'percent_join_field': 'prevdoc_docname',
# 'overflow_type': 'receipt', # 'overflow_type': 'receipt',
'extra_cond': """ and exists (select name from `tabPurchase Receipt` where name=`tabPurchase Receipt Item`.parent and is_return=1)""" 'extra_cond': """ and exists (select name from `tabPurchase Receipt` where name=`tabPurchase Receipt Item`.parent and is_return=1)"""
}] }]
self.prev_link_mapper = { self.prev_link_mapper = {
"Purchase Order": { "Purchase Order": {
"fieldname": "prevdoc_docname", "fieldname": "purchase_order",
"doctype": "Purchase Receipt Item", "doctype": "Purchase Receipt Item",
"filters": [ "filters": [
["Purchase Receipt Item", "parent", "=", self.name], ["Purchase Receipt Item", "parent", "=", self.name],
["Purchase Receipt Item", "prevdoc_docname", "!=", ""] ["Purchase Receipt Item", "purchase_order", "!=", ""]
] ]
} }
} }
@ -73,29 +72,29 @@ class PurchaseReceipt(BuyingController):
def validate_with_previous_doc(self): def validate_with_previous_doc(self):
super(PurchaseReceipt, self).validate_with_previous_doc({ super(PurchaseReceipt, self).validate_with_previous_doc({
"Purchase Order": { "Purchase Order": {
"ref_dn_field": "prevdoc_docname", "ref_dn_field": "purchase_order",
"compare_fields": [["supplier", "="], ["company", "="], ["currency", "="]], "compare_fields": [["supplier", "="], ["company", "="], ["currency", "="]],
}, },
"Purchase Order Item": { "Purchase Order Item": {
"ref_dn_field": "prevdoc_detail_docname", "ref_dn_field": "purchase_order_item",
"compare_fields": [["project", "="], ["uom", "="], ["item_code", "="]], "compare_fields": [["project", "="], ["uom", "="], ["item_code", "="]],
"is_child_table": True "is_child_table": True
} }
}) })
if cint(frappe.db.get_single_value('Buying Settings', 'maintain_same_rate')) and not self.is_return: if cint(frappe.db.get_single_value('Buying Settings', 'maintain_same_rate')) and not self.is_return:
self.validate_rate_with_reference_doc([["Purchase Order", "prevdoc_docname", "prevdoc_detail_docname"]]) self.validate_rate_with_reference_doc([["Purchase Order", "purchase_order", "purchase_order_item"]])
def po_required(self): def po_required(self):
if frappe.db.get_value("Buying Settings", None, "po_required") == 'Yes': if frappe.db.get_value("Buying Settings", None, "po_required") == 'Yes':
for d in self.get('items'): for d in self.get('items'):
if not d.prevdoc_docname: if not d.purchase_order:
frappe.throw(_("Purchase Order number required for Item {0}").format(d.item_code)) frappe.throw(_("Purchase Order number required for Item {0}").format(d.item_code))
def get_already_received_qty(self, po, po_detail): def get_already_received_qty(self, po, po_detail):
qty = frappe.db.sql("""select sum(qty) from `tabPurchase Receipt Item` qty = frappe.db.sql("""select sum(qty) from `tabPurchase Receipt Item`
where prevdoc_detail_docname = %s and docstatus = 1 where purchase_order_item = %s and docstatus = 1
and prevdoc_doctype='Purchase Order' and prevdoc_docname=%s and purchase_order=%s
and parent != %s""", (po_detail, po, self.name)) and parent != %s""", (po_detail, po, self.name))
return qty and flt(qty[0][0]) or 0.0 return qty and flt(qty[0][0]) or 0.0
@ -115,9 +114,9 @@ class PurchaseReceipt(BuyingController):
def check_for_closed_status(self, pc_obj): def check_for_closed_status(self, pc_obj):
check_list =[] check_list =[]
for d in self.get('items'): for d in self.get('items'):
if d.meta.get_field('prevdoc_docname') and d.prevdoc_docname and d.prevdoc_docname not in check_list: if d.meta.get_field('purchase_order') and d.purchase_order and d.purchase_order not in check_list:
check_list.append(d.prevdoc_docname) check_list.append(d.purchase_order)
pc_obj.check_for_closed_status(d.prevdoc_doctype, d.prevdoc_docname) pc_obj.check_for_closed_status('Purchase Order', d.purchase_order)
# on submit # on submit
def on_submit(self): def on_submit(self):
@ -335,8 +334,8 @@ class PurchaseReceipt(BuyingController):
def update_billing_status(self, update_modified=True): def update_billing_status(self, update_modified=True):
updated_pr = [self.name] updated_pr = [self.name]
for d in self.get("items"): for d in self.get("items"):
if d.prevdoc_detail_docname: if d.purchase_order_item:
updated_pr += update_billed_amount_based_on_po(d.prevdoc_detail_docname, update_modified) updated_pr += update_billed_amount_based_on_po(d.purchase_order_item, update_modified)
for pr in set(updated_pr): for pr in set(updated_pr):
pr_doc = self if (pr == self.name) else frappe.get_doc("Purchase Receipt", pr) pr_doc = self if (pr == self.name) else frappe.get_doc("Purchase Receipt", pr)
@ -353,7 +352,7 @@ def update_billed_amount_based_on_po(po_detail, update_modified=True):
# Get all Delivery Note Item rows against the Sales Order Item row # Get all Delivery Note Item rows against the Sales Order Item row
pr_details = frappe.db.sql("""select pr_item.name, pr_item.amount, pr_item.parent pr_details = frappe.db.sql("""select pr_item.name, pr_item.amount, pr_item.parent
from `tabPurchase Receipt Item` pr_item, `tabPurchase Receipt` pr from `tabPurchase Receipt Item` pr_item, `tabPurchase Receipt` pr
where pr.name=pr_item.parent and pr_item.prevdoc_detail_docname=%s where pr.name=pr_item.parent and pr_item.purchase_order_item=%s
and pr.docstatus=1 and pr.is_return = 0 and pr.docstatus=1 and pr.is_return = 0
order by pr.posting_date asc, pr.posting_time asc, pr.name asc""", po_detail, as_dict=1) order by pr.posting_date asc, pr.posting_time asc, pr.name asc""", po_detail, as_dict=1)
@ -409,8 +408,8 @@ def make_purchase_invoice(source_name, target_doc=None):
"field_map": { "field_map": {
"name": "pr_detail", "name": "pr_detail",
"parent": "purchase_receipt", "parent": "purchase_receipt",
"prevdoc_detail_docname": "po_detail", "purchase_order_item": "po_detail",
"prevdoc_docname": "purchase_order", "purchase_order": "purchase_order",
}, },
"postprocess": update_item, "postprocess": update_item,
"filter": lambda d: abs(d.qty) - abs(invoiced_qty_map.get(d.name, 0))<=0 "filter": lambda d: abs(d.qty) - abs(invoiced_qty_map.get(d.name, 0))<=0

View File

@ -3,6 +3,7 @@
"allow_import": 0, "allow_import": 0,
"allow_rename": 0, "allow_rename": 0,
"autoname": "hash", "autoname": "hash",
"beta": 0,
"creation": "2013-05-24 19:29:10", "creation": "2013-05-24 19:29:10",
"custom": 0, "custom": 0,
"docstatus": 0, "docstatus": 0,
@ -1077,7 +1078,7 @@
"allow_on_submit": 0, "allow_on_submit": 0,
"bold": 0, "bold": 0,
"collapsible": 0, "collapsible": 0,
"fieldname": "prevdoc_docname", "fieldname": "purchase_order",
"fieldtype": "Link", "fieldtype": "Link",
"hidden": 0, "hidden": 0,
"ignore_user_permissions": 0, "ignore_user_permissions": 0,
@ -1362,40 +1363,14 @@
"allow_on_submit": 0, "allow_on_submit": 0,
"bold": 0, "bold": 0,
"collapsible": 0, "collapsible": 0,
"fieldname": "prevdoc_doctype", "fieldname": "purchase_order_item",
"fieldtype": "Data",
"hidden": 1,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Prevdoc Doctype",
"length": 0,
"no_copy": 1,
"oldfieldname": "prevdoc_doctype",
"oldfieldtype": "Data",
"permlevel": 0,
"print_hide": 1,
"print_hide_if_no_value": 0,
"read_only": 1,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "prevdoc_detail_docname",
"fieldtype": "Data", "fieldtype": "Data",
"hidden": 1, "hidden": 1,
"ignore_user_permissions": 0, "ignore_user_permissions": 0,
"ignore_xss_filter": 0, "ignore_xss_filter": 0,
"in_filter": 1, "in_filter": 1,
"in_list_view": 0, "in_list_view": 0,
"label": "Purchase Order Item No", "label": "Purchase Order Item",
"length": 0, "length": 0,
"no_copy": 1, "no_copy": 1,
"oldfieldname": "prevdoc_detail_docname", "oldfieldname": "prevdoc_detail_docname",
@ -1709,20 +1684,23 @@
"hide_heading": 0, "hide_heading": 0,
"hide_toolbar": 0, "hide_toolbar": 0,
"idx": 1, "idx": 1,
"image_view": 0,
"in_create": 0, "in_create": 0,
"in_dialog": 0, "in_dialog": 0,
"is_submittable": 0, "is_submittable": 0,
"issingle": 0, "issingle": 0,
"istable": 1, "istable": 1,
"max_attachments": 0, "max_attachments": 0,
"modified": "2016-03-18 05:11:15.937267", "modified": "2016-07-04 17:56:02.163486",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Stock", "module": "Stock",
"name": "Purchase Receipt Item", "name": "Purchase Receipt Item",
"owner": "Administrator", "owner": "Administrator",
"permissions": [], "permissions": [],
"quick_entry": 1,
"read_only": 0, "read_only": 0,
"read_only_onload": 0, "read_only_onload": 0,
"sort_field": "modified", "sort_field": "modified",
"sort_order": "DESC" "sort_order": "DESC",
"track_seen": 0
} }