import logging from odoo import http from odoo.http import request from odoo.addons.encoach_api.controllers.base import ( jwt_required, _json_response, _error_response, _get_json_body, ) _logger = logging.getLogger(__name__) def _ser_session(s): timing = s.timing_id if hasattr(s, 'timing_id') and s.timing_id else None return { 'id': s.id, 'course_id': s.course_id.id if hasattr(s, 'course_id') and s.course_id else 0, 'course_name': s.course_id.name if hasattr(s, 'course_id') and s.course_id else '', 'teacher_name': s.faculty_id.partner_id.name if hasattr(s, 'faculty_id') and s.faculty_id and s.faculty_id.partner_id else '', 'batch_name': s.batch_id.name if hasattr(s, 'batch_id') and s.batch_id else '', 'day': getattr(s, 'day', '') or '', 'start_time': str(timing.hour) + ':' + str(int(timing.minute)).zfill(2) if timing and hasattr(timing, 'hour') else getattr(s, 'start_datetime', '') or '', 'end_time': '', 'room': getattr(s, 'classroom_id', False) and s.classroom_id.name or '', } class TimetableController(http.Controller): @http.route('/api/timetable', type='http', auth='public', methods=['GET'], csrf=False) @jwt_required def list_timetable(self, **kw): try: M = request.env['op.session'].sudo() domain = [] if kw.get('course_id'): domain.append(('course_id', '=', int(kw['course_id']))) if kw.get('batch_id'): domain.append(('batch_id', '=', int(kw['batch_id']))) recs = M.search(domain, limit=200, order='id desc') data = [_ser_session(r) for r in recs] return _json_response({'data': data}) except Exception as e: _logger.exception('list_timetable') return _error_response(str(e), 500) @http.route('/api/timetable', type='http', auth='public', methods=['POST'], csrf=False) @jwt_required def create_timetable(self, **kw): try: body = _get_json_body() vals = {} if body.get('course_id'): vals['course_id'] = int(body['course_id']) if body.get('batch_id'): vals['batch_id'] = int(body['batch_id']) if body.get('faculty_id'): vals['faculty_id'] = int(body['faculty_id']) if body.get('subject_id'): vals['subject_id'] = int(body['subject_id']) if body.get('day'): vals['day'] = body['day'] rec = request.env['op.session'].sudo().create(vals) return _json_response(_ser_session(rec)) except Exception as e: return _error_response(str(e), 500) @http.route('/api/timetable/', type='http', auth='public', methods=['DELETE'], csrf=False) @jwt_required def delete_timetable(self, sid, **kw): try: rec = request.env['op.session'].sudo().browse(sid) if rec.exists(): rec.unlink() return _json_response({'success': True}) except Exception as e: return _error_response(str(e), 500)