[webshop] territories in price list, taxes, updates in shopping cart settings

This commit is contained in:
Anand Doshi 2013-06-21 17:55:31 +05:30
parent d52b03a8cc
commit 61a2f68bc6
33 changed files with 462 additions and 137 deletions

View File

@ -269,7 +269,7 @@ class TestSalesInvoice(unittest.TestCase):
def test_sales_invoice_gl_entry_without_aii(self):
webnotes.defaults.set_global_default("auto_inventory_accounting", 0)
si = webnotes.bean(webnotes.copy_doclist(test_records[1]))
si = webnotes.bean(copy=test_records[1])
si.insert()
si.submit()
@ -711,7 +711,7 @@ test_records = [
"qty": 1.0,
"basic_rate": 500.0,
"amount": 500.0,
"export_rate": 500.0,
"ref_rate": 500.0,
"export_amount": 500.0,
"income_account": "Sales - _TC",
"expense_account": "_Test Account Cost for Goods Sold - _TC",

View File

@ -25,9 +25,9 @@ class DocType:
def get_rate(self, arg):
from webnotes.model.code import get_obj
return get_obj('Sales Common').get_rate(arg)
def update_other_default_charges(self):
webnotes.conn.sql("update `tabSales Taxes and Charges Master` set is_default = 0 where ifnull(is_default,0) = 1 and name != '%s' and company = '%s'" % (self.doc.name, self.doc.company))
def on_update(self):
self.update_other_default_charges()
def validate(self):
if self.doc.is_default == 1:
webnotes.conn.sql("""update `tabSales Taxes and Charges Master` set is_default = 0
where ifnull(is_default,0) = 1 and name != %s and company = %s""",
(self.doc.name, self.doc.company))

View File

@ -2,7 +2,7 @@
{
"creation": "2013-01-10 16:34:09",
"docstatus": 0,
"modified": "2013-01-22 14:57:23",
"modified": "2013-06-20 16:49:12",
"modified_by": "Administrator",
"owner": "Administrator"
},
@ -55,14 +55,9 @@
"label": "Default"
},
{
"description": "* Will be calculated in the transaction.",
"doctype": "DocField",
"fieldname": "other_charges",
"fieldtype": "Table",
"label": "Sales Taxes and Charges Master",
"oldfieldname": "other_charges",
"oldfieldtype": "Table",
"options": "Sales Taxes and Charges"
"fieldname": "column_break_3",
"fieldtype": "Column Break"
},
{
"doctype": "DocField",
@ -76,6 +71,30 @@
"reqd": 1,
"search_index": 0
},
{
"doctype": "DocField",
"fieldname": "section_break_5",
"fieldtype": "Section Break"
},
{
"description": "* Will be calculated in the transaction.",
"doctype": "DocField",
"fieldname": "other_charges",
"fieldtype": "Table",
"label": "Sales Taxes and Charges Master",
"oldfieldname": "other_charges",
"oldfieldtype": "Table",
"options": "Sales Taxes and Charges"
},
{
"description": "Specify a list of Territories, for which, this Taxes Master is valid",
"doctype": "DocField",
"fieldname": "valid_for_territories",
"fieldtype": "Table",
"label": "Valid for Territories",
"options": "For Territory",
"reqd": 1
},
{
"amend": 0,
"cancel": 0,

View File

@ -349,13 +349,6 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({
}
},
set_dynamic_labels: function(doc, dt, dn) {
var company_currency = this.get_company_currency();
this.change_form_labels(company_currency);
this.change_grid_labels(company_currency);
},
change_form_labels: function(company_currency) {
var me = this;
var field_label_map = {};

View File

@ -52,14 +52,16 @@ class AccountsController(TransactionBase):
"price_list_name": self.doc.price_list_name,
"buying_or_selling": buying_or_selling
}))
if not self.doc.plc_conversion_rate:
self.doc.plc_conversion_rate = flt(webnotes.conn.get_value("Price List",
self.doc.price_list_name, "conversion_rate"))
if self.doc.price_list_currency:
if not self.doc.plc_conversion_rate:
exchange = self.doc.price_list_currency + "-" + get_company_currency(self.doc.company)
self.doc.plc_conversion_rate = flt(webnotes.conn.get_value("Currency Exchange",
exchange, "exchange_rate"))
if not self.doc.currency:
self.doc.currency = self.doc.price_list_currency
self.doc.conversion_rate = self.doc.plc_conversion_rate
if not self.doc.currency:
self.doc.currency = self.doc.price_list_currency
self.doc.conversion_rate = self.doc.plc_conversion_rate
def set_missing_item_details(self, get_item_details):
"""set missing item values"""

