Merge branch '11.0' of https://github.com/hootel/hootel into 11.0

This commit is contained in:
Dario Lodeiros
2018-11-07 11:12:52 +01:00
13 changed files with 279 additions and 279 deletions

View File

@@ -1,68 +1,68 @@
# Copyright 2017 Dario Lodeiros
# Copyright 2018 Alexandre Díaz
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import datetime
from openerp import models, fields, api, _
from openerp.exceptions import except_orm, ValidationError
class Cardex(models.Model):
_name = 'cardex'
# Validation for Departure date is after arrival date.
@api.constrains('exit_date')
def validation_dates(self):
if self.exit_date < self.enter_date:
raise models.ValidationError(
_('Departure date (%s) is prior to arrival on %s') %
(self.exit_date, self.enter_date))
def default_reservation_id(self):
if 'reservation_id' in self.env.context:
reservation = self.env['hotel.reservation'].search([
('id', '=', self.env.context['reservation_id'])
])
return reservation
return False
def default_enter_date(self):
if 'reservation_id' in self.env.context:
reservation = self.env['hotel.reservation'].search([
('id', '=', self.env.context['reservation_id'])
])
return reservation.checkin
return False
def default_exit_date(self):
if 'reservation_id' in self.env.context:
reservation = self.env['hotel.reservation'].search([
('id', '=', self.env.context['reservation_id'])
])
return reservation.checkout
return False
def default_partner_id(self):
if 'reservation_id' in self.env.context:
reservation = self.env['hotel.reservation'].search([
('id', '=', self.env.context['reservation_id'])
])
return reservation.partner_id
return False
@api.onchange('enter_date', 'exit_date')
def check_change_dates(self):
if self.exit_date <= self.enter_date:
date_1 = fields.Date.from_string(self.enter_date)
date_2 = date_1 + datetime.timedelta(days=1)
self.update({'exit_date': date_2, })
raise ValidationError(
_('Departure date, is prior to arrival. Check it now. %s') %
(date_2))
partner_id = fields.Many2one('res.partner', default=default_partner_id,
required=True)
reservation_id = fields.Many2one(
'hotel.reservation',
default=default_reservation_id, readonly=True)
enter_date = fields.Date(default=default_enter_date, required=True)
exit_date = fields.Date(default=default_exit_date, required=True)
# Copyright 2017 Dario Lodeiros
# Copyright 2018 Alexandre Díaz
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import datetime
from odoo import models, fields, api, _
from odoo.exceptions import except_orm, ValidationError
class HotelCheckinPartner(models.Model):
_name = 'hotel_checkin_partner'
# Validation for Departure date is after arrival date.
@api.constrains('exit_date')
def validation_dates(self):
if self.exit_date < self.enter_date:
raise models.ValidationError(
_('Departure date (%s) is prior to arrival on %s') %
(self.exit_date, self.enter_date))
def default_reservation_id(self):
if 'reservation_id' in self.env.context:
reservation = self.env['hotel.reservation'].search([
('id', '=', self.env.context['reservation_id'])
])
return reservation
return False
def default_enter_date(self):
if 'reservation_id' in self.env.context:
reservation = self.env['hotel.reservation'].search([
('id', '=', self.env.context['reservation_id'])
])
return reservation.checkin
return False
def default_exit_date(self):
if 'reservation_id' in self.env.context:
reservation = self.env['hotel.reservation'].search([
('id', '=', self.env.context['reservation_id'])
])
return reservation.checkout
return False
def default_partner_id(self):
if 'reservation_id' in self.env.context:
reservation = self.env['hotel.reservation'].search([
('id', '=', self.env.context['reservation_id'])
])
return reservation.partner_id
return False
@api.onchange('enter_date', 'exit_date')
def check_change_dates(self):
if self.exit_date <= self.enter_date:
date_1 = fields.Date.from_string(self.enter_date)
date_2 = date_1 + datetime.timedelta(days=1)
self.update({'exit_date': date_2, })
raise ValidationError(
_('Departure date, is prior to arrival. Check it now. %s') %
(date_2))
partner_id = fields.Many2one('res.partner', default=default_partner_id,
required=True)
reservation_id = fields.Many2one(
'hotel.reservation',
default=default_reservation_id, readonly=True)
enter_date = fields.Date(default=default_enter_date, required=True)
exit_date = fields.Date(default=default_exit_date, required=True)

View File

