diff --git a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.py b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.py index 580d989158d..924364f73b9 100644 --- a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.py +++ b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.py @@ -6,5 +6,8 @@ import frappe from frappe.model.document import Document +from erpnext.controllers.print_settings import print_settings_for_item_table + class PurchaseInvoiceItem(Document): - pass \ No newline at end of file + def __setup__(self): + print_settings_for_item_table(self) diff --git a/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.py b/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.py index 3fa0f2e0e5a..0400010eec8 100644 --- a/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.py +++ b/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.py @@ -5,6 +5,8 @@ from __future__ import unicode_literals import frappe from frappe.model.document import Document +from erpnext.controllers.print_settings import print_settings_for_item_table class SalesInvoiceItem(Document): - pass \ No newline at end of file + def __setup__(self): + print_settings_for_item_table(self) diff --git a/erpnext/buying/doctype/purchase_order_item/purchase_order_item.py b/erpnext/buying/doctype/purchase_order_item/purchase_order_item.py index 8c7c0a8a473..9129254f3ce 100644 --- a/erpnext/buying/doctype/purchase_order_item/purchase_order_item.py +++ b/erpnext/buying/doctype/purchase_order_item/purchase_order_item.py @@ -6,5 +6,8 @@ import frappe from frappe.model.document import Document +from erpnext.controllers.print_settings import print_settings_for_item_table + class PurchaseOrderItem(Document): - pass \ No newline at end of file + def __setup__(self): + print_settings_for_item_table(self) diff --git a/erpnext/buying/doctype/supplier_quotation_item/supplier_quotation_item.py b/erpnext/buying/doctype/supplier_quotation_item/supplier_quotation_item.py index 16e6e126eb2..b8e690eb932 100644 --- a/erpnext/buying/doctype/supplier_quotation_item/supplier_quotation_item.py +++ b/erpnext/buying/doctype/supplier_quotation_item/supplier_quotation_item.py @@ -6,5 +6,8 @@ import frappe from frappe.model.document import Document +from erpnext.controllers.print_settings import print_settings_for_item_table + class SupplierQuotationItem(Document): - pass \ No newline at end of file + def __setup__(self): + print_settings_for_item_table(self) diff --git a/erpnext/controllers/print_settings.py b/erpnext/controllers/print_settings.py new file mode 100644 index 00000000000..e760f247eb4 --- /dev/null +++ b/erpnext/controllers/print_settings.py @@ -0,0 +1,9 @@ +# Copyright (c) 2015, Web Notes Technologies Pvt. Ltd. and Contributors +# License: GNU General Public License v3. See license.txt + +def print_settings_for_item_table(doc): + doc.print_templates = { + "description": "templates/print_formats/includes/item_table_description.html", + "qty": "templates/print_formats/includes/item_table_qty.html" + } + doc.hide_in_print_layout = ["item_code", "item_name", "image", "uom", "stock_uom"] diff --git a/erpnext/selling/doctype/quotation_item/quotation_item.py b/erpnext/selling/doctype/quotation_item/quotation_item.py index 426b199a360..a204531950b 100644 --- a/erpnext/selling/doctype/quotation_item/quotation_item.py +++ b/erpnext/selling/doctype/quotation_item/quotation_item.py @@ -5,6 +5,8 @@ from __future__ import unicode_literals import frappe from frappe.model.document import Document +from erpnext.controllers.print_settings import print_settings_for_item_table class QuotationItem(Document): - pass \ No newline at end of file + def __setup__(self): + print_settings_for_item_table(self) diff --git a/erpnext/selling/doctype/sales_order_item/sales_order_item.py b/erpnext/selling/doctype/sales_order_item/sales_order_item.py index ef2ad098eca..34eb32f2c79 100644 --- a/erpnext/selling/doctype/sales_order_item/sales_order_item.py +++ b/erpnext/selling/doctype/sales_order_item/sales_order_item.py @@ -5,6 +5,8 @@ from __future__ import unicode_literals import frappe from frappe.model.document import Document +from erpnext.controllers.print_settings import print_settings_for_item_table class SalesOrderItem(Document): - pass \ No newline at end of file + def __setup__(self): + print_settings_for_item_table(self) diff --git a/erpnext/stock/doctype/delivery_note_item/delivery_note_item.py b/erpnext/stock/doctype/delivery_note_item/delivery_note_item.py index 3789cdaffa6..82844acaf64 100644 --- a/erpnext/stock/doctype/delivery_note_item/delivery_note_item.py +++ b/erpnext/stock/doctype/delivery_note_item/delivery_note_item.py @@ -5,6 +5,8 @@ from __future__ import unicode_literals import frappe from frappe.model.document import Document +from erpnext.controllers.print_settings import print_settings_for_item_table class DeliveryNoteItem(Document): - pass \ No newline at end of file + def __setup__(self): + print_settings_for_item_table(self) diff --git a/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.py b/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.py index 35fca0d6c53..21acbed1b53 100644 --- a/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.py +++ b/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.py @@ -5,6 +5,8 @@ from __future__ import unicode_literals import frappe from frappe.model.document import Document +from erpnext.controllers.print_settings import print_settings_for_item_table class PurchaseReceiptItem(Document): - pass \ No newline at end of file + def __setup__(self): + print_settings_for_item_table(self) diff --git a/erpnext/templates/print_formats/includes/item_grid.html b/erpnext/templates/print_formats/includes/item_grid.html deleted file mode 100644 index 1d09f73feca..00000000000 --- a/erpnext/templates/print_formats/includes/item_grid.html +++ /dev/null @@ -1,47 +0,0 @@ -{%- from "templates/print_formats/standard_macros.html" import print_value -%} -{%- set std_fields = ("item_code", "item_name", "description", "qty", "rate", "amount", "stock_uom", "uom") -%} -{%- set visible_columns = get_visible_columns(doc.get(df.fieldname), table_meta) -%} -{%- set hide_rate = data[0].meta.is_print_hide("rate") if data|length else False-%} -{%- set hide_amount = data[0].meta.is_print_hide("amount") if data|length else False-%} - - - - - - - - {% if not hide_rate -%}{%- endif %} - {% if not hide_amount -%}{%- endif %} - - {%- for row in data -%} - - - - - {% if not hide_rate -%}{%- endif %} - {% if not hide_amount -%}{%- endif %} - - {%- endfor -%} - -
{{ _("Sr") }}{{ _("Item") }}{{ _("Qty") }}{{ _("Rate") }}{{ _("Amount") }}
{{ row.idx }} - {% if not row.meta.is_print_hide("item_code") -%} -
{{ row.item_code }}
- {%- endif %} - {% if (not row.meta.is_print_hide("item_name") and - (row.meta.is_print_hide("item_code") or row.item_code != row.item_name)) -%} -
{{ row.get_formatted("item_name") }}
- {%- endif %} - {% if (not row.meta.is_print_hide("description") and row.description and - ((row.meta.is_print_hide("item_code") and row.meta.is_print_hide("item_name")) - or not (row.item_code == row.item_name == row.description))) -%} -

