From ed618f284b67b29752e576211b3556a1d9206c6c Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 25 May 2015 12:20:44 +0530 Subject: [PATCH 01/14] [minor] re-verify password before deleting company transactions --- erpnext/setup/doctype/company/company.js | 54 +++++++++++++----------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/erpnext/setup/doctype/company/company.js b/erpnext/setup/doctype/company/company.js index 817fdb629a..8f28310aa3 100644 --- a/erpnext/setup/doctype/company/company.js +++ b/erpnext/setup/doctype/company/company.js @@ -11,31 +11,37 @@ frappe.ui.form.on("Company", { erpnext.company.set_chart_of_accounts_options(frm.doc); }, delete_company_transactions: function(frm) { - var d = frappe.prompt({ - fieldtype:"Data", - fieldname: "company_name", - label: __("Please re-type company name to confirm"), - reqd: 1, - description: __("Please make sure you really want to delete all the transactions for this company. Your master data will remain as it is. This action cannot be undone.")}, - function(data) { - if(data.company_name !== frm.doc.name) { - frappe.msgprint("Company name not same"); - return; - } - frappe.call({ - method: "erpnext.setup.doctype.company.delete_company_transactions.delete_company_transactions", - args: { - company_name: data.company_name - }, - freeze: true, - callback: function(r, rt) { - if(!r.exc) - frappe.msgprint(__("Successfully deleted all transactions related to this company!")); + frappe.verify_password(function() { + var d = frappe.prompt({ + fieldtype:"Data", + fieldname: "company_name", + label: __("Please re-type company name to confirm"), + reqd: 1, + description: __("Please make sure you really want to delete all the transactions for this company. Your master data will remain as it is. This action cannot be undone.")}, + function(data) { + if(data.company_name !== frm.doc.name) { + frappe.msgprint("Company name not same"); + return; } - }); - }, __("Delete all the Transactions for this Company"), __("Delete")); - - d.get_primary_btn().addClass("btn-danger"); + frappe.call({ + method: "erpnext.setup.doctype.company.delete_company_transactions.delete_company_transactions", + args: { + company_name: data.company_name + }, + freeze: true, + callback: function(r, rt) { + if(!r.exc) + frappe.msgprint(__("Successfully deleted all transactions related to this company!")); + }, + onerror: function() { + frappe.msgprint(__("Wrong Password")); + } + }); + }, __("Delete all the Transactions for this Company"), __("Delete") + ); + d.get_primary_btn().addClass("btn-danger"); + } + ); } }); From 6a0563f4b2b28cfb24e760862ffb9760cf56ae31 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 25 May 2015 10:49:40 +0530 Subject: [PATCH 02/14] [minor] added multiple commit in bom --- erpnext/manufacturing/doctype/bom/bom.js | 46 ++++++++++++++---------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/erpnext/manufacturing/doctype/bom/bom.js b/erpnext/manufacturing/doctype/bom/bom.js index c6e5bf0a3e..720575ac02 100644 --- a/erpnext/manufacturing/doctype/bom/bom.js +++ b/erpnext/manufacturing/doctype/bom/bom.js @@ -1,27 +1,35 @@ // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors // License: GNU General Public License v3. See license.txt +frappe.ui.form.on("BOM", { + onload_post_render: function(frm) { + frm.get_field("items").grid.set_multiple_add("item_code", "qty"); + }, + refresh: function(frm) { + frm.toggle_enable("item", frm.doc.__islocal); + toggle_operations(frm); + + if (!frm.doc.__islocal && frm.doc.docstatus<2) { + frm.add_custom_button(__("Update Cost"), function() { + frm.events.update_cost(frm); + }); + } + }, + update_cost: function(frm) { + return frappe.call({ + doc: frm.doc, + method: "update_cost", + freeze: true, + callback: function(r) { + if(!r.exc) frm.refresh_fields(); + } + }) + } +}); + + // On REFRESH frappe.provide("erpnext.bom"); -cur_frm.cscript.refresh = function(doc,dt,dn){ - cur_frm.toggle_enable("item", doc.__islocal); - toggle_operations(cur_frm); - - if (!doc.__islocal && doc.docstatus<2) { - cur_frm.add_custom_button(__("Update Cost"), cur_frm.cscript.update_cost); - } -} - -cur_frm.cscript.update_cost = function() { - return frappe.call({ - doc: cur_frm.doc, - method: "update_cost", - freeze: true, - callback: function(r) { - if(!r.exc) cur_frm.refresh_fields(); - } - }) -} cur_frm.add_fetch("item", "description", "description"); cur_frm.add_fetch("item", "image", "image"); From f8594feb555d79d95a9101f0877fbfd1dbcc5f33 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 25 May 2015 14:25:58 +0530 Subject: [PATCH 03/14] [enhancement] add bom tree view --- erpnext/manufacturing/doctype/bom/bom.js | 9 +- erpnext/manufacturing/page/__init__.py | 0 .../page/bom_browser/__init__.py | 0 .../page/bom_browser/bom_browser.js | 90 +++++++++++++++++++ .../page/bom_browser/bom_browser.json | 21 +++++ .../page/bom_browser/bom_browser.py | 15 ++++ 6 files changed, 131 insertions(+), 4 deletions(-) create mode 100644 erpnext/manufacturing/page/__init__.py create mode 100644 erpnext/manufacturing/page/bom_browser/__init__.py create mode 100644 erpnext/manufacturing/page/bom_browser/bom_browser.js create mode 100644 erpnext/manufacturing/page/bom_browser/bom_browser.json create mode 100644 erpnext/manufacturing/page/bom_browser/bom_browser.py diff --git a/erpnext/manufacturing/doctype/bom/bom.js b/erpnext/manufacturing/doctype/bom/bom.js index 720575ac02..65ecfd8b90 100644 --- a/erpnext/manufacturing/doctype/bom/bom.js +++ b/erpnext/manufacturing/doctype/bom/bom.js @@ -1,6 +1,8 @@ // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors // License: GNU General Public License v3. See license.txt +frappe.provide("erpnext.bom"); + frappe.ui.form.on("BOM", { onload_post_render: function(frm) { frm.get_field("items").grid.set_multiple_add("item_code", "qty"); @@ -13,6 +15,9 @@ frappe.ui.form.on("BOM", { frm.add_custom_button(__("Update Cost"), function() { frm.events.update_cost(frm); }); + frm.add_custom_button(__("Browse BOM"), function() { + frappe.set_route("bom-browser", frm.doc.name); + }); } }, update_cost: function(frm) { @@ -27,10 +32,6 @@ frappe.ui.form.on("BOM", { } }); - -// On REFRESH -frappe.provide("erpnext.bom"); - cur_frm.add_fetch("item", "description", "description"); cur_frm.add_fetch("item", "image", "image"); cur_frm.add_fetch("item", "item_name", "item_name"); diff --git a/erpnext/manufacturing/page/__init__.py b/erpnext/manufacturing/page/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/manufacturing/page/bom_browser/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/manufacturing/page/bom_browser/bom_browser.js b/erpnext/manufacturing/page/bom_browser/bom_browser.js new file mode 100644 index 0000000000..453d8c57a9 --- /dev/null +++ b/erpnext/manufacturing/page/bom_browser/bom_browser.js @@ -0,0 +1,90 @@ +// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +// License: GNU General Public License v3. See license.txt + +frappe.pages['bom-browser'].on_page_load = function(wrapper) { + var page = frappe.ui.make_app_page({ + parent: wrapper, + title: 'BOM Browser', + single_column: true + }); + + page.main.css({ + "min-height": "300px", + "padding-bottom": "25px" + }); + + page.tree_area = $('

