diff --git a/pms/__manifest__.py b/pms/__manifest__.py
index 623b9a827..b04aadc5f 100644
--- a/pms/__manifest__.py
+++ b/pms/__manifest__.py
@@ -36,6 +36,9 @@
"data/menus.xml",
"wizards/wizard_payment_folio.xml",
"wizards/folio_make_invoice_advance_views.xml",
+ "wizards/wizard_folio.xml",
+ "wizards/wizard_invoice_filter_days.xml",
+ "wizards/wizard_folio_changes.xml",
"views/pms_amenity_views.xml",
"views/pms_amenity_type_views.xml",
"views/pms_board_service_views.xml",
@@ -43,9 +46,11 @@
"views/pms_cancelation_rule_views.xml",
"views/pms_checkin_partner_views.xml",
"views/pms_floor_views.xml",
- "views/pms_folio_views.xml",
"views/pms_property_views.xml",
"views/pms_reservation_views.xml",
+ "views/pms_service_views.xml",
+ "views/pms_service_line_views.xml",
+ "views/pms_folio_views.xml",
"views/pms_room_type_views.xml",
"views/pms_room_views.xml",
"views/pms_room_closure_reason_views.xml",
@@ -56,8 +61,6 @@
"views/pms_room_type_class_views.xml",
"views/pms_room_type_availability_plan_views.xml",
"views/pms_room_type_availability_rule_views.xml",
- "views/pms_service_views.xml",
- "views/pms_service_line_views.xml",
"views/pms_shared_room_views.xml",
"views/res_partner_views.xml",
"views/product_pricelist_views.xml",
@@ -70,9 +73,6 @@
"wizards/wizard_reservation.xml",
"wizards/wizard_massive_changes.xml",
"wizards/wizard_advanced_filters.xml",
- "wizards/wizard_folio.xml",
- "wizards/wizard_invoice_filter_days.xml",
- "wizards/wizard_folio_changes.xml",
],
"demo": [
"demo/pms_master_data.xml",
diff --git a/pms/models/pms_checkin_partner.py b/pms/models/pms_checkin_partner.py
index c93376cff..7894fc63d 100644
--- a/pms/models/pms_checkin_partner.py
+++ b/pms/models/pms_checkin_partner.py
@@ -12,6 +12,7 @@ from odoo.exceptions import ValidationError
class PmsCheckinPartner(models.Model):
_name = "pms.checkin.partner"
_description = "Partner Checkins"
+ _rec_name = "identifier"
# Fields declaration
identifier = fields.Char(
@@ -125,11 +126,9 @@ class PmsCheckinPartner(models.Model):
"reservation_id.preferred_room_id",
)
def _compute_name(self):
- self.name = False
- for record in self.filtered("reservation_id.rooms"):
- record.name = record.reservation_id.rooms
- if record.partner_id:
- record.name = record.name + " (" + record.partner_id.name + ")"
+ for record in self:
+ if not record.name:
+ record.name = record.partner_id.name
@api.depends("partner_id", "partner_id.email")
def _compute_email(self):
@@ -147,8 +146,8 @@ class PmsCheckinPartner(models.Model):
def _checkin_mandatory_fields(self, depends=False):
# api.depends need "reservation_id.state" in the lambda function
if depends:
- return ["reservation_id.state", "partner_id"]
- return ["partner_id"]
+ return ["reservation_id.state", "name"]
+ return ["name"]
@api.model
def _checkin_partner_fields(self):
diff --git a/pms/models/pms_folio.py b/pms/models/pms_folio.py
index 35243f273..2b4169701 100644
--- a/pms/models/pms_folio.py
+++ b/pms/models/pms_folio.py
@@ -68,6 +68,11 @@ class PmsFolio(models.Model):
compute="_compute_number_of_rooms",
store="True",
)
+ number_of_services = fields.Integer(
+ "Number of Rooms",
+ compute="_compute_number_of_services",
+ store="True",
+ )
service_ids = fields.One2many(
"pms.service",
"folio_id",
@@ -377,6 +382,11 @@ class PmsFolio(models.Model):
folio.reservation_ids.filtered(lambda a: a.state != "cancelled")
)
+ @api.depends("service_ids", "service_ids.product_qty")
+ def _compute_number_of_services(self):
+ for folio in self:
+ folio.number_of_services = sum(folio.service_ids.mapped("product_qty"))
+
@api.depends(
"reservation_ids",
"service_ids",
diff --git a/pms/models/res_partner.py b/pms/models/res_partner.py
index 432045521..f532c0a99 100644
--- a/pms/models/res_partner.py
+++ b/pms/models/res_partner.py
@@ -64,7 +64,6 @@ class ResPartner(models.Model):
if not args:
args = []
domain = [
- "|",
"|",
("phone", operator, name),
("mobile", operator, name),
diff --git a/pms/views/pms_folio_views.xml b/pms/views/pms_folio_views.xml
index cf6b79ba5..0c3287647 100644
--- a/pms/views/pms_folio_views.xml
+++ b/pms/views/pms_folio_views.xml
@@ -45,8 +45,9 @@
type="action"
class="oe_stat_button"
name="%(open_pms_reservation_form_tree_all)d"
- icon="fa-cubes"
- context="{'search_default_folio_id': active_id, 'default_folio_id': active_id}"
+ icon="fa-bed"
+ context="{'search_default_folio_id': id, 'default_folio_id': id}"
+ attrs="{'invisible': [('number_of_rooms', '=', 0)]}"
>
+
-
+
-
+
+
-
+
+
-
+
@@ -613,7 +618,7 @@
-
+
@@ -83,7 +83,7 @@
@@ -108,6 +108,7 @@
+
diff --git a/pms/wizards/wizard_folio.py b/pms/wizards/wizard_folio.py
index 7ee1b9ffc..e92bee81b 100644
--- a/pms/wizards/wizard_folio.py
+++ b/pms/wizards/wizard_folio.py
@@ -28,11 +28,14 @@ class FolioWizard(models.TransientModel):
pms_property_id = fields.Many2one(
comodel_name="pms.property",
string="Property",
- default=lambda self: self.env.user.get_active_property_ids()[0],
+ default=lambda self: self._default_pms_property_id(),
)
partner_id = fields.Many2one(
"res.partner",
)
+ folio_id = fields.Many2one(
+ "pms.folio",
+ )
availability_results = fields.One2many(
comodel_name="pms.folio.availability.wizard",
inverse_name="folio_wizard_id",
@@ -49,6 +52,13 @@ class FolioWizard(models.TransientModel):
)
can_create_folio = fields.Boolean(compute="_compute_can_create_folio")
+ def _default_pms_property_id(self):
+ if self._context.get("default_folio_id"):
+ folio = self.env["pms.folio"].browse(self._context.get("default_folio_id"))
+ return folio.pms_property_id.id
+ else:
+ return self.env.user.get_active_property_ids()[0]
+
@api.depends("availability_results.value_num_rooms_selected")
def _compute_can_create_folio(self):
for record in self:
@@ -128,13 +138,16 @@ class FolioWizard(models.TransientModel):
# actions
def create_folio(self):
for record in self:
- folio = self.env["pms.folio"].create(
- {
- "pricelist_id": record.pricelist_id.id,
- "partner_id": record.partner_id.id,
- "pms_property_id": record.pms_property_id.id,
- }
- )
+ if not record.folio_id:
+ folio = self.env["pms.folio"].create(
+ {
+ "pricelist_id": record.pricelist_id.id,
+ "partner_id": record.partner_id.id,
+ "pms_property_id": record.pms_property_id.id,
+ }
+ )
+ else:
+ folio = record.folio_id
for line in record.availability_results:
for _reservations_to_create in range(0, line.value_num_rooms_selected):
res = self.env["pms.reservation"].create(
@@ -143,8 +156,8 @@ class FolioWizard(models.TransientModel):
"checkin": line.checkin,
"checkout": line.checkout,
"room_type_id": line.room_type_id.id,
- "partner_id": folio.partner_id.id,
- "pricelist_id": folio.pricelist_id.id,
+ "partner_id": record.partner_id.id,
+ "pricelist_id": record.pricelist_id.id,
"pms_property_id": folio.pms_property_id.id,
}
)
diff --git a/pms/wizards/wizard_folio.xml b/pms/wizards/wizard_folio.xml
index 4a55e9842..e8e38d196 100644
--- a/pms/wizards/wizard_folio.xml
+++ b/pms/wizards/wizard_folio.xml
@@ -18,12 +18,17 @@
widget="daterange"
options="{'related_start_date': 'start_date'}"
/>
+
-
+
+
or