diff --git a/hotel/models/hotel_folio.py b/hotel/models/hotel_folio.py
index 39b541045..c180c89fc 100644
--- a/hotel/models/hotel_folio.py
+++ b/hotel/models/hotel_folio.py
@@ -202,7 +202,7 @@ class HotelFolio(models.Model):
compute='_amount_all', track_visibility='always')
#Checkin Fields-----------------------------------------------------
- checkin_partner_ids = fields.One2many('hotel.checkin.partner', 'reservation_id')
+ checkin_partner_ids = fields.One2many('hotel.checkin.partner', 'folio_id')
booking_pending = fields.Integer('Booking pending',
compute='_compute_checkin_partner_count')
checkin_partner_count = fields.Integer('Checkin counter',
diff --git a/hotel/models/hotel_reservation.py b/hotel/models/hotel_reservation.py
index e6912e74a..f93fab504 100644
--- a/hotel/models/hotel_reservation.py
+++ b/hotel/models/hotel_reservation.py
@@ -78,6 +78,20 @@ class HotelReservation(models.Model):
else:
return default_departure_hour
+ @api.model
+ def _default_diff_invoicing(self):
+ """
+ If the guest has an invoicing address set,
+ this method return diff_invoicing = True, else, return False
+ """
+ if 'reservation_id' in self.env.context:
+ reservation = self.env['hotel.reservation'].browse([
+ self.env.context['reservation_id']
+ ])
+ if reservation.partner_id.id == reservation.partner_invoice_id.id:
+ return False
+ return True
+
@api.depends('state', 'qty_to_invoice', 'qty_invoiced')
def _compute_invoice_status(self):
"""
@@ -172,14 +186,12 @@ class HotelReservation(models.Model):
ondelete='cascade')
checkin = fields.Date('Check In', required=True,
- default=_get_default_checkin,
- track_visibility='onchange')
+ default=_get_default_checkin)
checkout = fields.Date('Check Out', required=True,
- default=_get_default_checkout,
- track_visibility='onchange')
- real_checkin = fields.Date('Real Check In', required=True,
+ default=_get_default_checkout)
+ real_checkin = fields.Date('Arrival', required=True,
track_visibility='onchange')
- real_checkout = fields.Date('Real Check Out', required=True,
+ real_checkout = fields.Date('Departure', required=True,
track_visibility='onchange')
arrival_hour = fields.Char('Arrival Hour',
default=_get_default_arrival_hour,
@@ -203,6 +215,9 @@ class HotelReservation(models.Model):
partner_invoice_email = fields.Char(related="partner_invoice_id.email")
partner_invoice_lang = fields.Selection(related="partner_invoice_id.lang")
closure_reason_id = fields.Many2one(related='folio_id.closure_reason_id')
+ partner_invoice_type = fields.Selection(related="partner_invoice_id.type")
+ partner_invoice_parent_id = fields.Many2one(related="partner_invoice_id.parent_id")
+ partner_diff_invoicing = fields.Boolean('Bill to another Address', default='_default_diff_invoicing')
company_id = fields.Many2one(related='folio_id.company_id', string='Company', store=True, readonly=True)
reservation_line_ids = fields.One2many('hotel.reservation.line',
'reservation_id',
@@ -307,8 +322,10 @@ class HotelReservation(models.Model):
readonly=True,
store=True,
compute='_compute_amount_set')
- # FIXME discount per night
- discount = fields.Float(string='Discount (%)', digits=dp.get_precision('Discount'), default=0.0)
+ discount = fields.Float(string='Discount (€)',
+ digits=dp.get_precision('Discount'),
+ compute='_compute_discount',
+ store=True)
analytic_tag_ids = fields.Many2many('account.analytic.tag', string='Analytic Tags')
@@ -562,11 +579,14 @@ class HotelReservation(models.Model):
@api.onchange('partner_id')
def onchange_partner_id(self):
+ addr = self.partner_id.address_get(['invoice'])
pricelist = self.partner_id.property_product_pricelist and \
self.partner_id.property_product_pricelist.id or \
self.env['ir.default'].sudo().get('res.config.settings', 'default_pricelist_id')
values = {
'pricelist_id': pricelist,
+ 'partner_invoice_id': addr['invoice'],
+ 'partner_diff_invoicing': False if self.partner_id.id == addr['invoice'] else True
}
self.update(values)
@@ -666,6 +686,21 @@ class HotelReservation(models.Model):
]
return {'domain': {'room_id': domain_rooms}}
+ @api.onchange('partner_diff_invoicing')
+ def onchange_partner_diff_invoicing(self):
+ if self.partner_diff_invoicing == False:
+ self.update({'partner_invoice_id': self.partner_id.id})
+ elif self.partner_id == self.partner_invoice_id:
+ self.update({'partner_invoice_id': self.partner_id.address_get(['invoice'])['invoice'] or None})
+
+ @api.onchange('partner_invoice_id')
+ def onchange_partner_invoice_id(self):
+ if self.partner_invoice_id and not self.partner_invoice_id.parent_id and \
+ self.partner_invoice_id != self.partner_id:
+ self.update({
+ 'partner_invoice_parent_id': self.partner_id.id,
+ 'partner_invoice_type': 'invoice'})
+
@api.onchange('board_service_room_id')
def onchange_board_service(self):
if self.board_service_room_id:
@@ -742,7 +777,6 @@ class HotelReservation(models.Model):
for record in self:
record.write({
'state': 'cancelled',
- 'discount': 100.0,
})
if record.splitted:
master_reservation = record.parent_reservation or record
@@ -801,7 +835,13 @@ class HotelReservation(models.Model):
return True
return False
- @api.depends('reservation_line_ids', 'reservation_line_ids.discount', 'tax_ids')
+ @api.depends('reservation_line_ids.discount')
+ def _compute_discount(self):
+ for record in self:
+ record.discount = sum(line.price * (1 - (line.discount or 0.0) * 0.01) \
+ for line in record.reservation_line_ids)
+
+ @api.depends('reservation_line_ids.price', 'discount', 'tax_ids')
def _compute_amount_reservation(self):
"""
Compute the amounts of the reservation.
@@ -810,7 +850,7 @@ class HotelReservation(models.Model):
amount_room = sum(record.reservation_line_ids.mapped('price'))
if amount_room > 0:
product = record.room_type_id.product_id
- price = amount_room * (1 - (record.discount or 0.0) * 0.01)
+ price = amount_room - record.discount
taxes = record.tax_ids.compute_all(price, record.currency_id, 1, product=product)
record.update({
'price_tax': sum(t.get('amount', 0.0) for t in taxes.get('taxes', [])),
diff --git a/hotel/views/hotel_folio_views.xml b/hotel/views/hotel_folio_views.xml
index 820e27306..f43e8d7d2 100644
--- a/hotel/views/hotel_folio_views.xml
+++ b/hotel/views/hotel_folio_views.xml
@@ -132,6 +132,8 @@
+
@@ -140,8 +142,6 @@
-
@@ -179,10 +179,6 @@
nolabel="1" />
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+