summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2017-07-28 18:11:07 +0200
committerChristophe Simonis <chs@odoo.com>2017-07-28 18:11:07 +0200
commitb76109173a8ddb2fbfe9cca29b759ec86fdc0f75 (patch)
tree2d5d72cfc2b588a2ff3dc15be140da20688b9346
parent08a958fe09d3f6255f0be8bee050030e1bb1ee27 (diff)
parentc0ec09e9d56485f3c6a24593bbc0240f54e433c3 (diff)
[MERGE] forward port branch saas-15 up to c0ec09e9d56
-rw-r--r--addons/crm/i18n/crm.pot3
-rw-r--r--addons/crm/report/crm_opportunity_report_views.xml9
-rw-r--r--addons/mrp/models/mrp_bom.py4
-rw-r--r--addons/mrp/views/mrp_production_views.xml2
-rw-r--r--addons/payment_authorize/models/authorize_request.py2
-rw-r--r--addons/purchase/models/purchase.py2
-rw-r--r--addons/web/static/src/js/services/crash_manager.js2
-rw-r--r--doc/cla/individual/vincentadriaensen.md11
-rw-r--r--odoo/addons/test_converter/models.py12
-rw-r--r--odoo/netsvc.py1
-rw-r--r--odoo/service/server.py8
11 files changed, 33 insertions, 23 deletions
diff --git a/addons/crm/i18n/crm.pot b/addons/crm/i18n/crm.pot
index 64fafb2c725..52c532aead2 100644
--- a/addons/crm/i18n/crm.pot
+++ b/addons/crm/i18n/crm.pot
@@ -3593,8 +3593,7 @@ msgstr ""
#. module: crm
#: model:ir.actions.act_window,help:crm.crm_opportunity_report_action_lead
-msgid "This report analyses the source of your leads\n"
-"(including those converted into opportunities)."
+msgid "This report analyses the source of your leads."
msgstr ""
#. module: crm
diff --git a/addons/crm/report/crm_opportunity_report_views.xml b/addons/crm/report/crm_opportunity_report_views.xml
index 67254155822..7fe9c41ae0a 100644
--- a/addons/crm/report/crm_opportunity_report_views.xml
+++ b/addons/crm/report/crm_opportunity_report_views.xml
@@ -77,8 +77,8 @@
<field name="domain">[('probability', '=', 100)]</field>
<field name="context">{'col_group_by': ['create_date:month'], 'group_by': ['country_id']}</field>
</record>
- <record id="ir_filters_crm_opportunity_report_next_action" model="ir.filters">
- <field name="name">Expected Revenus by Team</field>
+ <record id="filter_opportunity_expected_revenue" model="ir.filters">
+ <field name="name">Expected Revenue by Team</field>
<field name="model_id">crm.opportunity.report</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['create_date:month', 'team_id'], 'measures': ['expected_revenue', '__count']}</field>
@@ -191,13 +191,12 @@ with the the sales channel.</field>
<field name="res_model">crm.opportunity.report</field>
<field name="view_type">form</field>
<field name="view_mode">pivot,graph</field>
- <field name="context">{'search_default_current': True, 'active_test': True}</field>
+ <field name="context">{'search_default_current': True, 'active_test': True, 'search_default_lead': True}</field>
<field name="view_ids"
eval="[(5, 0, 0),
(0, 0, {'view_mode': 'graph', 'view_id': ref('crm_opportunity_report_view_graph_lead')}),
(0, 0, {'view_mode': 'pivot', 'view_id': ref('crm_opportunity_report_view_pivot_lead')})]"/>
- <field name="help">This report analyses the source of your leads
-(including those converted into opportunities).</field>
+ <field name="help">This report analyses the source of your leads.</field>
</record>
<menuitem
diff --git a/addons/mrp/models/mrp_bom.py b/addons/mrp/models/mrp_bom.py
index 64c1e723f92..3f9564caf6c 100644
--- a/addons/mrp/models/mrp_bom.py
+++ b/addons/mrp/models/mrp_bom.py
@@ -53,9 +53,9 @@ class MrpBom(models.Model):
default='asap', required=True)
picking_type_id = fields.Many2one(
'stock.picking.type', 'Operation Type', domain=[('code', '=', 'mrp_operation')],
- help="When a procurement has a ‘produce’ route with a operation type set, it will try to create "
+ help=u"When a procurement has a ‘produce’ route with a operation type set, it will try to create "
"a Manufacturing Order for that product using a BoM of the same operation type. That allows "
- "to define procurement rules which trigger different manufacturing orders with different BoMs. ")
+ "to define procurement rules which trigger different manufacturing orders with different BoMs.")
company_id = fields.Many2one(
'res.company', 'Company',
default=lambda self: self.env['res.company']._company_default_get('mrp.bom'),
diff --git a/addons/mrp/views/mrp_production_views.xml b/addons/mrp/views/mrp_production_views.xml
index 70989f0331e..7bd775fb1f4 100644
--- a/addons/mrp/views/mrp_production_views.xml
+++ b/addons/mrp/views/mrp_production_views.xml
@@ -151,7 +151,7 @@
<page string="Miscellaneous">
<group>
<group groups="stock.group_stock_multi_locations">
- <field name="picking_type_id" attrs="{'readonly': [('has_moves', '=', True)]}"/>
+ <field name="picking_type_id" domain="[('code', '=', 'mrp_operation')]" attrs="{'readonly': [('has_moves', '=', True)]}"/>
<field name="location_src_id" domain="[('usage','=','internal')]" attrs="{'readonly': [('has_moves', '=', True)]}"/>
<field name="location_dest_id" domain="[('usage','=','internal')]" attrs="{'readonly': [('has_moves', '=', True)]}"/>
</group>
diff --git a/addons/payment_authorize/models/authorize_request.py b/addons/payment_authorize/models/authorize_request.py
index f31cf45801a..1ae0e71b6ed 100644
--- a/addons/payment_authorize/models/authorize_request.py
+++ b/addons/payment_authorize/models/authorize_request.py
@@ -111,7 +111,7 @@ class AuthorizeAPI():
payment_profile = etree.SubElement(profile, "paymentProfiles")
etree.SubElement(payment_profile, "customerType").text = 'business' if partner.is_company else 'individual'
billTo = etree.SubElement(payment_profile, "billTo")
- etree.SubElement(billTo, "address").text = (partner.street + (partner.street2 if partner.street2 else '')) or None
+ etree.SubElement(billTo, "address").text = (partner.street or '' + (partner.street2 if partner.street2 else '')) or None
etree.SubElement(billTo, "city").text = partner.city
etree.SubElement(billTo, "state").text = partner.state_id.name or None
etree.SubElement(billTo, "zip").text = partner.zip
diff --git a/addons/purchase/models/purchase.py b/addons/purchase/models/purchase.py
index 51fd12ad241..cb8da54cd03 100644
--- a/addons/purchase/models/purchase.py
+++ b/addons/purchase/models/purchase.py
@@ -916,7 +916,7 @@ class ProcurementOrder(models.Model):
if self.purchase_line_id:
if not self.move_ids:
return False
- return all(move.state == 'done' for move in self.move_ids)
+ return all(move.state in ('done', 'cancel') for move in self.move_ids) and any(move.state == 'done' for move in self.move_ids)
return super(ProcurementOrder, self)._check()
def _get_purchase_schedule_date(self):
diff --git a/addons/web/static/src/js/services/crash_manager.js b/addons/web/static/src/js/services/crash_manager.js
index f09eec23daf..2684c46a12b 100644
--- a/addons/web/static/src/js/services/crash_manager.js
+++ b/addons/web/static/src/js/services/crash_manager.js
@@ -205,7 +205,7 @@ var RedirectWarningHandler = Dialog.extend(ExceptionHandler, {
}
});
-core.crash_registry.add('openerp.exceptions.RedirectWarning', RedirectWarningHandler);
+core.crash_registry.add('odoo.exceptions.RedirectWarning', RedirectWarningHandler);
return CrashManager;
});
diff --git a/doc/cla/individual/vincentadriaensen.md b/doc/cla/individual/vincentadriaensen.md
new file mode 100644
index 00000000000..3fcaa1d1352
--- /dev/null
+++ b/doc/cla/individual/vincentadriaensen.md
@@ -0,0 +1,11 @@
+Belgium, 19/07/2017
+
+I hereby agree to the terms of the Odoo Individual Contributor License
+Agreement v1.0.
+
+I declare that I am authorized and able to make this agreement and sign this
+declaration.
+
+Signed,
+
+Vincent Adriaensen vincentadriaensen@users.noreply.github.com https://github.com/vincentadriaensen
diff --git a/odoo/addons/test_converter/models.py b/odoo/addons/test_converter/models.py
index b6251a5df3f..55938946b34 100644
--- a/odoo/addons/test_converter/models.py
+++ b/odoo/addons/test_converter/models.py
@@ -21,12 +21,12 @@ class test_model(models.Model):
(4, "réponse <D>"),
])
selection_str = fields.Selection([
- ('A', "Qu'il n'est pas arrivé à Toronto"),
- ('B', "Qu'il était supposé arriver à Toronto"),
- ('C', "Qu'est-ce qu'il fout ce maudit pancake, tabernacle ?"),
- ('D', "La réponse D"),
- ], string="Lorsqu'un pancake prend l'avion à destination de Toronto et "
- "qu'il fait une escale technique à St Claude, on dit:")
+ ('A', u"Qu'il n'est pas arrivé à Toronto"),
+ ('B', u"Qu'il était supposé arriver à Toronto"),
+ ('C', u"Qu'est-ce qu'il fout ce maudit pancake, tabernacle ?"),
+ ('D', u"La réponse D"),
+ ], string=u"Lorsqu'un pancake prend l'avion à destination de Toronto et "
+ u"qu'il fait une escale technique à St Claude, on dit:")
html = fields.Html()
text = fields.Text()
diff --git a/odoo/netsvc.py b/odoo/netsvc.py
index 507e8e9c5c6..216814bc516 100644
--- a/odoo/netsvc.py
+++ b/odoo/netsvc.py
@@ -109,6 +109,7 @@ def init_logger():
_logger_init = True
logging.addLevelName(25, "INFO")
+ logging.captureWarnings(True)
from .tools.translate import resetlocale
resetlocale()
diff --git a/odoo/service/server.py b/odoo/service/server.py
index c0570ffe8e7..d3ee988216f 100644
--- a/odoo/service/server.py
+++ b/odoo/service/server.py
@@ -75,12 +75,11 @@ class BaseWSGIServerNoBind(LoggingBaseWSGIServerMixIn, werkzeug.serving.BaseWSGI
use this class, sets the socket and calls the process_request() manually
"""
def __init__(self, app):
- werkzeug.serving.BaseWSGIServer.__init__(self, "1", "1", app)
- def server_bind(self):
- # we dont bind beause we use the listen socket of PreforkServer#socket
- # instead we close the socket
+ werkzeug.serving.BaseWSGIServer.__init__(self, "127.0.0.1", 0, app)
+ # Directly close the socket. It will be replaced by WorkerHTTP when processing requests
if self.socket:
self.socket.close()
+
def server_activate(self):
# dont listen as we use PreforkServer#socket
pass
@@ -582,6 +581,7 @@ class PreforkServer(CommonServer):
if self.address:
# listen to socket
+ _logger.info('HTTP service (werkzeug) running on %s:%s', *self.address)
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.socket.setblocking(0)