Files
encoach_backend_new_v2/odoo/addons/website_project/controllers/main.py
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

69 lines
3.5 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.http import request
from odoo import _
from odoo.addons.base.models.ir_qweb_fields import nl2br, nl2br_enclose
from odoo.addons.website.controllers import form
from odoo.tools import html2plaintext
class WebsiteForm(form.WebsiteForm):
def insert_record(self, request, model_sudo, values, custom, meta=None):
model_name = model_sudo.model
if model_name == 'project.task':
visitor_sudo = request.env['website.visitor']._get_visitor_from_request()
visitor_partner = visitor_sudo.partner_id
if visitor_partner:
values['partner_id'] = visitor_partner.id
# When a task is created from the web editor, if the key 'user_ids' is not present, the user_ids is filled with the odoo bot. We set it to False to ensure it is not.
values.setdefault('user_ids', False)
res = super().insert_record(request, model_sudo, values, custom, meta=meta)
if model_name != 'project.task':
return res
task = request.env['project.task'].sudo().browse(res)
custom = custom.replace('email_from', _('Email'))
custom_label = nl2br_enclose(_("Other Information"), 'h4') # Title for custom fields
default_field = model_sudo.website_form_default_field_id
default_field_data = values.get(default_field.name, '')
default_field_content = nl2br_enclose(html2plaintext(default_field_data), 'p')
if default_field.name and default_field.name != 'description':
default_field_content = nl2br_enclose(default_field.name.capitalize(), 'h4') + default_field_content
custom_content = (default_field_content if default_field_data else '') \
+ (custom_label + custom if custom else '') \
+ (self._meta_label + meta if meta else '')
if default_field.name:
if default_field.ttype == 'html':
custom_content = nl2br(custom_content)
task[default_field.name] = custom_content
task._message_log(
body=custom_content,
message_type='comment',
)
return res
def extract_data(self, model_sudo, values):
data = super().extract_data(model_sudo, values)
if model_sudo.model == 'project.task' and values.get('email_from'):
partner = request.env['mail.thread'].sudo()._partner_find_from_emails_single([values['email_from']], no_create=True)
data['record']['email_from'] = values['email_from']
if partner:
data['record']['partner_id'] = partner.id
custom = [
('partner_name', data['record'].pop('partner_name', False)),
('partner_phone', data['record'].pop('partner_phone', False)),
('partner_company_name', data['record'].pop('partner_company_name', False)),
]
data['custom'] += "\n" + "\n".join(["%s : %s" % c for c in custom])
else:
data['record']['email_cc'] = values['email_from']
if values.get('partner_phone'):
data['record']['partner_phone'] = values['partner_phone']
if values.get('partner_name'):
data['record']['partner_name'] = values['partner_name']
if values.get('partner_company_name'):
data['record']['partner_company_name'] = values['partner_company_name']
return data