{{ row.get_formatted("description") }}

- {%- endif %} - {%- for field in visible_columns -%} - {%- if (field.fieldname not in std_fields) and - (row[field.fieldname] not in (None, "", 0)) -%} -
{{ _(field.label) }}: - {{ row.get_formatted(field.fieldname, doc) }}
- {%- endif -%} - {%- endfor -%} -
{{ row.get_formatted("qty", doc) }}
- {{ row.uom or row.stock_uom }}
{{ row.get_formatted("rate", doc) }}{{ row.get_formatted("amount", doc) }}
diff --git a/erpnext/templates/print_formats/includes/item_table_description.html b/erpnext/templates/print_formats/includes/item_table_description.html new file mode 100644 index 00000000000..39fe75eaa4a --- /dev/null +++ b/erpnext/templates/print_formats/includes/item_table_description.html @@ -0,0 +1,19 @@ +{% if doc.in_format_data("image") and doc.get("image") -%} +
+ +
+{%- endif %} +
+ {% if doc.in_format_data("item_code") -%} +
{{ doc.item_code }}
+ {%- endif %} + {% if (doc.in_format_data("item_name") and + (not doc.in_format_data("item_code") or doc.item_code != doc.item_name)) -%} +
{{ doc.get_formatted("item_name") }}
+ {%- endif %} + {% if (doc.in_format_data("description") and doc.description and + ((not doc.in_format_data("item_code") and not doc.in_format_data("item_name")) + or not (doc.item_code == doc.item_name == doc.description))) -%} +

