78 lines
3.6 KiB
Python
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,
|
|
})
|