From 6a9535ee5c8555b75d7370f806c75a7309f0a6d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phan=20Sainl=C3=A9ger?= Date: Sat, 5 Mar 2022 00:47:39 +0100 Subject: [PATCH] [NEW] Majority Judgement addons initialisation --- majority_judgement/__init__.py | 3 + majority_judgement/__manifest__.py | 71 ++++++++++++++++++ majority_judgement/models/__init__.py | 7 ++ majority_judgement/models/ballot_line.py | 11 +++ majority_judgement/models/candidate.py | 16 ++++ majority_judgement/models/grade.py | 20 +++++ majority_judgement/models/vote.py | 17 +++++ majority_judgement/models/voter.py | 14 ++++ .../security/ir.model.access.csv | 5 ++ .../static/description/icon.png | Bin 0 -> 18209 bytes majority_judgement/views/candidate.xml | 20 +++++ majority_judgement/views/menus.xml | 20 +++++ majority_judgement/views/vote.xml | 64 ++++++++++++++++ 13 files changed, 268 insertions(+) create mode 100644 majority_judgement/__init__.py create mode 100644 majority_judgement/__manifest__.py create mode 100644 majority_judgement/models/__init__.py create mode 100644 majority_judgement/models/ballot_line.py create mode 100644 majority_judgement/models/candidate.py create mode 100644 majority_judgement/models/grade.py create mode 100644 majority_judgement/models/vote.py create mode 100644 majority_judgement/models/voter.py create mode 100644 majority_judgement/security/ir.model.access.csv create mode 100644 majority_judgement/static/description/icon.png create mode 100644 majority_judgement/views/candidate.xml create mode 100644 majority_judgement/views/menus.xml create mode 100644 majority_judgement/views/vote.xml diff --git a/majority_judgement/__init__.py b/majority_judgement/__init__.py new file mode 100644 index 0000000..cde864b --- /dev/null +++ b/majority_judgement/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import models diff --git a/majority_judgement/__manifest__.py b/majority_judgement/__manifest__.py new file mode 100644 index 0000000..321221e --- /dev/null +++ b/majority_judgement/__manifest__.py @@ -0,0 +1,71 @@ +# © 2022 Elabore +# @author Stéphan Sainléger +# 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 +`_. 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 `_. + +Contributors +------------ +* Stéphan Sainléger + +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": [], +} diff --git a/majority_judgement/models/__init__.py b/majority_judgement/models/__init__.py new file mode 100644 index 0000000..da4559f --- /dev/null +++ b/majority_judgement/models/__init__.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- + +from . import vote +from . import grade +from . import voter +from . import candidate +from . import ballot_line diff --git a/majority_judgement/models/ballot_line.py b/majority_judgement/models/ballot_line.py new file mode 100644 index 0000000..ac8e366 --- /dev/null +++ b/majority_judgement/models/ballot_line.py @@ -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) diff --git a/majority_judgement/models/candidate.py b/majority_judgement/models/candidate.py new file mode 100644 index 0000000..9f1a083 --- /dev/null +++ b/majority_judgement/models/candidate.py @@ -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") + ) diff --git a/majority_judgement/models/grade.py b/majority_judgement/models/grade.py new file mode 100644 index 0000000..5ed157b --- /dev/null +++ b/majority_judgement/models/grade.py @@ -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")) diff --git a/majority_judgement/models/vote.py b/majority_judgement/models/vote.py new file mode 100644 index 0000000..5711c08 --- /dev/null +++ b/majority_judgement/models/vote.py @@ -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")) diff --git a/majority_judgement/models/voter.py b/majority_judgement/models/voter.py new file mode 100644 index 0000000..6b0984f --- /dev/null +++ b/majority_judgement/models/voter.py @@ -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")) diff --git a/majority_judgement/security/ir.model.access.csv b/majority_judgement/security/ir.model.access.csv new file mode 100644 index 0000000..bf2e7a4 --- /dev/null +++ b/majority_judgement/security/ir.model.access.csv @@ -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 \ No newline at end of file diff --git a/majority_judgement/static/description/icon.png b/majority_judgement/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8581cd0473d188c7cf4786f976971d69c82bbef5 GIT binary patch literal 18209 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 mCvJTTH_>F81T1xJH&?<7TTdv6otc+@CK5(If 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 biu?Z$H>-jt>?{ef00000NkvXXu0mjfMgJhi literal 0 HcmV?d00001 diff --git a/majority_judgement/views/candidate.xml b/majority_judgement/views/candidate.xml new file mode 100644 index 0000000..e64ac3c --- /dev/null +++ b/majority_judgement/views/candidate.xml @@ -0,0 +1,20 @@ + + + + + candidate.form.view + candidate + 0 + +
+ + + + + + +
+
+
+ +
\ No newline at end of file diff --git a/majority_judgement/views/menus.xml b/majority_judgement/views/menus.xml new file mode 100644 index 0000000..3abc4b4 --- /dev/null +++ b/majority_judgement/views/menus.xml @@ -0,0 +1,20 @@ + + + + Votes + vote + form + kanban,tree,form + +

+ Create a new vote +

+
+
+ + + + + + +
\ No newline at end of file diff --git a/majority_judgement/views/vote.xml b/majority_judgement/views/vote.xml new file mode 100644 index 0000000..00537fd --- /dev/null +++ b/majority_judgement/views/vote.xml @@ -0,0 +1,64 @@ + + + + vote.tree.view + vote + 0 + + + + + + + + + + + + vote.form.view + vote + 0 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
\ No newline at end of file