[IMP]pms:improve cancel and confirm actions

This commit is contained in:
Darío Lodeiros
2024-04-17 11:03:20 +02:00
parent 53e4b23f76
commit 2e3ae4a0b2
4 changed files with 33 additions and 16 deletions

View File

@@ -814,6 +814,7 @@ class PmsFolio(models.Model):
"reservation_ids.reservation_line_ids.cancel_discount", "reservation_ids.reservation_line_ids.cancel_discount",
"reservation_ids.reservation_line_ids.default_invoice_to", "reservation_ids.reservation_line_ids.default_invoice_to",
"reservation_ids.tax_ids", "reservation_ids.tax_ids",
"reservation_ids.state",
) )
def _compute_sale_line_ids(self): def _compute_sale_line_ids(self):
for folio in self.filtered(lambda f: isinstance(f.id, int)): for folio in self.filtered(lambda f: isinstance(f.id, int)):
@@ -1658,7 +1659,7 @@ class PmsFolio(models.Model):
) )
if self.env.context.get("confirm_all_reservations"): if self.env.context.get("confirm_all_reservations"):
self.reservation_ids.confirm() self.reservation_ids.action_confirm()
return True return True
@@ -1809,10 +1810,10 @@ class PmsFolio(models.Model):
} }
def _message_post_after_hook(self, message, msg_vals): def _message_post_after_hook(self, message, msg_vals):
res = super(PmsFolio, self)._message_post_after_hook(message, msg_vals) res = super(PmsFolio, self).sudo()._message_post_after_hook(message, msg_vals)
for folio in self: for folio in self:
for follower in folio.message_follower_ids: for follower in folio.message_follower_ids:
follower.unlink() follower.sudo().unlink()
return res return res
def action_view_invoice(self): def action_view_invoice(self):
@@ -1954,6 +1955,17 @@ class PmsFolio(models.Model):
month_day, month_day,
) )
if invoice_date: if invoice_date:
if (
self.company_id.period_lock_date
and invoice_date < self.company_id.period_lock_date
and not self.user_has_groups("account.group_account_manager")
):
raise UserError(
_(
"The period to create this invoice is locked. "
"Please contact your administrator to unlock it."
)
)
if invoice_date < datetime.date.today() and not self._context.get( if invoice_date < datetime.date.today() and not self._context.get(
"autoinvoice" "autoinvoice"
): ):
@@ -2017,7 +2029,7 @@ class PmsFolio(models.Model):
lambda m: m.amount_total < 0 lambda m: m.amount_total < 0
).action_switch_invoice_into_refund_credit_note() ).action_switch_invoice_into_refund_credit_note()
for move in moves: for move in moves:
move.message_post_with_view( move.sudo().message_post_with_view(
"mail.message_origin_link", "mail.message_origin_link",
values={ values={
"self": move, "self": move,
@@ -2168,7 +2180,7 @@ class PmsFolio(models.Model):
"origin_reference": folio.external_reference, "origin_reference": folio.external_reference,
} }
pay = self.env["account.payment"].create(vals) pay = self.env["account.payment"].create(vals)
pay.message_post_with_view( pay.sudo().message_post_with_view(
"mail.message_origin_link", "mail.message_origin_link",
values={ values={
"self": pay, "self": pay,
@@ -2211,7 +2223,7 @@ class PmsFolio(models.Model):
or folio.pms_property_id.email_formatted, or folio.pms_property_id.email_formatted,
) )
for reservation in folio.reservation_ids: for reservation in folio.reservation_ids:
reservation.message_post( reservation.sudo().message_post(
body=_( body=_(
"""Payment: <b>%s</b> by <b>%s</b>""", """Payment: <b>%s</b> by <b>%s</b>""",
amount, amount,
@@ -2260,7 +2272,7 @@ class PmsFolio(models.Model):
"state": "draft", "state": "draft",
} }
pay = self.env["account.payment"].create(vals) pay = self.env["account.payment"].create(vals)
pay.message_post_with_view( pay.sudo().message_post_with_view(
"mail.message_origin_link", "mail.message_origin_link",
values={ values={
"self": pay, "self": pay,
@@ -2298,7 +2310,7 @@ class PmsFolio(models.Model):
or folio.pms_property_id.email_formatted, or folio.pms_property_id.email_formatted,
) )
for reservation in folio.reservation_ids: for reservation in folio.reservation_ids:
reservation.message_post( reservation.sudo().message_post(
body=_( body=_(
"""Refund: <b>%s</b> by <b>%s</b>""", """Refund: <b>%s</b> by <b>%s</b>""",
amount, amount,

View File

@@ -1883,6 +1883,10 @@ class PmsReservation(models.Model):
raise ValidationError( raise ValidationError(
_("The reservation must be canceled by action: action_cancel") _("The reservation must be canceled by action: action_cancel")
) )
if record.state == "confirm" and not self.env.context.get("action_confirm"):
raise ValidationError(
_("The reservation must be confirmed by action: action_confirm")
)
@api.constrains("arrival_hour") @api.constrains("arrival_hour")
def _check_arrival_hour(self): def _check_arrival_hour(self):
@@ -2131,7 +2135,7 @@ class PmsReservation(models.Model):
record = super(PmsReservation, self).create(vals) record = super(PmsReservation, self).create(vals)
record._check_capacity() record._check_capacity()
if record.preconfirm and record.state == "draft": if record.preconfirm and record.state == "draft":
record.confirm() record.action_confirm()
record._check_services(vals) record._check_services(vals)
@@ -2295,14 +2299,14 @@ class PmsReservation(models.Model):
reservations._compute_priority() reservations._compute_priority()
return True return True
def confirm(self): def action_confirm(self):
for record in self: for record in self:
vals = {} vals = {}
if record.checkin_partner_ids.filtered(lambda c: c.state == "onboard"): if record.checkin_partner_ids.filtered(lambda c: c.state == "onboard"):
vals.update({"state": "onboard"}) vals.update({"state": "onboard"})
else: else:
vals.update({"state": "confirm"}) vals.update({"state": "confirm"})
record.write(vals) record.with_context(action_confirm=True).write(vals)
record.reservation_line_ids.update({"cancel_discount": 0}) record.reservation_line_ids.update({"cancel_discount": 0})
# Unlink penalty service if exist # Unlink penalty service if exist
record.service_ids.filtered(lambda s: s.is_cancel_penalty).unlink() record.service_ids.filtered(lambda s: s.is_cancel_penalty).unlink()
@@ -2319,9 +2323,10 @@ class PmsReservation(models.Model):
record.with_context(action_cancel=True).state = "cancel" record.with_context(action_cancel=True).state = "cancel"
record._check_cancel_penalty() record._check_cancel_penalty()
record.cancel_datetime = fields.Datetime.now() record.cancel_datetime = fields.Datetime.now()
if all( # If all reservations in the folio are cancelled, cancel the folio
if not (
record.folio_id.reservation_ids.filtered( record.folio_id.reservation_ids.filtered(
lambda r: r.state == "cancel" lambda r: r.state != "cancel"
) )
): ):
record.folio_id.action_cancel() record.folio_id.action_cancel()
@@ -2447,7 +2452,7 @@ class PmsReservation(models.Model):
record.checkin_partner_ids.filtered( record.checkin_partner_ids.filtered(
lambda check: check.state == "onboard" lambda check: check.state == "onboard"
).action_undo_onboard() ).action_undo_onboard()
record.state = "confirm" record.action_confirm()
return True return True
def action_checkin_partner_view(self): def action_checkin_partner_view(self):

View File

@@ -415,7 +415,7 @@ class PmsReservationLine(models.Model):
line.occupies_availability = True line.occupies_availability = True
# TODO: Refact method and allowed cancelled single days # TODO: Refact method and allowed cancelled single days
@api.depends("reservation_id.cancelled_reason") @api.depends("reservation_id.cancelled_reason", "reservation_id.state")
def _compute_cancel_discount(self): def _compute_cancel_discount(self):
for line in self: for line in self:
if line.state == "cancel": if line.state == "cancel":

View File

@@ -18,7 +18,7 @@
<field name="to_assign" invisible="1" /> <field name="to_assign" invisible="1" />
<field name="check_adults" invisible="1" /> <field name="check_adults" invisible="1" />
<button <button
name="confirm" name="action_confirm"
string="Confirm" string="Confirm"
class="oe_highlight" class="oe_highlight"
type="object" type="object"