@@ -105,11 +105,11 @@ class HotelFolio(models.Model):
string="Payments")
booking_pending = fields.Integer('Booking pending',
compute='_compute_cardex_count')
cardex_count = fields.Integer('Cardex counter',
compute='_compute_cardex_count')
cardex_pending_count = fields.Integer('Cardex Pending',
compute='_compute_cardex_count')
compute='_compute_checkin_partner_count')
checkin_partner_count = fields.Integer('Checkin counter',
compute='_compute_checkin_partner_count')
checkin_partner_pending_count = fields.Integer('Checkin Pending',
compute='_compute_checkin_partner_count')
checkins_reservations = fields.Integer('checkins reservations')
checkouts_reservations = fields.Integer('checkouts reservations')
partner_internal_comment = fields.Text(string='Internal Partner Notes',
@@ -467,10 +467,10 @@ class HotelFolio(models.Model):
self.ensure_one()
rooms = self.mapped('room_lines.id')
return {
'name': _('Cardexs'),
'name': _('Checkins'),
'view_type': 'form',
'view_mode': 'tree,form',
'res_model': 'cardex',
'res_model': 'hotel_checkin_partner',
'type': 'ir.actions.act_window',
'domain': [('reservation_id', 'in', rooms)],
'target': 'new',
@@ -502,19 +502,19 @@ class HotelFolio(models.Model):
return True
@api.multi
def _compute_cardex_count(self):
_logger.info('_compute_cardex_amount')
def _compute_checkin_partner_count(self):
_logger.info('_compute_checkin_partner_amount')
for record in self:
if record.reservation_type == 'normal' and record.room_lines:
write_vals = {}
filtered_reservs = record.room_lines.filtered(
lambda x: x.state != 'cancelled' and \
not x.parent_reservation)
mapped_cardex = filtered_reservs.mapped('cardex_ids.id')
record.cardex_count = len(mapped_cardex)
mapped_cardex_count = filtered_reservs.mapped(
lambda x: (x.adults + x.children) - len(x.cardex_ids))
record.cardex_pending_count = sum(mapped_cardex_count)
mapped_checkin_partner = filtered_reservs.mapped('checkin_partner_ids.id')
record.checkin_partner_count = len(mapped_checkin_partner)
mapped_checkin_partner_count = filtered_reservs.mapped(
lambda x: (x.adults + x.children) - len(x.checkin_partner_ids))
record.checkin_partner_pending_count = sum(mapped_checkin_partner_count)
"""
MAILING PROCESS

View File

@@ -179,16 +179,16 @@ class HotelReservation(models.Model):
pricelist_id = fields.Many2one('product.pricelist',
related='folio_id.pricelist_id',
readonly="1")
cardex_ids = fields.One2many('cardex', 'reservation_id')
# TODO: As cardex_count is a computed field, it can't not be used in a domain filer
# Non-stored field hotel.reservation.cardex_count cannot be searched
checkin_partner_ids = fields.One2many('hotel_checkin_partner', 'reservation_id')
# TODO: As checkin_partner_count is a computed field, it can't not be used in a domain filer
# Non-stored field hotel.reservation.checkin_partner_count cannot be searched
# searching on a computed field can also be enabled by setting the search parameter.
# The value is a method name returning a Domains
cardex_count = fields.Integer('Cardex counter',
compute='_compute_cardex_count')
cardex_pending_count = fields.Integer('Cardex Pending Num',
compute='_compute_cardex_count',
search='_search_cardex_pending')
checkin_partner_count = fields.Integer('Checkin counter',
compute='_compute_checkin_partner_count')
checkin_partner_pending_count = fields.Integer('Checkin Pending Num',
compute='_compute_checkin_partner_count',
search='_search_checkin_partner_pending')
# check_rooms = fields.Boolean('Check Rooms')
is_checkin = fields.Boolean()
is_checkout = fields.Boolean()
@@ -646,7 +646,7 @@ class HotelReservation(models.Model):
hotel_reserv_obj = self.env['hotel.reservation']
for record in self:
vals = {}
if record.cardex_ids:
if record.checkin_partner_ids:
vals.update({'state': 'booking'})
else:
vals.update({'state': 'confirm'})
@@ -912,18 +912,18 @@ class HotelReservation(models.Model):
"""
@api.multi
def _compute_cardex_count(self):
_logger.info('_compute_cardex_count')
def _compute_checkin_partner_count(self):
_logger.info('_compute_checkin_partner_count')
for record in self:
record.cardex_count = len(record.cardex_ids)
record.cardex_pending_count = (record.adults + record.children) \
- len(record.cardex_ids)
record.checkin_partner_count = len(record.checkin_partner_ids)
record.checkin_partner_pending_count = (record.adults + record.children) \
- len(record.checkin_partner_ids)
# https://www.odoo.com/es_ES/forum/ayuda-1/question/calculated-fields-in-search-filter-possible-118501
@api.multi
def _search_cardex_pending(self, operator, value):
def _search_checkin_partner_pending(self, operator, value):
self.ensure_one()
recs = self.search([]).filtered(lambda x: x.cardex_pending_count > 0)
recs = self.search([]).filtered(lambda x: x.checkin_partner_pending_count > 0)
return [('id', 'in', [x.id for x in recs])] if recs else []
@api.multi
@@ -991,10 +991,10 @@ class HotelReservation(models.Model):
def action_checks(self):
self.ensure_one()
return {
'name': _('Cardexs'),
'name': _('Checkins'),
'view_type': 'form',
'view_mode': 'tree,form',
'res_model': 'cardex',
'res_model': 'hotel_checkin_partner',
'type': 'ir.actions.act_window',
'domain': [('reservation_id', '=', self.id)],
'target': 'new',