[MERGE] forward port of branch 7.0 up to 6fdb783
authorChristophe Simonis <chs@odoo.com>
Tue, 10 Jun 2014 09:49:14 +0000 (11:49 +0200)
committerChristophe Simonis <chs@odoo.com>
Tue, 10 Jun 2014 09:49:14 +0000 (11:49 +0200)
13 files changed:
1  2 
addons/point_of_sale/wizard/pos_payment.py
addons/project_timesheet/project_timesheet.py
addons/report_webkit/webkit_report.py
addons/stock/stock.py
addons/web/static/src/js/view_form.js
addons/web/static/src/xml/base.xml
addons/web_kanban/static/src/css/kanban.css
addons/web_kanban/static/src/css/kanban.sass
openerp/addons/base/ir/ir_cron.py
openerp/addons/base/ir/ir_model.py
openerp/addons/base/module/module.py
openerp/osv/fields.py
openerp/osv/orm.py

@@@ -37,11 -37,17 +37,12 @@@ from openerp import repor
  import tempfile
  import time
  import logging
+ from functools import partial
  
 -from mako.template import Template
 -from mako.lookup import TemplateLookup
 -from mako import exceptions
 -
 -from openerp import netsvc
 -from openerp import pooler
  from report_helper import WebKitHelper
 +import openerp
 +from openerp.modules.module import get_module_resource
  from openerp.report.report_sxw import *
 -from openerp import addons
  from openerp import tools
  from openerp.tools.translate import _
  from openerp.osv.osv import except_osv
@@@ -117,12 -67,11 +118,11 @@@ class WebKitParser(report_sxw)
      """Custom class that use webkit to render HTML reports
         Code partially taken from report openoffice. Thanks guys :)
      """
 -    def __init__(self, name, table, rml=False, parser=False,
 -        header=True, store=False):
 +    def __init__(self, name, table, rml=False, parser=rml_parse,
 +        header=True, store=False, register=True):
-         self.parser_instance = False
          self.localcontext = {}
          report_sxw.__init__(self, name, table, rml, parser,
 -            header, store)
 +            header, store, register=register)
  
      def get_lib(self, cursor, uid):
          """Return the lib wkhtml path"""
          if report_xml.report_type != 'webkit':
              return super(WebKitParser,self).create_single_pdf(cursor, uid, ids, data, report_xml, context=context)
  
-         self.parser_instance = self.parser(cursor,
-                                            uid,
-                                            self.name2,
-                                            context=context)
+         parser_instance = self.parser(cursor,
+                                       uid,
+                                       self.name2,
+                                       context=context)
  
 -        self.pool = pooler.get_pool(cursor.dbname)
 +        self.pool = pool
          objs = self.getObjects(cursor, uid, ids, context)
-         self.parser_instance.set_context(objs, data, ids, report_xml.report_type)
+         parser_instance.set_context(objs, data, ids, report_xml.report_type)
  
          template =  False
  
          if not css :
              css = ''
  
+         translate_call = partial(self.translate_call, parser_instance)
 -        #default_filters=['unicode', 'entity'] can be used to set global filter
          body_mako_tpl = mako_template(template)
          helper = WebKitHelper(cursor, uid, report_xml.id, context)
-         self.parser_instance.localcontext['helper'] = helper
-         self.parser_instance.localcontext['css'] = css
-         self.parser_instance.localcontext['_'] = self.translate_call
++        parser_instance.localcontext['helper'] = helper
++        parser_instance.localcontext['css'] = css
++        parser_instance.localcontext['_'] = translate_call
 +
 +        # apply extender functions
 +        additional = {}
 +        if xml_id in _extender_functions:
 +            for fct in _extender_functions[xml_id]:
-                 fct(pool, cr, uid, self.parser_instance.localcontext, context)
++                fct(pool, cr, uid, parser_instance.localcontext, context)
 +
          if report_xml.precise_mode:
-             ctx = dict(self.parser_instance.localcontext)
-             for obj in self.parser_instance.localcontext['objects']:
 -            for obj in objs:
 -                parser_instance.localcontext['objects'] = [obj]
