EnCoach Odoo 19 custom modules
Full backend implementation with custom Odoo modules: - encoach_api: Core API, user management, JWT auth - encoach_exam: Exam generation (reading, writing, listening, speaking) - encoach_evaluate: AI-powered evaluation (writing, speaking) - encoach_training: Training tips and walkthrough - encoach_storage: File storage management - encoach_payment: Stripe, PayPal, Paymob integration - encoach_mail: Email notifications Made-with: Cursor
This commit is contained in:
57
encoach_core/models/code.py
Normal file
57
encoach_core/models/code.py
Normal file
@@ -0,0 +1,57 @@
|
||||
import uuid
|
||||
from odoo import models, fields, api
|
||||
|
||||
|
||||
class EncoachCode(models.Model):
|
||||
_name = "encoach.code"
|
||||
_description = "EnCoach Registration Code"
|
||||
|
||||
code = fields.Char(required=True, index=True, default=lambda self: uuid.uuid4().hex[:8].upper())
|
||||
entity_id = fields.Many2one("encoach.entity", ondelete="set null")
|
||||
creator_id = fields.Many2one("res.users", required=True)
|
||||
expiry_date = fields.Datetime()
|
||||
code_type = fields.Selection(
|
||||
[("individual", "Individual"), ("corporate", "Corporate")],
|
||||
default="individual",
|
||||
)
|
||||
max_uses = fields.Integer(default=1)
|
||||
uses = fields.Integer(default=0)
|
||||
user_type = fields.Selection(
|
||||
[
|
||||
("student", "Student"),
|
||||
("teacher", "Teacher"),
|
||||
("corporate", "Corporate"),
|
||||
],
|
||||
default="student",
|
||||
)
|
||||
legacy_id = fields.Char(index=True)
|
||||
|
||||
@api.model
|
||||
def validate_code(self, code_str):
|
||||
rec = self.search([("code", "=", code_str)], limit=1)
|
||||
if not rec:
|
||||
return {"valid": False, "error": "Code not found"}
|
||||
if rec.expiry_date and rec.expiry_date < fields.Datetime.now():
|
||||
return {"valid": False, "error": "Code expired"}
|
||||
if rec.max_uses and rec.uses >= rec.max_uses:
|
||||
return {"valid": False, "error": "Code fully used"}
|
||||
return {
|
||||
"valid": True,
|
||||
"code": rec.to_encoach_dict(),
|
||||
}
|
||||
|
||||
def to_encoach_dict(self):
|
||||
self.ensure_one()
|
||||
return {
|
||||
"id": self.id,
|
||||
"code": self.code,
|
||||
"entity": self.entity_id.id if self.entity_id else None,
|
||||
"creator": self.creator_id.id,
|
||||
"expiryDate": (
|
||||
self.expiry_date.isoformat() if self.expiry_date else None
|
||||
),
|
||||
"type": self.code_type,
|
||||
"maxUses": self.max_uses,
|
||||
"uses": self.uses,
|
||||
"userType": self.user_type,
|
||||
}
|
||||
Reference in New Issue
Block a user