From de99eb56c87951d29dfeeb4295140a2e78dc2815 Mon Sep 17 00:00:00 2001 From: Edilio Escalona Almira Date: Sun, 16 Aug 2026 16:28:00 -0500 Subject: [PATCH 1/2] [ADD] social_media_calendar: Show the social posts in a calendar --- social_media_calendar/README.rst | 196 +++++++ social_media_calendar/__init__.py | 4 + social_media_calendar/__manifest__.py | 24 + social_media_calendar/i18n/es.po | 44 ++ social_media_calendar/i18n/es_ES.po | 44 ++ .../i18n/social_media_calendar.pot | 43 ++ social_media_calendar/models/__init__.py | 4 + social_media_calendar/models/social_post.py | 66 +++ social_media_calendar/pyproject.toml | 3 + social_media_calendar/readme/CONTRIBUTORS.md | 2 + social_media_calendar/readme/DESCRIPTION.md | 8 + social_media_calendar/readme/ROADMAP.md | 6 + social_media_calendar/readme/USAGE.md | 69 +++ .../static/description/icon.png | Bin 0 -> 1041 bytes .../static/description/icon.svg | 78 +++ .../static/description/index.html | 527 ++++++++++++++++++ .../static/img/readme/POSTS_CALENDAR.png | Bin 0 -> 53209 bytes .../static/img/readme/POST_CANCELLED.png | Bin 0 -> 13412 bytes .../static/img/readme/POST_DRAFT.png | Bin 0 -> 13082 bytes .../static/img/readme/POST_PLANNED.png | Bin 0 -> 14037 bytes .../static/img/readme/POST_PUBLISHED.png | Bin 0 -> 14098 bytes .../static/img/readme/POST_PUBLISHING.png | Bin 0 -> 16093 bytes .../social_calendar_controller.esm.js | 11 + .../calendar/social_calendar_view.esm.js | 12 + social_media_calendar/tests/__init__.py | 4 + .../tests/test_social_calendar.py | 134 +++++ .../views/social_post_views.xml | 65 +++ 27 files changed, 1344 insertions(+) create mode 100644 social_media_calendar/README.rst create mode 100644 social_media_calendar/__init__.py create mode 100644 social_media_calendar/__manifest__.py create mode 100644 social_media_calendar/i18n/es.po create mode 100644 social_media_calendar/i18n/es_ES.po create mode 100644 social_media_calendar/i18n/social_media_calendar.pot create mode 100644 social_media_calendar/models/__init__.py create mode 100644 social_media_calendar/models/social_post.py create mode 100644 social_media_calendar/pyproject.toml create mode 100644 social_media_calendar/readme/CONTRIBUTORS.md create mode 100644 social_media_calendar/readme/DESCRIPTION.md create mode 100644 social_media_calendar/readme/ROADMAP.md create mode 100644 social_media_calendar/readme/USAGE.md create mode 100644 social_media_calendar/static/description/icon.png create mode 100644 social_media_calendar/static/description/icon.svg create mode 100644 social_media_calendar/static/description/index.html create mode 100644 social_media_calendar/static/img/readme/POSTS_CALENDAR.png create mode 100644 social_media_calendar/static/img/readme/POST_CANCELLED.png create mode 100644 social_media_calendar/static/img/readme/POST_DRAFT.png create mode 100644 social_media_calendar/static/img/readme/POST_PLANNED.png create mode 100644 social_media_calendar/static/img/readme/POST_PUBLISHED.png create mode 100644 social_media_calendar/static/img/readme/POST_PUBLISHING.png create mode 100644 social_media_calendar/static/src/js/views/calendar/social_calendar_controller.esm.js create mode 100644 social_media_calendar/static/src/js/views/calendar/social_calendar_view.esm.js create mode 100644 social_media_calendar/tests/__init__.py create mode 100644 social_media_calendar/tests/test_social_calendar.py create mode 100644 social_media_calendar/views/social_post_views.xml diff --git a/social_media_calendar/README.rst b/social_media_calendar/README.rst new file mode 100644 index 0000000000..f938e22449 --- /dev/null +++ b/social_media_calendar/README.rst @@ -0,0 +1,196 @@ +===================== +Social Media Calendar +===================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:9ef0613fac59ec66dcecfb14f4bff101e89925782f08418a3cf3b64bdf731cd0 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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-OCA%2Fsocial-lightgray.png?logo=github + :target: https://github.com/OCA/social/tree/17.0/social_media_calendar + :alt: OCA/social +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/social-17-0/social-17-0-social_media_calendar + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/social&target_branch=17.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module provides the functionality to display posts in the calendar +view. + +It is installed automatically together with *Social Media Base*, because +the calendar is meant to be part of the standard experience of the +posts: it adds the calendar view to the Posts menu without any +configuration. Uninstalling it is permanent as long as *Social Media +Base* is not installed again: neither an update of the apps list nor an +upgrade of *Social Media Base* brings the calendar back, but installing +*Social Media Base* again does. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +Calendar view +------------- + +1. Go to Social Media > Posts +2. Click on the Calendar icon to open the calendar view +3. Click on a Post and a popover with its details opens. Its *Edit* + button opens the post form in a dialog, where it can be modified and + saved. + +Each post is placed on the date it was published; if it has not been +published yet, on its schedule date; and if it is not scheduled, on its +creation date. That is why a scheduled post moves to another day of the +calendar once it is really published. + +Posts cannot be rescheduled by dragging them across the calendar: the +date shown is computed from the dates of the post. To change it, open +the post and modify its schedule date. + +Deletion is the only action disabled in this view: posts are deleted +from the list or the form. + +Colors by publication status +---------------------------- + +The calendar view will show the posts in different colors depending on +their publication status: + +- Draft + + |POST_DRAFT| + +- Planned + + |POST_PLANNED| + +- Publishing + + |POST_PUBLISHING| + +- Partially Published, the post that reached some of its accounts and + failed on the others + +- Published + + |POST_PUBLISHED| + +- Cancelled + + |POST_CANCELLED| + +- Calendar view by color + + |POSTS_CALENDAR| + +Creating a post from the calendar +--------------------------------- + +Users allowed to create posts can click on an empty day: the post form +opens with *Schedule* selected and 07:00 of that day, in the time zone +of the user, proposed as the schedule date. The accounts and the message +are still required, so the form is the full one, not a quick creation. +Once saved, the post is planned and the scheduler publishes it on that +date. + +Whenever that proposal is already behind the clock, a date one hour from +now is proposed instead: this happens on a day already past, and also on +the current day once 07:00 has gone by. A schedule date behind the clock +cannot be saved at all: *Social Media Base* refuses it with a validation +error. + +Uninstalling the module +----------------------- + +The calendar view is attached to the posts action of *Social Media Base* +through records that belong to *Social Media Calendar*, so Odoo removes +them on uninstall on its own and the Posts menu keeps working with its +kanban, list and form views. The module stays uninstalled afterwards; +only installing *Social Media Base* again brings it back, because it is +auto-installed. + +.. |POST_DRAFT| image:: https://raw.githubusercontent.com/OCA/social/17.0/social_media_calendar/static/img/readme/POST_DRAFT.png +.. |POST_PLANNED| image:: https://raw.githubusercontent.com/OCA/social/17.0/social_media_calendar/static/img/readme/POST_PLANNED.png +.. |POST_PUBLISHING| image:: https://raw.githubusercontent.com/OCA/social/17.0/social_media_calendar/static/img/readme/POST_PUBLISHING.png +.. |POST_PUBLISHED| image:: https://raw.githubusercontent.com/OCA/social/17.0/social_media_calendar/static/img/readme/POST_PUBLISHED.png +.. |POST_CANCELLED| image:: https://raw.githubusercontent.com/OCA/social/17.0/social_media_calendar/static/img/readme/POST_CANCELLED.png +.. |POSTS_CALENDAR| image:: https://raw.githubusercontent.com/OCA/social/17.0/social_media_calendar/static/img/readme/POSTS_CALENDAR.png + +Known issues / Roadmap +====================== + +This module, like the rest of the *Social Media* family, is not +compatible with the ``social`` module of Odoo Enterprise: both define +the same model names (``social.post``, ``social.account``, +``social.media``). The incompatibility is declared in the manifest of +*Social Media Base* with ``"excludes": ["social"]``, so Odoo refuses the +installation with an error if the ``social`` module of Enterprise is +already installed in the database, and the other way round. + +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 +------- + +* BinhexTeam + +Contributors +------------ + +- `Binhex `__: + + - Edilio Escalona Almira e.escalona@binhex.cloud + +Maintainers +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-edescalona| image:: https://github.com/edescalona.png?size=40px + :target: https://github.com/edescalona + :alt: edescalona + +Current `maintainer `__: + +|maintainer-edescalona| + +This module is part of the `OCA/social `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/social_media_calendar/__init__.py b/social_media_calendar/__init__.py new file mode 100644 index 0000000000..0077c8866c --- /dev/null +++ b/social_media_calendar/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2025 Binhex +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import models diff --git a/social_media_calendar/__manifest__.py b/social_media_calendar/__manifest__.py new file mode 100644 index 0000000000..b227e457e3 --- /dev/null +++ b/social_media_calendar/__manifest__.py @@ -0,0 +1,24 @@ +# Copyright 2025 Binhex +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Social Media Calendar", + "summary": "Module for social media calendar integration.", + "version": "17.0.1.0.0", + "category": "Social Network", + "development_status": "Beta", + "license": "AGPL-3", + "author": "BinhexTeam,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/social", + "maintainers": ["edescalona"], + "depends": ["social_media_base"], + "data": [ + "views/social_post_views.xml", + ], + "assets": { + "web.assets_backend": [ + "social_media_calendar/static/src/js/views/**/*.js", + ], + }, + "auto_install": True, + "installable": True, +} diff --git a/social_media_calendar/i18n/es.po b/social_media_calendar/i18n/es.po new file mode 100644 index 0000000000..a4f81ed570 --- /dev/null +++ b/social_media_calendar/i18n/es.po @@ -0,0 +1,44 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * social_media_calendar +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-08-10 16:21+0000\n" +"PO-Revision-Date: 2026-08-10 16:21+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: social_media_calendar +#: model:ir.model.fields,field_description:social_media_calendar.field_social_post__color +msgid "Color" +msgstr "Color" + +#. module: social_media_calendar +#: model:ir.model.fields,field_description:social_media_calendar.field_social_post__date_calendar +msgid "Date Calendar" +msgstr "Fecha en el calendario" + +#. module: social_media_calendar +#. odoo-javascript +#: code:addons/social_media_calendar/static/src/js/views/calendar/social_calendar_controller.esm.js:0 +#, python-format +msgid "New Post" +msgstr "Nueva publicación" + +#. module: social_media_calendar +#: model:ir.model,name:social_media_calendar.model_social_post +msgid "Social Post" +msgstr "Publicación social" + +#. module: social_media_calendar +#: model_terms:ir.ui.view,arch_db:social_media_calendar.social_post_view_calendar +msgid "Social Posts" +msgstr "Publicaciones sociales" diff --git a/social_media_calendar/i18n/es_ES.po b/social_media_calendar/i18n/es_ES.po new file mode 100644 index 0000000000..21a030e473 --- /dev/null +++ b/social_media_calendar/i18n/es_ES.po @@ -0,0 +1,44 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * social_media_calendar +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-08-10 16:21+0000\n" +"PO-Revision-Date: 2026-08-10 16:21+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: es_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: social_media_calendar +#: model:ir.model.fields,field_description:social_media_calendar.field_social_post__color +msgid "Color" +msgstr "Color" + +#. module: social_media_calendar +#: model:ir.model.fields,field_description:social_media_calendar.field_social_post__date_calendar +msgid "Date Calendar" +msgstr "Fecha en el calendario" + +#. module: social_media_calendar +#. odoo-javascript +#: code:addons/social_media_calendar/static/src/js/views/calendar/social_calendar_controller.esm.js:0 +#, python-format +msgid "New Post" +msgstr "Nueva publicación" + +#. module: social_media_calendar +#: model:ir.model,name:social_media_calendar.model_social_post +msgid "Social Post" +msgstr "Publicación social" + +#. module: social_media_calendar +#: model_terms:ir.ui.view,arch_db:social_media_calendar.social_post_view_calendar +msgid "Social Posts" +msgstr "Publicaciones sociales" diff --git a/social_media_calendar/i18n/social_media_calendar.pot b/social_media_calendar/i18n/social_media_calendar.pot new file mode 100644 index 0000000000..eecd7cd10b --- /dev/null +++ b/social_media_calendar/i18n/social_media_calendar.pot @@ -0,0 +1,43 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * social_media_calendar +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-08-10 16:21+0000\n" +"PO-Revision-Date: 2026-08-10 16:21+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: social_media_calendar +#: model:ir.model.fields,field_description:social_media_calendar.field_social_post__color +msgid "Color" +msgstr "" + +#. module: social_media_calendar +#: model:ir.model.fields,field_description:social_media_calendar.field_social_post__date_calendar +msgid "Date Calendar" +msgstr "" + +#. module: social_media_calendar +#. odoo-javascript +#: code:addons/social_media_calendar/static/src/js/views/calendar/social_calendar_controller.esm.js:0 +#, python-format +msgid "New Post" +msgstr "" + +#. module: social_media_calendar +#: model:ir.model,name:social_media_calendar.model_social_post +msgid "Social Post" +msgstr "" + +#. module: social_media_calendar +#: model_terms:ir.ui.view,arch_db:social_media_calendar.social_post_view_calendar +msgid "Social Posts" +msgstr "" diff --git a/social_media_calendar/models/__init__.py b/social_media_calendar/models/__init__.py new file mode 100644 index 0000000000..bdd84592e3 --- /dev/null +++ b/social_media_calendar/models/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2025 Binhex +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import social_post diff --git a/social_media_calendar/models/social_post.py b/social_media_calendar/models/social_post.py new file mode 100644 index 0000000000..796c58eceb --- /dev/null +++ b/social_media_calendar/models/social_post.py @@ -0,0 +1,66 @@ +# Copyright 2025 Binhex +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + +CALENDAR_COLOR_BY_STATE = { + "planned": 2, + "publishing": 6, + "partially_published": 3, + "published": 10, + "cancelled": 0, +} +CALENDAR_COLOR_DEFAULT = 4 + + +class SocialPost(models.Model): + """Places the posts on a calendar view by their relevant date.""" + + _inherit = "social.post" + + date_calendar = fields.Datetime(compute="_compute_date_calendar", store=True) + color = fields.Integer(compute="_compute_color") + + @api.model + def default_get(self, fields_list): + """Propose the day clicked on the calendar as the schedule date. + + The calendar places the events by ``date_calendar``, which is only a + read-only summary of the dates of the post, so the date the user + clicked cannot be written there: it is turned into the date the post + is really sent, and the post is switched to ``schedule`` because that + is the only mode where a date can be chosen. + + A day already past is dropped on purpose: *Social Media Base* refuses + a schedule date behind the clock with a validation error, so keeping + it would make the form unsavable. Leaving ``send_post_date`` out of + the defaults lets ``_compute_send_post_date`` propose its usual one + hour from now. + """ + res = super().default_get(fields_list) + date_calendar = fields.Datetime.to_datetime( + self.env.context.get("default_date_calendar") + ) + if date_calendar: + res["send_post"] = "schedule" + if date_calendar > fields.Datetime.now(): + res["send_post_date"] = date_calendar + return res + + @api.depends("state") + def _compute_color(self): + """Map the post state to its calendar color.""" + for post in self: + post.color = CALENDAR_COLOR_BY_STATE.get(post.state, CALENDAR_COLOR_DEFAULT) + + @api.depends("create_date", "send_post_date", "published_date") + def _compute_date_calendar(self): + """Show the post on the date it was published, or the planned one. + + It is a Datetime so the calendar renders it in the time zone of the + user, as the rest of the dates of the post. + """ + for post in self: + post.date_calendar = ( + post.published_date or post.send_post_date or post.create_date + ) diff --git a/social_media_calendar/pyproject.toml b/social_media_calendar/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/social_media_calendar/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/social_media_calendar/readme/CONTRIBUTORS.md b/social_media_calendar/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..4c895949c9 --- /dev/null +++ b/social_media_calendar/readme/CONTRIBUTORS.md @@ -0,0 +1,2 @@ +- [Binhex](https://www.binhex.cloud): + - Edilio Escalona Almira diff --git a/social_media_calendar/readme/DESCRIPTION.md b/social_media_calendar/readme/DESCRIPTION.md new file mode 100644 index 0000000000..d12317af5c --- /dev/null +++ b/social_media_calendar/readme/DESCRIPTION.md @@ -0,0 +1,8 @@ +This module provides the functionality to display posts in the calendar view. + +It is installed automatically together with *Social Media Base*, because the +calendar is meant to be part of the standard experience of the posts: it adds +the calendar view to the Posts menu without any configuration. Uninstalling it +is permanent as long as *Social Media Base* is not installed again: neither an +update of the apps list nor an upgrade of *Social Media Base* brings the +calendar back, but installing *Social Media Base* again does. diff --git a/social_media_calendar/readme/ROADMAP.md b/social_media_calendar/readme/ROADMAP.md new file mode 100644 index 0000000000..d53593bc33 --- /dev/null +++ b/social_media_calendar/readme/ROADMAP.md @@ -0,0 +1,6 @@ +This module, like the rest of the *Social Media* family, is not compatible +with the `social` module of Odoo Enterprise: both define the same model names +(`social.post`, `social.account`, `social.media`). The incompatibility is +declared in the manifest of *Social Media Base* with `"excludes": ["social"]`, +so Odoo refuses the installation with an error if the `social` module of +Enterprise is already installed in the database, and the other way round. diff --git a/social_media_calendar/readme/USAGE.md b/social_media_calendar/readme/USAGE.md new file mode 100644 index 0000000000..e2c589aa53 --- /dev/null +++ b/social_media_calendar/readme/USAGE.md @@ -0,0 +1,69 @@ +Calendar view +------------------- + +1. Go to Social Media > Posts +2. Click on the Calendar icon to open the calendar view +3. Click on a Post and a popover with its details opens. Its *Edit* button + opens the post form in a dialog, where it can be modified and saved. + +Each post is placed on the date it was published; if it has not been published +yet, on its schedule date; and if it is not scheduled, on its creation date. +That is why a scheduled post moves to another day of the calendar once it is +really published. + +Posts cannot be rescheduled by dragging them across the calendar: the date +shown is computed from the dates of the post. To change it, open the post and +modify its schedule date. + +Deletion is the only action disabled in this view: posts are deleted from the +list or the form. + +Colors by publication status +--------------------------- + +The calendar view will show the posts in different colors depending on their publication status: + +- Draft + + ![POST_DRAFT](../static/img/readme/POST_DRAFT.png) +- Planned + + ![POST_PLANNED](../static/img/readme/POST_PLANNED.png) +- Publishing + + ![POST_PUBLISHING](../static/img/readme/POST_PUBLISHING.png) +- Partially Published, the post that reached some of its accounts and failed + on the others +- Published + + ![POST_PUBLISHED](../static/img/readme/POST_PUBLISHED.png) +- Cancelled + + ![POST_CANCELLED](../static/img/readme/POST_CANCELLED.png) + +- Calendar view by color + + ![POSTS_CALENDAR](../static/img/readme/POSTS_CALENDAR.png) + +Creating a post from the calendar +--------------------------------- + +Users allowed to create posts can click on an empty day: the post form opens +with *Schedule* selected and 07:00 of that day, in the time zone of the user, +proposed as the schedule date. The accounts and the message are still +required, so the form is the full one, not a quick creation. Once saved, the +post is planned and the scheduler publishes it on that date. + +Whenever that proposal is already behind the clock, a date one hour from now +is proposed instead: this happens on a day already past, and also on the +current day once 07:00 has gone by. A schedule date behind the clock cannot be +saved at all: *Social Media Base* refuses it with a validation error. + +Uninstalling the module +----------------------- + +The calendar view is attached to the posts action of *Social Media Base* +through records that belong to *Social Media Calendar*, so Odoo removes them +on uninstall on its own and the Posts menu keeps working with its kanban, +list and form views. The module stays uninstalled afterwards; only installing +*Social Media Base* again brings it back, because it is auto-installed. diff --git a/social_media_calendar/static/description/icon.png b/social_media_calendar/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..847815a5bbd09748d1977510c63439e9776a38ab GIT binary patch literal 1041 zcmV+s1n&EZP)@3EhYlGE1}TElf`<_1 z3#mF3Y11MZ6ch>-DN?XQ1!)gSr8cQ;)93ehyp!be?(W@P{ycr~fyc``c%S@!@4eq$ zON&iAKDVoZUN8<8!77*m2@r1i7aA7Y1wH|0Ly-$n8!zzh%1P~chNu(`+NJ_Omvf@YNT=rG|;`~UTN+P$t zN_5X{vJ3MM8AON$(4m4ztJkQU$5p^zDEar3ok)%o@ zu>c~8|0N=qRM{U%e$n}npi486((%dc^1wSPC&4&opU#y}FB1)5C_6(kBKIf`hl z1VUgG>;WcV1)MLFh=OI8nrlKrGE=jZ;!#+(5vZVWFGaU_%4LDC&60zs-MFQ2q$*(c z>f1-XjIk()gCr-;$26}J8pz2=nB18fcG|Fg4tuGc1hL2nNCTbOH=WOk$cprNks#KG zhS=q-Fba+(2K~z*0g6n%75Ouon@G;9h$SkzOlg6Igg}P*Z}e=)PNLP11Tp>e0ZB~C zyy@{s1d%A0(L^F0enmF#r=&k-^VFzndtawm>BmylIE~S7HZ36%Y4a;WN42CxM6@Rk ziW_Wu;t1Qx-DC&9zEwbD^c&5w*)tK5%&Je3xTHwB(qNzM%w1>O&kjpLbLkmNON&HO zJ|v2C_ekyy-I_MC5+;K5)2sFhPp`a3kwM95M6D~>Uw`jegq{(!s3QQwFF z`ZPv;nqwoPdoJ^9Ad{{`YNZ?gK5s2i4u1b++b@pErxxbYGp;2{gJdd-#?s~&w)^?9 z`_YRzG}pCgZ17&GUm4$Enfkq0H7PRndDU%_Q0+fHC=emvpM(AY-ZsmWL*vyh00000 LNkvXXu0mjfRX)=o literal 0 HcmV?d00001 diff --git a/social_media_calendar/static/description/icon.svg b/social_media_calendar/static/description/icon.svg new file mode 100644 index 0000000000..02e2e3462c --- /dev/null +++ b/social_media_calendar/static/description/icon.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/social_media_calendar/static/description/index.html b/social_media_calendar/static/description/index.html new file mode 100644 index 0000000000..576e3cc309 --- /dev/null +++ b/social_media_calendar/static/description/index.html @@ -0,0 +1,527 @@ + + + + + +Social Media Calendar + + + +
+

