[MERGE] forward port branch 9.0 up to 8de514f805

This commit is contained in:
Christophe Simonis
2017-04-21 14:19:05 +02:00
7 changed files with 33 additions and 21 deletions
@@ -25,7 +25,7 @@ class ReportOverdue(models.AbstractModel):
"FROM account_move_line l " "FROM account_move_line l "
"JOIN account_account_type at ON (l.user_type_id = at.id) " "JOIN account_account_type at ON (l.user_type_id = at.id) "
"JOIN account_move m ON (l.move_id = m.id) " "JOIN account_move m ON (l.move_id = m.id) "
"WHERE l.partner_id IN %s AND at.type IN ('receivable', 'payable') GROUP BY l.date, l.name, l.ref, l.date_maturity, l.partner_id, at.type, l.blocked, l.amount_currency, l.currency_id, l.move_id, m.name", (((fields.date.today(), ) + (tuple(partner_ids),)))) "WHERE l.partner_id IN %s AND at.type IN ('receivable', 'payable') AND NOT l.reconciled GROUP BY l.date, l.name, l.ref, l.date_maturity, l.partner_id, at.type, l.blocked, l.amount_currency, l.currency_id, l.move_id, m.name", (((fields.date.today(), ) + (tuple(partner_ids),))))
for row in self.env.cr.dictfetchall(): for row in self.env.cr.dictfetchall():
res[row.pop('partner_id')].append(row) res[row.pop('partner_id')].append(row)
return res return res
+6 -3
View File
@@ -554,9 +554,12 @@ class MergePartnerAutomatic(osv.TransientModel):
'min_id': min_id, 'min_id': min_id,
'aggr_ids': aggr_ids, 'aggr_ids': aggr_ids,
} }
# To ensure that the used partners are accessible by the user
proxy.create(cr, uid, values, context=context) partner_ids = self.pool['res.partner'].search(cr, uid, [('id', 'in', aggr_ids)], context=context)
counter += 1 if len(partner_ids) >= 2:
values['aggr_ids'] = partner_ids
proxy.create(cr, uid, values, context=context)
counter += 1
values = { values = {
'state': 'selection', 'state': 'selection',
+18 -8
View File
@@ -65,14 +65,24 @@ class PosOrder(models.Model):
closed_session.id, closed_session.id,
order['name'], order['name'],
order['amount_total']) order['amount_total'])
_logger.warning('attempting to create recovery session for saving order %s', order['name'])
new_session = PosSession.create({ open_sessions = PosSession.search([('state', '=', 'opened'),
'config_id': closed_session.config_id.id, ('rescue', '=', True),
'name': _('(RESCUE FOR %(session)s)') % {'session': closed_session.name}, ('config_id', '=', closed_session.config_id.id),
'rescue': True, # avoid conflict with live sessions ('name', 'ilike', closed_session.name)],
}) limit=1, order="start_at DESC")
# bypass opening_control (necessary when using cash control) if open_sessions:
new_session.signal_workflow('open') new_session = open_sessions[0]
_logger.warning('using existing recovery session %s for saving order %s', new_session, order['name'])
else:
_logger.warning('attempting to create recovery session for saving order %s', order['name'])
new_session = PosSession.create({
'config_id': closed_session.config_id.id,
'name': _('(RESCUE FOR %(session)s)') % {'session': closed_session.name},
'rescue': True, # avoid conflict with live sessions
})
# bypass opening_control (necessary when using cash control)
new_session.signal_workflow('open')
return new_session return new_session
-4
View File
@@ -636,8 +636,6 @@ class Database(http.Controller):
@http.route('/web/database/create', type='http', auth="none", methods=['POST'], csrf=False) @http.route('/web/database/create', type='http', auth="none", methods=['POST'], csrf=False)
def create(self, master_pwd, name, lang, password, **post): def create(self, master_pwd, name, lang, password, **post):
try: try:
if not re.match('^[a-zA-Z][a-zA-Z0-9_]+$', name):
raise Exception(_('Invalid database name. Only alphanumerical characters and underscore are allowed.'))
# country code could be = "False" which is actually True in python # country code could be = "False" which is actually True in python
country_code = post.get('country_code') or False country_code = post.get('country_code') or False
request.session.proxy("db").create_database(master_pwd, name, bool(post.get('demo')), lang, password, post['login'], country_code) request.session.proxy("db").create_database(master_pwd, name, bool(post.get('demo')), lang, password, post['login'], country_code)
@@ -650,8 +648,6 @@ class Database(http.Controller):
@http.route('/web/database/duplicate', type='http', auth="none", methods=['POST'], csrf=False) @http.route('/web/database/duplicate', type='http', auth="none", methods=['POST'], csrf=False)
def duplicate(self, master_pwd, name, new_name): def duplicate(self, master_pwd, name, new_name):
try: try:
if not re.match('^[a-zA-Z][a-zA-Z0-9_]+$', new_name):
raise Exception(_('Invalid database name. Only alphanumerical characters and underscore are allowed.'))
request.session.proxy("db").duplicate_database(master_pwd, name, new_name) request.session.proxy("db").duplicate_database(master_pwd, name, new_name)
return http.local_redirect('/web/database/manager') return http.local_redirect('/web/database/manager')
except Exception, e: except Exception, e:
+4 -1
View File
@@ -120,12 +120,15 @@ var QWeb2 = {
} }
return r.join(''); return r.join('');
} else { } else {
// avoid XMLSerializer with text node for IE
if (node.nodeType == 3) {
return node.data;
}
if (typeof XMLSerializer !== 'undefined') { if (typeof XMLSerializer !== 'undefined') {
return (new XMLSerializer()).serializeToString(node); return (new XMLSerializer()).serializeToString(node);
} else { } else {
switch(node.nodeType) { switch(node.nodeType) {
case 1: return node.outerHTML; case 1: return node.outerHTML;
case 3: return node.data;
case 4: return '<![CDATA[' + node.data + ']]>'; case 4: return '<![CDATA[' + node.data + ']]>';
case 8: return '<!-- ' + node.data + '-->'; case 8: return '<!-- ' + node.data + '-->';
} }
+3 -3
View File
@@ -61,7 +61,7 @@
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<label for="name" class="control-label">Database Name</label> <label for="name" class="control-label">Database Name</label>
<input id="name" type="text" name="name" class="form-control" required="required" autocomplete="off" pattern="^[a-zA-Z][a-zA-Z0-9_]+$" title="Only alphanumerical characters and underscore are allowed"/> <input id="name" type="text" name="name" class="form-control" required="required" autocomplete="off"/>
</div> </div>
</div> </div>
</div> </div>
@@ -208,7 +208,7 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="name" class="control-label">Database Name</label> <label for="name" class="control-label">Database Name</label>
<input id="name" type="text" name="name" class="form-control" required="required" pattern="^[a-zA-Z][a-zA-Z0-9_]+$" title="Only alphanumerical characters and underscore are allowed"/> <input id="name" type="text" name="name" class="form-control" required="required"/>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="copy">This database might have been moved or copied.</label> <label for="copy">This database might have been moved or copied.</label>
@@ -281,7 +281,7 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="new_name" class="control-label">New Name</label> <label for="new_name" class="control-label">New Name</label>
<input id="new_name" type="text" name="new_name" class="form-control" required="required" pattern="^[a-zA-Z][a-zA-Z0-9_]+$" title="Only alphanumerical characters and underscore are allowed"/> <input id="new_name" type="text" name="new_name" class="form-control" required="required"/>
</div> </div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
+1 -1
View File
@@ -168,7 +168,7 @@
</record> </record>
<record id="group_partner_manager" model="res.groups"> <record id="group_partner_manager" model="res.groups">
<field name="category_id" ref="module_category_extra"/> <field name="category_id" ref="module_category_usability"/>
</record> </record>
</data> </data>