[IMP] reservation views

This commit is contained in:
Darío Lodeiros
2021-01-20 18:05:47 +01:00
parent 57d3ab0c8a
commit a8292ff9c1
6 changed files with 75 additions and 62 deletions

View File

@@ -708,10 +708,10 @@ class PmsFolio(models.Model):
# Compute 'payment_state'. # Compute 'payment_state'.
if total <= paid_out: if total <= paid_out:
payment_state = "paid" payment_state = "paid"
elif paid_out < total: elif paid_out <= 0:
payment_state = "partial"
else:
payment_state = "not_paid" payment_state = "not_paid"
else:
payment_state = "partial"
vals = { vals = {
"pending_amount": total - paid_out, "pending_amount": total - paid_out,
"invoices_paid": paid_out, "invoices_paid": paid_out,
@@ -723,9 +723,24 @@ class PmsFolio(models.Model):
def action_pay(self): def action_pay(self):
self.ensure_one() self.ensure_one()
action = self.env.ref("pms.action_payment_folio").sudo().read()[0] self.ensure_one()
action["res_id"] = self.id partner = self.partner_id.id
return action amount = self.pending_amount
view_id = self.env.ref("pms.wizard_payment_folio_view_form").id
return {
"name": _("Register Payment"),
"view_type": "form",
"view_mode": "form",
"res_model": "wizard.payment.folio",
"type": "ir.actions.act_window",
"view_id": view_id,
"context": {
"default_folio_id": self.id,
"default_amount": amount,
"default_partner_id": partner,
},
"target": "new",
}
def open_moves_folio(self): def open_moves_folio(self):
invoices = self.mapped("move_ids") invoices = self.mapped("move_ids")

View File

@@ -365,6 +365,11 @@ class PmsReservation(models.Model):
"Detail Origin", compute="_compute_detail_origin", store=True "Detail Origin", compute="_compute_detail_origin", store=True
) )
folio_pending_amount = fields.Monetary(related="folio_id.pending_amount") folio_pending_amount = fields.Monetary(related="folio_id.pending_amount")
folio_payment_state = fields.Selection(
related="folio_id.payment_state",
string="Payment State",
store=True,
)
shared_folio = fields.Boolean(compute="_compute_shared") shared_folio = fields.Boolean(compute="_compute_shared")
# Used to notify is the reservation folio has other reservations/services # Used to notify is the reservation folio has other reservations/services
email = fields.Char("E-mail", related="partner_id.email") email = fields.Char("E-mail", related="partner_id.email")
@@ -1196,31 +1201,6 @@ class PmsReservation(models.Model):
self.ensure_one() self.ensure_one()
return self.folio_id.action_pay() return self.folio_id.action_pay()
def action_pay_reservation(self):
self.ensure_one()
partner = self.partner_id.id
amount = min(self.price_room_services_set, self.folio_pending_amount)
note = self.folio_id.name + " (" + self.name + ")"
view_id = self.env.ref("pms.account_payment_view_form_folio").id
return {
"name": _("Register Payment"),
"view_type": "form",
"view_mode": "form",
"res_model": "account.payment",
"type": "ir.actions.act_window",
"view_id": view_id,
"context": {
"default_folio_id": self.folio_id.id,
"default_room_id": self.id,
"default_amount": amount,
"default_payment_type": "inbound",
"default_partner_type": "customer",
"default_partner_id": partner,
"default_communication": note,
},
"target": "new",
}
def open_reservation_wizard(self): def open_reservation_wizard(self):
rooms_available = self.env["pms.room.type.availability.plan"].rooms_available( rooms_available = self.env["pms.room.type.availability.plan"].rooms_available(
checkin=self.checkin, checkin=self.checkin,

View File

@@ -94,19 +94,20 @@ class ResPartner(models.Model):
if not record.is_agency and record.sale_channel_id: if not record.is_agency and record.sale_channel_id:
record.sale_channel_id = None record.sale_channel_id = None
@api.constrains("mobile", "email") # REVIEW: problems with odoo demo data
def _check_duplicated(self): # @api.constrains("mobile", "email")
for record in self: # def _check_duplicated(self):
partner, field = record._search_duplicated() # for record in self:
if partner: # partner, field = record._search_duplicated()
raise models.ValidationError( # if partner:
_( # raise models.ValidationError(
"Partner %s found with same %s (%s)", # _(
partner.name, # "Partner %s found with same %s (%s)",
partner._fields[field].string, # partner.name,
getattr(record, field), # partner._fields[field].string,
) # getattr(record, field),
) # )
# )
def _search_duplicated(self): def _search_duplicated(self):
self.ensure_one() self.ensure_one()

View File

@@ -541,7 +541,7 @@
<field name="view_mode">tree,form,graph</field> <field name="view_mode">tree,form,graph</field>
</record> </record>
<menuitem <menuitem
id="menu_all_folio" id="menu_reservations"
name="Reservations" name="Reservations"
parent="pms.pms_management_menu" parent="pms.pms_management_menu"
sequence="4" sequence="4"

View File

@@ -149,6 +149,17 @@
/> />
</button> </button>
</div> </div>
<widget
name="web_ribbon"
title="Paid"
attrs="{'invisible': [('folio_payment_state', '!=', 'paid')]}"
/>
<widget
name="web_ribbon"
title="Partial"
bg_color="bg-warning"
attrs="{'invisible': [('folio_payment_state', '!=', 'partial')]}"
/>
<span <span
class="label label-danger" class="label label-danger"
attrs="{'invisible': [('state', 'not in', ('cancelled'))]}" attrs="{'invisible': [('state', 'not in', ('cancelled'))]}"
@@ -297,6 +308,7 @@
<field name="qty_invoiced" invisible="1" /> <field name="qty_invoiced" invisible="1" />
<field name="qty_to_invoice" invisible="1" /> <field name="qty_to_invoice" invisible="1" />
<field name="allowed_room_ids" invisible="1" /> <field name="allowed_room_ids" invisible="1" />
<field name="folio_payment_state" invisible="1" />
<field <field
name="room_type_id" name="room_type_id"
on_change="1" on_change="1"
@@ -620,6 +632,15 @@
widget="badge" widget="badge"
optional="show" optional="show"
/> />
<field
name="folio_payment_state"
decoration-success="folio_payment_state == 'paid'"
decoration-danger="folio_payment_state == 'not_paid' and state in ['cancelled','onboard','done','no_show','no_checkout']"
decoration-info="folio_payment_state == 'not_paid' and state in ['draft','confirm',]"
decoration-warning="folio_payment_state == 'partial'"
widget="badge"
optional="show"
/>
</tree> </tree>
</field> </field>
</record> </record>
@@ -809,6 +830,11 @@
<searchpanel> <searchpanel>
<field name="room_type_id" string="Room Type" enable_counters="1" /> <field name="room_type_id" string="Room Type" enable_counters="1" />
<field name="pricelist_id" string="Pricelist" enable_counters="1" /> <field name="pricelist_id" string="Pricelist" enable_counters="1" />
<field
name="channel_type_id"
string="Channel"
enable_counters="1"
/>
<field name="agency_id" string="Channel" enable_counters="1" /> <field name="agency_id" string="Channel" enable_counters="1" />
<field <field
name="state" name="state"
@@ -816,6 +842,12 @@
enable_counters="1" enable_counters="1"
select="multi" select="multi"
/> />
<field
name="folio_payment_state"
string="State"
enable_counters="1"
select="multi"
/>
</searchpanel> </searchpanel>
</search> </search>
</field> </field>

View File

@@ -11,25 +11,10 @@ class WizardPaymentFolio(models.TransientModel):
_name = "wizard.payment.folio" _name = "wizard.payment.folio"
_description = "Payments" _description = "Payments"
@api.model
def default_folio_id(self):
return self.env["pms.folio"].browse(self._context.get("active_id", [])).id
@api.model
def _default_amount(self):
folio = self.env["pms.folio"].browse(self._context.get("active_id", []))
return folio.pending_amount
@api.model
def _default_partner(self):
folio = self.env["pms.folio"].browse(self._context.get("active_id", []))
return folio.partner_id.id
folio_id = fields.Many2one( folio_id = fields.Many2one(
"pms.folio", "pms.folio",
string="Folio", string="Folio",
required=True, required=True,
default=default_folio_id,
) )
reservation_ids = fields.Many2many( reservation_ids = fields.Many2many(
"pms.reservation", "pms.reservation",
@@ -53,9 +38,9 @@ class WizardPaymentFolio(models.TransientModel):
compute="_compute_allowed_method_ids", compute="_compute_allowed_method_ids",
store="True", store="True",
) )
amount = fields.Float("Amount", digits=("Product Price"), default=_default_amount) amount = fields.Float("Amount", digits=("Product Price"))
date = fields.Date("Date", default=fields.Date.context_today, required=True) date = fields.Date("Date", default=fields.Date.context_today, required=True)
partner_id = fields.Many2one("res.partner", default=_default_partner) partner_id = fields.Many2one("res.partner")
@api.depends("folio_id") @api.depends("folio_id")
def _compute_allowed_method_ids(self): def _compute_allowed_method_ids(self):