Social Media Calendar

+ + +

Beta License: AGPL-3 OCA/social Translate me on Weblate Try me on Runboat

+

This module provides the functionality to display posts in the calendar +view.

+

It is installed automatically together with Social Media Base, because +the calendar is meant to be part of the standard experience of the +posts: it adds the calendar view to the Posts menu without any +configuration. Uninstalling it is permanent as long as Social Media +Base is not installed again: neither an update of the apps list nor an +upgrade of Social Media Base brings the calendar back, but installing +Social Media Base again does.

+

Table of contents

+ +
+

Usage

+
+

Calendar view

+
    +
  1. Go to Social Media > Posts
  2. +
  3. Click on the Calendar icon to open the calendar view
  4. +
  5. Click on a Post and a popover with its details opens. Its Edit +button opens the post form in a dialog, where it can be modified and +saved.
  6. +
+

Each post is placed on the date it was published; if it has not been +published yet, on its schedule date; and if it is not scheduled, on its +creation date. That is why a scheduled post moves to another day of the +calendar once it is really published.

+

Posts cannot be rescheduled by dragging them across the calendar: the +date shown is computed from the dates of the post. To change it, open +the post and modify its schedule date.

+

Deletion is the only action disabled in this view: posts are deleted +from the list or the form.

+
+
+

Colors by publication status

+

The calendar view will show the posts in different colors depending on +their publication status:

+
    +
  • Draft

    +

    POST_DRAFT

    +
  • +
  • Planned

    +

    POST_PLANNED

    +
  • +
  • Publishing

    +

    POST_PUBLISHING

    +
  • +
  • Partially Published, the post that reached some of its accounts and +failed on the others

    +
  • +
  • Published

    +

    POST_PUBLISHED

    +
  • +
  • Cancelled

    +

    POST_CANCELLED

    +
  • +
  • Calendar view by color

    +

    POSTS_CALENDAR

    +
  • +
+
+
+

Creating a post from the calendar

+

Users allowed to create posts can click on an empty day: the post form +opens with Schedule selected and 07:00 of that day, in the time zone +of the user, proposed as the schedule date. The accounts and the message +are still required, so the form is the full one, not a quick creation. +Once saved, the post is planned and the scheduler publishes it on that +date.

+

Whenever that proposal is already behind the clock, a date one hour from +now is proposed instead: this happens on a day already past, and also on +the current day once 07:00 has gone by. A schedule date behind the clock +cannot be saved at all: Social Media Base refuses it with a validation +error.

+
+
+

Uninstalling the module

+

The calendar view is attached to the posts action of Social Media Base +through records that belong to Social Media Calendar, so Odoo removes +them on uninstall on its own and the Posts menu keeps working with its +kanban, list and form views. The module stays uninstalled afterwards; +only installing Social Media Base again brings it back, because it is +auto-installed.

+
+
+
+

Known issues / Roadmap

+

This module, like the rest of the Social Media family, is not +compatible with the social module of Odoo Enterprise: both define +the same model names (social.post, social.account, +social.media). The incompatibility is declared in the manifest of +Social Media Base with "excludes": ["social"], so Odoo refuses the +installation with an error if the social module of Enterprise is +already installed in the database, and the other way round.

+
+
+

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

+
    +
  • BinhexTeam
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

Current maintainer:

+

edescalona

+

