diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js index c38645067c2..ef233c67995 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js @@ -325,23 +325,6 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte } this.frm.refresh_fields(); - }, - - company_address: function() { - var me = this; - if(this.frm.doc.company_address) { - frappe.call({ - method: "frappe.contacts.doctype.address.address.get_address_display", - args: {"address_dict": this.frm.doc.company_address }, - callback: function(r) { - if(r.message) { - me.frm.set_value("company_address_display", r.message) - } - } - }) - } else { - this.frm.set_value("company_address_display", ""); - } } }); diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py index 5cb04c5eb65..ba7ae323d46 100644 --- a/erpnext/accounts/party.py +++ b/erpnext/accounts/party.py @@ -79,7 +79,7 @@ def set_address_details(out, party, party_type, doctype=None, company=None): out.shipping_address = get_address_display(out["shipping_address_name"]) out.update(get_fetch_values(doctype, 'shipping_address_name', out.shipping_address_name)) - if doctype and doctype in ['Sales Invoice']: + if doctype and doctype in ['Delivery Note', 'Sales Invoice']: out.update(get_company_address(company)) if out.company_address: out.update(get_fetch_values(doctype, 'company_address', out.company_address)) diff --git a/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py b/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py index 10862f5e2ec..8f9948e41c5 100644 --- a/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py +++ b/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py @@ -47,7 +47,7 @@ def _execute(filters=None, additional_table_columns=None, additional_query_colum row += [ d.credit_to, d.mode_of_payment, d.project, d.company, d.purchase_order, - purchase_receipt, expense_account, d.qty, d.base_net_rate, d.base_net_amount + purchase_receipt, expense_account, d.qty, d.stock_uom, d.base_net_rate, d.base_net_amount ] total_tax = 0 @@ -79,7 +79,8 @@ def get_columns(additional_table_columns): _("Mode of Payment") + ":Link/Mode of Payment:80", _("Project") + ":Link/Project:80", _("Company") + ":Link/Company:100", _("Purchase Order") + ":Link/Purchase Order:100", _("Purchase Receipt") + ":Link/Purchase Receipt:100", _("Expense Account") + ":Link/Account:140", - _("Qty") + ":Float:120", _("Rate") + ":Currency/currency:120", _("Amount") + ":Currency/currency:120" + _("Qty") + ":Float:120", _("Stock UOM") + "::100", + _("Rate") + ":Currency/currency:120", _("Amount") + ":Currency/currency:120" ] return columns @@ -109,8 +110,9 @@ def get_items(filters, additional_query_columns): pi_item.name, pi_item.parent, pi.posting_date, pi.credit_to, pi.company, pi.supplier, pi.remarks, pi.base_net_total, pi_item.item_code, pi_item.item_name, pi_item.item_group, pi_item.project, pi_item.purchase_order, pi_item.purchase_receipt, - pi_item.po_detail, pi_item.expense_account, pi_item.qty, pi_item.base_net_rate, - pi_item.base_net_amount, pi.supplier_name, pi.mode_of_payment {0} + pi_item.po_detail, pi_item.expense_account, pi_item.qty, pi_item.stock_uom, + pi_item.base_net_rate, pi_item.base_net_amount, + pi.supplier_name, pi.mode_of_payment {0} from `tabPurchase Invoice` pi, `tabPurchase Invoice Item` pi_item where pi.name = pi_item.parent and pi.docstatus = 1 %s %s order by pi.posting_date desc, pi_item.item_code desc diff --git a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py index 37707cd4029..30c545f58c0 100644 --- a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py +++ b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py @@ -47,7 +47,8 @@ def _execute(filters=None, additional_table_columns=None, additional_query_colum row += [ d.customer_group, d.debit_to, ", ".join(mode_of_payments.get(d.parent, [])), d.territory, d.project, d.company, d.sales_order, - delivery_note, d.income_account, d.cost_center, d.qty, d.base_net_rate, d.base_net_amount + delivery_note, d.income_account, d.cost_center, d.qty, d.stock_uom, + d.base_net_rate, d.base_net_amount ] total_tax = 0 @@ -79,7 +80,7 @@ def get_columns(additional_table_columns): _("Project") + ":Link/Project:80", _("Company") + ":Link/Company:100", _("Sales Order") + ":Link/Sales Order:100", _("Delivery Note") + ":Link/Delivery Note:100", _("Income Account") + ":Link/Account:140", _("Cost Center") + ":Link/Cost Center:140", - _("Qty") + ":Float:120", + _("Qty") + ":Float:120", _("Stock UOM") + "::100", _("Rate") + ":Currency/currency:120", _("Amount") + ":Currency/currency:120" ] @@ -114,9 +115,9 @@ def get_items(filters, additional_query_columns): si_item.name, si_item.parent, si.posting_date, si.debit_to, si.project, si.customer, si.remarks, si.territory, si.company, si.base_net_total, si_item.item_code, si_item.item_name, si_item.item_group, si_item.sales_order, - si_item.delivery_note, si_item.income_account, si_item.cost_center, si_item.qty, - si_item.base_net_rate, si_item.base_net_amount, si.customer_name, - si.customer_group, si_item.so_detail, si.update_stock {0} + si_item.delivery_note, si_item.income_account, si_item.cost_center, + si_item.qty, si_item.stock_uom, si_item.base_net_rate, si_item.base_net_amount, + si.customer_name, si.customer_group, si_item.so_detail, si.update_stock {0} from `tabSales Invoice` si, `tabSales Invoice Item` si_item where si.name = si_item.parent and si.docstatus = 1 %s order by si.posting_date desc, si_item.item_code desc diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 6b660e1e6df..d781ec788f5 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -431,4 +431,5 @@ erpnext.patches.v8_5.set_default_mode_of_payment erpnext.patches.v8_5.update_customer_group_in_POS_profile erpnext.patches.v8_6.update_timesheet_company_from_PO erpnext.patches.v8_6.set_write_permission_for_quotation_for_sales_manager -erpnext.patches.v8_5.remove_project_type_property_setter \ No newline at end of file +erpnext.patches.v8_5.remove_project_type_property_setter +erpnext.patches.v8_7.add_more_gst_fields \ No newline at end of file diff --git a/erpnext/patches/v8_7/__init__.py b/erpnext/patches/v8_7/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/patches/v8_7/add_more_gst_fields.py b/erpnext/patches/v8_7/add_more_gst_fields.py new file mode 100644 index 00000000000..a1512ed9b77 --- /dev/null +++ b/erpnext/patches/v8_7/add_more_gst_fields.py @@ -0,0 +1,9 @@ +import frappe +from erpnext.regional.india.setup import make_custom_fields + +def execute(): + company = frappe.get_all('Company', filters = {'country': 'India'}) + if not company: + return + + make_custom_fields() \ No newline at end of file diff --git a/erpnext/regional/india/setup.py b/erpnext/regional/india/setup.py index 7a7e937ea45..0c59ba003a8 100644 --- a/erpnext/regional/india/setup.py +++ b/erpnext/regional/india/setup.py @@ -81,6 +81,47 @@ def add_print_formats(): def make_custom_fields(): hsn_sac_field = dict(fieldname='gst_hsn_code', label='HSN/SAC', fieldtype='Data', options='item_code.gst_hsn_code', insert_after='description', print_hide=1) + invoice_gst_fields = [ + dict(fieldname='gst_section', label='GST Details', fieldtype='Section Break', + insert_after='select_print_heading', print_hide=1, collapsible=1), + dict(fieldname='invoice_copy', label='Invoice Copy', + fieldtype='Select', insert_after='gst_section', print_hide=1, allow_on_submit=1, + options='Original for Recipient\nDuplicate for Transporter\nDuplicate for Supplier\nTriplicate for Supplier'), + dict(fieldname='reverse_charge', label='Reverse Charge', + fieldtype='Select', insert_after='invoice_copy', print_hide=1, + options='Y\nN', default='N'), + dict(fieldname='gst_col_break', fieldtype='Column Break', insert_after='reverse_charge'), + dict(fieldname='invoice_type', label='Invoice Type', + fieldtype='Select', insert_after='reverse_charge', print_hide=1, + options='Regular\nSEZ\nExport\nDeemed Export', default='Regular'), + dict(fieldname='export_type', label='Export Type', + fieldtype='Select', insert_after='invoice_type', print_hide=1, + depends_on='eval:in_list(["SEZ", "Export", "Deemed Export"], doc.invoice_type)', + options='\nWith Payment of Tax\nWithout Payment of Tax'), + dict(fieldname='ecommerce_gstin', label='E-commerce GSTIN', + fieldtype='Data', insert_after='export_type', print_hide=1) + ] + + purchase_invoice_gst_fields = [ + dict(fieldname='supplier_gstin', label='Supplier GSTIN', + fieldtype='Data', insert_after='supplier_address', + options='supplier_address.gstin', print_hide=1), + dict(fieldname='company_gstin', label='Company GSTIN', + fieldtype='Data', insert_after='shipping_address', + options='shipping_address.gstin', print_hide=1) + ] + + sales_invoice_gst_fields = [ + dict(fieldname='customer_gstin', label='Customer GSTIN', + fieldtype='Data', insert_after='shipping_address', + options='shipping_address_name.gstin', print_hide=1), + dict(fieldname='place_of_supply', label='Place of Supply', + fieldtype='Data', insert_after='customer_gstin', print_hide=1, + options='shipping_address_name.gst_state_number', read_only=1), + dict(fieldname='company_gstin', label='Company GSTIN', + fieldtype='Data', insert_after='company_address', + options='company_address.gstin', print_hide=1) + ] custom_fields = { 'Address': [ @@ -91,25 +132,9 @@ def make_custom_fields(): dict(fieldname='gst_state_number', label='GST State Number', fieldtype='Int', insert_after='gst_state', read_only=1), ], - 'Purchase Invoice': [ - dict(fieldname='supplier_gstin', label='Supplier GSTIN', - fieldtype='Data', insert_after='supplier_address', - options='supplier_address.gstin', print_hide=1), - dict(fieldname='company_gstin', label='Company GSTIN', - fieldtype='Data', insert_after='shipping_address', - options='shipping_address.gstin', print_hide=1), - ], - 'Sales Invoice': [ - dict(fieldname='customer_gstin', label='Customer GSTIN', - fieldtype='Data', insert_after='shipping_address', - options='shipping_address_name.gstin', print_hide=1), - dict(fieldname='company_gstin', label='Company GSTIN', - fieldtype='Data', insert_after='company_address', - options='company_address.gstin', print_hide=1), - dict(fieldname='invoice_copy', label='Invoice Copy', - fieldtype='Select', insert_after='select_print_heading', print_hide=1, allow_on_submit=1, - options='Original for Recipient\nDuplicate for Transporter\nDuplicate for Supplier\nTriplicate for Supplier') - ], + 'Purchase Invoice': purchase_invoice_gst_fields + invoice_gst_fields, + 'Sales Invoice': sales_invoice_gst_fields + invoice_gst_fields, + "Delivery Note": sales_invoice_gst_fields, 'Item': [ dict(fieldname='gst_hsn_code', label='HSN/SAC', fieldtype='Link', options='GST HSN Code', insert_after='item_group'), diff --git a/erpnext/regional/report/gst_itemised_purchase_register/gst_itemised_purchase_register.py b/erpnext/regional/report/gst_itemised_purchase_register/gst_itemised_purchase_register.py index d88febcf333..1d94c97ed26 100644 --- a/erpnext/regional/report/gst_itemised_purchase_register/gst_itemised_purchase_register.py +++ b/erpnext/regional/report/gst_itemised_purchase_register/gst_itemised_purchase_register.py @@ -9,9 +9,17 @@ def execute(filters=None): return _execute(filters, additional_table_columns=[ dict(fieldtype='Data', label='Supplier GSTIN', width=120), dict(fieldtype='Data', label='Company GSTIN', width=120), + dict(fieldtype='Data', label='Reverse Charge', width=120), + dict(fieldtype='Data', label='Invoice Type', width=120), + dict(fieldtype='Data', label='Export Type', width=120), + dict(fieldtype='Data', label='E-Commerce GSTIN', width=130), dict(fieldtype='Data', label='HSN Code', width=120) ], additional_query_columns=[ 'supplier_gstin', 'company_gstin', + 'reverse_charge', + 'invoice_type', + 'export_type', + 'ecommerce_gstin', 'gst_hsn_code' ]) diff --git a/erpnext/regional/report/gst_itemised_sales_register/gst_itemised_sales_register.py b/erpnext/regional/report/gst_itemised_sales_register/gst_itemised_sales_register.py index 14ddff37539..40bbae8b555 100644 --- a/erpnext/regional/report/gst_itemised_sales_register/gst_itemised_sales_register.py +++ b/erpnext/regional/report/gst_itemised_sales_register/gst_itemised_sales_register.py @@ -9,9 +9,19 @@ def execute(filters=None): return _execute(filters, additional_table_columns=[ dict(fieldtype='Data', label='Customer GSTIN', width=120), dict(fieldtype='Data', label='Company GSTIN', width=120), + dict(fieldtype='Data', label='Place of Supply', width=120), + dict(fieldtype='Data', label='Reverse Charge', width=120), + dict(fieldtype='Data', label='Invoice Type', width=120), + dict(fieldtype='Data', label='Export Type', width=120), + dict(fieldtype='Data', label='E-Commerce GSTIN', width=130), dict(fieldtype='Data', label='HSN Code', width=120) ], additional_query_columns=[ 'customer_gstin', 'company_gstin', + 'place_of_supply', + 'reverse_charge', + 'invoice_type', + 'export_type', + 'ecommerce_gstin', 'gst_hsn_code' ]) diff --git a/erpnext/regional/report/gst_purchase_register/gst_purchase_register.py b/erpnext/regional/report/gst_purchase_register/gst_purchase_register.py index 59687d00866..8d479a96cd7 100644 --- a/erpnext/regional/report/gst_purchase_register/gst_purchase_register.py +++ b/erpnext/regional/report/gst_purchase_register/gst_purchase_register.py @@ -8,9 +8,17 @@ from erpnext.accounts.report.purchase_register.purchase_register import _execute def execute(filters=None): return _execute(filters, additional_table_columns=[ dict(fieldtype='Data', label='Supplier GSTIN', width=120), - dict(fieldtype='Data', label='Company GSTIN', width=120) + dict(fieldtype='Data', label='Company GSTIN', width=120), + dict(fieldtype='Data', label='Reverse Charge', width=120), + dict(fieldtype='Data', label='Invoice Type', width=120), + dict(fieldtype='Data', label='Export Type', width=120), + dict(fieldtype='Data', label='E-Commerce GSTIN', width=130) ], additional_query_columns=[ 'supplier_gstin', - 'company_gstin' + 'company_gstin', + 'reverse_charge', + 'invoice_type', + 'export_type', + 'ecommerce_gstin' ]) diff --git a/erpnext/regional/report/gst_sales_register/gst_sales_register.py b/erpnext/regional/report/gst_sales_register/gst_sales_register.py index 440594abb02..7f6f8092764 100644 --- a/erpnext/regional/report/gst_sales_register/gst_sales_register.py +++ b/erpnext/regional/report/gst_sales_register/gst_sales_register.py @@ -8,8 +8,18 @@ from erpnext.accounts.report.sales_register.sales_register import _execute def execute(filters=None): return _execute(filters, additional_table_columns=[ dict(fieldtype='Data', label='Customer GSTIN', width=120), - dict(fieldtype='Data', label='Company GSTIN', width=120) + dict(fieldtype='Data', label='Company GSTIN', width=120), + dict(fieldtype='Data', label='Place of Supply', width=120), + dict(fieldtype='Data', label='Reverse Charge', width=120), + dict(fieldtype='Data', label='Invoice Type', width=120), + dict(fieldtype='Data', label='Export Type', width=120), + dict(fieldtype='Data', label='E-Commerce GSTIN', width=130) ], additional_query_columns=[ 'customer_gstin', - 'company_gstin' + 'company_gstin', + 'place_of_supply', + 'reverse_charge', + 'invoice_type', + 'export_type', + 'ecommerce_gstin' ]) diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index b16169bfd75..396b1c2f61e 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -466,6 +466,11 @@ def make_delivery_note(source_name, target_doc=None): target.ignore_pricing_rule = 1 target.run_method("set_missing_values") target.run_method("calculate_taxes_and_totals") + + # set company address + target.update(get_company_address(target.company)) + if target.company_address: + target.update(get_fetch_values("Delivery Note", 'company_address', target.company_address)) def update_item(source, target, source_parent): target.base_amount = (flt(source.qty) - flt(source.delivered_qty)) * flt(source.base_rate) diff --git a/erpnext/selling/sales_common.js b/erpnext/selling/sales_common.js index 6a84d0e09b5..e9671c87117 100644 --- a/erpnext/selling/sales_common.js +++ b/erpnext/selling/sales_common.js @@ -326,6 +326,23 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({ this.calculate_taxes_and_totals(); cur_frm.refresh_fields(); } + }, + + company_address: function() { + var me = this; + if(this.frm.doc.company_address) { + frappe.call({ + method: "frappe.contacts.doctype.address.address.get_address_display", + args: {"address_dict": this.frm.doc.company_address }, + callback: function(r) { + if(r.message) { + me.frm.set_value("company_address_display", r.message) + } + } + }) + } else { + this.frm.set_value("company_address_display", ""); + } } }); diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.json b/erpnext/stock/doctype/delivery_note/delivery_note.json index 345750f04a7..4477c1d0ecb 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.json +++ b/erpnext/stock/doctype/delivery_note/delivery_note.json @@ -860,22 +860,22 @@ "bold": 0, "collapsible": 0, "columns": 0, - "description": "", - "fieldname": "customer_group", + "fieldname": "company_address", "fieldtype": "Link", - "hidden": 1, + "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Customer Group", + "label": "Company Address Name", "length": 0, "no_copy": 0, - "options": "Customer Group", + "options": "Address", "permlevel": 0, - "print_hide": 1, + "precision": "", + "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, "remember_last_selected_value": 0, @@ -891,9 +891,8 @@ "bold": 0, "collapsible": 0, "columns": 0, - "description": "", - "fieldname": "territory", - "fieldtype": "Link", + "fieldname": "company_address_display", + "fieldtype": "Small Text", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -901,12 +900,12 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Territory", + "label": "Company Address", "length": 0, "no_copy": 0, - "options": "Territory", "permlevel": 0, - "print_hide": 1, + "precision": "", + "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, "remember_last_selected_value": 0, @@ -2757,6 +2756,68 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "", + "fieldname": "customer_group", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Customer Group", + "length": 0, + "no_copy": 0, + "options": "Customer Group", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "", + "fieldname": "territory", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Territory", + "length": 0, + "no_copy": 0, + "options": "Territory", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -3426,7 +3487,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-07-19 13:48:09.630820", + "modified": "2017-08-09 15:44:14.253457", "modified_by": "Administrator", "module": "Stock", "name": "Delivery Note",