diff --git a/yaltik_dsl/src/odoo_dsl.coco b/yaltik_dsl/src/odoo_dsl.coco deleted file mode 100644 index 1134520..0000000 --- a/yaltik_dsl/src/odoo_dsl.coco +++ /dev/null @@ -1,138 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2019-2020 Fabien Bourgeois -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . - -""" Odoo XML DSL """ - -from .xml_base import xmlroot, xmln - -# XML helpers functions and macros - -# Odoo root XML Node -odoo = lambda children: xmlroot({'tag': 'odoo', 'attrs': {}, 'children': children}) - -# Special data Node -def data(*args): - """ Allow optional args on data tag """ - if len(args) == 1: - args = list(args) - args.insert(0, {}) - return xmln('data', *args) - -# Aliases -function = lambda *args: xmln('function', *args) -record = lambda *args: xmln('record', *args) -form = lambda *args: xmln('form', *args) -tree = lambda *args: xmln('tree', *args) -search = lambda *args: xmln('search', *args) - -# Actions -act_window = lambda *args: xmln('act_window', *args) -def act_window_model(model, attrs): - """ Build new act_window from model and args """ - xmlid = '%s_view_action' % (model.replace('.', '_')) - name = '%s Action' % ' '.join(map(lambda w: w.capitalize(), model.split('.'))) - attrs_clone = attrs.copy() # Avoid side-effect - attrs_clone.update({'id': xmlid, 'name': name, 'res_model': model}) - return act_window(attrs_clone) - -def action_server_code(xmlid, name, modelref, code): - """ Server actions of type code """ - children = [field_name(name), - field({'name': 'model_id', 'ref': modelref}, []), - field({'name': 'state'}, ['code']), - field({'name': 'code'}, [code])] - return record({'id': xmlid, 'model': 'ir.actions.server'}, children) - -def client_action_multi(xmlid, name, model, action): - """ Client action multi (ir.values), with own xmlid, name, targeted model - and action """ - action = "'ir.actions.server,%d'%{}".format(action) - children = [field_name(name), - field({'name': 'key2', 'eval': "'client_action_multi'"}), - field({'name': 'model', 'eval': "'%s'" % model}), - field({'name': 'value', 'eval': action})] - return record({'id': xmlid, 'model': 'ir.values'}, children) - -# Menus -menuitem = lambda *args: xmln('menuitem', *args) -def menuitem_model(model, attrs): - """ Build new menuitem from model and attrs """ - model_und = model.replace('.', '_') - xmlid = '%s_menu' % model_und - actionid = '%s_view_action' % model_und - attrs_clone = attrs.copy() # Avoid side-effect - attrs_clone.update({'id': xmlid, 'action': actionid}) - return menuitem(attrs_clone) - -# Form aliases -group = lambda *args: xmln('group', *args) -header = lambda *args: xmln('header', *args) -footer = lambda *args: xmln('footer', *args) -sheet = lambda *args: xmln('sheet', *args) -button = lambda *args: xmln('button', *args) -p = lambda *args: xmln('p', *args) -xpath = lambda *args: xmln('xpath', *args) -attribute = lambda name, value: xmln('attribute', {'name': name}, [value]) - -# Fields -field = lambda *args: xmln('field', *args) -field_name = lambda name: field({'name': 'name'}, [name]) -field_nval = lambda name, value: field({'name': name}, [value]) -field_model = lambda model: field({'name': 'model'}, [model]) -field_inherit = lambda xmlid: field({'name': 'inherit_id', 'ref': xmlid}, []) -field_arch = lambda *args: field({'name': 'arch', 'type': 'xml'}, *args) - -# Search -filter = lambda *args: xmln('filter', *args) -separator = lambda *args: xmln('separator', *args) - -def filter_yes_no(field, str_yes=False, str_no=False): - """ Double filter for boolean : True and False """ - res = [] - if str_yes: - res.append(filter({'name': f'{field}_yes', 'string': str_yes, - 'domain': f"[('{field}', '=', True)]"})) - if str_no: - res.append(filter({'name': f'{field}_no', 'string': str_no, - 'domain': f"[('{field}', '=', False)]"})) - return res - -# Views -view = lambda xmlid, children: record({'id': xmlid, 'model': 'ir.ui.view'}, children) - -def view_def(xmlid, name, model, arch): - """ Shortcut for new view """ - return view(xmlid, [field_name(name), field_model(model), field_arch(arch)]) - -def view_new(view_type, model, arch): - """ View : new view definition, based on type (form, tree, ...) and model ID """ - model_und = model.replace('.', '_') - model_cap = ' '.join(map(lambda w: w.capitalize(), model.split('.'))) - xmlid = "%s_view_%s" % (model_und, view_type) - name = ' '.join([model_cap, view_type.capitalize()]) - return view_def(xmlid, name, model, arch) - -def view_inherit(filename, model, inherit, arch): - """ Inherited View simplification with name of the record, xmlid for model - and inherited view """ - module = filename.split('.')[2] - inherited = inherit.split('.')[1] - xmlid = '%s_inherit_%s' % (inherited, module) - model_cap = ' '.join(map(lambda w: w.capitalize(), model.split('.'))) - name = '%s Adaptations' % model_cap - return view(xmlid, [field_name(name), field_model(model), - field_inherit(inherit), field_arch(arch)])