++            ctx = dict(parser_instance.localcontext)
++            for obj in parser_instance.localcontext['objects']:
 +                ctx['objects'] = [obj]
                  try :
 -                    html = body_mako_tpl.render(helper=helper,
 -                                                css=css,
 -                                                _=translate_call,
 -                                                **parser_instance.localcontext)
 +                    html = body_mako_tpl.render(dict(ctx))
                      htmls.append(html)
 -                except Exception:
 -                    msg = exceptions.text_error_template().render()
 +                except Exception, e:
 +                    msg = u"%s" % e
                      _logger.error(msg)
                      raise except_osv(_('Webkit render!'), msg)
          else:
              try :
-                 html = body_mako_tpl.render(dict(self.parser_instance.localcontext))
 -                html = body_mako_tpl.render(helper=helper,
 -                                            css=css,
 -                                            _=translate_call,
 -                                            **parser_instance.localcontext)
++                html = body_mako_tpl.render(dict(parser_instance.localcontext))
                  htmls.append(html)
 -            except Exception:
 -                msg = exceptions.text_error_template().render()
 +            except Exception, e:
 +                msg = u"%s" % e
                  _logger.error(msg)
                  raise except_osv(_('Webkit render!'), msg)
          head_mako_tpl = mako_template(header)
          try :
-             head = head_mako_tpl.render(dict(self.parser_instance.localcontext, _debug=False))
 -            head = head_mako_tpl.render(helper=helper,
 -                                        css=css,
 -                                        _=translate_call,
 -                                        _debug=False,
 -                                        **parser_instance.localcontext)
 -        except Exception:
 -            raise except_osv(_('Webkit render!'),
 -                exceptions.text_error_template().render())
++            head = head_mako_tpl.render(dict(parser_instance.localcontext, _debug=False))
 +        except Exception, e:
 +            raise except_osv(_('Webkit render!'), u"%s" % e)
          foot = False
          if footer :
              foot_mako_tpl = mako_template(footer)
              try :
-                 foot = foot_mako_tpl.render(dict({},
-                                             **self.parser_instance.localcontext))
 -                foot = foot_mako_tpl.render(helper=helper,
 -                                            css=css,
 -                                            _=translate_call,
 -                                            **parser_instance.localcontext)
 -            except:
 -                msg = exceptions.text_error_template().render()
++                foot = foot_mako_tpl.render(dict(parser_instance.localcontext))
 +            except Exception, e:
 +                msg = u"%s" % e
                  _logger.error(msg)
                  raise except_osv(_('Webkit render!'), msg)
          if report_xml.webkit_debug :
              try :
-                 deb = head_mako_tpl.render(dict(self.parser_instance.localcontext, _debug=tools.ustr("\n".join(htmls))))
 -                deb = head_mako_tpl.render(helper=helper,
 -                                           css=css,
 -                                           _debug=tools.ustr("\n".join(htmls)),
 -                                           _=translate_call,
 -                                           **parser_instance.localcontext)
 -            except Exception:
 -                msg = exceptions.text_error_template().render()
++                deb = head_mako_tpl.render(dict(parser_instance.localcontext, _debug=tools.ustr("\n".join(htmls))))
 +            except Exception, e:
 +                msg = u"%s" % e
                  _logger.error(msg)
                  raise except_osv(_('Webkit render!'), msg)
              return (deb, 'html')
Simple merge
Simple merge
      <t t-if="! widget.options.disable_multiple_selection">
          <button type="button" class="oe_button oe_selectcreatepopup-search-select oe_highlight" disabled="disabled">Select</button>
      </t>
+     <t t-if="!widget.options.no_create">
      <button type="button" class="oe_button oe_selectcreatepopup-search-create">Create</button>
-     or <a class="oe_selectcreatepopup-search-close oe_bold oe_form_button_cancel" href="javascript:void(0)">Cancel</a>
 -    or </t><a class="oe_button oe_selectcreatepopup-search-close oe_bold oe_form_button_cancel" href="javascript:void(0)">Cancel</a>
