mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
@@ -32,6 +32,24 @@ class AccountJournal(models.Model):
|
||||
readonly=False,
|
||||
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")
|
||||
def _compute_is_simplified_invoice(self):
|
||||
@@ -42,6 +60,18 @@ class AccountJournal(models.Model):
|
||||
):
|
||||
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")
|
||||
def _check_pms_properties_simplified_invoice(self):
|
||||
for journal in self:
|
||||
|
||||
@@ -2082,7 +2082,10 @@ class PmsFolio(models.Model):
|
||||
(making sure to call super() to establish a clean extension chain).
|
||||
"""
|
||||
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:
|
||||
journal = (
|
||||
self.env["account.move"]
|
||||
|
||||
@@ -569,11 +569,13 @@ class PmsProperty(models.Model):
|
||||
dt = dt.replace(tzinfo=None)
|
||||
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
|
||||
# all the journals with associated payments, if it is
|
||||
# false, we will only see those journals that can be used
|
||||
# to pay manually
|
||||
# room_ids [list] is used to filter the payment methods
|
||||
# by rooms (usefull in apartments, villas, etc)
|
||||
self.ensure_one()
|
||||
payment_methods = self.env["account.journal"].search(
|
||||
[
|
||||
@@ -589,6 +591,11 @@ class PmsProperty(models.Model):
|
||||
("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:
|
||||
payment_methods = payment_methods.filtered(lambda p: p.allowed_pms_payments)
|
||||
return payment_methods
|
||||
@@ -891,9 +898,10 @@ class PmsProperty(models.Model):
|
||||
pms_property.journal_simplified_invoice_id.is_simplified_invoice = True
|
||||
|
||||
@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()
|
||||
partner = self.env["res.partner"].browse(partner_invoice_id)
|
||||
# For simplified invoices
|
||||
if (
|
||||
not partner
|
||||
or partner.id == self.env.ref("pms.various_pms_partner").id
|
||||
@@ -902,8 +910,56 @@ class PmsProperty(models.Model):
|
||||
and self._context.get("autoinvoice")
|
||||
)
|
||||
):
|
||||
return self.journal_simplified_invoice_id
|
||||
return self.journal_normal_invoice_id
|
||||
if 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
|
||||
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):
|
||||
"""
|
||||
|
||||
@@ -6,6 +6,12 @@
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='company_id']" position="after">
|
||||
<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
|
||||
name="allowed_pms_payments"
|
||||
attrs="{'invisible':[('type','not in',('bank', 'cash'))]}"
|
||||
|
||||
@@ -160,7 +160,10 @@ class FolioAdvancePaymentInv(models.TransientModel):
|
||||
"ref": order.name,
|
||||
"move_type": "out_invoice",
|
||||
"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,
|
||||
"invoice_origin": order.name,
|
||||
"invoice_user_id": order.user_id.id,
|
||||
|
||||
@@ -46,7 +46,11 @@ class WizardPaymentFolio(models.TransientModel):
|
||||
self.ensure_one()
|
||||
journal_ids = False
|
||||
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
|
||||
|
||||
def button_payment(self):
|
||||
|
||||
Reference in New Issue
Block a user