diff --git a/event_track_speaker_travel/README.rst b/event_track_speaker_travel/README.rst new file mode 100644 index 00000000..e6160fcb --- /dev/null +++ b/event_track_speaker_travel/README.rst @@ -0,0 +1,75 @@ +========================== +Event Track Speaker Travel +========================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:8113d9fe2ab31658c443a0a710fdd0585b0a22f501b0b3e3a08c64d212e00715 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-coopiteasy%2Faddons-lightgray.png?logo=github + :target: https://github.com/coopiteasy/addons/tree/16.0/event_track_speaker_travel + :alt: coopiteasy/addons + +|badge1| |badge2| |badge3| + +Manage travel arrangements for speakers + +**Table of contents** + +.. contents:: + :local: + +Known issues / Roadmap +====================== + +- set cost and prices fields as fields.Monetary + +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 to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Coop IT Easy SC + +Contributors +~~~~~~~~~~~~ + +* `Coop IT Easy SC `_: + + * Victor Champonnois + +Maintainers +~~~~~~~~~~~ + +.. |maintainer-victor-champonnois| image:: https://github.com/victor-champonnois.png?size=40px + :target: https://github.com/victor-champonnois + :alt: victor-champonnois + +Current maintainer: + +|maintainer-victor-champonnois| + +This module is part of the `coopiteasy/addons `_ project on GitHub. + +You are welcome to contribute. diff --git a/event_track_speaker_travel/__init__.py b/event_track_speaker_travel/__init__.py new file mode 100644 index 00000000..7fbcfccd --- /dev/null +++ b/event_track_speaker_travel/__init__.py @@ -0,0 +1,4 @@ +# SPDX-FileCopyrightText: 2024 Coop IT Easy SC +# +# SPDX-License-Identifier: AGPL-3.0-or-later +from . import models diff --git a/event_track_speaker_travel/__manifest__.py b/event_track_speaker_travel/__manifest__.py new file mode 100644 index 00000000..275c74c4 --- /dev/null +++ b/event_track_speaker_travel/__manifest__.py @@ -0,0 +1,26 @@ +# SPDX-FileCopyrightText: 2024 Coop IT Easy SC +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +{ + "name": "Event Track Speaker Travel", + "summary": """ + Manage travel arrangements for speakers""", + "version": "16.0.1.0.0", + "category": "Event", + "website": "https://github.com/coopiteasy/addons", + "author": "Coop IT Easy SC, Odoo Community Association (OCA)", + "maintainers": ["victor-champonnois"], + "license": "AGPL-3", + "application": False, + "depends": ["event_track_multi_speaker"], + "excludes": [], + "data": [ + "security/ir.model.access.csv", + "views/event_travel.xml", + "views/event_track_speaker.xml", + "views/menuitems.xml", + ], + "demo": [], + "qweb": [], +} diff --git a/event_track_speaker_travel/models/__init__.py b/event_track_speaker_travel/models/__init__.py new file mode 100644 index 00000000..dd6a1d28 --- /dev/null +++ b/event_track_speaker_travel/models/__init__.py @@ -0,0 +1,4 @@ +from . import event_track_speaker_travel_booking +from . import event_track_speaker_travel_expense +from . import event_track_speaker_travel_expense_type +from . import event_track_speaker diff --git a/event_track_speaker_travel/models/event_track_speaker.py b/event_track_speaker_travel/models/event_track_speaker.py new file mode 100644 index 00000000..25045548 --- /dev/null +++ b/event_track_speaker_travel/models/event_track_speaker.py @@ -0,0 +1,43 @@ +# SPDX-FileCopyrightText: 2024 Coop IT Easy SC +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +from odoo import api, fields, models + + +class EventTrackSpeaker(models.Model): + _inherit = "event.track.speaker" + + travel_booking_ids = fields.One2many( + comodel_name="event.track.speaker.travel.booking", inverse_name="speaker_id" + ) + travel_expense_ids = fields.One2many( + comodel_name="event.track.speaker.travel.expense", inverse_name="speaker_id" + ) + need_travel = fields.Boolean() + has_travel = fields.Boolean(compute="_compute_has_travel") + travel_cost = fields.Float(compute="_compute_travel_cost") + + @api.depends("travel_booking_ids.cost", "travel_expense_ids.cost") + def _compute_travel_cost(self): + for speaker in self: + speaker.travel_cost = 0 + for booking in speaker.travel_booking_ids: + if booking.status != "draft": + speaker.travel_cost += booking.cost + for expense in speaker.travel_expense_ids: + if expense.status != "draft": + speaker.travel_cost += expense.cost + + @api.depends("travel_booking_ids", "travel_expense_ids") + def _compute_has_travel(self): + for speaker in self: + booking_ok = not speaker.travel_booking_ids + for booking in speaker.travel_booking_ids: + booking_ok = booking.status == "payed" + + expense_ok = not speaker.travel_expense_ids + for expense in speaker.travel_expense_ids: + expense_ok = expense.status != "draft" + + speaker.has_travel = booking_ok and expense_ok diff --git a/event_track_speaker_travel/models/event_track_speaker_travel_booking.py b/event_track_speaker_travel/models/event_track_speaker_travel_booking.py new file mode 100644 index 00000000..d55f7e69 --- /dev/null +++ b/event_track_speaker_travel/models/event_track_speaker_travel_booking.py @@ -0,0 +1,32 @@ +# SPDX-FileCopyrightText: 2024 Coop IT Easy SC +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +from odoo import fields, models + + +class EventTrackSpeakerTravelBooking(models.Model): + _name = "event.track.speaker.travel.booking" + _description = "Speaker Travel Booking" + _inherit = ["mail.thread", "mail.activity.mixin"] + + name = fields.Char() + cost = fields.Float() + + status = fields.Selection( + selection=[ + ("draft", "Draft"), + ("confirmed", "Confirmed"), + ("payed", "Payed"), + ("sent", "Sent"), + ], + default="draft", + ) + + ticket_ids = fields.Many2many("ir.attachment", string="Tickets") + + speaker_id = fields.Many2one("event.track.speaker", string="Speaker") + + event_id = fields.Many2one( + "event.event", related="speaker_id.event_id", string="Event", store="True" + ) diff --git a/event_track_speaker_travel/models/event_track_speaker_travel_expense.py b/event_track_speaker_travel/models/event_track_speaker_travel_expense.py new file mode 100644 index 00000000..a5811ef0 --- /dev/null +++ b/event_track_speaker_travel/models/event_track_speaker_travel_expense.py @@ -0,0 +1,36 @@ +# SPDX-FileCopyrightText: 2024 Coop IT Easy SC +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +from odoo import api, fields, models + + +class EventTrackSpeakerTravelExpense(models.Model): + _name = "event.track.speaker.travel.expense" + _description = "Speaker Travel Expense" + _inherit = ["mail.thread", "mail.activity.mixin"] + + name = fields.Char() + cost = fields.Float(compute="_compute_cost", store=True) + quantity = fields.Float() + status = fields.Selection( + selection=[ + ("draft", "Draft"), + ("confirmed", "Confirmed"), + ("payed", "Payed"), + ], + default="draft", + ) + speaker_id = fields.Many2one("event.track.speaker", string="Speaker") + expense_type_id = fields.Many2one( + "event.track.speaker.travel.expense.type", string="Type" + ) + + event_id = fields.Many2one( + "event.event", related="speaker_id.event_id", string="Event", store="True" + ) + + @api.depends("quantity", "expense_type_id.price") + def _compute_cost(self): + for expense in self: + expense.cost = expense.expense_type_id.price * expense.quantity diff --git a/event_track_speaker_travel/models/event_track_speaker_travel_expense_type.py b/event_track_speaker_travel/models/event_track_speaker_travel_expense_type.py new file mode 100644 index 00000000..aa49b503 --- /dev/null +++ b/event_track_speaker_travel/models/event_track_speaker_travel_expense_type.py @@ -0,0 +1,14 @@ +# SPDX-FileCopyrightText: 2024 Coop IT Easy SC +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +from odoo import fields, models + + +class EventSpeakerTravelExpenseType(models.Model): + _name = "event.track.speaker.travel.expense.type" + _description = "Speaker Travel Expense Type" + + name = fields.Char() + price = fields.Float() + description = fields.Text() diff --git a/event_track_speaker_travel/readme/CONTRIBUTORS.rst b/event_track_speaker_travel/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..146abeb9 --- /dev/null +++ b/event_track_speaker_travel/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* `Coop IT Easy SC `_: + + * Victor Champonnois diff --git a/event_track_speaker_travel/readme/DESCRIPTION.rst b/event_track_speaker_travel/readme/DESCRIPTION.rst new file mode 100644 index 00000000..b5dfcce6 --- /dev/null +++ b/event_track_speaker_travel/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +Manage travel arrangements for speakers diff --git a/event_track_speaker_travel/readme/ROADMAP.rst b/event_track_speaker_travel/readme/ROADMAP.rst new file mode 100644 index 00000000..dfdbdd9d --- /dev/null +++ b/event_track_speaker_travel/readme/ROADMAP.rst @@ -0,0 +1 @@ +- set cost and prices fields as fields.Monetary diff --git a/event_track_speaker_travel/security/ir.model.access.csv b/event_track_speaker_travel/security/ir.model.access.csv new file mode 100644 index 00000000..e2d61449 --- /dev/null +++ b/event_track_speaker_travel/security/ir.model.access.csv @@ -0,0 +1,7 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_event_track_speaker_travel_booking_registration,event.track.speaker.travel.booking,event_track_speaker_travel.model_event_track_speaker_travel_booking,event.group_event_registration_desk,1,0,0,0 +access_event_track_speaker_travel_expense_registration,event.track.speaker.travel.expense,event_track_speaker_travel.model_event_track_speaker_travel_expense,event.group_event_registration_desk,1,0,0,0 +access_event_track_speaker_travel_expense_type_registration,event.track.speaker.travel.expense_type,event_track_speaker_travel.model_event_track_speaker_travel_expense_type,event.group_event_registration_desk,1,0,0,0 +access_event_track_speaker_travel_booking_user,event.track.speaker.travel.booking,event_track_speaker_travel.model_event_track_speaker_travel_booking,event.group_event_user,1,1,1,1 +access_event_track_speaker_travel_expense_user,event.track.speaker.travel.expense,event_track_speaker_travel.model_event_track_speaker_travel_expense,event.group_event_user,1,1,1,1 +access_event_track_speaker_travel_expense_type_user,event.track.speaker.travel.expense_type,event_track_speaker_travel.model_event_track_speaker_travel_expense_type,event.group_event_user,1,1,1,1 diff --git a/event_track_speaker_travel/static/description/index.html b/event_track_speaker_travel/static/description/index.html new file mode 100644 index 00000000..93e5e3d7 --- /dev/null +++ b/event_track_speaker_travel/static/description/index.html @@ -0,0 +1,428 @@ + + + + + + +Event Track Speaker Travel + + + +
+

