odoo18/addons_extensions/offer_letters/controllers/main.py

78 lines
3.6 KiB
Python

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/<int:offer_id>/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/<int:offer_id>/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,
})