'+ + __("Select BOM to start") + +'

').appendTo(page.main); + + frappe.breadcrumbs.add(frappe.breadcrumbs.last_module || "Manufacturing"); + + var make_tree = function() { + erpnext.bom_tree = new erpnext.BOMTree(page.$bom_select.val(), page, page.tree_area); + } + + page.$bom_select = wrapper.page.add_field({fieldname: "bom", + fieldtype:"Link", options: "BOM", label: __("BOM")}).$input + .change(function() { + make_tree(); + }); + + page.set_secondary_action(__('Refresh'), function() { + make_tree(); + }); +} + + +frappe.pages['bom-browser'].on_page_show = function(wrapper){ + // set from route + var bom = null; + if(frappe.get_route()[1]) { + var bom = frappe.get_route().splice(1).join("/"); + } + if(frappe.route_options && frappe.route_options.bom) { + var bom = frappe.route_options.bom; + } + if(bom) { + wrapper.page.$bom_select.val(bom).trigger("change"); + } +}; + +erpnext.BOMTree = Class.extend({ + init: function(root, page, parent) { + $(parent).empty(); + var me = this; + me.page = page; + me.bom = page.$bom_select.val(); + me.can_read = frappe.model.can_read("BOM"); + me.can_create = frappe.boot.user.can_create.indexOf("BOM") !== -1 || + frappe.boot.user.in_create.indexOf("BOM") !== -1; + me.can_write = frappe.model.can_write("BOM"); + me.can_delete = frappe.model.can_delete("BOM"); + + this.tree = new frappe.ui.Tree({ + parent: $(parent), + label: me.bom, + args: {parent: me.bom}, + method: 'erpnext.manufacturing.page.bom_browser.bom_browser.get_children', + toolbar: [ + {toggle_btn: true}, + { + label:__("Edit"), + condition: function(node) { + return node.expandable; + }, + click: function(node) { + frappe.set_route("Form", "BOM", node.data.parent); + } + } + ], + get_label: function(node) { + if(node.data.qty) { + return node.data.qty + " x " + node.data.value; + } else { + return node.data.value; + } + } + }); + } +}); diff --git a/erpnext/manufacturing/page/bom_browser/bom_browser.json b/erpnext/manufacturing/page/bom_browser/bom_browser.json new file mode 100644 index 0000000000..5b75463457 --- /dev/null +++ b/erpnext/manufacturing/page/bom_browser/bom_browser.json @@ -0,0 +1,21 @@ +{ + "content": null, + "creation": "2015-05-25 02:57:33.472044", + "docstatus": 0, + "doctype": "Page", + "modified": "2015-05-25 02:57:33.472044", + "modified_by": "Administrator", + "module": "Manufacturing", + "name": "bom-browser", + "owner": "Administrator", + "page_name": "bom-browser", + "roles": [ + { + "role": "Manufacturing User" + } + ], + "script": null, + "standard": "Yes", + "style": null, + "title": "BOM Browser" +} \ No newline at end of file diff --git a/erpnext/manufacturing/page/bom_browser/bom_browser.py b/erpnext/manufacturing/page/bom_browser/bom_browser.py new file mode 100644 index 0000000000..8051e69b9d --- /dev/null +++ b/erpnext/manufacturing/page/bom_browser/bom_browser.py @@ -0,0 +1,15 @@ +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import frappe + +@frappe.whitelist() +def get_children(parent): + return frappe.db.sql("""select item_code as value, + bom_no as parent, qty, + if(ifnull(bom_no, "")!="", 1, 0) as expandable + from `tabBOM Item` + where parent=%s + order by idx + """, parent, as_dict=True) From 314af94737d388a8a60e7af81fa0697e8480829d Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 25 May 2015 10:49:40 +0530 Subject: [PATCH 04/14] [minor] added multiple commit in bom --- erpnext/manufacturing/doctype/bom/bom.js | 46 ++++++++++++++---------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/erpnext/manufacturing/doctype/bom/bom.js b/erpnext/manufacturing/doctype/bom/bom.js index c6e5bf0a3e..720575ac02 100644 --- a/erpnext/manufacturing/doctype/bom/bom.js +++ b/erpnext/manufacturing/doctype/bom/bom.js @@ -1,27 +1,35 @@ // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors // License: GNU General Public License v3. See license.txt +frappe.ui.form.on("BOM", { + onload_post_render: function(frm) { + frm.get_field("items").grid.set_multiple_add("item_code", "qty"); + }, + refresh: function(frm) { + frm.toggle_enable("item", frm.doc.__islocal); + toggle_operations(frm); + + if (!frm.doc.__islocal && frm.doc.docstatus<2) { + frm.add_custom_button(__("Update Cost"), function() { + frm.events.update_cost(frm); + }); + } + }, + update_cost: function(frm) { + return frappe.call({ + doc: frm.doc, + method: "update_cost", + freeze: true, + callback: function(r) { + if(!r.exc) frm.refresh_fields(); + } + }) + } +}); + + // On REFRESH frappe.provide("erpnext.bom"); -cur_frm.cscript.refresh = function(doc,dt,dn){ - cur_frm.toggle_enable("item", doc.__islocal); - toggle_operations(cur_frm); - - if (!doc.__islocal && doc.docstatus<2) { - cur_frm.add_custom_button(__("Update Cost"), cur_frm.cscript.update_cost); - } -} - -cur_frm.cscript.update_cost = function() { - return frappe.call({ - doc: cur_frm.doc, - method: "update_cost", - freeze: true, - callback: function(r) { - if(!r.exc) cur_frm.refresh_fields(); - } - }) -} cur_frm.add_fetch("item", "description", "description"); cur_frm.add_fetch("item", "image", "image"); From f29a618b6938534681841a3c8d88c1ccd4179bfa Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 25 May 2015 10:50:48 +0530 Subject: [PATCH 05/14] [email] [website] footer cleanup --- .../doctype/journal_entry/journal_entry.py | 6 +- erpnext/crm/doctype/newsletter/newsletter.py | 47 +++++++- .../newsletter_list/newsletter_list.py | 4 +- erpnext/hooks.py | 7 +- erpnext/patches.txt | 3 +- erpnext/public/images/erpnext-fade.png | Bin 516 -> 0 bytes erpnext/public/images/erpnext-logo-white.svg | 112 ------------------ erpnext/public/images/erpnext1.png | Bin 429 -> 0 bytes erpnext/public/images/feed.png | Bin 691 -> 0 bytes erpnext/public/js/website_utils.js | 12 +- .../setup/page/setup_wizard/setup_wizard.py | 1 + erpnext/stock/doctype/item/item.json | 3 +- .../templates/includes/footer_extension.html | 41 ------- .../templates/includes/footer_powered.html | 1 - 14 files changed, 71 insertions(+), 166 deletions(-) delete mode 100644 erpnext/public/images/erpnext-fade.png delete mode 100644 erpnext/public/images/erpnext-logo-white.svg delete mode 100644 erpnext/public/images/erpnext1.png delete mode 100755 erpnext/public/images/feed.png delete mode 100644 erpnext/templates/includes/footer_extension.html delete mode 100644 erpnext/templates/includes/footer_powered.html diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py index 6317793538..1e2b352d4e 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.py +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py @@ -76,9 +76,9 @@ class JournalEntry(AccountsController): account_type = frappe.db.get_value("Account", d.account, "account_type") if account_type in ["Receivable", "Payable"]: if not (d.party_type and d.party): - frappe.throw(_("Row{0}: Party Type and Party is required for Receivable / Payable account {1}").format(d.idx, d.account)) + frappe.throw(_("Row {0}: Party Type and Party is required for Receivable / Payable account {1}").format(d.idx, d.account)) elif d.party_type and d.party: - frappe.throw(_("Row{0}: Party Type and Party is only applicable against Receivable / Payable account").format(d.idx)) + frappe.throw(_("Row {0}: Party Type and Party is only applicable against Receivable / Payable account").format(d.idx)) def check_credit_limit(self): customers = list(set([d.party for d in self.get("accounts") if d.party_type=="Customer" and flt(d.debit) > 0])) @@ -438,7 +438,7 @@ class JournalEntry(AccountsController): if self.stock_entry: if frappe.db.get_value("Stock Entry", self.stock_entry, "docstatus") != 1: frappe.throw(_("Stock Entry {0} is not submitted").format(self.stock_entry)) - + if frappe.db.exists({"doctype": "Journal Entry", "stock_entry": self.stock_entry, "docstatus":1}): frappe.msgprint(_("Warning: Another {0} # {1} exists against stock entry {2}".format(self.voucher_type, self.name, self.stock_entry))) diff --git a/erpnext/crm/doctype/newsletter/newsletter.py b/erpnext/crm/doctype/newsletter/newsletter.py index 0bafda6881..30fd101e35 100644 --- a/erpnext/crm/doctype/newsletter/newsletter.py +++ b/erpnext/crm/doctype/newsletter/newsletter.py @@ -8,7 +8,9 @@ import frappe.utils from frappe import throw, _ from frappe.model.document import Document from frappe.email.bulk import check_bulk_limit +from frappe.utils.verified_command import get_signed_params, verify_request import erpnext.tasks +from erpnext.crm.doctype.newsletter_list.newsletter_list import add_subscribers class Newsletter(Document): def onload(self): @@ -87,7 +89,6 @@ def get_lead_options(): @frappe.whitelist(allow_guest=True) def unsubscribe(email, name): - from frappe.utils.verified_command import verify_request if not verify_request(): return @@ -123,3 +124,47 @@ def create_lead(email_id): "source": "Email" }) lead.insert() + + +@frappe.whitelist(allow_guest=True) +def subscribe(email): + url = frappe.utils.get_url("/api/method/erpnext.crm.doctype.newsletter.newsletter.confirm_subscription") +\ + "?" + get_signed_params({"email": email}) + + messages = ( + _("Thank you for your interest in subscribing to our updates"), + _("Please verify your email id"), + url, + _("Click here to verify") + ) + + print url + + content = """ +