This module is part of the OCA/social project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/social_media_calendar/static/img/readme/POSTS_CALENDAR.png b/social_media_calendar/static/img/readme/POSTS_CALENDAR.png new file mode 100644 index 0000000000000000000000000000000000000000..8825a8a862b96a7478729aab838568fb4db7188b GIT binary patch literal 53209 zcmd?R2UJt*wm-@i1rZU;R-~&aAWD%cT|q&SB3)_0LJds;frJoI1Pg+NUZq1~h)Qn> zY!sA|&?7Y#<@} zHCgB1;#yN?qrQ1E<<)=l>?+JX^pyAGYyTgeSG$wa#L8E+`#vXW+F10hEcK;-%zri{ z`|P;f$zyW2pUFPj{b`b^QT+S%q>=&X@4G9mQJBB)UN!E90fhFyjd3O-3l=ec#2TdN z%g$dfTLK@uzRtp=TUBO8se!VA3U0U(;63Tbns_CW*vl%%n9LWZZlm6Q!9@Jrw04o1 z@C+=BIB#S3m>O6!3Q?S)Ui``SQfEf2y0%P#c&1=OIzZrH+U5>FL^vtqT52HT2A0gt z#kH(V5_;K*vVL%J*wZcL!y2PP`ySerJP(UsDP}mzFX2xo{Y5O+xwi7{bFR4aoe!CKacG!~m{7cQK*q-WiU+a6NqH zUbv4Q{bJ?p<1UT+si&*+F8}f1TT9?U(JzxaG7@M$F0O?cfy0x|JUNuFhvk2tiG0!_ z;E{*3XC+9QE1_lpTMhqrM=8p?VaBDN2N=Mpj(LB~cnW-*daRtsKWha8f7XR@e+f;# zNY=i8`9+ryz`^px^rc^cceP%$hMDWQ90KOjDJt7i2aNvp8Hb;n^VH$2OfK+f?@b+C z;E$CwF0Mwuu?y$M-1al#oVriYc5!iC=)0|X0QgS9{kWHPD4wvBi|YZE=lKET4}Xa6 z>}A%5%;fugjf%Px9n{ORcSdq3SnqOw*mL%JEGI7;rC*5VsI@KLIs0>B$BqFLo7Y{k zbZnMa(_1GhMVyf}j081gNwtlCmn$ezb5p8J2FeRsxF zx_Y7)A*sRy?)z*82O{?=qdN58y%E);I3IE(ay!@EKq1%p0GYdTsXK%8S?3Gwa@#4|V&XYq?1D7#LsbPv_( z*7L5AOE7PpBy{<%nfAI1@@+PZIi15|2%BqF>+FxqB}-EhzMN{iB$)1QF0NNfEzlD~ zE*Rr8)}3KL4i;#Vo~G}q^lDD?DX1pJr49wWkJy1*lt9ko%xrC(`bZ#HUN1?39KL3z z7HocR!vv6&3kIT;Fx;i5e{Js5!>7AqJ;;u=Axcv$5Vk9wQflABS&hPs4QD$da(k5U zhYNwlGq=19{>_k>7Jok>vR0cEpgt94tI>$?uc=x)-K;kS~as&0S>!3 zO&sgi1!Y6(B#Kd+aYMBdP>NQ~wt`>roYcgp%Kk01AC35fjfa)vUE#T=~Fbbo3IPPS(XhLgl^lF&b}G+ZRSCLu5F`oVdUlJrE+4?>f&Hpovb|* zEakN8y91)LT}Uph^Yty#o5>Y2TObovp99Tu3Tu2D0VDLhdyyza3mbH^4Tl;pHZ)z> z_=o`)uf*?X&ppBsRLOCQp`SKyIQv!weVqG*%LuN_R*NhRd)+#RfjinOXjj$6*A=(R zk3xJ5h;1gMh#B>wHe~R}QZwRZ2w>M-9fYZ2xSh}cc|QWl^QHY@gOM{rHnb%dSg>1^ ze#{t=`MbEhHUy2H=`Sp3PY5i(+Au?5v1d~?>Jw2@yZ95|e6&k{kY(rW@%0Wv+a@>w zX{WG`UQeo5H5S#AvwpFe+YyDKD2Qel4P}~Wfli@tl{g1+g|D`?!dHKcWPLheF|5yD zuK?(-bVrKCC0K=A+kIU7syXu1k6lnb+eI30^Ov#Ljg!mYLyUzmr33wyegcxi%p1;~ zgdn!n<1}q(-|%E_=DeDgsh+ua%0)(Z(*{^8^M-5ya375A>OEO`^ScAwYrk{Iw_ ztznJH%`{{#-n+l2JE!HEn;a_j-GLT>;ZdcTL)}ofq4J=do)-w?8)XDd6UP>K{wsqXQhfJXVNYd(@}debgp;DwXP(9ddz6pJ`6AaJHC%@ww5#pDy`b8R z{CbTnx||OZ9QK>P-+wt16P;Ad`M-lN(od?U`TrP_cvtJ+nKW^#IY0l-D|eL z%CRb(#Odb4gwg!w`Q+0LUHUunt0tlb8Y(Z%QY0+B-jYsgT9M~HPY)KB_nD%Y#X;nt zZa@N3uHVr+pe8gkt=KzK;K*vf7d46OFYUjU;G=L%jJTdBrE<&HxxxfI)W>4MoJ))8 zy!E$q7)wcQ*wXF_rmo*p<_1&U`F*vPHyN7a6`O+&WAkhDwbV)hVh+8dhvz%Df6M5= zhDi6%9llZ@dHeJ8Up?bgK8T@WqXb|@#ks(A{O`A@AI?VF+4{a6YR({5CivJ6^@Jy; zSYmTVf*~<+J&V4jeG~G7exVta?&k$>h}9X<+#?isD2VCh@S4ppRRRL`r2JYdrg4A7i2O3XYu(lED1&h!>er?R^xS$c`^SE%xrGJVQzX`UE__=KT5uv?$+ zj>zQVG@VAjiMQSKbHB@XbKl)=hr{7cg>N#!i9U~rncckD2Jz0?@Ri$NAq_&d_gI+P zM|e`{Fx1Qg&r_L=eg8s0kVbx1wsM5Vp3Ks1}@Fg_9iBB5$(ZyuF}zY4^m`;U{wOuTBALeM}38UFi>0 zOIk9T`&CPHLw#M~F>Nx(Hh?JesqI;kX7@k%ST%7&;&W@pVmp2=RWdHmCBpv8;agc} zOb;;PJONegCLmS~9TQ)Rh)sOFB1UUm;at?RopPY1Vq?{WuZU- zJgElk|0rOb>f4Xe#A|Z@NJhTgKLMmQN|}FWBLksz!8eMJ;(=^K%KkBx`X@tob0dJ5 z&#!;+8(vJRLty)r&pO5018gVe-FwAHF@YMiRt<%J&Ms0nfA}Kq`2qVYJ=9!E2}aiV z4(-J9&yJjVW8&$Xghn;0EFbE4)x2h4FjiHq)f5{ROnFW&Sx_}lvRR1Xn1C{ z)%GuB*M5&e^%m@ta_teI8WV~t-1HGKPZgTl~uI%&N;!CJ>Gi#MyxtcM`B&(g<`RmhNKPdu#ZD0Qz zQrzDk)}qL?Nsp3i!b(PzV^rM!K43IGyE>-r>g#9d;b6O zG3mIS|GzK8|6>;a$ESazBZsmrBz0@0BK}o#Mt1^7=IjEI%!m#Sw93p)?L2dWo>{jP z@hrcn%AymsZUYBzOlH%SnV%O#%i>Rb4CB0jP5}w#!nQ>(Dhk`ETN@;VC8b|3C3OSj{o(;c;))4FJ&DG1Q&~D+5Ts8|H;E+ zujIzmoQc-5ln35ZtE+xh4S(@|*u9@&em^X%%33NpIizm!Z{dlJ?h1L+-d>j}Qd3_) z?EClbxT;2B-a5IAE%tq#o*wms0^0h=m3JI4R{;GYBLzjugWlP?>ot7ibku}45>pj2j2Veoe zUn#dy1w$V^b7pXo9`bGWSCQ-Aq$PeQ%`8Wr0nIOuVP`{a4Zki5FjldjR7ul65raF@ zAAd3`g`=?bdKQ77)@OBcC{uHY?ig&ior+b+oI`ww)SpZme+2`M*VfT^UqJJ&=7AW@ znwr)YJG~9UdCMoNCQOCyNurLi^)6C6+v{Lct1&1%=PqVItW+4o>XCtv5`|<`qw2S2 zp=s;AHY|2;?W^HKO0))c1-tz0Rekoi7Zc!b*}-$eO7Ws42anShu?3G)%V-_g281A9 z_h>DOl=MImW{$6?@n-r;)_M)4{^+VA%?QakRM{wYKIX{r zyLfzX-||L_6paT0n9k4Zq3i)h^yxzzY?75Og(u*^j!s#*!u4OR5@X;+VN1|!RzvWX zBU_NLs(2>>EsWboQ7b*py#9P&f6lPEFMJd$n8&9im7tb`re>YNhv#59li3VrHw+>p ze^uXnGm{OWWwVEIeZ>#H-!Uoy;y1ID^GsjyI^j1b4>F=j3(1d>Z&c@nkTk#U*CyQH)nl7xkw-cnu+u-{ z1|vMtV<6UZ{VnIY@aWRUUYh>(Z`xPWR(ghqU~~1jBnC2frc|1F=dURr-Oqq{Ul|vL z7K=DoVrBfph?7ZVVqS6x^QqfdE4+gc?;$h0IY?cbVZREfpGz4tec;C_p-OoNo!|pG4`$&)BEOYOufW?rYsXMN|~4u(7X2_ z?O~5}d`3ZEvZ0Y39BK!L=qja!;=&6WoZmH13*e|OeM`iSUh1_yJk6npj(WuDD@jzj zl9_pfkO`uxr^CDFu8pGVv_;Fwl1zuXt;3yZvmQ@#dQM;Jt3!hN`I`ux!`d4z+&L7LvW#K)n#%e;6_;>Z|N4+Chkcu52EMyM zsdDn6gZd1*FsUqGsDH2E4JagfWFXA%#hVPmR@lXHj4#M@@r88bsP=w?btfWH6%b&+#L1yj-zIQ zAS_*0$#Q&~$<>~C(%F7ycKYkO$mIvP+o-{NrZF6k?6LN%!5sG3RnAuz4O*rO=;mp;V6Dap$qS!hZM3CVm1#d<@kHd9ywK$_bA!hu-gT;fkUQw zvDxiAY=g7}OHTJalGH`!uPYX-EFW~g1n!B?>V1?+=#YO!S!APa|$P!#O`ZXudR)h zXoW=0GO<}jQ}uVW)`kDGRWS^@bS!h*r^!w4Vz6gdb)+Y9GvCw%F)qZ)uBTehtrhT@+F} z!l`tD3`)`lBG?`U?4T?cBCLCKhUe?m7rM+~n#i`M_DI_F4CH}%?Y#zKZ#ApTX zPTKRe7K^NY{^NPhqpkURB*{+itbv_q4*mTbbzbgX3EO(k^Q_Hoq#S~;-VXqHFGnKG z9*X!uNR548@t9G$6M@)#O2*SyYorx7s=k_>H%d7Pv5he~p#MDK=iy8(OjTf?XC#i|FN-!Xj8Vd~?`vfBL_`=PASSG&Ywa767kG@Cap9LKS+z>4Gy&6_I#l9|7*jQ|jLP$~x`!??ibAtC^XzFD;p5=n zZfMx7SuBohnz`l&RPW)bzV(RE@>u$Yc~2c_N1h*(GWT7M!+bz=tnMOo+tr(>z|T8k zHN!OK2ohI4Q2NW6EA8@f_lm0bjY#Z<^$PMB?H4_shlq*7;5<&B4(%WGC|he;N_*Yx zL<&5@YTHcRnp$i+{qCQH-|CR6+x`6KbGn!1s4i8X^$u73bYYMB6HcDukc1H8yIqpK zXWxWDW;K{WY)F{`hZT~RT>f2uNA(Z?Hi)LdtD3t3Lleg*e2-;_g^=gNMn0@d$R45_ z{iA3P+e_2bq#`*isStf;wu~yxx2wb#J-?Y>;9$L>A+g9(%xhq#j78XS3ZyTdt)-CWW%PLLN+Ytv^}EF}d5*V`wdB zIeqOflld#giSF|+^QyKidq?Y>g;9u<{{LV@h4 zou3crUjG8s7Zq#R`=_WD${2tw%x*7>u0dA^cJ9Iy0)eCP*%0yXCku}3d~}sWq16AV zFB;4NFS9Mb>6`UyOXmy3?#(*1JBl}JG7%6c$<{3?b7MY##ca8NEPo&_MDc|w=IQ%= zhi1R~%Sa5{2jj4joD{Sq9tvGniHQavBNmucm-py#uc4rD@Zwejeajfang%R9&BLuh z8FUlMveu0+YLRy$&y(xxdj<4IEk85?kzp--3N2hBqTJRe`5t$l@FjSS*uPTcF`qh! zq_JDX*;uAXQum7sMnu4P+ zx4f?`YlFc1Vt8V^?M*4C^W_9N=2Yop%WB*1?)I*tV+vbZN+J~(iyqYH5dzl*qLQWa z%~-SH4Z^#<&Tv}8D1kFxvq>;5r2@!oWOxFx=*Ay1#R zt_L_}f34u)z47V!e=e!0@vyzSxQho77iJmg!pQ@o%|qgPPWc+3uzLad{*hGwjiMJ7 zh08ZmUSm3!uv8Z3^;|Z6ljIK$u}xW5H+kt8)kS!p2le$YbdQe4#Nqherd_Ntl1RS`jmEdAaEf&LbVA@gPe~ z{dRS)KoB&8pd7h$w!l{}|Bdw*2*(~5k+q4?s~6kY8>trUk?+_2QPCi4a%7h?n2Los z&bl;kCR{>5O#NP~kReZ%N1>m+{;~`g!VfTvWDjj&IEA0a;^l1wP$@*~57NsG+a~hH zG;`#2?zNDehQtY5=nUS3Ia~kAGCvq_g%sH^bJv%HVK*Th$)@YDvlA%l1_uH?M$4*N z2pMvA(THv}GyiF3PXH(o0Iksfj=G^>2R~1lOSxw9MMHQp)Ls5N);XOxa@nzA-i54>++MC6N?(5v%p#|Lxa2jEH^Ut4V40XLKn%w?9u28)@-@*yv+a$w*h%?6X>*x! zPwW`|_-hVj16+$Ky8cH>ttUU zV}9aCtiF`(rTDJA=kef#_7g=S^yR`+Vbg1>i`al{$v^3EEk8d^Yk-kT{nRV=@*{uP zZUY>)EYy(@PN-VdnCJu0fBF{e`&xsaT9v?`Zzb@BcSf9JwjztFC?z5&5#LnUU3wy+ z_Y>y?EaESIjb{qG2ue+b!rk75%5)xk>zh?+EbG(hoOQqSHf3uUqF;@u`m%uXtt{a$ zo2pUClk#O29T?%$%jN%q=}D)&*V$VlA`ivM z9*q(-6<0xq@CRPj-tUhicoqySxIZ2T{=Mm!1AqN?QJ_(6!{(Kh)5cLxceu&e;~b0MuDcfU(^89 zcu;KrPj>%EdV7RVvUqL-t9RoO_lbWR^&e#Fx_U4808sL^fD1bp{sZali3&kPo(kkB zy7KLN`tU!J{(sBl)1NXNY-?pe!q<{Lm$sgmd~55azg=6^5{*9BMFZ&7nrQ-gboP8jXg*%X81zKS4YKgl?CDcd4uDz;c z%e>)181xg?ww2gv!{AL^UDIw|fN3^Mq`wJqkZ0wfA73)im&rezO`9wn1sVyzTP}2#`of<=%qg#YUfYPN-GJz{6$XFzGU^yA+7Mze$9L0 zcgWy<4}qc+kJ(N`yK!J?GeF9MXbsRo#op+*sK-_55l(mf@HQ92#&;6zk1%(`WYBI=L+B#h0YZdSu@@xHxar6HawUw z(o3B#kh>q(>lJ3aMViFHxg9(gqKtmpA+rneGStMRk7fny^^Pq7Hj$JkP@~zl@vaZ9 z|LFLcfD5KdOG01U6EJPFgKNe%1o7$`?|3_f5Jq5Fp?bLcZ>~i#f||MuwD7A})P0Qh zBuBhLP1({aUy?oegKWI1&rN;hgtZtEQ;ILSLFOpU+?Gc8p;sGZ($1-fNFN3PKECKH zYiB-Z(Al{v88~_;;9_M@RRW>`8m0KM8J06bqHQIa7EB%KCGkCtFb`rAU-owF5X$SA;oxL|pb`8~7leGSpBFI5?Nt)p z5fpd2r)caM!=<#&zYUu#Lo>UMiB?`D*4lZM;I4X)NhFRa#Z-KZ!2mr*@bfqy>lTDT zqI%!Ky*D3n-+pw?y7&FpZu%-D(I?p4CG%}By|8zv{Dgg-LO=4nVsGXr>7yg=;Wpau z^+#uAxUuCu!w+(@<@X1Z=bd{star`udz?JW(EMeWd+(KVq&|!^DJ3IMpj9q7^iC!8 zViLN-CSCaxt6ixYBmxBr>I-7=ov}IxFxTn*3zpHE5$RmQd`|#Tkcz@I4{)nqCWBRg zrMWdgGyA5EN(vzLzZgJ_-)+EpNQvdWP9b}U(n<<)Z|s^^NvxN3oZn-ycc*iMSy9EU zu(-luDR6s|?iG^JvCg@f>Jah) zVgmO#Ml%a&=u8}{h)8`?_MjNiyUBYq0hO@!#e1&+th4`RB*=&N@$s?}+f$C860_hJ zb|Lwq4~lO~&s;{i`}<%5Kh1e4FY(N(txXCtHk|aiU#R|hx8|`}tsV`FFJ_OWV6(p3 zUHBtUfjn90UJAd~qpDrd5$7{~W%QIfg`11ZXEI-3CzC!;DHQ#n-S&DJSdVM#pAZ#a zy3aowCSzm$(O6hG(lRn*ImP?*UeRcUhsonPE&X@;IrVBo|!oiF%WH2c3GV{qV%mm!B``59eDf zCO@yZwRy0>SKhX6Q+&{Q_5Jl3$hESDl^a=agqT?Vzyk~i4+CgznZvL>(C^V#F%*1y z3iPz5D+F8!v}LLXO>G37v(51jLAJ#ok@NVX>;XD^FD^X{D9fu)X?qrtOz57?bEc=# z`H`PiE3n=H@U=0d-Mw2`${o9I@Mi>0stpHK|0Wj0ttDssYNFwTaw|(O+(9{#f^j01 zDOlq$e7n85@yS0HhWWxU=T6WnE--5vg^bOd+1wM)UsVWn)ZU^fSeq>IY3!Cbxc78u zMS^hVhbULsCNuIc2j1c`3t?daX01L`U3||Xe-~;gGm6gKis-Ya5tW~B6ot_HYo+LB zPp9Jc?G1@F`Ykuxchb5OCl~J83f%narc`aWf1AbaDvuon5 z+mdbU^mLJJc|__=sVuNiW1?T$Zq{ECmQ3m9NtDwqx1BZb_1)-$AEWUYEy%BU%!dFh#E>qJmcpuO7a9N_n*6k9&5+p0yv@yix*a)lX z!)|h8vtnm6xMvFS4zs@e-S{KBg&0~6dc%nFJ|AB#n>os~;QfSp*??cJke^0HzQ&mM z^B4)7INputYqLk@p5-WFmxdZ<)I-X%Imr$xKkzK8(<4_vDs5z=R-hY(d)O2&G^5o@ zX}s)mfR_!<-6=dnHIs>hwF$THD$gDV%Dz}I_r}d=5T6LWcgUR@X}p~B$JPkIGL<=g9lIJP42g}ZlcIqc#KDeY zf|IY_(HkBNmsIuC<<$xlyC8fowIQDBAH3A#E2n1BJ(}MG8%}sTvBh-CKn3qIwiy#U zZy!{dcz$>Qg|m6iXDQ?+S2X_cxuBnQG@rH5UGM3-rc*kdj(iGIQ)0*gwCzxCBU95x z_|yBMKp&)L&SDsQJ-t#3bh*iGub6xEcb4Q7*ezQ43wR7#`XJS-$1u1LF;&*qxHnL* zf8pjl2evMC2$FX3s=H(=@mVHzJ-E33D>lfWHZ`+H=Z8^hTsD8bd%*R#Hw!!TRf%x( zhR~dz%6-{Q_Z|2I!aF@O$?M*ah=$feTL&4^@959DhhC{wKe(~_JbY1ZomYPep3xTX zNoDwu^pD}-dq1t(1iW`xjN}~MD;Pb6H3{2g-6&nlr+e&nPtE+MykKga`)<;OG8JR5 zu*dU(>p;J^y$k&U5g#n!804Wt;Jt)DEyUlbo4vmi4HL|n^KjgzN@45 z#vRPSe%AF+@FH7{UMz~YUldk1G;jCVjJ&DH+zpdg&C%6WY6y%|ZvbQbZ{`LY&-aT; z)7Da7?A?)f^DT&K;o-y1u$oU?0>ygTy3hr*$rIT_))kPG?^?L;6Fqw0XHfBr$k%_ctBI0JdX@DzS4xT6^OZkl&um;l0Fl z@ABW7?VtHzGT-8?E4fbA;!8#Ukej=oa#@9wx7AfovS>>1IaQlQUj=co(P6oYj1K#@ zttSpOXuAe?O+Afc&V^<;BbB^7KEqM|7b8ynMQQP-Uo&R0N~e!9O26mGsW>8UCgGjP zA9OyrRA>iyd&3Jf(a9Lt@>;lU~FMy5C&@)&)N-c@BG z@9|)xDAgqm{R13H4t$@3F3WDyZwuCkw=uZcc%j^?GTWB~ge~N~lF}QkK*rgSAjSQa zXxWTfVfs>{Kz*V1p74X)m_iC*vmaLH{ti_9xt-hCMtc;U_Nt38qEzjN!txjrouz=b z7ZZ}}{`nCPPU>xqt)S$!S<$_)w}b`Dt54u8FL*!VW1j!_DG8PsfoG|`$rfD{_ zGvSLnY6!^E&)AJVHFSHNm&XG0SR|KZbr#Qe3ghrgC|$NC;cZEt)n)hcnlf~JjPvTf z+yCusK6DY_>7vyDzAQa1V7gx4q}@=KdVf%W%;?)Ffj=iD9FAm049w}d1uQxQ5`VaQ zipkA%5n@|LXUwy8)=^Rjm0oS34Z?nP0A=S7ZvB;!W?3Z6W(A%<|C@%V>*!=hV{I#r z#5s?5MxJjd9?IM^7~&PLd?d=0Pxl}-eCgLA{)*Li@X?9c+^Q0rbo;ZGZE4(ywD;px zc@A|0XRTNFSXArrZ38i;K+tl*sT=<C;cp{smG67ao3VbMXE*Q3BX1lY8ngQO!fOd z$I~gp$|&>j$mEx=|U0)JEMq%VnMS7JOj+HSn{N~kCVWYuOonOaxwI^gH zE@IJqPdk6@X^K$P_?7U#HdpQ@h zUJG0SX7&AS+;e>f*!~?)&-?>^_9qf$>Sd(63}<3sJq%)g%*e^<4>&DX%(=T?@;|Z`7@K!Dz`n8%y$F*ISBC z8!1VDJcP_x2OG`R-kMV`K;!H!UE_Xq8xjHSUWF&!Qv2YJ4$OW#yfx3#sw%oW4TcBE z`fQ(?*)^73)Uzjpu;6EV^;T(*sizOUwMPs!Tx$VG%SdO}V`8}_K~{nr)Uc1_X6`i({;$EkAE>Gt(-^_T z8f&N4{JN_JG0$y>bb=$%7yqX*y^7DHOmPO|$6;6mT{O|w4q334wXRS)09~xzLThER zW^#wH^E5xB9g`0|1wn-M+Ry?!PzJKg9t5&+X36V@t=@HIZa%-JW$U2#USgxxAZypN z*oey3JY!ZZ1m#lTCKNOiUVz{PJ2x~K5>|^F#*{uZ%nXYz-2rgQL5VxFBvFB?(L3ux zq%%RYb85jbJjFmgCwp<_yJi)}3hG=iZ7a7qCz=SV{=qgEN7NM&G-Wsgx-uGA{i?AB z{kz%+MOi+{=~aGpSef()JrWJ6DG}2fPP7ff{E0qCO5x{ScSh z7$$EFqc>W|$z)EibUMCv3seO=4`-svgfS7fqBUCNyg zvmSvfEoAai;oJ^9fp+a|c&U9F7;#N2ExgJHLqJu)G=H zX=Ss41|TMo3(l{XEOkhr9AB3t^qCqEi@1J5&jhQ)WX^Q7(Zv~l1fylyUhB7gV*3}} zO0CrMp8PforCk9f+17$?G)d6P8ak3KK}pU>H|jQ5XCa2Yjl@nNEBC1gGCAU;I%Ck~ z7ISk36^TuM@v(#6#eeSgcd`dG_1#x7c;}ZMBYXQQ=<$jg-LJHb3elI`aO2x~*^BP( zjr`&b@HJrHL+<*n5A(s~ft<9{9(pN#b-g&h5HOA^J?mZ<0BlQGjn)9?VAw11aB^GX zndVA0RaG*%JFhm7g!|x|^Q6SX=x~&|{+exAqV}##zL<^#4fom`M!SZdaOXC3*t~J4 zfzAhO_}BC{{id)zl~sQCyAiL12mKW~_9#mo+&Iy;{c}BQK@i5P_(Q4VNs7Db@$K#V z=H%%HA;gXe){a8#LC`p$0;dQHfQUSJm%SK_W@%@hM%uu~PsCl9-aX?qtVg3-=hnF} z`C!?50Bk<}fFZH8R3TFj=0L(_iXLI4DQ%SD^{lU6<;$U{-YNXV$9mFlYVTH9c@CSO zHha6XcxPaL-p%%%bU?Ud$}s5EM{Tsy%TqW zM<9`b+#r84^NSFu7=s zqU2)cKYB`(y50=MJsg?w^~k%yYRQY6_#JBbL;2vlkDF9q|0^7@EJo zVoAvQqO>VvYe8d))4UH*KBGAg#j+#C!oI&k&Pi`upQ?8I`Jjd-{man&*-RuNhNtO@ z6Rm92Pc250e1Qy>VQikhNM`oE11db1_QEVOwF+VcCHL{ew6(NGEHO>Y0}OM)nYp`V ze&`xRce|;$7bakjONCF$A=k2&qYF*HbW5;U@xhoMpN5vIpc(>7c?UblIi*Uv@t=+L zhrhh1dJQZIkQOwAg0V2NXN1bCMo`<0Z9P?xS}P;;gV&axhyxWXAC16^1;Q)f6n>>^ z7>4`Tw0DJ^$HT8T0F#qCo7s#4V3dCvDsbMZ6Vf2v(Ga?l>nJ^?7R;pkj#l4mcAnIz zUffujlsj|A8VY58AORi8TGEZap3m!z(3?Fab0(-do?>CX@TK$@OWzcJj(?{8Bqiv+ z3#L>dL>Kh^Swv+_YT;uw13GiSP>?4*B4k;!7_|iXb$A29@>`w<8);}J3_^tK- zw(4a1RY4dO0;xyyxgPv4s*IiaF&G#OHb&T~#P?s6O5J-5Kq|ixc492DbXG9Z53e@< z7ZcN89^*Q8?%w|+OPi^PtR-LBe)@<{LB2xY$aZk;SUgDxAFI1ugta}j*{%wp1eNwr z^gOcX_D#!$v6X!{-m6W~$^8o*4_rKMrL@t<)Z~Wk&*Lj@#~`#C9CtWetC*;GVloyw zROdEA$4;~MMnZt&pQY!#^sCIg#t1h)*fG&-VHA+k~%+A0k z`zS1+pI_1SS&7!M9Vy}ep~wvc=?{Pr>#&K=Ly+qJ->i*V91c6Dz3Zx~^E%dO zdPde73LmHAynXSjM9k{-21tyKtk&XTnezEOUAdtwbkHFM1-x~WIf=r2-VpNAWToX4 zaO@kv$ffr$T2B^*nPg>`bdt7a3(zwUm5-dYX)&%alsx(*?Jcj(RCv+VWRf-o4lM}B&6j6%gcvLM%cWMU_S%0moTVnq zlE|NTPP(wWLY@u4MpRGZ{b}2Wq4{-kIKOT;4V<$DK$W-gKpVk-D84IL_xH9^x1?b9 z5dj9%8d}ooTl2+zGt=(*-WWTDeLL$hkVOdinbp`TF{v{6QFG(fJ+NWCkL`2OM)hwY z=nj^XUy5&G_|o#G;Y6R4IOg0vYbgt$4tibqNs+CKElRG)Tbe<<5CD?@I#8JBh5%<) zvs6U>yQLb1q8(zYO2vxG2J2w z;riusOxfGR47&QSXJq>IZ&xfi<@5-lZ7*78Sy=_z*w~_fylgjep=#{0KFo+NolUP_ ziE@x8w@UW8Kn;Kj4>uY(_$--NQZNifKQjgrp4*6hPr0Ne|7g7UhZS=!tSy2%B7>`4 zQE-95Ei1}QF-<+=IxhD~+jnbZ5<=X>!a27**3ASrl!KUYSahhk{tf)R|NQIYlP8~G zmTdZw9X8*e41r$dC2SW($Lj}rPC48Ry_BA0u~j@>vIiy;obUgXKGZveY0>`_KKfCb zGQ;=#hy;NV3I3ZA{pjh<>}RV**o!awJ$qi41)e*I(y>9ifKU%m^mu9Knj$;QlJp`R z{A{LF?_KRPu{F(`+b1)p0h}FiE#cGGO;ctDzKejkt)ffMbu&@FI8$_}PJO8lH~~~w zh_PMb`C_{g`tu>LvtQdb4^F_>k(@zm|+ zL56yAiLBzVWNf;_tC9>s^J4cC@R5|3J5$$VBRGsSKg(dXd&^!VYVZ2_eOCi+987-Vns-8?(PrS#f0_inUM(<93~UTuE~oto>6r6 zuAK-kjfwOXq|7<6bajt%UVN=L2Z68>bxfoqN1x9thblA66U1hCNsxj}9%~z>y6Vh;bv8jp@-Du{` z)@v#6+te&q8?`GFmDZ*-R9M>kGq--J&8y10X)mh9^N3Nb6SlDM)_ruh@GaJcWi~`o z*KVEV-anRA-DRJN^1c_*BA@MRYknX{@!`F+|IFwmpPrp%E2t5OeJ|;p>;~J$Am6{&hixD@noz(GJoL zNBN$8HM+OgJ-6lS$)v9LkPp4A(&ZS@KfUv4m7k{$|1jb=1fCJGFW%HC6=c+WY^Dz4s1l@_hS;+pjIOMWj{%Wu;0LWr`R; zAW#cRWvcA0L}Y{|D?kYODis6-st70u5s?*^Vb35UATq)VVJ65*SP3Ho5<-4Awtd=a zeSZJE&wISjdwl=$z}(}yuj?G2^Zb0S`wn(I0LysLD?}23ABAfZbzM$-HzhY@oJ_d) z{LCXnlR)Xdr5U|E#)3VW2)|6LdTf$FeQQgrs&n$DY9Dr`Hhix+01q(X>EEeo?Gt|q zH|f+c_{>fJ{dgn#)TW}cJ_j-OhMsgAtf_F32kT&#ToeyK5CFM^HjgzJzTP=ma=+-L z>A`*8ptsUU$l1KvHv>l&z8k%INjtCe66Hh|=->PHC5Z1$31su^j5^m4^miGLWt!m< zONPO6Ih{jP@U)=kf_}vOdgqb+G0PK?q}X%lQOwpr}e&Y?z)ewX@1)S9$Xa7UcGBsRuNweM+70C}8N3bkD2%Xq7V320}NavjijdHLvgDzaxU z^7Dv}hu->MTnb_A-Ta%ai>C{`x<(axbXEV0KW*suL!3P%zKQ{|#%3#w*7PGvb{4 zcJk&ilJQB4(5e?VEVM=sScrtaXB zWh)o2$S=|kFIqB7Z!o(LIx1Bb4o{-H%zF=rf#@m_Rd=lI48$yhjoW0cGI`)fxZYR#w~0c` zpDAp3i0TkK#rV=BLIJq-gO6_guxVj?e|i6aumojbQO`QR#~f1hrbS2sts+U243 zHVOR#nNkkK4MTFu&U1Z&_A?A*s4%s@b`k$@>frSG-SIp`0%73vhhCXht}eazdeUpF z!*t8oeJ`8jGOyS`Q;xfBn+!*>&R;TTXf`EOndyX+La&u z53bSbfsCfDU0e;Zs^cp3e1FM_bbL4=IkI_j<=6n@8peP@OpPQBp~qid=f)~%Wtug1eSM$TuV^a^qDty`kos8#G# z`IJ^mu*Ujo+NX17aehtYWKp`bkC$m<252>M0^vgtb(E|1T|L`E@dbFG&kuOt-36e3 z_X;6XXj70B=X=!Rd_}&pk|a&n<4g2`2w#6mNnyZ(zK}fnJNo;}z<(OF6=}I#-_ob9 z865cTNA@+F)w&iR?@HOo!=Fse7i?R&YXbT1&RzR)cNA(9rmEEk5Zk8#yLfTrUw@+G z-v_61CgH_S)w`8#?z-4Me`5XZ@o#(sbFO|GOUdu20YU zE2;U;4PNjd2fYLT^te9Mmf!$g zlT<@;G-}v|*q9?Cq%7pCR=W~&nNf$9w(csW zRC&TujZLTfMZN)*A1IOQVz8CJ! z3tDfJ_rcsPaP1msak0*ko5qX~3tNIt^(|ZTN*^WeE1AjLVKS!WQ~8;CyiexYoaBCV$D&j>vm?%ll@LPU-~D#1xO>J+`dzg0}@T zK2M^cce0%*WOHRn>P|JdRF2>3Le<-z<6n-Ta%m2n4iN8W^PNfZVkaLPL6zKHxgz_O zI&@ueYG_4$8lFOw-i>{BK??ZLDp3Q_u#&r;VnjQSdp-i5MA#VVAi(-#VlsFg2M-_5sG1U2{NeFU$^g|Gy5_+ zl$9k}rDqtt)y*Y#nMHx{K#D z0r|2DwyV3jUjF@j|3Wy z3x+S;sYw$?*hp|l&DOdD8nr!B)gYt$6kWAs>lC09#w2=onIHLIOYK;N~^|6oZ ze49ZFNC}3t|8iTeR@D=GHpnqxKGOPNP^z4;i1qjp5Fr%fO?K5mjPp(M%a z-B;vB84NE!`s}T=)dtMGqTUAGQCj*2dKgu9Q53IJWa?6be&u& zjRZif4 zmRuxB*0AZxqxzFoB~#V6$0tsFx<&*N(f&HH_E->WDA#SzgrQT5&lfe!KEtg@!Cesh ziEPAN9WFyK&G~($8+5re;Q&y`muSg}3;qt0Ujy^_sVu1?9i#h3#D^I0+HW@t3)Eoy z|GRq}l**NSl65xJg#={&uIL6JPn!8pP6euu?Z?G``ia`Zg-A(kU=D_9Z*7YeMrT!Vn z?0NU;$rb(uXl#87fBg^K@R*-g=0IotUHOdg6y-*b=MJ$*pn|r~ZR&_lIa#}X*~Cew zc(Ft^IPp3~?-Y=6fl`!KU~jwMhtpqy(ao~o;9YN5F1YD#P~|kp)_s(DiQQ5wU*m0Y z{spTNgK&KZvyHE-0J~}+yx##BjYQuHB zaWFEUL)U#$e1QzJGNq~dmfkJky!lxA@e1+{>4 zO57aGUKwLr*yuQ^sBoK@@mnXLuGwKcu#88m{f=J33r2mr>zWVz?tb<*`a{>e@-{D@ zqh;AN7iQ&6uJ*1?GYcuWVH2e#IIOkqa4KVtL3r{AbXTD4A~R7SI5$8%FNScqY=ES8;7-lz z)xbK+l53fOcvc=zT4IWqhKDA$(KcMf+KJQ9G{T^sD&GE>AaNVN}4V zuE*JCR&+0GeD?s}S#LMW=S~0}3Gt6Q63= zy!O15tc&tkIp+v!MrL0p=aB@y%yT*;E$d02Ww`xh!es&u&hM)U=bubamb#`Ds#uyX z3)AsBt6j3zSvjDeiLuiflGZM2YDgby3at^+pQ_G2n#8<+oq#%#x48YQ7P|@*TNu!} zbcX31B|qa1#+@p5Dq^(VIL}hjHMHNNpFgzKY;hUvtQY`Gp2SQNo|bmL5*mJ=#4ql) ze?RWC8V+_vBcSe98xtFtyX{pqxN}trF$D0H>$dC@0}3KYpzTgu8k+KccP#0I=IQFI zRLQ-P4bH_^+=}gd4AZR+=oRCBHGC*wm`BoJ2q(HuS_S)gWP&)#GKBh&$JrKR4YH*< zTkme#BV!A^QlIQ-CGSl8c{r065gvFps!H~jNDQ&J;TSc+>5B{lFXJsvarELV(x`m8hbQ0F8Tdp!M z;{WWJverA-Iu*=lD#LM%a-BajDw6`bIO`vGadH-3y>q_t+ydN?L6_dIJy_H}c{4cr zkZY+XBeU`8*rc$0z|(~s2X#h|7bDb>P|}IWH_#gL0CP%Z8=>Kz90BRd9y{-9gPQ>muxIdz%cH8IgjvBf4_H(*RgllE~bKpJE_#4$=e88ySb;%>u*`5zz7c9 zw0cb!z8W>S*U-7~664KqOx0MQMrQrfR9>)F{cuifRE{6e*^1K{Z8@b`o^#F#I(lcR zgo#WW++u%I>SHKgZ6XqET85Y)Kcv25wSO7%e4TPQF$cev{ zr&kj5;)U4*dnUcYux8+fB1>$MnGdon=GUa>)INCR35QTJtlFEJkt}0PiB~-zVkkO# zIrlB3r^{Sz`);Z*GHUQ(O@~z-_}N=qSOHtF_qkai=W#wzMbTiwIMPI1V`#`Vk4yxv z-rlN0?OBh*QH-wtHJ{e?(Q8%95%%WR1~ii4YGaUicTzmBDfFNPo!~i`lx5S#YU}up zK!UbhCjQxdndZ^&6&+h9V@2P0(4at3Ci7uY_J41Yl;tc}h9{mWSg*@x@<2KzJq;2= zqb}+CZEKS)(Ny`OwT&373SJmwEef>AHHVbFtv6%h4?2sOQMcB9y_jj`bKV#2Ti-Zu z(J|GKl$DuFfM0c>aaTYj2mDYWtb8@x{~SK)R$b)c>|-zuM}PhK=cIi z5Gf8r1*siPAnSA2k!bukFTO@24QCN1~&Qnyqe zaB&Sc-G8WY*-)!g2oDi! zl{lU|I7_KnJ$f_rXOT>+6_z}h<*zL1&RA9~S}Q$n zMMM)ey{)5S4sq&p+@U}jJi7nM>2*(t-TuqLgLcB}ETLgw4Bc*E+DP78k25IF8@a5a z0n)HTcvW*kJG)f8=%8nhPhulH7OZaI*P`NQu;aVa zbXR_H%g_zZSXKZkpfRW5#cuvlF@18!=a7sHQ<#^xEsvsA3GV{lB0zt5VGHi&036AW z9}u;|=#h$AIz1EEXe(YKMfB|H?uDzS{Tnmivzu7hNAlBBb4!U?O>V~#1Z$i8_5*bg ztrSc5XBT}M3(LR&O=WkJs(t$OGdL+sj?cdX6yZU=ez>hX5|ZtNTGlxdzhoU z512Nr<{7Vx>ndG<$Jo@D*`;Ww69U=d3KX)we_&;@%j~K1fO`d9QEE7ffpqx4k%l0Q z+30ktEuHA%bCw7eWl#! zz3{5$d(1i0XZ}3L|x!k@b>1~wuFR)eaNJw zhVQK4>pLKKD%a<&7o$YWYWZw&q}k`(k*oR<5woaJH!3V43nVVJz}0+8>39P)Kzw5h zuu0FH`YXyz7A;%ubL!BANgb78BKh9%^LSbS*&P&%d6uYl9kP!)YP)KjqJ0$O!ZA)! zOCubLSUyS)YocvC!CdX*cjt?^{2;I^|DM0i&USP zHfV=Bh(ZA`_qCs_i`JlLpkUA6H@)r^u$p3D!CrjB8;?7-6(i(08xQ2SF-&UAU zoQ$>kD%~~EQ&=Vm7I;3he&m@?|Cw)lWkrzrd3i&_!+9)LNYf5yDSReDgO()_o_lBg z8#A8$8afrN6`;m1@JsJ74znx8=`FEC+8<<3R9tTod#_J^( zFlzMB;C%k=QnXbt!WT84rs&gOQMa46#@e}Cy2pVK8sv-ejq@Cw zZVuKHw{ZaZXy*Vk7$d=nb^=Q8|4)#$C+!9SCPurzI6ZT})pEg=ABKyQ^%u6fJ|ZNQ z9T^3uWyOce_0pS5-ez82@u3qetEY_AE>@jK6OyqN5@?0mCNGQsERd-Y#DayjKMwbMxum2d-!wbZWr@o1_zh~Phsa}!qlr` zpY0%kB@z?7YnLmRPZ3OCxE9=AR9OR?CQ)>6caOL+8Rp&O;cmBMA%=tpj;DWml3|U% z^$5dmv#diU0Oget64JSK%az8ecPYNo6MN^D_bMf?YF~KTTQB+1BHYmS%Jpb1tEM75 zh?;1Zo*6P*$_|E{&)aoLKB;v~%^CG)G_$dA!C?oFw<}?@o*YD0BH^l`IVBn^Ce!^@n8zb{VQV^F5o3AvGQ2WyJ(?A;L~RG1+Ymf=oR}Lz0a;f<^Q?o z=;o=V*|eS|Pf&(D2~;lGfd-Fl4^_lTH9lP%MTnP}{#M4w3{P)ss@*&n%W3_lcR6F{ zIx-sfM=_)?q)!4;&Jwh4-1ia`mR}zwYpze~*zWJ_N9dDAA12ZwfiHo*wzMEV9jm`l z#Z;7fC-JJhqx=Nwx_6XWVoB@w4R2uR5BS=HX9qU#A8cd^8J@Bc)L)v~ayY~hgFFk9 zevd%i00b)bAp%W%paIFa;_j4!aZnN0GXnok;gYsKpOi5D(r}&T)z{f(u_+KW7!_>9 z=te_BA;3dmg)n4ktC_m#Jwy|X0~6puAmY(WRetjf})!24- zwSQTc{BD=b2nW!=k{=RX#uqc*7d}9rmtbC$LDMUKleJH{)N?hBKy?s~Tc!_94IK8+ zD$EHE#+X*h-+W<}z%8ouG&YGmCxh9fRt=Q=Jceu5 z$y>D!T@jjVPR#>1`K`Y1n4MSvJfZj_PsoL7Wulr#(pj_XM_}qDjOkyMHOs3Yc|XsL zB`OLhhL%pDEEKuwW?bwWGGBV+0n3y`-oYS6}{RyB&OdnFzFwz0$a%rauRbbSo}0kbSYIPVcSuz~1lt(HW%mYEn;#P#%SXoR{hgfuu@h^utH?HJc^11=U7rds6IT*H9e8HV! zuH?8i<6h-yY#=H+e(<7W-=@6Uo0MDvvC`CBCmEqDhAzvzS*56}I(RWy#(RKdYnd{h zgVDQu{VC^LpuxY@l^kQ$L|I*L*~qb-s}eC`N?G^N3XV32IhV;QJmGLZw??ewhX<6g z6DMHh6=q75H1wX^a6ZJq66=HDQs`TKloOUTsc?c9RZ z2QZ^c&E105LxJR|`qQcnJ4tiBK0On) zc}d9|csoAfVLMK-KWb~xn-*qV$R`Ju^)NkqO1V*XiMuMJPY4Oi7rGgh11%H5$|X3~ zBcRy~7VYNT2q)AQ86{BiQ@)OFZE;HwpH~r@>GjFgYsl_GNm=uo)BLF!J6F_%24B~e z=@DNNGSYV}S_nTi?YHH_M9374h(eRQ-u>yPH!(R`%KoK#V8c2q$tfz9&7=c{g<;7JJ=opKG$bvWEHvoJXQ$$XNcQY*k% z>kUF>>jQEOqS_}`$Q(wrGFxQv?MPa>Fye=x{i6p&z{>)GKvaIr1wSwEyf5-6m2dAZ>CkT9FZ&~HXzoH?r2rXY z;pQLYH+G$hpoHwa8BrkWsw^N@<^ikf9J*V2FP8|f)nTW!U+4gDnfm7(lj10=vU`+- zMVtp$!<*GnMoS#R{#@Ul=0h!9EfJAK`4r{3oX5Kol*_5Wtk``tD{qGxL1l{o{T`s` zFfgc1NeQPS0BP>TipYc`<;b%9JZ{^h^WDV~%H9nYaZm!Mo_8N>9t^38E_Ej47R{t@ zmOr#u*5+_39zKA2mMk@OBXfuP3fgh@p|@$*!DqFu)Hm-jeh)DIS$8l1&a?`jC%yDp zbUj7&u|nBzeeOTg3-m8cC`tdK`2mP+?RMTU>>JzZY`>8Cya%!tobV4gTG(qy0rxQrM9_yUD0=nEANV=RRft9fTm|rAV&!iW$1xSKF zlR38lVC%UHAE~441{a=>v2@Dh(4%>AB>>A{2v8QcW9idv`IgQ3MxqV@X>{#kT<0;g zr1i-d9NZT+-~NJAy0-{5HMT8bG6^YJ4X=Y}m$b}2)!mtSp)6O1;g3D{O__Q(VNt(3 zd<&<#(*?$zQ`o%Wh+MM(U-#yL*CVw8F@^zUT?Ns4T+A=}>xlPgrW!yq+8?4B zq4&MCPjPwwZ?j!z{&T}mlED947|Z{x;s1Wt`4el%sXJKp*=ObtFB+V)e7^;y@67)I z<^749|L2CQKMnpT2>d5i{iF2ve~}+X_<3=JQo_H?F8>E|9bnuQls<#8|BKfCuvrXo zGc1KIzC1Dsh+y8)`In+lJ2rocn^%9r|NB!VpGwR3>>CVsiS3H!hyqc^w0C8@8!SE% z!nlvlvNE=0!{hhDZJg@xU+aoXf*^Z7RiZ+^$cH(rcOzemP6(*0fBLF^5nHkm@q2F) z%QdIrP+&jTZ}6+?Az`!5+R87?n#?yhhi#MsVmWhQcMRC}nm!}>aKlrM^nOBC29AGw zSF59OvV3mAaR!fZb&27))0)2l?x=nSP{Hu_TglWG2fcH%&xL!3GQ2%bNW|?aB^pkM_8(T++h6?J^PS3}|jQx^OL-TIA<(6j!gaX|Rar zHa=LNvBqYHnLxIau;d|#cBhwom^HH@0K%twTK(`%w1Eg!8dw5tyAn$A1^k&J*2|O3 zdnPcQ(UR9RO4Z4By&unJyQ@6Lc4^t$x<)xjtg1WO1>%ICb*NW`d?h zNhxofrd@v`xgpZ+yh)~PMC;P+tOOGm>!Z&3)f*R?KVU5FP602cgxfxKmldJbT>?bF z^402vF~vT875AqQi+Qz+NlZ+0(K*pOh8(dsfSMp2<|x;(89DwX#Lsan2QVxjLH@Ge znJY*~@;&79&itLcH*b3&_Zr~Ahv}+IQ0?^0g(FB4`C-~Pk zp91`hRSXVzVOFk|mR8W>P$4%O2ZchtV6ef>&CPQB$?8jHb_uvD;CrRq4G*9@j;X9G zb+C~7+9O`L|C0aP^jCiV?#c>SXoeS_%*VE`dbwGIE`WCh z?#s*G>|>))X6Q_*%ORnTft}L;!CH-7>#Hafjl9syKRTQg`3Pm)I<+FcnB+1~Zs-Ag zyBDKRW|L7aY06G-MIzDw{cq@uFz=lR$~J_TBKB56ZK!ZDP9Cg`qg>JoC1bY+o6EoE zxayy=T$Y?z5W-B_=f0LR-ud!uEveK8bGEhYZ2j(I9QsalNm`6L+P^1!p9xzYtH9=I zHvj5&Cks*nsA@8-;k=Cvy7;Dvi4vqSzwAIbsn&NkQU-^z<)Rb_t2kWbjEw}>Pi1MT z|EM8nN2PA*j8orohRR}l7X0CYiY`OgS5i_0l3_pRK5G(gKO=jQ`NZSOoCRJ!;Fk&q zEnr{c6F^ceD=QmL$%L=-n}ev@0C{V0^uAuz#%P6m@O<}UL7BDqfG)3X*BCE2utBHA z58@N+v7vT{t}US9eK$G|8P(Ot#{P&;lsWZ-{IIrSUquc9(Rtxdcu8h7Bpfp8|l zhVCr3HzrC?JW^MmO#gNJc%3OY|L|95q3;*N5%^l$t_2l|#Ky7q2{D#EQnI4hJmJXw zOCzi6T`%7CSL6fc8-JVq8L8PcrQ~Ab52w!oqntwX3FX&T04r$T_Ty|veV#jmU+_9L z;^YPh{?*lG!qu6->dCra0Enq$rODgi7v}(sbv_2C0qm}iJs=lEo2c8?irfy36c!d< z*ud-Az+g*AqR398<`>GRoHnEpwD4<6`gvk+& zHi)CVkU2U&-%>2 zfnd|`=byrl$p<=>>b&o%+jdsVOPBQMPOf*dq(wpBO;%l@kE~KhFJrSRBp@<_2ez8R z7Q$0Y6Z$IhT>+jF6@x)FKA&@cX2j?#fA5>#CHCsePB*Cz*GobG)?<7m6c{uXeV>v? zNapHpci!P`b(W|SWEKdUUhYdTqxAtB5dkxV8$Np|^TEC*KSv9}eM*wUr9?oB?&GZk z>~{aeHe^z5xhyeF7)FHsZi%17B7WW)IeHH2FN7OzkH2m=_$0!iBq*UO>AMEsvXX8? ztJZuA2SilAV~me*^G3Ty;Ic+nObyJj#b;M-_5Q$zfQYp7`Zx3gKYsmzNV_7Ya8FFC zusxK(^nh)g~l2av<{_j*vrHHu#zY$0 z^m+7o9r@c8l3XGAS57+B2VDfAwpHWXIQvSU;-3!w)D|xA;^wX*ViFjr0cUfgOQIHB zd`>K$ndx*c=Uma9D3`xq=T%nJxdG-9k-3nMF1IbFuYRMYB(*KZ+ItncD`98=at`&J z08VkZ-S%A3xe8Va4gZC!?k`9`-yT43| zo@qGvH^VW!hHoi^3JDr3iY+zN-F8lsUq1Y@{lfct&#qXw9%$g<{%nXJWOetYwT)@U zXRAyl>}t9|9J6gRL+714k!vamoVn&R)H|;~uR?P(l}(jEKSKN`LtQ!|1MS7-;vK8^ zEe&*(6)nu|3pQ7bSdM>Qj~aZQX2$m&4YpH^Y3mbT{Zp@-^MV3I_E;Ea$|Kp?V>35h z0#)duew;BTNg2|skNArD60BPg=ohpYb!%-dt)x`~q?ylhX(}E>)xx<^l%x~=;nqBj zR2OvH*qgtMHLj!v(}b26Qx?bV=NuMKsb=wpeMHE;0$P`UH+t(zdE}XEH?aQro;}Not8~M0A4uMCz1_pUw8El!lJDs(?8nQb4RC$L6ZhFYI z-DtVMd-hJ;D}1JAQ6Z#q%^jk}@}liTqPg|XKK&U{LM|flZnYmS{Prb%@`MC`#;)m! z<};C~9Hb$aNn0Z_0s?=EwMnEh+F%kQr5d^gBBan`s38Br<}(XbHC(XFUL>l@g&UO< z%|DjSA|I!eA>awH7Zjzc<_8TW^JyD~2jwg_(sGqEhhc)w!wPj>=@QO;Dk8Ytq*5i& zFJBrSM}_LZn=C+!6a8s~ot>*K$QQOUf2^sDCsh(qTeW9j05|h5)A*<&{W6*1aiJ*E zY}KF_k{R5T!JV(BJI1GzLQ&T|8dmFyWEQjwvP#9kXuCs<`J^$()2J5Stg<#rOBID~ z3D#Tczn_*7G;7q-7kZ5;msI45Dsf&6XXMo_}Hoi zFAy3Pxwe5`%;!%O46`YM6=~rv7K2#we9~r*3p+lti5H$cre`J}#;eg9nka~JC)to+ zAvR037@6Bmq)_I+NwxvkeNQza7y2CPHLU=conpzBG}YQ{k?Zo4J0#Pb+^4e0w`=}N zx5j`D>UKqn?~dTlodQX(vTUR{xb?u5GJbBPU9*c`0^czfx?wn#DAHI&+!wT%(+~x` zcYz#sUWGq@Ac6ez;$-#lWBbsH>cSFpmC%yOj)h3>{i!F@;}b9!T~wIoLXWtNC~ z4oATq1rH=>h0Uc~KOrolWdHyVIlw(CwG z`n5BVmi@yiZB?3#CiodT@S=lN3ctAtk%X<#6+x1l*?PPg>XRG`>B1C@fmbEr0_I9# zzt~Thkt-PK%PXcssgqqt3h#MbJSuhY!HF+okDvTys>|`wHL)2t{HE3;RcI78VQs2q z5AO8=$>m$0yS#XOb+EpA&}{a*-0)uDrOF*M;4Tg4C*3+*5zh_d+N!hhwjn-iW(P2=ZNPkIjQ|8iK?$iB3LaJ|d(COJ zFs4AqpEZ;pt!`XGB29a-j602tywRjo{UaL*%E);3O4GnfrV6()M;mIz=8V82 z6hj!pIAT&pL>UVB_MbL?Lo^i!YLsk17aHK(#&wgLWmFXD_kznzd6DfuNEo}kF&(_r zYv{rmzQI`iF{nxwE^fxt?rXk4SOw{h%J@_zsg#t)DM6u3gytU2g`68m=@3UHxjUyb z5t7N*6p=?%Ao?=l(Ev&cJHv`-H72_z(&OD5(%J`D)wcD|m8_d|tX*oeBqsM4Wi8+9 zO|14B`Ck-f?yP@b8by7+}{WtF&vIiW#>*s?#`MbiP9E?6*fm{xYg< z0F-vyD;|c<&mU~+9U4(P)$A$p_OUZZW}Dbrb@uuitXm5Gtp6F|+2~`byT8U{{c*Mg zLIwm%Vv`Vl!vUR#)N1mmmDJ$8_N-f5yA#bAsJWzgKdwkHe!N{`_u2{S$`L~Q4BqJD z|F}j^xU$&AHql?&N}vgh6c;D-X@<-BS$=Q66&eiFmg3*W34xR1ja^dn_`; zJhd78)boUU_=3Z>&q;INgvTm@*`#HYzdc(51Yz3!XzR4INYwHf;W-l(Wc>K`Zrz`O z2Mvz9;U4h)PrsW5@N6E-qcGR@ZuDCCptqcqUbR>~IIw5}(M%HQL(gf&DDvy6x zpId#N7?+*F-nh3Vnj}~EYuaC|&X=AR8LoGe z<({G177u9#1*YQKq#~+p*Y}w!hmmy;71eX6@3d;rDTgLS^t;u)q|kcS7j?Fr5XjER ztW|3j{j9(L;>C@&!+HnwRebN!XkI}<;x-3CB`SU$W~Q%kY22J57M4acQnVkCkmdNIyGz6uEZKy)@0r7cU>6Yvemib2;MdThlkwLa5Pcf zFWUe&z{icT!!b3H=htwB@rU+FOT~G?{ep-xFqmgTEQz)}WT5#<=feCU9c#q1 z`WzK4j)=LE4^Y8kY&d4GX(h=1rZBI5hh{H$uw^{j0^z;6Me0P`MbKh%06Qjxayo>K zX9~{-`5Ol5aBPD_%`q7|z9y;vV4*Naj+hN+ALGJ!Jx?{@8EYh+P*tX_wlxxaK=nmH zFax9m$|(~$Z^KUPa^csvr{H2(e(^M`)f*Rd^VGXOAiH5{S9#O%99KAU z?rm9^v}AnM3jbhI$@W(^vXW}%?Mv5w%>V)sOc{wt9m-Oy4tf2ogMSjowmlZ^obK2y z6H%q7#mUPG5<@#6rt5r6S2|ZoV+SUt)lWO66!_{&$y%7(men&#AY0NNq3aHcehuMX z=Aj*uskr>!j!P&oMnB&jg?0^V%+(N6vX_dFD`Vo09bXH5AQZOnKJx+LDhEr+D~lC1 zCX2?;+&?Cb4eErhH5rN-8uDjFYnjB_`kJ;r2F&pQmfl9_XKwc&f}E96DaIIdq-P(} zI?dD~TBYGAP!D}DMgVNycJRG0R%F}v8s#5K*Jgj_#V6`PZW+tZY$cQ`A3 z+Rwt;W+*GD8RE=!lJDnDi|)+lsD9m^?D)p`zhZs@L<4DBykdYT3|JIi z4*!}qiI`ra2Opt4jq z5REbdbwIM(dSgt+Dv(H9>v-+j2G;e;P?0J4z6*E@UQaVIVS=<}1YD}q2kxiSgz{R5 z2sICav)Y9G)Db`VbZ>*q1OAq!Cm3LCk>XzfM-AJ6S(u<2dR-@LsSsIKNGz71)cesR z7QZnjv+=K4Oac`bI!-xYnA2<@oAs`cjDKVRB#A%ZMwWcmL)zWa;bGe`(*AgRn~ooO z$PhW#>jipRSp^0TD>KIE#U$}Kxuz<)r}~lzs3**@5^_1gs_cxS56t{gO-a$~XQ^Yv z%1W~x(>EOQ&yByMjbTvM+H?3K+qMQZO!xW6VBRn`Q1eJO2D-AFC_+uWFB4^Np5EDiNV6)tGidf6N5E$%(QR+mrg?slPVfz1 z{GITBKrzc;)!)KYq_oF-^dc6gU$HrUrOoFwkk13-E=Z!M#Qp|f(wXniVF9)t2?5Tj z^Ij0@cKKTpf1iKrfZqT>`orH&eh*3l`hgrbI>4T4mPw?T;SS-mLR&tCI3`J>kLn=4 z^u5h8zr%rJ11%`XLHhRinx-o-Z5C(jE5~X#gZ~Z;>TG{VkV4o=cTlzU^cr*!&IiB_wZqon0a%6)`c>*yF}pI0rB$RA%S37J7;m)cA{U# z2LRxe<%+|?%@Tf3GMoNgKfgVjGV&tKVOei*7rKx%H-mz#xlp2@1xQ;@tU(=qfmm(h zjx1F@+&=IDbV0E7WG>f zzUFAO12D7ne3F?n*pZth+0m}dw{tgy5__xqn;O-$(g2)82XIc(_W1n~{vw8oK^7yz z5Q@Hbz{_G?68H3!s_&#VVXwKZP71^LDCIRAo|tgqI;VInVJ;94l=NfkSaeD_Do-^Zs0XzH zuhpnzD3vlMYwIEPE?YNOP|Z?BHl+#T`C?5_x^Fxw#k`}}!f^WKY8-W9^X22a*F1H=InX`*TTzBN zu+{dm3+gv?6M&NZuMxQnw&38npxr0wv&8Cn6FUZlSrc)z?pdgu+3S~Y3H_+mh(Sd9iRRtFHM%|WL(%Rp{Jiv(+oh#>?X+^=wyrLX5^Z7W^4;H zg(@%BX^O*-V6nF2JLYR6ZHveB?sk0HyG^d@xF8~I2&VuGo!V<*OkP36O`fwey(#Vq0|+NSd7@~M@vW)j*;`5iCDt|&~u6RIDx-+o(M#w zBfAlh=*VGJN9aY4kiLr-N9y7Dtt=|iEkKpq{su#xSPkICkvWtsP=Yv`b}v}4!*#hS z4H^tbD3W)Kq#lKfkc*U&`0W$wrH*2f?v9UlL7H{*w_LosB9iZ;7~->hZ?3@w%|ph` ztr@4-HqORiYd6O-7&|TP-FH6hQi!JE6vR4YjkR1C9&}72k`xmYcRCgP4Leu{RS1W@ zrYa$FepVA7fVBG1J4=6JG&GKZor!@GERfihmFQf0p=;q7NP0=6BfC%!|HL(HqT1u8 z&M*lyUdr5Q0RbS6Pbnx(q{NM15H}{LwgIs(bbFdzz^h;ocaT;Z?PIrm)`EP7SKG7zU#$HN>vfp%G(&J&-*zdiU?Vm=s^pq% zTsXeeLP!1pJn&d*vle1Oo7EeLjc`LPhtoR%R0gSs*N+irr9TK^E;kp(y-$WO4h*md z2#spHIMO^TcCvx}dJvN0p-?)4WE<>_aC{H-xXQe(0ph*3L4`O6MPg*g3f$8{Ei89+ z8La`f;ZPdd{}sYP=K#eQ^E~RN!qQ^mq0;6WKP;of#JOpFb0e;-gw?wV_vaat75EKm z&56Hd?T}NHw*z_^uK? z+{Gn1@WU2P&hAJ(%YqP;E?xQxx3;*yAdCRdXj>D|k;0TsQbmuHTw&?NU)c za;+LKm-v6$yYi@}&vbp~b{y{vDist|BsgHmMG+m^w+^**KAX7y;yBqcwSsZ>E;4l#EO{wGN zCC*X8>DqGSo@+*hpPi6cp>D6tv)mM>qefwsGIIWS1!QFFRrzk{Okr3P3Nx-BafwvSmR(h{o@VYUu!YZQNXvZ6*Bf zSDaPm=CAP!zQIp~VOsjH6!W>Ka98*7?-)t}*Lt(mV?AXatvAb<6vqItmfWyqlAvAmW!6h$mu$a6OPdHSq|=ekqJ zM@XIm3xAa^s1z_K^I)m5GZ^T@WkG`{zEUn)#M7#&TrGkhz<;*=O{i{erg)CX$_Q0w zt8)6pEyO^KDEn?t{Y{%r7kCL4ynQcODZN(hKy_@A3Its?k&Zb%^^#UyJ5zGz1tNn7 z4mKLF1+ZnfxJcXU4e*lQ$cUYd4Xnnd^`@jOS=dShgH|~ePwQHfSyE44AMD%EtLd5Q zp*PMb_FpsZe;9gi`tCI$@6z{g3I7F5xm}Fd%Z7ce7oMc!wU>MR8KVWTTi&{hYR(X0 zklN7~8jxuGWe%nE$)|Fc({Ft6W+8cNa*-*Z8uvvup^!2SaXqOyU=H|@EI1oMRvk(bev@Uvcb zIsYxIg_6clR}}if?7}XNC66jAA4XvT0U@MzcvNSN+e!s{^vQvT4o$91sR8!|>b;!N z=(zMMmrWRP+v!qi`bjz^j(BTbC8@QYBVfc6^N~CKk`O_{`+b`T2*mNR2jWaNuUA?_ z#$i6qdKG8RN(?XRoX@IF>H7K~wgVR`3t}6%zldR(O`AS>t);#!P0)=#rw6R9g1E&y z0Mg;gt_{6))9$cWm5rBO;(yd0seNzzN(JQF$9)*y9yE;VNqD7mi=l*pWie4dbp+MJr7R>3x1_0%vA$j>3z76`sRJM zjG-Vq_Syx;poqsAjDSGi&7MXQtS$eNWwg#(%%LtuVGIM#G}5Ak5eBP#Z(%xc~SS_JJJhJ48hEU0vKD8H@c5CHe&R{kU4M3Q%kcMQMN4?Fpd%PQ)JQG z8a-E_LiZNy4q}xRWS=E87DAQSOfO*~HuZ)VUoWvisT=p9bu)%(!Tsx}V}uEkpRZgr zSJ<8rRaVACB@(c^8!}xp2;CQ%_FN%V?&w-lHbd_mkP7M#;&*pjbH@&cIzamz;kn)9 zL05(_Mw_t$2~+7;T=@1arFj}a*Bll+^cHX2KJciSxZY(cq@b0L=H~=#R5A8|cO1V_B7Yhg|Ni z1oH6Xa-=R=8GBoP{akil$Xm9_GVXY2$!_s+>0MB=ziEsC*m98+fjUCZ#rh$`>)XbuvU2>)eeWrNM?zk)+lbK0IhjFM!zCS*R1<7c#bl8e6? zgPRUFGFV=^{YaQzzwDv7H77b!*&OZ8nsIKT-0)18uVuc>ipxPlE@({o*WF2({vnNC zHfIQa4kSmZfJyqO4UHLV!0dYpC}M}T0w!jrogljN<0#6stx?tWB|!JIPE@2c=Gj~F zIc>O9cIpMIs~EprZYTSVq3eJ$bg$2xf=pY)>zev1cEFc$oQ#R7mL0$Eri=%|NT@`#bRZ_=Xv_ThC;b9R!75%ou*vhs>7gcGi-`nTkmzt}idx(ieR z*x3HZH*O*D>u0LtXkDd@>V5UF`mQ)yhf4;p3Ofc*K}o90&a8_}Nt3I?8c5Ii*m>jO zt932|h>IV-_8+wa**!rwM)dPU&D*5gxv(tV=;PckIh`jtaTX=j!gkuT7Q7jCMbs)6 zjCj2HcVW8EZT`CiC`i<;Z|=Kqho0cTKN@BmU~^|tv;(w)0hgwjtPHCKCbC6wGPhO{M3~KDbm+) z_pQj;xgC2|^8LCjUM|!vi+Is71Gs^;3+XYBoAKS|szif5nu@y>pYfj8d90};;q%aO zt-VBar=EwoD>Up$o3bMCnuHVCcQI`v+m!h~^ZA@Xl{;Q`@o1CjF`5&J#-(pBxd^=j zrOMJDs3B+J>}d&Je-V;3b5*XHzR5p;>_~9-r(I}{5jUs@9GTswJ`I%!q0UHo7?J(r zqM6L}6_IG-pt02iJ9c%*bHp1V`4k@;ddvUT`Y8>XVcuf8a!OwClqed`I$W)SDT*xq z1fiQV7t>uI7wMAzw`mCD>0<~yXTU8ZiL_)dre6vJw_tg!|IkGkI-gD`W@obMjAtl3#9lt8F( zS&E-eHu-%le>Kfr3O>F-Piz(r0jES>M5W|xO>+VLi7Q7`-lfo7?YVXEn|^$eVxuiW zA|HaIF!#?h=ucI0nBEj7HIP1-3j4*Tp=}%Kr&D5i%Si(7J06oes)ybiooTC62U*|y z!@}dMQiF%f&P27IZwvFptbf(QEle)KbQP$G>98AyAq}^l{;+z> z2g?^mL2NNb`9NSQ=3C{C3eDl>9M)oF8YM7I?P{I+o3$$uF2|;J?1rTHbv63f5nZkC zHF;eO;81QLS?i~yj#o_9kF04bw3h1F5(EMbM|fOQHKuVD(gY{^u&Z^%OtF{ZN}(;h z#+60nmzGZ5>*=jyk|E}_XYz3INg8FN-EnFQEA`JQTlwk6G(R7N@~MV<=TWD2GrNFx z@BCsX&rLlxRuN-YsD)nol&mW7d8(-g1M`ojn)XlNN1VWv4W<>7o^2+Q=naVzU0{wD z#|l}9!DMmvK4{TKgH00~+@k8TGsQ-h2d~K*8OA0JOVOzxu=*MvR(hPrf8cz4D7oVH zcso;Lg=H6Oz0JSW{)*bCw8z_@s`4iHz@OWUMQTPq>CQ{ zvxaid?{;}?qDVF}zi<7VpF&EG-IXRTJR{Dty%03Gs}FLdZo%a6z{U)kRyMj?nI9(4 z{ZdWY$bxG=6FcFPdfI)R5H5R()Fx))H*V4FpV0O7UE-D?(4nj9m87RRq2pEqQA2&P zV{jxA;@}f|NhRkFT`a%f&NM-9SV7LNdCv(y+;SV{UGJ3JPawEO$hz$FK!wzIwX6FJ zb;|>Cy5r8=6eMifo*Uo|EnJ!IP4kCH`JHW}a(d71u`KVwN50Du*hh_$U42kmgX!v; z+HLOH$TT*rOh(0p>3+N_`GIWuY*8)peJi5%_ND^{1?;BjZrud&BHDYmTjo?fAGQAA zRY^q#dVVcpKUktmMfXXtH@+J1JD$3(g~@LTk0B#UK27D}Q?$jOEQr;Gd*#;U5{@n5SFLvclXI!w(PKd@LIUBQL;7QNub0M_}gxTh1ix_e_$f?(2eZNr?YwtuXBah@;^z+RaPADWrsS>Wx1(zL>o1*TIZain5#37i6PLwwe zR*1@lGupf}Q&ovb8!Tn#gighvPg|}4=7X=k;HNJm@KZ(~%Cjfxta6{9(Xhm`K6TvP z?lLl))g?X%>~R(YD0u0-sLbCuR>6OM7$}_`d6V6hUMRJ}q%Pt~Op}@N?8GyM#ZM2; z20~04mDf#7m@wY12<-7wYXrA@wf)*}`?c&0#cdyS>PKC5oA;~*A*S$cOPc6^8P!;B zf0{bPbZE)ff&>UBr_pL%VUyQL)yhZ;jOCh}_OyB&$~FdBZ_)o!%ETNnbtHV~@0h;E z>af~yTaPuXZ(3F#{6k$0*9o0Jpg{ZiX~WeFh|2Bw1c;UZmUs?bJJqh$Lbxhwvn!-PIQ=4@Ek*vIvyOjHm18YLuUwG$pPMKKg5N`7Cc4@etPlU>MWYox83tU!7CY#{zVv2|tm z>Kt|xBDE_N>p$b!(j)TEMwv!uR`h(Tq7PNA(Da3H;;dNS6A9UQve|L_O)H59SC`48 zY4A71Dr55vim_~A2F}bBW}v2w@%izF{+QM$1aTje>};Y-M%+jfL4zLTP4RjWQ#3G? zBaeS5#rIVbxV83I(yBZaX|wFYo3^IA1~4FZnv1geX;U&xZ1SP}{i;q)uLSAHGz^uA zYR&RfqYcT+WeUsxSBKn_nFnR}u%;&+az<{|{Zbj!aM&PZqx3x#<8Fh>m-4Mvlw6MZ z9V-cyW}^8oXBzPM&GIi)Po=j9I(rmSl(@E+hcxqw&W4y~a2$7vwiEWtTF`3wV(6zyoT!?;=v5&7Vmr6mQd1S6}g`j8R0>luT5O zGj@y;S*sSZw2$kaddP|ZJ<7I8o89PjCm~nW=}z3)E^B(BngO^Y~%5Mx%6?6 zu%i<$rlN4P6N~-Jjq8fe@+qyIEN2Or)`3IVQpNM;c3`=}9Umi3WdM!Wpx}~|QT<;x zE}VX1Eu#BtclY-V4omufmKIdsQVu+;)bv6rn^-<7V@S2GL1TcX`Gj|Q@B0)mpI~~o zc!OV)kY;V{y^VdQQ+3h{?BxKgvTchD!&nh?LRN#ye$RRU>~43+J?v4a8NAubJG}6+ zPNOz$h}RyJVi>%5eV^VVa!o|bFQW2(Q@UnY)&(&S2s8KwKAZO57aRKA4W=kwMw%TEL5`?dO>Cw$F2t~o3I>-qAW^#v~X z*Q;*M6aU)r%#uQYPkF6t&iUW}zJvZw=I;ZC61{N7J)c9*a9zJKpuz}MEz!2wmD IANcM+0kYxh6aWAK literal 0 HcmV?d00001 diff --git a/social_media_calendar/static/img/readme/POST_CANCELLED.png b/social_media_calendar/static/img/readme/POST_CANCELLED.png new file mode 100644 index 0000000000000000000000000000000000000000..dc2b53fcf214bfd17416496f8d3860908823e634 GIT binary patch literal 13412 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 Qe_pP^GOs`UKjVyroB#j- literal 0 HcmV?d00001 diff --git a/social_media_calendar/static/img/readme/POST_PLANNED.png b/social_media_calendar/static/img/readme/POST_PLANNED.png new file mode 100644 index 0000000000000000000000000000000000000000..574631b06de02f56035577ac2bfd8ff5a351cdd4 GIT binary patch literal 14037 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�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 +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import test_social_calendar diff --git a/social_media_calendar/tests/test_social_calendar.py b/social_media_calendar/tests/test_social_calendar.py new file mode 100644 index 0000000000..759b4b2c1e --- /dev/null +++ b/social_media_calendar/tests/test_social_calendar.py @@ -0,0 +1,134 @@ +# Copyright 2025 Binhex +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from datetime import timedelta + +from lxml import etree + +from odoo import fields +from odoo.fields import Command + +from odoo.addons.social_media_base.tests.test_social_common import ( + TestSocialMediaBaseCommon, +) + + +class TestSocialMediaCalendar(TestSocialMediaBaseCommon): + def test_compute_color(self): + mapping = { + "planned": 2, + "publishing": 6, + "partially_published": 3, + "published": 10, + "cancelled": 0, + "draft": 4, + } + + for state, expected_color in mapping.items(): + post = self.SocialPost.create({"message": f"Post {state}", "state": state}) + self.assertEqual( + post.color, + expected_color, + f"State {state!r} should map to color {expected_color}", + ) + + def test_compute_date_calendar_fallbacks(self): + post = self.SocialPost.create({"message": "Calendar post"}) + self.assertEqual(post.date_calendar, post.create_date) + post.write({"send_post": "schedule"}) + self.assertEqual(post.date_calendar, post.send_post_date) + post.write({"published_date": "2030-06-20 10:00:00"}) + self.assertEqual(str(post.date_calendar), "2030-06-20 10:00:00") + + def test_date_calendar_keeps_the_time_of_the_user(self): + self.env.user.tz = "Europe/Madrid" + post = self.SocialPost.create({"message": "Late post"}) + post.write({"published_date": "2026-07-20 22:30:00"}) + self.assertEqual( + fields.Datetime.context_timestamp(post, post.date_calendar).strftime( + "%Y-%m-%d" + ), + "2026-07-21", + msg="The calendar must place the post on the day the user sees, " + "not on the UTC one.", + ) + + def test_default_get_proposes_the_day_clicked_on_the_calendar(self): + clicked_date = fields.Datetime.now() + timedelta(days=3) + defaults = self.SocialPost.with_context( + default_date_calendar=clicked_date + ).default_get(["send_post", "send_post_date"]) + self.assertEqual(defaults["send_post"], "schedule") + self.assertEqual(defaults["send_post_date"], clicked_date) + + def test_a_post_created_from_the_calendar_is_planned_on_that_day(self): + clicked_date = fields.Datetime.now() + timedelta(days=3) + SocialPost = self.SocialPost.with_context(default_date_calendar=clicked_date) + post = SocialPost.create( + { + "message": "Post from the calendar", + "account_ids": [Command.set([self.social_account_id.id])], + **SocialPost.default_get(["send_post", "send_post_date"]), + } + ) + self.assertEqual(post.state, "planned") + self.assertEqual(post.date_calendar, clicked_date) + + def test_default_get_ignores_a_day_already_past(self): + """A past date would be published by the cron on its next run.""" + clicked_date = fields.Datetime.now() - timedelta(days=1) + SocialPost = self.SocialPost.with_context(default_date_calendar=clicked_date) + defaults = SocialPost.default_get(["send_post", "send_post_date"]) + self.assertEqual(defaults["send_post"], "schedule") + self.assertNotIn("send_post_date", defaults) + post = SocialPost.create( + { + "message": "Post from a past day", + "account_ids": [Command.set([self.social_account_id.id])], + **defaults, + } + ) + self.assertGreater(post.send_post_date, fields.Datetime.now()) + + def test_default_get_without_a_click_on_the_calendar(self): + defaults = self.SocialPost.default_get(["send_post", "send_post_date"]) + self.assertEqual(defaults["send_post"], "now") + self.assertNotIn("send_post_date", defaults) + + def test_calendar_view_lets_the_user_create_a_post(self): + """Creating opens the form: the post needs its accounts and message.""" + view = self.env.ref("social_media_calendar.social_post_view_calendar") + arch = etree.fromstring(view.arch) + self.assertEqual(arch.get("create"), "1") + self.assertEqual(arch.get("quick_create"), "0") + + def test_calendar_popover_renders_the_attachments_of_the_post(self): + """A bare x2many renders nothing on the popover: it needs a widget.""" + view = self.env.ref("social_media_calendar.social_post_view_calendar") + arch = etree.fromstring(view.arch) + for field_name in ("image_ids", "video_ids"): + node = arch.find(f".//field[@name='{field_name}']") + self.assertIsNotNone(node, f"{field_name} is missing from the calendar") + self.assertEqual(node.get("widget"), "many2many_tags") + + def test_post_action_includes_calendar_view(self): + action = self.env.ref("social_media_base.social_post_action") + self.assertEqual( + [mode for __, mode in action.views], + ["kanban", "calendar", "tree", "form"], + msg="The calendar must be offered right after the kanban, which " + "stays the default view of the action.", + ) + + def test_post_action_keeps_the_calendar_on_an_update_of_the_base(self): + """The calendar must not depend on the ``view_mode`` of the action. + + That field belongs to ``social_media_base`` and is rewritten every + time that module is updated on its own. + """ + action = self.env.ref("social_media_base.social_post_action") + action.view_mode = "kanban,tree,form" + self.assertIn( + "calendar", + [mode for __, mode in action.views], + ) diff --git a/social_media_calendar/views/social_post_views.xml b/social_media_calendar/views/social_post_views.xml new file mode 100644 index 0000000000..aac7ebee1e --- /dev/null +++ b/social_media_calendar/views/social_post_views.xml @@ -0,0 +1,65 @@ + + + + + social.post.view.calendar + social.post + + + + + + + + + + + + + + 1 + kanban + + + + + + 2 + calendar + + + + + From a325feef77fb8afc77c08cb9af29f18252a8d421 Mon Sep 17 00:00:00 2001 From: Edilio Escalona Almira Date: Sun, 16 Aug 2026 16:28:40 -0500 Subject: [PATCH 2/2] [DON'T MERGE] test-requirements.txt --- test-requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/test-requirements.txt b/test-requirements.txt index 4ad8e0ecea..21aba6d498 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1 +1,2 @@ odoo-test-helper +odoo-addon-social_media_base @ git+https://github.com/OCA/social.git@refs/pull/1889/head#subdirectory=social_media_base