|
| 1 | +from odoo import http |
| 2 | +from odoo.http import request |
| 3 | +from odoo.addons.website_appointment.controllers.appointment import WebsiteAppointment |
| 4 | + |
| 5 | +class WebsiteAppointmentFiltersController(WebsiteAppointment): |
| 6 | + @http.route(['/appointment'], type='http', auth='public', website=True) |
| 7 | + def appointment_type_index(self, page=1, **filters): |
| 8 | + filtered_appointments_by_mode = set() |
| 9 | + filtered_appointments_by_type = set() |
| 10 | + filtered_appointments_by_schedule = set() |
| 11 | + |
| 12 | + if 'mode' in filters: |
| 13 | + if filters['mode'] == 'online': |
| 14 | + for appointment in request.env['appointment.type'].search([('location_id', '=', None)]): |
| 15 | + filtered_appointments_by_mode.add(appointment.id) |
| 16 | + elif filters['mode'] == 'offline': |
| 17 | + for appointment in request.env['appointment.type'].search([('location_id', '!=', None)]): |
| 18 | + filtered_appointments_by_mode.add(appointment.id) |
| 19 | + elif filters['mode'] == 'all': |
| 20 | + for appointment in request.env['appointment.type'].search([]): |
| 21 | + filtered_appointments_by_mode.add(appointment.id) |
| 22 | + else: |
| 23 | + for appointment in request.env['appointment.type'].search([]): |
| 24 | + filtered_appointments_by_mode.add(appointment.id) |
| 25 | + |
| 26 | + if 'type' in filters: |
| 27 | + if filters['type'] == 'paid': |
| 28 | + for appointment in request.env['appointment.type'].search([('has_payment_step', '=', 'true')]): |
| 29 | + filtered_appointments_by_type.add(appointment.id) |
| 30 | + elif filters['type'] == 'free': |
| 31 | + for appointment in request.env['appointment.type'].search([('has_payment_step', '!=', 'null')]): |
| 32 | + filtered_appointments_by_type.add(appointment.id) |
| 33 | + elif filters['type'] == 'all': |
| 34 | + for appointment in request.env['appointment.type'].search([]): |
| 35 | + filtered_appointments_by_type.add(appointment.id) |
| 36 | + else: |
| 37 | + for appointment in request.env['appointment.type'].search([]): |
| 38 | + filtered_appointments_by_type.add(appointment.id) |
| 39 | + |
| 40 | + if 'schedule' in filters: |
| 41 | + if filters['schedule'] == 'resources': |
| 42 | + for appointment in request.env['appointment.type'].search([('schedule_based_on', '=', 'resources')]): |
| 43 | + filtered_appointments_by_schedule.add(appointment.id) |
| 44 | + elif filters['schedule'] == 'users': |
| 45 | + for appointment in request.env['appointment.type'].search([('schedule_based_on', '=', 'users')]): |
| 46 | + filtered_appointments_by_schedule.add(appointment.id) |
| 47 | + elif filters['schedule'] == 'all': |
| 48 | + for appointment in request.env['appointment.type'].search([]): |
| 49 | + filtered_appointments_by_schedule.add(appointment.id) |
| 50 | + else: |
| 51 | + for appointment in request.env['appointment.type'].search([]): |
| 52 | + filtered_appointments_by_schedule.add(appointment.id) |
| 53 | + |
| 54 | + filtered_appointments_by_mode = set(map(lambda id: str(id), filtered_appointments_by_mode)) |
| 55 | + filtered_appointments_by_type = set(map(lambda id: str(id), filtered_appointments_by_type)) |
| 56 | + filtered_appointments_by_schedule = set(map(lambda id: str(id), filtered_appointments_by_schedule)) |
| 57 | + |
| 58 | + filters['filter_appointment_type_ids'] = f"[{','.join(filtered_appointments_by_mode & filtered_appointments_by_type & filtered_appointments_by_schedule)}]" |
| 59 | + |
| 60 | + if 'mode' not in filters.keys(): |
| 61 | + filters['mode'] = 'all' |
| 62 | + if 'type' not in filters.keys(): |
| 63 | + filters['type'] = 'all' |
| 64 | + if 'schedule' not in filters.keys(): |
| 65 | + filters['schedule'] = 'all' |
| 66 | + |
| 67 | + |
| 68 | + return super().appointment_type_index(**filters) |
| 69 | + |
| 70 | + def _prepare_appointments_cards_data(self, page, appointment_types, **kwargs): |
| 71 | + res = super()._prepare_appointments_cards_data(page, appointment_types, **kwargs) |
| 72 | + res.update(kwargs) |
| 73 | + return res |
0 commit comments