~txerpa-openerp/openobject-client-web/txerpa

« back to all changes in this revision

Viewing changes to addons/openerp/controllers/form.py

  • Committer: Biel - txerpa.com
  • Date: 2013-08-09 12:30:58 UTC
  • mfrom: (4670.2.245 openobject-client-web)
  • Revision ID: biel.massot@txerpa.com-20130809123058-892zu673ti1j8yjd
Actualizo a la ultima revision de trunk. Hay muchos bugs correjidos desde 2012. Elimino la revision 4873 por problemas de rendimiento en el dashboard de Contabilidad

Show diffs side-by-side

added added

removed removed

Lines of Context:
192
192
 
193
193
        if params.view_type == 'tree':
194
194
            params.editable = True
 
195
 
 
196
        target = getattr(cherrypy.request, '_terp_view_target', None)
 
197
        if target == 'new':
 
198
            # for target='new' keep orignal value as '_terp_view_target' hidden field,
 
199
            # that's necessary to keep wizard without toolbar button (new, save, pager, etc...)
 
200
            hidden_fields = params.hidden_fields or []
 
201
            hidden_fields.append(tw.form.Hidden(name='_terp_view_target', default=ustr(target)))
 
202
            params.hidden_fields = hidden_fields
 
203
 
195
204
        form = self.create_form(params, tg_errors)
196
205
 
197
206
        if not tg_errors:
221
230
        for kind, view in get_registered_views():
222
231
            buttons.views.append(dict(kind=kind, name=view.name, desc=view.desc))
223
232
 
224
 
        target = getattr(cherrypy.request, '_terp_view_target', None)
225
233
        buttons.toolbar = (target != 'new' and not form.is_dashboard) or mode == 'diagram'
 
234
 
226
235
        pager = None
227
236
        if buttons.pager:
228
237
            pager = tw.pager.Pager(id=form.screen.id, ids=form.screen.ids, offset=form.screen.offset,
404
413
                params.ids = (params.ids or []) + [params.id]
405
414
                params.count += 1
406
415
            else:
407
 
                original_data = Model.read(params.id, data.keys())
 
416
                ctx = dict((params.context or {}), **rpc.session.context)
 
417
                original_data = Model.read(params.id, data.keys(), ctx)
408
418
                modified = {}
409
419
                
410
420
                if original_data and isinstance(original_data, dict):
420
430
                                modified[field] = data[field]
421
431
 
422
432
                    ctx = utils.context_with_concurrency_info(params.context, params.concurrency_info)
423
 
                    Model.write([params.id], modified, ctx)
 
433
                    if modified:
 
434
                        Model.write([params.id], modified, ctx)
424
435
                else:
425
436
                    ctx = utils.context_with_concurrency_info(params.context, params.concurrency_info)
426
 
                    Model.write([params.id], data, ctx)
 
437
                    if data:
 
438
                        Model.write([params.id], data, ctx)
427
439
 
428
440
            tw.ConcurrencyInfo.update(
429
441
                params.model, Model.read([params.id], ['__last_update'], ctx)
486
498
                'search_data': ustr(params.search_data),
487
499
                'filter_domain': ustr(params.filter_domain),
488
500
                'notebook_tab': params.notebook_tab}
 
501
        if params.view_target and params.view_target == 'new':
 
502
            # within a wizard popup dialog - keep the orignal target mode
 
503
            # (here target='new' will hide toolbar buttons (new, save, pager, etc..)
 
504
            args['target'] = 'new'
489
505
        if params.o2m_edit:
490
506
            # hack to avoid creating new record line when editing o2m inline:
491
507
            # by default one2many.mako is going to fetch a new line (.create)
583
599
    def duplicate(self, **kw):
584
600
        params, data = TinyDict.split(kw)
585
601
 
 
602
        if not params.ids:
 
603
            params.ids = []
 
604
 
586
605
        id = params.id
587
606
        ctx = params.context
588
607
        model = params.model
707
726
        model = kw.get('model')
708
727
        field = kw.get('field')
709
728
        id = kw.get('id')
 
729
        default_value = kw.get('default_value')
710
730
        proxy = rpc.RPCProxy(model)
711
731
        if id == 'None':
712
732
            # FIXME: doesnt honor the context
713
 
            res = proxy.default_get([field]).get(field,'')
 
733
            res = default_value or proxy.default_get([field]).get(field,'')
714
734
        else:
715
735
            res = proxy.read([int(id)], [field])[0].get(field)
716
 
        if res:
 
736
        if res and res != 'None':
717
737
            return base64.decodestring(res)
718
738
        else:
719
739
            return open(openobject.paths.addons('openerp','static','images','placeholder.png'),'rb').read()
1008
1028
            domain.extend(expr_eval(action.get('domain', '[]'), context))
1009
1029
            action['domain'] = ustr(domain)
1010
1030
 
 
1031
        if context.get('search_view'):
 
1032
            context.pop('search_view')
1011
1033
        action['form_context'] = context or {}
1012
1034
        import actions
1013
1035
        return actions.execute(action, model=params.model, id=id, ids=ids, report_type='pdf', context_menu=context_menu)
1084
1106
 
1085
1107
        proxy = rpc.RPCProxy(model)
1086
1108
 
1087
 
        ids = ctx.id and [ctx.id] or []
 
1109
        ids = ctx.id and [ctx.id] or ctx.parent.id and [ctx.parent.id] or []
1088
1110
 
1089
1111
        try:
1090
1112
            response = getattr(proxy, func_name)(ids, *args)