mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[IMP]pms: allowd journal filters by room
This commit is contained in:
@@ -32,6 +32,24 @@ class AccountJournal(models.Model):
|
|||||||
readonly=False,
|
readonly=False,
|
||||||
store=True,
|
store=True,
|
||||||
)
|
)
|
||||||
|
allowed_room_ids = fields.Many2many(
|
||||||
|
string="Rooms Filter allowed",
|
||||||
|
comodel_name="pms.room",
|
||||||
|
relation="account_journal_allow_room_rel",
|
||||||
|
column1="account_journal_id",
|
||||||
|
column2="room_id",
|
||||||
|
help="Room to filter the room in the reservation",
|
||||||
|
compute="_compute_allowed_room_ids",
|
||||||
|
)
|
||||||
|
room_filter_ids = fields.Many2many(
|
||||||
|
string="Apply Rooms",
|
||||||
|
comodel_name="pms.room",
|
||||||
|
relation="account_journal_room_rel",
|
||||||
|
column1="account_journal_id",
|
||||||
|
column2="room_id",
|
||||||
|
help="Room to filter the room types in the reservation",
|
||||||
|
domain="[('id', 'in', allowed_room_ids)]",
|
||||||
|
)
|
||||||
|
|
||||||
@api.depends("pms_property_ids", "pms_property_ids.journal_simplified_invoice_id")
|
@api.depends("pms_property_ids", "pms_property_ids.journal_simplified_invoice_id")
|
||||||
def _compute_is_simplified_invoice(self):
|
def _compute_is_simplified_invoice(self):
|
||||||
@@ -42,6 +60,18 @@ class AccountJournal(models.Model):
|
|||||||
):
|
):
|
||||||
journal.is_simplified_invoice = True
|
journal.is_simplified_invoice = True
|
||||||
|
|
||||||
|
@api.depends("pms_property_ids")
|
||||||
|
def _compute_allowed_room_ids(self):
|
||||||
|
for journal in self:
|
||||||
|
if not journal.pms_property_ids:
|
||||||
|
journal.allowed_room_ids = self.env["pms.room"].search([]).ids
|
||||||
|
else:
|
||||||
|
journal.allowed_room_ids = (
|
||||||
|
self.env["pms.room"]
|
||||||
|
.search([("pms_property_id", "in", journal.pms_property_ids.ids)])
|
||||||
|
.ids
|
||||||
|
)
|
||||||
|
|
||||||
@api.constrains("is_simplified_invoice")
|
@api.constrains("is_simplified_invoice")
|
||||||
def _check_pms_properties_simplified_invoice(self):
|
def _check_pms_properties_simplified_invoice(self):
|
||||||
for journal in self:
|
for journal in self:
|
||||||
|
|||||||
@@ -2082,7 +2082,10 @@ class PmsFolio(models.Model):
|
|||||||
(making sure to call super() to establish a clean extension chain).
|
(making sure to call super() to establish a clean extension chain).
|
||||||
"""
|
"""
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
journal = self.pms_property_id._get_folio_default_journal(partner_invoice_id)
|
journal = self.pms_property_id._get_folio_default_journal(
|
||||||
|
partner_invoice_id=partner_invoice_id,
|
||||||
|
room_ids=self.reservation_ids.mapped("reservation_line_ids.room_id.id"),
|
||||||
|
)
|
||||||
if not journal:
|
if not journal:
|
||||||
journal = (
|
journal = (
|
||||||
self.env["account.move"]
|
self.env["account.move"]
|
||||||
|
|||||||
@@ -569,11 +569,13 @@ class PmsProperty(models.Model):
|
|||||||
dt = dt.replace(tzinfo=None)
|
dt = dt.replace(tzinfo=None)
|
||||||
return dt
|
return dt
|
||||||
|
|
||||||
def _get_payment_methods(self, automatic_included=False):
|
def _get_payment_methods(self, automatic_included=False, room_ids=False):
|
||||||
# We use automatic_included to True to see absolutely
|
# We use automatic_included to True to see absolutely
|
||||||
# all the journals with associated payments, if it is
|
# all the journals with associated payments, if it is
|
||||||
# false, we will only see those journals that can be used
|
# false, we will only see those journals that can be used
|
||||||
# to pay manually
|
# to pay manually
|
||||||
|
# room_ids [list] is used to filter the payment methods
|
||||||
|
# by rooms (usefull in apartments, villas, etc)
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
payment_methods = self.env["account.journal"].search(
|
payment_methods = self.env["account.journal"].search(
|
||||||
[
|
[
|
||||||
@@ -589,6 +591,11 @@ class PmsProperty(models.Model):
|
|||||||
("company_id", "=", False),
|
("company_id", "=", False),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
if room_ids:
|
||||||
|
payment_methods = payment_methods.filtered(
|
||||||
|
lambda p: not p.room_filter_ids
|
||||||
|
or any([room_id in p.room_filter_ids.ids for room_id in room_ids])
|
||||||
|
)
|
||||||
if not automatic_included:
|
if not automatic_included:
|
||||||
payment_methods = payment_methods.filtered(lambda p: p.allowed_pms_payments)
|
payment_methods = payment_methods.filtered(lambda p: p.allowed_pms_payments)
|
||||||
return payment_methods
|
return payment_methods
|
||||||
@@ -891,9 +898,10 @@ class PmsProperty(models.Model):
|
|||||||
pms_property.journal_simplified_invoice_id.is_simplified_invoice = True
|
pms_property.journal_simplified_invoice_id.is_simplified_invoice = True
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def _get_folio_default_journal(self, partner_invoice_id):
|
def _get_folio_default_journal(self, partner_invoice_id, room_ids=False):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
partner = self.env["res.partner"].browse(partner_invoice_id)
|
partner = self.env["res.partner"].browse(partner_invoice_id)
|
||||||
|
# For simplified invoices
|
||||||
if (
|
if (
|
||||||
not partner
|
not partner
|
||||||
or partner.id == self.env.ref("pms.various_pms_partner").id
|
or partner.id == self.env.ref("pms.various_pms_partner").id
|
||||||
@@ -902,8 +910,56 @@ class PmsProperty(models.Model):
|
|||||||
and self._context.get("autoinvoice")
|
and self._context.get("autoinvoice")
|
||||||
)
|
)
|
||||||
):
|
):
|
||||||
|
if self.journal_simplified_invoice_id:
|
||||||
return self.journal_simplified_invoice_id
|
return self.journal_simplified_invoice_id
|
||||||
|
else:
|
||||||
|
journals = self.env["account.journal"].search(
|
||||||
|
[
|
||||||
|
("type", "=", "sale"),
|
||||||
|
("is_simplified_invoice", "=", True),
|
||||||
|
("company_id", "=", self.company_id.id),
|
||||||
|
"|",
|
||||||
|
("pms_property_ids", "in", self.id),
|
||||||
|
("pms_property_ids", "=", False),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
if journals:
|
||||||
|
if room_ids:
|
||||||
|
journals = journals.filtered(
|
||||||
|
lambda j: not j.room_filter_ids
|
||||||
|
or any(
|
||||||
|
[
|
||||||
|
room_id in j.room_filter_ids.ids
|
||||||
|
for room_id in room_ids
|
||||||
|
]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return journals[0]
|
||||||
|
return False
|
||||||
|
# For normal invoices
|
||||||
|
if self.journal_normal_invoice_id:
|
||||||
return self.journal_normal_invoice_id
|
return self.journal_normal_invoice_id
|
||||||
|
else:
|
||||||
|
journals = self.env["account.journal"].search(
|
||||||
|
[
|
||||||
|
("type", "=", "sale"),
|
||||||
|
("is_simplified_invoice", "=", False),
|
||||||
|
("company_id", "=", self.company_id.id),
|
||||||
|
"|",
|
||||||
|
("pms_property_ids", "in", self.id),
|
||||||
|
("pms_property_ids", "=", False),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
if journals:
|
||||||
|
if room_ids:
|
||||||
|
journals = journals.filtered(
|
||||||
|
lambda j: not j.room_filter_ids
|
||||||
|
or any(
|
||||||
|
[room_id in j.room_filter_ids.ids for room_id in room_ids]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return journals[0]
|
||||||
|
return False
|
||||||
|
|
||||||
def _get_adr(self, start_date, end_date, domain=False):
|
def _get_adr(self, start_date, end_date, domain=False):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -6,6 +6,12 @@
|
|||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<xpath expr="//field[@name='company_id']" position="after">
|
<xpath expr="//field[@name='company_id']" position="after">
|
||||||
<field name="pms_property_ids" widget="many2many_tags" />
|
<field name="pms_property_ids" widget="many2many_tags" />
|
||||||
|
<field name="allowed_room_ids" invisible="1" />
|
||||||
|
<field
|
||||||
|
name="room_filter_ids"
|
||||||
|
string="Room Types"
|
||||||
|
widget="many2many_tags"
|
||||||
|
/>
|
||||||
<field
|
<field
|
||||||
name="allowed_pms_payments"
|
name="allowed_pms_payments"
|
||||||
attrs="{'invisible':[('type','not in',('bank', 'cash'))]}"
|
attrs="{'invisible':[('type','not in',('bank', 'cash'))]}"
|
||||||
|
|||||||
@@ -160,7 +160,10 @@ class FolioAdvancePaymentInv(models.TransientModel):
|
|||||||
"ref": order.name,
|
"ref": order.name,
|
||||||
"move_type": "out_invoice",
|
"move_type": "out_invoice",
|
||||||
"journal_id": order.pms_property_id._get_folio_default_journal(
|
"journal_id": order.pms_property_id._get_folio_default_journal(
|
||||||
partner_id
|
partner_invoice_id=partner_id,
|
||||||
|
room_ids=order.mapped(
|
||||||
|
"reservation_ids.reservation_line_ids.room_id.id"
|
||||||
|
),
|
||||||
).id,
|
).id,
|
||||||
"invoice_origin": order.name,
|
"invoice_origin": order.name,
|
||||||
"invoice_user_id": order.user_id.id,
|
"invoice_user_id": order.user_id.id,
|
||||||
|
|||||||
@@ -46,7 +46,11 @@ class WizardPaymentFolio(models.TransientModel):
|
|||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
journal_ids = False
|
journal_ids = False
|
||||||
if self.folio_id:
|
if self.folio_id:
|
||||||
journal_ids = self.folio_id.pms_property_id._get_payment_methods().ids
|
journal_ids = self.folio_id.pms_property_id._get_payment_methods(
|
||||||
|
room_ids=self.folio_id.mapped(
|
||||||
|
"reservation_ids.reservation_line_ids.room_id.id"
|
||||||
|
),
|
||||||
|
).ids
|
||||||
self.allowed_method_ids = journal_ids
|
self.allowed_method_ids = journal_ids
|
||||||
|
|
||||||
def button_payment(self):
|
def button_payment(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user