mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
@@ -11,13 +11,15 @@ class PortalAccount(PortalAccount):
|
||||
values = super(PortalAccount, self)._invoice_get_page_view_values(
|
||||
invoice, access_token, **kwargs
|
||||
)
|
||||
for acquirer in values["acquirers"]:
|
||||
acquirers = values.get("acquirers")
|
||||
for acquirer in acquirers:
|
||||
if (
|
||||
acquirer.pms_property_ids
|
||||
and invoice.pms_property_id.id not in acquirer.pms_property_ids.ids
|
||||
):
|
||||
values["acquirers"] -= acquirer
|
||||
for pms in values["pms"]:
|
||||
payment_tokens = values.get("payment_tokens")
|
||||
for pms in payment_tokens:
|
||||
if pms.acquirer_id not in values["acquirers"].ids:
|
||||
values["pms"] -= pms
|
||||
return values
|
||||
|
||||
@@ -982,31 +982,30 @@ class PmsFolio(models.Model):
|
||||
automatic_included=True
|
||||
)
|
||||
paid_out = 0
|
||||
for journal in journals:
|
||||
paid_out += sum(
|
||||
self.env["account.move.line"]
|
||||
.search(
|
||||
[
|
||||
("folio_ids", "in", record.id),
|
||||
(
|
||||
"account_id",
|
||||
"in",
|
||||
tuple(
|
||||
journal.default_account_id.ids
|
||||
+ journal.payment_debit_account_id.ids
|
||||
+ journal.payment_credit_account_id.ids
|
||||
),
|
||||
paid_out += sum(
|
||||
self.env["account.move.line"]
|
||||
.search(
|
||||
[
|
||||
("folio_ids", "in", record.id),
|
||||
(
|
||||
"account_id",
|
||||
"in",
|
||||
tuple(
|
||||
journals.default_account_id.ids
|
||||
+ journals.payment_debit_account_id.ids
|
||||
+ journals.payment_credit_account_id.ids
|
||||
),
|
||||
(
|
||||
"display_type",
|
||||
"not in",
|
||||
("line_section", "line_note"),
|
||||
),
|
||||
("move_id.state", "!=", "cancel"),
|
||||
]
|
||||
)
|
||||
.mapped("balance")
|
||||
),
|
||||
(
|
||||
"display_type",
|
||||
"not in",
|
||||
("line_section", "line_note"),
|
||||
),
|
||||
("move_id.state", "!=", "cancel"),
|
||||
]
|
||||
)
|
||||
.mapped("balance")
|
||||
)
|
||||
total = record.amount_total
|
||||
# REVIEW: Must We ignored services in cancelled folios
|
||||
# pending amount?
|
||||
@@ -1641,9 +1640,13 @@ class PmsFolio(models.Model):
|
||||
(making sure to call super() to establish a clean extension chain).
|
||||
"""
|
||||
self.ensure_one()
|
||||
|
||||
journal = (
|
||||
self.env["account.move"]
|
||||
.with_context(default_move_type="out_invoice")
|
||||
.with_context(
|
||||
default_move_type="out_invoice",
|
||||
default_company_id=self.company_id.id,
|
||||
)
|
||||
._get_default_journal()
|
||||
)
|
||||
if not journal:
|
||||
|
||||
@@ -490,3 +490,58 @@ class PmsProperty(models.Model):
|
||||
vals.update({"checkin_sequence_id": checkin_sequence.id})
|
||||
record = super(PmsProperty, self).create(vals)
|
||||
return record
|
||||
|
||||
@api.model
|
||||
def daily_closing(
|
||||
self, pms_property_ids, room_type_ids=False, availability_plan_ids=False
|
||||
):
|
||||
"""
|
||||
This method is used to close the daily availability of rooms
|
||||
"""
|
||||
pms_properties = self.browse(pms_property_ids)
|
||||
for pms_property in pms_properties:
|
||||
if not room_type_ids:
|
||||
room_type_ids = self.env["pms.room.type"].search(
|
||||
[
|
||||
"|",
|
||||
("pms_property_id", "=", pms_property.id),
|
||||
("pms_property_id", "=", False),
|
||||
]
|
||||
)
|
||||
if not availability_plan_ids:
|
||||
availability_plan_ids = self.env["pms.availability.plan"].search(
|
||||
[
|
||||
"|",
|
||||
("pms_property_id", "=", pms_property.id),
|
||||
("pms_property_id", "=", False),
|
||||
]
|
||||
)
|
||||
for room_type in self.env["pms.room.type"].browse(room_type_ids):
|
||||
for availability_plan in self.env["pms.availability.plan"].browse(
|
||||
availability_plan_ids
|
||||
):
|
||||
rule = self.env["pms.availability.plan.rule"].search(
|
||||
[
|
||||
("pms_property_id", "=", pms_property.id),
|
||||
("room_type_id", "=", room_type.id),
|
||||
("availability_plan_id", "=", availability_plan.id),
|
||||
]
|
||||
)
|
||||
if not rule:
|
||||
rule = self.env["pms.availability.plan.rule"].create(
|
||||
{
|
||||
"pms_property_id": pms_property.id,
|
||||
"room_type_id": room_type.id,
|
||||
"availability_plan_id": availability_plan.id,
|
||||
"date": fields.date.today(),
|
||||
"closed": True,
|
||||
}
|
||||
)
|
||||
elif not rule.closed:
|
||||
rule.write(
|
||||
{
|
||||
"closed": True,
|
||||
}
|
||||
)
|
||||
|
||||
return True
|
||||
|
||||
@@ -248,7 +248,9 @@ class PmsReservationLine(models.Model):
|
||||
):
|
||||
if self.env.context.get("force_overbooking"):
|
||||
reservation.overbooking = True
|
||||
line.room_id = reservation.room_type_id.room_ids[0]
|
||||
line.room_id = reservation.room_type_id.room_ids.filtered(
|
||||
lambda r: r.pms_property_id == line.pms_property_id
|
||||
)[0]
|
||||
else:
|
||||
raise ValidationError(
|
||||
_("%s: No room type available")
|
||||
|
||||
@@ -380,6 +380,7 @@ class AvailabilityWizard(models.TransientModel):
|
||||
def _rules_to_overwrite_by_plans(self, availability_plans):
|
||||
self.ensure_one()
|
||||
domain = [
|
||||
("pms_property_id", "in", self.pms_property_ids.ids),
|
||||
("availability_plan_id", "in", availability_plans.ids),
|
||||
]
|
||||
|
||||
@@ -806,7 +807,9 @@ class AvailabilityWizard(models.TransientModel):
|
||||
"date"
|
||||
) and room_type in rules_to_overwrite.mapped("room_type_id"):
|
||||
overwrite = rules_to_overwrite.filtered(
|
||||
lambda x: x.room_type_id == room_type and x.date == date
|
||||
lambda x: x.room_type_id == room_type
|
||||
and x.date == date
|
||||
and x.pms_property_id.id == pms_property.id
|
||||
)
|
||||
overwrite.write(vals)
|
||||
new_items += overwrite.ids
|
||||
|
||||
@@ -3,7 +3,6 @@ import datetime
|
||||
import io
|
||||
import json
|
||||
import time
|
||||
from datetime import date
|
||||
|
||||
import PyPDF2
|
||||
import requests
|
||||
@@ -21,12 +20,19 @@ class TravellerReport(models.TransientModel):
|
||||
txt_filename = fields.Text()
|
||||
txt_binary = fields.Binary(string="File Download")
|
||||
txt_message = fields.Char(string="File Preview")
|
||||
date_target = fields.Date(
|
||||
string="Date", required=True, default=lambda self: fields.Date.today()
|
||||
)
|
||||
pms_property_id = fields.Many2one(
|
||||
comodel_name="pms.property",
|
||||
string="Property",
|
||||
required=True,
|
||||
default=lambda self: self.env.user.get_active_property_ids()[0],
|
||||
)
|
||||
|
||||
def generate_file_from_user_action(self):
|
||||
|
||||
# get the active property
|
||||
pms_property = self.env["pms.property"].search(
|
||||
[("id", "=", self.env.user.get_active_property_ids()[0])]
|
||||
[("id", "=", self.pms_property_id.id)]
|
||||
)
|
||||
# check if there's institution settings properly established
|
||||
if (
|
||||
@@ -40,7 +46,10 @@ class TravellerReport(models.TransientModel):
|
||||
)
|
||||
|
||||
# build content
|
||||
content = self.generate_checkin_list(pms_property.id)
|
||||
content = self.generate_checkin_list(
|
||||
property_id=pms_property.id,
|
||||
date_target=self.date_target,
|
||||
)
|
||||
|
||||
if content:
|
||||
txt_binary = self.env["traveller.report.wizard"].create(
|
||||
@@ -61,25 +70,29 @@ class TravellerReport(models.TransientModel):
|
||||
"view_type": "form",
|
||||
}
|
||||
|
||||
def generate_checkin_list(self, property_id):
|
||||
|
||||
def generate_checkin_list(self, property_id, date_target=False):
|
||||
if not date_target:
|
||||
date_target = fields.date.today()
|
||||
# check if there's guests info pending to send
|
||||
if self.env["pms.checkin.partner"].search_count(
|
||||
[
|
||||
("state", "=", "onboard"),
|
||||
("arrival", ">=", str(date.today()) + " 0:00:00"),
|
||||
("arrival", ">=", str(date_target) + " 0:00:00"),
|
||||
("pms_property_id", "=", property_id),
|
||||
]
|
||||
):
|
||||
|
||||
# get the active property
|
||||
pms_property = self.env["pms.property"].search([("id", "=", property_id)])
|
||||
pms_property = (
|
||||
self.env["pms.property"]
|
||||
.with_context(lang="es_ES")
|
||||
.search([("id", "=", property_id)])
|
||||
)
|
||||
# get checkin partners info to send
|
||||
lines = self.env["pms.checkin.partner"].search(
|
||||
[
|
||||
("state", "=", "onboard"),
|
||||
("arrival", ">=", str(date.today()) + " 0:00:00"),
|
||||
("arrival", "<=", str(date.today()) + " 23:59:59"),
|
||||
("pms_property_id", "=", pms_property.id),
|
||||
("arrival", ">=", str(date_target) + " 0:00:00"),
|
||||
("arrival", "<=", str(date_target) + " 23:59:59"),
|
||||
("pms_property_id", "=", property_id),
|
||||
]
|
||||
)
|
||||
# build the property info record
|
||||
@@ -98,7 +111,7 @@ class TravellerReport(models.TransientModel):
|
||||
# build each checkin partner line's record
|
||||
# 2|DNI nº|Doc.number|doc.type|exp.date|lastname|lastname2|name|...
|
||||
# ...gender|birthdate|nation.|checkin
|
||||
|
||||
lines = lines.with_context(lang="es_ES")
|
||||
for line in lines:
|
||||
content += "2"
|
||||
# [P|N|..]
|
||||
|
||||
@@ -8,6 +8,10 @@
|
||||
<field name="txt_filename" invisible="1" />
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<group>
|
||||
<field name="pms_property_id" />
|
||||
<field name="date_target" />
|
||||
</group>
|
||||
<group attrs="{'invisible': [('txt_message','=',False)]}">
|
||||
<field name="txt_message" readonly="1" />
|
||||
</group>
|
||||
|
||||
Reference in New Issue
Block a user