diff --git a/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.js b/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.js
index 6d7f2db704..a2c3321a86 100644
--- a/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.js
+++ b/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.js
@@ -8,19 +8,20 @@
//
// 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
+// 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 .
+// along with this program. If not, see .
//--------- ONLOAD -------------
cur_frm.cscript.onload = function(doc, cdt, cdn) {
- //
+ if(doc.doctype === "Sales Taxes and Charges Master")
+ erpnext.add_for_territory();
}
cur_frm.cscript.refresh = function(doc, cdt, cdn) {
- cur_frm.set_footnote(wn.markdown(cur_frm.meta.description));
+ cur_frm.set_footnote(wn.markdown(cur_frm.meta.description));
}
// For customizing print
@@ -41,7 +42,7 @@ cur_frm.pformat.in_words_export = function(doc) {
}
cur_frm.pformat.other_charges= function(doc){
- //function to make row of table
+ //function to make row of table
var make_row = function(title,val,bold){
var bstart = ''; var bend = '';
return '
'+(bold?bstart:'')+title+(bold?bend:'')+' | '
@@ -63,7 +64,7 @@ cur_frm.pformat.other_charges= function(doc){
if (!doc.print_without_amount) {
var cl = getchildren('Sales Taxes and Charges',doc.name,'other_charges');
- // outer table
+ // outer table
var out=' | ';
// main table
@@ -77,7 +78,7 @@ cur_frm.pformat.other_charges= function(doc){
if(cl.length){
for(var i=0;iIn Words | '
out+= ''+doc.in_words_export+' | '
}
- out +=' |
';
+ out +='';
}
return out;
}
cur_frm.cscript.charge_type = function(doc, cdt, cdn) {
- var d = locals[cdt][cdn];
- if(d.idx == 1 && (d.charge_type == 'On Previous Row Amount' || d.charge_type == 'On Previous Row Total')){
- alert("You cannot select Charge Type as 'On Previous Row Amount' or 'On Previous Row Total' for first row");
- d.charge_type = '';
- }
- validated = false;
- refresh_field('charge_type',d.name,'other_charges');
- cur_frm.cscript.row_id(doc, cdt, cdn);
- cur_frm.cscript.rate(doc, cdt, cdn);
- cur_frm.cscript.tax_amount(doc, cdt, cdn);
+ var d = locals[cdt][cdn];
+ if(d.idx == 1 && (d.charge_type == 'On Previous Row Amount' || d.charge_type == 'On Previous Row Total')){
+ alert("You cannot select Charge Type as 'On Previous Row Amount' or 'On Previous Row Total' for first row");
+ d.charge_type = '';
+ }
+ validated = false;
+ refresh_field('charge_type',d.name,'other_charges');
+ cur_frm.cscript.row_id(doc, cdt, cdn);
+ cur_frm.cscript.rate(doc, cdt, cdn);
+ cur_frm.cscript.tax_amount(doc, cdt, cdn);
}
cur_frm.cscript.row_id = function(doc, cdt, cdn) {
- var d = locals[cdt][cdn];
- if(!d.charge_type && d.row_id){
- alert("Please select Charge Type first");
- d.row_id = '';
- }
- else if((d.charge_type == 'Actual' || d.charge_type == 'On Net Total') && d.row_id) {
- alert("You can Enter Row only if your Charge Type is 'On Previous Row Amount' or ' Previous Row Total'");
- d.row_id = '';
- }
- else if((d.charge_type == 'On Previous Row Amount' || d.charge_type == 'On Previous Row Total') && d.row_id){
- if(d.row_id >= d.idx){
- alert("You cannot Enter Row no. greater than or equal to current row no. for this Charge type");
- d.row_id = '';
- }
- }
- validated = false;
- refresh_field('row_id',d.name,'other_charges');
+ var d = locals[cdt][cdn];
+ if(!d.charge_type && d.row_id){
+ alert("Please select Charge Type first");
+ d.row_id = '';
+ }
+ else if((d.charge_type == 'Actual' || d.charge_type == 'On Net Total') && d.row_id) {
+ alert("You can Enter Row only if your Charge Type is 'On Previous Row Amount' or ' Previous Row Total'");
+ d.row_id = '';
+ }
+ else if((d.charge_type == 'On Previous Row Amount' || d.charge_type == 'On Previous Row Total') && d.row_id){
+ if(d.row_id >= d.idx){
+ alert("You cannot Enter Row no. greater than or equal to current row no. for this Charge type");
+ d.row_id = '';
+ }
+ }
+ validated = false;
+ refresh_field('row_id',d.name,'other_charges');
}
/*---------------------- Get rate if account_head has account_type as TAX or CHARGEABLE-------------------------------------*/
cur_frm.fields_dict['other_charges'].grid.get_field("account_head").get_query = function(doc,cdt,cdn) {
- return{
- filters:[
- ['Account', 'group_or_ledger', '=', 'Ledger'],
- ['Account', 'account_type', 'in', 'Tax, Chargeable, Income Account'],
- ['Account', 'company', '=', doc.company]
- ]
- }
+ return{
+ filters:[
+ ['Account', 'group_or_ledger', '=', 'Ledger'],
+ ['Account', 'account_type', 'in', 'Tax, Chargeable, Income Account'],
+ ['Account', 'company', '=', doc.company]
+ ]
+ }
}
cur_frm.fields_dict['other_charges'].grid.get_field("cost_center").get_query = function(doc) {
- return{
- 'company': doc.company,
- 'group_or_ledger': "Ledger"
- }
+ return{
+ 'company': doc.company,
+ 'group_or_ledger': "Ledger"
+ }
}
cur_frm.cscript.account_head = function(doc, cdt, cdn) {
- var d = locals[cdt][cdn];
- if(!d.charge_type && d.account_head){
- alert("Please select Charge Type first");
- validated = false;
- d.account_head = '';
- }
- else if(d.account_head && d.charge_type) {
- arg = "{'charge_type' : '" + d.charge_type +"', 'account_head' : '" + d.account_head + "'}";
- get_server_fields('get_rate', arg, 'other_charges', doc, cdt, cdn, 1);
- }
- refresh_field('account_head',d.name,'other_charges');
+ var d = locals[cdt][cdn];
+ if(!d.charge_type && d.account_head){
+ alert("Please select Charge Type first");
+ validated = false;
+ d.account_head = '';
+ }
+ else if(d.account_head && d.charge_type) {
+ arg = "{'charge_type' : '" + d.charge_type +"', 'account_head' : '" + d.account_head + "'}";
+ get_server_fields('get_rate', arg, 'other_charges', doc, cdt, cdn, 1);
+ }
+ refresh_field('account_head',d.name,'other_charges');
}
cur_frm.cscript.rate = function(doc, cdt, cdn) {
- var d = locals[cdt][cdn];
- if(!d.charge_type && d.rate) {
- alert("Please select Charge Type first");
- d.rate = '';
- }
- validated = false;
- refresh_field('rate',d.name,'other_charges');
+ var d = locals[cdt][cdn];
+ if(!d.charge_type && d.rate) {
+ alert("Please select Charge Type first");
+ d.rate = '';
+ }
+ validated = false;
+ refresh_field('rate',d.name,'other_charges');
}
cur_frm.cscript.tax_amount = function(doc, cdt, cdn) {
- var d = locals[cdt][cdn];
- if(!d.charge_type && d.tax_amount){
- alert("Please select Charge Type first");
- d.tax_amount = '';
- }
- else if(d.charge_type && d.tax_amount) {
- alert("You cannot directly enter Amount and if your Charge Type is Actual enter your amount in Rate");
- d.tax_amount = '';
- }
- validated = false;
- refresh_field('tax_amount',d.name,'other_charges');
+ var d = locals[cdt][cdn];
+ if(!d.charge_type && d.tax_amount){
+ alert("Please select Charge Type first");
+ d.tax_amount = '';
+ }
+ else if(d.charge_type && d.tax_amount) {
+ alert("You cannot directly enter Amount and if your Charge Type is Actual enter your amount in Rate");
+ d.tax_amount = '';
+ }
+ validated = false;
+ refresh_field('tax_amount',d.name,'other_charges');
};
\ No newline at end of file
diff --git a/accounts/doctype/shipping_rule/shipping_rule.js b/accounts/doctype/shipping_rule/shipping_rule.js
new file mode 100644
index 0000000000..8e8580bedc
--- /dev/null
+++ b/accounts/doctype/shipping_rule/shipping_rule.js
@@ -0,0 +1,5 @@
+$.extend(cur_frm.cscript, {
+ onload: function() {
+ erpnext.add_for_territory();
+ }
+});
\ No newline at end of file
diff --git a/controllers/accounts_controller.py b/controllers/accounts_controller.py
index 70151a6e3e..7bcc92e118 100644
--- a/controllers/accounts_controller.py
+++ b/controllers/accounts_controller.py
@@ -30,11 +30,6 @@ class AccountsController(TransactionBase):
self.validate_date_with_fiscal_year()
if self.meta.get_field("currency"):
- self.company_currency = get_company_currency(self.doc.company)
-
- validate_conversion_rate(self.doc.currency, self.doc.conversion_rate,
- self.meta.get_label("conversion_rate"), self.doc.company)
-
self.calculate_taxes_and_totals()
self.validate_value("grand_total", ">=", 0)
self.set_total_in_words()
@@ -66,7 +61,7 @@ class AccountsController(TransactionBase):
"price_list_name": self.doc.price_list_name,
"buying_or_selling": buying_or_selling
}))
-
+
if self.doc.price_list_currency:
if not self.doc.plc_conversion_rate:
company_currency = get_company_currency(self.doc.company)
@@ -129,6 +124,14 @@ class AccountsController(TransactionBase):
self.doclist.append(tax)
def calculate_taxes_and_totals(self):
+ # validate conversion rate
+ if not self.doc.currency:
+ self.doc.currency = get_company_currency(self.doc.company)
+ self.doc.conversion_rate = 1.0
+ else:
+ validate_conversion_rate(self.doc.currency, self.doc.conversion_rate,
+ self.meta.get_label("conversion_rate"), self.doc.company)
+
self.doc.conversion_rate = flt(self.doc.conversion_rate)
self.item_doclist = self.doclist.get({"parentfield": self.fname})
self.tax_doclist = self.doclist.get({"parentfield": self.other_fname})
diff --git a/patches/patch_list.py b/patches/patch_list.py
index 80e3102cd1..af74a89574 100644
--- a/patches/patch_list.py
+++ b/patches/patch_list.py
@@ -197,7 +197,6 @@ patch_list = [
"execute:webnotes.reload_doc('website', 'doctype', 'blog_post') #2013-03-25",
"execute:webnotes.reload_doc('website', 'doctype', 'web_page') #2013-03-25",
"execute:webnotes.reload_doc('setup', 'doctype', 'sales_partner') #2013-06-25",
- "execute:webnotes.bean('Style Settings').save() #2013-03-25",
"execute:webnotes.conn.set_value('Email Settings', None, 'send_print_in_body_and_attachment', 1)",
"patches.march_2013.p09_unset_user_type_partner",
"patches.march_2013.p10_set_fiscal_year_for_stock",
@@ -251,4 +250,5 @@ patch_list = [
"execute:webnotes.delete_doc('Report', 'Received Items To Be Billed')",
"patches.july_2013.p02_copy_shipping_address",
"patches.july_2013.p03_cost_center_company",
+ "execute:webnotes.bean('Style Settings').save() #2013-07-16",
]
\ No newline at end of file
diff --git a/public/js/utils.js b/public/js/utils.js
index b44a8755db..743c02bd0d 100644
--- a/public/js/utils.js
+++ b/public/js/utils.js
@@ -39,5 +39,14 @@ $.extend(erpnext, {
cur_frm.toggle_display("company", false);
}
}
- }
+ },
+
+ add_for_territory: function() {
+ if(cur_frm.doc.__islocal &&
+ wn.model.get_doclist(cur_frm.doc.doctype, cur_frm.doc.name).length === 1) {
+ var territory = wn.model.add_child(cur_frm.doc, "For Territory",
+ "valid_for_territories");
+ territory.territory = wn.defaults.get_default("territory");
+ }
+ },
});
\ No newline at end of file
diff --git a/selling/doctype/sales_common/sales_common.js b/selling/doctype/sales_common/sales_common.js
index 919de227d9..9c11eeab7e 100644
--- a/selling/doctype/sales_common/sales_common.js
+++ b/selling/doctype/sales_common/sales_common.js
@@ -492,6 +492,21 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({
}
},
+ shipping_rule: function() {
+ var me = this;
+ if(this.frm.doc.shipping_rule) {
+ this.frm.call({
+ doc: this.frm.doc,
+ method: "apply_shipping_rule",
+ callback: function(r) {
+ if(!r.exc) {
+ me.calculate_taxes_and_totals();
+ }
+ }
+ })
+ }
+ },
+
set_dynamic_labels: function() {
this._super();
set_sales_bom_help(this.frm.doc);
diff --git a/setup/doctype/global_defaults/global_defaults.txt b/setup/doctype/global_defaults/global_defaults.txt
index 6fc07b6c57..b59ca94c25 100644
--- a/setup/doctype/global_defaults/global_defaults.txt
+++ b/setup/doctype/global_defaults/global_defaults.txt
@@ -2,7 +2,7 @@
{
"creation": "2013-05-02 17:53:24",
"docstatus": 0,
- "modified": "2013-07-05 14:39:17",
+ "modified": "2013-07-15 15:03:01",
"modified_by": "Administrator",
"owner": "Administrator"
},
@@ -179,7 +179,6 @@
"fieldname": "hr",
"fieldtype": "Section Break",
"label": "HR",
- "options": "HR
",
"read_only": 0
},
{
diff --git a/setup/doctype/price_list/price_list.js b/setup/doctype/price_list/price_list.js
index 3bfa63af5e..26c9854592 100644
--- a/setup/doctype/price_list/price_list.js
+++ b/setup/doctype/price_list/price_list.js
@@ -14,43 +14,46 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-cur_frm.cscript.onload = function() {
- cur_frm.cscript.show_item_prices();
-}
-
-cur_frm.cscript.refresh = function(doc, cdt, cdn) {
- cur_frm.set_intro("");
- if(doc.__islocal) {
- cur_frm.toggle_display("item_prices_section", false);
- cur_frm.set_intro("Save this list to begin.");
- return;
- } else {
+$.extend(cur_frm.cscript, {
+ onload: function() {
cur_frm.cscript.show_item_prices();
+ erpnext.add_for_territory();
+ },
+
+ refresh: function(doc) {
+ cur_frm.set_intro("");
+ if(doc.__islocal) {
+ cur_frm.toggle_display("item_prices_section", false);
+ cur_frm.set_intro("Save this list to begin.");
+ return;
+ } else {
+ cur_frm.cscript.show_item_prices();
+ }
+ },
+
+ show_item_prices: function() {
+ var item_price = wn.model.get("Item Price", {price_list_name: cur_frm.doc.name});
+
+ var show = item_price && item_price.length;
+
+ cur_frm.toggle_display("item_prices_section", show);
+ $(cur_frm.fields_dict.item_prices.wrapper).empty();
+ if (!show) return;
+
+ var out = '\
+ \
+ ' + wn._("Item Code") + ' | \
+ ' + wn._("Price") + ' | \
+
\
+ '
+ + $.map(item_price.sort(function(a, b) { return a.parent.localeCompare(b.parent); }), function(d) {
+ return ''
+ + '' + d.parent + ' | '
+ + '' + format_currency(d.ref_rate, d.ref_currency) + ' | '
+ + '
'
+ }).join("\n")
+ + '\
+
';
+ $(out).appendTo($(cur_frm.fields_dict.item_prices.wrapper));
}
-}
-
-cur_frm.cscript.show_item_prices = function() {
- var item_price = wn.model.get("Item Price", {price_list_name: cur_frm.doc.name});
-
- var show = item_price && item_price.length;
-
- cur_frm.toggle_display("item_prices_section", show);
- $(cur_frm.fields_dict.item_prices.wrapper).empty();
- if (!show) return;
-
- var out = '\
- \
- ' + wn._("Item Code") + ' | \
- ' + wn._("Price") + ' | \
-
\
- '
- + $.map(item_price.sort(function(a, b) { return a.parent.localeCompare(b.parent); }), function(d) {
- return ''
- + '' + d.parent + ' | '
- + '' + format_currency(d.ref_rate, d.ref_currency) + ' | '
- + '
'
- }).join("\n")
- + '\
-
';
- $(out).appendTo($(cur_frm.fields_dict.item_prices.wrapper));
-}
+});
\ No newline at end of file
diff --git a/startup/webutils.py b/startup/webutils.py
index 4c1f5283e1..87d12e4ec2 100644
--- a/startup/webutils.py
+++ b/startup/webutils.py
@@ -82,10 +82,10 @@ def get_profile_args():
phone = party.phone
else:
mobile_no, phone = webnotes.conn.get_value("Contact", {"email_id": webnotes.session.user,
- "customer": party.name})
+ "customer": party.name}, ["mobile_no", "phone"])
return {
- "company_name": party.customer_name if party.doctype == "Customer" else party.company_name,
- "mobile_no": mobile_no,
- "phone": phone
+ "company_name": cstr(party.customer_name if party.doctype == "Customer" else party.company_name),
+ "mobile_no": cstr(mobile_no),
+ "phone": cstr(phone)
}
\ No newline at end of file
diff --git a/website/css/website.css b/website/css/website.css
index b71ff1316e..f2880e892d 100644
--- a/website/css/website.css
+++ b/website/css/website.css
@@ -186,3 +186,8 @@ fieldset[disabled] .btn-default.active {
background-color: #a7a9aa;
border-color: #a7a9aa;
}
+
+.breadcrumb {
+ margin: 0 -20px 20px;
+ border-radius: 0px;
+}
\ No newline at end of file
diff --git a/website/doctype/shopping_cart_settings/shopping_cart_settings.js b/website/doctype/shopping_cart_settings/shopping_cart_settings.js
new file mode 100644
index 0000000000..74988dc719
--- /dev/null
+++ b/website/doctype/shopping_cart_settings/shopping_cart_settings.js
@@ -0,0 +1,7 @@
+$.extend(cur_frm.cscript, {
+ onload: function() {
+ if(cur_frm.doc.__quotation_series) {
+ cur_frm.fields_dict.quotation_series.df.options = cur_frm.doc.__quotation_series;
+ }
+ }
+});
\ No newline at end of file
diff --git a/website/doctype/shopping_cart_settings/shopping_cart_settings.py b/website/doctype/shopping_cart_settings/shopping_cart_settings.py
index 7fe14c3d86..853eeb42a7 100644
--- a/website/doctype/shopping_cart_settings/shopping_cart_settings.py
+++ b/website/doctype/shopping_cart_settings/shopping_cart_settings.py
@@ -9,6 +9,9 @@ from webnotes.model.controller import DocListController
class ShoppingCartSetupError(webnotes.ValidationError): pass
class DocType(DocListController):
+ def onload(self):
+ self.doc.fields["__quotation_series"] = webnotes.get_doctype("Quotation").get_options("naming_series")
+
def validate(self):
if self.doc.enabled:
self.validate_price_lists()
@@ -17,6 +20,7 @@ class DocType(DocListController):
def on_update(self):
webnotes.conn.set_default("shopping_cart_enabled", self.doc.fields.get("enabled") or 0)
+ webnotes.conn.set_default("shopping_cart_quotation_series", self.doc.fields.get("quotation_series"))
def validate_overlapping_territories(self, parentfield, fieldname):
# for displaying message
@@ -91,16 +95,17 @@ class DocType(DocListController):
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))
+
+ if expected_to_exist:
+ 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))
+ missing = list(set(expected_to_exist).difference(exists))
- if missing:
- msgprint(_("Missing Currency Exchange Rates for" + ": " + comma_and(missing)),
- raise_exception=ShoppingCartSetupError)
+ if missing:
+ msgprint(_("Missing Currency Exchange Rates for" + ": " + comma_and(missing)),
+ raise_exception=ShoppingCartSetupError)
def get_name_from_territory(self, territory, parentfield, fieldname):
name = None
diff --git a/website/doctype/shopping_cart_settings/shopping_cart_settings.txt b/website/doctype/shopping_cart_settings/shopping_cart_settings.txt
index 7455864141..21e6ee37c4 100644
--- a/website/doctype/shopping_cart_settings/shopping_cart_settings.txt
+++ b/website/doctype/shopping_cart_settings/shopping_cart_settings.txt
@@ -2,7 +2,7 @@
{
"creation": "2013-06-19 15:57:32",
"docstatus": 0,
- "modified": "2013-07-10 18:42:29",
+ "modified": "2013-07-15 17:33:05",
"modified_by": "Administrator",
"owner": "Administrator"
},
@@ -78,6 +78,13 @@
"options": "Customer Group",
"reqd": 1
},
+ {
+ "doctype": "DocField",
+ "fieldname": "quotation_series",
+ "fieldtype": "Select",
+ "label": "Quotation Series",
+ "reqd": 1
+ },
{
"doctype": "DocField",
"fieldname": "section_break_6",
diff --git a/website/helpers/cart.py b/website/helpers/cart.py
index ea72e40ff0..2149534ebe 100644
--- a/website/helpers/cart.py
+++ b/website/helpers/cart.py
@@ -58,6 +58,10 @@ def update_cart(item_code, qty, with_doclist=0):
qty = flt(qty)
if qty == 0:
quotation.set_doclist(quotation.doclist.get({"item_code": ["!=", item_code]}))
+ if not quotation.doclist.get({"parentfield": "quotation_details"}) and \
+ not quotation.doc.fields.get("__islocal"):
+ quotation.__delete = True
+
else:
quotation_items = quotation.doclist.get({"item_code": item_code})
if not quotation_items:
@@ -72,8 +76,12 @@ def update_cart(item_code, qty, with_doclist=0):
apply_cart_settings(quotation=quotation)
- quotation.ignore_permissions = True
- quotation.save()
+ if hasattr(quotation, "__delete"):
+ webnotes.delete_doc("Quotation", quotation.doc.name, ignore_permissions=True)
+ quotation = _get_cart_quotation()
+ else:
+ quotation.ignore_permissions = True
+ quotation.save()
set_cart_count(quotation)
@@ -191,7 +199,7 @@ def decorate_quotation_doclist(doclist):
for d in doclist:
if d.item_code:
d.fields.update(webnotes.conn.get_value("Item", d.item_code,
- ["website_image", "web_short_description", "page_name"], as_dict=True))
+ ["website_image", "description", "page_name"], as_dict=True))
d.formatted_rate = fmt_money(d.export_rate, currency=doclist[0].currency)
d.formatted_amount = fmt_money(d.export_amount, currency=doclist[0].currency)
elif d.charge_type:
@@ -215,7 +223,7 @@ def _get_cart_quotation(party=None):
else:
qbean = webnotes.bean({
"doctype": "Quotation",
- "naming_series": "QTN-CART-",
+ "naming_series": webnotes.defaults.get_user_default("shopping_cart_quotation_series") or "QTN-CART-",
"quotation_to": party.doctype,
"company": webnotes.defaults.get_user_default("company"),
"order_type": "Shopping Cart",
@@ -224,7 +232,10 @@ def _get_cart_quotation(party=None):
(party.doctype.lower()): party.name
})
- # map_contact_fields(qbean, party)
+ if party.doctype == "Customer":
+ qbean.doc.contact_person = webnotes.conn.get_value("Contact", {"email_id": webnotes.session.user,
+ "customer": party.name})
+ qbean.run_method("set_contact_fields")
qbean.run_method("onload_post_render")
apply_cart_settings(party, qbean)
@@ -259,10 +270,11 @@ def update_party(fullname, company_name=None, mobile_no=None, phone=None):
party_bean.save()
qbean = _get_cart_quotation(party)
- qbean.doc.customer_name = company_name or fullname
- qbean.run_method("set_contact_fields")
- qbean.ignore_permissions = True
- qbean.save()
+ if not qbean.doc.fields.get("__islocal"):
+ qbean.doc.customer_name = company_name or fullname
+ qbean.run_method("set_contact_fields")
+ qbean.ignore_permissions = True
+ qbean.save()
def apply_cart_settings(party=None, quotation=None):
if not party:
@@ -374,27 +386,26 @@ def get_address_territory(address_name):
return territory
-@webnotes.whitelist()
-def checkout():
- quotation = _get_cart_quotation()
-
- quotation.ignore_permissions = True
- quotation.submit()
-
- from selling.doctype.quotation.quotation import make_sales_order
-
- sales_order = webnotes.bean(make_sales_order(quotation.doc.name))
-
- sales_order.ignore_permissions = True
- sales_order.insert()
- sales_order.submit()
-
- return sales_order
-
import unittest
-test_dependencies = ["Item", "Price List", "Contact"]
+test_dependencies = ["Item", "Price List", "Contact", "Shopping Cart Settings"]
class TestCart(unittest.TestCase):
+ def tearDown(self):
+ return
+
+ cart_settings = webnotes.bean("Shopping Cart Settings")
+ cart_settings.ignore_permissions = True
+ cart_settings.doc.enabled = 0
+ cart_settings.save()
+
+ def enable_shopping_cart(self):
+ return
+ if not webnotes.conn.get_value("Shopping Cart Settings", None, "enabled"):
+ cart_settings = webnotes.bean("Shopping Cart Settings")
+ cart_settings.ignore_permissions = True
+ cart_settings.doc.enabled = 1
+ cart_settings.save()
+
def test_get_lead_or_customer(self):
webnotes.session.user = "test@example.com"
party1 = get_lead_or_customer()
@@ -407,7 +418,9 @@ class TestCart(unittest.TestCase):
self.assertEquals(party.name, "_Test Customer")
def test_add_to_cart(self):
+ self.enable_shopping_cart()
webnotes.session.user = "test@example.com"
+
update_cart("_Test Item", 1)
quotation = _get_cart_quotation()
@@ -440,8 +453,9 @@ class TestCart(unittest.TestCase):
quotation_items = quotation.doclist.get({"parentfield": "quotation_details", "item_code": "_Test Item"})
self.assertEquals(quotation_items, [])
- def test_checkout(self):
+ def test_place_order(self):
quotation = self.test_update_cart()
- sales_order = checkout()
+ sales_order_name = place_order()
+ sales_order = webnotes.bean("Sales Order", sales_order_name)
self.assertEquals(sales_order.doclist.getone({"item_code": "_Test Item"}).prevdoc_docname, quotation.doc.name)
\ No newline at end of file
diff --git a/website/templates/css/product_page.css b/website/templates/css/product_page.css
index 566b6b57aa..457fc6276b 100644
--- a/website/templates/css/product_page.css
+++ b/website/templates/css/product_page.css
@@ -7,4 +7,7 @@
font-size: 18px;
line-height: 200%;
}
+ .item-stock {
+ margin-bottom: 10px !important;
+ }
\ No newline at end of file
diff --git a/website/templates/html/product_page.html b/website/templates/html/product_page.html
index 73520ef643..4f04cec6f9 100644
--- a/website/templates/html/product_page.html
+++ b/website/templates/html/product_page.html
@@ -32,8 +32,7 @@
Item Code: {{ name }}
Product Description
- {{ web_long_description or web_short_description or description or
- "[No description given]" }}
+ {{ web_long_description or description or "[No description given]" }}
diff --git a/website/templates/js/cart.js b/website/templates/js/cart.js
index bb3fcb96f3..2f5ad31d32 100644
--- a/website/templates/js/cart.js
+++ b/website/templates/js/cart.js
@@ -143,7 +143,7 @@ $.extend(wn.cart, {
'
' :
'{% include "app/website/templates/html/product_missing_image.html" %}';
- if(!doc.web_short_description) doc.web_short_description = doc.description;
+ if(doc.description === doc.item_name) doc.description = "";
$(repl('
\
\
@@ -151,7 +151,7 @@ $.extend(wn.cart, {
%(image_html)s
\
\
\
-
%(web_short_description)s
\
+
%(description)s
\
\
\
\