def open_wizard(wizard): if not wizard: return try: data = json.loads(params.get('data', '{}'), object_hook=object_hook) direct_print = json.loads(params.get('direct_print', 'false')) email_print = json.loads(params.get('email_print', 'false')) email = json.loads(params.get('email', 'null')) name = json.loads(params.get('name', '""')) window = json.loads(params.get('window', 'false')) context = json.loads(params.get('context', '{}'), object_hook=object_hook) except ValueError: return try: Window.create_wizard(wizard, data, direct_print=direct_print, email_print=email_print, email=email, name=name, context=context, window=window) except Exception: # Prevent crashing the client return
def _exec_action(action, data=None, context=None): if context is None: context = {} if data is None: data = {} else: data = data.copy() if 'type' not in (action or {}): return def add_name_suffix(name): if not data.get('ids') or not data.get('model'): return name max_records = 5 rec_names = RPCExecute('model', data['model'], 'read', data['ids'][:max_records], ['rec_name']) name_suffix = _(', ').join([x['rec_name'] for x in rec_names]) if len(data['ids']) > max_records: name_suffix += _(u',\u2026') return _('%s (%s)') % (name, name_suffix) data['action_id'] = action['id'] if action['type'] == 'ir.action.act_window': view_ids = [] view_mode = None if action.get('views', []): view_ids = [x[0] for x in action['views']] view_mode = [x[1] for x in action['views']] elif action.get('view_id', False): view_ids = [action['view_id'][0]] action.setdefault('pyson_domain', '[]') ctx = { 'active_model': data.get('model'), 'active_id': data.get('id'), 'active_ids': data.get('ids', []), } ctx.update(rpc.CONTEXT) ctx['_user'] = rpc._USER decoder = PYSONDecoder(ctx) # TODO: comment changes action_ctx = context.copy() action_ctx.update(decoder.decode( action.get('pyson_context') or '{}')) action_ctx.update(ctx) action_ctx.update(data.get('extra_context', {})) action_ctx['context'] = ctx decoder = PYSONDecoder(action_ctx) domain = action['pyson_domain'] order = decoder.decode(action['pyson_order']) search_value = decoder.decode(action['pyson_search_value'] or '[]') tab_domain = [(n, (action_ctx, d), c) for n, d, c in action['domains']] name = action.get('name', '') if action.get('keyword', '') == 'form_relate': name = add_name_suffix(name) res_model = action.get('res_model', data.get('res_model')) res_id = action.get('res_id', data.get('res_id')) limit = action.get('limit') if limit is None: limit = CONFIG['client.limit'] Window.create(res_model, view_ids=view_ids, res_id=res_id, domain=domain, context=action_ctx, order=order, mode=view_mode, name=name, limit=limit, search_value=search_value, icon=(action.get('icon.rec_name') or ''), tab_domain=tab_domain, context_model=action['context_model'], context_domain=action.get('context_domain', None)) elif action['type'] == 'ir.action.wizard': name = action.get('name', '') if action.get('keyword', 'form_action') == 'form_action': name = add_name_suffix(name) context = copy.deepcopy(context) context.update(data.get('extra_context', {})) Window.create_wizard(action['wiz_name'], data, direct_print=action.get('direct_print', False), email_print=action.get('email_print', False), email=action.get('email'), name=name, context=context, icon=(action.get('icon.rec_name') or ''), window=action.get('window', False)) elif action['type'] == 'ir.action.report': Action.exec_report(action['report_name'], data, direct_print=action.get('direct_print', False), email_print=action.get('email_print', False), email=action.get('email'), context=context) elif action['type'] == 'ir.action.url': if action['url']: webbrowser.open(action['url'], new=2)
def _exec_action(action, data=None, context=None): from tryton.gui.window import Window if context is None: context = {} else: context = context.copy() if data is None: data = {} else: data = data.copy() if 'type' not in (action or {}): return context.pop('active_id', None) context.pop('active_ids', None) context.pop('active_model', None) def add_name_suffix(name, context=None): if not data.get('ids') or not data.get('model'): return name max_records = 5 ids = list(filter(lambda id: id >= 0, data['ids']))[:max_records] if not ids: return name rec_names = RPCExecute('model', data['model'], 'read', ids, ['rec_name'], context=context) name_suffix = _(', ').join([x['rec_name'] for x in rec_names]) if len(data['ids']) > len(ids): name_suffix += _(',...') if name_suffix: return _('%s (%s)') % (name, name_suffix) else: return name data['action_id'] = action['id'] if action['type'] == 'ir.action.act_window': view_ids = [] view_mode = None if action.get('views', []): view_ids = [x[0] for x in action['views']] view_mode = [x[1] for x in action['views']] elif action.get('view_id', False): view_ids = [action['view_id'][0]] action.setdefault('pyson_domain', '[]') ctx = { 'active_model': data.get('model'), 'active_id': data.get('id'), 'active_ids': data.get('ids') or [], } ctx.update(rpc.CONTEXT) ctx['_user'] = rpc._USER decoder = PYSONDecoder(ctx) action_ctx = context.copy() action_ctx.update( decoder.decode(action.get('pyson_context') or '{}')) ctx.update(action_ctx) ctx['context'] = ctx decoder = PYSONDecoder(ctx) domain = decoder.decode(action['pyson_domain']) order = decoder.decode(action['pyson_order']) search_value = decoder.decode(action['pyson_search_value'] or '[]') tab_domain = [(n, decoder.decode(d), c) for n, d, c in action['domains']] name = action.get('name', '') if action.get('keyword', ''): name = add_name_suffix(name, action_ctx) res_model = action.get('res_model', data.get('res_model')) res_id = action.get('res_id', data.get('res_id')) limit = action.get('limit') if limit is None: limit = CONFIG['client.limit'] Window.create(res_model, view_ids=view_ids, res_id=res_id, domain=domain, context=action_ctx, order=order, mode=view_mode, name=name, limit=limit, search_value=search_value, icon=(action.get('icon.rec_name') or ''), tab_domain=tab_domain, context_model=action['context_model'], context_domain=action['context_domain']) elif action['type'] == 'ir.action.wizard': name = action.get('name', '') if action.get('keyword', 'form_action') == 'form_action': name = add_name_suffix(name, context) Window.create_wizard(action['wiz_name'], data, direct_print=action.get( 'direct_print', False), name=name, context=context, icon=(action.get('icon.rec_name') or ''), window=action.get('window', False)) elif action['type'] == 'ir.action.report': Action.exec_report(action['report_name'], data, direct_print=action.get('direct_print', False), context=context) elif action['type'] == 'ir.action.url': if action['url']: webbrowser.open(action['url'], new=2)
def _exec_action(action, data=None, context=None): if context is None: context = {} if data is None: data = {} else: data = data.copy() if 'type' not in (action or {}): return if action['type'] == 'ir.action.act_window': view_ids = False view_mode = None if action.get('views', []): view_ids = [x[0] for x in action['views']] view_mode = [x[1] for x in action['views']] elif action.get('view_id', False): view_ids = [action['view_id'][0]] action.setdefault('pyson_domain', '[]') ctx = { 'active_id': data.get('id', False), 'active_ids': data.get('ids', []), } ctx.update(rpc.CONTEXT) eval_ctx = ctx.copy() eval_ctx['_user'] = rpc._USER action_ctx = PYSONDecoder(eval_ctx).decode( action.get('pyson_context') or '{}') ctx.update(action_ctx) ctx.update(context) domain_context = ctx.copy() domain_context['context'] = ctx domain_context['_user'] = rpc._USER domain = PYSONDecoder(domain_context).decode( action['pyson_domain']) search_context = ctx.copy() search_context['context'] = ctx search_context['_user'] = rpc._USER search_value = PYSONDecoder(search_context).decode( action['pyson_search_value'] or '[]') name = False if action.get('window_name', True): name = action.get('name', False) res_model = action.get('res_model', data.get('res_model')) res_id = action.get('res_id', data.get('res_id')) Window.create(view_ids, res_model, res_id, domain, action_ctx, view_mode, name=name, limit=action.get('limit'), auto_refresh=action.get('auto_refresh'), search_value=search_value, icon=(action.get('icon.rec_name') or '')) elif action['type'] == 'ir.action.wizard': Window.create_wizard(action['wiz_name'], data, direct_print=action.get('direct_print', False), email_print=action.get('email_print', False), email=action.get('email'), name=action.get('name', False), context=context, icon=(action.get('icon.rec_name') or ''), window=action.get('window', False)) elif action['type'] == 'ir.action.report': Action.exec_report(action['report_name'], data, direct_print=action.get('direct_print', False), email_print=action.get('email_print', False), email=action.get('email'), context=context) elif action['type'] == 'ir.action.url': if action['url']: webbrowser.open(action['url'], new=2)
def _exec_action(action, data=None, context=None): if context is None: context = {} else: context = context.copy() if 'date_format' not in context: context['date_format'] = rpc.CONTEXT.get('locale', {}).get('date', '%x') if data is None: data = {} else: data = data.copy() if 'type' not in (action or {}): return data['action_id'] = action['id'] if action['type'] == 'ir.action.act_window': view_ids = False view_mode = None if action.get('views', []): view_ids = [x[0] for x in action['views']] view_mode = [x[1] for x in action['views']] elif action.get('view_id', False): view_ids = [action['view_id'][0]] action.setdefault('pyson_domain', '[]') ctx = { 'active_model': data.get('model'), 'active_id': data.get('id'), 'active_ids': data.get('ids', []), } ctx.update(rpc.CONTEXT) ctx['_user'] = rpc._USER decoder = PYSONDecoder(ctx) action_ctx = decoder.decode(action.get('pyson_context') or '{}') action_ctx.update(context) action_ctx.update(ctx) action_ctx.update(data.get('extra_context', {})) action_ctx['context'] = ctx decoder = PYSONDecoder(action_ctx) domain = action['pyson_domain'] order = decoder.decode(action['pyson_order']) search_value = decoder.decode(action['pyson_search_value'] or '[]') tab_domain = [(n, (action_ctx, d)) for n, d in action['domains']] name = False if action.get('window_name', True): name = action.get('name', False) res_model = action.get('res_model', data.get('res_model')) res_id = action.get('res_id', data.get('res_id')) Window.create(view_ids, res_model, res_id, domain, action_ctx, order, view_mode, name=name, limit=action.get('limit'), search_value=search_value, icon=(action.get('icon.rec_name') or ''), tab_domain=tab_domain, context_model=action['context_model']) elif action['type'] == 'ir.action.wizard': context = copy.deepcopy(context) context.update(data.get('extra_context', {})) Window.create_wizard(action['wiz_name'], data, direct_print=action.get( 'direct_print', False), email_print=action.get('email_print', False), email=action.get('email'), name=action.get('name', False), context=context, icon=(action.get('icon.rec_name') or ''), window=action.get('window', False)) elif action['type'] == 'ir.action.report': Action.exec_report(action['report_name'], data, direct_print=action.get('direct_print', False), email_print=action.get('email_print', False), email=action.get('email'), context=context) elif action['type'] == 'ir.action.url': if action['url']: webbrowser.open(action['url'], new=2)
def _exec_action(action, data=None, context=None): if context is None: context = {} else: context = context.copy() if 'date_format' not in context: context['date_format'] = rpc.CONTEXT.get( 'locale', {}).get('date', '%x') if data is None: data = {} else: data = data.copy() if 'type' not in (action or {}): return data['action_id'] = action['id'] if action['type'] == 'ir.action.act_window': view_ids = False view_mode = None if action.get('views', []): view_ids = [x[0] for x in action['views']] view_mode = [x[1] for x in action['views']] elif action.get('view_id', False): view_ids = [action['view_id'][0]] action.setdefault('pyson_domain', '[]') ctx = { 'active_model': data.get('model'), 'active_id': data.get('id'), 'active_ids': data.get('ids', []), } ctx.update(rpc.CONTEXT) ctx['_user'] = rpc._USER decoder = PYSONDecoder(ctx) action_ctx = decoder.decode(action.get('pyson_context') or '{}') action_ctx.update(context) action_ctx.update(ctx) action_ctx.update(data.get('extra_context', {})) action_ctx['context'] = ctx decoder = PYSONDecoder(action_ctx) domain = action['pyson_domain'] order = decoder.decode(action['pyson_order']) search_value = decoder.decode(action['pyson_search_value'] or '[]') tab_domain = [(n, (action_ctx, d)) for n, d in action['domains']] name = False if action.get('window_name', True): name = action.get('name', False) res_model = action.get('res_model', data.get('res_model')) res_id = action.get('res_id', data.get('res_id')) Window.create(view_ids, res_model, res_id, domain, action_ctx, order, view_mode, name=name, limit=action.get('limit'), search_value=search_value, icon=(action.get('icon.rec_name') or ''), tab_domain=tab_domain, context_model=action['context_model']) elif action['type'] == 'ir.action.wizard': context = copy.deepcopy(context) context.update(data.get('extra_context', {})) Window.create_wizard(action['wiz_name'], data, direct_print=action.get('direct_print', False), email_print=action.get('email_print', False), email=action.get('email'), name=action.get('name', False), context=context, icon=(action.get('icon.rec_name') or ''), window=action.get('window', False)) elif action['type'] == 'ir.action.report': Action.exec_report(action['report_name'], data, direct_print=action.get('direct_print', False), email_print=action.get('email_print', False), email=action.get('email'), context=context) elif action['type'] == 'ir.action.url': if action['url']: webbrowser.open(action['url'], new=2)