View File

@ -1,5 +0,0 @@
import webnotes
def execute():
webnotes.reload_doc("Setup", "DocType", "Price List")
webnotes.conn.sql("""update `tabPrice List` set valid_for_all_countries=1""")

View File

@ -0,0 +1,25 @@
import webnotes
def execute():
webnotes.reload_doc("setup", "doctype", "for_territory")
webnotes.reload_doc("setup", "doctype", "price_list")
webnotes.reload_doc("accounts", "doctype", "sales_taxes_and_charges_master")
from setup.utils import get_root_of
root_territory = get_root_of("Territory")
for parenttype in ["Sales Taxes and Charges Master", "Price List"]:
for name in webnotes.conn.sql_list("""select name from `tab%s` main
where not exists (select parent from `tabFor Territory` territory
where territory.parenttype=%s and territory.parent=main.name)""" % \
(parenttype, "%s"), (parenttype,)):
doc = webnotes.doc({
"doctype": "For Territory",
"__islocal": 1,
"parenttype": parenttype,
"parentfield": "valid_for_territories",
"parent": name,
"territory": root_territory
})
doc.save()

View File

@ -0,0 +1,11 @@
import webnotes
def execute():
webnotes.reload_doc("website", "doctype", "shopping_cart_settings")
# create two default territories, one for home country and one named Rest of the World
from setup.doctype.setup_control.setup_control import create_territories
create_territories()
webnotes.conn.set_value("Shopping Cart Settings", None, "default_territory", "Rest of the World")

View File

