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