Event Track Speaker Travel

+ + +

Beta License: AGPL-3 coopiteasy/addons

+

Manage travel arrangements for speakers

+

Table of contents

+ +
+

Known issues / Roadmap

+
    +
  • set cost and prices fields as fields.Monetary
  • +
+
+
+

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 to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Coop IT Easy SC
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

Current maintainer:

+

victor-champonnois

+

This module is part of the coopiteasy/addons project on GitHub.

+

You are welcome to contribute.

+
+
+
+ + diff --git a/event_track_speaker_travel/views/event_track_speaker.xml b/event_track_speaker_travel/views/event_track_speaker.xml new file mode 100644 index 00000000..a7c33bd4 --- /dev/null +++ b/event_track_speaker_travel/views/event_track_speaker.xml @@ -0,0 +1,59 @@ + + + + + + event.track.speaker.form + event.track.speaker + + + + + + + + + +

Bookings

+ + + + + + + +

Expenses

+ + + + + + + + + +
+
+
+
+ + + event.track.speaker.tree + event.track.speaker + + + + + + + + + + +
diff --git a/event_track_speaker_travel/views/event_travel.xml b/event_track_speaker_travel/views/event_travel.xml new file mode 100644 index 00000000..333b7aee --- /dev/null +++ b/event_track_speaker_travel/views/event_travel.xml @@ -0,0 +1,156 @@ + + + + + event.track.speaker.travel.booking.tree + event.track.speaker.travel.booking + + + + + + + + + + + + + event.track.speaker.travel.expense.tree + event.track.speaker.travel.expense + + + + + + + + + + + + + + + event.track.speaker.travel.expense.search + event.track.speaker.travel.expense + + + + + + + + + + + + + + event.track.speaker.travel.booking.search + event.track.speaker.travel.booking + + + + + + + + + + + + + + event.track.speaker.travel.booking.form + event.track.speaker.travel.booking + +
+
+ +
+ + + + + + + + + +
+ + + +
+
+
+
+ + + event.track.speaker.travel.expense.form + event.track.speaker.travel.expense + +
+
+ +
+ + + + + + + + + + +
+ + + +
+
+
+
+ + + event.track.speaker.travel.expense.type.form + event.track.speaker.travel.expense.type + +
+ + + + + + + + +
+
+
+ +
diff --git a/event_track_speaker_travel/views/menuitems.xml b/event_track_speaker_travel/views/menuitems.xml new file mode 100644 index 00000000..d237ba97 --- /dev/null +++ b/event_track_speaker_travel/views/menuitems.xml @@ -0,0 +1,46 @@ + + + + Travel Expenses + event.track.speaker.travel.expense + tree,form + + + Travel Bookings + event.track.speaker.travel.booking + tree,form + + + Travel Expense Types + event.track.speaker.travel.expense.type + tree,form + + + + + + + diff --git a/setup/event_track_speaker_travel/odoo/addons/event_track_speaker_travel b/setup/event_track_speaker_travel/odoo/addons/event_track_speaker_travel new file mode 120000 index 00000000..db0b9750 --- /dev/null +++ b/setup/event_track_speaker_travel/odoo/addons/event_track_speaker_travel @@ -0,0 +1 @@ +../../../../event_track_speaker_travel \ No newline at end of file diff --git a/setup/event_track_speaker_travel/setup.py b/setup/event_track_speaker_travel/setup.py new file mode 100644 index 00000000..28c57bb6 --- /dev/null +++ b/setup/event_track_speaker_travel/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)