@ -226,7 +226,6 @@ patch_list = [
"execute:webnotes.reset_perms('File Data')",
"patches.april_2013.p07_update_file_data_2",
"patches.april_2013.rebuild_sales_browser",
"patches.april_2013.p08_price_list_country",
"patches.may_2013.p01_selling_net_total_export",
"patches.may_2013.repost_stock_for_no_posting_time",
"patches.may_2013.p01_conversion_factor_and_aii",
@ -245,4 +244,5 @@ patch_list = [
"patches.june_2013.p04_fix_event_for_lead_oppty_project",
"patches.june_2013.p05_remove_unused_doctypes",
"patches.june_2013.p06_drop_unused_tables",
"patches.june_2013.p08_shopping_cart_settings",
]

View File

@ -76,9 +76,9 @@ erpnext.TransactionController = wn.ui.form.Controller.extend({
$.each(["currency", "price_list_currency"], function(i, fieldname) {
if(!me.doc[fieldname]) {
me.frm.set_value(fieldname, company_currency);
me[fieldname]();
}
});
this.price_list_currency();
}
},
@ -87,10 +87,33 @@ erpnext.TransactionController = wn.ui.form.Controller.extend({
},
currency: function() {
if(this.frm.doc.currency === this.get_company_currency())
this.frm.set_value("conversion_rate", 1.0);
var me = this;
this.set_dynamic_labels();
this.price_list_currency();
var company_currency = this.get_company_currency();
if(this.frm.doc.currency !== company_currency) {
this.get_exchange_rate(this.frm.doc.currency, company_currency,
function(exchange_rate) {
if(exchange_rate) {
me.frm.set_value("conversion_rate", exchange_rate);
me.conversion_rate();
}
});
} else {
this.conversion_rate();
}
},
conversion_rate: function() {
if(this.frm.doc.currency === this.get_company_currency() &&
this.frm.doc.conversion_rate !== 1.0) {
this.frm.set_value("conversion_rate", 1.0);
} else if(this.frm.doc.currency === this.frm.doc.price_list_currency &&
this.frm.doc.plc_conversion_rate !== this.frm.doc.conversion_rate) {
this.frm.set_value("plc_conversion_rate", this.frm.doc.conversion_rate);
}
this.calculate_taxes_and_totals();
},
price_list_name: function(buying_or_selling) {
@ -98,7 +121,7 @@ erpnext.TransactionController = wn.ui.form.Controller.extend({
if(this.frm.doc.price_list_name) {
this.frm.call({
method: "setup.utils.get_price_list_currency",
args: {args: {
args: { args: {
price_list_name: this.frm.doc.price_list_name,
buying_or_selling: buying_or_selling
}},
@ -111,26 +134,38 @@ erpnext.TransactionController = wn.ui.form.Controller.extend({
}
},
get_exchange_rate: function(from_currency, to_currency, callback) {
var exchange_name = from_currency + "-" + to_currency;
wn.model.with_doc("Currency Exchange", exchange_name, function(name) {
var exchange_doc = wn.model.get_doc("Currency Exchange", exchange_name);
callback(exchange_doc ? flt(exchange_doc.exchange_rate)) : 0);
});
},
price_list_currency: function() {
// What TODO? should we make price list system non-mandatory?
this.frm.toggle_reqd("plc_conversion_rate",
!!(this.frm.doc.price_list_name && this.frm.doc.price_list_currency));
if(this.frm.doc.price_list_currency === this.get_company_currency()) {
this.frm.set_value("plc_conversion_rate", 1.0);
} else if(this.frm.doc.price_list_currency === this.frm.doc.currency) {
this.frm.set_value("plc_conversion_rate", this.frm.doc.conversion_rate);
}
this.set_dynamic_labels();
var company_currency = this.get_company_currency();
if(this.frm.doc.price_list_currency !== company_currency) {
this.get_exchange_rate(this.frm.doc.price_list_currency, company_currency,
function(exchange_rate) {
if(exchange_rate) {
me.frm.set_value("price_list_currency", exchange_rate);
me.plc_conversion_rate();
}
});
} else {
this.plc_conversion_rate();
}
},
plc_conversion_rate: function() {
this.price_list_currency();
},
conversion_rate: function() {
this.price_list_currency();
this.calculate_taxes_and_totals();
if(this.frm.doc.price_list_currency === this.get_company_currency()) {
this.frm.set_value("plc_conversion_rate", 1.0);
} else if(this.frm.doc.price_list_currency === this.frm.doc.currency) {
this.frm.set_value("conversion_rate", this.frm.doc.plc_conversion_rate);
this.calculate_taxes_and_totals();
}
},
qty: function(doc, cdt, cdn) {
@ -153,6 +188,16 @@ erpnext.TransactionController = wn.ui.form.Controller.extend({
}
},
set_dynamic_labels: function() {
// What TODO? should we make price list system non-mandatory?
this.frm.toggle_reqd("plc_conversion_rate",
!!(this.frm.doc.price_list_name && this.frm.doc.price_list_currency));
var company_currency = this.get_company_currency();
this.change_form_labels(company_currency);
this.change_grid_labels(company_currency);
},
recalculate: function() {
this.calculate_taxes_and_totals();
},

View File

@ -384,10 +384,7 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({
},
set_dynamic_labels: function() {
var company_currency = this.get_company_currency();
this.change_form_labels(company_currency);
this.change_grid_labels(company_currency);
this._super();
set_sales_bom_help(this.frm.doc);
},

View File

@ -19,4 +19,4 @@ import webnotes
class DocType:
def __init__(self, d, dl):
self.doc, self.doclist = d, dl
self.doc, self.doclist = d, dl

View File

@ -0,0 +1,19 @@
# For license information, please see license.txt
from __future__ import unicode_literals
import webnotes
from webnotes import _, msgprint
from webnotes.model.controller import DocListController
class DocType(DocListController):
def __init__(self, d, dl):
self.doc, self.doclist = d, dl
def autoname(self):
self.doc.name = self.doc.from_currency + "-" + self.doc.to_currency
def validate(self):
self.validate_value("exchange_rate", ">", 0)
if self.doc.from_currency == self.doc.to_currency:
msgprint(_("From Currency and To Currency cannot be same"), raise_exception=True)

View File

@ -0,0 +1,50 @@
[
{
"creation": "2013-06-20 15:40:29",
"docstatus": 0,
"modified": "2013-06-20 15:40:29",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"allow_import": 1,
"description": "Specify Exchange Rate to convert one currency into another",
"doctype": "DocType",
"document_type": "Master",
"module": "Setup",
"name": "__common__"
},
{
"doctype": "DocField",
"name": "__common__",
"parent": "Currency Exchange",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0,
"reqd": 1
},
{
"doctype": "DocType",
"name": "Currency Exchange"
},
{
"doctype": "DocField",
"fieldname": "from_currency",
"fieldtype": "Link",
"label": "From Currency",
"options": "Currency"
},
{
"doctype": "DocField",
"fieldname": "to_currency",
"fieldtype": "Link",
"label": "To Currency",
"options": "Currency"
},
{
"doctype": "DocField",
"fieldname": "exchange_rate",
"fieldtype": "Float",
"label": "Exchange Rate"
}
]

View File

View File

@ -1,13 +1,12 @@
[
{
"creation": "2013-04-29 18:24:32",
"creation": "2013-06-20 12:48:38",
"docstatus": 0,
"modified": "2013-04-29 18:24:32",
"modified": "2013-06-20 12:48:38",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"autoname": "PLCNTRY-.#####",
"doctype": "DocType",
"istable": 1,
"module": "Setup",
@ -15,12 +14,12 @@
},
{
"doctype": "DocField",
"fieldname": "country",
"fieldname": "territory",
"fieldtype": "Link",
"label": "Country",
"label": "Territory",
"name": "__common__",
"options": "Country",
"parent": "Price List Country",
"options": "Territory",
"parent": "For Territory",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0,
@ -28,7 +27,7 @@
},
{
"doctype": "DocType",
"name": "Price List Country"
"name": "For Territory"
},
{
"doctype": "DocField"

View File

@ -17,7 +17,7 @@
from __future__ import unicode_literals
import webnotes
from webnotes import msgprint, _
from webnotes.utils import cint, comma_or
from webnotes.utils import comma_or
from webnotes.model.controller import DocListController
class DocType(DocListController):
@ -26,33 +26,10 @@ class DocType(DocListController):
where price_list_name=%s""", self.doc.name, as_dict=True, update={"doctype": "Item Price"}))
def validate(self):
if not (cint(self.doc.valid_for_all_countries) or len(self.doclist.get({"parentfield": "valid_for_countries"}))):
msgprint(_("""Please check "Valid For All Countries" or \
enter atlease one row in the "Countries" table."""), raise_exception=True)
if self.doc.buying_or_selling not in ["Buying", "Selling"]:
msgprint(_(self.meta.get_label("buying_or_selling")) + " " + _("must be one of") + " " +
comma_or(["Buying", "Selling"]), raise_exception=True)
self.validate_use_for_website()
def validate_use_for_website(self):
if self.doc.use_for_website:
if self.doc.valid_for_all_countries:
if webnotes.conn.sql("""select name from `tabPrice List` where use_for_website=1
and valid_for_all_countries=1 and name!=%s""", self.doc.name):
webnotes.msgprint(_("Error: Another Price List already exists that is used for website and is valid for all countries."),
raise_exception=True)
elif self.doclist.get({"parentfield": "valid_for_countries"}):
for d in self.doclist.get({"parentfield": "valid_for_countries"}):
if webnotes.conn.sql("""select country from `tabPrice List Country` plc, `tabPrice List` pl
where plc.parent=pl.name and pl.use_for_website=1 and
ifnull(valid_for_all_countries, 0)=0 and country=%s and pl.name!=%s""",
(d.country, self.doc.name)):
webnotes.msgprint(_("Error: Another Price List already exists that is used for website and is valid for country")
+ ": " + d.country, raise_exception=True)
def on_trash(self):
webnotes.conn.sql("""delete from `tabItem Price` where price_list_name = %s""",
self.doc.name)

View File

@ -2,7 +2,7 @@
{
"creation": "2013-01-25 11:35:09",
"docstatus": 0,
"modified": "2013-06-19 15:24:23",
"modified": "2013-06-20 12:53:10",
"modified_by": "Administrator",
"owner": "Administrator"
},
@ -60,13 +60,6 @@
"options": "Currency",
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "conversion_rate",
"fieldtype": "Float",
"label": "Conversion Rate",
"reqd": 1
},
{
"default": "Selling",
"doctype": "DocField",
@ -76,31 +69,19 @@
"options": "Buying\nSelling",
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "use_for_website",
"fieldtype": "Check",
"label": "Use for Website"
},
{
"doctype": "DocField",
"fieldname": "column_break_3",
"fieldtype": "Column Break"
},
{
"default": "1",
"description": "Specify a list of Territories, for which, this Price List is valid",
"doctype": "DocField",
"fieldname": "valid_for_all_countries",
"fieldtype": "Check",
"label": "Valid for all countries"
},
{
"description": "Or specify a list of Countries, for which, this Price List is valid",
"doctype": "DocField",
"fieldname": "valid_for_countries",
"fieldname": "valid_for_territories",
"fieldtype": "Table",
"label": "Valid for the following countries",
"options": "Price List Country"
"label": "Valid for Territories",
"options": "For Territory",
"reqd": 1
},
{
"doctype": "DocField",

View File

@ -5,7 +5,6 @@ test_records = [
"currency": "INR",
"valid_for_all_countries": 1,
"buying_or_selling": "Selling",
"use_for_website": 1,
"conversion_rate": 1.0
}]
]

View File

@ -1 +0,0 @@
Countries where parent Price List is valid.

View File

@ -64,7 +64,6 @@ class DocType:
# enable default currency
webnotes.conn.set_value("Currency", args.get("currency"), "enabled", 1)
def_args = {
'current_fiscal_year':curr_fiscal_year,
@ -91,6 +90,8 @@ class DocType:
cp_args[k] = args[k]
self.set_cp_defaults(**cp_args)
create_territories()
self.create_feed_and_todo()
@ -102,9 +103,10 @@ class DocType:
import webnotes.utils
user_fullname = (args.get('first_name') or '') + (args.get('last_name')
and (" " + args.get('last_name')) or '')
webnotes.conn.commit()
return {'sys_defaults': webnotes.utils.get_defaults(), 'user_fullname': user_fullname}
def create_feed_and_todo(self):
"""update activty feed and create todo for creation of item, customer, vendor"""
import home
@ -245,4 +247,19 @@ def add_all_roles_to(name):
if role[0] not in ["Administrator", "Guest", "All", "Customer", "Supplier", "Partner"]:
d = profile.addchild("userroles", "UserRole")
d.role = role[0]
d.insert()
d.insert()
def create_territories():
"""create two default territories, one for home country and one named Rest of the World"""
from setup.utils import get_root_of
country = webnotes.conn.get_value("Control Panel", None, "country")
root_territory = get_root_of("Territory")
for name in (country, "Rest Of The World"):
if not webnotes.conn.exists("Territory", name):
webnotes.bean({
"doctype": "Territory",
"territory_name": name,
"parent_territory": root_territory,
"is_group": "No"
}).insert()

View File

@ -29,6 +29,19 @@ def get_company_currency(company):
return currency
def get_root_of(doctype):
"""Get root element of a DocType with a tree structure"""
result = webnotes.conn.sql_list("""select name from `tab%s`
where lft=1 and rgt=(select max(rgt) from `tab%s`)""" % (doctype, doctype))
return result[0] if result else None
def get_ancestors_of(doctype, name):
"""Get ancestor elements of a DocType with a tree structure"""
lft, rgt = webnotes.conn.get_value(doctype, name, ["lft", "rgt"])
result = webnotes.conn.sql_list("""select name from `tab%s`
where lft<%s and rgt>%s""" % (doctype, "%s", "%s"), (lft, rgt))
return result or None
@webnotes.whitelist()
def get_price_list_currency(args):
"""

View File

@ -137,8 +137,10 @@ def import_defaults():
{'doctype': 'Supplier Type', 'name': 'Default Supplier Type', 'supplier_type': 'Default Supplier Type'},
# Price List
{'doctype': 'Price List', 'name': 'Default Price List', 'price_list_name': 'Default Price List'},
{'doctype': 'Price List', 'name': 'Standard', 'price_list_name': 'Standard'},
{'doctype': 'Price List', 'name': 'Default Price List', 'price_list_name': 'Default Price List',
"buying_or_selling": "Selling"},
{'doctype': 'Price List', 'name': 'Standard', 'price_list_name': 'Standard',
"buying_or_selling": "Selling"},
# warehouse type
{'doctype': 'Warehouse Type', 'name': 'Default Warehouse Type', 'warehouse_type': 'Default Warehouse Type'},
@ -174,6 +176,6 @@ def import_defaults():
]
for r in records:
doc = webnotes.doc(r)
doc.insert()
bean = webnotes.bean(r)
bean.insert()

View File

@ -0,0 +1,8 @@
# For license information, please see license.txt
from __future__ import unicode_literals
import webnotes
class DocType:
def __init__(self, d, dl):
self.doc, self.doclist = d, dl

View File

@ -0,0 +1,35 @@
[
{
"creation": "2013-06-20 16:00:18",
"docstatus": 0,
"modified": "2013-06-20 16:01:34",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"doctype": "DocType",
"istable": 1,
"module": "Website",
"name": "__common__"
},
{
"doctype": "DocField",
"fieldname": "price_list",
"fieldtype": "Link",
"label": "Price List",
"name": "__common__",
"options": "Price List",
"parent": "Shopping Cart Price List",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0,
"reqd": 1
},
{
"doctype": "DocType",
"name": "Shopping Cart Price List"
},
{
"doctype": "DocField"
}
]

View File

@ -2,7 +2,73 @@
from __future__ import unicode_literals
import webnotes
from webnotes import _, msgprint
from webnotes.utils import comma_and
from webnotes.model.controller import DocListController
class DocType:
class ShoppingCartSetupError(webnotes.ValidationError): pass
class DocType(DocListController):
def __init__(self, d, dl):
self.doc, self.doclist = d, dl
self.doc, self.doclist = d, dl
def validate(self):
if self.doc.enabled:
self.validate_overlapping_territories("shopping_cart_price_lists", "price_list")
self.validate_overlapping_territories("shopping_cart_taxes_and_charges_masters",
"sales_taxes_and_charges_master")
self.validate_shipping_rules()
self.validate_exchange_rates_exist()
def validate_overlapping_territories(self, parentfield, fieldname):
names = [doc.fields(fieldname) for doc in self.doclist.get({"parentfield": parentfield})]
doctype = self.meta.get_field(parentfield).options
parenttype = self.meta.get_field(fieldname, parentfield=parentfield).options
if not names:
msgprint(_("Please specify at least one") + " " + _(doctype),
raise_exception=ShoppingCartSetupError)
territory_name = webnotes.conn.sql("""select territory, parent from `tabFor Territory`
where parenttype=%s and parent in (%s)""" % ("%s", ", ".join(["%s"]*names)),
tuple([parenttype] + names))
territory_name_map = {}
for territory, name in territory_name:
territory_name_map.setdefault(territory, []).append(name)
for territory, names in territory_name_map.items():
if len(names) > 1:
msgprint(_("Error for") + " " + _(doctype) + ": " + comma_and(names) +
" " + _("have a common territory") + ": " + territory,
raise_exception=ShoppingCartSetupError)
def validate_shipping_rules(self):
pass
def validate_exchange_rates_exist(self):
"""check if exchange rates exist for all Price List currencies (to company's currency)"""
company_currency = webnotes.conn.get_value("Company", self.doc.company, "default_currency")
if not company_currency:
msgprint(_("Please specify currency in Company") + ": " + self.doc.company,
raise_exception=ShoppingCartSetupError)
price_list_currency_map = webnotes.conn.get_values("Price List",
[d.price_list for d in self.doclist.get({"parentfield": "shopping_cart_price_lists"})],
"currency")
expected_to_exist = [currency + "-" + company_currency
for currency in price_list_currency_map.values()
if currency != company_currency]
exists = webnotes.conn.sql_list("""select name from `tabCurrency Exchange`
where name in (%s)""" % (", ".join(["%s"]*len(expected_to_exist)),),
tuple(expected_to_exist))
missing = list(set(expected_to_exist).difference(exists))
if missing:
msgprint(_("Missing Currency Exchange Rates for" + ": " + comma_and(missing)),
raise_exception=ShoppingCartSetupError)

View File

@ -2,7 +2,7 @@
{
"creation": "2013-06-19 15:57:32",
"docstatus": 0,
"modified": "2013-06-19 16:01:25",
"modified": "2013-06-21 12:59:30",
"modified_by": "Administrator",
"owner": "Administrator"
},
@ -15,16 +15,11 @@
},
{
"doctype": "DocField",
"fieldname": "territory",
"fieldtype": "Link",
"label": "Default Territory",
"name": "__common__",
"options": "Territory",
"parent": "Shopping Cart Settings",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0,
"reqd": 1
"permlevel": 0
},
{
"create": 1,
@ -43,7 +38,42 @@
"name": "Shopping Cart Settings"
},
{
"doctype": "DocField"
"doctype": "DocField",
"fieldname": "enabled",
"fieldtype": "Check",
"label": "Enable Shopping Cart"
},
{
"doctype": "DocField",
"fieldname": "default_territory",
"fieldtype": "Link",
"label": "Default Territory",
"options": "Territory",
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "shopping_cart_price_lists",
"fieldtype": "Table",
"label": "Shopping Cart Price Lists",
"options": "Shopping Cart Price List",
"reqd": 0
},
{
"doctype": "DocField",
"fieldname": "shopping_cart_taxes_and_charges_masters",
"fieldtype": "Table",
"label": "Shopping Cart Taxes and Charges Masters",
"options": "Shopping Cart Taxes and Charges Master",
"reqd": 0
},
{
"doctype": "DocField",
"fieldname": "company",
"fieldtype": "Link",
"label": "Company",
"options": "Company",
"reqd": 1
},
{
"doctype": "DocPerm"

View File

@ -0,0 +1,8 @@
# For license information, please see license.txt
from __future__ import unicode_literals
import webnotes
class DocType:
def __init__(self, d, dl):
self.doc, self.doclist = d, dl

View File

@ -0,0 +1,35 @@
[
{
"creation": "2013-06-20 16:57:03",
"docstatus": 0,
"modified": "2013-06-20 16:57:03",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"doctype": "DocType",
"istable": 1,
"module": "Website",
"name": "__common__"
},
{
"doctype": "DocField",
"fieldname": "sales_taxes_and_charges_master",
"fieldtype": "Link",
"label": "Tax Master",
"name": "__common__",
"options": "Sales Taxes and Charges Master",
"parent": "Shopping Cart Taxes and Charges Master",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0,
"reqd": 1
},
{
"doctype": "DocType",
"name": "Shopping Cart Taxes and Charges Master"
},
{
"doctype": "DocField"
}
]