diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 4758325195..10af7b6812 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -264,3 +264,4 @@ erpnext.patches.v7_0.update_party_status
erpnext.patches.v7_0.update_item_projected
erpnext.patches.v7_0.fix_duplicate_icons
erpnext.patches.v7_0.remove_features_setup
+erpnext.patches.v7_0.update_home_page
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/remove_features_setup.py b/erpnext/patches/v7_0/remove_features_setup.py
index 2e7f893ae9..60d19265a0 100644
--- a/erpnext/patches/v7_0/remove_features_setup.py
+++ b/erpnext/patches/v7_0/remove_features_setup.py
@@ -1,11 +1,13 @@
import frappe
from erpnext.setup.install import create_compact_item_print_custom_field
+from frappe.utils import cint
def execute():
- if not frappe.db.get_value("Features Setup", None, "fs_item_barcode"):
- # hide barcode fields
- frappe.make_property_setter(dict(fieldname='barcode', property='hidden', value=1))
+ frappe.reload_doctype('Stock Settings')
+ stock_settings = frappe.get_doc('Stock Settings', 'Stock Settings')
+ stock_settings.show_barcode_field = cint(frappe.db.get_value("Features Setup", None, "fs_item_barcode"))
+ stock_settings.save()
create_compact_item_print_custom_field()
diff --git a/erpnext/patches/v7_0/update_home_page.py b/erpnext/patches/v7_0/update_home_page.py
new file mode 100644
index 0000000000..d13e28a305
--- /dev/null
+++ b/erpnext/patches/v7_0/update_home_page.py
@@ -0,0 +1,18 @@
+import frappe
+import erpnext
+
+def execute():
+ website_settings = frappe.get_doc('Website Settings', 'Website Settings')
+ if frappe.db.exists('Web Page', website_settings.home_page):
+ header = frappe.db.get_value('Web Page', website_settings.home_page, 'header')
+ print header
+ if header and header.startswith("
"):
+ homepage = frappe.get_doc('Homepage', 'Homepage')
+ homepage.company = erpnext.get_default_company()
+ homepage.tagline = header.split('
')[1].split('
')[0]
+ homepage.setup_items()
+ homepage.save()
+
+ website_settings.home_page = 'home'
+ website_settings.save()
+
diff --git a/erpnext/portal/doctype/homepage/homepage.json b/erpnext/portal/doctype/homepage/homepage.json
index c927e31c07..cbe58c7bf2 100644
--- a/erpnext/portal/doctype/homepage/homepage.json
+++ b/erpnext/portal/doctype/homepage/homepage.json
@@ -135,7 +135,7 @@
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
- "reqd": 1,
+ "reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0,
@@ -151,7 +151,7 @@
"issingle": 1,
"istable": 0,
"max_attachments": 0,
- "modified": "2016-05-02 18:03:13.165280",
+ "modified": "2016-05-12 14:19:41.689519",
"modified_by": "Administrator",
"module": "Portal",
"name": "Homepage",
diff --git a/erpnext/portal/doctype/homepage/homepage.py b/erpnext/portal/doctype/homepage/homepage.py
index 6f55a59e62..a8172303da 100644
--- a/erpnext/portal/doctype/homepage/homepage.py
+++ b/erpnext/portal/doctype/homepage/homepage.py
@@ -7,4 +7,19 @@ import frappe
from frappe.model.document import Document
class Homepage(Document):
- pass
+ def validate(self):
+ if not self.products:
+ self.setup_items()
+ if not self.description:
+ self.description = frappe._("This is an example website auto-generated from ERPNext")
+
+ def setup_items(self):
+ for d in frappe.get_all('Item', fields=['name', 'item_name', 'description', 'image'],
+ filters={'show_in_website': 1}, limit=3):
+
+ # set missing routes (?)
+ doc = frappe.get_doc('Item', d.name)
+ doc.save()
+ self.append('products', dict(item_code=d.name,
+ item_name=d.item_name, description=d.description, image=d.image))
+
diff --git a/erpnext/public/css/website.css b/erpnext/public/css/website.css
index de0b02bb31..6c239c5799 100644
--- a/erpnext/public/css/website.css
+++ b/erpnext/public/css/website.css
@@ -23,7 +23,8 @@
background-size: cover;
background-repeat: no-repeat;
background-position: center top;
- border-radius: 4px;
+ border-radius-top: 4px;
+ border-radius-right: 4px;
}
.product-image.missing-image {
width: 100%;
@@ -32,7 +33,8 @@
background-size: cover;
background-repeat: no-repeat;
background-position: center top;
- border-radius: 4px;
+ border-radius-top: 4px;
+ border-radius-right: 4px;
position: relative;
background-color: #EBEFF2;
}
@@ -124,6 +126,12 @@
border-top: 1px solid #d1d8dd;
padding-top: 15px;
}
+.order-container .tax-grand-total {
+ display: inline-block;
+ font-size: 16px;
+ font-weight: bold;
+ margin-top: 5px;
+}
.cart-container {
margin: 50px 0px;
}
@@ -228,7 +236,7 @@
height: 75px;
}
.product-image-wrapper {
- padding-bottom: 30px;
+ padding-bottom: 40px;
}
.featured-product-heading,
.all-products {
diff --git a/erpnext/public/less/website.less b/erpnext/public/less/website.less
index 357bb8a290..37e3616d35 100644
--- a/erpnext/public/less/website.less
+++ b/erpnext/public/less/website.less
@@ -32,7 +32,8 @@
background-size: cover;
background-repeat: no-repeat;
background-position: center top;
- border-radius: 4px;
+ border-radius-top: 4px;
+ border-radius-right: 4px;
}
.product-image.missing-image {
@@ -157,6 +158,13 @@
border-top: 1px solid @border-color;
padding-top: 15px;
}
+
+ .tax-grand-total {
+ display: inline-block;
+ font-size: 16px;
+ font-weight: bold;
+ margin-top: 5px;
+ }
}
.cart-container {
@@ -200,7 +208,7 @@
border-top: 1px solid @border-color;
padding-top: 15px;
}
-
+
.cart-addresses {
margin-top: 50px;
}
@@ -209,43 +217,43 @@
.cart-items .cart-dropdown,
.item_name_dropdown {
display:none;
-
+
}
.cart-dropdown-container {
width: 320px;
padding: 15px;
-
+
.item-price {
display: block !important;
padding-bottom: 10px;
}
-
+
.cart-item-header {
border-bottom: 1px solid #d1d8dd;
}
-
+
.cart-items .cart-dropdown {
display:block;
margin-top:15px;
}
-
+
.item_name_dropdown {
display:block;
}
-
+
.item-description,
.cart-items .checkout,
.item_name_and_description {
display: none;
}
-
+
.checkout-btn {
padding-top:25px;
}
.col-name-description {
margin-bottom:8px;
}
-
+
}
.product-list-link {
@@ -281,20 +289,20 @@
margin-top: 30px;
}
-.product-image-img {
+.product-image-img {
border: 1px solid @light-border-color;
border-radius: 3px;
}
-.product-text {
+.product-text {
border-top: 1px solid @light-border-color;
padding: 15px;
word-wrap: break-word;
height: 75px;
}
-.product-image-wrapper {
- padding-bottom: 30px;
+.product-image-wrapper {
+ padding-bottom: 40px;
}
@@ -302,11 +310,11 @@
text-transform: uppercase;
letter-spacing: 0.5px;
font-size: 12px;
- font-weight: 500;
+ font-weight: 500;
}
.all-products {
- font-weight: 300;
+ font-weight: 300;
padding-left: 25px;
padding-right: 25px;
padding-top: 10px;
diff --git a/erpnext/setup/doctype/item_group/item_group.py b/erpnext/setup/doctype/item_group/item_group.py
index d7dae6809a..dc30de14f2 100644
--- a/erpnext/setup/doctype/item_group/item_group.py
+++ b/erpnext/setup/doctype/item_group/item_group.py
@@ -74,7 +74,7 @@ def get_product_list_for_group(product_group=None, start=0, limit=10, search=Non
child_groups = ", ".join(['"' + i[0] + '"' for i in get_child_groups(product_group)])
# base query
- query = """select name, item_name, item_code, page_name, website_image, thumbnail, item_group,
+ query = """select name, item_name, item_code, page_name, image, website_image, thumbnail, item_group,
description, web_long_description as website_description,
concat(parent_website_route, "/", page_name) as route
from `tabItem`
diff --git a/erpnext/setup/page/welcome_to_erpnext/welcome_to_erpnext.html b/erpnext/setup/page/welcome_to_erpnext/welcome_to_erpnext.html
index fe8a963bc9..cd4d9771c4 100644
--- a/erpnext/setup/page/welcome_to_erpnext/welcome_to_erpnext.html
+++ b/erpnext/setup/page/welcome_to_erpnext/welcome_to_erpnext.html
@@ -22,7 +22,7 @@
diff --git a/erpnext/setup/setup_wizard/data/sample_home_page.css b/erpnext/setup/setup_wizard/data/sample_home_page.css
deleted file mode 100644
index 723bcb9203..0000000000
--- a/erpnext/setup/setup_wizard/data/sample_home_page.css
+++ /dev/null
@@ -1,40 +0,0 @@
-.page-header {
- color: white;
- background: #263248;
- text-align: center;
- padding: 80px 0px;
-}
-
-.page-header .page-header-left {
- width: 100%;
-}
-
-.page-header h1 {
- color: white;
-}
-
-.slide h2 {
- margin-bottom: 30px;
-}
-
-.slides {
- margin-top: -15px;
-}
-
-.slide {
- padding: 30px 40px;
- max-width: 800px;
- margin: auto;
-}
-
-.container {
- max-width: 900px;
-}
-
-.img-wrapper {
- text-align: center;
- padding: 30px;
- background-color: #eee;
- border-radius: 5px;
- margin-bottom: 15px;
-}
diff --git a/erpnext/setup/setup_wizard/data/sample_home_page.html b/erpnext/setup/setup_wizard/data/sample_home_page.html
deleted file mode 100644
index 990bc1eb29..0000000000
--- a/erpnext/setup/setup_wizard/data/sample_home_page.html
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
{{ _("Awesome Products") }}
-
-
-
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.
-
-
-
-
{{ _("Awesome Services") }}
-
-
-
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.
-
-
-
-
- Explore
-
-
diff --git a/erpnext/setup/setup_wizard/default_website.py b/erpnext/setup/setup_wizard/default_website.py
index e8d4eb4338..d13767648d 100644
--- a/erpnext/setup/setup_wizard/default_website.py
+++ b/erpnext/setup/setup_wizard/default_website.py
@@ -8,34 +8,27 @@ from frappe import _
from frappe.utils import nowdate
class website_maker(object):
- def __init__(self, company, tagline, user):
- self.company = company
- self.tagline = tagline
- self.user = user
+ def __init__(self, args):
+ self.args = args
+ self.company = args.company_name
+ self.tagline = args.company_tagline
+ self.user = args.name
self.make_web_page()
self.make_website_settings()
self.make_blog()
def make_web_page(self):
# home page
- self.webpage = frappe.get_doc({
- "doctype": "Web Page",
- "title": self.company,
- "published": 1,
- "header": "
{0}
".format(self.tagline or "Headline")+\
- '
'+_("This is an example website auto-generated from ERPNext")+"
"+\
- '
Login
',
- "description": self.company + ":" + (self.tagline or ""),
- "css": frappe.get_template("setup/setup_wizard/data/sample_home_page.css").render(),
- "main_section": frappe.get_template("setup/setup_wizard/data/sample_home_page.html").render({
- "company": self.company, "tagline": (self.tagline or "")
- })
- }).insert()
+ homepage = frappe.get_doc('Homepage', 'Homepage')
+ homepage.company = self.company
+ homepage.tag_line = self.tagline
+ homepage.setup_items()
+ homepage.save()
def make_website_settings(self):
# update in home page in settings
website_settings = frappe.get_doc("Website Settings", "Website Settings")
- website_settings.home_page = self.webpage.name
+ website_settings.home_page = 'home'
website_settings.brand_html = self.company
website_settings.copyright = self.company
website_settings.top_bar_items = []
@@ -88,5 +81,5 @@ def test():
frappe.delete_doc("Blog Post", "welcome")
frappe.delete_doc("Blogger", "administrator")
frappe.delete_doc("Blog Category", "general")
- website_maker("Test Company", "Better Tools for Everyone", "Administrator")
+ website_maker({'company':"Test Company", 'company_tagline': "Better Tools for Everyone", 'name': "Administrator"})
frappe.db.commit()
diff --git a/erpnext/setup/setup_wizard/domainify.py b/erpnext/setup/setup_wizard/domainify.py
index df4afd427b..8adcf85262 100644
--- a/erpnext/setup/setup_wizard/domainify.py
+++ b/erpnext/setup/setup_wizard/domainify.py
@@ -22,7 +22,9 @@ domains = {
'remove_roles': ['Manufacturing User', 'Manufacturing Manager', 'Maintenance User'],
'properties': [
{'doctype': 'Item', 'fieldname': 'is_stock_item', 'property': 'default', 'value': 0},
- {'fieldname': 'barcode', 'property': 'hidden', 'value': 1}
+ ],
+ 'set_value': [
+ ['Stock Settings', 'show_barcode', 0]
]
}
}
diff --git a/erpnext/setup/setup_wizard/setup_wizard.py b/erpnext/setup/setup_wizard/setup_wizard.py
index a360d4f689..48766bf0f5 100644
--- a/erpnext/setup/setup_wizard/setup_wizard.py
+++ b/erpnext/setup/setup_wizard/setup_wizard.py
@@ -35,7 +35,7 @@ def setup_complete(args=None):
frappe.local.message_log = []
setup_domain(args.get('domain'))
- website_maker(args.company_name.strip(), args.company_tagline, args.name)
+ website_maker(args)
create_logo(args)
frappe.db.commit()
diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py
index d403b18196..9e48feda73 100644
--- a/erpnext/stock/doctype/item/item.py
+++ b/erpnext/stock/doctype/item/item.py
@@ -144,22 +144,22 @@ class Item(WebsiteGenerator):
return
# find if website image url exists as public
- file = frappe.get_all("File", filters={
+ file_doc = frappe.get_all("File", filters={
"file_url": self.website_image
}, fields=["name", "is_private"], order_by="is_private asc", limit_page_length=1)
-
-
- if file:
- file = file[0]
- if not file:
+
+ if file_doc:
+ file_doc = file_doc[0]
+
+ if not file_doc:
if not auto_set_website_image:
frappe.msgprint(_("Website Image {0} attached to Item {1} cannot be found")
.format(self.website_image, self.name))
self.website_image = None
- elif file.is_private:
+ elif file_doc.is_private:
if not auto_set_website_image:
frappe.msgprint(_("Website Image should be a public file or website URL"))
@@ -508,21 +508,21 @@ class Item(WebsiteGenerator):
clear_cache(self.page_name)
frappe.db.set_value("Item", newdn, "item_code", newdn)
-
+
if merge:
self.set_last_purchase_rate(newdn)
self.recalculate_bin_qty(newdn)
-
+
for dt in ("Sales Taxes and Charges", "Purchase Taxes and Charges"):
- for d in frappe.db.sql("""select name, item_wise_tax_detail from `tab{0}`
+ for d in frappe.db.sql("""select name, item_wise_tax_detail from `tab{0}`
where ifnull(item_wise_tax_detail, '') != ''""".format(dt), as_dict=1):
-
+
item_wise_tax_detail = json.loads(d.item_wise_tax_detail)
if olddn in item_wise_tax_detail:
item_wise_tax_detail[newdn] = item_wise_tax_detail[olddn]
item_wise_tax_detail.pop(olddn)
-
- frappe.db.set_value(dt, d.name, "item_wise_tax_detail",
+
+ frappe.db.set_value(dt, d.name, "item_wise_tax_detail",
json.dumps(item_wise_tax_detail), update_modified=False)
def set_last_purchase_rate(self, newdn):
@@ -620,8 +620,8 @@ class Item(WebsiteGenerator):
variant = get_variant(self.variant_of, args, self.name)
if variant:
frappe.throw(_("Item variant {0} exists with same attributes")
- .format(variant), ItemVariantExistsError)
-
+ .format(variant), ItemVariantExistsError)
+
@frappe.whitelist()
def get_dashboard_data(name):
diff --git a/erpnext/stock/doctype/stock_settings/stock_settings.json b/erpnext/stock/doctype/stock_settings/stock_settings.json
index d56daf5630..4a6e6e919b 100644
--- a/erpnext/stock/doctype/stock_settings/stock_settings.json
+++ b/erpnext/stock/doctype/stock_settings/stock_settings.json
@@ -2,6 +2,7 @@
"allow_copy": 0,
"allow_import": 0,
"allow_rename": 0,
+ "beta": 0,
"creation": "2013-06-24 16:37:54",
"custom": 0,
"description": "Settings",
@@ -184,6 +185,32 @@
"set_only_once": 0,
"unique": 0
},
+ {
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "default": "1",
+ "fieldname": "show_barcode_field",
+ "fieldtype": "Check",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_list_view": 0,
+ "label": "Show Barcode Field",
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
{
"allow_on_submit": 0,
"bold": 0,
@@ -487,7 +514,7 @@
"issingle": 1,
"istable": 0,
"max_attachments": 0,
- "modified": "2016-04-15 06:51:47.497431",
+ "modified": "2016-05-12 12:28:29.374452",
"modified_by": "Administrator",
"module": "Stock",
"name": "Stock Settings",
@@ -517,5 +544,6 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
+ "sort_order": "ASC",
"track_seen": 0
}
\ No newline at end of file
diff --git a/erpnext/stock/doctype/stock_settings/stock_settings.py b/erpnext/stock/doctype/stock_settings/stock_settings.py
index bd71d461e3..7c67a652d1 100644
--- a/erpnext/stock/doctype/stock_settings/stock_settings.py
+++ b/erpnext/stock/doctype/stock_settings/stock_settings.py
@@ -6,11 +6,9 @@
from __future__ import unicode_literals
import frappe
from frappe import _
-from frappe.utils import cint
from frappe.model.document import Document
class StockSettings(Document):
-
def validate(self):
for key in ["item_naming_by", "item_group", "stock_uom", "allow_negative_stock"]:
frappe.db.set_default(key, self.get(key, ""))
@@ -25,4 +23,6 @@ class StockSettings(Document):
self.stock_frozen_upto_days = stock_frozen_limit
frappe.msgprint (_("`Freeze Stocks Older Than` should be smaller than %d days.") %stock_frozen_limit)
-
+ # show/hide barcode field
+ frappe.make_property_setter({'fieldname': 'barcode', 'property': 'hidden',
+ 'value': 0 if self.show_barcode_field else 1})
diff --git a/erpnext/templates/generators/item.html b/erpnext/templates/generators/item.html
index e074fa3cfa..cf6f89bb92 100644
--- a/erpnext/templates/generators/item.html
+++ b/erpnext/templates/generators/item.html
@@ -20,7 +20,7 @@
{{ d.item_code }}
diff --git a/erpnext/templates/includes/order/order_taxes.html b/erpnext/templates/includes/order/order_taxes.html
index 564e31ecf0..24ae088c75 100644
--- a/erpnext/templates/includes/order/order_taxes.html
+++ b/erpnext/templates/includes/order/order_taxes.html
@@ -13,9 +13,9 @@
{% endfor %}