{{ doc.get_formatted("description") }}

+ {%- endif %} +
diff --git a/erpnext/templates/print_formats/includes/item_table_qty.html b/erpnext/templates/print_formats/includes/item_table_qty.html new file mode 100644 index 00000000000..4ce3c3333b3 --- /dev/null +++ b/erpnext/templates/print_formats/includes/item_table_qty.html @@ -0,0 +1,2 @@ +{{ doc.get_formatted("qty", doc) }}
+{{ doc.uom or doc.stock_uom }} diff --git a/erpnext/utilities/doctype/contact/contact.py b/erpnext/utilities/doctype/contact/contact.py index 999ff689193..4b960da84dc 100644 --- a/erpnext/utilities/doctype/contact/contact.py +++ b/erpnext/utilities/doctype/contact/contact.py @@ -11,15 +11,15 @@ class Contact(StatusUpdater): def autoname(self): # concat first and last name - self.name = " ".join(filter(None, + self.name = " ".join(filter(None, [cstr(self.get(f)).strip() for f in ["first_name", "last_name"]])) - + # concat party name if reqd for fieldname in ("customer", "supplier", "sales_partner"): if self.get(fieldname): self.name = self.name + "-" + cstr(self.get(fieldname)).strip() break - + def validate(self): self.set_status() self.validate_primary_contact() @@ -27,13 +27,13 @@ class Contact(StatusUpdater): def validate_primary_contact(self): if self.is_primary_contact == 1: if self.customer: - frappe.db.sql("update tabContact set is_primary_contact=0 where customer = %s", + frappe.db.sql("update tabContact set is_primary_contact=0 where customer = %s", (self.customer)) elif self.supplier: - frappe.db.sql("update tabContact set is_primary_contact=0 where supplier = %s", - (self.supplier)) + frappe.db.sql("update tabContact set is_primary_contact=0 where supplier = %s", + (self.supplier)) elif self.sales_partner: - frappe.db.sql("""update tabContact set is_primary_contact=0 + frappe.db.sql("""update tabContact set is_primary_contact=0 where sales_partner = %s""", (self.sales_partner)) else: if self.customer: @@ -46,7 +46,7 @@ class Contact(StatusUpdater): self.is_primary_contact = 1 elif self.sales_partner: if not frappe.db.sql("select name from tabContact \ - where is_primary_contact=1 and sales_partner = %s", + where is_primary_contact=1 and sales_partner = %s", self.sales_partner): self.is_primary_contact = 1 @@ -59,7 +59,7 @@ def get_contact_details(contact): contact = frappe.get_doc("Contact", contact) out = { "contact_person": contact.get("name"), - "contact_display": " ".join(filter(None, + "contact_display": " ".join(filter(None, [contact.get("first_name"), contact.get("last_name")])), "contact_email": contact.get("email_id"), "contact_mobile": contact.get("mobile_no"), @@ -67,5 +67,5 @@ def get_contact_details(contact): "contact_designation": contact.get("designation"), "contact_department": contact.get("department") } - - return out \ No newline at end of file + + return out