| @ -0,0 +1,4 @@ | |||||
| # -*- coding: utf-8 -*- | |||||
| from . import controllers | |||||
| from . import models | |||||
| @ -0,0 +1,37 @@ | |||||
| # -*- coding: utf-8 -*- | |||||
| { | |||||
| 'name': "donation_qualifier", | |||||
| 'summary': """ | |||||
| Short (1 phrase/line) summary of the module's purpose, used as | |||||
| subtitle on modules listing or apps.openerp.com""", | |||||
| 'description': """ | |||||
| Long description of module's purpose | |||||
| """, | |||||
| 'author': "My Company", | |||||
| 'website': "http://www.yourcompany.com", | |||||
| # Categories can be used to filter modules in modules listing | |||||
| # Check https://github.com/odoo/odoo/blob/14.0/odoo/addons/base/data/ir_module_category_data.xml | |||||
| # for the full list | |||||
| 'category': 'Uncategorized', | |||||
| 'version': '0.1', | |||||
| # any module necessary for this one to work correctly | |||||
| 'depends': ['base'], | |||||
| # always loaded | |||||
| 'data': [ | |||||
| 'security/ir.model.access.csv', | |||||
| 'views/views.xml', | |||||
| 'views/partner.xml', | |||||
| 'views/templates.xml', | |||||
| ], | |||||
| # only loaded in demonstration mode | |||||
| 'demo': [ | |||||
| 'demo/demo.xml', | |||||
| ], | |||||
| 'installable': True, | |||||
| } | |||||
| @ -0,0 +1,3 @@ | |||||
| # -*- coding: utf-8 -*- | |||||
| from . import controllers | |||||
| @ -0,0 +1,21 @@ | |||||
| # -*- coding: utf-8 -*- | |||||
| # from odoo import http | |||||
| # class DonationQualifier(http.Controller): | |||||
| # @http.route('/donation_qualifier/donation_qualifier/', auth='public') | |||||
| # def index(self, **kw): | |||||
| # return "Hello, world" | |||||
| # @http.route('/donation_qualifier/donation_qualifier/objects/', auth='public') | |||||
| # def list(self, **kw): | |||||
| # return http.request.render('donation_qualifier.listing', { | |||||
| # 'root': '/donation_qualifier/donation_qualifier', | |||||
| # 'objects': http.request.env['donation_qualifier.donation_qualifier'].search([]), | |||||
| # }) | |||||
| # @http.route('/donation_qualifier/donation_qualifier/objects/<model("donation_qualifier.donation_qualifier"):obj>/', auth='public') | |||||
| # def object(self, obj, **kw): | |||||
| # return http.request.render('donation_qualifier.object', { | |||||
| # 'object': obj | |||||
| # }) | |||||
| @ -0,0 +1,30 @@ | |||||
| <odoo> | |||||
| <data> | |||||
| <!-- | |||||
| <record id="object0" model="donation_qualifier.donation_qualifier"> | |||||
| <field name="name">Object 0</field> | |||||
| <field name="value">0</field> | |||||
| </record> | |||||
| <record id="object1" model="donation_qualifier.donation_qualifier"> | |||||
| <field name="name">Object 1</field> | |||||
| <field name="value">10</field> | |||||
| </record> | |||||
| <record id="object2" model="donation_qualifier.donation_qualifier"> | |||||
| <field name="name">Object 2</field> | |||||
| <field name="value">20</field> | |||||
| </record> | |||||
| <record id="object3" model="donation_qualifier.donation_qualifier"> | |||||
| <field name="name">Object 3</field> | |||||
| <field name="value">30</field> | |||||
| </record> | |||||
| <record id="object4" model="donation_qualifier.donation_qualifier"> | |||||
| <field name="name">Object 4</field> | |||||
| <field name="value">40</field> | |||||
| </record> | |||||
| --> | |||||
| </data> | |||||
| </odoo> | |||||
| @ -0,0 +1,3 @@ | |||||
| # -*- coding: utf-8 -*- | |||||
| from . import models | |||||
| @ -0,0 +1,135 @@ | |||||
| # -*- coding: utf-8 -*- | |||||
| from odoo import models, fields, api | |||||
| from odoo.exceptions import UserError, ValidationError | |||||
| from psycopg2 import sql, DatabaseError | |||||
| from werkzeug import utils | |||||
| class donation_categoryQualifier(models.Model): | |||||
| _name = 'donation_qualifier.donation_categoryqualifier' | |||||
| _description = 'categories pour les qualificatifs' | |||||
| sql_constraints = [ | |||||
| ('category_uniq', 'UNIQUE((name))', 'This name already exists.') | |||||
| ] | |||||
| name = fields.Char('Name', required=True) | |||||
| order= fields.Integer() | |||||
| description = fields.Text() | |||||
| @api.constrains('name') | |||||
| def _check_name(self): | |||||
| count=self.search_count([('name','=',self.name),('id', '!=', self.id)]) | |||||
| if count>0: | |||||
| raise UserError('This name already exist') | |||||
| # @api.depends('value') | |||||
| # def _value_pc(self): | |||||
| # for record in self: | |||||
| # record.value2 = float(record.value) / 100 | |||||
| class donation_qualifier(models.Model): | |||||
| _name = 'donation_qualifier.donation_qualifier' | |||||
| _description = 'qualificatifs de contacts' | |||||
| name = fields.Char() | |||||
| type=fields.Selection([('checkbox','checkbox'),('text','text'),('numerical','numerical')], default='checkbox') | |||||
| default_value = fields.Char() | |||||
| description = fields.Text() | |||||
| category_id = fields.Many2one( | |||||
| 'donation_qualifier.donation_categoryqualifier', string='Category', tracking=True, | |||||
| required=True) | |||||
| class donation_partnerqualifier(models.Model): | |||||
| _name = 'donation_qualifier.donation_partnerqualifier' | |||||
| _description = 'qualificatifs pour stocker les valeurs au niveau du contact' | |||||
| # partner_id=fields.Many2one('res.partner',compute='compute_partner', inverse='partner_inverse') | |||||
| # partner_ids = fields.One2many('res.partner', 'qualifier_id') | |||||
| value=fields.Char() | |||||
| qualifier_id=fields.Many2one('donation_qualifier.donation_qualifier',string='qualifier') | |||||
| category = fields.Char(related='qualifier_id.category_id.name') | |||||
| partner_id = fields.Many2one( | |||||
| 'res.partner', | |||||
| string='partner', | |||||
| required=True, | |||||
| index=True, | |||||
| readonly=True, | |||||
| track_visibility='onchange', | |||||
| ondelete='restrict' | |||||
| ) | |||||
| sql_constraints = [ | |||||
| ('qualifier_uniq', 'unique (qualifier_id,partner_id)', 'A qualifier could be defined only one time on same partner.') | |||||
| ] | |||||
| @api.constrains('qualifier_id') | |||||
| def _check_qualifier_id(self): | |||||
| for q in self: | |||||
| result=self.search_count([('qualifier_id','=',int(self.qualifier_id)),('id', '!=', self.id),('partner_id','=',int(self.partner_id))]) | |||||
| if result>0: | |||||
| raise UserError('A qualifier could be defined only one time on same partner.') | |||||
| # _sql_constraints = [ | |||||
| # ('code_company_uniq', 'unique (code,company_id)', 'The code of the account must be unique per company !') | |||||
| # ] | |||||
| # def validate(self): | |||||
| # raise UserError(_( | |||||
| # 'This qualifier %s can\'t be used twice') | |||||
| # % donation_partnerqualifier.qualifier_id.name) | |||||
| # for donation_partnerqualifier in self: | |||||
| # vals={} | |||||
| # if self.env['donation_qualifier.donation_qualifier'].search([('name','=',donation_partnerqualifier.qualifier_id.name)]): | |||||
| # raise UserError(_( | |||||
| # 'This qualifier %s can\'t be used twice') | |||||
| # % donation_partnerqualifier.qualifier_id.name) | |||||
| # vals['value']=donation_partnerqualifier.value | |||||
| # vals['partner_id']=donation_partnerqualifier.partner_id | |||||
| # vals['qualifier_id']=donation_partnerqualifier.qualifier_id | |||||
| # donation_partnerqualifier.write(vals) | |||||
| # return | |||||
| # @api.depends('contact_ids') | |||||
| # def compute_partner(self): | |||||
| # if len(self.partner_ids) > 0: | |||||
| # self.partner_id = self.partner_ids[0] | |||||
| # def partner_inverse(self): | |||||
| # if len(self.partner_ids) > 0: | |||||
| # # delete previous reference | |||||
| # partner = self.env['res.partner'].browse(self.partner_ids[0].id) | |||||
| # partner.qualifier_id = False | |||||
| # # set new reference | |||||
| # self.partner_id.qualifier_id = self | |||||
| class partner(models.Model): | |||||
| _inherit = 'res.partner' | |||||
| @api.depends('qualifier_ids.partner_id') | |||||
| def _compute_qualifier_count(self): | |||||
| # The current user may not have access rights for donations | |||||
| for partner in self: | |||||
| try: | |||||
| partner.qualifier_count = len(partner.qualifier_ids) | |||||
| except Exception: | |||||
| partner.qualifier_count = 0 | |||||
| qualifier_ids = fields.One2many( | |||||
| 'donation_qualifier.donation_partnerqualifier', | |||||
| 'partner_id', | |||||
| string='Qualifier', | |||||
| readonly=True | |||||
| ) | |||||
| qualifier_count = fields.Integer( | |||||
| compute='_compute_qualifier_count', | |||||
| string="# of Qualifiers", | |||||
| readonly=True | |||||
| ) | |||||
| @ -0,0 +1,4 @@ | |||||
| id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink | |||||
| access_donation_qualifier_donation_qualifier,donation_qualifier.donation_qualifier,model_donation_qualifier_donation_qualifier,donation_main.group_donation_manager,1,1,1,1 | |||||
| access_donation_qualifier_donation_categoryqualifier,donation_qualifier.donation_categoryqualifier,model_donation_qualifier_donation_categoryqualifier,donation_main.group_donation_manager,1,1,1,1 | |||||
| access_donation_qualifier_donation_partnerqualifier,donation_qualifier.donation_partnerqualifier,model_donation_qualifier_donation_partnerqualifier,donation_main.group_donation_manager,1,1,1,1 | |||||
| @ -0,0 +1,30 @@ | |||||
| <?xml version="1.0"?> | |||||
| <odoo> | |||||
| <record id="act_partner_qualifier" model="ir.actions.act_window"> | |||||
| <field name="name">Qualifiers</field> | |||||
| <field name="res_model">donation_qualifier.donation_partnerqualifier</field> | |||||
| <field name="view_mode">tree,form,graph</field> | |||||
| <field name="context">{'search_default_partner_id': active_id}</field> | |||||
| </record> | |||||
| <record id="view_partner_form" model="ir.ui.view"> | |||||
| <field name="name">qualifier.button.res.partner.form</field> | |||||
| <field name="model">res.partner</field> | |||||
| <field name="inherit_id" ref="base.view_partner_form" /> | |||||
| <field name="arch" type="xml"> | |||||
| <xpath expr="//div[@name='button_box']" position="inside"> | |||||
| <button class="oe_stat_button" type="action" | |||||
| name="%(act_partner_qualifier)d" | |||||
| icon="fa-check-square"> | |||||
| <field string="Qualifiers" name="qualifier_count" widget="statinfo"/> | |||||
| </button> | |||||
| </xpath> | |||||
| </field> | |||||
| </record> | |||||
| </odoo> | |||||
| @ -0,0 +1,24 @@ | |||||
| <odoo> | |||||
| <data> | |||||
| <!-- | |||||
| <template id="listing"> | |||||
| <ul> | |||||
| <li t-foreach="objects" t-as="object"> | |||||
| <a t-attf-href="#{ root }/objects/#{ object.id }"> | |||||
| <t t-esc="object.display_name"/> | |||||
| </a> | |||||
| </li> | |||||
| </ul> | |||||
| </template> | |||||
| <template id="object"> | |||||
| <h1><t t-esc="object.display_name"/></h1> | |||||
| <dl> | |||||
| <t t-foreach="object._fields" t-as="field"> | |||||
| <dt><t t-esc="field"/></dt> | |||||
| <dd><t t-esc="object[field]"/></dd> | |||||
| </t> | |||||
| </dl> | |||||
| </template> | |||||
| --> | |||||
| </data> | |||||
| </odoo> | |||||
| @ -0,0 +1,145 @@ | |||||
| <odoo> | |||||
| <data> | |||||
| <!-- explicit list view definition --> | |||||
| <record model="ir.ui.view" id="donation_qualifier.category_list"> | |||||
| <field name="name">donation_categoryQualifier list</field> | |||||
| <field name="model">donation_qualifier.donation_categoryqualifier</field> | |||||
| <field name="arch" type="xml"> | |||||
| <tree> | |||||
| <field name="name"/> | |||||
| <field name="description"/> | |||||
| <field name="order"/> | |||||
| </tree> | |||||
| </field> | |||||
| </record> | |||||
| <record model="ir.ui.view" id="donation_qualifier.qualifier_list"> | |||||
| <field name="name">donation_qualifier list</field> | |||||
| <field name="model">donation_qualifier.donation_qualifier</field> | |||||
| <field name="arch" type="xml"> | |||||
| <tree> | |||||
| <field name="name"/> | |||||
| <field name="category_id"/> | |||||
| <field name="type"/> | |||||
| <field name="default_value"/> | |||||
| <field name="description"/> | |||||
| </tree> | |||||
| </field> | |||||
| </record> | |||||
| <record model="ir.ui.view" id="donation_qualifier.partnerqualifier_list"> | |||||
| <field name="name">donation_partnerqualifier list</field> | |||||
| <field name="model">donation_qualifier.donation_partnerqualifier</field> | |||||
| <field name="arch" type="xml"> | |||||
| <tree> | |||||
| <field name="category" string="category"/> | |||||
| <field name="qualifier_id"/> | |||||
| <field name="value"/> | |||||
| </tree> | |||||
| </field> | |||||
| </record> | |||||
| <record id="donation_qualifier.partnerqualifier_search" model="ir.ui.view"> | |||||
| <field name="name">donation_partnerqualifier.search</field> | |||||
| <field name="model">donation_qualifier.donation_partnerqualifier</field> | |||||
| <field name="arch" type="xml"> | |||||
| <search string="Search Qualifiers"> | |||||
| <field name="partner_id"/> | |||||
| </search> | |||||
| </field> | |||||
| </record> | |||||
| <record model="ir.ui.view" id="donation_qualifier.partnerqualifier_form" > | |||||
| <field name="name">donation_partnerqualifier Form</field> | |||||
| <field name="model">donation_qualifier.donation_partnerqualifier</field> | |||||
| <field name="arch" type="xml"> | |||||
| <form string="partnerqualifier_form"> | |||||
| <sheet> | |||||
| <label for="partner_id" string="Partner"/> | |||||
| <field name="partner_id"/> | |||||
| <br/> | |||||
| <label for="qualifier_id" string="Qualifier"/> | |||||
| <field name="qualifier_id"/> | |||||
| <br/> | |||||
| <label for="value" string="value"/> | |||||
| <field name="value"/> | |||||
| </sheet> | |||||
| </form> | |||||
| </field> | |||||
| </record> | |||||
| <!-- actions opening views on models --> | |||||
| <record model="ir.actions.act_window" id="category_action"> | |||||
| <field name="name">categories</field> | |||||
| <field name="res_model">donation_qualifier.donation_categoryqualifier</field> | |||||
| <field name="view_mode">tree,form</field> | |||||
| </record> | |||||
| <record model="ir.actions.act_window" id="qualifier_action"> | |||||
| <field name="name">qualifiers</field> | |||||
| <field name="res_model">donation_qualifier.donation_qualifier</field> | |||||
| <field name="view_mode">tree,form</field> | |||||
| </record> | |||||
| <record model="ir.actions.act_window" id="partnerqualifier_action"> | |||||
| <field name="name">partnerqualifiers</field> | |||||
| <field name="res_model">donation_qualifier.donation_partnerqualifier</field> | |||||
| <field name="view_mode">tree,form</field> | |||||
| </record> | |||||
| <!-- server action to the one above --> | |||||
| <!-- | |||||
| <record model="ir.actions.server" id="donation_qualifier.action_server"> | |||||
| <field name="name">donation_qualifier server</field> | |||||
| <field name="model_id" ref="model_donation_qualifier_donation_qualifier"/> | |||||
| <field name="state">code</field> | |||||
| <field name="code"> | |||||
| action = { | |||||
| "type": "ir.actions.act_window", | |||||
| "view_mode": "tree,form", | |||||
| "res_model": model._name, | |||||
| } | |||||
| </field> | |||||
| </record> | |||||
| --> | |||||
| <!-- Top menu item --> | |||||
| <!-- <menuitem name="donation_qualifier" id="donation_qualifier.menu_root" parent="contacts.menu_contacts"/> --> | |||||
| <menuitem id="donation_qualifier_title_menu" name ="Qualifiers" | |||||
| parent="donation_main.donation_top_menu" sequence="21"/> | |||||
| <menuitem id="donation_qualifier_menu" action="qualifier_action" | |||||
| parent="donation_qualifier_title_menu" sequence="1"/> | |||||
| <menuitem id="donation_categoryqualifier_menu" action="category_action" | |||||
| parent="donation_qualifier_title_menu" sequence="2"/> | |||||
| <!-- entries menu --> | |||||
| <!-- <menuitem name="categories" id="donation_qualifier.category" parent="donation_qualifier_menu" action="donation_qualifier.category_action_window"/> | |||||
| <menuitem name="qualifiers" id="donation_qualifier.qualifier" parent="donation_qualifier_menu" action="donation_qualifier.qualifier_action_window"/> --> | |||||
| <!-- actions --> | |||||
| <!-- <menuitem name="List" id="donation_qualifier.menu_1_list" parent="donation_qualifier.menu_1" | |||||
| action="donation_qualifier.action_window"/> --> | |||||
| <!-- <menuitem name="Server to list" id="donation_qualifier" parent="donation_qualifier.menu_2" | |||||
| action="donation_qualifier.action_server"/> --> | |||||
| </data> | |||||
| </odoo> | |||||