diff --git a/addons/payment/models/payment_acquirer.py b/addons/payment/models/payment_acquirer.py index 2d466219140..c05270a7553 100644 --- a/addons/payment/models/payment_acquirer.py +++ b/addons/payment/models/payment_acquirer.py @@ -140,6 +140,7 @@ class PaymentAcquirer(osv.Model): 'country': tx.partner_country_id, 'phone': tx.partner_phone, 'reference': tx.partner_reference, + 'state': None, } else: if partner_id: @@ -154,6 +155,7 @@ class PaymentAcquirer(osv.Model): 'country_id': partner.country_id.id, 'country': partner.country_id, 'phone': partner.phone, + 'state': partner.state_id, } else: partner, partner_data = False, {} diff --git a/addons/payment_paypal/models/paypal.py b/addons/payment_paypal/models/paypal.py index 5dcbd975a4a..3f8872396f8 100644 --- a/addons/payment_paypal/models/paypal.py +++ b/addons/payment_paypal/models/paypal.py @@ -118,6 +118,7 @@ class AcquirerPaypal(osv.Model): 'address1': partner_values['address'], 'city': partner_values['city'], 'country': partner_values['country'] and partner_values['country'].name or '', + 'state': partner_values['state'] and partner_values['state'].name or '', 'email': partner_values['email'], 'zip': partner_values['zip'], 'first_name': partner_values['first_name'], @@ -226,7 +227,7 @@ class TxPaypal(osv.Model): # check seller if data.get('receiver_email') != tx.acquirer_id.paypal_email_account: invalid_parameters.append(('receiver_email', data.get('receiver_email'), tx.acquirer_id.paypal_email_account)) - if tx.acquirer_id.paypal_seller_account and data.get('receiver_id') != tx.acquirer_id.paypal_seller_account: + if data.get('receiver_id') and tx.acquirer_id.paypal_seller_account and data['receiver_id'] != tx.acquirer_id.paypal_seller_account: invalid_parameters.append(('receiver_id', data.get('receiver_id'), tx.acquirer_id.paypal_seller_account)) return invalid_parameters diff --git a/addons/sale/views/report_saleorder.xml b/addons/sale/views/report_saleorder.xml index 243004869e3..a61120c4216 100644 --- a/addons/sale/views/report_saleorder.xml +++ b/addons/sale/views/report_saleorder.xml @@ -31,7 +31,7 @@ -
+
Your Reference:

@@ -45,10 +45,6 @@ Salesperson:

-
- Validity Date: -

-

Payment Term:

diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index 7149a31dabc..0ba7c3224c9 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -3,12 +3,15 @@ import cStringIO import datetime from itertools import islice import json +import xml.etree.ElementTree as ET + import logging import re from sys import maxint import werkzeug.utils +import urllib2 import werkzeug.wrappers from PIL import Image @@ -353,6 +356,20 @@ class Website(openerp.addons.web.controllers.main.Home): obj = _object.browse(request.cr, request.uid, _id) return bool(obj.website_published) + @http.route(['/website/seo_suggest/'], type='http', auth="public", website=True) + def seo_suggest(self, keywords): + url = "http://google.com/complete/search" + param = { + 'ie': 'utf8', + 'oe': 'utf8', + 'output': 'toolbar', + 'q': keywords + } + req = urllib2.Request("%s?%s" % (url, werkzeug.url_encode(param))) + request = urllib2.urlopen(req) + xmlroot = ET.fromstring(request.read()) + return json.dumps([sugg[0].attrib['data'] for sugg in xmlroot if len(sugg) and sugg[0].attrib['data']]) + #------------------------------------------------------ # Helpers #------------------------------------------------------ diff --git a/addons/website/static/src/js/website.seo.js b/addons/website/static/src/js/website.seo.js index 1c4bad90ffc..7714f7e1a0d 100644 --- a/addons/website/static/src/js/website.seo.js +++ b/addons/website/static/src/js/website.seo.js @@ -95,7 +95,7 @@ } }); } - $.getJSON("http://suggest.hp.af.cm/suggest/"+encodeURIComponent(this.root + " "), addSuggestions); + $.getJSON("/website/seo_suggest/" + encodeURIComponent(this.root + " "), addSuggestions); }, }); diff --git a/addons/website_quote/__openerp__.py b/addons/website_quote/__openerp__.py index 3991f6ac17e..79e2c818aef 100644 --- a/addons/website_quote/__openerp__.py +++ b/addons/website_quote/__openerp__.py @@ -13,6 +13,7 @@ OpenERP Sale Quote Roller 'data': [ 'views/website_quotation.xml', 'views/website_quotation_backend.xml', + 'views/report_saleorder.xml', 'data/website_quotation_data.xml', 'security/ir.model.access.csv', ], diff --git a/addons/website_quote/models/order.py b/addons/website_quote/models/order.py index c031baf7632..b19614410b5 100644 --- a/addons/website_quote/models/order.py +++ b/addons/website_quote/models/order.py @@ -114,7 +114,7 @@ class sale_order(osv.osv): 'template_id': fields.many2one('sale.quote.template', 'Quote Template'), 'website_description': fields.html('Description'), 'options' : fields.one2many('sale.order.option', 'order_id', 'Optional Products Lines'), - 'validity_date': fields.date('Validity Date'), + 'validity_date': fields.date('Expiry Date'), 'amount_undiscounted': fields.function(_get_total, string='Amount Before Discount', type="float", digits_compute=dp.get_precision('Account')) } diff --git a/addons/website_quote/views/report_saleorder.xml b/addons/website_quote/views/report_saleorder.xml new file mode 100644 index 00000000000..e85a48f9d22 --- /dev/null +++ b/addons/website_quote/views/report_saleorder.xml @@ -0,0 +1,13 @@ + + + + + + diff --git a/openerp/addons/base/res/res_partner.py b/openerp/addons/base/res/res_partner.py index 7d6b92ad315..a0e8433baa5 100644 --- a/openerp/addons/base/res/res_partner.py +++ b/openerp/addons/base/res/res_partner.py @@ -450,17 +450,31 @@ class res_partner(osv.osv, format_address): def _commercial_sync_from_company(self, cr, uid, partner, context=None): """ Handle sync of commercial fields when a new parent commercial entity is set, as if they were related fields """ - if partner.commercial_partner_id != partner: + commercial_partner = partner.commercial_partner_id + if not commercial_partner: + # On child partner creation of a parent partner, + # the commercial_partner_id is not yet computed + commercial_partner_id = self._commercial_partner_compute( + cr, uid, [partner.id], 'commercial_partner_id', [], context=context)[partner.id] + commercial_partner = self.browse(cr, uid, commercial_partner_id, context=context) + if commercial_partner != partner: commercial_fields = self._commercial_fields(cr, uid, context=context) - sync_vals = self._update_fields_values(cr, uid, partner.commercial_partner_id, - commercial_fields, context=context) + sync_vals = self._update_fields_values(cr, uid, commercial_partner, + commercial_fields, context=context) partner.write(sync_vals) def _commercial_sync_to_children(self, cr, uid, partner, context=None): """ Handle sync of commercial fields to descendants """ commercial_fields = self._commercial_fields(cr, uid, context=context) - sync_vals = self._update_fields_values(cr, uid, partner.commercial_partner_id, - commercial_fields, context=context) + commercial_partner = partner.commercial_partner_id + if not commercial_partner: + # On child partner creation of a parent partner, + # the commercial_partner_id is not yet computed + commercial_partner_id = self._commercial_partner_compute( + cr, uid, [partner.id], 'commercial_partner_id', [], context=context)[partner.id] + commercial_partner = self.browse(cr, uid, commercial_partner_id, context=context) + sync_vals = self._update_fields_values(cr, uid, commercial_partner, + commercial_fields, context=context) sync_children = [c for c in partner.child_ids if not c.is_company] for child in sync_children: self._commercial_sync_to_children(cr, uid, child, context=context) diff --git a/openerp/addons/base/tests/test_base.py b/openerp/addons/base/tests/test_base.py index bbc5b21d1fb..b34451d0396 100644 --- a/openerp/addons/base/tests/test_base.py +++ b/openerp/addons/base/tests/test_base.py @@ -250,20 +250,24 @@ class test_base(common.TransactionCase): 'parent_id': p1.id})) p2 = self.res_partner.browse(cr, uid, self.res_partner.search(cr, uid, [('email', '=', 'agr@sunhelm.com')])[0]) + self.res_partner.write(cr, uid, sunhelm.id, {'child_ids': [(0, 0, {'name': 'Ulrik Greenthorn', + 'email': 'ugr@sunhelm.com'})]}) + p3 = self.res_partner.browse(cr, uid, self.res_partner.search(cr, uid, + [('email', '=', 'ugr@sunhelm.com')])[0]) - for p in (p0, p1, p11, p2): + for p in (p0, p1, p11, p2, p3): p.refresh() self.assertEquals(p.commercial_partner_id, sunhelm, 'Incorrect commercial entity resolution') self.assertEquals(p.vat, sunhelm.vat, 'Commercial fields must be automatically synced') sunhelmvat = 'BE0123456789' sunhelm.write({'vat': sunhelmvat}) - for p in (p0, p1, p11, p2): + for p in (p0, p1, p11, p2, p3): p.refresh() self.assertEquals(p.vat, sunhelmvat, 'Commercial fields must be automatically and recursively synced') p1vat = 'BE0987654321' p1.write({'vat': p1vat}) - for p in (sunhelm, p0, p11, p2): + for p in (sunhelm, p0, p11, p2, p3): p.refresh() self.assertEquals(p.vat, sunhelmvat, 'Sync to children should only work downstream and on commercial entities')