diff --git a/erpnext/accounts/report/general_ledger/general_ledger.py b/erpnext/accounts/report/general_ledger/general_ledger.py index 307b72d4e8..d9f395b895 100644 --- a/erpnext/accounts/report/general_ledger/general_ledger.py +++ b/erpnext/accounts/report/general_ledger/general_ledger.py @@ -128,7 +128,8 @@ def get_gl_entries(filters): order_by_statement = "order by posting_date, voucher_type, voucher_no" if filters.get("group_by") == _("Group by Voucher (Consolidated)"): - group_by_statement = "group by voucher_type, voucher_no, account, cost_center, against_voucher" + group_by_statement = "group by voucher_type, voucher_no, account, cost_center" + select_fields = """, sum(debit) as debit, sum(credit) as credit, sum(debit_in_account_currency) as debit_in_account_currency, sum(credit_in_account_currency) as credit_in_account_currency""" diff --git a/erpnext/config/buying.py b/erpnext/config/buying.py index 264f88f9c1..d1b0d91728 100644 --- a/erpnext/config/buying.py +++ b/erpnext/config/buying.py @@ -70,11 +70,16 @@ def get_data(): "link": "Tree/Item Group", "description": _("Tree of Item Groups."), }, + { + "type": "doctype", + "name": "Promotional Scheme", + "description": _("Rules for applying different promotional schemes.") + }, { "type": "doctype", "name": "Pricing Rule", "description": _("Rules for applying pricing and discount.") - }, + } ] }, { diff --git a/erpnext/config/selling.py b/erpnext/config/selling.py index 9209ca96aa..b31eb02cf7 100644 --- a/erpnext/config/selling.py +++ b/erpnext/config/selling.py @@ -111,6 +111,11 @@ def get_data(): "description": _("Bundle items at time of sale."), "dependencies": ["Item"], }, + { + "type": "doctype", + "name": "Promotional Scheme", + "description": _("Rules for applying different promotional schemes.") + }, { "type": "doctype", "name": "Pricing Rule", diff --git a/erpnext/public/js/website_theme.js b/erpnext/public/js/website_theme.js index 6c7edfa655..84de2f5b51 100644 --- a/erpnext/public/js/website_theme.js +++ b/erpnext/public/js/website_theme.js @@ -2,16 +2,13 @@ // MIT License. See license.txt frappe.ui.form.on('Website Theme', { - apply_custom_theme(frm) { - let custom_theme = frm.doc.custom_theme; - custom_theme = custom_theme.split('\n'); - if ( - frm.doc.apply_custom_theme - && custom_theme.length === 2 - && custom_theme[1].includes('frappe/public/scss/website') + validate(frm) { + let theme_scss = frm.doc.theme_scss; + if (theme_scss.includes('frappe/public/scss/website') + && !theme_scss.includes('erpnext/public/scss/website') ) { - frm.set_value('custom_theme', - `$primary: #7575ff;\n@import "frappe/public/scss/website";\n@import "erpnext/public/scss/website";`); + frm.set_value('theme_scss', + `${frm.doc.theme_scss}\n@import "erpnext/public/scss/website";`); } } }); diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py index 01da810d76..6569833659 100644 --- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py +++ b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py @@ -138,14 +138,15 @@ class GSTR3BReport(Document): outward_supply_tax_amounts = self.get_tax_amounts("Sales Invoice") inward_supply_tax_amounts = self.get_tax_amounts("Purchase Invoice", reverse_charge="Y") itc_details = self.get_itc_details() - inter_state_supplies = self.get_inter_state_supplies(self.gst_details.get("gst_state")) - inward_nil_exempt = self.get_inward_nil_exempt(self.gst_details.get("gst_state")) self.prepare_data("Sales Invoice", outward_supply_tax_amounts, "sup_details", "osup_det", ["Registered Regular"]) self.prepare_data("Sales Invoice", outward_supply_tax_amounts, "sup_details", "osup_zero", ["SEZ", "Deemed Export", "Overseas"]) self.prepare_data("Purchase Invoice", inward_supply_tax_amounts, "sup_details", "isup_rev", ["Registered Regular"], reverse_charge="Y") self.report_dict["sup_details"]["osup_nil_exmp"]["txval"] = flt(self.get_nil_rated_supply_value(), 2) self.set_itc_details(itc_details) + + inter_state_supplies = self.get_inter_state_supplies(self.gst_details.get("gst_state_number")) + inward_nil_exempt = self.get_inward_nil_exempt(self.gst_details.get("gst_state")) self.set_inter_state_supply(inter_state_supplies) self.set_inward_nil_exempt(inward_nil_exempt) @@ -221,7 +222,7 @@ class GSTR3BReport(Document): for k, v in iteritems(account_map): txval -= self.report_dict.get(supply_type, {}).get(supply_category, {}).get(v, 0) - self.report_dict[supply_type][supply_category]["txval"] = flt(txval, 2) + self.report_dict[supply_type][supply_category]["txval"] += flt(txval, 2) def set_inter_state_supply(self, inter_state_supply): @@ -283,28 +284,40 @@ class GSTR3BReport(Document): and s.company = %s and s.company_gstin = %s""", (self.month_no, self.year, self.company, self.gst_details.get("gstin")), as_dict=1)[0].total - def get_inter_state_supplies(self, state): + def get_inter_state_supplies(self, state_number): - inter_state_supply = frappe.db.sql(""" select sum(s.grand_total) as total, t.tax_amount, a.gst_state, s.gst_category - from `tabSales Invoice` s, `tabSales Taxes and Charges` t, `tabAddress` a - where t.parent = s.name and s.customer_address = a.name and - s.docstatus = 1 and month(s.posting_date) = %s and year(s.posting_date) = %s and - a.gst_state <> %s and s.company = %s and s.company_gstin = %s and - s.gst_category in ('Unregistered', 'Registered Composition', 'UIN Holders') - group by s.gst_category, a.state""", (self.month_no, self.year, state, self.company, self.gst_details.get("gstin")), as_dict=1) + inter_state_supply_taxable_value = frappe.db.sql(""" select sum(s.net_total) as total, s.place_of_supply, s.gst_category + from `tabSales Invoice` s where s.docstatus = 1 and month(s.posting_date) = %s and year(s.posting_date) = %s + and s.company = %s and s.company_gstin = %s and s.gst_category in ('Unregistered', 'Registered Composition', 'UIN Holders') + group by s.gst_category, s.place_of_supply""", (self.month_no, self.year, self.company, self.gst_details.get("gstin")), as_dict=1) + inter_state_supply_tax = frappe.db.sql(""" select sum(t.tax_amount) as tax_amount, s.place_of_supply, s.gst_category + from `tabSales Invoice` s, `tabSales Taxes and Charges` t + where t.parent = s.name and s.docstatus = 1 and month(s.posting_date) = %s and year(s.posting_date) = %s + and s.company = %s and s.company_gstin = %s and s.gst_category in ('Unregistered', 'Registered Composition', 'UIN Holders') + group by s.gst_category, s.place_of_supply""", (self.month_no, self.year, self.company, self.gst_details.get("gstin")), as_dict=1) + + inter_state_supply_tax_mapping={} inter_state_supply_details = {} - for d in inter_state_supply: + for d in inter_state_supply_tax: + inter_state_supply_tax_mapping.setdefault(d.place_of_supply, d.tax_amount) + + for d in inter_state_supply_taxable_value: inter_state_supply_details.setdefault( d.gst_category, [] ) - inter_state_supply_details[d.gst_category].append({ - "pos": get_state_code(d.gst_state), - "txval": d.total - d.tax_amount, - "iamt": d.tax_amount - }) + if state_number != d.place_of_supply.split("-")[0]: + inter_state_supply_details[d.gst_category].append({ + "pos": d.place_of_supply, + "txval": flt(d.total, 2), + "iamt": flt(inter_state_supply_tax_mapping.get(d.place_of_supply), 2) + }) + else: + self.report_dict["sup_details"]["osup_det"]["txval"] += flt(d.total, 2) + self.report_dict["sup_details"]["osup_det"]["camt"] += flt(inter_state_supply_tax_mapping.get(d.place_of_supply)/2, 2) + self.report_dict["sup_details"]["osup_det"]["samt"] += flt(inter_state_supply_tax_mapping.get(d.place_of_supply)/2, 2) return inter_state_supply_details diff --git a/erpnext/shopping_cart/product_info.py b/erpnext/shopping_cart/product_info.py index f9a45ce578..d69b5e3a21 100644 --- a/erpnext/shopping_cart/product_info.py +++ b/erpnext/shopping_cart/product_info.py @@ -13,8 +13,11 @@ from erpnext.utilities.product import get_price, get_qty_in_stock def get_product_info_for_website(item_code): """get product price / stock info for website""" - cart_quotation = _get_cart_quotation() cart_settings = get_shopping_cart_settings() + if not cart_settings.enabled: + return frappe._dict() + + cart_quotation = _get_cart_quotation() price = get_price( item_code, diff --git a/erpnext/templates/generators/item/item_details.html b/erpnext/templates/generators/item/item_details.html index 4f8f8c21a5..8e560333ae 100644 --- a/erpnext/templates/generators/item/item_details.html +++ b/erpnext/templates/generators/item/item_details.html @@ -9,7 +9,13 @@

- {{ doc.web_long_description or doc.description or _("No description given") | safe }} +{% if frappe.utils.strip_html(doc.web_long_description) %} + {{ doc.web_long_description | safe }} +{% elif frappe.utils.strip_html(doc.description) %} + {{ doc.description | safe }} +{% else %} + {{ _("No description given") }} +{% endif %}
{% if has_variants %} diff --git a/erpnext/templates/generators/item/item_specifications.html b/erpnext/templates/generators/item/item_specifications.html index a12a074fa9..469a45fd7d 100644 --- a/erpnext/templates/generators/item/item_specifications.html +++ b/erpnext/templates/generators/item/item_specifications.html @@ -1,8 +1,6 @@ {% if doc.website_specifications -%}
-
{{ _("Specifications") }}
- {% for d in doc.website_specifications -%} diff --git a/erpnext/templates/pages/home.html b/erpnext/templates/pages/home.html index b67a4651db..2ef9c10534 100644 --- a/erpnext/templates/pages/home.html +++ b/erpnext/templates/pages/home.html @@ -33,7 +33,7 @@ {% for item in homepage.products %}
-
+
{{ item.item_name }}
{{ _('More details') }} diff --git a/erpnext/www/all-products/index.html b/erpnext/www/all-products/index.html index ade72a25ce..f09021412b 100644 --- a/erpnext/www/all-products/index.html +++ b/erpnext/www/all-products/index.html @@ -42,7 +42,7 @@
- {% if frappe.form_dict.start or frappe.form_dict.field_filters or frappe.form_dict.search %} + {% if frappe.form_dict.start or frappe.form_dict.field_filters or frappe.form_dict.attribute_filters or frappe.form_dict.search %} {{ _('Clear filters') }} {% endif %}