from odoo import http from odoo.http import request class OfferLetterResponseController(http.Controller): def _get_offer_letter(self, offer_id, token): offer_letter = request.env['offer.letter'].sudo().browse(offer_id) if not offer_letter.exists(): raise request.not_found() if not token or offer_letter.response_token != token: raise request.not_found() if not offer_letter._is_latest_offer(): raise request.not_found() return offer_letter @http.route('/offer_letters/respond//accept', type='http', auth='public') def accept_offer(self, offer_id, token=None, **kwargs): offer_letter = self._get_offer_letter(offer_id, token) if offer_letter.state == 'requested': return request.render('offer_letters.offer_response_message', { 'title': 'Offer Not Released', 'message': 'This offer is not yet available for response.', }) if offer_letter.state == 'accepted': return request.render('offer_letters.offer_response_message', { 'title': 'Offer Already Accepted', 'message': 'Your acceptance has already been recorded.', }) if offer_letter.state == 'rejected': return request.render('offer_letters.offer_response_message', { 'title': 'Offer Already Rejected', 'message': 'This offer has already been rejected.', }) offer_letter.action_accept_offer() return request.render('offer_letters.offer_response_message', { 'title': 'Offer Accepted', 'message': 'Thank you. Your offer acceptance has been recorded successfully.', }) @http.route('/offer_letters/respond//reject', type='http', auth='public', methods=['GET', 'POST'], csrf=False) def reject_offer(self, offer_id, token=None, **post): offer_letter = self._get_offer_letter(offer_id, token) if offer_letter.state == 'requested': return request.render('offer_letters.offer_response_message', { 'title': 'Offer Not Released', 'message': 'This offer is not yet available for response.', }) if request.httprequest.method == 'POST': reason = post.get('rejection_reason', '').strip() if not reason: return request.render('offer_letters.offer_reject_reason_page', { 'offer_letter': offer_letter, 'token': token, 'error': 'Please enter a rejection reason.', }) offer_letter.action_reject_offer(reason) return request.render('offer_letters.offer_response_message', { 'title': 'Offer Rejected', 'message': 'Your rejection response has been recorded successfully.', }) if offer_letter.state == 'accepted': return request.render('offer_letters.offer_response_message', { 'title': 'Offer Already Accepted', 'message': 'This offer has already been accepted.', }) if offer_letter.state == 'rejected': return request.render('offer_letters.offer_response_message', { 'title': 'Offer Already Rejected', 'message': 'This offer has already been rejected.', }) return request.render('offer_letters.offer_reject_reason_page', { 'offer_letter': offer_letter, 'token': token, 'error': False, })