From 81aec56531d7a9a3ac2038815d674710daeb8887 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 28 Mar 2013 10:34:46 +0530 Subject: [PATCH 1/5] [form] [usability] added min width on link fields in grid --- home/page/latest_updates/latest_updates.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home/page/latest_updates/latest_updates.js b/home/page/latest_updates/latest_updates.js index a7a148a6627..c0bad9405bb 100644 --- a/home/page/latest_updates/latest_updates.js +++ b/home/page/latest_updates/latest_updates.js @@ -1,5 +1,7 @@ erpnext.updates = [ ["27th March", ["Rename multiple items together. Go to Setup > Rename Tool"]], + ["26th March", ["Added project to Stock Ledger and Balance", + "Added Default Cash Account in Company."]], ["19th March", ["Sales and Purchase Return Tool deprecated. Use Stock Entry instead."]], ["12th March", ["Updates to website module. Added more options in Style Settings and Website Settings."]], ["5th March", ["Refactored Upload Attendance Tool"]], From 2fe802c81e40060a8efc429b91015cbf1d63bfa5 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 28 Mar 2013 16:26:11 +0530 Subject: [PATCH 2/5] [website] [cleanup] selectable images will now be relative urls (files/..) or full urls (http:..) --- patches/march_2013/p11_update_attach_files.py | 16 ++++++++++++++++ patches/patch_list.py | 1 + stock/doctype/item/item.py | 3 +-- .../about_us_settings/about_us_settings.py | 4 ---- website/doctype/blog_post/blog_post.py | 2 -- .../doctype/style_settings/custom_template.css | 10 ++-------- .../doctype/website_settings/website_settings.js | 1 - website/helpers/blog.py | 5 ----- website/helpers/product.py | 3 +-- website/helpers/slideshow.py | 3 --- website/templates/html/base.html | 9 ++------- website/utils.py | 11 +++-------- 12 files changed, 26 insertions(+), 42 deletions(-) create mode 100644 patches/march_2013/p11_update_attach_files.py diff --git a/patches/march_2013/p11_update_attach_files.py b/patches/march_2013/p11_update_attach_files.py new file mode 100644 index 00000000000..769463a590a --- /dev/null +++ b/patches/march_2013/p11_update_attach_files.py @@ -0,0 +1,16 @@ +import webnotes + +def execute(): + for f in webnotes.conn.sql("""select parent, fieldname + from tabDocField where options="attach_files:" """, as_dict=1): + if webnotes.conn.get_value("DocType", f.parent, "issingle"): + fname = webnotes.conn.get_value(f.parent, None, f.fieldname) + if fname: + if not (fname.startswith("http") or fname.startswith("files")): + webnotes.conn.set_value(f.parent, None, f.fieldname, "files/" + fname) + else: + webnotes.conn.sql("""update `tab%(parent)s` + set %(fieldname)s = + if(substr(%(fieldname)s,0,4)='http' or substr(%(fieldname)s, 0, 5)='files', + %(fieldname)s, + concat('files/', %(fieldname)s))""" % f) \ No newline at end of file diff --git a/patches/patch_list.py b/patches/patch_list.py index 2ea10cd3088..5502385b2f3 100644 --- a/patches/patch_list.py +++ b/patches/patch_list.py @@ -224,4 +224,5 @@ patch_list = [ "execute:webnotes.conn.set_value('Email Settings', None, 'send_print_in_body_and_attachment', 1)", "patches.march_2013.p09_unset_user_type_partner", "patches.march_2013.p10_set_fiscal_year_for_stock", + "patches.march_2013.p11_update_attach_files", ] \ No newline at end of file diff --git a/stock/doctype/item/item.py b/stock/doctype/item/item.py index 931b7762d39..802771cce1c 100644 --- a/stock/doctype/item/item.py +++ b/stock/doctype/item/item.py @@ -235,9 +235,8 @@ class DocType(DocListController): clear_cache(self.doc.page_name) def prepare_template_args(self): - from website.helpers.product import get_parent_item_groups, url_for_website + from website.helpers.product import get_parent_item_groups self.parent_groups = get_parent_item_groups(self.doc.item_group) + [{"name":self.doc.name}] - self.doc.website_image = url_for_website(self.doc.website_image) self.doc.title = self.doc.item_name if self.doc.slideshow: diff --git a/website/doctype/about_us_settings/about_us_settings.py b/website/doctype/about_us_settings/about_us_settings.py index e291aa85d00..fb3dcc915d1 100644 --- a/website/doctype/about_us_settings/about_us_settings.py +++ b/website/doctype/about_us_settings/about_us_settings.py @@ -2,7 +2,6 @@ from __future__ import unicode_literals import webnotes -from website.utils import url_for_website class DocType: def __init__(self, d, dl): @@ -14,9 +13,6 @@ class DocType: def get_args(): obj = webnotes.get_obj("About Us Settings") - for d in obj.doclist.get({"doctype":"About Us Team Member"}): - if not "/" in d.image_link: - d.image_link = "files/" + d.image_link return { "obj": obj } \ No newline at end of file diff --git a/website/doctype/blog_post/blog_post.py b/website/doctype/blog_post/blog_post.py index ff6cc9931e4..90f72f205ba 100644 --- a/website/doctype/blog_post/blog_post.py +++ b/website/doctype/blog_post/blog_post.py @@ -78,8 +78,6 @@ class DocType: self.doc.content_html = self.doc.content if self.doc.blogger: self.doc.blogger_info = webnotes.doc("Blogger", self.doc.blogger).fields - if self.doc.blogger_info.avatar and not "/" in self.doc.blogger_info.avatar: - self.doc.blogger_info.avatar = "files/" + self.doc.blogger_info.avatar self.doc.description = self.doc.blog_intro or self.doc.content[:140] diff --git a/website/doctype/style_settings/custom_template.css b/website/doctype/style_settings/custom_template.css index fcb2276ca05..f055b782feb 100644 --- a/website/doctype/style_settings/custom_template.css +++ b/website/doctype/style_settings/custom_template.css @@ -4,7 +4,7 @@ body { {% if doc.background_image %} - background: url("../files/{{ doc.background_image }}") repeat; + background: url("../{{ doc.background_image }}") repeat; {% elif doc.background_color %} background-color: #{{ doc.background_color }}; background-image: none; @@ -67,16 +67,10 @@ div.web-footer, div.web-footer a { /* Bootstrap Navbar */ .navbar-inverse .navbar-inner { + box-shadow: none; background-color: #{{ doc.top_bar_background or "444444"}}; background-repeat: repeat-x; background-image: none; -} - -.navbar-inner { - box-shadow: none; -} - -.navbar-inner { border-bottom: 1px solid {% if doc.top_bar_background == doc.page_background -%} #{{ get_hex_shade(doc.page_background or "ffffff", 15) }}; {%- else -%} diff --git a/website/doctype/website_settings/website_settings.js b/website/doctype/website_settings/website_settings.js index 67e494154f7..5858926ce22 100644 --- a/website/doctype/website_settings/website_settings.js +++ b/website/doctype/website_settings/website_settings.js @@ -48,7 +48,6 @@ cur_frm.cscript.set_banner_from_image = function(doc) { msgprint(wn._("Select a Banner Image first.")); } var src = doc.banner_image; - if(src.indexOf("/")==-1) src = "files/" + src; cur_frm.set_value("banner_html", ""); } \ No newline at end of file diff --git a/website/helpers/blog.py b/website/helpers/blog.py index 1f25ac0145e..404435332c1 100644 --- a/website/helpers/blog.py +++ b/website/helpers/blog.py @@ -46,8 +46,6 @@ def get_blog_list(start=0, by=None, category=None): if not res['content']: res['content'] = website.utils.get_html(res['page_name']) res['content'] = res['content'][:140] - if res.avatar and not "/" in res.avatar: - res.avatar = "files/" + res.avatar return result @@ -133,9 +131,6 @@ def get_blog_template_args(): def get_writers_args(): bloggers = webnotes.conn.sql("""select * from `tabBlogger` order by posts desc""", as_dict=1) - for blogger in bloggers: - if blogger.avatar and not "/" in blogger.avatar: - blogger.avatar = "files/" + blogger.avatar args = { "bloggers": bloggers, diff --git a/website/helpers/product.py b/website/helpers/product.py index ef433b1a29d..f79d2070c36 100644 --- a/website/helpers/product.py +++ b/website/helpers/product.py @@ -5,7 +5,7 @@ from __future__ import unicode_literals import webnotes from webnotes.utils import cstr -from website.utils import build_html, url_for_website, delete_page_cache +from website.utils import build_html, delete_page_cache @webnotes.whitelist(allow_guest=True) @@ -90,7 +90,6 @@ def scrub_item_for_list(r): r.website_description = "No description given" if len(r.website_description.split(" ")) > 24: r.website_description = " ".join(r.website_description.split(" ")[:24]) + "..." - r.website_image = url_for_website(r.website_image) def get_parent_item_groups(item_group_name): item_group = webnotes.doc("Item Group", item_group_name) diff --git a/website/helpers/slideshow.py b/website/helpers/slideshow.py index 0afd80a0a3d..4c64c55c856 100644 --- a/website/helpers/slideshow.py +++ b/website/helpers/slideshow.py @@ -20,7 +20,4 @@ def get_slideshow(obj): slideshow = webnotes.bean("Website Slideshow", obj.doc.slideshow) obj.slides = slideshow.doclist.get({"doctype":"Website Slideshow Item"}) obj.doc.slideshow_header = slideshow.doc.header or "" - for s in obj.slides: - if s.image and not s.image.lower().startswith("http"): - s.image = "files/" + s.image \ No newline at end of file diff --git a/website/templates/html/base.html b/website/templates/html/base.html index 6889d6707a6..cfba1a5ca0a 100644 --- a/website/templates/html/base.html +++ b/website/templates/html/base.html @@ -10,13 +10,8 @@ - {%- if favicon %} - - - {% else %} - - - {% endif -%} + + {% if description -%} {%- endif %} diff --git a/website/utils.py b/website/utils.py index 14e3e13cda3..252885983be 100644 --- a/website/utils.py +++ b/website/utils.py @@ -192,6 +192,7 @@ def get_source_doc(page_name): return None, None def get_outer_env(page_name, args): + from webnotes.utils import get_request_site_address from urllib import quote @@ -238,7 +239,7 @@ def get_outer_env(page_name, args): args.update(ret) settings = webnotes.doc("Website Settings", "Website Settings") - for k in ["banner_html", "brand_html", "copyright", "address", "twitter_share_via" + for k in ["banner_html", "brand_html", "copyright", "address", "twitter_share_via", "favicon", "facebook_share", "google_plus_one", "twitter_share", "linked_in_share"]: if k in settings.fields: args[k] = settings.fields.get(k) @@ -280,13 +281,7 @@ def get_all_pages(): def delete_page_cache(page_name): if page_name: webnotes.cache().delete_value("page:" + page_name) - -def url_for_website(url): - if url and not url.lower().startswith("http"): - return "files/" + url - else: - return url - + def get_hex_shade(color, percent): def p(c): From 8c45420f19dbce12a343bb5edffef32fed1f9d8a Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Thu, 28 Mar 2013 16:40:30 +0530 Subject: [PATCH 3/5] fixes in gross profit report --- accounts/report/gross_profit/gross_profit.py | 6 +++--- stock/doctype/delivery_note/delivery_note.py | 1 + stock/utils.py | 5 ++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/accounts/report/gross_profit/gross_profit.py b/accounts/report/gross_profit/gross_profit.py index 7f6354b6ccc..9300548550a 100644 --- a/accounts/report/gross_profit/gross_profit.py +++ b/accounts/report/gross_profit/gross_profit.py @@ -25,12 +25,12 @@ def execute(filters=None): item_sales_bom.get(row.parenttype, {}).get(row.name, webnotes._dict())) buying_amount = buying_amount > 0 and buying_amount or 0 - + + gross_profit = selling_amount - buying_amount if selling_amount: - gross_profit = selling_amount - buying_amount gross_profit_percent = (gross_profit / selling_amount) * 100.0 else: - gross_profit = gross_profit_percent = 0.0 + gross_profit_percent = 0.0 icon = """""" \ % ("/".join(["#Form", row.parenttype, row.name]),) diff --git a/stock/doctype/delivery_note/delivery_note.py b/stock/doctype/delivery_note/delivery_note.py index ded689734fb..daf7d615194 100644 --- a/stock/doctype/delivery_note/delivery_note.py +++ b/stock/doctype/delivery_note/delivery_note.py @@ -366,6 +366,7 @@ class DocType(SellingController): # Reduce actual qty from warehouse self.make_sl_entry(d, d['warehouse'], - flt(d['qty']) , 0, update_stock) + get_obj('Stock Ledger', 'Stock Ledger').update_stock(self.values) diff --git a/stock/utils.py b/stock/utils.py index d75c1d438bc..a2541dc69e9 100644 --- a/stock/utils.py +++ b/stock/utils.py @@ -171,7 +171,7 @@ def get_buying_amount(item_code, warehouse, qty, voucher_type, voucher_no, vouch buying_amount = 0.0 for bom_item in item_sales_bom[item_code]: if bom_item.get("parent_detail_docname")==voucher_detail_no: - buying_amount += _get_buying_amount(voucher_type, voucher_no, "[** No Item Row **]", + buying_amount += _get_buying_amount(voucher_type, voucher_no, voucher_detail_no, bom_item.item_code, bom_item.warehouse or warehouse, bom_item.total_qty or (bom_item.qty * qty), stock_ledger_entries) return buying_amount @@ -187,8 +187,7 @@ def _get_buying_amount(voucher_type, voucher_no, item_row, item_code, warehouse, for i, sle in enumerate(relevant_stock_ledger_entries): if sle.voucher_type == voucher_type and sle.voucher_no == voucher_no and \ - ((sle.voucher_detail_no == item_row) or (sle.voucher_type != "Stock Reconciliation" - and flt(sle.qty) == qty)): + sle.voucher_detail_no == item_row: previous_stock_value = len(relevant_stock_ledger_entries) > i+1 and \ flt(relevant_stock_ledger_entries[i+1].stock_value) or 0.0 From acfab66239681e7adcc53d46cb7e1ac8c6d02527 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 28 Mar 2013 16:47:47 +0530 Subject: [PATCH 4/5] [patch] [fix] substr starts with 1 --- patches/march_2013/p11_update_attach_files.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/patches/march_2013/p11_update_attach_files.py b/patches/march_2013/p11_update_attach_files.py index 769463a590a..ef39ce89f8a 100644 --- a/patches/march_2013/p11_update_attach_files.py +++ b/patches/march_2013/p11_update_attach_files.py @@ -11,6 +11,6 @@ def execute(): else: webnotes.conn.sql("""update `tab%(parent)s` set %(fieldname)s = - if(substr(%(fieldname)s,0,4)='http' or substr(%(fieldname)s, 0, 5)='files', + if(substr(%(fieldname)s,1,4)='http' or substr(%(fieldname)s,1,5)='files', %(fieldname)s, concat('files/', %(fieldname)s))""" % f) \ No newline at end of file From 7ab3267886eb57087ad43ebfe92f2ae37e53a195 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 28 Mar 2013 17:09:23 +0530 Subject: [PATCH 5/5] updated item group limit to 100 --- setup/doctype/item_group/item_group.py | 2 +- website/templates/html/product_group.html | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/setup/doctype/item_group/item_group.py b/setup/doctype/item_group/item_group.py index ba4ea77504b..827eed4f3e1 100644 --- a/setup/doctype/item_group/item_group.py +++ b/setup/doctype/item_group/item_group.py @@ -74,7 +74,7 @@ class DocType(DocTypeNestedSet): for d in self.doc.sub_groups: d.count = get_group_item_count(d.name) - self.doc.items = get_product_list_for_group(product_group = self.doc.name, limit=20) + self.doc.items = get_product_list_for_group(product_group = self.doc.name, limit=100) self.parent_groups = get_parent_item_groups(self.doc.name) self.doc.title = self.doc.name diff --git a/website/templates/html/product_group.html b/website/templates/html/product_group.html index 2e80c43c583..510f9946ac8 100644 --- a/website/templates/html/product_group.html +++ b/website/templates/html/product_group.html @@ -29,8 +29,8 @@ {{ item }} {% endfor %} - {% if len(items)==20 %} -
Showing top 20
+ {% if len(items)==100 %} +
Showing top 100 items.
{% endif %} {% else %}
No items listed.