fixed conflict
This commit is contained in:
commit
4ecc785aab
@ -2,16 +2,16 @@
|
|||||||
{
|
{
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"creation": "2012-11-23 16:46:22",
|
"creation": "2012-11-28 11:24:29",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"modified": "2012-11-26 10:11:53"
|
"modified": "2012-12-19 11:54:55"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "__common__",
|
"name": "__common__",
|
||||||
"ref_doctype": "Sales Invoice",
|
"ref_doctype": "Sales Invoice",
|
||||||
"doctype": "Report",
|
"doctype": "Report",
|
||||||
"is_standard": "Yes",
|
"is_standard": "Yes",
|
||||||
"query": "select \n `tabDelivery Note`.`name` as \"Delivery Note:Link/Delivery Note:120\",\n`tabDelivery Note`.`customer` as \"Customer:Link/Customer:120\",\n`tabDelivery Note`.`status` as \"Status\",\n `tabDelivery Note`.`posting_date` as \"Date:Date\",\n `tabDelivery Note Item`.item_code as \"Item:Link/Item:120\",\n `tabDelivery Note Item`.description as \"Description\",\n `tabDelivery Note Item`.qty as \"Qty:Float\",\n `tabDelivery Note Item`.billed_qty as \"Billed Qty:Float\"\nfrom\n `tabDelivery Note`, `tabDelivery Note Item`\nwhere\n `tabDelivery Note Item`.`parent` = `tabDelivery Note`.`name`\n and `tabDelivery Note`.docstatus = 1\n and ifnull(`tabDelivery Note Item`.billed_qty,0) < ifnull(`tabDelivery Note Item`.qty,0)\norder by `tabDelivery Note`.posting_date asc"
|
"query": "select \n `tabDelivery Note`.`name` as \"Delivery Note:Link/Delivery Note:120\",\n`tabDelivery Note`.`customer` as \"Customer:Link/Customer:120\",\n`tabDelivery Note`.`status` as \"Status\",\n `tabDelivery Note`.`posting_date` as \"Date:Date\",\n `tabDelivery Note Item`.item_code as \"Item:Link/Item:120\",\n `tabDelivery Note Item`.description as \"Description:Data:120\",\n `tabDelivery Note Item`.amount as \"Amount:Currency:110\",\n (`tabDelivery Note Item`.billed_amt * ifnull(`tabDelivery Note`.conversion_rate, 1)) as \"Billed Amount:Currency:110\",\n (ifnull(`tabDelivery Note Item`.amount,0) - (ifnull(`tabDelivery Note Item`.billed_amt,0) * ifnull(`tabDelivery Note`.conversion_rate, 1))) as \"Pending Amount:Currency:120\"\nfrom\n `tabDelivery Note`, `tabDelivery Note Item`\nwhere\n `tabDelivery Note Item`.`parent` = `tabDelivery Note`.`name`\n and `tabDelivery Note`.docstatus = 1\n and ifnull(`tabDelivery Note Item`.billed_amt,0) < ifnull(`tabDelivery Note Item`.export_amount,0)\norder by `tabDelivery Note`.posting_date asc"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Delivered Items To Be Billed",
|
"name": "Delivered Items To Be Billed",
|
||||||
|
@ -2,16 +2,16 @@
|
|||||||
{
|
{
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"creation": "2012-12-14 10:22:40",
|
"creation": "2012-12-14 14:27:05",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"modified": "2012-12-14 10:24:16"
|
"modified": "2012-12-19 11:52:26"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "__common__",
|
"name": "__common__",
|
||||||
"ref_doctype": "Sales Invoice",
|
"ref_doctype": "Sales Invoice",
|
||||||
"doctype": "Report",
|
"doctype": "Report",
|
||||||
"is_standard": "Yes",
|
"is_standard": "Yes",
|
||||||
"query": "select \n `tabSales Order`.`name` as \"Sales Order:Link/Sales Order:120\",\n `tabSales Order`.`customer` as \"Customer:Link/Customer:120\",\n `tabSales Order`.`status` as \"Status\",\n `tabSales Order`.`transaction_date` as \"Date:Date\",\n `tabSales Order Item`.item_code as \"Item:Link/Item:120\",\n `tabSales Order Item`.description as \"Description\",\n `tabSales Order Item`.qty as \"Qty:Float\",\n `tabSales Order Item`.billed_qty as \"Billed Qty:Float\"\nfrom\n `tabSales Order`, `tabSales Order Item`\nwhere\n `tabSales Order Item`.`parent` = `tabSales Order`.`name`\n and `tabSales Order`.docstatus = 1\n and ifnull(`tabSales Order Item`.billed_qty,0) < ifnull(`tabSales Order Item`.qty,0)\norder by `tabSales Order`.transaction_date asc"
|
"query": "select \n `tabSales Order`.`name` as \"Sales Order:Link/Sales Order:120\",\n `tabSales Order`.`customer` as \"Customer:Link/Customer:120\",\n `tabSales Order`.`status` as \"Status\",\n `tabSales Order`.`transaction_date` as \"Date:Date\",\n `tabSales Order Item`.item_code as \"Item:Link/Item:120\",\n `tabSales Order Item`.description as \"Description:Data:120\",\n `tabSales Order Item`.amount as \"Amount:Currency:110\",\n (`tabSales Order Item`.billed_amt * ifnull(`tabSales Order`.conversion_rate, 1)) as \"Billed Amount:Currency:110\",\n (ifnull(`tabSales Order Item`.amount, 0) - (ifnull(`tabSales Order Item`.billed_amt, 0) * ifnull(`tabSales Order`.conversion_rate, 1))) as \"Pending Amount:Currency:120\"\nfrom\n `tabSales Order`, `tabSales Order Item`\nwhere\n `tabSales Order Item`.`parent` = `tabSales Order`.`name`\n and `tabSales Order`.docstatus = 1\n and ifnull(`tabSales Order Item`.billed_amt,0) < ifnull(`tabSales Order Item`.export_amount,0)\norder by `tabSales Order`.transaction_date asc"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Ordered Items To Be Billed",
|
"name": "Ordered Items To Be Billed",
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"creation": "2012-12-10 10:25:20",
|
"creation": "2012-12-10 10:25:20",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"modified": "2012-12-18 11:06:53"
|
"modified": "2012-12-18 11:06:54"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"is_submittable": 1,
|
"is_submittable": 1,
|
||||||
|
@ -158,12 +158,12 @@ class DocType:
|
|||||||
""" Uncheck others if current one is selected as default,
|
""" Uncheck others if current one is selected as default,
|
||||||
update default bom in item master
|
update default bom in item master
|
||||||
"""
|
"""
|
||||||
|
webnotes.conn.set(self.doc, "is_default", cint(self.doc.is_default))
|
||||||
if self.doc.is_default and self.doc.is_active:
|
if self.doc.is_default and self.doc.is_active:
|
||||||
from webnotes.model.utils import set_default
|
from webnotes.model.utils import set_default
|
||||||
|
|
||||||
set_default(self.doc, "item")
|
set_default(self.doc, "item")
|
||||||
webnotes.conn.set_value("Item", self.doc.item, "default_bom", self.doc.name)
|
webnotes.conn.set_value("Item", self.doc.item, "default_bom", self.doc.name)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
if not self.doc.is_active:
|
if not self.doc.is_active:
|
||||||
webnotes.conn.set(self.doc, "is_default", 0)
|
webnotes.conn.set(self.doc, "is_default", 0)
|
||||||
@ -383,4 +383,4 @@ class DocType:
|
|||||||
and t2.docstatus = 1 and t1.docstatus =1 """, self.doc.name)
|
and t2.docstatus = 1 and t1.docstatus =1 """, self.doc.name)
|
||||||
if act_pbom and act_pbom[0][0]:
|
if act_pbom and act_pbom[0][0]:
|
||||||
msgprint("""Sorry cannot inactivate as BOM: %s is child
|
msgprint("""Sorry cannot inactivate as BOM: %s is child
|
||||||
of one or many other active parent BOMs""" % self.doc.name, raise_exception=1)
|
of one or many other active parent BOMs""" % self.doc.name, raise_exception=1)
|
||||||
|
@ -33,7 +33,7 @@ KBItemToolbar = function(args, kb) {
|
|||||||
|
|
||||||
this.make_timestamp = function() {
|
this.make_timestamp = function() {
|
||||||
this.line1.innerHTML = repl('By %(name)s | %(when)s', {
|
this.line1.innerHTML = repl('By %(name)s | %(when)s', {
|
||||||
name: wn.utils.full_name(this.det.first_name, this.det.last_name),
|
name: wn.user_info(this.det.owner).fullname,
|
||||||
when: wn.datetime.comment_when(this.det.modified)
|
when: wn.datetime.comment_when(this.det.modified)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -17,6 +17,9 @@
|
|||||||
|
|
||||||
cur_frm.cscript.refresh = function(doc, cdt, cdn) {
|
cur_frm.cscript.refresh = function(doc, cdt, cdn) {
|
||||||
cur_frm.cscript.set_root_readonly(doc);
|
cur_frm.cscript.set_root_readonly(doc);
|
||||||
|
cur_frm.add_custom_button("Item Group Tree", function() {
|
||||||
|
wn.set_route("Sales Browser", "Item Group");
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
cur_frm.cscript.set_root_readonly = function(doc) {
|
cur_frm.cscript.set_root_readonly = function(doc) {
|
||||||
|
@ -24,4 +24,21 @@ class DocType(DocTypeNestedSet):
|
|||||||
def __init__(self, doc, doclist=[]):
|
def __init__(self, doc, doclist=[]):
|
||||||
self.doc = doc
|
self.doc = doc
|
||||||
self.doclist = doclist
|
self.doclist = doclist
|
||||||
self.nsm_parent_field = 'parent_item_group';
|
self.nsm_parent_field = 'parent_item_group';
|
||||||
|
|
||||||
|
def on_update(self):
|
||||||
|
if self.doc.show_in_website:
|
||||||
|
# webpage updates
|
||||||
|
from website.utils import update_page_name
|
||||||
|
page_name = self.doc.name
|
||||||
|
if webnotes.conn.get_value("Website Settings", None,
|
||||||
|
"default_product_category")==self.doc.name:
|
||||||
|
page_name = "products"
|
||||||
|
|
||||||
|
update_page_name(self.doc, self.doc.name)
|
||||||
|
|
||||||
|
def prepare_template_args(self):
|
||||||
|
self.doc.sub_groups = webnotes.conn.sql("""select name, page_name
|
||||||
|
from `tabItem Group` where parent_item_group=%s
|
||||||
|
and ifnull(show_in_website,0)=1""", self.doc.name, as_dict=1)
|
||||||
|
|
@ -4,7 +4,7 @@
|
|||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"creation": "2012-12-07 15:15:28",
|
"creation": "2012-12-07 15:15:28",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"modified": "2012-12-17 15:00:01"
|
"modified": "2012-12-18 16:23:48"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"in_create": 1,
|
"in_create": 1,
|
||||||
@ -12,11 +12,13 @@
|
|||||||
"module": "Setup",
|
"module": "Setup",
|
||||||
"autoname": "field:item_group_name",
|
"autoname": "field:item_group_name",
|
||||||
"document_type": "Master",
|
"document_type": "Master",
|
||||||
"description": "Item Classification",
|
"allow_attach": 1,
|
||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"name": "__common__",
|
"name": "__common__",
|
||||||
"allow_rename": 1,
|
"allow_rename": 1,
|
||||||
"doctype": "DocType"
|
"description": "Item Classification",
|
||||||
|
"doctype": "DocType",
|
||||||
|
"max_attachments": 3
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "__common__",
|
"name": "__common__",
|
||||||
@ -49,33 +51,6 @@
|
|||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"reqd": 1
|
"reqd": 1
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"description": "Check this if you want to show in website",
|
|
||||||
"no_copy": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"doctype": "DocField",
|
|
||||||
"label": "Show in Website",
|
|
||||||
"fieldname": "show_in_website",
|
|
||||||
"fieldtype": "Check"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"depends_on": "show_in_website",
|
|
||||||
"doctype": "DocField",
|
|
||||||
"label": "Featured Items HTML",
|
|
||||||
"fieldname": "featured_items_html",
|
|
||||||
"fieldtype": "HTML",
|
|
||||||
"options": "<h4>Featured Items</h4>"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "Items Featured on the Item Group Page",
|
|
||||||
"depends_on": "show_in_website",
|
|
||||||
"doctype": "DocField",
|
|
||||||
"label": "Featured Items",
|
|
||||||
"fieldname": "featured_items",
|
|
||||||
"fieldtype": "Table",
|
|
||||||
"hidden": 1,
|
|
||||||
"options": "Featured Item"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
"label": "Page Name",
|
"label": "Page Name",
|
||||||
@ -112,6 +87,45 @@
|
|||||||
"reqd": 1,
|
"reqd": 1,
|
||||||
"options": "\nYes\nNo"
|
"options": "\nYes\nNo"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"doctype": "DocField",
|
||||||
|
"label": "Website Settings",
|
||||||
|
"fieldname": "sb9",
|
||||||
|
"fieldtype": "Section Break"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Check this if you want to show in website",
|
||||||
|
"no_copy": 0,
|
||||||
|
"search_index": 0,
|
||||||
|
"doctype": "DocField",
|
||||||
|
"label": "Show in Website",
|
||||||
|
"fieldname": "show_in_website",
|
||||||
|
"fieldtype": "Check"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"depends_on": "show_in_website",
|
||||||
|
"doctype": "DocField",
|
||||||
|
"label": "Description",
|
||||||
|
"fieldname": "description",
|
||||||
|
"fieldtype": "Text Editor"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"depends_on": "show_in_website",
|
||||||
|
"doctype": "DocField",
|
||||||
|
"label": "Featured Items",
|
||||||
|
"fieldname": "featured_items_html",
|
||||||
|
"fieldtype": "Section Break"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Items Featured on the Item Group Page",
|
||||||
|
"depends_on": "show_in_website",
|
||||||
|
"doctype": "DocField",
|
||||||
|
"label": "Featured Items",
|
||||||
|
"fieldname": "featured_items",
|
||||||
|
"fieldtype": "Table",
|
||||||
|
"hidden": 0,
|
||||||
|
"options": "Featured Item"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
"no_copy": 1,
|
"no_copy": 1,
|
||||||
@ -154,6 +168,22 @@
|
|||||||
"options": "Item Group",
|
"options": "Item Group",
|
||||||
"report_hide": 1
|
"report_hide": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"doctype": "DocField",
|
||||||
|
"label": "file_list",
|
||||||
|
"fieldname": "file_list",
|
||||||
|
"fieldtype": "Text",
|
||||||
|
"hidden": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"print_hide": 1,
|
||||||
|
"no_copy": 1,
|
||||||
|
"doctype": "DocField",
|
||||||
|
"label": "File List",
|
||||||
|
"fieldname": "file_list",
|
||||||
|
"fieldtype": "Text",
|
||||||
|
"hidden": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"amend": 0,
|
"amend": 0,
|
||||||
"create": 0,
|
"create": 0,
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"creation": "2012-12-17 14:56:32",
|
"creation": "2012-12-17 14:56:32",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"modified": "2012-12-17 16:02:00"
|
"modified": "2012-12-18 14:23:19"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_attach": 1,
|
"allow_attach": 1,
|
||||||
@ -823,11 +823,12 @@
|
|||||||
"permlevel": 0
|
"permlevel": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"description": "Will appear in search",
|
||||||
"depends_on": "show_in_website",
|
"depends_on": "show_in_website",
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
"label": "Short Description",
|
"label": "Short Description",
|
||||||
"fieldname": "web_short_description",
|
"fieldname": "web_short_description",
|
||||||
"fieldtype": "Text",
|
"fieldtype": "Text Editor",
|
||||||
"permlevel": 0
|
"permlevel": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -15,7 +15,7 @@ wn.doclistviews['Support Ticket'] = wn.views.ListView.extend({
|
|||||||
|
|
||||||
label_style: {
|
label_style: {
|
||||||
"status": {
|
"status": {
|
||||||
"Open": "danger",
|
"Open": "important",
|
||||||
"Closed": "success",
|
"Closed": "success",
|
||||||
"Hold": "info",
|
"Hold": "info",
|
||||||
"Waiting for Customer": "info"
|
"Waiting for Customer": "info"
|
||||||
|
@ -35,7 +35,7 @@ def get_questions():
|
|||||||
conds += ' and t1._user_tags like "%'+ t +'%"'
|
conds += ' and t1._user_tags like "%'+ t +'%"'
|
||||||
|
|
||||||
return webnotes.conn.sql("""select t1.name, t1.owner, t1.question, t1.modified, t1._user_tags,
|
return webnotes.conn.sql("""select t1.name, t1.owner, t1.question, t1.modified, t1._user_tags,
|
||||||
t2.first_name, t2.last_name, (select count(*) from tabAnswer where
|
(select count(*) from tabAnswer where
|
||||||
tabAnswer.question = t1.name) as answers
|
tabAnswer.question = t1.name) as answers
|
||||||
from tabQuestion t1, tabProfile t2
|
from tabQuestion t1, tabProfile t2
|
||||||
where t1.docstatus!=2
|
where t1.docstatus!=2
|
||||||
|
@ -2,23 +2,18 @@
|
|||||||
{
|
{
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"creation": "2012-05-21 15:54:09",
|
"creation": "2012-07-12 23:29:36",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"modified": "2012-07-09 16:20:58"
|
"modified": "2012-12-18 16:15:43"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"section_style": "Simple",
|
|
||||||
"allow_attach": 1,
|
|
||||||
"module": "Website",
|
|
||||||
"_last_update": "1329115882",
|
|
||||||
"document_type": "Other",
|
|
||||||
"issingle": 1,
|
"issingle": 1,
|
||||||
"name": "__common__",
|
"allow_attach": 1,
|
||||||
"colour": "White:FFF",
|
|
||||||
"doctype": "DocType",
|
"doctype": "DocType",
|
||||||
"show_in_menu": 0,
|
"module": "Website",
|
||||||
"max_attachments": 10,
|
"max_attachments": 10,
|
||||||
"version": 1
|
"document_type": "Other",
|
||||||
|
"name": "__common__"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "__common__",
|
"name": "__common__",
|
||||||
@ -40,23 +35,52 @@
|
|||||||
"doctype": "DocType"
|
"doctype": "DocType"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"create": 1,
|
"doctype": "DocField",
|
||||||
"doctype": "DocPerm",
|
"label": "Landing Page",
|
||||||
"write": 1,
|
"fieldname": "sb0",
|
||||||
"role": "System Manager",
|
"fieldtype": "Section Break",
|
||||||
"permlevel": 0
|
"permlevel": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"create": 1,
|
"description": "The \"Web Page\" that is the website home page",
|
||||||
"doctype": "DocPerm",
|
"doctype": "DocField",
|
||||||
"write": 1,
|
"label": "Home Page",
|
||||||
"role": "Website Manager",
|
"options": "Web Page",
|
||||||
|
"fieldname": "home_page",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"reqd": 1,
|
||||||
"permlevel": 0
|
"permlevel": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"role": "All",
|
"description": "The name of your company / website as you want to appear on browser title bar. All pages will have this as the prefix to the title.",
|
||||||
"permlevel": 1,
|
"doctype": "DocField",
|
||||||
"doctype": "DocPerm"
|
"label": "Title Prefix",
|
||||||
|
"fieldname": "title_prefix",
|
||||||
|
"fieldtype": "Data",
|
||||||
|
"permlevel": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"doctype": "DocField",
|
||||||
|
"fieldname": "cb4",
|
||||||
|
"fieldtype": "Column Break",
|
||||||
|
"permlevel": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Only Items / Groups under this Groups will be shown on the website. This will also represent the \"Products\" Home Page.",
|
||||||
|
"doctype": "DocField",
|
||||||
|
"label": "Default Product Category",
|
||||||
|
"options": "Item Group",
|
||||||
|
"fieldname": "default_product_category",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"permlevel": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "If checked, the Home page will be the default Item Group for the website.",
|
||||||
|
"doctype": "DocField",
|
||||||
|
"label": "Home Page is Products",
|
||||||
|
"fieldname": "home_page_is_products",
|
||||||
|
"fieldtype": "Check",
|
||||||
|
"permlevel": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
@ -66,36 +90,7 @@
|
|||||||
"permlevel": 0
|
"permlevel": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"description": "The name of your company / website as you want to appear on browser title bar. All pages will have this as the prefix to the title.",
|
"description": "Brand is what appears on the top-right of the toolbar. If it is an image, make sure it\nhas a transparent background and use the <img /> tag. Keep size as 200px x 30px",
|
||||||
"colour": "White:FFF",
|
|
||||||
"doctype": "DocField",
|
|
||||||
"label": "Title Prefix",
|
|
||||||
"fieldname": "title_prefix",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"permlevel": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "The \"Web Page\" that is the website home page",
|
|
||||||
"colour": "White:FFF",
|
|
||||||
"doctype": "DocField",
|
|
||||||
"label": "Home Page",
|
|
||||||
"permlevel": 0,
|
|
||||||
"fieldname": "home_page",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"reqd": 1,
|
|
||||||
"options": "Web Page"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"doctype": "DocField",
|
|
||||||
"options": "Item Group",
|
|
||||||
"fieldname": "default_product_category",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"label": "Default Product Category",
|
|
||||||
"permlevel": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "Brand is what appears on the top-right of the toolbar. If it is an image, make sure it\nhas a transparent background and use the <img /> tag",
|
|
||||||
"colour": "White:FFF",
|
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
"label": "Brand HTML",
|
"label": "Brand HTML",
|
||||||
"fieldname": "brand_html",
|
"fieldname": "brand_html",
|
||||||
@ -104,10 +99,10 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
|
"label": "Top Bar Items",
|
||||||
"options": "Top Bar Item",
|
"options": "Top Bar Item",
|
||||||
"fieldname": "top_bar_items",
|
"fieldname": "top_bar_items",
|
||||||
"fieldtype": "Table",
|
"fieldtype": "Table",
|
||||||
"label": "Top Bar Items",
|
|
||||||
"permlevel": 0
|
"permlevel": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -133,10 +128,10 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
|
"label": "Footer Items",
|
||||||
"options": "Top Bar Item",
|
"options": "Top Bar Item",
|
||||||
"fieldname": "footer_items",
|
"fieldname": "footer_items",
|
||||||
"fieldtype": "Table",
|
"fieldtype": "Table",
|
||||||
"label": "Footer Items",
|
|
||||||
"permlevel": 0
|
"permlevel": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -148,13 +143,12 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"description": "An icon file with .ico extension. Should be 16 x 16 px. Generated using a favicon generator. [<a href=\"http://favicon-generator.org/\" target=\"_blank\">favicon-generator.org</a>]",
|
"description": "An icon file with .ico extension. Should be 16 x 16 px. Generated using a favicon generator. [<a href=\"http://favicon-generator.org/\" target=\"_blank\">favicon-generator.org</a>]",
|
||||||
"colour": "White:FFF",
|
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
"label": "FavIcon",
|
"label": "FavIcon",
|
||||||
"permlevel": 0,
|
"options": "attach_files:",
|
||||||
"fieldname": "favicon",
|
"fieldname": "favicon",
|
||||||
"fieldtype": "Select",
|
"fieldtype": "Select",
|
||||||
"options": "attach_files:"
|
"permlevel": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"description": "Sub-domain provided by erpnext.com",
|
"description": "Sub-domain provided by erpnext.com",
|
||||||
@ -194,12 +188,30 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"description": "Bind events on startup and page change",
|
"description": "Bind events on startup and page change",
|
||||||
"colour": "White:FFF",
|
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
"label": "Startup Code",
|
"label": "Startup Code",
|
||||||
"permlevel": 0,
|
"options": "Javascript",
|
||||||
"fieldname": "startup_code",
|
"fieldname": "startup_code",
|
||||||
"fieldtype": "Code",
|
"fieldtype": "Code",
|
||||||
"options": "Javascript"
|
"permlevel": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"create": 1,
|
||||||
|
"doctype": "DocPerm",
|
||||||
|
"write": 1,
|
||||||
|
"role": "System Manager",
|
||||||
|
"permlevel": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"create": 1,
|
||||||
|
"doctype": "DocPerm",
|
||||||
|
"write": 1,
|
||||||
|
"role": "Website Manager",
|
||||||
|
"permlevel": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"doctype": "DocPerm",
|
||||||
|
"role": "All",
|
||||||
|
"permlevel": 1
|
||||||
}
|
}
|
||||||
]
|
]
|
@ -25,30 +25,23 @@ def get_product_info(item_code):
|
|||||||
|
|
||||||
@webnotes.whitelist(allow_guest=True)
|
@webnotes.whitelist(allow_guest=True)
|
||||||
def get_product_list(args=None):
|
def get_product_list(args=None):
|
||||||
"""
|
|
||||||
args = {
|
|
||||||
'limit_start': 0,
|
|
||||||
'limit_page_length': 20,
|
|
||||||
'search': '',
|
|
||||||
'product_group': '',
|
|
||||||
}
|
|
||||||
"""
|
|
||||||
import webnotes
|
import webnotes
|
||||||
from webnotes.utils import cstr
|
from webnotes.utils import cstr
|
||||||
|
|
||||||
if not args: args = webnotes.form_dict
|
if not args: args = webnotes.form_dict
|
||||||
|
if not args.search: args.search = ""
|
||||||
|
|
||||||
# base query
|
# base query
|
||||||
query = """\
|
query = """\
|
||||||
select name, item_name, page_name, website_image,
|
select name, item_name, page_name, website_image, item_group,
|
||||||
description, web_short_description
|
if(ifnull(web_short_description,'')='', web_long_description,
|
||||||
|
web_short_description) as web_short_description
|
||||||
from `tabItem`
|
from `tabItem`
|
||||||
where is_sales_item = 'Yes'
|
where docstatus = 0
|
||||||
and docstatus = 0
|
and show_in_website = 1 """
|
||||||
and show_in_website = 1"""
|
|
||||||
|
|
||||||
# search term condition
|
# search term condition
|
||||||
if args.get('search'):
|
if args.search:
|
||||||
query += """
|
query += """
|
||||||
and (
|
and (
|
||||||
web_short_description like %(search)s or
|
web_short_description like %(search)s or
|
||||||
@ -62,78 +55,9 @@ def get_product_list(args=None):
|
|||||||
# product group condition
|
# product group condition
|
||||||
if args.get('product_group') and args.get('product_group') != 'All Products':
|
if args.get('product_group') and args.get('product_group') != 'All Products':
|
||||||
query += """
|
query += """
|
||||||
and item_group = %(product_group)s"""
|
and item_group = %(product_group)s """
|
||||||
|
|
||||||
# order by
|
# order by
|
||||||
query += """
|
query += """order by item_name asc, name asc limit %s, 10""" % args.start
|
||||||
order by item_name asc, name asc"""
|
|
||||||
|
|
||||||
from webnotes.widgets.query_builder import add_limit_to_query
|
return webnotes.conn.sql(query, args, as_dict=1)
|
||||||
query, args = add_limit_to_query(query, args)
|
|
||||||
|
|
||||||
return webnotes.conn.sql(query, args, as_dict=1)
|
|
||||||
|
|
||||||
@webnotes.whitelist(allow_guest=True)
|
|
||||||
def get_product_category_list(args=None):
|
|
||||||
"""
|
|
||||||
args = {
|
|
||||||
'limit_start': 0,
|
|
||||||
'limit_page_length': 5,
|
|
||||||
}
|
|
||||||
"""
|
|
||||||
import webnotes
|
|
||||||
|
|
||||||
if not args: args = webnotes.form_dict
|
|
||||||
|
|
||||||
query = """\
|
|
||||||
select count(name) as items, item_group
|
|
||||||
from `tabItem`
|
|
||||||
where is_sales_item = 'Yes'
|
|
||||||
and docstatus = 0
|
|
||||||
and show_in_website = 1
|
|
||||||
group by item_group
|
|
||||||
order by items desc"""
|
|
||||||
|
|
||||||
from webnotes.widgets.query_builder import add_limit_to_query
|
|
||||||
query, args = add_limit_to_query(query, args)
|
|
||||||
|
|
||||||
|
|
||||||
result = webnotes.conn.sql(query, args, as_dict=1)
|
|
||||||
|
|
||||||
# add All Products link
|
|
||||||
total_count = sum((r.get('items') or 0 for r in result))
|
|
||||||
result = [{'items': total_count, 'item_group': 'All Products'}] + (result or [])
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
@webnotes.whitelist(allow_guest=True)
|
|
||||||
def get_similar_product_list(args=None):
|
|
||||||
"""
|
|
||||||
args = {
|
|
||||||
'limit_start': 0,
|
|
||||||
'limit_page_length': 5,
|
|
||||||
'product_name': '',
|
|
||||||
'product_group': '',
|
|
||||||
}
|
|
||||||
"""
|
|
||||||
import webnotes
|
|
||||||
|
|
||||||
if not args: args = webnotes.form_dict
|
|
||||||
|
|
||||||
query = """\
|
|
||||||
select name, item_name, page_name, website_image,
|
|
||||||
description, web_short_description
|
|
||||||
from `tabItem`
|
|
||||||
where is_sales_item = 'Yes'
|
|
||||||
and docstatus = 0
|
|
||||||
and show_in_website = 1
|
|
||||||
and name != %(product_name)s
|
|
||||||
and item_group = %(product_group)s
|
|
||||||
order by item_name"""
|
|
||||||
|
|
||||||
from webnotes.widgets.query_builder import add_limit_to_query
|
|
||||||
query, args = add_limit_to_query(query, args)
|
|
||||||
|
|
||||||
result = webnotes.conn.sql(query, args, as_dict=1)
|
|
||||||
|
|
||||||
return result
|
|
@ -1,11 +0,0 @@
|
|||||||
<style>
|
|
||||||
.img-area {
|
|
||||||
float:left;
|
|
||||||
width: 115px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.product-list-description {
|
|
||||||
float:left;
|
|
||||||
width: 400px;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1 +1,35 @@
|
|||||||
{% extends "html/page.html" %}
|
{% extends "html/page.html" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<div class="layout-wrapper layout-wrapper-background">
|
||||||
|
<div class="web-content" id="content-product_group">
|
||||||
|
<div class="layout-main" style="padding: 30px;">
|
||||||
|
{% include 'html/product_search_box.html' %}
|
||||||
|
{% if description %}
|
||||||
|
<div>{{ description or ""}}</div>
|
||||||
|
{% else %}
|
||||||
|
<h3>{{ name }}</h3>
|
||||||
|
{% endif %}
|
||||||
|
{% if sub_groups %}
|
||||||
|
<div class="well">
|
||||||
|
<div class="container-fluid">
|
||||||
|
{% for d in sub_groups %}
|
||||||
|
<div class="span2">
|
||||||
|
<i class="icon-chevron-right"></i>
|
||||||
|
<a href="{{ d.page_name }}">{{ d.name }}</a></div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% if obj.doclist.get({"doctype":"Featured Item"}) %}
|
||||||
|
<hr>
|
||||||
|
<h3>Featured Products</h3>
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock %}
|
@ -20,15 +20,20 @@
|
|||||||
<div class="layout-wrapper layout-wrapper-background">
|
<div class="layout-wrapper layout-wrapper-background">
|
||||||
<div class="web-content" id="content-product-{{ name }}">
|
<div class="web-content" id="content-product-{{ name }}">
|
||||||
<div class="layout-main" style="padding: 30px;">
|
<div class="layout-main" style="padding: 30px;">
|
||||||
{% include 'html/product_search.html' %}
|
{% include 'html/product_search_box.html' %}
|
||||||
<h1>{{ item_name }}</h1>
|
<h1>{{ item_name }}</h1>
|
||||||
|
<p class="help">Item Code: {{ name }}</p>
|
||||||
<div class="product-page-content">
|
<div class="product-page-content">
|
||||||
<div class="span6">
|
<div class="span6">
|
||||||
{% if website_image %}
|
{% if website_image %}
|
||||||
<image class="item-main-image" src="files/{{ website_image }}" />
|
<image class="item-main-image" src="files/{{ website_image }}" />
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="img-area"></div>
|
<div class="img-area">
|
||||||
<span style="font-size: 11px">This is an auto-generated Image</span>
|
<div style='background-color: #eee; padding: 40px;
|
||||||
|
width: 32px; font-size: 32px; color: #888;' title='No Image'>
|
||||||
|
<i class='icon-camera'></i></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<br><br>
|
<br><br>
|
||||||
</div>
|
</div>
|
||||||
@ -42,7 +47,8 @@
|
|||||||
<div class="span9">
|
<div class="span9">
|
||||||
<h3>Product Description</h3>
|
<h3>Product Description</h3>
|
||||||
<div>
|
<div>
|
||||||
{{ web_long_description or web_short_description }}
|
{{ web_long_description or web_short_description or
|
||||||
|
"[No description given]" }}
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
{% if obj.doclist.get({"doctype":"Item Website Specification"}) %}
|
{% if obj.doclist.get({"doctype":"Item Website Specification"}) %}
|
||||||
@ -51,7 +57,7 @@
|
|||||||
{% for d in obj.doclist.get(
|
{% for d in obj.doclist.get(
|
||||||
{"doctype":"Item Website Specification"}) %}
|
{"doctype":"Item Website Specification"}) %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ d.label }}</td>
|
<td style="min-width: 150px;">{{ d.label }}</td>
|
||||||
<td>{{ d.description }}</td>
|
<td>{{ d.description }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
@ -1,9 +0,0 @@
|
|||||||
<div class="pull-right">
|
|
||||||
<form class="form-search">
|
|
||||||
<div class="input-append">
|
|
||||||
<input type="text" class="span2 search-query" id="product-search">
|
|
||||||
<button class="btn"><i class="icon-search"></i></button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
<div class="clearfix"></div>
|
|
26
website/templates/html/product_search_box.html
Normal file
26
website/templates/html/product_search_box.html
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<div class="pull-right" style="margin-top:-15px;">
|
||||||
|
<form class="form-search">
|
||||||
|
<div class="input-append">
|
||||||
|
<input type="text" class="span2 search-query"
|
||||||
|
id="product-search" placeholder="Product Search...">
|
||||||
|
<button class="btn" id="btn-product-search">
|
||||||
|
<i class="icon-search"></i></button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<script>
|
||||||
|
// redirect to product search page
|
||||||
|
$(document).ready(function() {
|
||||||
|
$("#btn-product-search").click(function() {
|
||||||
|
var txt = $("#product-search").val();
|
||||||
|
if(txt) {
|
||||||
|
window.location.href="product_search.html?q=" + txt;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
$("#product-search").keypress(function(e) {
|
||||||
|
if(e.which==13) $("#product-search-btn").click();
|
||||||
|
})
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
<div class="clearfix"></div>
|
@ -59,10 +59,17 @@ var blog = {
|
|||||||
<p><a href="%(page_name)s">Read with comments...</a></p>\
|
<p><a href="%(page_name)s">Read with comments...</a></p>\
|
||||||
<hr /><br />', b)).appendTo($wrap);
|
<hr /><br />', b)).appendTo($wrap);
|
||||||
});
|
});
|
||||||
blog.start += data.length;
|
blog.start += (data.length || 0);
|
||||||
if(!data.length) {
|
if(!data.length) {
|
||||||
$("#next-page").toggle(false)
|
if(blog.start) {
|
||||||
.parent().append("<div class='alert'>Nothing more to show.</div>");
|
$("#next-page").toggle(false)
|
||||||
|
.parent().append("<div class='alert'>Nothing more to show.</div>");
|
||||||
|
} else {
|
||||||
|
$("#next-page").toggle(false)
|
||||||
|
.parent().append("<div class='alert'>No blogs written yet.</div>");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$("#next-page").toggle(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,33 +0,0 @@
|
|||||||
wn.provide('erpnext.blog');
|
|
||||||
|
|
||||||
(function() {
|
|
||||||
$('body').on('click', '.btn-blog-subscribe', function() {
|
|
||||||
var d = new wn.ui.Dialog({
|
|
||||||
title: "Get Blog Updates via Email",
|
|
||||||
fields: [
|
|
||||||
{label: "Your Name", fieldtype:"Data", reqd:1},
|
|
||||||
{label: "Your Email Address", fieldtype:"Data", reqd:1
|
|
||||||
,description: "You can unsubscribe anytime."},
|
|
||||||
{label: "Subscribe", fieldtype:"Button"}
|
|
||||||
]
|
|
||||||
});
|
|
||||||
$(d.fields_dict.subscribe.input).click(function() {
|
|
||||||
var args = d.get_values();
|
|
||||||
if(!args) return;
|
|
||||||
wn.call({
|
|
||||||
method: 'website.helpers.blog.add_subscriber',
|
|
||||||
args: args,
|
|
||||||
callback: function(r) {
|
|
||||||
if(r.exc) {
|
|
||||||
msgprint('Opps there seems to be some error, Please check back after some time.');
|
|
||||||
} else {
|
|
||||||
msgprint('Thanks for subscribing!');
|
|
||||||
}
|
|
||||||
d.hide();
|
|
||||||
},
|
|
||||||
btn: this
|
|
||||||
})
|
|
||||||
})
|
|
||||||
d.show()
|
|
||||||
})
|
|
||||||
})()
|
|
@ -1,18 +0,0 @@
|
|||||||
wn.provide('erpnext.products');
|
|
||||||
|
|
||||||
erpnext.products.make_product_categories = function(wrapper) {
|
|
||||||
if (!wrapper) { wrapper = erpnext.products.wrapper; }
|
|
||||||
if (!wrapper) { return; }
|
|
||||||
|
|
||||||
wrapper.category_list = new wn.ui.Listing({
|
|
||||||
parent: $(wrapper).find('.more-categories').get(0),
|
|
||||||
method: 'website.helpers.product.get_product_category_list',
|
|
||||||
hide_refresh: true,
|
|
||||||
render_row: function(parent, data) {
|
|
||||||
parent.innerHTML = repl(
|
|
||||||
'<a href="products.html#!products/%(item_group)s">%(item_group)s</a> (%(items)s)',
|
|
||||||
data);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
wrapper.category_list.run();
|
|
||||||
}
|
|
@ -1,106 +0,0 @@
|
|||||||
// ERPNext - web based ERP (http://erpnext.com)
|
|
||||||
// Copyright (C) 2012 Web Notes Technologies Pvt Ltd
|
|
||||||
//
|
|
||||||
// This program is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
//
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU General Public License
|
|
||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
// js inside blog page
|
|
||||||
|
|
||||||
{% include "js/product_category.js" %}
|
|
||||||
|
|
||||||
wn.pages['{{ name }}'].onload = function(wrapper) {
|
|
||||||
erpnext.products.wrapper = wrapper;
|
|
||||||
|
|
||||||
// make product categories in the sidebar
|
|
||||||
erpnext.products.make_product_categories(wrapper);
|
|
||||||
|
|
||||||
// make lists
|
|
||||||
erpnext.products.make_product_list(wrapper);
|
|
||||||
|
|
||||||
// bind search button or enter key
|
|
||||||
$(wrapper).find('.products-search .btn').click(function() {
|
|
||||||
erpnext.products.product_list.run();
|
|
||||||
});
|
|
||||||
|
|
||||||
$(wrapper).find('.products-search input').keypress(function(ev) {
|
|
||||||
if(ev.which==13) $(wrapper).find('.products-search .btn').click();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
erpnext.products.make_product_list = function(wrapper) {
|
|
||||||
if (!wrapper) { wrapper = erpnext.products.wrapper; }
|
|
||||||
if (!wrapper) { return; }
|
|
||||||
|
|
||||||
erpnext.products.product_list = new wn.ui.Listing({
|
|
||||||
parent: $(wrapper).find('#products-list').get(0),
|
|
||||||
run_btn: $(wrapper).find('.products-search .btn').get(0),
|
|
||||||
no_toolbar: true,
|
|
||||||
method: 'website.helpers.product.get_product_list',
|
|
||||||
get_args: function() {
|
|
||||||
return {
|
|
||||||
search: $('input[name="products-search"]').val() || '',
|
|
||||||
product_group: erpnext.products.cur_group || '',
|
|
||||||
};
|
|
||||||
},
|
|
||||||
render_row: function(parent, data) {
|
|
||||||
if (!data.web_short_description) {
|
|
||||||
data.web_short_description = data.description;
|
|
||||||
}
|
|
||||||
parent.innerHTML = repl('\
|
|
||||||
<a href="%(page_name)s.html"><div class="img-area"></div></a>\
|
|
||||||
<div class="product-list-description">\
|
|
||||||
<h4><a href="%(page_name)s.html">%(item_name)s</a></h4>\
|
|
||||||
<p>%(web_short_description)s</p></div>\
|
|
||||||
<div style="clear: both;"></div>', data);
|
|
||||||
|
|
||||||
if(data.website_image) {
|
|
||||||
$(parent).find('.img-area').append(repl(
|
|
||||||
'<img src="files/%(website_image)s" style="width:100px;">', data))
|
|
||||||
} else {
|
|
||||||
$(parent).find('.img-area').append(wn.dom.placeholder(100,
|
|
||||||
data.item_name));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
wn.pages['{{ name }}'].onshow = function(wrapper) {
|
|
||||||
// show default product category
|
|
||||||
erpnext.products.set_group();
|
|
||||||
}
|
|
||||||
|
|
||||||
erpnext.products.set_group = function() {
|
|
||||||
var cat = erpnext.products.get_group();
|
|
||||||
|
|
||||||
// get erpnext.products.default_category
|
|
||||||
var wrapper = erpnext.products.wrapper;
|
|
||||||
|
|
||||||
$(wrapper).find('h1').html(cat.label);
|
|
||||||
erpnext.products.product_list.run();
|
|
||||||
}
|
|
||||||
|
|
||||||
erpnext.products.get_group = function() {
|
|
||||||
route = wn.get_route();
|
|
||||||
if(route && route.length>1) {
|
|
||||||
// from url
|
|
||||||
var grp = route[1];
|
|
||||||
var label = route[1];
|
|
||||||
erpnext.products.cur_group = grp;
|
|
||||||
} else {
|
|
||||||
// default
|
|
||||||
var grp = 'Products';
|
|
||||||
var label = 'Products';
|
|
||||||
erpnext.products.cur_group = null;
|
|
||||||
}
|
|
||||||
return {grp:grp, label:label};
|
|
||||||
}
|
|
@ -3,7 +3,7 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="layout-wrapper layout-main">
|
<div class="layout-wrapper layout-main">
|
||||||
<h3>Page missing or moved</h3>
|
<h3><i class="icon-exclamation-sign"></i> Page missing or moved</h3>
|
||||||
<br>
|
<br>
|
||||||
<p>We are very sorry for this, but the page you are looking for is missing
|
<p>We are very sorry for this, but the page you are looking for is missing
|
||||||
(this could be because of a typo in the address) or moved.</p>
|
(this could be because of a typo in the address) or moved.</p>
|
||||||
|
@ -17,11 +17,12 @@
|
|||||||
<div class="layout-main">
|
<div class="layout-main">
|
||||||
<h1>Blog</h1>
|
<h1>Blog</h1>
|
||||||
<br>
|
<br>
|
||||||
<div id="blog-list" style="min-height: 400px;">
|
<div id="blog-list">
|
||||||
<!-- blog list will be generated dynamically -->
|
<!-- blog list will be generated dynamically -->
|
||||||
</div>
|
</div>
|
||||||
<div style="text-align: center;">
|
<div style="text-align: center;">
|
||||||
<button id="next-page" class="btn">More...</button>
|
<button id="next-page" class="btn"
|
||||||
|
style="display:none;">More...</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
11
website/templates/pages/error.html
Normal file
11
website/templates/pages/error.html
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{% extends "html/outer.html" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="content">
|
||||||
|
<div class="layout-wrapper layout-main">
|
||||||
|
<h3><i class="icon-exclamation-sign"></i> Oops, a server error has occured</h3>
|
||||||
|
<br>
|
||||||
|
<pre>%(error)s</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
97
website/templates/pages/product_search.html
Normal file
97
website/templates/pages/product_search.html
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{% extends "html/page.html" %}
|
||||||
|
|
||||||
|
{% block title %}Product Search{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
var txt = get_url_arg("q");
|
||||||
|
$(".search-results").html("Search results for: " + txt);
|
||||||
|
|
||||||
|
window.start = 0;
|
||||||
|
var get_list = function() {
|
||||||
|
$.ajax({
|
||||||
|
method: "GET",
|
||||||
|
url: "server.py",
|
||||||
|
dataType: "json",
|
||||||
|
data: {
|
||||||
|
cmd: "website.helpers.product.get_product_list",
|
||||||
|
start: window.start,
|
||||||
|
search: txt
|
||||||
|
},
|
||||||
|
dataType: "json",
|
||||||
|
success: function(data) {
|
||||||
|
render(data.message);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
var render = function(data) {
|
||||||
|
if(data.length) {
|
||||||
|
var table = $("#search-list .table");
|
||||||
|
if(!table.length)
|
||||||
|
var table = $("<table class='table'>").appendTo("#search-list");
|
||||||
|
|
||||||
|
$.each(data, function(i, d) {
|
||||||
|
if(!d.web_short_description)
|
||||||
|
d.web_short_description = "No description given."
|
||||||
|
var $tr = $(repl('<tr>\
|
||||||
|
<td style="width: 30%;">\
|
||||||
|
<img class="product-image" style="width: 80%;" src="files/%(website_image)s">\
|
||||||
|
</td>\
|
||||||
|
<td>\
|
||||||
|
<h4><a href="%(page_name)s">%(item_name)s</a></h4>\
|
||||||
|
<p class="help">Item Code: %(name)s</p>\
|
||||||
|
<p>%(web_short_description)s</p>\
|
||||||
|
</td>\
|
||||||
|
</tr>', d)).appendTo(table);
|
||||||
|
|
||||||
|
if(!d.website_image) {
|
||||||
|
$tr.find(".product-image").replaceWith("<div\
|
||||||
|
style='background-color: #eee; padding: 40px; \
|
||||||
|
width: 32px; font-size: 32px; color: #888;'>\
|
||||||
|
<i class='icon-camera'></i></div>");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
if(data.length < 10) {
|
||||||
|
if(!table) {
|
||||||
|
$(".more-btn")
|
||||||
|
.replaceWith("<div class='alert'>No results found for your search.</div>");
|
||||||
|
} else {
|
||||||
|
$(".more-btn")
|
||||||
|
.replaceWith("<div class='alert'>Nothing more to show.</div>");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$(".more-btn").toggle(true)
|
||||||
|
}
|
||||||
|
window.start += (data.length || 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
get_list();
|
||||||
|
$(".more-btn .btn").click(function() {
|
||||||
|
get_list()
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="layout-wrapper layout-wrapper-background">
|
||||||
|
<div class="web-content" id="content-product_search">
|
||||||
|
<div class="layout-main" style="padding: 30px;">
|
||||||
|
{% include 'html/product_search_box.html' %}
|
||||||
|
<h3 class="search-results">Search Results</h3>
|
||||||
|
<div id="search-list">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div style="text-align: center;">
|
||||||
|
<div class="more-btn"
|
||||||
|
style="display: none; text-align: center;">
|
||||||
|
<button class="btn">More...</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock %}
|
@ -1,37 +0,0 @@
|
|||||||
{% extends "html/page.html" %}
|
|
||||||
|
|
||||||
{% block javascript %}
|
|
||||||
{% include "js/products.js" %}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block css %}
|
|
||||||
{% include "css/products.css" %}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block title %}
|
|
||||||
Products
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
<div class="layout-wrapper layout-wrapper-background">
|
|
||||||
<div class="web-content" id="content-products">
|
|
||||||
|
|
||||||
<div class="layout-main-section">
|
|
||||||
<h1 class="products-category"></h1>
|
|
||||||
<div class="products-search" style="margin-bottom: 15px;">
|
|
||||||
<input name="products-search" />
|
|
||||||
<button class="btn" style="margin-left: 7px">Search</button>
|
|
||||||
</div>
|
|
||||||
<div id="products-list">
|
|
||||||
<!-- product list will be generated dynamically -->
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="layout-side-section">
|
|
||||||
<h3>Categories</h3>
|
|
||||||
<div class="more-categories"></div>
|
|
||||||
</div>
|
|
||||||
<div style="clear: both"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
@ -48,7 +48,7 @@ def render(page_name):
|
|||||||
else:
|
else:
|
||||||
html = get_html('index')
|
html = get_html('index')
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
html = get_html('404')
|
html = get_html('error')
|
||||||
|
|
||||||
from webnotes.handler import eprint, print_zip
|
from webnotes.handler import eprint, print_zip
|
||||||
eprint("Content-Type: text/html")
|
eprint("Content-Type: text/html")
|
||||||
@ -57,32 +57,29 @@ def render(page_name):
|
|||||||
def get_html(page_name):
|
def get_html(page_name):
|
||||||
"""get page html"""
|
"""get page html"""
|
||||||
page_name = scrub_page_name(page_name)
|
page_name = scrub_page_name(page_name)
|
||||||
comments = get_comments(page_name)
|
|
||||||
|
|
||||||
html = ''
|
html = ''
|
||||||
|
|
||||||
# load from cache, if auto cache clear is falsy
|
# load from cache, if auto cache clear is falsy
|
||||||
if not (hasattr(conf, 'auto_cache_clear') and conf.auto_cache_clear or 0):
|
if not (hasattr(conf, 'auto_cache_clear') and conf.auto_cache_clear or 0):
|
||||||
html = webnotes.cache().get_value("page:" + page_name)
|
html = webnotes.cache().get_value("page:" + page_name)
|
||||||
|
from_cache = True
|
||||||
|
|
||||||
if html:
|
if not html:
|
||||||
comments += "\nload status: cache"
|
|
||||||
else:
|
|
||||||
html = load_into_cache(page_name)
|
html = load_into_cache(page_name)
|
||||||
comments += "\nload status: fresh"
|
from_cache = False
|
||||||
|
|
||||||
# insert comments
|
if not html:
|
||||||
html += """\n<!-- %s -->""" % webnotes.utils.cstr(comments)
|
html = get_html("404")
|
||||||
|
|
||||||
|
if page_name=="error":
|
||||||
|
html = html % {"error": webnotes.getTraceback()}
|
||||||
|
else:
|
||||||
|
comments = "\n\npage:"+page_name+\
|
||||||
|
"\nload status: " + (from_cache and "cache" or "fresh")
|
||||||
|
html += """\n<!-- %s -->""" % webnotes.utils.cstr(comments)
|
||||||
|
|
||||||
return html
|
return html
|
||||||
|
|
||||||
def get_comments(page_name):
|
|
||||||
if page_name == '404':
|
|
||||||
comments = """error: %s""" % webnotes.getTraceback()
|
|
||||||
else:
|
|
||||||
comments = """page: %s""" % page_name
|
|
||||||
|
|
||||||
return comments
|
|
||||||
|
|
||||||
def scrub_page_name(page_name):
|
def scrub_page_name(page_name):
|
||||||
if page_name.endswith('.html'):
|
if page_name.endswith('.html'):
|
||||||
@ -114,6 +111,8 @@ def update_page_name(doc, title):
|
|||||||
|
|
||||||
def load_into_cache(page_name):
|
def load_into_cache(page_name):
|
||||||
args = prepare_args(page_name)
|
args = prepare_args(page_name)
|
||||||
|
if not args:
|
||||||
|
return ""
|
||||||
html = build_html(args)
|
html = build_html(args)
|
||||||
webnotes.cache().set_value("page:" + page_name, html)
|
webnotes.cache().set_value("page:" + page_name, html)
|
||||||
return html
|
return html
|
||||||
@ -141,6 +140,9 @@ def prepare_args(page_name):
|
|||||||
else:
|
else:
|
||||||
args = get_doc_fields(page_name)
|
args = get_doc_fields(page_name)
|
||||||
|
|
||||||
|
if not args:
|
||||||
|
return False
|
||||||
|
|
||||||
args.update(get_outer_env())
|
args.update(get_outer_env())
|
||||||
|
|
||||||
return args
|
return args
|
||||||
@ -156,6 +158,9 @@ def get_template_pages():
|
|||||||
|
|
||||||
def get_doc_fields(page_name):
|
def get_doc_fields(page_name):
|
||||||
doc_type, doc_name = get_source_doc(page_name)
|
doc_type, doc_name = get_source_doc(page_name)
|
||||||
|
if not doc_type:
|
||||||
|
return False
|
||||||
|
|
||||||
obj = webnotes.get_obj(doc_type, doc_name, with_children=True)
|
obj = webnotes.get_obj(doc_type, doc_name, with_children=True)
|
||||||
|
|
||||||
if hasattr(obj, 'prepare_template_args'):
|
if hasattr(obj, 'prepare_template_args'):
|
||||||
|
Loading…
Reference in New Issue
Block a user