mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[ADD] Price in service lines
This commit is contained in:
@@ -142,6 +142,7 @@ class HotelFolio(models.Model):
|
||||
channel_type = fields.Selection([('door', 'Door'),
|
||||
('mail', 'Mail'),
|
||||
('phone', 'Phone'),
|
||||
('call', 'Call Center'),
|
||||
('web', 'Web')], 'Sales Channel', default='door')
|
||||
user_id = fields.Many2one('res.users', string='Salesperson', index=True,
|
||||
track_visibility='onchange', default=lambda self: self.env.user)
|
||||
|
||||
@@ -78,6 +78,11 @@ class HotelReservation(models.Model):
|
||||
else:
|
||||
return default_departure_hour
|
||||
|
||||
@api.multi
|
||||
def set_call_center_user(self):
|
||||
user = self.env['res.users'].browse(self.env.uid)
|
||||
return user.has_group('hotel.group_hotel_call')
|
||||
|
||||
@api.model
|
||||
def _default_diff_invoicing(self):
|
||||
"""
|
||||
@@ -270,6 +275,7 @@ class HotelReservation(models.Model):
|
||||
related='folio_id.internal_comment')
|
||||
preconfirm = fields.Boolean('Auto confirm to Save', default=True)
|
||||
to_send = fields.Boolean('To Send', default=True)
|
||||
call_center = fields.Boolean(default='set_call_center_user')
|
||||
has_confirmed_reservations_to_send = fields.Boolean(
|
||||
related='folio_id.has_confirmed_reservations_to_send',
|
||||
readonly=True)
|
||||
@@ -352,6 +358,12 @@ class HotelReservation(models.Model):
|
||||
if 'service_ids' in vals and vals['service_ids'][0][2]:
|
||||
for service in vals['service_ids']:
|
||||
service[2]['folio_id'] = folio.id
|
||||
user = self.env['res.users'].browse(self.env.uid)
|
||||
if user.has_group('hotel.group_hotel_call'):
|
||||
vals.update({
|
||||
'to_assign': True,
|
||||
'channel_type': 'call'
|
||||
})
|
||||
vals.update({
|
||||
'last_updated_res': fields.Datetime.now(),
|
||||
})
|
||||
@@ -427,10 +439,15 @@ class HotelReservation(models.Model):
|
||||
persons=service.ser_room_line.adults,
|
||||
old_line_days=service.service_line_ids
|
||||
))
|
||||
if ('checkin' in vals and record.checkin != vals['checkin']) or \
|
||||
('checkout' in vals and record.checkout != vals['checkout']) or \
|
||||
('state' in vals and record.state != vals['state']):
|
||||
if ('checkin' in vals and record.checkin != vals['checkin']) or\
|
||||
('checkout' in vals and record.checkout != vals['checkout']) or\
|
||||
('state' in vals and record.state != vals['state']):
|
||||
record.update({'to_send': True})
|
||||
user = self.env['res.users'].browse(self.env.uid)
|
||||
if user.has_group('hotel.group_hotel_call'):
|
||||
vals.update({
|
||||
'to_assign': True,
|
||||
})
|
||||
res = super(HotelReservation, self).write(vals)
|
||||
return res
|
||||
|
||||
@@ -760,8 +777,11 @@ class HotelReservation(models.Model):
|
||||
'''
|
||||
_logger.info('confirm')
|
||||
hotel_reserv_obj = self.env['hotel.reservation']
|
||||
user = self.env['res.users'].browse(self.env.uid)
|
||||
for record in self:
|
||||
vals = {}
|
||||
if user.has_group('hotel.group_hotel_call'):
|
||||
vals.update({'channel_type': 'call'})
|
||||
if record.checkin_partner_ids:
|
||||
vals.update({'state': 'booking'})
|
||||
else:
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
from odoo import models, fields, api, _
|
||||
from odoo.addons import decimal_precision as dp
|
||||
from odoo.exceptions import ValidationError
|
||||
from datetime import date
|
||||
|
||||
class HotelReservationLine(models.Model):
|
||||
_name = "hotel.reservation.line"
|
||||
|
||||
@@ -14,6 +14,26 @@ class HotelServiceLine(models.Model):
|
||||
date = fields.Date('Date')
|
||||
day_qty = fields.Integer('Units')
|
||||
product_id = fields.Many2one(related='service_id.product_id', store=True)
|
||||
price_total = fields.Float('Price Total',
|
||||
compute='_compute_price_total',
|
||||
store=True)
|
||||
price_unit = fields.Float('Unit Price',
|
||||
related="service_id.price_unit",
|
||||
readonly=True,
|
||||
store=True)
|
||||
discount = fields.Float('Discount',
|
||||
related="service_id.discount",
|
||||
readonly=True,
|
||||
store=True)
|
||||
tax_ids = fields.Many2many('account.tax',
|
||||
string='Taxes',
|
||||
related="service_id.tax_ids",
|
||||
readonly="True")
|
||||
|
||||
@api.depends('day_qty', 'service_id.price_total')
|
||||
def _compute_price_total(self):
|
||||
for record in self:
|
||||
record.price_total = (record.service_id.price_total * record.day_qty) / record.service_id.product_qty
|
||||
|
||||
@api.constrains('day_qty')
|
||||
def no_free_resources(self):
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
<field name="product_id" />
|
||||
<field name="day_qty"/>
|
||||
<field name="date" />
|
||||
<field name="price_unit" />
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
@@ -37,9 +38,13 @@
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Service By Day">
|
||||
<field name="product_id" />
|
||||
<field name="day_qty"/>
|
||||
<field name="date" />
|
||||
<field name="day_qty"/>
|
||||
<field name="price_unit" />
|
||||
<field name="service_id" />
|
||||
<field name="tax_ids" widget="many2many_tags"/>
|
||||
<field name="discount" />
|
||||
<field name="price_total" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
@@ -96,7 +101,7 @@
|
||||
res_model="hotel.service.line"
|
||||
view_mode="tree,form"
|
||||
view_id = "hotel.hotel_service_line_report_view_tree" />
|
||||
|
||||
|
||||
<menuitem
|
||||
id="menu_hotel_service_line"
|
||||
name="Services by Day"
|
||||
|
||||
@@ -85,7 +85,8 @@ class FolioWizard(models.TransientModel):
|
||||
channel_type = fields.Selection([
|
||||
('door', 'Door'),
|
||||
('mail', 'Mail'),
|
||||
('phone', 'Phone')
|
||||
('phone', 'Phone'),
|
||||
('call', 'Call')
|
||||
], string='Sales Channel', default=_get_default_channel_type)
|
||||
room_type_wizard_ids = fields.One2many('hotel.room.type.wizard',
|
||||
'folio_wizard_id',
|
||||
|
||||
Reference in New Issue
Block a user