Files
encoach_backend_v4/custom_addons/encoach_signup/views/otp_views.xml
Yamen Ahmad 907a5c0e92 feat(v3): restructure project + add complete frontend
- Restructure: move backend from new_project/ to backend/
- Add full React/TypeScript frontend (37 pages, 17 services, 16 type defs, 11 query hooks)
- Add docs/ with SRS specs, user stories, and workflow documentation
- Update .gitignore for new directory layout

Workflows implemented:
  WF1 User Signup, WF2 Placement Test, WF3 Exam Configuration,
  WF4 General English Exam, WF5 Course Generation,
  WF6 Entity Student Onboarding, AI Course Generation,
  Adaptive Learning Engine UI, White-Label Branding, Score Release

Made-with: Cursor
2026-04-10 17:26:42 +04:00

62 lines
2.2 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_otp_form" model="ir.ui.view">
<field name="name">encoach.otp.form</field>
<field name="model">encoach.otp</field>
<field name="arch" type="xml">
<form string="OTP Record">
<sheet>
<group>
<group>
<field name="email"/>
<field name="otp_hash"/>
<field name="expires_at"/>
</group>
<group>
<field name="used"/>
<field name="resend_count"/>
<field name="created_at"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_otp_list" model="ir.ui.view">
<field name="name">encoach.otp.list</field>
<field name="model">encoach.otp</field>
<field name="arch" type="xml">
<list string="OTP Records" create="false" edit="false">
<field name="email"/>
<field name="otp_hash"/>
<field name="expires_at"/>
<field name="used" widget="badge" decoration-success="used" decoration-muted="not used"/>
<field name="resend_count"/>
<field name="created_at"/>
</list>
</field>
</record>
<record id="view_otp_search" model="ir.ui.view">
<field name="name">encoach.otp.search</field>
<field name="model">encoach.otp</field>
<field name="arch" type="xml">
<search string="Search OTP Records">
<field name="email"/>
<separator/>
<filter string="Used" name="used" domain="[('used', '=', True)]"/>
<filter string="Unused" name="unused" domain="[('used', '=', False)]"/>
</search>
</field>
</record>
<record id="action_otp" model="ir.actions.act_window">
<field name="name">OTP Records</field>
<field name="res_model">encoach.otp</field>
<field name="view_mode">list,form</field>
</record>
</odoo>