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

170 lines
7.3 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="0">
<record model="res.groups.privilege" id="res_groups_privilege_inventory">
<field name="name">Inventory</field>
<field name="category_id" ref="base.module_category_supply_chain"/>
</record>
<record id="group_stock_user" model="res.groups">
<field name="name">User</field>
<field name="sequence">10</field>
<field name="privilege_id" ref="res_groups_privilege_inventory"/>
<field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
</record>
<record id="group_stock_manager" model="res.groups">
<field name="name">Administrator</field>
<field name="sequence">20</field>
<field name="privilege_id" ref="res_groups_privilege_inventory"/>
<field name="implied_ids" eval="[(4, ref('group_stock_user'))]"/>
<field name="user_ids" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/>
</record>
<!-- hidden groups -->
<record id="group_stock_multi_locations" model="res.groups">
<field name="name">Manage Multiple Stock Locations</field>
</record>
<record id="group_stock_multi_warehouses" model="res.groups">
<field name="name">Manage Multiple Warehouses</field>
</record>
<record id="group_production_lot" model="res.groups">
<field name="name">Manage Lots / Serial Numbers</field>
</record>
<record id="group_stock_lot_print_gs1" model="res.groups">
<field name="name">Print GS1 Barcodes for Lot &amp; Serial Numbers</field>
</record>
<record id="group_lot_on_delivery_slip" model="res.groups">
<field name="name">Display Serial &amp; Lot Number in Delivery Slips</field>
</record>
<record id="group_tracking_lot" model="res.groups">
<field name="name">Manage Packages</field>
</record>
<record id="group_adv_location" model="res.groups">
<field name="name">Manage Push and Pull inventory flows</field>
</record>
<record id="group_tracking_owner" model="res.groups">
<field name="name">Manage Different Stock Owners</field>
</record>
<record id="group_warning_stock" model="res.groups">
<field name="name">A warning can be set on a partner (Stock)</field>
</record>
<record id="group_stock_sign_delivery" model="res.groups">
<field name="name">Require a signature on your delivery orders</field>
</record>
<record id="group_reception_report" model="res.groups">
<field name="name">Use Reception Report</field>
</record>
</data>
<data noupdate="1">
<!-- multi -->
<record model="ir.rule" id="stock_picking_rule">
<field name="name">stock_picking multi-company</field>
<field name="model_id" search="[('model','=','stock.picking')]" model="ir.model"/>
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
</record>
<record model="ir.rule" id="stock_picking_type_rule">
<field name="name">Stock Operation Type multi-company</field>
<field name="model_id" search="[('model','=','stock.picking.type')]" model="ir.model"/>
<field name="domain_force">[('company_id','in', company_ids)]</field>
</record>
<record model="ir.rule" id="stock_putaway_rule_rule">
<field name="name">Stock Operation Type multi-company</field>
<field name="model_id" search="[('model','=','stock.putaway.rule')]" model="ir.model"/>
<field name="domain_force">[('company_id','in', company_ids)]</field>
</record>
<record model="ir.rule" id="stock_production_lot_rule">
<field name="name">Stock Production Lot multi-company</field>
<field name="model_id" search="[('model','=','stock.lot')]" model="ir.model"/>
<field name="domain_force">[('company_id', 'in', company_ids + [False])]</field>
</record>
<record model="ir.rule" id="stock_warehouse_comp_rule">
<field name="name">Warehouse multi-company</field>
<field name="model_id" ref="model_stock_warehouse"/>
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
</record>
<record model="ir.rule" id="stock_location_comp_rule">
<field name="name">Location multi-company</field>
<field name="model_id" ref="model_stock_location"/>
<field name="domain_force">[('company_id', 'in', company_ids + [False])]</field>
</record>
<record model="ir.rule" id="stock_move_rule">
<field name="name">stock_move multi-company</field>
<field name="model_id" search="[('model','=','stock.move')]" model="ir.model"/>
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
</record>
<record model="ir.rule" id="stock_move_line_rule">
<field name="name">stock_move_line multi-company</field>
<field name="model_id" search="[('model','=','stock.move.line')]" model="ir.model"/>
<field name="domain_force">[('company_id', 'in', company_ids + [False])]</field>
</record>
<record model="ir.rule" id="stock_quant_rule">
<field name="name">stock_quant multi-company</field>
<field name="model_id" ref="model_stock_quant"/>
<field name="domain_force">[('company_id', 'in', company_ids + [False])]</field>
</record>
<record model="ir.rule" id="stock_warehouse_orderpoint_rule">
<field name="name">stock_warehouse.orderpoint multi-company</field>
<field name="model_id" search="[('model','=','stock.warehouse.orderpoint')]" model="ir.model"/>
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
</record>
<record model="ir.rule" id="product_pulled_flow_comp_rule">
<field name="name">product_pulled_flow multi-company</field>
<field name="model_id" ref="model_stock_rule"/>
<field name="domain_force">[('company_id', 'in', company_ids + [False])]</field>
</record>
<record model="ir.rule" id="stock_location_route_comp_rule">
<field name="name">stock_route multi-company</field>
<field name="model_id" ref="model_stock_route"/>
<field name="domain_force">[('company_id', 'in', company_ids + [False])]</field>
</record>
<record model="ir.rule" id="stock_package_comp_rule">
<field name="name">stock_package multi-company</field>
<field name="model_id" ref="model_stock_package"/>
<field name="domain_force">[('company_id', 'in', company_ids + [False])]</field>
</record>
<record model="ir.rule" id="stock_scrap_company_rule">
<field name="name">stock_scrap_company multi-company</field>
<field name="model_id" ref="model_stock_scrap"/>
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
</record>
<record model="ir.rule" id="report_stock_quantity_flow_comp_rule">
<field name="name">report_stock_quantity_flow multi-company</field>
<field name="model_id" ref="model_report_stock_quantity"/>
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
</record>
<record model="ir.rule" id="stock_storage_category_rule">
<field name="name">stock_storage_category multi-company</field>
<field name="model_id" ref="model_stock_storage_category"/>
<field name="domain_force">[('company_id', 'in', company_ids + [False])]</field>
</record>
</data>
</odoo>