From d36cb5c812bfad37403354b557880bc2fd34303d Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 3 Apr 2014 12:38:42 +0530 Subject: [PATCH] frappe/frappe#478 removed more instances of doclist --- .../doctype/sales_invoice/sales_invoice.py | 2 +- erpnext/accounts/party.py | 2 +- erpnext/controllers/selling_controller.py | 2 +- .../doctype/delivery_note/delivery_note.py | 18 ++-- .../landed_cost_wizard/landed_cost_wizard.py | 7 +- .../material_request/material_request.py | 43 ++++----- erpnext/stock/doctype/serial_no/serial_no.py | 2 +- .../stock/doctype/stock_entry/stock_entry.py | 87 +++++++++---------- erpnext/stock/get_item_details.py | 6 +- 9 files changed, 82 insertions(+), 87 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index ef17f66851..e9e9869864 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -736,7 +736,7 @@ def send_notification(new_rv): from frappe.core.doctype.print_format.print_format import get_html frappe.sendmail(new_rv.notification_email_address, subject="New Invoice : " + new_rv.name, - message = get_html(new_rv.doc, new_rv.doclist, "SalesInvoice")) + message = get_html(new_rv.doc, new_rv, "SalesInvoice")) def notify_errors(inv, customer, owner): from frappe.utils.user import get_system_managers diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py index 7804734d25..e86d6a9edb 100644 --- a/erpnext/accounts/party.py +++ b/erpnext/accounts/party.py @@ -41,7 +41,7 @@ def _get_party_details(party=None, account=None, party_type="Customer", company= out["sales_team"] = [{ "sales_person": d.sales_person, "sales_designation": d.sales_designation - } for d in party_bean.doclist.get({"doctype":"Sales Team"})] + } for d in party_bean.get("sales_team")] return out diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index f2e1c08c1d..77b62caf8a 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -370,7 +370,7 @@ class SellingController(StockController): d.get(ref_fieldname)) def check_active_sales_items(obj): - for d in obj.doclist.get({"parentfield": obj.fname}): + for d in obj.get(obj.fname): if d.item_code: item = frappe.db.sql("""select docstatus, is_sales_item, is_service_item, income_account from tabItem where name = %s""", diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py index 59ce41f9dc..9b3095dd1d 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/delivery_note.py @@ -289,20 +289,15 @@ def make_sales_invoice(source_name, target_doc=None): si = frappe.get_doc(target) si.is_pos = 0 si.run_method("onload_post_render") - - si.set_doclist(si.doclist.get({"parentfield": ["!=", "entries"]}) + - si.doclist.get({"parentfield": "entries", "qty": [">", 0]})) - - if len(si.get("entries")) == 0: - frappe.msgprint(_("Hey! All these items have already been invoiced."), - raise_exception=True) - return si.doclist + if len(si.get("entries")) == 0: + frappe.msgprint(_("All these items have already been invoiced."), + raise_exception=True) def update_item(source_doc, target_doc, source_parent): target_doc.qty = source_doc.qty - invoiced_qty_map.get(source_doc.name, 0) - doclist = get_mapped_doc("Delivery Note", source_name, { + doc = get_mapped_doc("Delivery Note", source_name, { "Delivery Note": { "doctype": "Sales Invoice", "validation": { @@ -318,7 +313,8 @@ def make_sales_invoice(source_name, target_doc=None): "against_sales_order": "sales_order", "serial_no": "serial_no" }, - "postprocess": update_item + "postprocess": update_item, + "filter": lambda d: d.qty - invoiced_qty_map.get(d.name, 0)==0 }, "Sales Taxes and Charges": { "doctype": "Sales Taxes and Charges", @@ -333,7 +329,7 @@ def make_sales_invoice(source_name, target_doc=None): } }, target_doc, update_accounts) - return doclist.as_dict() + return doc.as_dict() @frappe.whitelist() def make_installation_note(source_name, target_doc=None): diff --git a/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py b/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py index 3850cec385..968969d267 100644 --- a/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py +++ b/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py @@ -40,8 +40,7 @@ class LandedCostWizard(Document): for lc in self.get("landed_cost_details"): amt = flt(lc.amount) * flt(pr_bean.net_total)/ flt(total_amt) - matched_row = pr_bean.doclist.get({ - "parentfield": "other_charges", + matched_row = pr_bean.get("other_charges", { "category": "Valuation", "add_deduct_tax": "Add", "charge_type": "Actual", @@ -66,8 +65,8 @@ class LandedCostWizard(Document): matched_row[0].cost_center = lc.cost_center pr_bean.run_method("validate") - for d in pr_bean.doclist: - d.save() + for d in pr_bean.get_all_children(): + d.db_update() def get_total_pr_amt(self, purchase_receipts): return frappe.db.sql("""SELECT SUM(net_total) FROM `tabPurchase Receipt` diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py index 312a5a371b..296dda9714 100644 --- a/erpnext/stock/doctype/material_request/material_request.py +++ b/erpnext/stock/doctype/material_request/material_request.py @@ -191,29 +191,32 @@ def _update_requested_qty(bean, mr_obj, mr_items): """update requested qty (before ordered_qty is updated)""" from erpnext.stock.utils import update_bin for mr_item_name in mr_items: - mr_item = mr_obj.doclist.getone({"parentfield": "indent_details", "name": mr_item_name}) - se_detail = bean.doclist.getone({"parentfield": "mtn_details", - "material_request": mr_obj.name, "material_request_item": mr_item_name}) + mr_item = mr_obj.get("indent_details", {"name": mr_item_name}) + se_detail = bean.get("mtn_details", {"material_request": mr_obj.name, + "material_request_item": mr_item_name}) - mr_item.ordered_qty = flt(mr_item.ordered_qty) - mr_item.qty = flt(mr_item.qty) - se_detail.transfer_qty = flt(se_detail.transfer_qty) + if mr_item and se_detail: + mr_item = mr_item[0] + se_detail = se_detail[0] + mr_item.ordered_qty = flt(mr_item.ordered_qty) + mr_item.qty = flt(mr_item.qty) + se_detail.transfer_qty = flt(se_detail.transfer_qty) - if se_detail.docstatus == 2 and mr_item.ordered_qty > mr_item.qty \ - and se_detail.transfer_qty == mr_item.ordered_qty: - add_indented_qty = mr_item.qty - elif se_detail.docstatus == 1 and \ - mr_item.ordered_qty + se_detail.transfer_qty > mr_item.qty: - add_indented_qty = mr_item.qty - mr_item.ordered_qty - else: - add_indented_qty = se_detail.transfer_qty + if se_detail.docstatus == 2 and mr_item.ordered_qty > mr_item.qty \ + and se_detail.transfer_qty == mr_item.ordered_qty: + add_indented_qty = mr_item.qty + elif se_detail.docstatus == 1 and \ + mr_item.ordered_qty + se_detail.transfer_qty > mr_item.qty: + add_indented_qty = mr_item.qty - mr_item.ordered_qty + else: + add_indented_qty = se_detail.transfer_qty - update_bin({ - "item_code": se_detail.item_code, - "warehouse": se_detail.t_warehouse, - "indented_qty": (se_detail.docstatus==2 and 1 or -1) * add_indented_qty, - "posting_date": bean.posting_date, - }) + update_bin({ + "item_code": se_detail.item_code, + "warehouse": se_detail.t_warehouse, + "indented_qty": (se_detail.docstatus==2 and 1 or -1) * add_indented_qty, + "posting_date": bean.posting_date, + }) def set_missing_values(source, target_doc): po = frappe.get_doc(target_doc) diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py index 7f4c4380b5..cab1424cba 100644 --- a/erpnext/stock/doctype/serial_no/serial_no.py +++ b/erpnext/stock/doctype/serial_no/serial_no.py @@ -299,7 +299,7 @@ def update_serial_nos_after_submit(controller, parentfield): if not stock_ledger_entries: return - for d in controller.doclist.get({"parentfield": parentfield}): + for d in controller.get(parentfield): serial_no = None for sle in stock_ledger_entries: if sle.voucher_detail_no==d.name: diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index 1bcceaf01c..8841b96e88 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -241,23 +241,23 @@ class StockEntry(StockController): def validate_return_reference_doc(self): """validate item with reference doc""" - ref = get_return_doclist_and_details(self.fields) + ref = get_return_doc_and_details(self) - if ref.doclist: + if ref.doc: # validate docstatus - if ref.doclist[0].docstatus != 1: - frappe.msgprint(_(ref.doclist[0].doctype) + ' "' + ref.doclist[0].name + '": ' + if ref.doc.docstatus != 1: + frappe.msgprint(_(ref.doc.doctype) + ' "' + ref.doc.name + '": ' + _("Status should be Submitted"), raise_exception=frappe.InvalidStatusError) # update stock check - if ref.doclist[0].doctype == "Sales Invoice" and cint(ref.doclist[0].update_stock) != 1: - frappe.msgprint(_(ref.doclist[0].doctype) + ' "' + ref.doclist[0].name + '": ' + if ref.doc.doctype == "Sales Invoice" and cint(ref.doc.update_stock) != 1: + frappe.msgprint(_(ref.doc.doctype) + ' "' + ref.doc.name + '": ' + _("Update Stock should be checked."), raise_exception=NotUpdateStockError) # posting date check - ref_posting_datetime = "%s %s" % (cstr(ref.doclist[0].posting_date), - cstr(ref.doclist[0].posting_time) or "00:00:00") + ref_posting_datetime = "%s %s" % (cstr(ref.doc.posting_date), + cstr(ref.doc.posting_time) or "00:00:00") this_posting_datetime = "%s %s" % (cstr(self.posting_date), cstr(self.posting_time)) if this_posting_datetime < ref_posting_datetime: @@ -266,18 +266,18 @@ class StockEntry(StockController): + ": " + datetime_in_user_format(ref_posting_datetime), raise_exception=True) - stock_items = get_stock_items_for_return(ref.doclist, ref.parentfields) + stock_items = get_stock_items_for_return(ref.doc, ref.parentfields) already_returned_item_qty = self.get_already_returned_item_qty(ref.fieldname) for item in self.get("mtn_details"): - # validate if item exists in the ref doclist and that it is a stock item + # validate if item exists in the ref doc and that it is a stock item if item.item_code not in stock_items: msgprint(_("Item") + ': "' + item.item_code + _("\" does not exist in ") + - ref.doclist[0].doctype + ": " + ref.doclist[0].name, + ref.doc.doctype + ": " + ref.doc.name, raise_exception=frappe.DoesNotExistError) # validate quantity <= ref item's qty - qty already returned - ref_item = ref.doclist.getone({"item_code": item.item_code}) + ref_item = ref.getone({"item_code": item.item_code}) returnable_qty = ref_item.qty - flt(already_returned_item_qty.get(item.item_code)) if not returnable_qty: frappe.throw("{item}: {item_code} {returned}".format( @@ -638,13 +638,13 @@ def query_purchase_return_doc(doctype, txt, searchfield, start, page_len, filter def query_return_item(doctype, txt, searchfield, start, page_len, filters): txt = txt.replace("%", "") - ref = get_return_doclist_and_details(filters) + ref = get_return_doc_and_details(filters) - stock_items = get_stock_items_for_return(ref.doclist, ref.parentfields) + stock_items = get_stock_items_for_return(ref.doc, ref.parentfields) result = [] - for item in ref.doclist.get({"parentfield": ["in", ref.parentfields]}): - if item.item_code in stock_items: + for item in ref.doc.get_all_children(): + if getattr(item, "item_code", None) in stock_items: item.item_name = cstr(item.item_name) item.description = cstr(item.description) if (txt in item.item_code) or (txt in item.item_name) or (txt in item.description): @@ -704,28 +704,28 @@ def get_batch_no(doctype, txt, searchfield, start, page_len, filters): limit %(start)s, %(page_len)s """ % args) -def get_stock_items_for_return(ref_doclist, parentfields): - """return item codes filtered from doclist, which are stock items""" +def get_stock_items_for_return(ref_doc, parentfields): + """return item codes filtered from doc, which are stock items""" if isinstance(parentfields, basestring): parentfields = [parentfields] all_items = list(set([d.item_code for d in - ref_doclist.get({"parentfield": ["in", parentfields]})])) + ref_doc.get_all_children() if d.item_code])) stock_items = frappe.db.sql_list("""select name from `tabItem` where is_stock_item='Yes' and name in (%s)""" % (", ".join(["%s"] * len(all_items))), tuple(all_items)) return stock_items -def get_return_doclist_and_details(args): +def get_return_doc_and_details(args): ref = frappe._dict() - # get ref_doclist + # get ref_doc if args["purpose"] in return_map: for fieldname, val in return_map[args["purpose"]].items(): if args.get(fieldname): ref.fieldname = fieldname - ref.doclist = frappe.get_doclist(val[0], args[fieldname]) + ref.doc = frappe.get_doc(val[0], args[fieldname]) ref.parentfields = val[1] break @@ -748,16 +748,16 @@ def make_return_jv(stock_entry): if not se.purpose in ["Sales Return", "Purchase Return"]: return - ref = get_return_doclist_and_details(se.fields) + ref = get_return_doc_and_details(se.fields) - if ref.doclist[0].doctype == "Delivery Note": + if ref.doc.doctype == "Delivery Note": result = make_return_jv_from_delivery_note(se, ref) - elif ref.doclist[0].doctype == "Sales Invoice": + elif ref.doc.doctype == "Sales Invoice": result = make_return_jv_from_sales_invoice(se, ref) - elif ref.doclist[0].doctype == "Purchase Receipt": + elif ref.doc.doctype == "Purchase Receipt": result = make_return_jv_from_purchase_receipt(se, ref) - # create jv doclist and fetch balance for each unique row item + # create jv doc and fetch balance for each unique row item jv_list = [{ "__islocal": 1, "doctype": "Journal Voucher", @@ -785,28 +785,28 @@ def make_return_jv(stock_entry): def make_return_jv_from_sales_invoice(se, ref): # customer account entry parent = { - "account": ref.doclist[0].debit_to, - "against_invoice": ref.doclist[0].name, + "account": ref.doc.debit_to, + "against_invoice": ref.doc.name, } # income account entries children = [] for se_item in se.get("mtn_details"): - # find item in ref.doclist - ref_item = ref.doclist.getone({"item_code": se_item.item_code}) + # find item in ref.doc + ref_item = ref.doc.get({"item_code": se_item.item_code})[0] - account = get_sales_account_from_item(ref.doclist, ref_item) + account = get_sales_account_from_item(ref.doc, ref_item) if account not in children: children.append(account) return [parent] + [{"account": account} for account in children] -def get_sales_account_from_item(doclist, ref_item): +def get_sales_account_from_item(doc, ref_item): account = None if not ref_item.income_account: if ref_item.parent_item: - parent_item = doclist.getone({"item_code": ref_item.parent_item}) + parent_item = doc.get({"item_code": ref_item.parent_item})[0] account = parent_item.income_account else: account = ref_item.income_account @@ -815,10 +815,10 @@ def get_sales_account_from_item(doclist, ref_item): def make_return_jv_from_delivery_note(se, ref): invoices_against_delivery = get_invoice_list("Sales Invoice Item", "delivery_note", - ref.doclist[0].name) + ref.doc.name) if not invoices_against_delivery: - sales_orders_against_delivery = [d.against_sales_order for d in ref.doclist if d.against_sales_order] + sales_orders_against_delivery = [d.against_sales_order for d in ref.doc.get_all_children() if d.against_sales_order] if sales_orders_against_delivery: invoices_against_delivery = get_invoice_list("Sales Invoice Item", "sales_order", @@ -827,8 +827,7 @@ def make_return_jv_from_delivery_note(se, ref): if not invoices_against_delivery: return [] - packing_item_parent_map = dict([[d.item_code, d.parent_item] for d in ref.doclist.get( - {"parentfield": ref.parentfields[1]})]) + packing_item_parent_map = dict([[d.item_code, d.parent_item] for d in ref.doc.get(ref.parentfields[1])]) parent = {} children = [] @@ -838,16 +837,16 @@ def make_return_jv_from_delivery_note(se, ref): si = frappe.get_doc("Sales Invoice", sales_invoice) if se_item.item_code in packing_item_parent_map: - ref_item = si.doclist.get({"item_code": packing_item_parent_map[se_item.item_code]}) + ref_item = si.get({"item_code": packing_item_parent_map[se_item.item_code]}) else: - ref_item = si.doclist.get({"item_code": se_item.item_code}) + ref_item = si.get({"item_code": se_item.item_code}) if not ref_item: continue ref_item = ref_item[0] - account = get_sales_account_from_item(si.doclist, ref_item) + account = get_sales_account_from_item(si, ref_item) if account not in children: children.append(account) @@ -874,11 +873,11 @@ def get_invoice_list(doctype, link_field, value): def make_return_jv_from_purchase_receipt(se, ref): invoice_against_receipt = get_invoice_list("Purchase Invoice Item", "purchase_receipt", - ref.doclist[0].name) + ref.doc.name) if not invoice_against_receipt: purchase_orders_against_receipt = [d.prevdoc_docname for d in - ref.doclist.get({"prevdoc_doctype": "Purchase Order"}) if d.prevdoc_docname] + ref.get({"prevdoc_doctype": "Purchase Order"}) if d.prevdoc_docname] if purchase_orders_against_receipt: invoice_against_receipt = get_invoice_list("Purchase Invoice Item", "purchase_order", @@ -893,7 +892,7 @@ def make_return_jv_from_purchase_receipt(se, ref): for se_item in se.get("mtn_details"): for purchase_invoice in invoice_against_receipt: pi = frappe.get_doc("Purchase Invoice", purchase_invoice) - ref_item = pi.doclist.get({"item_code": se_item.item_code}) + ref_item = pi.get({"item_code": se_item.item_code}) if not ref_item: continue diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index 57b2c2eda5..ed23cf7595 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -209,12 +209,10 @@ def validate_conversion_rate(args, meta): def get_party_item_code(args, item_bean, out): if args.transaction_type == "selling": - customer_item_code = item_bean.doclist.get({"parentfield": "item_customer_details", - "customer_name": args.customer}) + customer_item_code = item_bean.get("item_customer_details", {"customer_name": args.customer}) out.customer_item_code = customer_item_code[0].ref_code if customer_item_code else None else: - item_supplier = item_bean.doclist.get({"parentfield": "item_supplier_details", - "supplier": args.supplier}) + item_supplier = item_bean.get({"item_supplier_details", {"supplier": args.supplier}) out.supplier_part_no = item_supplier[0].supplier_part_no if item_supplier else None