Files
Yamen Ahmad 3e83d8d7d5 feat: add complete EnCoach backend — Odoo 19 + all addons
Includes:
- Odoo 19 framework (odoo/)
- 27 custom EnCoach addons (new_project/custom_addons/)
  - encoach_core, encoach_api, encoach_lms_api, encoach_adaptive_api
  - encoach_exam, encoach_taxonomy, encoach_adaptive, encoach_assignment
  - encoach_ai, encoach_ai_grading, encoach_ai_generation, encoach_ai_media
  - encoach_courseware, encoach_communication, encoach_subscription
  - encoach_notification, encoach_approval, encoach_branding
  - encoach_classroom, encoach_registration, encoach_stats
  - encoach_faq, encoach_ticket, encoach_training, encoach_resources
  - encoach_adaptive_ai, encoach_sis
- 21 OpenEduCat Enterprise modules (new_project/enterprise-19/)
- 14 OpenEduCat Community modules (new_project/openeducat_erp-19.0/)
- Configuration: odoo.conf, requirements.txt, scripts
- 200+ REST API endpoints with JWT authentication
- SRS and test documentation

Made-with: Cursor
2026-04-01 17:10:04 +04:00

50 lines
2.3 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from datetime import datetime
from dateutil.relativedelta import relativedelta
from odoo import fields
from odoo.http import request, route, Controller
class DiscussSettingsController(Controller):
@route("/discuss/settings/mute", methods=["POST"], type="jsonrpc", auth="user")
def discuss_mute(self, minutes, channel_id):
"""Mute notifications for the given number of minutes.
:param minutes: (integer) number of minutes to mute notifications, -1 means mute until the user unmutes
:param channel_id: (integer) id of the discuss.channel record
"""
channel = request.env["discuss.channel"].browse(channel_id)
if not channel:
raise request.not_found()
member = channel._find_or_create_member_for_self()
if not member:
raise request.not_found()
if minutes == -1:
member.mute_until_dt = datetime.max
elif minutes:
member.mute_until_dt = fields.Datetime.now() + relativedelta(minutes=minutes)
else:
member.mute_until_dt = False
member._notify_mute()
@route("/discuss/settings/custom_notifications", methods=["POST"], type="jsonrpc", auth="user")
def discuss_custom_notifications(self, custom_notifications, channel_id=None):
"""Set custom notifications for the given channel or general user settings.
:param custom_notifications: (false|all|mentions|no_notif) custom notifications to set
:param channel_id: (integer) id of the discuss.channel record, if not set, set for res.users.settings
"""
if channel_id:
channel = request.env["discuss.channel"].search([("id", "=", channel_id)])
if not channel:
raise request.not_found()
member = channel._find_or_create_member_for_self()
if not member:
raise request.not_found()
member.custom_notifications = custom_notifications
else:
user_settings = request.env["res.users.settings"]._find_or_create_for_user(request.env.user)
if not user_settings:
raise request.not_found()
user_settings.set_res_users_settings({"channel_notifications": custom_notifications})