mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[RFC] Renaming pms_wizard_folio to pms_booking_engine
This commit is contained in:
@@ -41,7 +41,7 @@
|
||||
"data/menus.xml",
|
||||
"wizards/wizard_payment_folio.xml",
|
||||
"wizards/folio_make_invoice_advance_views.xml",
|
||||
"wizards/wizard_folio.xml",
|
||||
"wizards/pms_booking_engine_views.xml",
|
||||
"wizards/wizard_folio_changes.xml",
|
||||
"views/pms_amenity_views.xml",
|
||||
"views/pms_amenity_type_views.xml",
|
||||
|
||||
@@ -987,7 +987,7 @@ class PmsFolio(models.Model):
|
||||
def _check_required_partner_name(self):
|
||||
for record in self:
|
||||
if not record.partner_name:
|
||||
raise models.ValidationError(_("You musyt assign a customer name"))
|
||||
raise models.ValidationError(_("You must assign a customer name"))
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
|
||||
@@ -1518,7 +1518,7 @@ class PmsReservation(models.Model):
|
||||
folio = self.env["pms.folio"].browse(vals["folio_id"])
|
||||
default_vals = {"pms_property_id": folio.pms_property_id.id}
|
||||
if folio.partner_id:
|
||||
default_vals["partner_id"] = folio.partner_id
|
||||
default_vals["partner_id"] = folio.partner_id.id
|
||||
elif folio.partner_name:
|
||||
default_vals["partner_name"] = folio.partner_name
|
||||
default_vals["partner_mobile"] = folio.mobile
|
||||
|
||||
@@ -53,7 +53,7 @@ user_access_pms_reservation_split_join_swap_wizard,user_access_pms_reservation_s
|
||||
user_access_pms_wizard_reservation_lines_split,user_access_pms_wizard_reservation_lines_split,model_pms_wizard_reservation_lines_split,pms.group_pms_user,1,1,1,1
|
||||
user_access_pms_massive_changes_wizard,user_access_pms_massive_changes_wizard,model_pms_massive_changes_wizard,pms.group_pms_user,1,1,1,1
|
||||
user_access_pms_advanced_filters_wizard,user_access_pms_advanced_filters_wizard,model_pms_advanced_filters_wizard,pms.group_pms_user,1,1,1,1
|
||||
user_access_pms_folio_wizard,user_access_pms_folio_wizard,model_pms_folio_wizard,pms.group_pms_user,1,1,1,1
|
||||
user_access_pms_booking_engine,user_access_pms_booking_engine,model_pms_booking_engine,pms.group_pms_user,1,1,1,1
|
||||
user_access_pms_folio_availability_wizard,user_access_pms_folio_availability_wizard,model_pms_folio_availability_wizard,pms.group_pms_user,1,1,1,1
|
||||
user_access_pms_num_rooms_selection,user_access_pms_num_rooms_selection,model_pms_num_rooms_selection,pms.group_pms_user,1,1,1,1
|
||||
user_access_pms_folio_sale_line,user_access_pms_folio_sale_line,model_folio_sale_line,pms.group_pms_user,1,0,0,0
|
||||
|
||||
|
@@ -11,7 +11,7 @@ odoo.define("booking.engine.tree", function (require) {
|
||||
self.do_action({
|
||||
name: "Booking Engine",
|
||||
type: "ir.actions.act_window",
|
||||
res_model: "pms.folio.wizard",
|
||||
res_model: "pms.booking.engine",
|
||||
target: "new",
|
||||
views: [[false, "form"]],
|
||||
context: {is_modal: true},
|
||||
|
||||
@@ -29,7 +29,7 @@ from . import test_pms_room_type
|
||||
from . import test_pms_room_type_class
|
||||
from . import test_pms_board_service
|
||||
from . import test_pms_wizard_massive_changes
|
||||
from . import test_pms_wizard_folio
|
||||
from . import test_pms_booking_engine
|
||||
from . import test_pms_res_users
|
||||
from . import test_pms_amenity
|
||||
from . import test_pms_room
|
||||
|
||||
@@ -202,7 +202,7 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
]
|
||||
|
||||
# create folio wizard with partner id => pricelist & start-end dates
|
||||
wizard_folio = self.env["pms.folio.wizard"].create(
|
||||
booking_engine = self.env["pms.booking.engine"].create(
|
||||
{
|
||||
"start_date": checkin,
|
||||
"end_date": checkout,
|
||||
@@ -213,7 +213,7 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
)
|
||||
|
||||
# force pricelist load
|
||||
wizard_folio.flush()
|
||||
booking_engine.flush()
|
||||
|
||||
# availability items belonging to test property
|
||||
lines_availability_test = self.env["pms.folio.availability.wizard"].search(
|
||||
@@ -234,11 +234,11 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
for discount in discounts:
|
||||
with self.subTest(k=discount):
|
||||
# ACT
|
||||
wizard_folio.discount = discount["discount"]
|
||||
booking_engine.discount = discount["discount"]
|
||||
|
||||
# ASSERT
|
||||
self.assertEqual(
|
||||
wizard_folio.total_price_folio,
|
||||
booking_engine.total_price_folio,
|
||||
discount["expected_price"],
|
||||
"The total price calculation is wrong",
|
||||
)
|
||||
@@ -284,7 +284,7 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
pricelist_item.flush()
|
||||
|
||||
# create folio wizard with partner id => pricelist & start-end dates
|
||||
wizard_folio = self.env["pms.folio.wizard"].create(
|
||||
booking_engine = self.env["pms.booking.engine"].create(
|
||||
{
|
||||
"start_date": checkin,
|
||||
"end_date": checkout,
|
||||
@@ -293,7 +293,7 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
"pms_property_id": self.test_property.id,
|
||||
}
|
||||
)
|
||||
wizard_folio.flush()
|
||||
booking_engine.flush()
|
||||
|
||||
# availability items belonging to test property
|
||||
lines_availability_test = self.env["pms.folio.availability.wizard"].search(
|
||||
@@ -315,7 +315,7 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
|
||||
# ASSERT
|
||||
self.assertEqual(
|
||||
wizard_folio.total_price_folio,
|
||||
booking_engine.total_price_folio,
|
||||
expected_price_total,
|
||||
"The total price calculation is wrong",
|
||||
)
|
||||
@@ -355,7 +355,7 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
# pricelist_item.flush()
|
||||
|
||||
# # create folio wizard with partner id => pricelist & start-end dates
|
||||
# wizard_folio = self.env["pms.folio.wizard"].create(
|
||||
# booking_engine = self.env["pms.booking.engine"].create(
|
||||
# {
|
||||
# "start_date": checkin,
|
||||
# "end_date": checkout,
|
||||
@@ -363,7 +363,7 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
# "pricelist_id": self.test_pricelist.id,
|
||||
# }
|
||||
# )
|
||||
# wizard_folio.flush()
|
||||
# booking_engine.flush()
|
||||
|
||||
# # availability items belonging to test property
|
||||
# lines_availability_test = self.env["pms.folio.availability.wizard"].search(
|
||||
@@ -395,7 +395,7 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
|
||||
# # ASSERT
|
||||
# self.assertEqual(
|
||||
# wizard_folio.total_price_folio,
|
||||
# booking_engine.total_price_folio,
|
||||
# tc["expected_price"],
|
||||
# "The total price calculation is wrong",
|
||||
# )
|
||||
@@ -413,7 +413,7 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
checkout = fields.date.today() + datetime.timedelta(days=1)
|
||||
|
||||
# create folio wizard with partner id => pricelist & start-end dates
|
||||
wizard_folio = self.env["pms.folio.wizard"].create(
|
||||
booking_engine = self.env["pms.booking.engine"].create(
|
||||
{
|
||||
"start_date": checkin,
|
||||
"end_date": checkout,
|
||||
@@ -422,7 +422,7 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
"pms_property_id": self.test_property.id,
|
||||
}
|
||||
)
|
||||
wizard_folio.flush()
|
||||
booking_engine.flush()
|
||||
|
||||
# availability items belonging to test property
|
||||
lines_availability_test = self.env["pms.folio.availability.wizard"].search(
|
||||
@@ -440,7 +440,7 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
lines_availability_test[0].num_rooms_selected = value
|
||||
|
||||
# ACT
|
||||
wizard_folio.create_folio()
|
||||
booking_engine.create_folio()
|
||||
|
||||
# ASSERT
|
||||
folio = self.env["pms.folio"].search_count(
|
||||
@@ -462,7 +462,7 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
checkout = fields.date.today() + datetime.timedelta(days=1)
|
||||
|
||||
# create folio wizard with partner id => pricelist & start-end dates
|
||||
wizard_folio = self.env["pms.folio.wizard"].create(
|
||||
booking_engine = self.env["pms.booking.engine"].create(
|
||||
{
|
||||
"start_date": checkin,
|
||||
"end_date": checkout,
|
||||
@@ -471,7 +471,7 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
"pms_property_id": self.test_property.id,
|
||||
}
|
||||
)
|
||||
wizard_folio.flush()
|
||||
booking_engine.flush()
|
||||
|
||||
# availability items belonging to test property
|
||||
lines_availability_test = self.env["pms.folio.availability.wizard"].search(
|
||||
@@ -489,10 +489,10 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
lines_availability_test[0].num_rooms_selected = value
|
||||
lines_availability_test[0].value_num_rooms_selected = 2
|
||||
lines_availability_test.flush()
|
||||
wizard_folio.flush()
|
||||
booking_engine.flush()
|
||||
|
||||
# ACT
|
||||
wizard_folio.create_folio()
|
||||
booking_engine.create_folio()
|
||||
|
||||
folio = self.env["pms.folio"].search([("partner_id", "=", self.partner_id.id)])
|
||||
folio.flush()
|
||||
@@ -513,7 +513,7 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
checkout = fields.date.today() + datetime.timedelta(days=1)
|
||||
|
||||
# create folio wizard with partner id => pricelist & start-end dates
|
||||
wizard_folio = self.env["pms.folio.wizard"].create(
|
||||
booking_engine = self.env["pms.booking.engine"].create(
|
||||
{
|
||||
"start_date": checkin,
|
||||
"end_date": checkout,
|
||||
@@ -522,7 +522,7 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
"pms_property_id": self.test_property.id,
|
||||
}
|
||||
)
|
||||
wizard_folio.flush()
|
||||
booking_engine.flush()
|
||||
|
||||
# availability items belonging to test property
|
||||
lines_availability_test = self.env["pms.folio.availability.wizard"].search(
|
||||
@@ -541,7 +541,7 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
lines_availability_test[0].value_num_rooms_selected = 1
|
||||
|
||||
# ACT
|
||||
wizard_folio.create_folio()
|
||||
booking_engine.create_folio()
|
||||
vals = {
|
||||
"partner_id": self.partner_id.id,
|
||||
"pricelist_id": self.test_pricelist.id,
|
||||
@@ -570,7 +570,7 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
checkout = fields.date.today() + datetime.timedelta(days=1)
|
||||
|
||||
# create folio wizard with partner id => pricelist & start-end dates
|
||||
wizard_folio = self.env["pms.folio.wizard"].create(
|
||||
booking_engine = self.env["pms.booking.engine"].create(
|
||||
{
|
||||
"start_date": checkin,
|
||||
"end_date": checkout,
|
||||
@@ -579,7 +579,7 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
"pms_property_id": self.test_property.id,
|
||||
}
|
||||
)
|
||||
wizard_folio.flush()
|
||||
booking_engine.flush()
|
||||
|
||||
# availability items belonging to test property
|
||||
lines_availability_test = self.env["pms.folio.availability.wizard"].search(
|
||||
@@ -598,7 +598,7 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
lines_availability_test[0].value_num_rooms_selected = 1
|
||||
|
||||
# ACT
|
||||
wizard_folio.create_folio()
|
||||
booking_engine.create_folio()
|
||||
|
||||
folio = self.env["pms.folio"].search([("partner_id", "=", self.partner_id.id)])
|
||||
|
||||
@@ -639,7 +639,7 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
discount = 0.5
|
||||
|
||||
# create folio wizard with partner id => pricelist & start-end dates
|
||||
wizard_folio = self.env["pms.folio.wizard"].create(
|
||||
booking_engine = self.env["pms.booking.engine"].create(
|
||||
{
|
||||
"start_date": checkin,
|
||||
"end_date": checkout,
|
||||
@@ -649,7 +649,7 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
"pms_property_id": self.test_property.id,
|
||||
}
|
||||
)
|
||||
wizard_folio.flush()
|
||||
booking_engine.flush()
|
||||
|
||||
# availability items belonging to test property
|
||||
lines_availability_test = self.env["pms.folio.availability.wizard"].search(
|
||||
@@ -668,7 +668,7 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
lines_availability_test[0].value_num_rooms_selected = 1
|
||||
|
||||
# ACT
|
||||
wizard_folio.create_folio()
|
||||
booking_engine.create_folio()
|
||||
|
||||
folio = self.env["pms.folio"].search([("partner_id", "=", self.partner_id.id)])
|
||||
|
||||
@@ -705,7 +705,7 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
)
|
||||
|
||||
# create folio wizard with partner id => pricelist & start-end dates
|
||||
wizard_folio = self.env["pms.folio.wizard"].create(
|
||||
booking_engine = self.env["pms.booking.engine"].create(
|
||||
{
|
||||
"start_date": checkin,
|
||||
"end_date": checkout,
|
||||
@@ -714,9 +714,9 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
"pms_property_id": self.test_property.id,
|
||||
}
|
||||
)
|
||||
wizard_folio.flush()
|
||||
booking_engine.flush()
|
||||
|
||||
room_type_plan_avail = wizard_folio.availability_results.filtered(
|
||||
room_type_plan_avail = booking_engine.availability_results.filtered(
|
||||
lambda r: r.room_type_id.id == self.test_room_type_double.id
|
||||
).num_rooms_available
|
||||
|
||||
@@ -747,7 +747,7 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
)
|
||||
|
||||
# create folio wizard with partner id => pricelist & start-end dates
|
||||
wizard_folio = self.env["pms.folio.wizard"].create(
|
||||
booking_engine = self.env["pms.booking.engine"].create(
|
||||
{
|
||||
"start_date": checkin,
|
||||
"end_date": checkout,
|
||||
@@ -756,9 +756,9 @@ class TestPmsWizardMassiveChanges(common.SavepointCase):
|
||||
"pms_property_id": self.test_property.id,
|
||||
}
|
||||
)
|
||||
wizard_folio.flush()
|
||||
booking_engine.flush()
|
||||
|
||||
room_type_plan_avail = wizard_folio.availability_results.filtered(
|
||||
room_type_plan_avail = booking_engine.availability_results.filtered(
|
||||
lambda r: r.room_type_id.id == self.test_room_type_double.id
|
||||
).num_rooms_available
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
<button
|
||||
type="action"
|
||||
class="oe_stat_button"
|
||||
name="%(action_wizard_folio)d"
|
||||
name="%(action_booking_engine)d"
|
||||
icon="fa-users"
|
||||
context="{'default_folio_id': id, 'default_partner_id': partner_id, 'default_pricelist_id': pricelist_id}"
|
||||
>
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
from . import wizard_split_join_swap_reservation
|
||||
from . import wizard_massive_changes
|
||||
from . import wizard_advanced_filters
|
||||
from . import wizard_folio
|
||||
from . import wizard_folio_availability
|
||||
from . import pms_booking_engine
|
||||
from . import folio_make_invoice_advance
|
||||
from . import wizard_payment_folio
|
||||
from . import wizard_folio_changes
|
||||
|
||||
@@ -3,8 +3,8 @@ import datetime
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class FolioWizard(models.TransientModel):
|
||||
_name = "pms.folio.wizard"
|
||||
class BookingEngine(models.TransientModel):
|
||||
_name = "pms.booking.engine"
|
||||
_description = "Booking engine"
|
||||
_check_pms_properties_auto = True
|
||||
|
||||
@@ -58,7 +58,7 @@ class FolioWizard(models.TransientModel):
|
||||
readonly=False,
|
||||
store=True,
|
||||
comodel_name="pms.folio.availability.wizard",
|
||||
inverse_name="folio_wizard_id",
|
||||
inverse_name="booking_engine_id",
|
||||
compute="_compute_availability_results",
|
||||
check_pms_properties=True,
|
||||
)
|
||||
@@ -162,7 +162,7 @@ class FolioWizard(models.TransientModel):
|
||||
0,
|
||||
0,
|
||||
{
|
||||
"folio_wizard_id": record.id,
|
||||
"booking_engine_id": record.id,
|
||||
"checkin": record.start_date,
|
||||
"checkout": record.end_date,
|
||||
"room_type_id": room_type_iterator.id,
|
||||
@@ -215,3 +215,168 @@ class FolioWizard(models.TransientModel):
|
||||
action["views"] = [(self.env.ref("pms.pms_folio_view_form").id, "form")]
|
||||
action["res_id"] = folio.id
|
||||
return action
|
||||
|
||||
|
||||
class NumRoomsSelectionModel(models.TransientModel):
|
||||
_name = "pms.num.rooms.selection"
|
||||
_description = "Dinamic Selection based on avails room"
|
||||
_rec_name = "value"
|
||||
|
||||
value = fields.Integer()
|
||||
room_type_id = fields.Char()
|
||||
booking_engine_id = fields.One2many(
|
||||
comodel_name="pms.folio.availability.wizard",
|
||||
inverse_name="id",
|
||||
)
|
||||
|
||||
|
||||
class AvailabilityWizard(models.TransientModel):
|
||||
_name = "pms.folio.availability.wizard"
|
||||
_description = "Room type line in Booking Engine"
|
||||
_check_pms_properties_auto = True
|
||||
|
||||
booking_engine_id = fields.Many2one(
|
||||
string="Folio Wizard ID",
|
||||
comodel_name="pms.booking.engine",
|
||||
)
|
||||
checkin = fields.Date(
|
||||
string="From:",
|
||||
help="Date Reservation starts ",
|
||||
required=True,
|
||||
)
|
||||
checkout = fields.Date(
|
||||
string="To:",
|
||||
help="Date Reservation ends",
|
||||
required=True,
|
||||
)
|
||||
room_type_id = fields.Many2one(
|
||||
string="Room Type",
|
||||
help="Room Type reserved",
|
||||
comodel_name="pms.room.type",
|
||||
check_pms_properties=True,
|
||||
)
|
||||
|
||||
num_rooms_available = fields.Integer(
|
||||
string="Available rooms",
|
||||
help="Number of rooms that are available",
|
||||
store="true",
|
||||
compute="_compute_num_rooms_available",
|
||||
)
|
||||
num_rooms_selected = fields.Many2one(
|
||||
string="Selected rooms",
|
||||
readonly=False,
|
||||
store=True,
|
||||
comodel_name="pms.num.rooms.selection",
|
||||
domain="[('value', '<=', num_rooms_available), "
|
||||
"('room_type_id', '=', room_type_id)]",
|
||||
compute="_compute_num_rooms_selected",
|
||||
)
|
||||
value_num_rooms_selected = fields.Integer(
|
||||
string="Number of Rooms Selected",
|
||||
readonly=False,
|
||||
store=True,
|
||||
compute="_compute_value_num_rooms_selected",
|
||||
)
|
||||
price_per_room = fields.Float(
|
||||
string="Price per room",
|
||||
help="Price per room in folio",
|
||||
compute="_compute_price_per_room",
|
||||
)
|
||||
price_total = fields.Float(
|
||||
string="Total price",
|
||||
help="The total price in the folio",
|
||||
compute="_compute_price_total",
|
||||
)
|
||||
pms_property_id = fields.Many2one(
|
||||
string="Property",
|
||||
help="Propertiy with access to the element;",
|
||||
related="booking_engine_id.pms_property_id",
|
||||
)
|
||||
board_service_room_id = fields.Many2one(
|
||||
string="Board Service",
|
||||
help="Board Service included in the room",
|
||||
comodel_name="pms.board.service.room.type",
|
||||
domain="[('pms_room_type_id','=',room_type_id)]",
|
||||
check_pms_properties=True,
|
||||
)
|
||||
|
||||
@api.depends("room_type_id", "checkin", "checkout")
|
||||
def _compute_num_rooms_available(self):
|
||||
for record in self:
|
||||
record.num_rooms_available = self.env[
|
||||
"pms.availability.plan"
|
||||
].get_count_rooms_available(
|
||||
record.checkin,
|
||||
record.checkout,
|
||||
room_type_id=record.room_type_id.id,
|
||||
pricelist_id=record.booking_engine_id.pricelist_id.id,
|
||||
pms_property_id=record.booking_engine_id.pms_property_id.id,
|
||||
)
|
||||
|
||||
@api.depends("num_rooms_available")
|
||||
def _compute_num_rooms_selected(self):
|
||||
for record in self:
|
||||
for elem_to_insert in range(0, record.num_rooms_available + 1):
|
||||
if (
|
||||
self.env["pms.num.rooms.selection"].search_count(
|
||||
[
|
||||
("value", "=", elem_to_insert),
|
||||
("room_type_id", "=", record.room_type_id.id),
|
||||
]
|
||||
)
|
||||
== 0
|
||||
):
|
||||
self.env["pms.num.rooms.selection"].create(
|
||||
{
|
||||
"value": elem_to_insert,
|
||||
"room_type_id": record.room_type_id.id,
|
||||
}
|
||||
)
|
||||
record.num_rooms_selected = self.env["pms.num.rooms.selection"].search(
|
||||
[("value", "=", 0), ("room_type_id", "=", record.room_type_id.id)]
|
||||
)
|
||||
|
||||
@api.depends("num_rooms_selected")
|
||||
def _compute_value_num_rooms_selected(self):
|
||||
for record in self:
|
||||
if record.num_rooms_selected and record.num_rooms_selected.value:
|
||||
record.value_num_rooms_selected = record.num_rooms_selected.value
|
||||
elif not record.value_num_rooms_selected:
|
||||
record.value_num_rooms_selected = 0
|
||||
|
||||
@api.depends("room_type_id", "board_service_room_id", "checkin", "checkout")
|
||||
def _compute_price_per_room(self):
|
||||
for record in self:
|
||||
room_type_total_price_per_room = 0
|
||||
|
||||
for date_iterator in [
|
||||
record.checkin + datetime.timedelta(days=x)
|
||||
for x in range(0, (record.checkout - record.checkin).days)
|
||||
]:
|
||||
|
||||
partner = record.booking_engine_id.partner_id
|
||||
product = record.room_type_id.product_id
|
||||
product = product.with_context(
|
||||
lang=partner.lang,
|
||||
partner=partner.id,
|
||||
quantity=1,
|
||||
date=fields.Date.today(),
|
||||
consumption_date=date_iterator,
|
||||
pricelist=record.booking_engine_id.pricelist_id.id,
|
||||
uom=product.uom_id.id,
|
||||
property=record.booking_engine_id.pms_property_id.id,
|
||||
)
|
||||
room_type_total_price_per_room += product.price
|
||||
|
||||
if record.board_service_room_id:
|
||||
nights = (record.checkout - record.checkin).days
|
||||
room_type_total_price_per_room += (
|
||||
record.board_service_room_id.amount * nights
|
||||
)
|
||||
|
||||
record.price_per_room = room_type_total_price_per_room
|
||||
|
||||
@api.depends("price_per_room", "value_num_rooms_selected")
|
||||
def _compute_price_total(self):
|
||||
for record in self:
|
||||
record.price_total = record.price_per_room * record.value_num_rooms_selected
|
||||
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" ?>
|
||||
<odoo>
|
||||
<record id="folio_wizard" model="ir.ui.view">
|
||||
<record id="booking_engine" model="ir.ui.view">
|
||||
<field name="name">Folio Wizard</field>
|
||||
<field name="model">pms.folio.wizard</field>
|
||||
<field name="model">pms.booking.engine</field>
|
||||
<field name="arch" type="xml">
|
||||
<form class="pt-1">
|
||||
<div class="row">
|
||||
@@ -141,19 +141,19 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_wizard_folio" model="ir.actions.act_window">
|
||||
<record id="action_booking_engine" model="ir.actions.act_window">
|
||||
<field name="name">Folio creation</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">pms.folio.wizard</field>
|
||||
<field name="view_id" ref="folio_wizard" />
|
||||
<field name="res_model">pms.booking.engine</field>
|
||||
<field name="view_id" ref="booking_engine" />
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<menuitem
|
||||
name="Booking Engine"
|
||||
id="menu_pms_folio_wizard"
|
||||
action="action_wizard_folio"
|
||||
id="menu_pms_booking_engine"
|
||||
action="action_booking_engine"
|
||||
sequence="55"
|
||||
parent="pms.menu_reservations"
|
||||
/>
|
||||
@@ -1,168 +0,0 @@
|
||||
import datetime
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class NumRoomsSelectionModel(models.TransientModel):
|
||||
_name = "pms.num.rooms.selection"
|
||||
_description = "Dinamic Selection based on avails room"
|
||||
_rec_name = "value"
|
||||
|
||||
value = fields.Integer()
|
||||
room_type_id = fields.Char()
|
||||
folio_wizard_id = fields.One2many(
|
||||
comodel_name="pms.folio.availability.wizard",
|
||||
inverse_name="id",
|
||||
)
|
||||
|
||||
|
||||
class AvailabilityWizard(models.TransientModel):
|
||||
_name = "pms.folio.availability.wizard"
|
||||
_description = "Room type line in Booking Engine"
|
||||
_check_pms_properties_auto = True
|
||||
|
||||
folio_wizard_id = fields.Many2one(
|
||||
string="Folio Wizard ID",
|
||||
comodel_name="pms.folio.wizard",
|
||||
)
|
||||
checkin = fields.Date(
|
||||
string="From:",
|
||||
help="Date Reservation starts ",
|
||||
required=True,
|
||||
)
|
||||
checkout = fields.Date(
|
||||
string="To:",
|
||||
help="Date Reservation ends",
|
||||
required=True,
|
||||
)
|
||||
room_type_id = fields.Many2one(
|
||||
string="Room Type",
|
||||
help="Room Type reserved",
|
||||
comodel_name="pms.room.type",
|
||||
check_pms_properties=True,
|
||||
)
|
||||
|
||||
num_rooms_available = fields.Integer(
|
||||
string="Available rooms",
|
||||
help="Number of rooms that are available",
|
||||
store="true",
|
||||
compute="_compute_num_rooms_available",
|
||||
)
|
||||
num_rooms_selected = fields.Many2one(
|
||||
string="Selected rooms",
|
||||
readonly=False,
|
||||
store=True,
|
||||
comodel_name="pms.num.rooms.selection",
|
||||
domain="[('value', '<=', num_rooms_available), "
|
||||
"('room_type_id', '=', room_type_id)]",
|
||||
compute="_compute_num_rooms_selected",
|
||||
)
|
||||
value_num_rooms_selected = fields.Integer(
|
||||
string="Number of Rooms Selected",
|
||||
readonly=False,
|
||||
store=True,
|
||||
compute="_compute_value_num_rooms_selected",
|
||||
)
|
||||
price_per_room = fields.Float(
|
||||
string="Price per room",
|
||||
help="Price per room in folio",
|
||||
compute="_compute_price_per_room",
|
||||
)
|
||||
price_total = fields.Float(
|
||||
string="Total price",
|
||||
help="The total price in the folio",
|
||||
compute="_compute_price_total",
|
||||
)
|
||||
pms_property_id = fields.Many2one(
|
||||
string="Property",
|
||||
help="Propertiy with access to the element;",
|
||||
related="folio_wizard_id.pms_property_id",
|
||||
)
|
||||
board_service_room_id = fields.Many2one(
|
||||
string="Board Service",
|
||||
help="Board Service included in the room",
|
||||
comodel_name="pms.board.service.room.type",
|
||||
domain="[('pms_room_type_id','=',room_type_id)]",
|
||||
check_pms_properties=True,
|
||||
)
|
||||
|
||||
@api.depends("room_type_id", "checkin", "checkout")
|
||||
def _compute_num_rooms_available(self):
|
||||
for record in self:
|
||||
record.num_rooms_available = self.env[
|
||||
"pms.availability.plan"
|
||||
].get_count_rooms_available(
|
||||
record.checkin,
|
||||
record.checkout,
|
||||
room_type_id=record.room_type_id.id,
|
||||
pricelist_id=record.folio_wizard_id.pricelist_id.id,
|
||||
pms_property_id=record.folio_wizard_id.pms_property_id.id,
|
||||
)
|
||||
|
||||
@api.depends("num_rooms_available")
|
||||
def _compute_num_rooms_selected(self):
|
||||
for record in self:
|
||||
for elem_to_insert in range(0, record.num_rooms_available + 1):
|
||||
if (
|
||||
self.env["pms.num.rooms.selection"].search_count(
|
||||
[
|
||||
("value", "=", elem_to_insert),
|
||||
("room_type_id", "=", record.room_type_id.id),
|
||||
]
|
||||
)
|
||||
== 0
|
||||
):
|
||||
self.env["pms.num.rooms.selection"].create(
|
||||
{
|
||||
"value": elem_to_insert,
|
||||
"room_type_id": record.room_type_id.id,
|
||||
}
|
||||
)
|
||||
record.num_rooms_selected = self.env["pms.num.rooms.selection"].search(
|
||||
[("value", "=", 0), ("room_type_id", "=", record.room_type_id.id)]
|
||||
)
|
||||
|
||||
@api.depends("num_rooms_selected")
|
||||
def _compute_value_num_rooms_selected(self):
|
||||
for record in self:
|
||||
if record.num_rooms_selected and record.num_rooms_selected.value:
|
||||
record.value_num_rooms_selected = record.num_rooms_selected.value
|
||||
elif not record.value_num_rooms_selected:
|
||||
record.value_num_rooms_selected = 0
|
||||
|
||||
@api.depends("room_type_id", "board_service_room_id", "checkin", "checkout")
|
||||
def _compute_price_per_room(self):
|
||||
for record in self:
|
||||
room_type_total_price_per_room = 0
|
||||
|
||||
for date_iterator in [
|
||||
record.checkin + datetime.timedelta(days=x)
|
||||
for x in range(0, (record.checkout - record.checkin).days)
|
||||
]:
|
||||
|
||||
partner = record.folio_wizard_id.partner_id
|
||||
product = record.room_type_id.product_id
|
||||
product = product.with_context(
|
||||
lang=partner.lang,
|
||||
partner=partner.id,
|
||||
quantity=1,
|
||||
date=fields.Date.today(),
|
||||
consumption_date=date_iterator,
|
||||
pricelist=record.folio_wizard_id.pricelist_id.id,
|
||||
uom=product.uom_id.id,
|
||||
property=record.folio_wizard_id.pms_property_id.id,
|
||||
)
|
||||
room_type_total_price_per_room += product.price
|
||||
|
||||
if record.board_service_room_id:
|
||||
nights = (record.checkout - record.checkin).days
|
||||
room_type_total_price_per_room += (
|
||||
record.board_service_room_id.amount * nights
|
||||
)
|
||||
|
||||
record.price_per_room = room_type_total_price_per_room
|
||||
|
||||
@api.depends("price_per_room", "value_num_rooms_selected")
|
||||
def _compute_price_total(self):
|
||||
for record in self:
|
||||
record.price_total = record.price_per_room * record.value_num_rooms_selected
|
||||
Reference in New Issue
Block a user