[WIP] Discount, Massive Changes Prices

This commit is contained in:
Dario Lodeiros
2019-01-29 18:30:34 +01:00
parent dc650fa308
commit 49b88cdb22
8 changed files with 83 additions and 51 deletions

View File

@@ -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',

View File

@@ -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', [])),