[MERGE] forward port of branch saas-4 up to 8c0c743

This commit is contained in:
Denis Ledoux
2014-08-04 16:14:31 +02:00
10 changed files with 64 additions and 16 deletions
@@ -140,6 +140,7 @@ class PaymentAcquirer(osv.Model):
'country': tx.partner_country_id, 'country': tx.partner_country_id,
'phone': tx.partner_phone, 'phone': tx.partner_phone,
'reference': tx.partner_reference, 'reference': tx.partner_reference,
'state': None,
} }
else: else:
if partner_id: if partner_id:
@@ -154,6 +155,7 @@ class PaymentAcquirer(osv.Model):
'country_id': partner.country_id.id, 'country_id': partner.country_id.id,
'country': partner.country_id, 'country': partner.country_id,
'phone': partner.phone, 'phone': partner.phone,
'state': partner.state_id,
} }
else: else:
partner, partner_data = False, {} partner, partner_data = False, {}
+2 -1
View File
@@ -118,6 +118,7 @@ class AcquirerPaypal(osv.Model):
'address1': partner_values['address'], 'address1': partner_values['address'],
'city': partner_values['city'], 'city': partner_values['city'],
'country': partner_values['country'] and partner_values['country'].name or '', 'country': partner_values['country'] and partner_values['country'].name or '',
'state': partner_values['state'] and partner_values['state'].name or '',
'email': partner_values['email'], 'email': partner_values['email'],
'zip': partner_values['zip'], 'zip': partner_values['zip'],
'first_name': partner_values['first_name'], 'first_name': partner_values['first_name'],
@@ -226,7 +227,7 @@ class TxPaypal(osv.Model):
# check seller # check seller
if data.get('receiver_email') != tx.acquirer_id.paypal_email_account: 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)) 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)) invalid_parameters.append(('receiver_id', data.get('receiver_id'), tx.acquirer_id.paypal_seller_account))
return invalid_parameters return invalid_parameters
+1 -5
View File
@@ -31,7 +31,7 @@
<span t-field="o.name"/> <span t-field="o.name"/>
</h2> </h2>
<div class="row mt32 mb32"> <div class="row mt32 mb32" id="informations">
<div t-if="o.client_order_ref" class="col-xs-3"> <div t-if="o.client_order_ref" class="col-xs-3">
<strong>Your Reference:</strong> <strong>Your Reference:</strong>
<p t-field="o.client_order_ref"/> <p t-field="o.client_order_ref"/>
@@ -45,10 +45,6 @@
<strong>Salesperson:</strong> <strong>Salesperson:</strong>
<p t-field="o.user_id.name"/> <p t-field="o.user_id.name"/>
</div> </div>
<div t-if="o.validity_date" class="col-xs-3">
<strong>Validity Date:</strong>
<p t-field="o.validity_date"/>
</div>
<div t-if="o.payment_term" class="col-xs-3"> <div t-if="o.payment_term" class="col-xs-3">
<strong>Payment Term:</strong> <strong>Payment Term:</strong>
<p t-field="o.payment_term"/> <p t-field="o.payment_term"/>
+17
View File
@@ -3,12 +3,15 @@ import cStringIO
import datetime import datetime
from itertools import islice from itertools import islice
import json import json
import xml.etree.ElementTree as ET
import logging import logging
import re import re
from sys import maxint from sys import maxint
import werkzeug.utils import werkzeug.utils
import urllib2
import werkzeug.wrappers import werkzeug.wrappers
from PIL import Image from PIL import Image
@@ -353,6 +356,20 @@ class Website(openerp.addons.web.controllers.main.Home):
obj = _object.browse(request.cr, request.uid, _id) obj = _object.browse(request.cr, request.uid, _id)
return bool(obj.website_published) return bool(obj.website_published)
@http.route(['/website/seo_suggest/<keywords>'], 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 # Helpers
#------------------------------------------------------ #------------------------------------------------------
+1 -1
View File
@@ -95,7 +95,7 @@
} }
}); });
} }
$.getJSON("http://suggest.hp.af.cm/suggest/"+encodeURIComponent(this.root + " "), addSuggestions); $.getJSON("/website/seo_suggest/" + encodeURIComponent(this.root + " "), addSuggestions);
}, },
}); });
+1
View File
@@ -13,6 +13,7 @@ OpenERP Sale Quote Roller
'data': [ 'data': [
'views/website_quotation.xml', 'views/website_quotation.xml',
'views/website_quotation_backend.xml', 'views/website_quotation_backend.xml',
'views/report_saleorder.xml',
'data/website_quotation_data.xml', 'data/website_quotation_data.xml',
'security/ir.model.access.csv', 'security/ir.model.access.csv',
], ],
+1 -1
View File
@@ -114,7 +114,7 @@ class sale_order(osv.osv):
'template_id': fields.many2one('sale.quote.template', 'Quote Template'), 'template_id': fields.many2one('sale.quote.template', 'Quote Template'),
'website_description': fields.html('Description'), 'website_description': fields.html('Description'),
'options' : fields.one2many('sale.order.option', 'order_id', 'Optional Products Lines'), '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", 'amount_undiscounted': fields.function(_get_total, string='Amount Before Discount', type="float",
digits_compute=dp.get_precision('Account')) digits_compute=dp.get_precision('Account'))
} }
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<template id="report_saleorder_validity_date" inherit_id="sale.report_saleorder_document">
<xpath expr="//div[@class='page']/div[@id='informations']" position="inside">
<div t-if="o.validity_date" class="col-xs-3">
<strong>Expiry Date:</strong>
<p t-field="o.validity_date"/>
</div>
</xpath>
</template>
</data>
</openerp>
+19 -5
View File
@@ -450,17 +450,31 @@ class res_partner(osv.osv, format_address):
def _commercial_sync_from_company(self, cr, uid, partner, context=None): def _commercial_sync_from_company(self, cr, uid, partner, context=None):
""" Handle sync of commercial fields when a new parent commercial entity is set, """ Handle sync of commercial fields when a new parent commercial entity is set,
as if they were related fields """ 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) commercial_fields = self._commercial_fields(cr, uid, context=context)
sync_vals = self._update_fields_values(cr, uid, partner.commercial_partner_id, sync_vals = self._update_fields_values(cr, uid, commercial_partner,
commercial_fields, context=context) commercial_fields, context=context)
partner.write(sync_vals) partner.write(sync_vals)
def _commercial_sync_to_children(self, cr, uid, partner, context=None): def _commercial_sync_to_children(self, cr, uid, partner, context=None):
""" Handle sync of commercial fields to descendants """ """ Handle sync of commercial fields to descendants """
commercial_fields = self._commercial_fields(cr, uid, context=context) commercial_fields = self._commercial_fields(cr, uid, context=context)
sync_vals = self._update_fields_values(cr, uid, partner.commercial_partner_id, commercial_partner = partner.commercial_partner_id
commercial_fields, context=context) 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] sync_children = [c for c in partner.child_ids if not c.is_company]
for child in sync_children: for child in sync_children:
self._commercial_sync_to_children(cr, uid, child, context=context) self._commercial_sync_to_children(cr, uid, child, context=context)
+7 -3
View File
@@ -250,20 +250,24 @@ class test_base(common.TransactionCase):
'parent_id': p1.id})) 'parent_id': p1.id}))
p2 = self.res_partner.browse(cr, uid, self.res_partner.search(cr, uid, p2 = self.res_partner.browse(cr, uid, self.res_partner.search(cr, uid,
[('email', '=', 'agr@sunhelm.com')])[0]) [('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() p.refresh()
self.assertEquals(p.commercial_partner_id, sunhelm, 'Incorrect commercial entity resolution') self.assertEquals(p.commercial_partner_id, sunhelm, 'Incorrect commercial entity resolution')
self.assertEquals(p.vat, sunhelm.vat, 'Commercial fields must be automatically synced') self.assertEquals(p.vat, sunhelm.vat, 'Commercial fields must be automatically synced')
sunhelmvat = 'BE0123456789' sunhelmvat = 'BE0123456789'
sunhelm.write({'vat': sunhelmvat}) sunhelm.write({'vat': sunhelmvat})
for p in (p0, p1, p11, p2): for p in (p0, p1, p11, p2, p3):
p.refresh() p.refresh()
self.assertEquals(p.vat, sunhelmvat, 'Commercial fields must be automatically and recursively synced') self.assertEquals(p.vat, sunhelmvat, 'Commercial fields must be automatically and recursively synced')
p1vat = 'BE0987654321' p1vat = 'BE0987654321'
p1.write({'vat': p1vat}) p1.write({'vat': p1vat})
for p in (sunhelm, p0, p11, p2): for p in (sunhelm, p0, p11, p2, p3):
p.refresh() p.refresh()
self.assertEquals(p.vat, sunhelmvat, 'Sync to children should only work downstream and on commercial entities') self.assertEquals(p.vat, sunhelmvat, 'Sync to children should only work downstream and on commercial entities')