From fbe8e6f620911fbbfb64a6bba1737c610a2a3481 Mon Sep 17 00:00:00 2001 From: tarteo Date: Wed, 20 Sep 2023 16:15:48 +0200 Subject: [PATCH] [ADD] calendar_monthly_multi: Calendar monthly extension [FIX] calendar_monthly_multi: make work with latest version of Odoo 16.0 --- calendar_monthly_multi/README.rst | 35 ++ calendar_monthly_multi/__init__.py | 1 + calendar_monthly_multi/__manifest__.py | 18 + .../data/calendar_recurrence_day_data.xml | 96 +++++ .../data/calendar_recurrence_weekday_data.xml | 40 ++ calendar_monthly_multi/models/__init__.py | 4 + .../models/calendar_event.py | 47 +++ .../models/calendar_recurrence.py | 163 ++++++++ .../models/calendar_recurrence_day.py | 25 ++ .../models/calendar_recurrence_weekday.py | 32 ++ calendar_monthly_multi/readme/CONTRIBUTORS.md | 1 + calendar_monthly_multi/readme/DESCRIPTION.md | 5 + calendar_monthly_multi/readme/USAGE.md | 9 + .../security/ir_model_access.xml | 28 ++ .../static/description/multiple-dates.png | Bin 0 -> 53345 bytes .../static/description/weekday-weekendday.png | Bin 0 -> 60212 bytes .../static/src/scss/backend.scss | 8 + calendar_monthly_multi/tests/__init__.py | 1 + .../tests/test_recurrence.py | 349 ++++++++++++++++++ .../views/calendar_event_view.xml | 25 ++ .../odoo/addons/calendar_monthly_multi | 1 + setup/calendar_monthly_multi/setup.py | 6 + 22 files changed, 894 insertions(+) create mode 100644 calendar_monthly_multi/README.rst create mode 100644 calendar_monthly_multi/__init__.py create mode 100644 calendar_monthly_multi/__manifest__.py create mode 100644 calendar_monthly_multi/data/calendar_recurrence_day_data.xml create mode 100644 calendar_monthly_multi/data/calendar_recurrence_weekday_data.xml create mode 100644 calendar_monthly_multi/models/__init__.py create mode 100644 calendar_monthly_multi/models/calendar_event.py create mode 100644 calendar_monthly_multi/models/calendar_recurrence.py create mode 100644 calendar_monthly_multi/models/calendar_recurrence_day.py create mode 100644 calendar_monthly_multi/models/calendar_recurrence_weekday.py create mode 100644 calendar_monthly_multi/readme/CONTRIBUTORS.md create mode 100644 calendar_monthly_multi/readme/DESCRIPTION.md create mode 100644 calendar_monthly_multi/readme/USAGE.md create mode 100644 calendar_monthly_multi/security/ir_model_access.xml create mode 100644 calendar_monthly_multi/static/description/multiple-dates.png create mode 100644 calendar_monthly_multi/static/description/weekday-weekendday.png create mode 100644 calendar_monthly_multi/static/src/scss/backend.scss create mode 100644 calendar_monthly_multi/tests/__init__.py create mode 100644 calendar_monthly_multi/tests/test_recurrence.py create mode 100644 calendar_monthly_multi/views/calendar_event_view.xml create mode 120000 setup/calendar_monthly_multi/odoo/addons/calendar_monthly_multi create mode 100644 setup/calendar_monthly_multi/setup.py diff --git a/calendar_monthly_multi/README.rst b/calendar_monthly_multi/README.rst new file mode 100644 index 00000000..38929e87 --- /dev/null +++ b/calendar_monthly_multi/README.rst @@ -0,0 +1,35 @@ +**This file is going to be generated by oca-gen-addon-readme.** + +*Manual changes will be overwritten.* + +Please provide content in the ``readme`` directory: + +* **DESCRIPTION.rst** (required) +* INSTALL.rst (optional) +* CONFIGURE.rst (optional) +* **USAGE.rst** (optional, highly recommended) +* DEVELOP.rst (optional) +* ROADMAP.rst (optional) +* HISTORY.rst (optional, recommended) +* **CONTRIBUTORS.rst** (optional, highly recommended) +* CREDITS.rst (optional) + +Content of this README will also be drawn from the addon manifest, +from keys such as name, authors, maintainers, development_status, +and license. + +A good, one sentence summary in the manifest is also highly recommended. + + +Automatic changelog generation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +`HISTORY.rst` can be auto generated using `towncrier `_. + +Just put towncrier compatible changelog fragments into `readme/newsfragments` +and the changelog file will be automatically generated and updated when a new fragment is added. + +Please refer to `towncrier` documentation to know more. + +NOTE: the changelog will be automatically generated when using `/ocabot merge $option`. +If you need to run it manually, refer to `OCA/maintainer-tools README `_. diff --git a/calendar_monthly_multi/__init__.py b/calendar_monthly_multi/__init__.py new file mode 100644 index 00000000..0650744f --- /dev/null +++ b/calendar_monthly_multi/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/calendar_monthly_multi/__manifest__.py b/calendar_monthly_multi/__manifest__.py new file mode 100644 index 00000000..87827177 --- /dev/null +++ b/calendar_monthly_multi/__manifest__.py @@ -0,0 +1,18 @@ +{ + "name": "Calendar Monthly Extension", + "version": "16.0.1.0.0", + "category": "Productivity/Calendar", + "license": "AGPL-3", + "author": "Onestein,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/calendar", + "depends": ["calendar"], + "data": [ + "security/ir_model_access.xml", + "data/calendar_recurrence_day_data.xml", + "data/calendar_recurrence_weekday_data.xml", + "views/calendar_event_view.xml", + ], + "assets": { + "web.assets_backend": ["calendar_monthly_multi/static/src/scss/backend.scss"] + }, +} diff --git a/calendar_monthly_multi/data/calendar_recurrence_day_data.xml b/calendar_monthly_multi/data/calendar_recurrence_day_data.xml new file mode 100644 index 00000000..8d7f276b --- /dev/null +++ b/calendar_monthly_multi/data/calendar_recurrence_day_data.xml @@ -0,0 +1,96 @@ + + + + 1 + + + 2 + + + 3 + + + 4 + + + 5 + + + 6 + + + 7 + + + 8 + + + 9 + + + 10 + + + 11 + + + 12 + + + 13 + + + 14 + + + 15 + + + 16 + + + 17 + + + 18 + + + 19 + + + 20 + + + 21 + + + 22 + + + 23 + + + 24 + + + 25 + + + 26 + + + 27 + + + 28 + + + 29 + + + 30 + + + 31 + + diff --git a/calendar_monthly_multi/data/calendar_recurrence_weekday_data.xml b/calendar_monthly_multi/data/calendar_recurrence_weekday_data.xml new file mode 100644 index 00000000..9b955ee5 --- /dev/null +++ b/calendar_monthly_multi/data/calendar_recurrence_weekday_data.xml @@ -0,0 +1,40 @@ + + + + 0 + MO + Monday + + + 1 + TU + Tuesday + + + 2 + WE + Wednesday + + + 3 + TH + Thursday + + + 4 + FR + Friday + + + 5 + SA + Saturday + True + + + 6 + SU + Sunday + True + + diff --git a/calendar_monthly_multi/models/__init__.py b/calendar_monthly_multi/models/__init__.py new file mode 100644 index 00000000..99599bc4 --- /dev/null +++ b/calendar_monthly_multi/models/__init__.py @@ -0,0 +1,4 @@ +from . import calendar_event +from . import calendar_recurrence +from . import calendar_recurrence_day +from . import calendar_recurrence_weekday diff --git a/calendar_monthly_multi/models/calendar_event.py b/calendar_monthly_multi/models/calendar_event.py new file mode 100644 index 00000000..0fb5b321 --- /dev/null +++ b/calendar_monthly_multi/models/calendar_event.py @@ -0,0 +1,47 @@ +from odoo import api, fields, models + + +class CalendarEvent(models.Model): + _inherit = "calendar.event" + + month_by = fields.Selection(selection_add=[("dates", "Dates of month")]) + weekday = fields.Selection( + selection_add=[ + ("weekday", "Weekday"), + ("weekend_day", "Weekend Day"), + ("day", "Day"), + ("custom", "Custom"), + ] + ) + day_ids = fields.Many2many( + comodel_name="calendar.recurrence.day", + compute="_compute_recurrence", + readonly=False, + ) + weekday_ids = fields.Many2many( + comodel_name="calendar.recurrence.weekday", + compute="_compute_recurrence", + readonly=False, + ) + + @api.model + def _get_recurrent_fields(self): + fields = super()._get_recurrent_fields() + fields.add("day_ids") + fields.add("weekday_ids") + return fields + + def _get_recurrence_params(self): + params = super()._get_recurrence_params() + event_date = self._get_start_date() + params.update( + day_ids=[ + self.env["calendar.recurrence.day"].get_id_from_day(event_date.day) + ], + weekday_ids=[ + self.env["calendar.recurrence.weekday"].get_id_by_sequence( + event_date.weekday() + ) + ], + ) + return params diff --git a/calendar_monthly_multi/models/calendar_recurrence.py b/calendar_monthly_multi/models/calendar_recurrence.py new file mode 100644 index 00000000..72ec4c64 --- /dev/null +++ b/calendar_monthly_multi/models/calendar_recurrence.py @@ -0,0 +1,163 @@ +from datetime import datetime, time + +from dateutil import rrule + +from odoo import Command, _, api, fields, models + +from odoo.addons.calendar.models.calendar_recurrence import ( + MAX_RECURRENT_EVENT, + RRULE_WEEKDAY_TO_FIELD, + RRULE_WEEKDAYS, +) + + +class CalendarRecurrence(models.Model): + _inherit = "calendar.recurrence" + + month_by = fields.Selection(selection_add=[("dates", "Dates of month")]) + weekday = fields.Selection( + selection_add=[ + ("weekday", "Weekday"), + ("weekend_day", "Weekend Day"), + ("day", "Day"), + ("custom", "Custom"), + ] + ) + weekday_ids = fields.Many2many( + comodel_name="calendar.recurrence.weekday", + compute="_compute_weekday_ids", + store=True, + ) + day_ids = fields.Many2many(comodel_name="calendar.recurrence.day") + + @api.depends("weekday", "rrule_type", "month_by", "rrule") + def _compute_weekday_ids(self): + for recurrence in self.filtered( + lambda r: r.weekday != "custom" + and r.rrule_type == "monthly" + and r.month_by == "day" + ): + if recurrence.weekday == "day": + recurrence.weekday_ids = self.env[ + "calendar.recurrence.weekday" + ].get_ids_of_days() + elif recurrence.weekday == "weekday": + recurrence.weekday_ids = self.env[ + "calendar.recurrence.weekday" + ].get_ids_of_weekdays() + elif recurrence.weekday == "weekend_day": + recurrence.weekday_ids = self.env[ + "calendar.recurrence.weekday" + ].get_ids_of_weekend_days() + else: + recurrence.weekday_ids = self.env.ref( + "calendar_monthly_multi.%s" % RRULE_WEEKDAYS[recurrence.weekday] + ).ids + + @api.depends("day_ids", "weekday_ids") + def _compute_rrule(self): + return super()._compute_rrule() + + @api.model + def _rrule_parse(self, rule_str, date_start): + values = super()._rrule_parse(rule_str, date_start) + rule = rrule.rrulestr(rule_str, dtstart=date_start) + if rule._freq != rrule.MONTHLY: + return values + if rule._bymonthday and len(rule._bymonthday) > 1: + values["day_ids"] = [ + Command.set( + [ + self.env["calendar.recurrence.day"].get_id_from_day(d) + for d in rule._bymonthday + ] + ) + ] + values["month_by"] = "dates" + values["rrule_type"] = "monthly" + elif rule._byweekday: # (0, 1, 2, 3, 4) + weekday_ids = [] + if len(rule._byweekday) == 7: + weekday = "day" + elif len(rule._byweekday) == 1: + weekday = RRULE_WEEKDAY_TO_FIELD[rule._byweekday[0]].upper() + else: + weekday_ids = [ + self.env["calendar.recurrence.weekday"].get_id_by_sequence(d) + for d in rule._byweekday + ] + weekday_ids_set = set(weekday_ids) + weekend_days_ids = set( + self.env["calendar.recurrence.weekday"].get_ids_of_weekend_days() + ) + week_days_ids = set( + self.env["calendar.recurrence.weekday"].get_ids_of_weekdays() + ) + if weekday_ids_set == weekend_days_ids: + weekday = "weekend_day" + elif weekday_ids_set == week_days_ids: + weekday = "weekday" + else: + weekday = "custom" + + values["weekday_ids"] = weekday_ids + values["month_by"] = "day" + values["byday"] = str(rule._bysetpos[0]) + values["weekday"] = weekday + values["rrule_type"] = "monthly" + + return values + + def _compute_name(self): + monthly_multi = self.filtered( + lambda r: r.rrule_type == "monthly" + and ( + r.month_by == "dates" + or r.month_by == "day" + and r.weekday in ("day", "weekday", "weekend_day", "custom") + ) + ) + for recurrence in monthly_multi: + if recurrence.month_by == "dates": + recurrence.name = _( + "days %(days)s", + days=", ".join( + [str(day) for day in recurrence.day_ids.mapped("day")] + ), + ) + else: + recurrence.name = _( + "on the %(byday)s %(weekdays)s", + byday=dict(self._fields["byday"].selection)[recurrence.byday], + weekdays=", ".join(recurrence.weekday_ids.mapped("name")), + ) + return super(CalendarRecurrence, self - monthly_multi)._compute_name() + + def _get_rrule(self, dtstart=None): + self.ensure_one() + + if self.rrule_type == "monthly" and ( + self.month_by == "dates" + or self.month_by == "day" + and self.weekday in ("weekday", "weekend_day", "day", "custom") + ): # If weekday is just one day than just let the calendar module handle it, + # we can handle it with weekday_ids but still + rrule_params = { + "dtstart": dtstart, + "interval": self.interval, + } + if self.month_by == "dates": + rrule_params["bymonthday"] = self.day_ids.mapped("day") + else: + rrule_params["bysetpos"] = int(self.byday) + rrule_params["byweekday"] = [ + getattr(rrule, w.key) for w in self.weekday_ids + ] + if self.end_type == "count": + rrule_params["count"] = min(self.count, MAX_RECURRENT_EVENT) + elif self.end_type == "forever": + rrule_params["count"] = MAX_RECURRENT_EVENT + elif self.end_type == "end_date": + rrule_params["until"] = datetime.combine(self.until, time.max) + return rrule.rrule(rrule.MONTHLY, **rrule_params) + return super()._get_rrule(dtstart) diff --git a/calendar_monthly_multi/models/calendar_recurrence_day.py b/calendar_monthly_multi/models/calendar_recurrence_day.py new file mode 100644 index 00000000..eca3c2f3 --- /dev/null +++ b/calendar_monthly_multi/models/calendar_recurrence_day.py @@ -0,0 +1,25 @@ +from odoo import fields, models, tools + + +class CalendarRecurrenceDay(models.Model): + _name = "calendar.recurrence.day" + _description = "Recurrence Day" + _order = "day" + + day = fields.Integer() + + _sql_constraints = [("day_uniq", "unique (day)", "Already exists")] + + def name_get(self): + res = [] + for record in self: + res.append((record.id, str(record.day))) + return res + + @tools.ormcache("day") + def get_id_from_day(self, day): + return self.search([("day", "=", day)], limit=1).id + + @tools.ormcache("day_id") + def get_day_from_id(self, day_id): + return self.browse(day_id).day diff --git a/calendar_monthly_multi/models/calendar_recurrence_weekday.py b/calendar_monthly_multi/models/calendar_recurrence_weekday.py new file mode 100644 index 00000000..04d631e7 --- /dev/null +++ b/calendar_monthly_multi/models/calendar_recurrence_weekday.py @@ -0,0 +1,32 @@ +from odoo import api, fields, models, tools + + +class CalendarRecurrenceWeekday(models.Model): + _name = "calendar.recurrence.weekday" + _description = "Recurrence Weekday" + _order = "sequence" + + sequence = fields.Integer() + key = fields.Char(required=True) + name = fields.Char(required=True) + weekend_day = fields.Boolean() + + @api.model + @tools.ormcache("sequence") + def get_id_by_sequence(self, sequence): + return self.search([("sequence", "=", sequence)], limit=1).id + + @api.model + @tools.ormcache() + def get_ids_of_days(self): + return self.search([]).ids + + @api.model + @tools.ormcache() + def get_ids_of_weekend_days(self): + return self.search([("weekend_day", "=", True)]).ids + + @api.model + @tools.ormcache() + def get_ids_of_weekdays(self): + return self.search([("weekend_day", "=", False)]).ids diff --git a/calendar_monthly_multi/readme/CONTRIBUTORS.md b/calendar_monthly_multi/readme/CONTRIBUTORS.md new file mode 100644 index 00000000..8a94e600 --- /dev/null +++ b/calendar_monthly_multi/readme/CONTRIBUTORS.md @@ -0,0 +1 @@ +- Dennis Sluijk (https://onestein.nl) diff --git a/calendar_monthly_multi/readme/DESCRIPTION.md b/calendar_monthly_multi/readme/DESCRIPTION.md new file mode 100644 index 00000000..d8ddf4b0 --- /dev/null +++ b/calendar_monthly_multi/readme/DESCRIPTION.md @@ -0,0 +1,5 @@ +This module extends the functionality of monthly recurring events in the calendar: + +1. **Multiple dates**: For example every 5th and 15th of the month +2. **All days, Weekday (monday to friday), weekend days (saturday and sunday) or + custom**: For example The first weekday of the month diff --git a/calendar_monthly_multi/readme/USAGE.md b/calendar_monthly_multi/readme/USAGE.md new file mode 100644 index 00000000..f6f43334 --- /dev/null +++ b/calendar_monthly_multi/readme/USAGE.md @@ -0,0 +1,9 @@ +To use this module, you need to: + +1. Go to the calendar app; +2. create a new event; +3. on the form of the event check "Recurrent" and select "Monthly". +4. Select "Dates of month": + ![Select Multiple Dates](../static/description/multiple-dates.png) or select "Day of + month" and "Weekday", "Weekend Day", "Day" or "Custom": + ![Weekday and weekend day](../static/description/weekday-weekendday.png) diff --git a/calendar_monthly_multi/security/ir_model_access.xml b/calendar_monthly_multi/security/ir_model_access.xml new file mode 100644 index 00000000..b417d22e --- /dev/null +++ b/calendar_monthly_multi/security/ir_model_access.xml @@ -0,0 +1,28 @@ + + + + calendar_recurrence_day_access + + + + + + + + + + calendar_recurrence_weekday_access + + + + + + + + diff --git a/calendar_monthly_multi/static/description/multiple-dates.png b/calendar_monthly_multi/static/description/multiple-dates.png new file mode 100644 index 0000000000000000000000000000000000000000..f6566afaaed3fad4332441b8ee7f7f0e6077ea68 GIT binary patch literal 53345 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 YF1K5TP&DKy|yrw9cP%5mLC`c$=1G%86cd&?b7 z71^n`w%Dq;n8jVnzcL4=S1gE$ibfh9`jwYo&v}N*GjFvcBYU8j^OLt)l0q&mR64|B z5gUwabEeo)CYSy@OxC_xyG@b`q1!!BdS;<7lm+OX>p67_Ag@NbEA z%*H@4w&_ozwS^Wk+i(`X0l^`+i#7vY+arYDC!GQ&+_x|_M91NiqR-5{UKl0MvfYEKhu4( zwY&S(dxWRhf~kp@cBRfx-B9wD?xux}F+NC1&~~*Gn8E3_Ii=Rk%UTnYNc~p(Yqn49 z7asXYLXyjDPVMcf!LXUEjRB1QHNTg4MMUCtWpx}L5+0JxQf;koa%}BdD30)?Ua%bf zU@PIr&dVENuj$u17a^_qu8z6e-)<(&K&r!r+?_`v`C<&Bztq(_h|=%+^mkVpM`zdO z^nyU)Z@J5k(2-g6d(JI^*@YGDli$CJiUc0NFPmOme1Wa7$4raC=u+Wx<>z+^7<71^WJ$Cv> zmW^`9=!4c5h%&Uyw6uBG$(N{fgM|WlX5+a`rMrk9n=;fb!#`n(iRY^-L~OJkeh~Hf zqY8we?E|uKE=hF$p)@E3V`ARDS0n@PY-+a$3GzlnLD6Z=<4l?R&(d5P?hlR*4!7NU z(BR&`&ybNypQwf%Ya9MZdGN;tH94#7=O<0nDh|Mo;1$fx*)OHg8x@qF=`HfsT;$d2 z+M<4LGgg^;8Drl#I$EKq-+n)rgJYasfw2 zN5zzO20r${)AyuGv@(0ef37yn>FM}FU@X5T!+IZ~JhNf2>D~d1Z36xP7745i(1HIc zEc|qkRGzKrE)6excgLUEcxMh6YD@4!1Y%lk0TcAF;32r2;;F#CEt${4v`|Q%3s0pC&iU}8dGT}G$f|vXWzhJ zGA;PMOVV(O2rOJbw0#ixoeu?H$a9X-BN5;{`?tO6B%HR5_h9{}diT30JQ@mQT zQhS*8lW*>?GY;Z4i+}5>^)g*$>e+_D-uTp5h;NP-oj<7Ix4KK}PmSg>?5W6ce(JW; z5a4L9Ax5q@#(m~Y^-=st!p@N-yRu)hojxnF>MLG`v$heL#S1nxDEkY$LDX-o!d5>6 zJLfc>DI{KBC!m`K{DFXe8-9Zbj*pqUc{u%!+||?DGb+_LZFfLJ@)m9NQme{c{cYGT z=uF@7;~G~&K_u+Ct(f>1#rN*~Hys=t>g~!j2Wm}gQtzlyhcC$7tiE8+%L~-_i6efxB9-&J`{w679%U;2|?TE6Zm0huyL14_?A4+AcC z^+s}6aBfQEX`Hsyfa|2VOg{gffcJooktHaxS3a9kvrS!y1yel%2OEw-16CI&A%5fB z^ngrSGsYN`C^&NooU(Xx{{$Y2#Y~k@?9iUXU~3IKYw?aCzB|$>bLX?K7QdF<-9qip ze18fd3!t&xYa#ssg90D@JWC>~aCJwLigBAG=<<5hLe`zgKuupx zVYpk_WJ`22#e*8*?F`zRNBtDB1|%LX(~ZED&OAT{qo>{n__M8bhRLxaYqp^V-V3PM zDZ^ufcVRLF)y$LKUXD=ttxzt5hjogc$HjGTM&Z`oNm1|p{Yf}f*mp3n5g?6pV-Lqs zJo+7ebU89US+m+w&oV;NMTXVTn;M!fpf9fJL;P@-#A0$)Lpq7BGoOQ*gBvesi1()B zi#>N3zveUs&IS6Bg#@9@SU^>kgoZWg9d3W52Q!jG3cKF%0mfstKLK+v++}_UJOhEU zZ2?$|ucn8X)6zRon_|MFm*?z`Wa=_JWK$+3@n^b!IE{Sf;QZmN{fxhgwAm&rpCEto zb7iFrB@0f77kVqUPEAa6{V$|JOkmioWp zZ8g~jp7u@M1m@Q%y=qqo0~q@^_8OY29*k56H;z486vN@7zZp}-fz-}@wNgTa5u7hI zF*$K_?^p}az+v1Q#dW#d%u3$L^}1&vA=T-uGT5ocH5i`RMq3*^$wkf*JE^aUGP$~w z9o*d~p(1o#-Jm$P07lo1C|cq>=AC<(tT;i7Cp(rW&U~s%>$F`D;>79w-csqMze%C=t_F%Aa_?fN7S^Tl50(aXl1;7S zp%UVOJ0K=-aCSXEeRNf2YbC{#i|BSEJUrY(uoO5$9X)yA4!4e~11EGJSOX*+qJVi* zBd_Ngv%uIA0gp5s5ZinH{CQK0pWCxau2;ICY=A?C*-y$LvaW{6$6P0q(eGl)!V=HP zxyEog{IXA#m5}v_{q)?yRA2NZU_~q5HU>w0wNy8>5^kOp0y1l*tEG?G&abmL4V^AS?C{AWi|i{c;dHt0PJ5;BsE1{iYI;@kj1+fvXSJqA z?UoA^<^fb8@_tEPvU!I!?bn(e_~C7rWUc?!%dBR-gjZ~Q@mX~VvsW%ktN0;z%7lTJ zoyH1X;?0z76<1w44mi7zig64SRr^2x&9sr{;jP27qMiG9sawUb;>`c{Z26J)KzqQT zC}52(rQ=eD=1#(?KqrqQJ-9n}jYomIS_W#N?|$05D~~*QHeI&jK4vI37L@JHlP+3} z27`mfwm*+J13w19?~tnq_}u(2wKPy;m=%zo&Kko`tgGAz8muobfPu@MKG7TJ6@d{( ziecb~=F&q#^h8$YE>uYgkm%a!AABcdMPOsWr}XY0z42SnRCnW&Dyy~GHGHEDu6r#b z*LcF2IiI~IPXcTn7AJ18*G^oAPWRkveMSq`Q;z!6SKh>eMiO4}`3{s+)uQm4(FNq6 zQQVOQ)6JSM=fZ+cJKE^oiOtpKWd_lgOVhW94agNW@MzwMTnz>N)&{Kdml_8jAqtp6 zpn!&r>wwTHrA;5%$OgNwQWess#1T56AtC+k{avI^OSpF$YXhYbv~~N&-7<@hC}U0p z=G~cmxDo!t5!W$a+Poh1Z^rL*d|XKyd5<=(#^G(*IjIoQDQ2z9tMX6LGu0ljmtBFj zjECmJ1)T0NMgp_cMl)QQ4Ss({`P{h#hBHk{{8bcGNToyqm<)nL7>|Tok5!>YeH`$@vK9p&#JYa%1{>7tYzTCzmuQ~7+e8ZOp!yM8rlE&0Zp_U49g0#3?pYiMln z!vKfo&X6$g2CSNX>W^sZMI$KogJstr>pSM_uNP~jQrf!A6q5=rTN~?N49*pVnLKcY z)}p>}JP|E*VW*fQ*VU1TdES{@?Cr(xER$0IGtKX2D9-q9F;*e7E8+Kt2*V7CwGjPk z#^gJZZTsxAZWvAmOc`| zTeU#BTiVt6TGbaegx~$V%}I7S^DLbWIv*}KNw)JAD#MlLSG+n1#I5>#xZ{~QtA_Q_ zAe?tVr1Q2Yg0DYMmqT(^xR8~)Eexts9Tk4{&d9L@sQhJd3e*de#60WxA~eRs;)E|U z?iB88d)qW2ob;2;ey96@kUym`_$NGp@nE1W#UI0E^m4(aG*DxTZEnuPvoGOwbnZLN zqss1t?#P(b^M9U8UyA!bjJb)EK(vZN{4`eba#m$pb{d|-5^~<451)hBGND@ zAV_x(-8FQ>(9O^=G<;|LJmTmJOV!^wH2}$&bo8}ZB$!${w+K9Mjh#$#)8<~bhbWVHNO27&O&n( zuCgseip@NM=tnA>>M(A?VdML4Izywz&JlOx-Fr-A;vpYLnM3qL_yp}l}mNTo;JJQ=F<(nqb& zkVFG7Kmj;_Ww7Ftz zy;#UP4W)vLjV4NLO7an(&Qi|$`cR33b^8``J*|p?nJ=gR;0G>RtM6bjMnyVJTB0{t zpI;O-)EY}gFvl#%QIoV1qmv64S|wL)Yw&tdbk!o>3|wCs7>2{z90Zn0hM&=q@hA|O zb}S@wP+#L^m)LE?;G6`vnfkalyP<(>(9C z+>^4h41@Hk=L`&5^GUpBNg_5b1|C@nh-teo?!qSvsogVQ{mqof)T>kt4gj#-4^;2( z)}z8wF3<4jqym7sM24dkeW)H)XYY5!a+<_4M6&3JZ|?^pgk@S#n=M=)P_+}kZc^fa z2hWq2MLf%Y1{~ve4Vg(I()q<;6vO0#89&%=C^QKAyRoHxEqVt0gt|VuYB8vSiP!%} zn+I?uL>1-ZoM672tW0b&w9v`=??_^m`j4ohW1_~JyF;cj4?(Zle!726wi1UR$zM5Z z{_8PCpE42~Z_2j3>jd}yxRz;w#ub5G(a)(Aj0EqaPi9ZK{|gNl$FrB^G~QSqy+K)z zH7u8aKaPa7ARZ`m?}ee2#Adx6)ar4+UWiwY(*50KJ9Td zlX|iomM1YbNWo)TJ??&w5_bo=XD5|Yr++1YWeZbe6^N65(Z?MmZ=Jx6uv&gIC(kTh z5xEhU%O~>adAx;Lcj@-vw$k=00g|Nf(p0Lyx+^Ztp1xKAFAIVQk3lQlw_IR3(K)eY z6ABbBx@zwF8S?Ne2Z0ZN>U2ExZ7IbOPN@^Ax=A1iG(giIS(T@~w?r};Co_cqJ7kL9 zRG|r0b~l#nSt9;m@?gQFBcCXzfl9V?dDd?TwNftCPKiB1Nimc;2px}1Z!}V3L>iN4 zEmFR5a5S>z!*d z?R#izk}m)HI@C+?YvcDW`-~#m##>xsx$Xfm8FrikG^t}FGIG2A?lR$Smbf&>B0K`Ni`FfP`G`Ci ztN=Rl-U#FyAHmBv8&@EUrSCGQ_+_y^lpHkk>?QpF|CHd-yGB$>Y^?3yn-t{DM=iFY zF~iOjWOdEk%wPw|nROu;n5h;M$jKlt?EN`}9PD>UN9wLc<$R$>M~J?)a|q zjXRkoZoRz_9X$J5Vr0xcA(qgGnc)ue#%ct-59wQ+GEh!0o+lV$>E;%YDS_)Bwi%gCw{ z^=?=YAaL*H>jc^nIm_bbNO5t4{m<(3Tc}j;Iw}1yzz+RHVJ+s3H;cI;-+6Y~nWGFN z;Ul4){NEM18I50cz^Mp~(Olybo|q z?W`{{2pe@lHH@fpFtCfMjTo|z_J3+m28rB2RFf4743cJ9l(65a)n($rVe-r1` zbC16{`nM^_6r+E6L4Zs>X4|l7zDPlS z^qP%RO)qxlw~1%o2NW+WlQ6Dr0&&D{)w^NKZp*4wJ6=|%G}L3?|3lYQfHqf=Ql^}` z*pL8&&V+$}KFan7n4szgQ6WIFLl)qDX|Yrh*Y95Yt>iU^|jGPeLt80Mo^=>8nHCYSGWF|Hp8q z?B=Z80%aZQdXrMIm*Xm;+F5?TfAGCA<4jMzY(}_TvVuje_!Wqu`A^a#0vGI-dMkX zM41pz2n*xmold_1L8AeynMuzd6`UC7p(f*T21mSKI2|bXHwulr!#H>@iO*Kd<=uE* zBZ)Qrq+*!#2u(U8j7z8yo@7GSR^9Vu1KO$K69iK9k`$-&MBZy$tMR;Zp*~i8yl9x` z_IF!vq+Goqb&SO@0Thu{mu%n-0V(|F9WR23c7F6ZhEzNNl2*HDhhAP)E1I87Mh1YN zkciqnq8E4|QWtzKtsQkcxS7mr%a-M!YSF6@F&&G)Mr*nZcAeg)gw@*cUtFAB+idFQ z7Y&e5i|ltU)#UP@ul7dnq_v0ZL`L8M?xm^8EthT)jHWehRE5UG`7;YKn+H*Z5NTQU`Tri37R;#dcQ5p)e#GX%iwS# zRQT$6+0)LCzLKxK3}zd4vIC2|)irfKV_5lZ&0u#u6Z@#c(b)CfBVO4o>-F7e)ei~` zDXD#e)|q7`;-sq54EqOft`VLq(GQXE!Wm=6KEmWM#+-{O@0@(DLmlnFrIv(ZhQL8FTBUhR}UjUtf2z&2kGd#-Yep>n!?!W}^jOZ%X zsM3gzz^rg35Z!!`8b3CpgSg#do%H|Y62Uv%XEVQj-KJ=V+icp`Q*yXP1dEf!9wuPV zb>*o1{P9g`dTQTB(1}j1C}fS_7*u9f^Xk{29Q(=oi^R6^ushxQiPW9-OSp=q;q5z$0 zbXTs=8|MX2bCw^bm=dd}prQ zQs9}_W>)OoKgyri-h@g`3vsX9;>*iNrmKAVf-`r1z~g4I{HDZke$j;Dq)89E`Oj#v zBMTSj5h^iB(H>1NnTN+p7{7BPjf8qSUnL4cRon^JMFRW(E zpq?XbQ%WizQji(B8XShumPn1iew^{PpDmBSCfgngH{>!%5931jHq)2RV9KKj4gX7i z`fp2V02Mw_WaH7+`rA%ozvaz}YgBba=sXb~y&Q%7e?bvyj`B|UIWTZ zf4}_p-umu1Jbj3C(DGE8zf?TMdeZ(;9Ar1VlSpx3m(gTFYk(a3v;ZDDv+~BeIVIAB zDvbP!nUQqRYGj;OY3N}E)Awtm^jAv8Y~puHrT?wiQ%yZ`Y&c_Lt=h=<@omb2N`gLK7UtlaoD1kzD`c}JR zN{)!UKYj$E`*-Fibu__d6<3L$m#P78cx3@GA+%zOg&r}uN&&H; zD4tlV^tw4kQn!MCHnIm+fB@WX-JdiCL;b}li2d(MEZ&hoXl&YWizLiRHo0*j^8s)3 z-}TXz3EGxOeNrG|gw);@+-s&$uD>b)Jb*RkY=1Mrk$3p?&k}3B17S_3Z0I)saH-hI zF#yzZY(epc*9wPL3F~1U}O9X-SPBoKo_?qG2lCag8KQcdr zI-1sP_@bsH)Qvn#4ED?W?_7XF6K)+Ji0Vw|mPX<~iYjO2|HJQSsjuJ9L|IIH1(dg& z9UNJ_kD0YyN1DbPP(VgHlv$wj;D!G^y=-%pX{Vgi=C#-I_R9c+F9sE!J_)hB{2?QQ z52l6qE|V<;G9=<#Wk3WzC-h~uE21e7%wifZ=h+j1Ie`$>yQ-*fN<3h9(+<6%k@knk zRjTCc%a46d#E9{Pxo4 z*q&+u+*6X0i=e)Bm##(*ogB3Y3G`H(nKP=Bb&=e(eae}4XiYHfwEq44rN1MAI64-u zgDwll%u(Tu9dqv+4T_skZ_9_b5(D2G5-1#pSdbwEN|9S~hhzmaZWy|l=q$*xDazMw zdH}}>c%&I9M-?Ow=JbfsLa~2nS&7mx33wUCx%sQ?pe*dwvWZij2r?;B5>g|NfoS;w zEUMnHylEcOqw_XAqUNtKR{9RSsLc2haVZ&^Fl$4xL!o7orJzo`wkPwcf06Rhw2}l6 zpwK`po+dT=fib)$W9=7DndJF3JXU)pS+(W+7DP;!^A8Vi#w0Pd=@;Z5q8Lofh7%U2Dz> z#+Fh#9ty*7qYfTgZ+P`jwpCD~vZl*J$!j?$Vi4iBvoUOK=xK}Py10d7YsKg5&L$rr zOgod8tCjUP^f$*q{>bTq3}t#q~Avkb>Ot- z{%qQKpqNfX{Tb>Mx{N)3Og~9+61HM|P_>U?O7If8ucp)DhaHsXYUo`(Z@-4<6`{97byd!)_xPr87 z)tnTRB@UYS>1o@$V?eu%MpEzx zhs7~ZxeFJkAvh4zZ?y%1833=z&p`msS-(FX&+9j@ouiVjI|U~~DI4R9Lt-E}|9%ho zQynFAb%O|l3$fMap*EIm7Fh+j2pY<3o!`nI>h=pmQ6K-*=Z*?A*Xr2T>Agf2z*Vs1d{Tq5Uh{7G zz`YY?DS~_J{aTilw;8Vfrke>ET>3qY3}?OZ%WLM(Z=#K9X}qlrJl@Fd5MLKxHVClC zC*_qq(Rk}u)tJ#dI6lA3;mL)V^-uwxwO0Q@j1WB2xSFpw<_9~eym#FPoJPpsFO9VI zPV|Web0la_Ya`}+TnKp`PxUy&b&!>+%{V?+a{Z5MsBY(;O!UiJYt*6mR=I3SExYrJ zo#;eWM#P!kpqIFK&5M`TWOd6FHs>AY@*eDA9Z_8S@ryeXu}R&M!w)@G{dFh>Le zv+QK5boFmMbr$g^hc)&Wamo6SGN)c$B!N%TS_TQumIz)3JMup?ami_<65b#__qGlY z_=&RhafL`;|DXh<`l@>dhD%p6tE?)l+i=vQ@}l$cPdcU{$u{AN1Q(7K4NE2Kz#!R< zrYoU0boi-^;4!n_kiv^r+-no*%wR8rutXH{_;}z2xUcIrc@sj1Zxp&mFIW0DOiS`P z0CQ9Hy;$zDyJBt30wI#}6_)bOC8x2?e$y2(?b=#*`qqpJ>-5a5o9umU^dId#`2kYy*Vj5Ij+-U(axa3=YkQ6Z0oVyr z>CAV^f6nW2>4@)B@IBnyK6;d(hC!@RLNBq2 z3lfQqH?p%F%KHJ$MX$> z>ym+#v<@1_MP<({7Z~I!UT0N^#K>={M?48TBzWvk5W9JH+3Mo%rAu6VzUb;AW7-xp z;L)+YqO6OeG^7opk*d=)7udbnn0lCPuatC!o4gKjJH}sIxT_&v=prE`NfVEkzd;&l zUp6Z!a_wlvS;|S14$}OF)Ka?Q?&~y1VHSKmjNI=|!fs>-rtP%8wk(3>Io*Z#Dx1zs zJ8JtPB#`<%^-0c-8!&r#+cw#=FR8zms`>A4e@t!6Z3!;3(%NF`;6Qb*VrXvCoPs$h zhhOk~F$}yOhQ_P6qEBW4wX*T};&F<74PScUfqG(chg-wd0)kHkA%o#%Mx}^Qs>Vg{ z@T8@Ww_;_1+m7}OTqh47$ZHAv$fmeX1sZIV&j0GVC9N|d*F9bf@h>_3p?crTv2C<( z-ecxd|LfBXe`JzYTWH>z*ZUCiF3{h#cYrH^cu}aUoTla2fyCW~$}Mn0;=a+umk@9`j;+5~p>v^;!gKxx%HC>eq^yGYlYuKZE^ zZd+)J^zD5Tj~~1#TJo7y(8IxR64N2eBarVu+U}IYvghzG1kSU6uU8OIf_iaJj4k-cMo#C3Br*-d>yi>}^F&1w>0IyE-+#4b0!DMFgK_l5d57N?mR&1n8 z1*cL6M`}i%QoY5oYWeiEwEO7tn}(gTFv)P)v&P$j?~r$Cf>dUC^$4)Xq3pvJ3ZX&~ zxzh+vRstNvW^YgZ7d=m_tDw}fT&6M$m_w82HJ%dHE8(g4TQ#BMeG5S){CC$JKCiv` z+&o|r6@XZ3^*?X1%<`>KRoXHW*fD{Ka_m4Qm=m#^b7-rE=F>G z9;9Sc5&MTq)~gyESbm-ZdCp2QzrQm$7K8D#VC!Ks$8Bs;o~2j}Wye_hfQEo4B;y|Z zg+J$k1L3=sO?&7}%EAvrT8jf0LYzNSaN1YoHL3g;y8&4pokqX(E|^aB?QNXEDr}M#b@6mZFFSm&gIq znxmf31-!-rw4(w)6aPP1h^3KYin}iTm8tuWyvEJsX6m!^J9ynB7bcr^AIS#GPN3~C zHbqHBi&<5W0#8U>TWSPjA|EkI)Y7ZOYfSxJbN3Pe6`w*1O3;4aIxx04LC~QwAD8tu zs9xa`ic~lVX86%`kBqVtxWrA@jbWkL*9kY|f1y#l3!+0BwiMY~K`zYR&m$Ccpj>}e zd_^~V`^uendgvz|-eU(+DK`{c6@MCY{0~y1ghop2ow;YYo2uTDirpR zO6o0gFc0Vz9^`;P`1}t@GIHZV#18ByJDn; zDp@9qJofYa(-o3YKZxeOq}s|p58=cn)QYBh9+R>1$SHJRs(#Gb3wC5-@3#di4M5$3j$EiwL zu5GACh4HxqdfyT8oybj&KF>-=R)Q~ zY3p`J`)zTzj1=CFk=XFw#^|}}X2~L@<{=9Rx`eZ>-LIX{(kDm`zKRFu!JZ;*N26cC zaq_ijo8b=^3!heV7{U_%;Nyhjt^Q7$JoP6XUDQ|Ldm!3zZ$+Y~@>Ifa*$1n8=X0&d zEgprJv5Wl|;&(+*ZsXI(3|F1cGb=_fFPo)Hw-%+3ovV}Y&&w&|C`xA)(b?eDZ09ef z?Uh29P3AXTA%!Ok^R)Y2v-h+sA&qdH{SSOU7P74z@7xrG3e5c160wxGCnv5~zIxXE zqvinbB4r22eef-0Rs~yh+aAmxF&193K~}x6QZT)i#%nQ`e-AEgy&X@DIi3W^@FBxq zQ9h)t!5+&&dqr^VFQQc5ni?v#JU`NvJdiY?f4hiV541y< zDUxs&bC2Yd&LzIjm>9TY#?RP-$kp^R`Kg-*ogMZ%v%c7*cvN>H6!5v?=`5t}E>Lud zZoq(sGNFF>JMtW3Wi?55Wg)vFid$`bZ>_UH(kdD>I00%LXt_iEZ zEm)UmF1!FztMRR$(K;P1O|7-=-9lY+3C)?9ou4?)R(*b;uzF!)wZ4mo0H2o$K2uzP zomyG)exByYxj)Av1U(2IS3y6IIE!+43w(bGqoBx5OmkjzGxDu z9b&rlWUjQAuK_>}gIu6mw!Z)Fd#t zM&WdF)?st*y8`ua6nZ?Ub=rPti>)rIYTMB{6<{o)h*Pt(DM&+4CUA z?&1*lM}6gs@ftKFzm-S|qU(#6SlrQ=qdA4dme2~97?^Z285~@6qE%sXj^;Or_eZae z8D78m=JcM%V*CEKX9tQ+yyt-fKq{T}*;c0@>8^Kr?X|H~p=nZI(G0b!KchU+tLM$6 zUNa@B5_|Z2I%&>$*}f&OC@Ed*oW$acv>Yui`}Et4j=ETP$)$@FjaBnvU2~Nj8D`<~ ziroNClI*FIU>BdH$?|Y|-c>8&_wH{t{lTkD(}(ZVd)9J0+B>X%`jCIWXx_aX9S>UY z^*%lhbmEeXGHTZACgiF)vd(Zgm2ODm_DEbdho$N<9!E881+uQQkk_I2=>4?Ih$XCI>Pesf;C_bdLhH81KjmkKlWF!>tNbt?C)sVsXPaWCP5M4HSg z*Nxe8y|sGF&FQN*9e1{j&UrdZE77Woj)v5NUo^SMyzGXkgZ&<7Nz=-U|FJ_QUgeej z5Z#;Dv?%#NEA8hK6*3(6;|DN0sj+Y{npWt%9Fl0edMhfsTaOE5bNm;T~s{&o1FDx0e(V+Mzt+z%n%=+<;F9D*|Et(vZzY_{}<`8d?947TR?x3 zY1T-CqI(P4{fdWYF;STO7qSp5ZBtU_3Dm zg8KhTQnNeKjMJz*a7X#>u7&q*%nQ4Q!}0%V@`7vO2OL&-;gxDKgn^UT%KHRWZ86ZIlS-q8=Zv4AxUw)Of*XsNgnlu^C;6k zU9u@gM3$S`mt2|OZW<O!S9q++R$tGIxCrcU~FuSQMd+C;8enAc`X%I+N0 z8JS+|8xEi^CuyT#cz3r?&!_o(-QLnVIKeQe~q*w?+i|VCSn>NIDP$yI19u;!z@3k=mfe7gwi_uJ< zCEf3IE<;9D?oQ&w)J7qCFkDt=NF1}x}mG$h!d^d<=PGsHZiNTI!c2$^}o5GTujUO=@te9zI|hCZLCF@l( zUXuc2l~1|UeSBO>7CZ`q(tx)&8yXIK47)e%S*(d4ZqJYg+@jkoGDI*f78{p%2tSO> zOB-y`US(!D*zRc4ISI4pO-mv$6i}>6sB|quqP>r?W@x_rK7GI;r)vFQ2@`oSE+P1g zHRJn7Z~7A1U1Q;^{aRV5_<``lx#UkPlN{>>b$QbW`2oYPa(F&b#Bimgy+HCZ4`$qM zsdknbV*%*uSh1~)6Jjxy<$4b&s4^o@v1O<|P+Xvz4{lN=q&Jz=Qle}mhh`B+SUrz5 z)Cd{d;A$sNYz*}>YVLnurZXMI?DMdGW%c1kPedi*(vz+);0EoQDt0y9K~%!mRM_mA z4L4nkk-4(?L|U_eiVD_0me9R-VtFmQDCv!Z`34f5e9Z6FI$4yTTq95NUotkRbtc@* z@o?L0UFG_GEvQ#A4?&!97pF7Y{F)KtoU*OMP?pUrGatG4FE6cMXgZX9I@L11`60@B zc<1HVPO}% zM78WZ|4FxqO_i|+GSaxk*-&g7>gt)$5D0)6^}BF_VgSumpO9g6-5kTcPLW4d|oWdpEVnawH;&Mh1Z2t)S;5UX11Ich8wP`-f*D2D2j6=%U$0Rj#Ql;!mH_cL;H zmkiYH0Ex@a%WXj}R(sU<+wZ0BE%~w4D_S~f4ie4}5%2xiG!xmUx99bbkAZs{TY_*O za}=mwf;H5(pTkE+h!qsNA8!I{&i2dO-alH8ajymgMEAJ<_LtkXAl%NcVC4WLumBeq zmp;giujrW6V)T@(D(`Pu^~jlA#Tyz*@r@66ll?!eScJJV8gM}_E~l-I?rgp#Y-&%_ z#6?7a3IdD|)V09!6>mSK0wR6DyUF7RoV9yZHda<(Lf&-$b^-9f*FX`}%a)xbx zTYob^gZ|twu2>dwX0WlbNfUJqKG__KOHI`)p!ip_P!w-CW(dui1UTApSs?MdQwA!7 z2K~gq$r%Nd?*2l|f|TQdFn^x^ae)rhuPjU5!gT``jmzF&-`H?jZo>qM)$U+ZMse}+ zL4kp?Q9{qJk#mlhvKdnGhCm@>h(1-f-%MMVuTVhN)kxWqTGRb!I$Gb%IyibuSCht~ z%ZtC#Bfq)Q;5FfnDwRvW7w82rM5-eEeLWIXViv+qkdE4B(Dd&8#~ly8d!%ICSEQWI znbxvQ$EK+}+s)7p@$QPc;A7#5)?F-!euq9h5vlePmELe$`>lwsmtdc3QgXdDz1HVL zx0{;3P;y_a`=;6NHs6O!S~^34*0-`Y?Z*$)Rs+Qbs7+;I$z7?($7+w?s|18wKjDYq zUc5n_XT#p7Bdm3s#QVjC3zzo>z5~7j-2+Qbcnl=O>xv)zsj*J6ujX3bJCg`R zcy=*{r2vIOp<&(O2T*-VAYk)!ch?v;v8wIvyQbe+4 zj-UVOxRR=}hZfzLo0f;~Vu=>aO6qK{xY)10>1-|3I3Kz)VCa)r)%ByOg{8gR)b4DclS$UU8_%{IXVvTNB@w0)P67=wV1Ws%l@nM z*Y{tGxC;`GA3v6jLi*6r!rmL2(0@HPy(mvNmZ4{Q;EgS{+IR^=Og98(32q(>Z)UtA z#=n`u_5UTweJWa|uCj4^fAOsmJ6uFt0CLHQ%j!1smqU3BnDKR|7bGqE;Pu>V1qEzi z(jP{kOdW?I5rzyAwaOarZvA=^s1Drl{82z4uW(0XFdPVhvvP9oL2-0Ehrl9COiYn< z(tb+=+@Qk^GR!oA`hbV`&bsG5a_}++`3xVnRaGhZ+i8#K(i&QoRHgWmuRcb!Z{k__ z{CsetjGnGae(VIMq^Ljs-W(#)973W(Ib`$9XwzS6p#=(Mab6x6`ME7~?Bn$_QY7q% z#kbe!@rgCLSa_^p7VG)b(u(IX?JSWjmEMdO(ooH#n@MK*!N%C_Dm0BZJKFEwz582K zL?h6gn~QBQg)K=i=&1sA4r}1eevNuL3>JnV8!`-;9@a=K?QD7I;z4d@ve?^h(mz6SohVYBHUnm-9Csm=d=){>M;k zDw}TAnNmv2sZSqxS1`D=eQ1I41nXZt#69>8s``C2!!f8=>p9pe-q3a|x|SC76YCMp022NM(X;`Z)uVlTMS5D+Wu0rrd8AdcJFpb_b%4%dsj z^v%QDN54mK@4x1f2E&qSlj56k^^hHyH+$)^-4V|M)8Vl(SswDp3n`my+yG#`6*hKu9a(4R zm4w~|&`!w>)6+`+9x_tWa?qYGSN#@4FoC;?a47JH=!c#Xo{fe+QgnXJ(w159tz-`l z__g+R#j^&dzo8_#{tZN*nXCnX$oZ4((J^N*Ii+`r*!9?e88dY)d zVqY@$Jy0zAp1+Znpk?*wQ20F;m4I|Zlb|E6^=}dp+LD@sY}g_F`W6k{Uqb_#9xsVE zaTmvmt~pw=MBg~NYw6V9zGcOaQhv+Xt|jQB_}WqN^i1Vf-JhuA(G{hV;P1=>HOfkp zP#ydgItl(^;mMj0Y8t`cDZ4C2mLvb>ckG^h{P>a2SVCORp%Ty{9X>D8mN=M|(}={wBqq8bDZ)5kmYkIx;w|fR(K*sjJO^|-uN=jwv^{!#Z z>B{nw!Cw|m=Z8$t>{h)7na#6GAtSzHJjGyop@*KclT{S*D_BV|Rn|J^GT#T3ul6yI zI|Qx&?Ls$goCEV2vW#Vt9C^_|0eqL&93NpKlHt0YV?_ZEhCzqih^q$4CNetPob9C9 zvtF+kXqYl+$;E18dENoe8d4t%H|qZKRO$ED{OC1hQ|TMjNXn8oqs8=S7JYR$bJ3* zZBVKc+GYi>gzxtG^1TZ`h*5PHauT6{Jegb~@5h7UOvW$C?drJTdI2-iUwLjXbvTC0^}HKp(EWweUMZ$b%4$0mSOH zhbgu?0>94(d+`sBIu0OKtAkjxkMom{ifrqS8d7AUZmaE8k5@II$xR5Agz+nz+4=+x zTSK$!*5_V~`K&epYF!c1MnmD?46Ey9(93+wSN?Inq#8ByWCSK{~|3%-7!qhD7HT&uGC}2>C*6$QN)8*we;RT>BWoaS$$HsVmhSxa5iT)gdD?MkLi1GEOlwlO=Nxzog??&sMD9Q!YmRGwjY%EwEf>-^Tt!!Q8P#Z4l+??_ zh&E`9{AP90zU#=dAIHF)PWBm(5C`LMYH%}=eS^@!`~dHRK2J~qtxg}p)Ro8W(s!ax z*x6u+fBv>2{^?@XPshk_^z9E1ooPahow&Wutr|`Xs;HBye`F+HU);#-HWjTpac~Xk3`$T+$oxOfopN<>v~Y2s)#CzCjDggwim0x{3FYkLl^B-Y zI5jinCv{5O1W2r;<3qQNVX{ko{Lpie9UY!_!K7W;9SFGTOH!y)(^(?r6Ylcjm~8 z-(DF;J#8@MPv-r=kvA^kMzY4IDtdxYs=wHb=kw%@lE@8Z0mM5-G72U@@QIbgBjrQRL3jnJP&1cXOV1g>L8GFd&TmDsOtY1X3I3o~1S{eY#PqcX-BaXq95X6GY{A z0(Rhm5hxkQ6e?{`~XP zPJe49wP{xt*!6mf4f6R~1RsUf>8YWhBNa`V53kRyBs?|^3MI8WYAMK$vieyFyh$5u zc{6^JVYJF;PPnQ3b>`P-FF@IdZzg9H`E$w}>2S>R%qnr{ zYEMPuWGeg_OWW?=F(9#;o3Pb06)l-k8b|#1`~GQ6$%ce1nP(dil&Jg?ZapOz%+Qd? z{VCwZUmo}#KP&yIqtCA?yAyh4#JdM(ZHMPE`!)?mnB-K7#0IrOD7GoK&9r?WE zxti~j!&4H-MrWT(#R>7kx5qr{jyq!;*B-ko5WsKu6y`d>rta&mfCAQx`yQhRoM21$@!Bsn!631eP=c#|QZiQ}B#~=CH2NQ#z|1XzA61vAvg9Ec zB6_eOi`WlCig8CcN(70E6Y{LrD7)pjKC_oKyIUvm^vvOQ8~s(0>U&1hP<8fR)4|%r zh-Ylqig9C*1hvnfhv#3hfGAQ|k=_(1knrI1SKWRzIa9>^wD8oqW=-dbJ+q-DLd9|1 z03wxqia(p7k5%4Sb>EqN&}p&pO^gFy?iQ$;Y{J?pR=3lE<_(o>(^^xpfAEn+mzR`w zC1zJe&?LV_!vx12^V2j+!$xP%>GL5p6a=RK4+KtW@G1|V<7KKR$Zz1+P>oYnDcg46 zsAZ$mQJ-<4zDWZGdajm9kREBH0B|t|QJTtalNsXVCtn_=;my;RY!k#As(zJxB;4Iyn1>v39jEOaI23%xq)) zaK7zh*VC2}Mw**l-0RD2q>o=&LvTsMoz`;8s?GhKIZyGU6A{OkL@q#)s!o3bFEKe>T~$gK|sz3p0^ME`{v&p7x^#*K3!#M5OX*7t$Q_7S@7{v0 zUwS{fQORdK8d4`JMXE=zq7(Rj7{UiaYelAs2mZw4`|od5s=v#_Xz4FJx)eCD zv4|L>L_7z8W8aoCha|%PkKkV=mGu7uKe3dIbbU8tV=94UfRD!tiKwX0y+1bW|PrWZ0%N> zq$|r06j^o+ZOqmEa9q1>)-oi1I%>KdcAP}n*-H#!r|x=H4-V<%K0Wo-_nY9Mg^IQO z)XS{BlEK8txy=i^IixhM#Kil&*l-RNu4a0mzdy@Oi)ozYH;XW@Njx9c2S|mA+ zPA3ef{=7%uJgpj!Ek-3i?R_Y6rXc3&Y=(RN_#}^WY^Jm-Xv5ipgZ$wdnd_vs=Ru&5 z6#*H_Gkuc{#foP|j=T|T(2RkKdR0!XHEHf(6>4L>+NSvsD+pNS5fQ|r@ zbF)_fpK^%lS(*x2>fLB(d2i=#Fu;pKwLvE=Zj zGf4?GO~3F^&ua3mh0;l-^I`~&+jcGqJR888ij^r`ae{UYfUm5cG$j)sQ>`9FI@Azc z9dNPQ>s|FuPId97=Sbg^0IC6Er5=M6m#mMchkq}!{--@%l`*Y=&ROCi8>D5%DpFR0 zLMKDlUm?tf)9StPMs$7qBa(LTad{T85MAi@Jl&_;6yV2_K)VZ3+-Ic2-y8^ODbI_DjmYRJbk})W$ zFf*&xbG{K@3f?7_+CmcN0sT zTrnl?A$Zg`V%h}mb=sI*vN>Z5F()CSD(Ux%uhjdY7G|A{VlrTE9j2V&nI(SGZ@T zA&nmAIarhNcosAF0a`*eA}6DsC;_(kC%}3vk`}7^&MYx+wQ|wlcP3>N3KwY1O9|fB zYaaR0b-T`D(l`Fy*#@QlVCFVwP3LSVF9>Od%(vp|)n8doIf@SiJ0|e?JMvTMg01$Y zI|K_P=UrPBC;i$L{5*uOfmzF)V6mC0nZ9EM>5w<^5)G#qeGOt~*r^x2w|fYxVRoRh zZ-{oOP|vn@GnLcMORS5JQ?v1I51oUxaD#3mYI(vD+)D^j_dk5;A3dD8j~F-66{I>q z3xJOcyB$vE_@>?OsDZG**2^a}>vl*kN`%=b+WwvrsQ%#J;DJ`8;N{~=cEVC~*v5rD z6{R~30K+J2wY!>jTx4e4J5~4m1qeht7wKlD3v0G(kenH5th=>+Hsp4#4PA{Er}lYj zN(ke$|CuOH`I7ZfnAsGURANjh##05O@8vwS4iRALQ~-_4Fq0tN-?vYxE$fdTXu^Iot=eRqovTyt*oSN5zT*5Qs!bHU6jZ}K`1Ap_1YnYQ+?!p&097;oo zH&#nt9xz<6y5&UZag5?`5-{!q?8>uR|IUVsCC9!wa-P*iXxv7*zHNWQM-`LhymhtGUY$V^E>Sq<(#uestNmrk)zy-oqdteqvVU*b$99QXXbof!g zNsqpl6C8|=T9{eWzPFUGkWB+S>tm3S0w|^3)mbV+J+r_JBQ`mkCcL~|Xq^=_nDjZt z2V!&H(nnIW(%#It0^n%~6AiZR2yXckC|lV#XpQk0%nAz6yZFIx{0JTyT>}}u_n^BB zW`KiiHqmx+-MNg*chZ1Y5gdEwcAh2;3SM>s$D7!rL>S&RB~5TK9_4+(^)dVve~;mS z=O47?*JDEKimnE=aPZ^Sh3&m4LE%4Jp#Xq1*1aOskou(e6~9T8{0;M43lsa7f49c+c*^!mB8sc>LGqRXwX)zT{GP+W zCz}y}gSyQe3wu>^=MDZvlkQ}Gg5zWJ6A0nz_mrd>6tm=JATQ1(ND#?Hg^3db(`X+ z;+z_uhdd{pUzc-b4mQEXX>#8}>ye8hB-_JYvsn-Er1p9TQ9ctX}0lO&C7c96Lsufu(cwCVe!a!?~sDY>AmuZN7mbIpJKGWr~RP)khQhe zw^Xk0l&-T@-&Iiuz`1kk*NDh>v*r+uhey|9y5bTi2kx?UKPOQ;=sZ2IUqf+U1-N1U z;Kxkk(I)7T4*1(G1M58J0*`m^(f<%JFMD}oXqlOzEEU~j=YX@Ho0|(cQ%n~pmC%4=~l_xaLv7tGjksKX>hrX~Vc z6{JH#%3hRc?POiQ8#t%wf+bxqXYws~|CcO$IR4hfqG_EO6)%|dsAmaw>NrYJl%5bocfPV{Cg(6gty{19r+!dB z+3a{|24PE01>Gw{Dm;(Xe54U?`?ktX?U!4KwewSEW;R$DP|DUsafwI~Wmq*8Ul9{_x5%(TN@Psu1P`$kExB|xM*RzG3*$jmN z|AKJ7#5NbwpHr-LldxZftSiIB2D{#|q1`kh($)O8S;fNOZ~pnwK_=qVl^T&mSLsuF zTJ#yskp=!A6h6@K;+k|Ef)M2WF(^$|}x=-2EXU~Dcy8A+x2V(a* zrNrgxGwR|uvEv^d@2_!gM1B9LfspXT^$JvWWl;f_5ZE05F`Jj%RH#;#@ z)Wv_&EgQf3!mb*Jm%%batr!5e7tTGor(>!snx^LdIn4||t z#yr-Q2aq&uB=hNJ%P;Q(gkg6I`Zq9de7~HWBHNy3ba6eBIx;<3HI(8*sfoT@`CfDQ zfE4Wmlu!s#b{74sQ0uK!ADUUc1+<3;IX}&asj*HY$!PJOH$plyq%e zGqwx+a{IN~H=__RQF=oek-oH~jlIUS-x{2*T8&%uenQvr4L0V4cNs-0sQqxQ+>CeX zPh$A0aAyw*olHz!-UG9{?|tR{57d5v{~j?)55!_X^G8J&P1_%ACQ`5Bxlw#)2NjQ_ z*zLt%i)AEY55NgjwZ2n`ig2UuldSDM{Yvs2r?|`Ih$1N#+S& zN9f>0%imv*T(py$fmZOQoU4v%X=e@dp4r7UG6#^={uQ79uOww!8Ph8Kov?O1W_U zXpTib-!%I~;DuP6?Gl0bCK1kpMu#WyU&EVc@PS*7`BQm4F@9dccYUo+*uDyzlbPLb zQoh>*JUGLw(}0~V@l~XQq|kJB4#q}qFR@La1WVZU6Qt9y(;JYgXjYXa&%P9|UigF- zIv8tzrb?fV%~@|r$MLX#Euwxxm~~Ga6?OMIc1Yb%7Jp7!i#d%^1N+ikSNudW@03#! zWZ2rn*th^_Ly2dBd?E2HIZdE+NQ7s5ttMP<=vn#~dJpOq>6JRl2qRX)&b#h9o?Tuj z$o`0n_|$6QbpPSe{tmQGpk2$zRQbpQbndW^)VMP8V`n`y@+GhNb(6I^b0hUJTfc`r=2UY~Aw<7>?cQ}^7e@pq|$Ob(# zxshsVc9?fmZf){jk}K|QVf5{KNjxsrF=2&LLZb_qPr0cl*LL2o$BhFcO!G-!2O%0j#Smlj+? z$0B8`mx`8UNvyY9h8&YixNTRs3U+5z4#zB)O_cx~pQcm`1ZFDh?1(zQlZP%pe0ZK! zZR4sXt9%!C*ryrU6on2#QHSLK@`{f28mDyau0MAy6_%4ydh+Zb@^9f=Dg7meD}p}f zK0t;obSXQtcV8iER7Rc+cxU!4>H&-cFEU_6mY450yP{gqD5P-7gW8lzj>i2`3*PNz za9=arIC5R!Iyh>{s^35YKZiGtHvM$og?4}s@2`5)m~pIReBSwiB38yeP~yaGm?c6KeK>-~j5 zaToI8pH=Du>@IEFjJ6gb##wHj`gq~JpE=9uwQbW#T+~NFGmW?X(?QlPp-URBqA7IK z`K$?jrf>`$D3RwCqz%x-jCXWCL_f)N`?-pEVbq=}M`w!%@$#dpi}FZO=8Md?HD$F^ zpG2&uM?F&Xrx+mq+~F`***@OCQU$1cbjRPxcBx2amKNhuC7Cr)-%w6el~C=a zmB4-|r29x9)o7K2ySrY`AVL2fc%B>DUcLbqP;A`RDAypBrp*^gG8xel0yR|lp+%48!a zf8m8xk<@x8ge>6!ov+?B(}e=qe6){~1XBApN%<^dy5@z`t&l_J8=<~XVyDNN^NBTf z;#I{Xt$nKAf=cEsMeYLk8t{By`>r-_pP9D~%sR3k%e?RP^T38$DbG7Aaf=n(|C6mJ zI>5~sBA$KNaA9Co?RhHyHEdPr&+0er0ySyVLY9Q0ryYVrHJPJz57Z81ijlUVKg&0pQJJTMYR}!87F*}-K zLIJj7{D85gv4+u!-1M~ha@kgMGV$Cne_Q9H7{kryX1M{Xu^$fy$VY1fr z1H!}gZcxCoPzXm=mQBWNaaI6t{umg;a}pJQtqZQF47Y`h0Kb|OP%pBvhJi_61`bqm0GsPp+>{)9p*_DGrUNpH8AkCYy?=C-l>Z9Sl#m^!S~4r0pX7$7AD|wt=I?PKs@>xqt)4@k?6^*1t(EST z%mQHfN{5eSux4M-phe)s=ehM zZuop`JAKwNlPG=sg`JtP_j}cGgo)dVrVo)!&X|R;jfv%s>g_i~KA^Ste41^ZYtK^z zd!2Nq+AQQ8Sy@%YRbN}Y5;z4{J;<14$6H3q)?yd{4ChQ z#9lxX(FJxKg`q^q4a=ZgXw_E~|Nj;vWV3b9DSm08G|IFxSOCZd?eMmjeb!8Ie}BM6 zQD+_0Nfi6tLb_cnJ)*;cklqkDZ_McIoJ|T|)G8~CstJji_BWNxt8PEHO1GIX? zeFky)$tm06awB5SZ_lJ^gx&@929XOQP_E+hV1OVL{hi~%eSy%1rR z+a)~^3&dhWLK|*(o|@w0@nH&MIgObl-iBgF;I^$YPR2&2=(;G=r%n%81m~3pX6abC zF5KrGJr9EezeQOdO_1hS+I(U#S5kSb3&>3YXfx1jlHp9KCUK_K#b?aa#um-5uCD%E z^WUzM8}W?#%@km4Y`nnZs)J%iE&c^u_TE$7g2FSvnod`c&ZORxRv@oBe z4a!fE)7`sll7+H@CssBDwIIe-Bp|%h&E0PYXDdQS&7;&Ydse0K~I?8ATxWb41R5SjboZ$_kT-=2X>fG_u?}^LH^T>X=!iHq>tTq@GpQMGhYaHS4M>83jvAD1CK~>{@{v~?=lZmw{ ziBO*0fKK);E3Zzz?CF!%zt(s0SRE=}UgaV7*TcO2bMrFNAtAFEVzupj0H+|UlYbK9 zv4`!`<25D{-Q9hiB}L;KN=lT?oj_y`pCOU=j*J`;bK$t+ji3js;|_|IoMEfKXn|A+ zi*UlM_iZCjeSyi`<~PpR%PZ&qy+yX=}+HSXERtJGduibvQ2+2kfg- z{P7!s^@kKPnL%A?1lug9R8zylB|r|0jXu#kt~vbj9AGRL6kKj~z~pAGN&QD(D+qRR z(|&y?0Bi2_{H!GX%@*c98kNI_-6IXHTM^N>Qu^m_63gpHd|f`^c(N(`E33?MTmC}; zsp7cQwny;;kp7e%J-*YwB1C>}TErMp0G;F@ttZnyRc|I6x40aJiN?_W5&H}39@@0! zAL{3MvXdgP#MJ%J7xattgc5d$#W-Y17Y6_VvA$p^t?`8|fr3Hs3HuF$fZdy~K div > div { + display: inline-block; + width: 40px; +} +.calendar_monthly_multi_weekday_ids > div > div { + display: inline-block; + width: 100px; +} diff --git a/calendar_monthly_multi/tests/__init__.py b/calendar_monthly_multi/tests/__init__.py new file mode 100644 index 00000000..ffbcb6a9 --- /dev/null +++ b/calendar_monthly_multi/tests/__init__.py @@ -0,0 +1 @@ +from . import test_recurrence diff --git a/calendar_monthly_multi/tests/test_recurrence.py b/calendar_monthly_multi/tests/test_recurrence.py new file mode 100644 index 00000000..6106b05c --- /dev/null +++ b/calendar_monthly_multi/tests/test_recurrence.py @@ -0,0 +1,349 @@ +from odoo import fields +from odoo.tests.common import TransactionCase + + +class TestRecurrence(TransactionCase): + def test_weekend_days(self): + self.env["calendar.event"].create( + { + "name": "Last weekend day", + "start": fields.Datetime.to_datetime("2023-09-01 12:00:00"), + "stop": fields.Datetime.to_datetime("2023-09-01 13:00:00"), + "recurrency": True, + "rrule_type": "monthly", + "end_type": "count", + "count": 10, + "month_by": "day", + "byday": "-1", + "weekday": "weekend_day", + "event_tz": "UTC", + } + ) + # You probably wonder why we get the recurrence this way, + # it's because of this commit: + # https://github.com/odoo/odoo/commit/43a774d68574e72fa4aabad65db42a03fac6e666 + # I had to change it to this, because the created event is + # not the base event anymore. The same goes for the other ones + recurrence = self.env["calendar.recurrence"].search( + [], limit=1, order="id desc" + ) + self.assertEqual(len(recurrence.calendar_event_ids), 10) + + first_recurrence = recurrence.calendar_event_ids.filtered( + lambda e: e.start == fields.Datetime.to_datetime("2023-09-30 12:00:00") + and e.stop == fields.Datetime.to_datetime("2023-09-30 13:00:00") + ) + self.assertEqual( + len(first_recurrence), + 1, + "First recurrence should be on 2023-09-30 12:00:00 to 2023-09-30 13:00:00", + ) + + some_other_recurrence = recurrence.calendar_event_ids.filtered( + lambda e: e.start == fields.Datetime.to_datetime("2024-01-28 12:00:00") + and e.stop == fields.Datetime.to_datetime("2024-01-28 13:00:00") + ) + self.assertEqual( + len(some_other_recurrence), + 1, + "A recurrence should be on 2024-01-28 12:00:00 to 2024-01-28 13:00:00", + ) + + def test_day(self): + self.env["calendar.event"].create( + { + "name": "Fourth day", + "start_date": fields.Date.to_date("2023-09-01"), + "stop_date": fields.Date.to_date("2023-09-01"), + "allday": True, + "recurrency": True, + "rrule_type": "monthly", + "end_type": "count", + "count": 20, + "month_by": "day", + "byday": "4", + "weekday": "day", + "event_tz": "UTC", + } + ) + recurrence = self.env["calendar.recurrence"].search( + [], limit=1, order="id desc" + ) + + self.assertEqual(len(recurrence.calendar_event_ids), 20) + some_recurrence = recurrence.calendar_event_ids.filtered( + lambda e: e.start_date == fields.Date.to_date("2024-02-04") + or e.start_date == fields.Date.to_date("2025-04-04") + ) + self.assertEqual( + len(some_recurrence), 2, "Recurrence should be on 2024-02-04 and 2025-04-04" + ) + + def test_weekdays(self): + self.env["calendar.event"].create( + { + "name": "First workday (mo to fr)", + "start_date": fields.Date.to_date("2023-09-10"), # Skip for 2023-09 + "stop_date": fields.Date.to_date("2023-09-10"), + "allday": True, + "recurrency": True, + "rrule_type": "monthly", + "end_type": "end_date", + "until": fields.Date.to_date("2025-09-01"), # Including + "month_by": "day", + "byday": "1", + "weekday": "weekday", + "event_tz": "UTC", + "interval": 2, # Test interval + } + ) + recurrence = self.env["calendar.recurrence"].search( + [], limit=1, order="id desc" + ) + self.assertEqual( + len(recurrence.calendar_event_ids), 12 + ) # For 2023-09 it shouldn't be there but for 2025-09-01 there should + some_recurrence = recurrence.calendar_event_ids.filtered( + lambda e: e.start_date == fields.Date.to_date("2024-09-02") + or e.start_date == fields.Date.to_date("2025-09-01") + or e.start_date == fields.Date.to_date("2024-10-02") + or e.start_date == fields.Date.to_date("2023-09-01") # Should not + ) + self.assertEqual( + len(some_recurrence), 2, "Recurrence should be on 2024-09-02 and 2025-09-01" + ) + + def test_multi_dates(self): + self.env["calendar.event"].create( + { + "name": "Multi dates on 5th and 20th (interval 2)", + "start_date": fields.Date.to_date("2023-09-10"), + "stop_date": fields.Date.to_date("2023-09-10"), + "allday": True, + "recurrency": True, + "rrule_type": "monthly", + "end_type": "end_date", + "until": fields.Date.to_date("2025-09-06"), + "month_by": "dates", + "day_ids": [ + self.ref("calendar_monthly_multi.day_5"), + self.ref("calendar_monthly_multi.day_20"), + ], + "byday": "1", + "weekday": "weekday", + "event_tz": "UTC", + "interval": 2, # Test interval + } + ) + recurrence = self.env["calendar.recurrence"].search( + [], limit=1, order="id desc" + ) + self.assertEqual(len(recurrence.calendar_event_ids), 24) + some_recurrence = recurrence.calendar_event_ids.filtered( + lambda e: e.start_date == fields.Date.to_date("2023-11-05") + or e.start_date == fields.Date.to_date("2023-11-20") + or e.start_date == fields.Date.to_date("2024-09-05") + or e.start_date == fields.Date.to_date("2023-09-20") + or e.start_date == fields.Date.to_date("2025-09-05") + or e.start_date == fields.Date.to_date("2025-09-20") + or e.start_date == fields.Date.to_date("2023-09-05") # Should not + or e.start_date == fields.Date.to_date("2023-09-01") # Should not + or e.start_date == fields.Date.to_date("2023-12-20") # Should not + ) + self.assertEqual( + len(some_recurrence), + 5, + "Recurrence should be on 2023-09-20, 2023-11-05, " + "2023-11-20, 2024-09-05, and 2025-09-05", + ) + + def test_inverse_rrule_multi_date(self): + day_5 = self.ref("calendar_monthly_multi.day_5") + day_20 = self.ref("calendar_monthly_multi.day_20") + self.env["calendar.event"].create( + { + "name": "Multi dates on 5th and 20th (interval 2)", + "start_date": fields.Date.to_date("2023-09-10"), + "stop_date": fields.Date.to_date("2023-09-10"), + "allday": True, + "recurrency": True, + "rrule_type": "monthly", + "end_type": "end_date", + "until": fields.Date.to_date("2025-09-06"), + "month_by": "dates", + "day_ids": [day_5, day_20], + "byday": "1", + "event_tz": "UTC", + } + ) + recurrence = self.env["calendar.recurrence"].search( + [], limit=1, order="id desc" + ) + + multi_date_test = self.env["calendar.recurrence"].create( + {"rrule": recurrence.rrule} + ) + self.assertEqual(multi_date_test.month_by, "dates") + self.assertEqual(multi_date_test.rrule_type, "monthly") + self.assertIn(day_5, multi_date_test.day_ids.ids) + self.assertIn(day_20, multi_date_test.day_ids.ids) + self.assertEqual(len(multi_date_test.day_ids), 2) + + def test_inverse_rrule_weekdays(self): + monday = self.ref("calendar_monthly_multi.MO") + wednesday = self.ref("calendar_monthly_multi.WE") + saturday = self.ref("calendar_monthly_multi.SA") + sunday = self.ref("calendar_monthly_multi.SU") + + self.env["calendar.event"].create( + { + "name": "Weekend Day Test", + "start_date": fields.Date.to_date("2023-09-10"), + "stop_date": fields.Date.to_date("2023-09-10"), + "allday": True, + "recurrency": True, + "rrule_type": "monthly", + "end_type": "end_date", + "until": fields.Date.to_date("2025-09-06"), + "month_by": "day", + "weekday": "weekend_day", + "byday": "1", + "event_tz": "UTC", + } + ) + recurrence = self.env["calendar.recurrence"].search( + [], limit=1, order="id desc" + ) + + weekend_day_test = self.env["calendar.recurrence"].create( + {"rrule": recurrence.rrule} + ) + self.assertEqual(weekend_day_test.month_by, "day") + self.assertEqual(weekend_day_test.rrule_type, "monthly") + self.assertIn(saturday, weekend_day_test.weekday_ids.ids) + self.assertIn(sunday, weekend_day_test.weekday_ids.ids) + self.assertEqual(weekend_day_test.weekday, "weekend_day") + + self.env["calendar.event"].create( + { + "name": "Weekday (any day) test", + "start_date": fields.Date.to_date("2023-09-10"), + "stop_date": fields.Date.to_date("2023-09-10"), + "allday": True, + "recurrency": True, + "rrule_type": "monthly", + "end_type": "end_date", + "until": fields.Date.to_date("2025-09-06"), + "month_by": "day", + "weekday": "day", + "byday": "1", + "event_tz": "UTC", + } + ) + recurrence = self.env["calendar.recurrence"].search( + [], limit=1, order="id desc" + ) + all_days_test = self.env["calendar.recurrence"].create( + {"rrule": recurrence.rrule} + ) + self.assertEqual(all_days_test.month_by, "day") + self.assertEqual(all_days_test.rrule_type, "monthly") + self.assertIn(monday, all_days_test.weekday_ids.ids) + self.assertIn(saturday, all_days_test.weekday_ids.ids) + self.assertIn(sunday, all_days_test.weekday_ids.ids) + self.assertIn(wednesday, all_days_test.weekday_ids.ids) + self.assertEqual(all_days_test.weekday, "day") + + self.env["calendar.event"].create( + { + "name": "Workday test", + "start_date": fields.Date.to_date("2023-09-10"), + "stop_date": fields.Date.to_date("2023-09-10"), + "allday": True, + "recurrency": True, + "rrule_type": "monthly", + "end_type": "end_date", + "until": fields.Date.to_date("2025-09-06"), + "month_by": "day", + "weekday": "weekday", + "byday": "1", + "event_tz": "UTC", + } + ) + recurrence = self.env["calendar.recurrence"].search( + [], limit=1, order="id desc" + ) + + workday_test = self.env["calendar.recurrence"].create( + {"rrule": recurrence.rrule} + ) + self.assertEqual(workday_test.month_by, "day") + self.assertEqual(workday_test.rrule_type, "monthly") + self.assertIn(monday, workday_test.weekday_ids.ids) + self.assertIn(wednesday, workday_test.weekday_ids.ids) + self.assertNotIn(sunday, workday_test.weekday_ids.ids) + self.assertNotIn(saturday, workday_test.weekday_ids.ids) + self.assertEqual(workday_test.weekday, "weekday") + + self.env["calendar.event"].create( + { + "name": "Custom test", + "start_date": fields.Date.to_date("2023-09-10"), + "stop_date": fields.Date.to_date("2023-09-10"), + "allday": True, + "recurrency": True, + "rrule_type": "monthly", + "end_type": "end_date", + "until": fields.Date.to_date("2025-09-06"), + "month_by": "day", + "weekday": "custom", + "weekday_ids": [monday, saturday], + "byday": "2", + "event_tz": "UTC", + } + ) + recurrence = self.env["calendar.recurrence"].search( + [], limit=1, order="id desc" + ) + + custom_test = self.env["calendar.recurrence"].create( + {"rrule": recurrence.rrule} + ) + self.assertEqual(custom_test.month_by, "day") + self.assertEqual(custom_test.rrule_type, "monthly") + self.assertIn(monday, custom_test.weekday_ids.ids) + self.assertIn(saturday, custom_test.weekday_ids.ids) + self.assertNotIn(wednesday, custom_test.weekday_ids.ids) + self.assertNotIn(sunday, custom_test.weekday_ids.ids) + self.assertEqual(custom_test.weekday, "custom") + + self.env["calendar.event"].create( + { + "name": "Normal test", + "start_date": fields.Date.to_date("2023-09-10"), + "stop_date": fields.Date.to_date("2023-09-10"), + "allday": True, + "recurrency": True, + "rrule_type": "monthly", + "end_type": "end_date", + "until": fields.Date.to_date("2025-09-06"), + "month_by": "day", + "weekday": "WED", + "byday": "1", + "event_tz": "UTC", + } + ) + recurrence = self.env["calendar.recurrence"].search( + [], limit=1, order="id desc" + ) + + normal_test = self.env["calendar.recurrence"].create( + {"rrule": recurrence.rrule} + ) + self.assertEqual(normal_test.month_by, "day") + self.assertEqual(normal_test.rrule_type, "monthly") + self.assertIn(wednesday, normal_test.weekday_ids.ids) + self.assertNotIn(sunday, normal_test.weekday_ids.ids) + self.assertNotIn(monday, normal_test.weekday_ids.ids) + self.assertNotIn(saturday, normal_test.weekday_ids.ids) + self.assertEqual(normal_test.weekday, "WED") diff --git a/calendar_monthly_multi/views/calendar_event_view.xml b/calendar_monthly_multi/views/calendar_event_view.xml new file mode 100644 index 00000000..aada77b3 --- /dev/null +++ b/calendar_monthly_multi/views/calendar_event_view.xml @@ -0,0 +1,25 @@ + + + + calendar.event + + + + + + + + + + + + diff --git a/setup/calendar_monthly_multi/odoo/addons/calendar_monthly_multi b/setup/calendar_monthly_multi/odoo/addons/calendar_monthly_multi new file mode 120000 index 00000000..5ea8c782 --- /dev/null +++ b/setup/calendar_monthly_multi/odoo/addons/calendar_monthly_multi @@ -0,0 +1 @@ +../../../../calendar_monthly_multi \ No newline at end of file diff --git a/setup/calendar_monthly_multi/setup.py b/setup/calendar_monthly_multi/setup.py new file mode 100644 index 00000000..28c57bb6 --- /dev/null +++ b/setup/calendar_monthly_multi/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)