[NEW] Majority Judgement addons initialisation
This commit is contained in:
3
majority_judgement/__init__.py
Normal file
3
majority_judgement/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from . import models
|
71
majority_judgement/__manifest__.py
Normal file
71
majority_judgement/__manifest__.py
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
# © 2022 Elabore
|
||||||
|
# @author Stéphan Sainléger <stephan.sainleger@elabore.coop>
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "Majority Judgement",
|
||||||
|
"summary": "Majority Judgement addons to support democracy in your organisation",
|
||||||
|
"version": "12.0.0.0.1",
|
||||||
|
"category": "Generic Modules/Others",
|
||||||
|
"license": "AGPL-3",
|
||||||
|
"author": "Elabore",
|
||||||
|
"website": "https://elabore.coop/",
|
||||||
|
"installable": True,
|
||||||
|
"auto_install": False,
|
||||||
|
"application": True,
|
||||||
|
"description": """
|
||||||
|
==================
|
||||||
|
Majority Judgement
|
||||||
|
==================
|
||||||
|
This module provides majority judgement fonctionnalities.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
Just install majority_judgement, all dependencies will be installed by default.
|
||||||
|
|
||||||
|
Known issues / Roadmap
|
||||||
|
======================
|
||||||
|
|
||||||
|
Bug Tracker
|
||||||
|
===========
|
||||||
|
Bugs are tracked on `GitHub Issues
|
||||||
|
<https://github.com/elabore-coop/decision-support-tools/issues>`_. In case of trouble, please
|
||||||
|
check there if your issue has already been reported. If you spotted it first,
|
||||||
|
help us smashing it by providing a detailed and welcomed feedback.
|
||||||
|
|
||||||
|
Credits
|
||||||
|
=======
|
||||||
|
|
||||||
|
Images
|
||||||
|
------
|
||||||
|
* Elabore: `Icon <https://elabore.coop/web/image/res.company/1/logo?unique=f3db262>`_.
|
||||||
|
|
||||||
|
Contributors
|
||||||
|
------------
|
||||||
|
* Stéphan Sainléger <https://github.com/stephansainleger>
|
||||||
|
|
||||||
|
Funders
|
||||||
|
-------
|
||||||
|
The development of this module has been financially supported by:
|
||||||
|
* Elabore (https://elabore.coop)
|
||||||
|
|
||||||
|
Maintainer
|
||||||
|
----------
|
||||||
|
This module is maintained by ELABORE.
|
||||||
|
|
||||||
|
""",
|
||||||
|
"depends": ["base"],
|
||||||
|
"external_dependencies": {
|
||||||
|
"python": [],
|
||||||
|
},
|
||||||
|
"data": [
|
||||||
|
"views/vote.xml",
|
||||||
|
"views/candidate.xml",
|
||||||
|
"views/menus.xml",
|
||||||
|
"security/ir.model.access.csv",
|
||||||
|
],
|
||||||
|
"demo": [],
|
||||||
|
"js": [],
|
||||||
|
"css": [],
|
||||||
|
"qweb": [],
|
||||||
|
}
|
7
majority_judgement/models/__init__.py
Normal file
7
majority_judgement/models/__init__.py
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from . import vote
|
||||||
|
from . import grade
|
||||||
|
from . import voter
|
||||||
|
from . import candidate
|
||||||
|
from . import ballot_line
|
11
majority_judgement/models/ballot_line.py
Normal file
11
majority_judgement/models/ballot_line.py
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from odoo import models, fields, api, _
|
||||||
|
|
||||||
|
|
||||||
|
class MajorityJudgementBallotLine(models.Model):
|
||||||
|
_name = "ballot.line"
|
||||||
|
_description = "Majority Judgement ballot line"
|
||||||
|
|
||||||
|
candidate_id = fields.Many2one("candidate", string=_("Candidate"), required=True)
|
||||||
|
grade_id = fields.Many2one("grade", string=_("Grade"), required=True)
|
16
majority_judgement/models/candidate.py
Normal file
16
majority_judgement/models/candidate.py
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from odoo import models, fields, api, _
|
||||||
|
|
||||||
|
|
||||||
|
class MajorityJudgementCandidate(models.Model):
|
||||||
|
_name = "candidate"
|
||||||
|
_description = "Majority Judgement candidate"
|
||||||
|
|
||||||
|
name = fields.Char(string=_("Name"), required=True)
|
||||||
|
description = fields.Text(string=_("Description"))
|
||||||
|
vote_id = fields.Many2one("vote", string=_("Vote"))
|
||||||
|
final_grade = fields.Many2one("grade", string=_("Final Grage"))
|
||||||
|
ballot_line_ids = fields.One2many(
|
||||||
|
"ballot.line", "candidate_id", string=_("Ballot lines")
|
||||||
|
)
|
20
majority_judgement/models/grade.py
Normal file
20
majority_judgement/models/grade.py
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from odoo import models, fields, api, _
|
||||||
|
|
||||||
|
|
||||||
|
class MajorityJudgementGradeModel(models.Model):
|
||||||
|
_name = "grade.model"
|
||||||
|
_description = "Majority Judgement grade model"
|
||||||
|
|
||||||
|
name = fields.Char(string=_("Name"), required=True)
|
||||||
|
color = fields.Integer("Color Index", default=0)
|
||||||
|
|
||||||
|
|
||||||
|
class MajorityJudgementGrade(models.Model):
|
||||||
|
_name = "grade"
|
||||||
|
_description = "Majority Judgement grade"
|
||||||
|
|
||||||
|
name = fields.Char(string=_("Name"), required=True)
|
||||||
|
color = fields.Integer("Color Index", default=0)
|
||||||
|
vote_id = fields.Many2one("vote", string=_("Vote"))
|
17
majority_judgement/models/vote.py
Normal file
17
majority_judgement/models/vote.py
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from odoo import models, fields, api, _
|
||||||
|
|
||||||
|
|
||||||
|
class MajorityJudgementVote(models.Model):
|
||||||
|
_name = "vote"
|
||||||
|
_description = "Majority Judgement vote"
|
||||||
|
|
||||||
|
name = fields.Char(string=_("Name"), required=True)
|
||||||
|
description = fields.Text(string=_("Description"))
|
||||||
|
question = fields.Char(string=_("Question"), required=True)
|
||||||
|
start_time = fields.Datetime(string=_("Start time"))
|
||||||
|
end_time = fields.Datetime(string=_("End time"))
|
||||||
|
|
||||||
|
grade_ids = fields.One2many("grade", "vote_id", string=_("Grades"))
|
||||||
|
candidate_ids = fields.One2many("candidate", "vote_id", string=_("Candidate"))
|
||||||
|
voter_ids = fields.One2many("voter", "vote_id", string=_("Voters"))
|
14
majority_judgement/models/voter.py
Normal file
14
majority_judgement/models/voter.py
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from odoo import models, fields, api, _
|
||||||
|
|
||||||
|
|
||||||
|
class MajorityJudgementVoter(models.Model):
|
||||||
|
_name = "voter"
|
||||||
|
_description = "Majority Judgement voter"
|
||||||
|
|
||||||
|
partner_id = fields.Many2one(
|
||||||
|
"res.partner", string=_("Associated contact"), required=True
|
||||||
|
)
|
||||||
|
vote_id = fields.Many2one("vote", string=_("Vote"))
|
||||||
|
has_voted = fields.Boolean(string="Has voted")
|
||||||
|
vote_timestamp = fields.Datetime(string=_("Has voted on"))
|
5
majority_judgement/security/ir.model.access.csv
Normal file
5
majority_judgement/security/ir.model.access.csv
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||||
|
access_vote_manager,access_vote_manager,model_vote,base.group_user,1,1,1,1
|
||||||
|
access_voter_manager,access_voter_manager,model_voter,base.group_user,1,1,1,1
|
||||||
|
access_grade_manager,access_grade_manager,model_grade,base.group_user,1,1,1,1
|
||||||
|
access_candidate_manager,access_candidate_manager,model_candidate,base.group_user,1,1,1,1
|
|
BIN
majority_judgement/static/description/icon.png
Normal file
BIN
majority_judgement/static/description/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
20
majority_judgement/views/candidate.xml
Normal file
20
majority_judgement/views/candidate.xml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="candidate_form_view" model="ir.ui.view">
|
||||||
|
<field name="name">candidate.form.view</field>
|
||||||
|
<field name="model">candidate</field>
|
||||||
|
<field name="priority">0</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form string="Candidate">
|
||||||
|
<sheet string="Candidate">
|
||||||
|
<group name="general_info">
|
||||||
|
<field name="name" />
|
||||||
|
<field name="description" />
|
||||||
|
</group>
|
||||||
|
</sheet>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
20
majority_judgement/views/menus.xml
Normal file
20
majority_judgement/views/menus.xml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
<record model="ir.actions.act_window" id="action_view_vote_list">
|
||||||
|
<field name="name">Votes</field>
|
||||||
|
<field name="res_model">vote</field>
|
||||||
|
<field name="view_type">form</field>
|
||||||
|
<field name="view_mode">kanban,tree,form</field>
|
||||||
|
<field name="help" type="html">
|
||||||
|
<p class="o_view_nocontent_smiling_face">
|
||||||
|
Create a new vote
|
||||||
|
</p>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<menuitem id="majority_judgement_menu_root" name="Majority Judgements" sequence="60" web_icon="majority_judgement,static/description/icon.png" />
|
||||||
|
|
||||||
|
<menuitem id="majority_judgement_men" name="Majority Judgements" parent="majority_judgement_menu_root" sequence="1" action="action_view_vote_list" />
|
||||||
|
|
||||||
|
|
||||||
|
</odoo>
|
64
majority_judgement/views/vote.xml
Normal file
64
majority_judgement/views/vote.xml
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
<record id="vote_tree_view" model="ir.ui.view">
|
||||||
|
<field name="name">vote.tree.view</field>
|
||||||
|
<field name="model">vote</field>
|
||||||
|
<field name="priority">0</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<tree string="Majority Judgement Vote">
|
||||||
|
<field name="name" />
|
||||||
|
<field name="question" />
|
||||||
|
<field name="start_time" />
|
||||||
|
<field name="end_time" />
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="vote_form_view" model="ir.ui.view">
|
||||||
|
<field name="name">vote.form.view</field>
|
||||||
|
<field name="model">vote</field>
|
||||||
|
<field name="priority">0</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form string="Majority Judgement Vote">
|
||||||
|
<sheet string="Majority Judgement Vote">
|
||||||
|
<group name="general_info">
|
||||||
|
<field name="name" />
|
||||||
|
<field name="description" />
|
||||||
|
<field name="question" />
|
||||||
|
<field name="start_time" />
|
||||||
|
<field name="end_time" />
|
||||||
|
</group>
|
||||||
|
<notebook>
|
||||||
|
<page name="candidates" string="Candidates">
|
||||||
|
<field name="candidate_ids" create="true">
|
||||||
|
<tree default_order="name">
|
||||||
|
<field name="name" />
|
||||||
|
<field name="description" />
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</page>
|
||||||
|
<page name="grades" string="Grades">
|
||||||
|
<field name="grade_ids" create="true">
|
||||||
|
<tree default_order="name">
|
||||||
|
<field name="name" />
|
||||||
|
<field name="color" />
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</page>
|
||||||
|
<page name="voters" string="Voters">
|
||||||
|
<field name="voter_ids" create="true">
|
||||||
|
<tree default_order="name">
|
||||||
|
<field name="partner_id" />
|
||||||
|
<field name="has_voted" />
|
||||||
|
<field name="vote_timestamp" />
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</page>
|
||||||
|
<page name="results" string="Results"></page>
|
||||||
|
</notebook>
|
||||||
|
</sheet>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
Reference in New Issue
Block a user