diff --git a/hotel/models/hotel_folio.py b/hotel/models/hotel_folio.py
index 9e18492e6..668106463 100644
--- a/hotel/models/hotel_folio.py
+++ b/hotel/models/hotel_folio.py
@@ -314,20 +314,21 @@ class HotelFolio(models.Model):
@api.model
def create(self, vals):
- if vals.get('name', _('New')) == _('New'):
+ if vals.get('name', _('New')) == _('New') or 'name' not in vals:
if 'company_id' in vals:
vals['name'] = self.env['ir.sequence'].with_context(
force_company=vals['company_id']
).next_by_code('sale.order') or _('New')
else:
vals['name'] = self.env['ir.sequence'].next_by_code('hotel.folio') or _('New')
+
# Makes sure partner_invoice_id' and 'pricelist_id' are defined
lfields = ('partner_invoice_id', 'partner_shipping_id', 'pricelist_id')
if any(f not in vals for f in lfields):
partner = self.env['res.partner'].browse(vals.get('partner_id'))
addr = partner.address_get(['delivery', 'invoice'])
- vals['partner_invoice_id'] = vals.setdefault('partner_invoice_id', addr['invoice'])
+ #~ vals['partner_invoice_id'] = vals.setdefault('partner_invoice_id', addr['invoice'])
vals['pricelist_id'] = vals.setdefault(
'pricelist_id',
partner.property_product_pricelist and partner.property_product_pricelist.id)
@@ -344,20 +345,25 @@ class HotelFolio(models.Model):
- user_id
"""
if not self.partner_id:
- self.update({
- 'partner_invoice_id': False,
- 'payment_term_id': False,
- 'fiscal_position_id': False,
- })
+ #~ self.update({
+ #~ 'partner_invoice_id': False,
+ #~ 'payment_term_id': False,
+ #~ 'fiscal_position_id': False,
+ #~ })
return
addr = self.partner_id.address_get(['invoice'])
- values = {
- 'pricelist_id': self.partner_id.property_product_pricelist and \
- self.partner_id.property_product_pricelist.id or False,
- 'partner_invoice_id': addr['invoice'],
- 'user_id': self.partner_id.user_id.id or self.env.uid
- }
+ #TEMP:
+ values = { 'user_id': self.partner_id.user_id.id or self.env.uid,
+ 'pricelist_id':self.partner_id.property_product_pricelist and \
+ self.partner_id.property_product_pricelist.id or \
+ self.env['ir.default'].sudo().get('res.config.settings', 'parity_pricelist_id')}
+ #~ values = {
+ #~ 'pricelist_id': self.partner_id.property_product_pricelist and \
+ #~ self.partner_id.property_product_pricelist.id or False,
+ #~ 'partner_invoice_id': addr['invoice'],
+ #~ 'user_id': self.partner_id.user_id.id or self.env.uid
+ #~ }
if self.env['ir.config_parameter'].sudo().get_param('sale.use_sale_note') and \
self.env.user.company_id.sale_note:
values['note'] = self.with_context(
@@ -486,18 +492,16 @@ class HotelFolio(models.Model):
def _compute_cardex_count(self):
_logger.info('_compute_cardex_amount')
for record in self:
- if record.reservation_type == 'normal':
+ if record.reservation_type == 'normal' and record.room_lines:
write_vals = {}
- filtered_reservs = record.filtered(
- lambda x: x.room_lines.state != 'cancelled' and \
- not x.room_lines.parent_reservation)
-
+ filtered_reservs = record.room_lines.filtered(
+ lambda x: x.state != 'cancelled' and \
+ not x.parent_reservation)
mapped_cardex = filtered_reservs.mapped('cardex_ids.id')
- write_vals.update({'cardex_count': len(mapped_cardex)})
+ record.cardex_count = len(mapped_cardex)
mapped_cardex_count = filtered_reservs.mapped(
lambda x: (x.adults + x.children) - len(x.cardex_ids))
- write_vals.update({'cardex_pending_count': sum(mapped_cardex_count)})
- record.write(write_vals)
+ record.cardex_pending_count = sum(mapped_cardex_count)
"""
MAILING PROCESS
diff --git a/hotel/models/hotel_reservation.py b/hotel/models/hotel_reservation.py
index 56a00dd74..094fe6179 100644
--- a/hotel/models/hotel_reservation.py
+++ b/hotel/models/hotel_reservation.py
@@ -270,6 +270,8 @@ class HotelReservation(models.Model):
@api.model
def create(self, vals):
+ if 'room_id' not in vals:
+ vals.update(self._autoassign(vals))
vals.update(self._prepare_add_missing_fields(vals))
if 'folio_id' in vals:
folio = self.env["hotel.folio"].browse(vals['folio_id'])
@@ -332,16 +334,32 @@ class HotelReservation(models.Model):
def _prepare_add_missing_fields(self, values):
""" Deduce missing required fields from the onchange """
res = {}
- onchange_fields = ['room_id', 'pricelist_id', 'reservation_type', 'currency_id']
- if values.get('partner_id') and values.get('room_type_id') and \
- any(f not in values for f in onchange_fields):
+ onchange_fields = ['room_id', 'reservation_type', 'currency_id', 'name']
+ if values.get('room_type_id'):
line = self.new(values)
- line.onchange_room_id()
+ if any(f not in values for f in onchange_fields):
+ line.onchange_room_id()
+ line.onchange_compute_reservation_description()
+ if 'pricelist_id' not in values:
+ line.onchange_partner_id()
for field in onchange_fields:
if field not in values:
res[field] = line._fields[field].convert_to_write(line[field], line)
return res
+ @api.model
+ def _autoassign(self, values):
+ res = {}
+ checkin = values.get('checkin')
+ checkout = values.get('checkout')
+ room_type = values.get('room_type_id')
+ if checkin and checkout and room_type:
+ room_chosen = self.env['hotel.room.type'].check_availability_room(checkin, checkout, room_type)[0]
+ res.update({
+ 'room_id': room_chosen.id
+ })
+ return res
+
@api.multi
def notify_update(self, vals):
if 'checkin' in vals or \
@@ -807,11 +825,16 @@ class HotelReservation(models.Model):
@param dto: range date to
@return: array with the reservations _confirmed_ between dfrom and dto
"""
+ domain = self._get_domain_reservations_occupation(dfrom, dto)
+ return self.env['hotel.reservation'].search(domain)
+
+ @api.model
+ def _get_domain_reservations_occupation(self, dfrom, dto):
domain = [('reservation_line_ids.date', '>=', dfrom),
('reservation_line_ids.date', '<', dto),
('state', '!=', 'cancelled'),
('overbooking', '=', False)]
- return self.env['hotel.reservation'].search(domain)
+ return domain
@api.model
def get_reservations_dates(self, dfrom, dto, room_type=False):
@@ -873,11 +896,9 @@ class HotelReservation(models.Model):
def _compute_cardex_count(self):
_logger.info('_compute_cardex_count')
for record in self:
- record.write({
- 'cardex_count': len(record.cardex_ids),
- 'cardex_pending_count': (record.adults + record.children) \
+ record.cardex_count = len(record.cardex_ids)
+ record.cardex_pending_count = (record.adults + record.children) \
- len(record.cardex_ids)
- })
# https://www.odoo.com/es_ES/forum/ayuda-1/question/calculated-fields-in-search-filter-possible-118501
@api.multi
diff --git a/hotel/models/hotel_room_type.py b/hotel/models/hotel_room_type.py
index 8ce8d5f3d..7dcd4abe0 100644
--- a/hotel/models/hotel_room_type.py
+++ b/hotel/models/hotel_room_type.py
@@ -74,14 +74,12 @@ class HotelRoomType(models.Model):
reservations_rooms = reservations.mapped('room_id.id')
free_rooms = self.env['hotel.room'].search([
('id', 'not in', reservations_rooms),
- ('id', 'not in', notthis)
+ ('room_type_id.id', 'not in', notthis)
])
if room_type_id:
- room_type_id = self.env['hotel.room.type'].search([
+ rooms_linked = self.env['hotel.room.type'].search([
('id', '=', room_type_id)
- ])
- # QUESTION What linked represent? Rooms in this type ?
- rooms_linked = self.room_ids
+ ]).room_ids
free_rooms = free_rooms & rooms_linked
return free_rooms.sorted(key=lambda r: r.sequence)
diff --git a/hotel/views/hotel_folio.xml b/hotel/views/hotel_folio.xml
index be1003cce..a3a3c73a7 100644
--- a/hotel/views/hotel_folio.xml
+++ b/hotel/views/hotel_folio.xml
@@ -64,7 +64,7 @@
Checks
-
+
-
-
+