[MERGE] forward port of branch saas-4 up to 8c0c743
This commit is contained in:
commit
655a5b948d
|
@ -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, {}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
<span t-field="o.name"/>
|
||||
</h2>
|
||||
|
||||
<div class="row mt32 mb32">
|
||||
<div class="row mt32 mb32" id="informations">
|
||||
<div t-if="o.client_order_ref" class="col-xs-3">
|
||||
<strong>Your Reference:</strong>
|
||||
<p t-field="o.client_order_ref"/>
|
||||
|
@ -45,10 +45,6 @@
|
|||
<strong>Salesperson:</strong>
|
||||
<p t-field="o.user_id.name"/>
|
||||
</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">
|
||||
<strong>Payment Term:</strong>
|
||||
<p t-field="o.payment_term"/>
|
||||
|
|
|
@ -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/<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
|
||||
#------------------------------------------------------
|
||||
|
|
|
@ -95,7 +95,7 @@
|
|||
}
|
||||
});
|
||||
}
|
||||
$.getJSON("http://suggest.hp.af.cm/suggest/"+encodeURIComponent(this.root + " "), addSuggestions);
|
||||
$.getJSON("/website/seo_suggest/" + encodeURIComponent(this.root + " "), addSuggestions);
|
||||
},
|
||||
});
|
||||
|
||||
|
|
|
@ -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',
|
||||
],
|
||||
|
|
|
@ -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'))
|
||||
}
|
||||
|
|
|
@ -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>
|
|
@ -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)
|
||||
|
|
|
@ -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')
|
||||
|
||||
|
|
Loading…
Reference in New Issue