++    or </t><a class="oe_selectcreatepopup-search-close oe_bold oe_form_button_cancel" href="javascript:void(0)">Cancel</a>
  </t>
  <t t-name="AbstractFormPopup.buttons">
      <t t-if="! readonly">
  .openerp .oe_kanban_view .oe_kanban_groups {
    height: inherit;
  }
 -.openerp .oe_kanban_view.oe_kanban_ungrouped .oe_kanban_groups {
 -  width: 100%;
 -}
+ .openerp .oe_kanban_view .oe_kanban_groups_records {
+   height: 100%;
+ }
  .openerp .oe_kanban_view.oe_kanban_grouped_by_m2o .oe_kanban_group_title {
    cursor: move;
  }
      // KanbanGroups {{{
      .oe_kanban_groups
          height: inherit
 -    &.oe_kanban_ungrouped .oe_kanban_groups
 -        width: 100%
+     .oe_kanban_groups_records
+         height: 100%
      &.oe_kanban_grouped_by_m2o .oe_kanban_group_title
          cursor: move
      .oe_kanban_header
Simple merge
@@@ -1145,9 -1100,7 +1154,7 @@@ class ir_model_data(osv.osv)
          unlink_if_refcount((model, res_id) for model, res_id in to_unlink
                                  if model == 'ir.model.fields')
  
 -        ir_model_relation = self.pool.get('ir.model.relation')
 +        ir_model_relation = self.pool['ir.model.relation']
-         ir_module_module = self.pool['ir.module.module']
-         modules_to_remove_ids = ir_module_module.search(cr, uid, [('name', 'in', modules_to_remove)])
          relation_ids = ir_model_relation.search(cr, uid, [('module', 'in', modules_to_remove_ids)])
          ir_model_relation._module_data_uninstall(cr, uid, relation_ids, context)
  
Simple merge
Simple merge
@@@ -2769,17 -3125,11 +2769,17 @@@ class BaseModel(object)
                                  ('numeric', 'float', get_pg_type(f)[1], '::'+get_pg_type(f)[1]),
                                  ('float8', 'float', get_pg_type(f)[1], '::'+get_pg_type(f)[1]),
                              ]
-                             if f_pg_type == 'varchar' and f._type == 'char' and ((f.size is None and f_pg_size) or f_pg_size < f.size):
+                             if f_pg_type == 'varchar' and f._type == 'char' and f_pg_size and (f.size is None or f_pg_size < f.size):
 -                                cr.execute('ALTER TABLE "%s" RENAME COLUMN "%s" TO temp_change_size' % (self._table, k))
 -                                cr.execute('ALTER TABLE "%s" ADD COLUMN "%s" %s' % (self._table, k, pg_varchar(f.size)))
 -                                cr.execute('UPDATE "%s" SET "%s"=temp_change_size::%s' % (self._table, k, pg_varchar(f.size)))
 -                                cr.execute('ALTER TABLE "%s" DROP COLUMN temp_change_size CASCADE' % (self._table,))
 +                                try:
 +                                    with cr.savepoint():
 +                                        cr.execute('ALTER TABLE "%s" ALTER COLUMN "%s" TYPE %s' % (self._table, k, pg_varchar(f.size)))
 +                                except psycopg2.NotSupportedError:
 +                                    # In place alter table cannot be done because a view is depending of this field.
 +                                    # Do a manual copy. This will drop the view (that will be recreated later)
 +                                    cr.execute('ALTER TABLE "%s" RENAME COLUMN "%s" TO temp_change_size' % (self._table, k))
 +                                    cr.execute('ALTER TABLE "%s" ADD COLUMN "%s" %s' % (self._table, k, pg_varchar(f.size)))
 +                                    cr.execute('UPDATE "%s" SET "%s"=temp_change_size::%s' % (self._table, k, pg_varchar(f.size)))
 +                                    cr.execute('ALTER TABLE "%s" DROP COLUMN temp_change_size CASCADE' % (self._table,))
                                  cr.commit()
                                  _schema.debug("Table '%s': column '%s' (type varchar) changed size from %s to %s",
                                      self._table, k, f_pg_size or 'unlimited', f.size or 'unlimited')