mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[IMP] pms: wizard unify line room ids
This commit is contained in:
@@ -1,5 +1,4 @@
|
|||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from . import models
|
from . import models
|
||||||
|
from . import wizards
|
||||||
# from . import wizard
|
|
||||||
|
|||||||
@@ -63,6 +63,7 @@
|
|||||||
"views/product_template_views.xml",
|
"views/product_template_views.xml",
|
||||||
"views/webclient_templates.xml",
|
"views/webclient_templates.xml",
|
||||||
"views/ir_sequence_views.xml",
|
"views/ir_sequence_views.xml",
|
||||||
|
"wizards/wizard_reservation.xml",
|
||||||
],
|
],
|
||||||
"demo": [
|
"demo": [
|
||||||
"demo/pms_master_data.xml",
|
"demo/pms_master_data.xml",
|
||||||
|
|||||||
@@ -106,6 +106,7 @@ class PmsReservation(models.Model):
|
|||||||
# required=True,
|
# required=True,
|
||||||
)
|
)
|
||||||
priority = fields.Integer(compute="_compute_priority", store="True", index=True)
|
priority = fields.Integer(compute="_compute_priority", store="True", index=True)
|
||||||
|
|
||||||
preferred_room_id = fields.Many2one(
|
preferred_room_id = fields.Many2one(
|
||||||
"pms.room",
|
"pms.room",
|
||||||
string="Room",
|
string="Room",
|
||||||
@@ -785,6 +786,24 @@ class PmsReservation(models.Model):
|
|||||||
"target": "new",
|
"target": "new",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def open_reservation_wizard(self):
|
||||||
|
rooms_available = self.env["pms.room.type.availability"].rooms_available(
|
||||||
|
checkin=self.checkin,
|
||||||
|
checkout=self.checkout,
|
||||||
|
current_lines=self.reservation_line_ids.ids,
|
||||||
|
)
|
||||||
|
# REVIEW: check capacity room
|
||||||
|
return {
|
||||||
|
'view_type': 'form',
|
||||||
|
'view_mode': 'form',
|
||||||
|
'name': 'Unify the reservation',
|
||||||
|
'res_model': 'pms.reservation.wizard',
|
||||||
|
'target': 'new',
|
||||||
|
'type': 'ir.actions.act_window',
|
||||||
|
'context': {'rooms_available': rooms_available.ids,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# ORM Overrides
|
# ORM Overrides
|
||||||
@api.model
|
@api.model
|
||||||
def name_search(self, name="", args=None, operator="ilike", limit=100):
|
def name_search(self, name="", args=None, operator="ilike", limit=100):
|
||||||
|
|||||||
@@ -123,7 +123,6 @@ class PmsReservationLine(models.Model):
|
|||||||
# otherwise we assign the first of those available for the entire stay
|
# otherwise we assign the first of those available for the entire stay
|
||||||
else:
|
else:
|
||||||
line.room_id = rooms_available[0]
|
line.room_id = rooms_available[0]
|
||||||
line.reservation_id.preferred_room_id = line.room_id.id
|
|
||||||
|
|
||||||
# if there is no availability for the entire stay without changing rooms (we assume a split reservation)
|
# if there is no availability for the entire stay without changing rooms (we assume a split reservation)
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -47,3 +47,4 @@ manager_access_pms_board_service_line,manager_access_pms_board_service_line,mode
|
|||||||
manager_access_property,manager_access_property,model_pms_property,pms.group_pms_manager,1,1,1,1
|
manager_access_property,manager_access_property,model_pms_property,pms.group_pms_manager,1,1,1,1
|
||||||
manager_access_pms_cancelation_rule,manager_access_pms_cancelation_rule,model_pms_cancelation_rule,pms.group_pms_manager,1,1,1,1
|
manager_access_pms_cancelation_rule,manager_access_pms_cancelation_rule,model_pms_cancelation_rule,pms.group_pms_manager,1,1,1,1
|
||||||
manager_access_availability,manager_access_availability,model_pms_room_type_availability,pms.group_pms_manager,1,1,1,1
|
manager_access_availability,manager_access_availability,model_pms_room_type_availability,pms.group_pms_manager,1,1,1,1
|
||||||
|
user_access_pms_reservation_wizard,user_access_pms_reservation_wizard,model_pms_reservation_wizard,pms.group_pms_user,1,1,1,1
|
||||||
|
|||||||
|
@@ -377,7 +377,7 @@ class TestPmsReservations(TestHotel):
|
|||||||
@freeze_time("1980-11-01")
|
@freeze_time("1980-11-01")
|
||||||
def test_split_reservation06(self):
|
def test_split_reservation06(self):
|
||||||
"""
|
"""
|
||||||
The preferred room_id is not available
|
There's no availability in the preferred_room_id provided
|
||||||
+------------+------+------+------+----+----+----+
|
+------------+------+------+------+----+----+----+
|
||||||
| room/date | 01 | 02 | 03 | 04 | 05 | 06 |
|
| room/date | 01 | 02 | 03 | 04 | 05 | 06 |
|
||||||
+------------+------+------+------+----+----+----+
|
+------------+------+------+------+----+----+----+
|
||||||
@@ -419,7 +419,7 @@ class TestPmsReservations(TestHotel):
|
|||||||
@freeze_time("1980-11-01")
|
@freeze_time("1980-11-01")
|
||||||
def test_split_reservation07(self):
|
def test_split_reservation07(self):
|
||||||
"""
|
"""
|
||||||
The preferred room_type_id is not available
|
There's no availability
|
||||||
+------------+------+------+------+----+----+----+
|
+------------+------+------+------+----+----+----+
|
||||||
| room/date | 01 | 02 | 03 | 04 | 05 | 06 |
|
| room/date | 01 | 02 | 03 | 04 | 05 | 06 |
|
||||||
+------------+------+------+------+----+----+----+
|
+------------+------+------+------+----+----+----+
|
||||||
|
|||||||
@@ -66,14 +66,13 @@
|
|||||||
style="margin-bottom:0px;"
|
style="margin-bottom:0px;"
|
||||||
attrs="{'invisible': [('splitted','=',False)]}"
|
attrs="{'invisible': [('splitted','=',False)]}"
|
||||||
>
|
>
|
||||||
This reservation is part of splitted reservation!, you can check it
|
This reservation is part of splitted reservation, you can try to unify the reservation here
|
||||||
in the
|
|
||||||
<bold>
|
<bold>
|
||||||
<button
|
<button
|
||||||
class="alert-link"
|
class="alert-link"
|
||||||
type="object"
|
type="object"
|
||||||
name="open_folio"
|
name="open_reservation_wizard"
|
||||||
string="Folio Form"
|
string="Unify the reservation"
|
||||||
/>
|
/>
|
||||||
</bold>
|
</bold>
|
||||||
</div>
|
</div>
|
||||||
@@ -167,8 +166,10 @@
|
|||||||
options="{'no_create': True,'no_open': True}"
|
options="{'no_create': True,'no_open': True}"
|
||||||
placeholder="Room"
|
placeholder="Room"
|
||||||
style="margin-right: 30px;"
|
style="margin-right: 30px;"
|
||||||
required='1'
|
attrs="{'invisible': [('splitted','=',True)]}"
|
||||||
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<field
|
<field
|
||||||
name="partner_id"
|
name="partner_id"
|
||||||
default_focus="1"
|
default_focus="1"
|
||||||
|
|||||||
1
pms/wizards/__init__.py
Normal file
1
pms/wizards/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from . import wizard_reservation
|
||||||
18
pms/wizards/wizard_reservation.py
Normal file
18
pms/wizards/wizard_reservation.py
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
from odoo import models, fields
|
||||||
|
|
||||||
|
class ReservationWizard(models.TransientModel):
|
||||||
|
_name = 'pms.reservation.wizard'
|
||||||
|
allowed_rooms = fields.One2many('pms.room', compute="_compute_allowed_rooms")
|
||||||
|
options = fields.Many2one('pms.room', string='Room')
|
||||||
|
|
||||||
|
def _compute_allowed_rooms(self):
|
||||||
|
for record in self:
|
||||||
|
record.allowed_rooms = self._context.get('rooms_available')
|
||||||
|
|
||||||
|
def unify(self):
|
||||||
|
if self.options:
|
||||||
|
for record in self:
|
||||||
|
for line in self.env['pms.reservation'].search([('id', '=', self._context.get('active_id'))]).reservation_line_ids:
|
||||||
|
line.room_id = self.options
|
||||||
|
|
||||||
24
pms/wizards/wizard_reservation.xml
Normal file
24
pms/wizards/wizard_reservation.xml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" ?>
|
||||||
|
<odoo>
|
||||||
|
<record id="reservation_wizard" model="ir.ui.view">
|
||||||
|
<field name="name">Reservation Wizard</field>
|
||||||
|
<field name="model">pms.reservation.wizard</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form string="Choose The Details">
|
||||||
|
<group>
|
||||||
|
<field name="options"
|
||||||
|
string="Suggested rooms to unify the reservation:"
|
||||||
|
options="{'no_create': True,'no_open': True}"
|
||||||
|
required="1"
|
||||||
|
domain="[('id', 'in', allowed_rooms)]"/>
|
||||||
|
<field name="allowed_rooms" invisible="1"/>
|
||||||
|
</group>
|
||||||
|
<footer>
|
||||||
|
<button name="unify" string="Unify" type="object" class="oe_highlight" />
|
||||||
|
or
|
||||||
|
<button string="Cancel" class="oe_link" special="cancel"/>
|
||||||
|
</footer>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
</odoo>
|
||||||
Reference in New Issue
Block a user