{0}. {1}.

+

{3}

+ """ + + frappe.sendmail(email, subject=_("Confirm Your Email"), content=content.format(*messages), bulk=True) + +@frappe.whitelist(allow_guest=True) +def confirm_subscription(email): + if not verify_request(): + return + + if not frappe.db.exists("Newsletter List", _("Website")): + frappe.get_doc({ + "doctype": "Newsletter List", + "title": _("Website") + }).insert(ignore_permissions=True) + + + frappe.flags.ignore_permissions = True + + add_subscribers(_("Website"), email) + frappe.db.commit() + + frappe.respond_as_web_page(_("Confirmed"), _("{0} has been successfully added to our Newsletter list.").format(email)) + + + diff --git a/erpnext/crm/doctype/newsletter_list/newsletter_list.py b/erpnext/crm/doctype/newsletter_list/newsletter_list.py index e4ba6b1ad4..1eb95eac17 100644 --- a/erpnext/crm/doctype/newsletter_list/newsletter_list.py +++ b/erpnext/crm/doctype/newsletter_list/newsletter_list.py @@ -5,7 +5,7 @@ from __future__ import unicode_literals import frappe from frappe.model.document import Document -from frappe.utils import validate_email_add, strip +from frappe.utils import validate_email_add from frappe import _ from email.utils import parseaddr @@ -75,7 +75,7 @@ def add_subscribers(name, email_list): "doctype": "Newsletter List Subscriber", "newsletter_list": name, "email": email - }).insert() + }).insert(ignore_permissions = frappe.flags.ignore_permissions) count += 1 else: diff --git a/erpnext/hooks.py b/erpnext/hooks.py index 74631d170a..bc7f9d5c44 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -96,9 +96,10 @@ scheduler_events = { ] } -default_mail_footer = """
- - Sent via ERPNext +default_mail_footer = """""" diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 65a6de4348..fcf0ea7d69 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -156,4 +156,5 @@ erpnext.patches.v5_0.repost_requested_qty erpnext.patches.v5_0.fix_taxes_and_totals_in_party_currency erpnext.patches.v5_0.update_tax_amount_after_discount_in_purchase_cycle erpnext.patches.v5_0.rename_pos_setting -erpnext.patches.v5_0.update_operation_description \ No newline at end of file +erpnext.patches.v5_0.update_operation_description +erpnext.patches.v5_0.set_footer_address diff --git a/erpnext/public/images/erpnext-fade.png b/erpnext/public/images/erpnext-fade.png deleted file mode 100644 index 81cc41036a838e7857ff2c34635c660183670ff6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 516 zcmV+f0{i`mP)Oc*c1{Mi^oOQ)rve;+JGuE}t`52mK&Hwk_V*iQ?bC6|S9?I(z5)-$-u#*CP{**wdFOnI9HLt64( zqjmzFKpTOgz&heD1hOqaTDGM;tx04p3x~icQK+foC*XiM9hLKDne#rB%fb?Ig31~g zuO@QZeF=o^=vmpzPK?37P1d;pZU^;}R8m{=z~15_O_p7t8+A_LzYxfN zq2*~A)w}}DMtwtk1gUn>NTvgDM+$z)y#~3z{C(P&00RJSLu@Zsc3CI@0000 - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/erpnext/public/images/erpnext1.png b/erpnext/public/images/erpnext1.png deleted file mode 100644 index cfc3d84d24b386320b1540022f5c1e0b1f4dc6e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 429 zcmV;e0aE^nP)bj2ghn19Rzz~3F_8{5fI3i- z1U*9|ibowd>cCM44krixB~s5{64jHc76mXO)x}OgtU^QyzXphZK@070AZ8}Qp7lWd z8i+-KIFQJiWEr{xN7Eps4!j4%{|Vr4K&%B-Z%>4J7>*@T&sA&=6e7YyoX`p%1f)p_ z2x$`aXpNSGqYfN(;HU!!abw{fl>SbFJ>N;x^A1~ML6L~U`a85o2Lr_R&@Mw87{uy% z0mM&-L}P&kt$N`kAv8FVt0V&84iJAN%Y~p2gyOgVi31)`^&$U>2c<~%kc5#l2{Vy? zf~jL8Asm=T%fV3xjyiDEfrAtvS9N|2#Er5phStfTj(Zf5_H2UIuM|0OG>XXq009O7 XRgdXzxd!b<00000NkvXXu0mjfQUs*H diff --git a/erpnext/public/images/feed.png b/erpnext/public/images/feed.png deleted file mode 100755 index 315c4f4fa62cb720326ba3f54259666ba3999e42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 691 zcmV;k0!;mhP)bpQb1=l6TxbDZwj&S={?7%qx-u`rsG(Zp`-rh=e^=%((1yvsuf5d=&62Zj)Y zH&JviNS_F4_Hj|T(1j4$p-!}kixP9&dB4uv^MveG?dGf%sUCoc2!IFxD6wHRA2^dX zXRVk!-qSfk(jcaUKn#RP48(whfPlJUpApdrA!TQi_4D+fVoM;3I0gZ8{=Xv~Po;geVA+Em9@0Wq2 zr>OTZEGR05L=gf1T;ucCxq6Q6EgJiH@@-lVaAlQyw`jIF^c=&IVnj|95hHbE_cnt| zTzZQ?F4Ne@(bH(~&3nM%m)I@ID{@jJ2qZPjr)jhpe9hViOwH5k&|T#EmmL3(vHeUQ zq^!t^Al6JD;=mHq^Bg?J-8-zG2Od7gZbknG;K9czYjPqG*xjPo0k(c4%lPXTpw(qq z@aGMnxtFS(np+2kC} z7P02O874ZkJH$v#nCUVx$({yDN`IX@o2wyvTD#e`qN`_w5<}$3F+_ -
-
-
- - - - -
-
-
-
- diff --git a/erpnext/templates/includes/footer_powered.html b/erpnext/templates/includes/footer_powered.html deleted file mode 100644 index 96611813a7..0000000000 --- a/erpnext/templates/includes/footer_powered.html +++ /dev/null @@ -1 +0,0 @@ -ERPNext Powered From 822fd7747a89274580f4827260ddb9b754df8cc7 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 25 May 2015 10:51:01 +0530 Subject: [PATCH 06/14] [email] [website] footer cleanup --- erpnext/patches/v5_0/set_footer_address.py | 6 +++ erpnext/public/images/erpnext-footer.png | Bin 0 -> 2491 bytes .../includes/footer/footer_extension.html | 42 ++++++++++++++++++ .../includes/footer/footer_powered.html | 1 + 4 files changed, 49 insertions(+) create mode 100644 erpnext/patches/v5_0/set_footer_address.py create mode 100644 erpnext/public/images/erpnext-footer.png create mode 100644 erpnext/templates/includes/footer/footer_extension.html create mode 100644 erpnext/templates/includes/footer/footer_powered.html diff --git a/erpnext/patches/v5_0/set_footer_address.py b/erpnext/patches/v5_0/set_footer_address.py new file mode 100644 index 0000000000..5eb5624987 --- /dev/null +++ b/erpnext/patches/v5_0/set_footer_address.py @@ -0,0 +1,6 @@ +import frappe + +def execute(): + ss = frappe.get_doc("System Settings", "System Settings") + ss.email_footer_address = frappe.db.get_default("company") + ss.save() diff --git a/erpnext/public/images/erpnext-footer.png b/erpnext/public/images/erpnext-footer.png new file mode 100644 index 0000000000000000000000000000000000000000..4b36fa120c5f0a0324bd03b2d05e50269935c326 GIT binary patch literal 2491 zcmZ`*3piAH8$Zgeai@r+A(buWm~owB44I)(?i5Lk41e=ATP}$)$lz_#7*#LkOK=31r#-|_!EM^Q35;&X57!dp{g+Vi3}ha|AMG^8EM7G-UQM<9_%9G4mi1rR+x$l;N*Su~%|fj}@WE)ErEgJN@|Kr|MM z1+6h424e*?ta$M;e2Ty-hPQQjl8^HcX}kz7ox`WIW02B$DdFr`zO$K`)acW(oF|_i z`PnIk_n|DfKu{V1(I{(hH5pAn{~MV!^0zW-#HXq_v0SFCCTavoW71f(7(Nfyp;xto zd;3ZFe@O}`oMkgv6PIhlNi&B6XgoGER@#F7F?2p2gOe4s68_wgWfg(V;&5p^9xTJ# zeUQjwEBPUxZSW2sJ>HaCz%iJ(anlS$;Dm285v6bf216mI5X%}7edN$!x69q>c6`TL~{gK&{ z({zoNiEPl&{VVz!E?;rDKpYtRAmng(B{v!X{ z?`m&+qil@S_t>H(1C3jw__{9w%lb{{{WZG&VTAC%Tdal)t$Di zA|FZ2jNi>Z=?tGmKdZeK_|&NVK1PbS@ed91}wCq#JSJ7DAj z9aqz8h`q6dP0+vCN)J&?3V*-P^}n-5BVy0#8R3m9x3W_A8w%MZkNjVg4G{t7PAYXb z4*j!@+?<0jT%5n{byltKUW1;SU*|p3Q?#|3otvX{FgtWIv`a209x}kBJ2#N$n<`Cr z=}0A)GmQ=o!YLxJPu;4`Ge;J z1L0YRauAj_Q1;c>QadLz^0TAC>*v;lrgqd?M!IiDZbD^Xbp)iRSr>ejYg!JUiht5@ zzjnF~TUW^^b&ojjVIgV;QFy5cf=Y5YW2<9q>9ccOIL@GJEn$!iX|~c zv6WoRuqY;vDec?m0+raOU1y|wosKka>>B;0?+iA-=j!ZvGWX8FxN!euY0&d=UsYvM zs>0&zVR!2S$M=Bos~)m`-d_J??yaV#r>-O0zS&!H>MX;-RI;rtUsSZII4fl{DU|dr zBh-gy-0SgUJFtFpYpE$oH3XfbpB|jQN5uPuYh#pGOm4^ix}a$27p^2A8@d%eaMo3t zQ+EGr8T~oAea?1B8#~TFZvNMNX=CjV zUm=WYb%l&B){Oo`dk)H+YMs!T^+jcva=jSo^L7SP?a)2QL{vXE8_i9huqeD)n%fa} zT@Xl+yq~M{2sThEs(FR~ZmSy7{Y~bmz4qyCZ-gF_*~-EuVrI&EQ#JFU8>IGf(&Dqx zyP>1pm+Ds8P+39GE~n6pIn8V*6KB0g6IGFU=m`hmL92UN$F$e3tCk#3b9?(T(Iu=P zqxf4$I2_e^v3SSNW%k5tmM2CcrgqZIbuzDerQhl#R>xOexank*aPJFIc$!Lm1%u={ z;czbf_03#bZ{eNf8H>V}GL(VQ*BLVrV}(txOwNl&UY;hlViV(2wy(v}yE!B`e13_d z$_C}zr=jzn&4Pl7c9u6OoAzKK!*jpzqw4#Frnhui+Nsg9ZIV(&&*c2Qb z{Io=EjUJFReWN}PQeQIwE#2w;^3U|80|~j{f+)Uw>8b&F(PZP2#=tv){zF2hlJt+t M)7^(y?nX}i9}2GEhyVZp literal 0 HcmV?d00001 diff --git a/erpnext/templates/includes/footer/footer_extension.html b/erpnext/templates/includes/footer/footer_extension.html new file mode 100644 index 0000000000..400043edbf --- /dev/null +++ b/erpnext/templates/includes/footer/footer_extension.html @@ -0,0 +1,42 @@ +{% if not hide_footer_signup %} +
+
+
+ + +
+
+ +
+ +{% endif %} diff --git a/erpnext/templates/includes/footer/footer_powered.html b/erpnext/templates/includes/footer/footer_powered.html new file mode 100644 index 0000000000..c44c34202c --- /dev/null +++ b/erpnext/templates/includes/footer/footer_powered.html @@ -0,0 +1 @@ + From 093beecd0a8a167ccb0a9f32a6d5271a9b1d41cd Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 26 May 2015 10:47:52 +0530 Subject: [PATCH 07/14] minor fix --- erpnext/patches/v5_0/set_footer_address.py | 1 + erpnext/public/js/controllers/transaction.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/patches/v5_0/set_footer_address.py b/erpnext/patches/v5_0/set_footer_address.py index 5eb5624987..2779e48c59 100644 --- a/erpnext/patches/v5_0/set_footer_address.py +++ b/erpnext/patches/v5_0/set_footer_address.py @@ -1,6 +1,7 @@ import frappe def execute(): + frappe.reload_doctype("System Settings") ss = frappe.get_doc("System Settings", "System Settings") ss.email_footer_address = frappe.db.get_default("company") ss.save() diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index 7e5dc32139..9f1a8eb161 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -98,7 +98,7 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ }, hide_currency_and_price_list: function() { - if(this.frm.doc.docstatus > 0) { + if(this.frm.doc.conversion_rate == 1 && this.frm.doc.docstatus > 0) { hide_field("currency_and_price_list"); } else { unhide_field("currency_and_price_list"); From 1f5b21673ce00f34f67d34a9b7b9b99cef03ff51 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 26 May 2015 11:07:23 +0530 Subject: [PATCH 08/14] minor fix in report --- .../sales_person_wise_transaction_summary.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/erpnext/selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.py b/erpnext/selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.py index e102f0d768..65b0c08680 100644 --- a/erpnext/selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.py +++ b/erpnext/selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.py @@ -50,10 +50,14 @@ def get_conditions(filters, date_field): conditions = [""] values = [] - for field in ["company", "customer", "territory", "sales_person"]: + for field in ["company", "customer", "territory"]: if filters.get(field): conditions.append("dt.{0}=%s".format(field)) values.append(filters[field]) + + if filters.get("sales_person"): + conditions.append("st.sales_person=%s") + values.append(filters["sales_person"]) if filters.get("from_date"): conditions.append("dt.{0}>=%s".format(date_field)) From b3a142f5abf4be186cc71f9d007e3b2eed9255dd Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 26 May 2015 12:13:30 +0530 Subject: [PATCH 09/14] [fix] email footer and signature --- erpnext/hooks.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/erpnext/hooks.py b/erpnext/hooks.py index bc7f9d5c44..f28bbb2119 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -97,9 +97,8 @@ scheduler_events = { } default_mail_footer = """""" From 5fa6c4ce21dbc4018ca6b07480bd0517caaaf52d Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 25 May 2015 14:25:58 +0530 Subject: [PATCH 10/14] [enhancement] add bom tree view --- erpnext/manufacturing/doctype/bom/bom.js | 9 +- erpnext/manufacturing/page/__init__.py | 0 .../page/bom_browser/__init__.py | 0 .../page/bom_browser/bom_browser.js | 90 +++++++++++++++++++ .../page/bom_browser/bom_browser.json | 21 +++++ .../page/bom_browser/bom_browser.py | 15 ++++ 6 files changed, 131 insertions(+), 4 deletions(-) create mode 100644 erpnext/manufacturing/page/__init__.py create mode 100644 erpnext/manufacturing/page/bom_browser/__init__.py create mode 100644 erpnext/manufacturing/page/bom_browser/bom_browser.js create mode 100644 erpnext/manufacturing/page/bom_browser/bom_browser.json create mode 100644 erpnext/manufacturing/page/bom_browser/bom_browser.py diff --git a/erpnext/manufacturing/doctype/bom/bom.js b/erpnext/manufacturing/doctype/bom/bom.js index 720575ac02..65ecfd8b90 100644 --- a/erpnext/manufacturing/doctype/bom/bom.js +++ b/erpnext/manufacturing/doctype/bom/bom.js @@ -1,6 +1,8 @@ // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors // License: GNU General Public License v3. See license.txt +frappe.provide("erpnext.bom"); + frappe.ui.form.on("BOM", { onload_post_render: function(frm) { frm.get_field("items").grid.set_multiple_add("item_code", "qty"); @@ -13,6 +15,9 @@ frappe.ui.form.on("BOM", { frm.add_custom_button(__("Update Cost"), function() { frm.events.update_cost(frm); }); + frm.add_custom_button(__("Browse BOM"), function() { + frappe.set_route("bom-browser", frm.doc.name); + }); } }, update_cost: function(frm) { @@ -27,10 +32,6 @@ frappe.ui.form.on("BOM", { } }); - -// On REFRESH -frappe.provide("erpnext.bom"); - cur_frm.add_fetch("item", "description", "description"); cur_frm.add_fetch("item", "image", "image"); cur_frm.add_fetch("item", "item_name", "item_name"); diff --git a/erpnext/manufacturing/page/__init__.py b/erpnext/manufacturing/page/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/manufacturing/page/bom_browser/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/manufacturing/page/bom_browser/bom_browser.js b/erpnext/manufacturing/page/bom_browser/bom_browser.js new file mode 100644 index 0000000000..453d8c57a9 --- /dev/null +++ b/erpnext/manufacturing/page/bom_browser/bom_browser.js @@ -0,0 +1,90 @@ +// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +// License: GNU General Public License v3. See license.txt + +frappe.pages['bom-browser'].on_page_load = function(wrapper) { + var page = frappe.ui.make_app_page({ + parent: wrapper, + title: 'BOM Browser', + single_column: true + }); + + page.main.css({ + "min-height": "300px", + "padding-bottom": "25px" + }); + + page.tree_area = $('

'+ + __("Select BOM to start") + +'

').appendTo(page.main); + + frappe.breadcrumbs.add(frappe.breadcrumbs.last_module || "Manufacturing"); + + var make_tree = function() { + erpnext.bom_tree = new erpnext.BOMTree(page.$bom_select.val(), page, page.tree_area); + } + + page.$bom_select = wrapper.page.add_field({fieldname: "bom", + fieldtype:"Link", options: "BOM", label: __("BOM")}).$input + .change(function() { + make_tree(); + }); + + page.set_secondary_action(__('Refresh'), function() { + make_tree(); + }); +} + + +frappe.pages['bom-browser'].on_page_show = function(wrapper){ + // set from route + var bom = null; + if(frappe.get_route()[1]) { + var bom = frappe.get_route().splice(1).join("/"); + } + if(frappe.route_options && frappe.route_options.bom) { + var bom = frappe.route_options.bom; + } + if(bom) { + wrapper.page.$bom_select.val(bom).trigger("change"); + } +}; + +erpnext.BOMTree = Class.extend({ + init: function(root, page, parent) { + $(parent).empty(); + var me = this; + me.page = page; + me.bom = page.$bom_select.val(); + me.can_read = frappe.model.can_read("BOM"); + me.can_create = frappe.boot.user.can_create.indexOf("BOM") !== -1 || + frappe.boot.user.in_create.indexOf("BOM") !== -1; + me.can_write = frappe.model.can_write("BOM"); + me.can_delete = frappe.model.can_delete("BOM"); + + this.tree = new frappe.ui.Tree({ + parent: $(parent), + label: me.bom, + args: {parent: me.bom}, + method: 'erpnext.manufacturing.page.bom_browser.bom_browser.get_children', + toolbar: [ + {toggle_btn: true}, + { + label:__("Edit"), + condition: function(node) { + return node.expandable; + }, + click: function(node) { + frappe.set_route("Form", "BOM", node.data.parent); + } + } + ], + get_label: function(node) { + if(node.data.qty) { + return node.data.qty + " x " + node.data.value; + } else { + return node.data.value; + } + } + }); + } +}); diff --git a/erpnext/manufacturing/page/bom_browser/bom_browser.json b/erpnext/manufacturing/page/bom_browser/bom_browser.json new file mode 100644 index 0000000000..5b75463457 --- /dev/null +++ b/erpnext/manufacturing/page/bom_browser/bom_browser.json @@ -0,0 +1,21 @@ +{ + "content": null, + "creation": "2015-05-25 02:57:33.472044", + "docstatus": 0, + "doctype": "Page", + "modified": "2015-05-25 02:57:33.472044", + "modified_by": "Administrator", + "module": "Manufacturing", + "name": "bom-browser", + "owner": "Administrator", + "page_name": "bom-browser", + "roles": [ + { + "role": "Manufacturing User" + } + ], + "script": null, + "standard": "Yes", + "style": null, + "title": "BOM Browser" +} \ No newline at end of file diff --git a/erpnext/manufacturing/page/bom_browser/bom_browser.py b/erpnext/manufacturing/page/bom_browser/bom_browser.py new file mode 100644 index 0000000000..8051e69b9d --- /dev/null +++ b/erpnext/manufacturing/page/bom_browser/bom_browser.py @@ -0,0 +1,15 @@ +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import frappe + +@frappe.whitelist() +def get_children(parent): + return frappe.db.sql("""select item_code as value, + bom_no as parent, qty, + if(ifnull(bom_no, "")!="", 1, 0) as expandable + from `tabBOM Item` + where parent=%s + order by idx + """, parent, as_dict=True) From 878a18528c2f285e3c6a4ef95d4ae21a5ad5ce40 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 26 May 2015 12:40:57 +0530 Subject: [PATCH 11/14] Added BOM Browser link in Manufacturing home page --- erpnext/config/manufacturing.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/erpnext/config/manufacturing.py b/erpnext/config/manufacturing.py index f982dffc32..4fa8451f5e 100644 --- a/erpnext/config/manufacturing.py +++ b/erpnext/config/manufacturing.py @@ -55,6 +55,14 @@ def get_data(): "name": "BOM Replace Tool", "description": _("Replace Item / BOM in all BOMs"), }, + { + "type": "page", + "name": "bom-browser", + "icon": "icon-sitemap", + "label": _("BOM Browser"), + "description": _("Tree of Bill of Materials"), + "doctype": "BOM" + } ] }, { From c7cfa270cdd9b27a282d7487990082538985754a Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Tue, 26 May 2015 13:53:50 +0530 Subject: [PATCH 12/14] [minor] add import link in item price --- .../stock/doctype/item_price/item_price.js | 19 +++++++++++-------- .../stock/doctype/item_price/item_price.json | 15 ++++++++++++++- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/erpnext/stock/doctype/item_price/item_price.js b/erpnext/stock/doctype/item_price/item_price.js index 1807cc84a5..56bd185c0c 100644 --- a/erpnext/stock/doctype/item_price/item_price.js +++ b/erpnext/stock/doctype/item_price/item_price.js @@ -1,15 +1,18 @@ // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors // License: GNU General Public License v3. See license.txt -$.extend(cur_frm.cscript, { - onload: function () { +frappe.ui.form.on("Item Price", { + onload: function (frm) { // Fetch price list details - cur_frm.add_fetch("price_list", "buying", "buying"); - cur_frm.add_fetch("price_list", "selling", "selling"); - cur_frm.add_fetch("price_list", "currency", "currency"); + frm.add_fetch("price_list", "buying", "buying"); + frm.add_fetch("price_list", "selling", "selling"); + frm.add_fetch("price_list", "currency", "currency"); // Fetch item details - cur_frm.add_fetch("item_code", "item_name", "item_name"); - cur_frm.add_fetch("item_code", "description", "item_description"); + frm.add_fetch("item_code", "item_name", "item_name"); + frm.add_fetch("item_code", "description", "item_description"); + + frm.set_df_property("bulk_import_help", "options", + '' + __("Import in Bulk") + ''); } -}); \ No newline at end of file +}); diff --git a/erpnext/stock/doctype/item_price/item_price.json b/erpnext/stock/doctype/item_price/item_price.json index b8194d9cac..b4e84f174e 100644 --- a/erpnext/stock/doctype/item_price/item_price.json +++ b/erpnext/stock/doctype/item_price/item_price.json @@ -100,13 +100,26 @@ "label": "Item Description", "permlevel": 0, "read_only": 1 + }, + { + "fieldname": "section_break_12", + "fieldtype": "Section Break", + "permlevel": 0, + "precision": "" + }, + { + "fieldname": "bulk_import_help", + "fieldtype": "HTML", + "label": "Bulk Import Help", + "permlevel": 0, + "precision": "" } ], "icon": "icon-flag", "idx": 1, "in_create": 0, "istable": 0, - "modified": "2015-03-03 01:05:09.876025", + "modified": "2015-05-26 03:15:02.324161", "modified_by": "Administrator", "module": "Stock", "name": "Item Price", From d4c8dc29154e8f45a2ca5d133480a29703134663 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 26 May 2015 16:32:30 +0530 Subject: [PATCH 13/14] multiple minor fixes --- .../item_wise_purchase_register.py | 4 ++-- .../accounts/report/purchase_register/purchase_register.py | 4 ++-- erpnext/patches/v5_0/update_projects.py | 6 ++++-- .../print_formats/includes/item_table_description.html | 5 +++-- 4 files changed, 11 insertions(+), 8 deletions(-) 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 f54b860228..bcb128b972 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 @@ -3,7 +3,7 @@ from __future__ import unicode_literals import frappe -from frappe import msgprint, _ +from frappe import _ from frappe.utils import flt def execute(filters=None): @@ -23,7 +23,7 @@ def execute(filters=None): purchase_receipt = d.purchase_receipt elif d.po_detail: purchase_receipt = ", ".join(frappe.db.sql_list("""select distinct parent - from `tabPurchase Receipt Item` where docstatus=1 and po_detail=%s""", d.po_detail)) + from `tabPurchase Receipt Item` where docstatus=1 and prevdoc_detail_docname=%s""", d.po_detail)) expense_account = d.expense_account or aii_account_map.get(d.company) row = [d.item_code, d.item_name, d.item_group, d.parent, d.posting_date, d.supplier, diff --git a/erpnext/accounts/report/purchase_register/purchase_register.py b/erpnext/accounts/report/purchase_register/purchase_register.py index 7d34413347..a104ced598 100644 --- a/erpnext/accounts/report/purchase_register/purchase_register.py +++ b/erpnext/accounts/report/purchase_register/purchase_register.py @@ -144,7 +144,7 @@ def get_invoice_tax_map(invoice_list, invoice_expense_map, expense_accounts): return invoice_expense_map, invoice_tax_map def get_invoice_po_pr_map(invoice_list): - pi_items = frappe.db.sql("""select parent, purchase_order, purchase_receipt, po_detail + pi_items = frappe.db.sql("""select parent, purchase_order, purchase_receipt, po_detail, project_name from `tabPurchase Invoice Item` where parent in (%s) and (ifnull(purchase_order, '') != '' or ifnull(purchase_receipt, '') != '')""" % ', '.join(['%s']*len(invoice_list)), tuple([inv.name for inv in invoice_list]), as_dict=1) @@ -160,7 +160,7 @@ def get_invoice_po_pr_map(invoice_list): pr_list = [d.purchase_receipt] elif d.po_detail: pr_list = frappe.db.sql_list("""select distinct parent from `tabPurchase Receipt Item` - where docstatus=1 and po_detail=%s""", d.pr_detail) + where docstatus=1 and prevdoc_detail_docname=%s""", d.po_detail) if pr_list: invoice_po_pr_map.setdefault(d.parent, frappe._dict()).setdefault("purchase_receipt", pr_list) diff --git a/erpnext/patches/v5_0/update_projects.py b/erpnext/patches/v5_0/update_projects.py index 71a84a13cc..e234246623 100644 --- a/erpnext/patches/v5_0/update_projects.py +++ b/erpnext/patches/v5_0/update_projects.py @@ -10,13 +10,15 @@ def execute(): for m in frappe.get_all("Project Milestone", "*"): if (m.milestone and m.milestone_date and frappe.db.exists("Project", m.parent)): - frappe.get_doc({ + task = frappe.get_doc({ "doctype": "Task", "subject": m.milestone, "expected_start_date": m.milestone_date, "status": "Open" if m.status=="Pending" else "Closed", "project": m.parent, - }).insert(ignore_permissions=True) + }) + task.flags.ignore_mandatory = True + task.insert(ignore_permissions=True) # remove project milestone frappe.delete_doc("DocType", "Project Milestone") diff --git a/erpnext/templates/print_formats/includes/item_table_description.html b/erpnext/templates/print_formats/includes/item_table_description.html index f4c3d2c639..e0824a20f9 100644 --- a/erpnext/templates/print_formats/includes/item_table_description.html +++ b/erpnext/templates/print_formats/includes/item_table_description.html @@ -4,11 +4,12 @@ {%- endif %}
- {% if doc.in_format_data("item_code") -%} + {% if doc.in_format_data("item_code") and not doc.is_print_hide("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)) -%} + (not doc.in_format_data("item_code") or doc.is_print_hide("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 From e1637c4cae3058a734f1aa763cfe78e38aab938a Mon Sep 17 00:00:00 2001 From: Pratik Vyas Date: Tue, 26 May 2015 17:36:39 +0600 Subject: [PATCH 14/14] bumped to version 5.0.10 --- erpnext/__version__.py | 2 +- erpnext/hooks.py | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/__version__.py b/erpnext/__version__.py index 9821e97a0a..e6674df0f0 100644 --- a/erpnext/__version__.py +++ b/erpnext/__version__.py @@ -1,2 +1,2 @@ from __future__ import unicode_literals -__version__ = '5.0.9' +__version__ = '5.0.10' diff --git a/erpnext/hooks.py b/erpnext/hooks.py index f28bbb2119..54e2d0332f 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -5,7 +5,7 @@ app_publisher = "Frappe Technologies Pvt. Ltd. and Contributors" app_description = "Open Source Enterprise Resource Planning for Small and Midsized Organizations" app_icon = "icon-th" app_color = "#e74c3c" -app_version = "5.0.9" +app_version = "5.0.10" error_report_email = "support@erpnext.com" diff --git a/setup.py b/setup.py index 44d7bdeefe..111ec641e0 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = "5.0.9" +version = "5.0.10" with open("requirements.txt", "r") as f: install_requires = f.readlines()