Files
pms/hotel_calendar/models/bus_hotel_calendar.py
Pablo 0d7667f636 popover improvement (#93)
* [FIX] Fix popover placement

* [FIX] Fix popover in xs (phones)

* [ADD] folio and reservation buttons

* [ADD] Folio pending highlights

* [FIX] event is not defined in Firefox
2019-02-06 16:14:10 +01:00

136 lines
5.2 KiB
Python

# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from datetime import datetime
from odoo.tools import DEFAULT_SERVER_DATE_FORMAT
from odoo import models, api
from odoo.addons.hotel_calendar.controllers.bus import HOTEL_BUS_CHANNEL_ID
class BusHotelCalendar(models.TransientModel):
_name = 'bus.hotel.calendar'
'''
action:
- create
- write
- unlink
- cancelled
ntype:
- notif : Show a normal notification
- warn : Show a warning notification
- noshow : Don't show any notification
'''
@api.model
def _generate_reservation_notif(self, vals):
user_id = self.env['res.users'].browse(self.env.uid)
return {
'type': 'reservation',
'action': vals['action'],
'subtype': vals['type'],
'title': vals['title'],
'username': user_id.partner_id.name,
'userid': user_id.id,
'reservation': {
'room_id': vals['room_id'],
'id': vals['reserv_id'],
'name': vals['partner_name'],
'adults': vals['adults'],
'childer': vals['children'],
'checkin': vals['checkin'],
'checkout': vals['checkout'],
'folio_id': vals['folio_id'],
'bgcolor': vals['reserve_color'],
'color': vals['reserve_color_text'],
'splitted': vals['splitted'],
'parent_reservation': vals['parent_reservation'],
'room_name': vals['room_name'],
'state': vals['state'],
'only_read': False,
'fix_days': vals['fix_days'],
'fix_room': False,
'overbooking': vals['overbooking'],
'price_room_services_set': vals['price_room_services_set'],
'amount_total': vals['pending_amount'] + vals['invoices_paid'],
'real_dates': vals['real_dates'],
},
'tooltip': {
'folio_name': vals['folio_name'],
'name': vals['partner_name'],
'phone': vals['partner_phone'],
'email': vals['partner_email'],
'room_type_name': vals['room_type_name'],
'adults': vals['adults'],
'children': vals['children'],
'checkin': vals['checkin'],
'checkout': vals['checkout'],
'arrival_hour': vals['arrival_hour'],
'departure_hour': vals['departure_hour'],
'price_room_services_set': vals['price_room_services_set'],
'invoices_paid': vals['invoices_paid'],
'pending_amount': vals['pending_amount'],
'type': vals['reservation_type'],
'closure_reason': vals['closure_reason'],
'out_service_description': vals['out_service_description'],
'splitted': vals['splitted'],
'real_dates': vals['real_dates'],
'channel_type': vals['channel_type'],
'board_service_name': vals['board_service_name'],
'services': vals['services'],
}
}
@api.model
def _generate_pricelist_notification(self, vals):
date_dt = datetime.strptime(vals['date'], DEFAULT_SERVER_DATE_FORMAT)
return {
'type': 'pricelist',
'price': {
vals['pricelist_id']: [{
'days': {
date_dt.strftime("%d/%m/%Y"): vals['price'],
},
'room': vals['room_id'],
'id': vals['id'],
}],
},
}
@api.model
def _generate_restriction_notification(self, vals):
date_dt = datetime.strptime(vals['date'], DEFAULT_SERVER_DATE_FORMAT)
return {
'type': 'restriction',
'restriction': {
vals['room_type_id']: {
date_dt.strftime("%d/%m/%Y"): [
vals['min_stay'],
vals['min_stay_arrival'],
vals['max_stay'],
vals['max_stay_arrival'],
vals['closed'],
vals['closed_arrival'],
vals['closed_departure'],
vals['id'],
],
},
},
}
@api.model
def send_reservation_notification(self, vals):
notif = self._generate_reservation_notif(vals)
self.env['bus.bus'].sendone((self._cr.dbname, 'hotel.reservation',
HOTEL_BUS_CHANNEL_ID), notif)
@api.model
def send_pricelist_notification(self, vals):
notif = self._generate_pricelist_notification(vals)
self.env['bus.bus'].sendone((self._cr.dbname, 'hotel.reservation',
HOTEL_BUS_CHANNEL_ID), notif)
@api.model
def send_restriction_notification(self, vals):
notif = self._generate_restriction_notification(vals)
self.env['bus.bus'].sendone((self._cr.dbname, 'hotel.reservation',
HOTEL_BUS_CHANNEL_ID), notif)