[WIP] Refactoring Cardex

This commit is contained in:
Pablo
2018-11-07 11:11:08 +01:00
parent 982c9b629b
commit 2071c04ac8
13 changed files with 279 additions and 279 deletions

View File

@@ -20,7 +20,7 @@
'demo': ['data/hotel_data.xml'],
'data': [
'security/hotel_security.xml',
'security/ir.model.access.csv',
# 'security/ir.model.access.csv',
'wizard/massive_changes.xml',
'wizard/split_reservation.xml',
'wizard/duplicate_reservation.xml',

View File

@@ -2999,13 +2999,13 @@ msgid "Action Needed"
msgstr "Action Needed"
#. module: hotel
#: model:ir.actions.act_window,name:hotel.action_cardex
msgid "Action cardex"
#: model:ir.actions.act_window,name:hotel.action_checkin_partner
msgid "Action checkin"
msgstr "Acción Checkin"
#. module: hotel
#: model:ir.actions.act_window,name:hotel.action_cardex_download
msgid "Action cardex download"
#: model:ir.actions.act_window,name:hotel.action_checkin_partner_download
msgid "Action checkin download"
msgstr "Accción descarga de checkin"
#. module: hotel
@@ -3311,39 +3311,39 @@ msgid "Capacity:"
msgstr "Capacidad:"
#. module: hotel
#: model:ir.ui.menu,name:hotel.menu_cardex
msgid "Cardex"
#: model:ir.ui.menu,name:hotel.menu_checkin_partner
msgid "Checkin"
msgstr "Checkin"
#. module: hotel
#: model:ir.model.fields,field_description:hotel.field_hotel_folio_cardex_pending
#: model:ir.model.fields,field_description:hotel.field_hotel_folio_cardex_pending_num
#: model:ir.model.fields,field_description:hotel.field_hotel_reservation_cardex_pending
msgid "Cardex Pending"
#: model:ir.model.fields,field_description:hotel.field_hotel_folio_checkin_partner_pending
#: model:ir.model.fields,field_description:hotel.field_hotel_folio_checkin_partner_pending_num
#: model:ir.model.fields,field_description:hotel.field_hotel_reservation_checkin_partner_pending
msgid "Checkin Pending"
msgstr "Checkin Pendientes"
#. module: hotel
#: model:ir.model.fields,field_description:hotel.field_hotel_reservation_cardex_pending_num
msgid "Cardex Pending Num"
#: model:ir.model.fields,field_description:hotel.field_hotel_reservation_checkin_partner_pending_num
msgid "Checkin Pending Num"
msgstr "Nº de Checkin Pendientes"
#. module: hotel
#: model:ir.model.fields,field_description:hotel.field_hotel_folio_cardex_count
#: model:ir.model.fields,field_description:hotel.field_hotel_reservation_cardex_count
msgid "Cardex counter"
#: model:ir.model.fields,field_description:hotel.field_hotel_folio_checkin_partner_count
#: model:ir.model.fields,field_description:hotel.field_hotel_reservation_checkin_partner_count
msgid "Checkin counter"
msgstr "Contador de Checkin"
#. module: hotel
#: model:ir.model.fields,field_description:hotel.field_checkin_wizard_cardex_ids
#: model:ir.model.fields,field_description:hotel.field_hotel_reservation_cardex_ids
msgid "Cardex ids"
#: model:ir.model.fields,field_description:hotel.field_checkin_wizard_checkin_partner_ids
#: model:ir.model.fields,field_description:hotel.field_hotel_reservation_checkin_partner_ids
msgid "Checkin ids"
msgstr "Checkin ids"
#. module: hotel
#: code:addons/hotel/models/hotel_folio.py:333
#: code:addons/hotel/models/hotel_reservation.py:359
#, python-format
msgid "Cardexs"
msgid "Checkins"
msgstr "Checkin"
#. module: hotel
@@ -3483,7 +3483,7 @@ msgstr "Niños"
#. module: hotel
#: model:ir.ui.view,arch_db:hotel.checkin_wizard_form_2
#: model:ir.ui.view,arch_db:hotel.view_tree_cardex
#: model:ir.ui.view,arch_db:hotel.view_tree_checkin_partner
msgid "Client name"
msgstr "Nombre de Cliente"
@@ -3653,7 +3653,7 @@ msgid "Create invoice/bill"
msgstr "Crear Factura/cuenta"
#. module: hotel
#: model:ir.model.fields,field_description:hotel.field_cardex_create_uid
#: model:ir.model.fields,field_description:hotel.field_checkin_partner_create_uid
#: model:ir.model.fields,field_description:hotel.field_checkin_wizard_create_uid
#: model:ir.model.fields,field_description:hotel.field_currency_exchange_create_uid
#: model:ir.model.fields,field_description:hotel.field_folio_advance_payment_inv_create_uid
@@ -3682,7 +3682,7 @@ msgid "Created by"
msgstr "Creado por"
#. module: hotel
#: model:ir.model.fields,field_description:hotel.field_cardex_create_date
#: model:ir.model.fields,field_description:hotel.field_checkin_partner_create_date
#: model:ir.model.fields,field_description:hotel.field_checkin_wizard_create_date
#: model:ir.model.fields,field_description:hotel.field_currency_exchange_create_date
#: model:ir.model.fields,field_description:hotel.field_folio_advance_payment_inv_create_date
@@ -3926,13 +3926,13 @@ msgid "Delivery address for current sales order."
msgstr "Dirección de entrega para el pedido de venta actual."
#. module: hotel
#: code:addons/hotel/models/cardex.py:38
#: code:addons/hotel/models/checkin.py:38
#, python-format
msgid "Departure date (%s) is prior to arrival on %s"
msgstr "La fecha de salida (%s) es anterior a la llegada el %s"
#. module: hotel
#: code:addons/hotel/models/cardex.py:80
#: code:addons/hotel/models/checkin.py:80
#, python-format
msgid "Departure date, is prior to arrival. Check it now. %s"
msgstr "La fecha de salida es anterior a la llegada. Revíselo ahora. %s"
@@ -3999,7 +3999,7 @@ msgid "Discount Type"
msgstr "Tipo de Descuento"
#. module: hotel
#: model:ir.model.fields,field_description:hotel.field_cardex_display_name
#: model:ir.model.fields,field_description:hotel.field_checkin_partner_display_name
#: model:ir.model.fields,field_description:hotel.field_checkin_wizard_display_name
#: model:ir.model.fields,field_description:hotel.field_currency_exchange_display_name
#: model:ir.model.fields,field_description:hotel.field_folio_advance_payment_inv_display_name
@@ -4098,7 +4098,7 @@ msgid "Duration in Days"
msgstr "Duración en días"
#. module: hotel
#: model:ir.model.fields,field_description:hotel.field_checkin_wizard_email_cardex
#: model:ir.model.fields,field_description:hotel.field_checkin_wizard_email_checkin_partner
#: model:ir.model.fields,field_description:hotel.field_hotel_folio_email
#: model:ir.model.fields,field_description:hotel.field_hotel_reservation_email
msgid "E-mail"
@@ -4127,13 +4127,13 @@ msgid "End Date"
msgstr "Fecha finalización"
#. module: hotel
#: model:ir.model.fields,field_description:hotel.field_cardex_enter_date
#: model:ir.model.fields,field_description:hotel.field_checkin_partner_enter_date
#: model:ir.model.fields,field_description:hotel.field_checkin_wizard_enter_date
msgid "Enter date"
msgstr "Fecha Entrada"
#. module: hotel
#: model:ir.model.fields,field_description:hotel.field_cardex_exit_date
#: model:ir.model.fields,field_description:hotel.field_checkin_partner_exit_date
#: model:ir.model.fields,field_description:hotel.field_checkin_wizard_exit_date
msgid "Exit date"
msgstr "Fecha Salida"
@@ -4532,7 +4532,7 @@ msgid "Hotel services detail provide tocustomer and it will include in main Invo
msgstr "Los detalles de servicios al cliente que se incluirán en la Factura principal."
#. module: hotel
#: model:ir.model.fields,field_description:hotel.field_cardex_id
#: model:ir.model.fields,field_description:hotel.field_checkin_partner_id
#: model:ir.model.fields,field_description:hotel.field_checkin_wizard_id
#: model:ir.model.fields,field_description:hotel.field_currency_exchange_id
#: model:ir.model.fields,field_description:hotel.field_folio_advance_payment_inv_id
@@ -4962,7 +4962,7 @@ msgid "Last Message Date"
msgstr "Last Message Date"
#. module: hotel
#: model:ir.model.fields,field_description:hotel.field_cardex___last_update
#: model:ir.model.fields,field_description:hotel.field_checkin_partner___last_update
#: model:ir.model.fields,field_description:hotel.field_checkin_wizard___last_update
#: model:ir.model.fields,field_description:hotel.field_currency_exchange___last_update
#: model:ir.model.fields,field_description:hotel.field_folio_advance_payment_inv___last_update
@@ -4997,7 +4997,7 @@ msgid "Last Updated"
msgstr "Actualizado el"
#. module: hotel
#: model:ir.model.fields,field_description:hotel.field_cardex_write_uid
#: model:ir.model.fields,field_description:hotel.field_checkin_partner_write_uid
#: model:ir.model.fields,field_description:hotel.field_checkin_wizard_write_uid
#: model:ir.model.fields,field_description:hotel.field_currency_exchange_write_uid
#: model:ir.model.fields,field_description:hotel.field_folio_advance_payment_inv_write_uid
@@ -5026,7 +5026,7 @@ msgid "Last Updated by"
msgstr "Última actualización de"
#. module: hotel
#: model:ir.model.fields,field_description:hotel.field_cardex_write_date
#: model:ir.model.fields,field_description:hotel.field_checkin_partner_write_date
#: model:ir.model.fields,field_description:hotel.field_checkin_wizard_write_date
#: model:ir.model.fields,field_description:hotel.field_currency_exchange_write_date
#: model:ir.model.fields,field_description:hotel.field_folio_advance_payment_inv_write_date
@@ -5288,7 +5288,7 @@ msgid "Minimum Stock Rules"
msgstr "Reglas de stock mínimo"
#. module: hotel
#: model:ir.model.fields,field_description:hotel.field_checkin_wizard_mobile_cardex
#: model:ir.model.fields,field_description:hotel.field_checkin_wizard_mobile_checkin_partner
#: model:ir.model.fields,field_description:hotel.field_hotel_folio_mobile
#: model:ir.model.fields,field_description:hotel.field_hotel_reservation_mobile
msgid "Mobile"
@@ -5570,7 +5570,7 @@ msgid "Partner for checkin"
msgstr "Partner for checkin"
#. module: hotel
#: model:ir.model.fields,field_description:hotel.field_cardex_partner_id
#: model:ir.model.fields,field_description:hotel.field_checkin_partner_partner_id
#: model:ir.model.fields,field_description:hotel.field_checkin_wizard_partner_id
msgid "Partner id"
msgstr "Id del cliente"
@@ -6089,7 +6089,7 @@ msgid "Reservation has no adults"
msgstr "La reserva no tiene adultos"
#. module: hotel
#: model:ir.model.fields,field_description:hotel.field_cardex_reservation_id
#: model:ir.model.fields,field_description:hotel.field_checkin_partner_reservation_id
#: model:ir.model.fields,field_description:hotel.field_checkin_wizard_reservation_id
msgid "Reservation id"
msgstr "Reserva id"
@@ -7477,8 +7477,8 @@ msgid "can't assign the same date to more than
msgstr "no puede asignar la misma fecha a más de una habitación virtual"
#. module: hotel
#: model:ir.model,name:hotel.model_cardex
msgid "cardex"
#: model:ir.model,name:hotel.model_checkin_partner
msgid "checkin"
msgstr "checkin"
#. module: hotel

View File

@@ -1,68 +1,68 @@
# Copyright 2017 Dario Lodeiros
# Copyright 2018 Alexandre Díaz
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import datetime
from openerp import models, fields, api, _
from openerp.exceptions import except_orm, ValidationError
class Cardex(models.Model):
_name = 'cardex'
# Validation for Departure date is after arrival date.
@api.constrains('exit_date')
def validation_dates(self):
if self.exit_date < self.enter_date:
raise models.ValidationError(
_('Departure date (%s) is prior to arrival on %s') %
(self.exit_date, self.enter_date))
def default_reservation_id(self):
if 'reservation_id' in self.env.context:
reservation = self.env['hotel.reservation'].search([
('id', '=', self.env.context['reservation_id'])
])
return reservation
return False
def default_enter_date(self):
if 'reservation_id' in self.env.context:
reservation = self.env['hotel.reservation'].search([
('id', '=', self.env.context['reservation_id'])
])
return reservation.checkin
return False
def default_exit_date(self):
if 'reservation_id' in self.env.context:
reservation = self.env['hotel.reservation'].search([
('id', '=', self.env.context['reservation_id'])
])
return reservation.checkout
return False
def default_partner_id(self):
if 'reservation_id' in self.env.context:
reservation = self.env['hotel.reservation'].search([
('id', '=', self.env.context['reservation_id'])
])
return reservation.partner_id
return False
@api.onchange('enter_date', 'exit_date')
def check_change_dates(self):
if self.exit_date <= self.enter_date:
date_1 = fields.Date.from_string(self.enter_date)
date_2 = date_1 + datetime.timedelta(days=1)
self.update({'exit_date': date_2, })
raise ValidationError(
_('Departure date, is prior to arrival. Check it now. %s') %
(date_2))
partner_id = fields.Many2one('res.partner', default=default_partner_id,
required=True)
reservation_id = fields.Many2one(
'hotel.reservation',
default=default_reservation_id, readonly=True)
enter_date = fields.Date(default=default_enter_date, required=True)
exit_date = fields.Date(default=default_exit_date, required=True)
# Copyright 2017 Dario Lodeiros
# Copyright 2018 Alexandre Díaz
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import datetime
from odoo import models, fields, api, _
from odoo.exceptions import except_orm, ValidationError
class HotelCheckinPartner(models.Model):
_name = 'hotel_checkin_partner'
# Validation for Departure date is after arrival date.
@api.constrains('exit_date')
def validation_dates(self):
if self.exit_date < self.enter_date:
raise models.ValidationError(
_('Departure date (%s) is prior to arrival on %s') %
(self.exit_date, self.enter_date))
def default_reservation_id(self):
if 'reservation_id' in self.env.context:
reservation = self.env['hotel.reservation'].search([
('id', '=', self.env.context['reservation_id'])
])
return reservation
return False
def default_enter_date(self):
if 'reservation_id' in self.env.context:
reservation = self.env['hotel.reservation'].search([
('id', '=', self.env.context['reservation_id'])
])
return reservation.checkin
return False
def default_exit_date(self):
if 'reservation_id' in self.env.context:
reservation = self.env['hotel.reservation'].search([
('id', '=', self.env.context['reservation_id'])
])
return reservation.checkout
return False
def default_partner_id(self):
if 'reservation_id' in self.env.context:
reservation = self.env['hotel.reservation'].search([
('id', '=', self.env.context['reservation_id'])
])
return reservation.partner_id
return False
@api.onchange('enter_date', 'exit_date')
def check_change_dates(self):
if self.exit_date <= self.enter_date:
date_1 = fields.Date.from_string(self.enter_date)
date_2 = date_1 + datetime.timedelta(days=1)
self.update({'exit_date': date_2, })
raise ValidationError(
_('Departure date, is prior to arrival. Check it now. %s') %
(date_2))
partner_id = fields.Many2one('res.partner', default=default_partner_id,
required=True)
reservation_id = fields.Many2one(
'hotel.reservation',
default=default_reservation_id, readonly=True)
enter_date = fields.Date(default=default_enter_date, required=True)
exit_date = fields.Date(default=default_exit_date, required=True)

View File

@@ -105,11 +105,11 @@ class HotelFolio(models.Model):
string="Payments")
booking_pending = fields.Integer('Booking pending',
compute='_compute_cardex_count')
cardex_count = fields.Integer('Cardex counter',
compute='_compute_cardex_count')
cardex_pending_count = fields.Integer('Cardex Pending',
compute='_compute_cardex_count')
compute='_compute_checkin_partner_count')
checkin_partner_count = fields.Integer('Checkin counter',
compute='_compute_checkin_partner_count')
checkin_partner_pending_count = fields.Integer('Checkin Pending',
compute='_compute_checkin_partner_count')
checkins_reservations = fields.Integer('checkins reservations')
checkouts_reservations = fields.Integer('checkouts reservations')
partner_internal_comment = fields.Text(string='Internal Partner Notes',
@@ -467,10 +467,10 @@ class HotelFolio(models.Model):
self.ensure_one()
rooms = self.mapped('room_lines.id')
return {
'name': _('Cardexs'),
'name': _('Checkins'),
'view_type': 'form',
'view_mode': 'tree,form',
'res_model': 'cardex',
'res_model': 'hotel_checkin_partner',
'type': 'ir.actions.act_window',
'domain': [('reservation_id', 'in', rooms)],
'target': 'new',
@@ -502,19 +502,19 @@ class HotelFolio(models.Model):
return True
@api.multi
def _compute_cardex_count(self):
_logger.info('_compute_cardex_amount')
def _compute_checkin_partner_count(self):
_logger.info('_compute_checkin_partner_amount')
for record in self:
if record.reservation_type == 'normal' and record.room_lines:
write_vals = {}
filtered_reservs = record.room_lines.filtered(
lambda x: x.state != 'cancelled' and \
not x.parent_reservation)
mapped_cardex = filtered_reservs.mapped('cardex_ids.id')
record.cardex_count = len(mapped_cardex)
mapped_cardex_count = filtered_reservs.mapped(
lambda x: (x.adults + x.children) - len(x.cardex_ids))
record.cardex_pending_count = sum(mapped_cardex_count)
mapped_checkin_partner = filtered_reservs.mapped('checkin_partner_ids.id')
record.checkin_partner_count = len(mapped_checkin_partner)
mapped_checkin_partner_count = filtered_reservs.mapped(
lambda x: (x.adults + x.children) - len(x.checkin_partner_ids))
record.checkin_partner_pending_count = sum(mapped_checkin_partner_count)
"""
MAILING PROCESS

View File

@@ -179,16 +179,16 @@ class HotelReservation(models.Model):
pricelist_id = fields.Many2one('product.pricelist',
related='folio_id.pricelist_id',
readonly="1")
cardex_ids = fields.One2many('cardex', 'reservation_id')
# TODO: As cardex_count is a computed field, it can't not be used in a domain filer
# Non-stored field hotel.reservation.cardex_count cannot be searched
checkin_partner_ids = fields.One2many('hotel_checkin_partner', 'reservation_id')
# TODO: As checkin_partner_count is a computed field, it can't not be used in a domain filer
# Non-stored field hotel.reservation.checkin_partner_count cannot be searched
# searching on a computed field can also be enabled by setting the search parameter.
# The value is a method name returning a Domains
cardex_count = fields.Integer('Cardex counter',
compute='_compute_cardex_count')
cardex_pending_count = fields.Integer('Cardex Pending Num',
compute='_compute_cardex_count',
search='_search_cardex_pending')
checkin_partner_count = fields.Integer('Checkin counter',
compute='_compute_checkin_partner_count')
checkin_partner_pending_count = fields.Integer('Checkin Pending Num',
compute='_compute_checkin_partner_count',
search='_search_checkin_partner_pending')
# check_rooms = fields.Boolean('Check Rooms')
is_checkin = fields.Boolean()
is_checkout = fields.Boolean()
@@ -646,7 +646,7 @@ class HotelReservation(models.Model):
hotel_reserv_obj = self.env['hotel.reservation']
for record in self:
vals = {}
if record.cardex_ids:
if record.checkin_partner_ids:
vals.update({'state': 'booking'})
else:
vals.update({'state': 'confirm'})
@@ -912,18 +912,18 @@ class HotelReservation(models.Model):
"""
@api.multi
def _compute_cardex_count(self):
_logger.info('_compute_cardex_count')
def _compute_checkin_partner_count(self):
_logger.info('_compute_checkin_partner_count')
for record in self:
record.cardex_count = len(record.cardex_ids)
record.cardex_pending_count = (record.adults + record.children) \
- len(record.cardex_ids)
record.checkin_partner_count = len(record.checkin_partner_ids)
record.checkin_partner_pending_count = (record.adults + record.children) \
- len(record.checkin_partner_ids)
# https://www.odoo.com/es_ES/forum/ayuda-1/question/calculated-fields-in-search-filter-possible-118501
@api.multi
def _search_cardex_pending(self, operator, value):
def _search_checkin_partner_pending(self, operator, value):
self.ensure_one()
recs = self.search([]).filtered(lambda x: x.cardex_pending_count > 0)
recs = self.search([]).filtered(lambda x: x.checkin_partner_pending_count > 0)
return [('id', 'in', [x.id for x in recs])] if recs else []
@api.multi
@@ -991,10 +991,10 @@ class HotelReservation(models.Model):
def action_checks(self):
self.ensure_one()
return {
'name': _('Cardexs'),
'name': _('Checkins'),
'view_type': 'form',
'view_mode': 'tree,form',
'res_model': 'cardex',
'res_model': 'hotel_checkin_partner',
'type': 'ir.actions.act_window',
'domain': [('reservation_id', '=', self.id)],
'target': 'new',

View File

@@ -14,8 +14,8 @@ access_hotel_folio_line,hotel_folio.line.user,model_hotel_reservation,hotel.grou
access_hotel_folio_line_call,hotel_folio.line.call,model_hotel_reservation,hotel.group_hotel_call,1,1,1,1
access_hotel_invoice_call,account.invoice.call,account.model_account_invoice,hotel.group_hotel_call,1,1,1,1
access_hotel_invoice_user,account.invoice.user,account.model_account_invoice,hotel.group_hotel_user,1,1,1,1
access_hotel_model_cardex_call,hotel.currency_exchange.call,hotel.model_cardex,hotel.group_hotel_call,1,1,1,1
access_hotel_model_cardex_user,hotel.currency_exchange.user,hotel.model_cardex,hotel.group_hotel_user,1,1,1,1
access_hotel_model_checkin_partner_call,hotel.currency_exchange.call,hotel.model_checkin_partner,hotel.group_hotel_call,1,1,1,1
access_hotel_model_checkin_partner_user,hotel.currency_exchange.user,hotel.model_checkin_partner,hotel.group_hotel_user,1,1,1,1
access_hotel_order_call,hotel.order.call,sale.model_sale_order,hotel.group_hotel_call,1,1,1,1
access_hotel_order_line_call,hotel.order.line.call,sale.model_sale_order_line,hotel.group_hotel_call,1,1,1,1
access_hotel_order_line_user,hotel.order.line.user,sale.model_sale_order_line,hotel.group_hotel_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
14 access_hotel_folio_line_call hotel_folio.line.call model_hotel_reservation hotel.group_hotel_call 1 1 1 1
15 access_hotel_invoice_call account.invoice.call account.model_account_invoice hotel.group_hotel_call 1 1 1 1
16 access_hotel_invoice_user account.invoice.user account.model_account_invoice hotel.group_hotel_user 1 1 1 1
17 access_hotel_model_cardex_call access_hotel_model_checkin_partner_call hotel.currency_exchange.call hotel.model_cardex hotel.model_checkin_partner hotel.group_hotel_call 1 1 1 1
18 access_hotel_model_cardex_user access_hotel_model_checkin_partner_user hotel.currency_exchange.user hotel.model_cardex hotel.model_checkin_partner hotel.group_hotel_user 1 1 1 1
19 access_hotel_order_call hotel.order.call sale.model_sale_order hotel.group_hotel_call 1 1 1 1
20 access_hotel_order_line_call hotel.order.line.call sale.model_sale_order_line hotel.group_hotel_call 1 1 1 1
21 access_hotel_order_line_user hotel.order.line.user sale.model_sale_order_line hotel.group_hotel_user 1 1 1 1

View File

@@ -1,57 +1,57 @@
<?xml version="1.0"?>
<odoo>
<!-- Action to open INE Codes list -->
<act_window
id="action_cardex"
name="Action cardex"
res_model="cardex"
view_mode="tree,form" />
<act_window
id="action_cardex_download"
name="Action cardex download"
res_model="cardex"
view_mode="form" /> <!-- Menu item to open INE Codes list -->
<menuitem
id="menu_cardex"
name="Cardex"
parent="hotel.hotel_reports_menu"
sequence="25"
action="action_cardex" />
<record id="view_form_cardex" model="ir.ui.view">
<field name="name">Cardex Form</field>
<field name="model">cardex</field>
<field name="arch" type="xml">
<form>
<sheet>
<group name="group_top">
<group name="group_left">
<field name="partner_id" required="True"/>
<field name="enter_date"/>
<field name="exit_date"/>
</group>
<group name="group_left">
<field name="reservation_id"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_tree_cardex" model="ir.ui.view">
<field name="name">Cardex Tree</field>
<field name="model">cardex</field>
<field name="arch" type="xml">
<tree>
<field name="partner_id" string="Client name"/>
<field name="enter_date"/>
<field name="exit_date"/>
<field name="reservation_id"/>
<!-- button type="action" class="oe_stat_button" id="cardex_smart_button" icon="fa-bed" /-->
</tree>
</field>
</record>
</odoo>
<?xml version="1.0"?>
<odoo>
<!-- Action to open INE Codes list -->
<act_window
id="action_checkin_partner"
name="Action checkin"
res_model='hotel_checkin_partner'
view_mode="tree,form" />
<act_window
id="action_checkin_partner_download"
name="Action checkin download"
res_model='hotel_checkin_partner'
view_mode="form" /> <!-- Menu item to open INE Codes list -->
<menuitem
id="menu_hotel_checkin_partner"
name="Checkins"
parent="hotel.hotel_reports_menu"
sequence="25"
action="action_checkin_partner" />
<record id="view_form_checkin_partner" model="ir.ui.view">
<field name="name">Checkin Form</field>
<field name="model">hotel_checkin_partner</field>
<field name="arch" type="xml">
<form>
<sheet>
<group name="group_top">
<group name="group_left">
<field name="partner_id" required="True"/>
<field name="enter_date"/>
<field name="exit_date"/>
</group>
<group name="group_left">
<field name="reservation_id"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_tree_checkin_partner" model="ir.ui.view">
<field name="name">Checkin Tree</field>
<field name="model">hotel_checkin_partner</field>
<field name="arch" type="xml">
<tree>
<field name="partner_id" string="Client name"/>
<field name="enter_date"/>
<field name="exit_date"/>
<field name="reservation_id"/>
<!-- button type="action" class="oe_stat_button" id="checkin_partner_smart_button" icon="fa-bed" /-->
</tree>
</field>
</record>
</odoo>

View File

@@ -40,26 +40,26 @@
<sheet>
<div class=" oe_button_box">
<button type="action" class="oe_stat_button"
id="cardex_smart_button"
id="checkin_partner_smart_button"
icon="fa-user-plus"
name="%(launch_checkin_wizard_add)d"
attrs="{'invisible': [('cardex_pending_count','&lt;=',0)]}"
attrs="{'invisible': [('checkin_partner_pending_count','&lt;=',0)]}"
context="{'partner_id': partner_id,'reservation_ids': room_lines,
'hidden_cardex': True, 'folio': active_id}">
'hidden_checkin_partner': True, 'folio': active_id}">
<div class="o_form_field o_stat_info">
<span class="o_stat_value"><field name="cardex_pending_count"
<span class="o_stat_value"><field name="checkin_partner_pending_count"
widget="statinfo" nolabel="1"/></span>
<span class="o_stat_text">Pending Checks</span>
</div>
</button>
<button type="object" class="oe_stat_button"
id="cardex_smart_button"
id="checkin_partner_smart_button"
icon="fa-users"
name="action_checks"
attrs="{'invisible': [('cardex_count','&lt;=',0)]}">
attrs="{'invisible': [('checkin_partner_count','&lt;=',0)]}">
<div class="o_form_field o_stat_info">
<span class="o_stat_value"><field name="cardex_count"
<span class="o_stat_value"><field name="checkin_partner_count"
widget="statinfo" nolabel="1"/></span>
<span class="o_stat_text">Checks</span>
</div>
@@ -175,12 +175,12 @@
<field name="folio_id" invisible="1"/>
<field name="state" />
<button type="action" class="oe_stat_button"
id="cardex_smart_button" icon="fa fa-1x fa-user-plus"
id="checkin_partner_smart_button" icon="fa fa-1x fa-user-plus"
name="%(launch_checkin_wizard_add)d"
context="{'partner_id': partner_id,'enter_date': checkin,
'exit_date': checkout,'reservation_id': id, 'hidden_cardex': True, 'edit_cardex': True }"
'exit_date': checkout,'reservation_id': id, 'hidden_checkin_partner': True, 'edit_checkin_partner': True }"
attrs="{'invisible':['|','|', ('state','not in',('confirm','booking')),
('cardex_pending_count','=', 0),('parent_reservation','!=',False)]}"
('checkin_partner_pending_count','=', 0),('parent_reservation','!=',False)]}"
/>
<field name="partner_id"/>
<field name="splitted" invisible="1" />
@@ -191,9 +191,9 @@
<field name="adults" string="Persons"/>
<field name="checkin" widget="date"/>
<field name="checkout" widget="date"/>
<field name="cardex_ids" invisible ="1"/>
<field name="checkin_partner_ids" invisible ="1"/>
<field name="to_assign" invisible="1"/>
<field name="cardex_pending_count" invisible="1"/>
<field name="checkin_partner_pending_count" invisible="1"/>
<!-- <field name="qty_delivered" invisible="1"/> -->
<!-- attrs="{'readonly': [('qty_delivered_updateable', '=', False)]}"/> -->
<!-- <field name="qty_invoiced" invisible="1"/> -->
@@ -330,7 +330,7 @@
<group invisible="1">
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/>
<!-- <field name="check_rooms" invisible="1"/> -->
<field name="cardex_pending_count" invisible="1"/>
<field name="checkin_partner_pending_count" invisible="1"/>
<!-- <field name="pricelist_id" invisible="1"/> -->
<field name="nights" invisible="1"/>
</group>
@@ -514,8 +514,8 @@
<field name="refund_amount"/>
<field name="invoices_paid"/>
<field name="booking_pending"/>
<field name="cardex_count"/>
<field name="cardex_pending_count"/>
<field name="checkin_partner_count"/>
<field name="checkin_partner_pending_count"/>
<field name="checkins_reservations"/>
<field name="checkouts_reservations"/>
<field name="partner_internal_comment"/>
@@ -530,8 +530,8 @@
<strong class="oe_partner_heading"><field name="partner_id"/></strong>
<ul>
<li t-if="record.name.raw_value"><field name="name"/></li>
<span t-if="record.cardex_count.value&gt;0" class="badge"><i class="fa fa-fw fa-bed"/><t t-esc="record.cardex_count.value"/></span>
<span t-if="record.cardex_pending_count.value&gt;0" class="badge"><i class="fa fa-fw fa-user-plus"/><t t-esc="record.cardex_pending_count.value"/></span>
<span t-if="record.checkin_partner_count.value&gt;0" class="badge"><i class="fa fa-fw fa-bed"/><t t-esc="record.checkin_partner_count.value"/></span>
<span t-if="record.checkin_partner_pending_count.value&gt;0" class="badge"><i class="fa fa-fw fa-user-plus"/><t t-esc="record.checkin_partner_pending_count.value"/></span>
</ul>
<div class="oe_kanban_partner_links"/>
</div>

View File

@@ -127,11 +127,11 @@
icon="fa-user-plus"
name="%(launch_checkin_wizard_add)d"
context="{'partner_id': partner_id,'enter_date': checkin,
'exit_date': checkout,'reservation_id': id, 'hidden_cardex': True, 'edit_cardex': True }"
'exit_date': checkout,'reservation_id': id, 'hidden_checkin_partner': True, 'edit_checkin_partner': True }"
attrs="{'invisible':['|', '|', ('state','not in',('confirm','booking')),
('cardex_pending_count','=', 0),('parent_reservation','!=',False)]}">
('checkin_partner_pending_count','=', 0),('parent_reservation','!=',False)]}">
<div class="o_form_field o_stat_info">
<span class="o_stat_value"><field name="cardex_pending_count"
<span class="o_stat_value"><field name="checkin_partner_pending_count"
widget="statinfo" nolabel="1"/></span>
<span class="o_stat_text">Pending Checks</span>
</div>
@@ -140,10 +140,10 @@
id="checkin_smart_button"
icon="fa-users"
name="action_checks"
attrs="{'invisible': ['|', ('cardex_count','&lt;=',0),
attrs="{'invisible': ['|', ('checkin_partner_count','&lt;=',0),
('parent_reservation','!=',False)]}">
<div class="o_form_field o_stat_info">
<span class="o_stat_value"><field name="cardex_count"
<span class="o_stat_value"><field name="checkin_partner_count"
widget="statinfo" nolabel="1"/></span>
<span class="o_stat_text">Checks</span>
</div>
@@ -233,7 +233,7 @@
<group invisible="1">
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/>
<!-- <field name="check_rooms" invisible="1"/> -->
<field name="cardex_pending_count" invisible="1"/>
<field name="checkin_partner_pending_count" invisible="1"/>
<!-- <field name="pricelist_id" invisible="1"/> -->
<field name="nights" invisible="1"/>
<!-- <field name="product_uom" string="Rent(UOM)" invisible="1" /> -->
@@ -335,8 +335,8 @@
icon="fa fa-1x fa-user-plus"
name="%(launch_checkin_wizard_add)d"
context="{'partner_id': partner_id,'enter_date': checkin,
'exit_date': checkout,'reservation_id': id, 'hidden_cardex': True, 'edit_cardex': True }"
attrs="{'invisible':['|','|', ('state','not in',('confirm','booking')),('cardex_pending_count','=', 0),('parent_reservation','!=',False)]}"
'exit_date': checkout,'reservation_id': id, 'hidden_checkin_partner': True, 'edit_checkin_partner': True }"
attrs="{'invisible':['|','|', ('state','not in',('confirm','booking')),('checkin_partner_pending_count','=', 0),('parent_reservation','!=',False)]}"
/>
<button type="action" class="oe_stat_button"
icon="fa fa-2x fa-list-ul"
@@ -354,10 +354,10 @@
<field name="create_date"/>
<field name="overbooking" invisible="1" />
<field name="last_updated_res" string="Updated on"/>
<field name="cardex_ids" invisible ="1"/>
<field name="checkin_partner_ids" invisible ="1"/>
<field name="to_assign" invisible="1"/>
<!-- cardex_smart_button attrs depends on cardex_pending to be showed -->
<field name="cardex_pending_count" invisible="1"/>
<!-- checkin_partner_smart_button attrs depends on checkin_partner_pending to be showed -->
<field name="checkin_partner_pending_count" invisible="1"/>
<field name="folio_pending_amount" string="Folio Pending Amount"/>
<button type="object" class="oe_stat_button"
icon="fa fa-3x fa-money"

View File

@@ -34,9 +34,9 @@ class Wizard(models.TransientModel):
# return current room line (onlyone in this case)
return reservations
for res in reservations:
# return the first room line with free space for a cardex
# return the first room line with free space for a checkin
# TODO: add 'done' to res.state condition... Maybe too restrictive right now
if res.cardex_count < (res.adults + res.children) and \
if res.checkin_partner_count < (res.adults + res.children) and \
res.state not in ["cancelled"]:
return res
elif 'reservation_id' in self.env.context:
@@ -50,14 +50,14 @@ class Wizard(models.TransientModel):
# no partner by default. User must search and choose one
return False
def default_cardex_ids(self):
def default_checkin_partner_ids(self):
if ('reservation_ids' and 'folio') in self.env.context:
ids = [item[1] for item in self.env.context.get('reservation_ids')]
reservations = self.env['hotel.reservation'].browse(ids)
for res in reservations:
return res.cardex_ids
return res.checkin_partner_ids
def default_cardex_ids(self):
def default_checkin_partner_ids(self):
if ('reservation_ids' and 'folio') in self.env.context:
ids = [item[1] for item in self.env.context.get('reservation_ids')]
reservations = self.env['hotel.reservation'].browse(ids)
@@ -65,38 +65,38 @@ class Wizard(models.TransientModel):
return res.segmentation_id
''' TODO: clean-up
def default_count_cardex(self):
def default_count_checkin_partner(self):
if 'reservation_ids' and 'folio' in self.env.context:
ids = [item[1] for item in self.env.context['reservation_ids']]
reservations = self.env['hotel.reservation'].browse(ids)
for res in reservations:
return res.cardex_count
return res.checkin_partner_count
'''
''' TODO: clean-up
def default_pending_cardex(self):
def default_pending_checkin_partner(self):
if 'reservation_ids' and 'folio' in self.env.context:
ids = [item[1] for item in self.env.context['reservation_ids']]
reservations = self.env['hotel.reservation'].browse(ids)
for res in reservations:
return res.adults + res.children - res.cardex_count
return res.adults + res.children - res.checkin_partner_count
'''
''' TODO: clean-up - list of checkins on smart button clean is not used anymore
def comp_checkin_list_visible(self):
if 'partner_id' in self.env.context:
self.list_checkin_cardex = False
self.list_checkin_checkin_partner = False
return
'''
def comp_checkin_edit(self):
if 'edit_cardex' in self.env.context:
if 'edit_checkin_partner' in self.env.context:
return True
return False
cardex_ids = fields.Many2many('cardex', 'reservation_id',
default=default_cardex_ids)
# count_cardex = fields.Integer('Cardex counter',
# default=default_count_cardex)
# pending_cardex = fields.Integer('Cardex pending',
# default=default_pending_cardex)
checkin_partner_ids = fields.Many2many('hotel_checkin_partner', 'reservation_id',
default=default_checkin_partner_ids)
# count_checkin_partner = fields.Integer('Checkin counter',
# default=default_count_checkin_partner)
# pending_checkin_partner = fields.Integer('Checkin pending',
# default=default_pending_checkin_partner)
partner_id = fields.Many2one('res.partner',
default=default_partner_id)
reservation_id = fields.Many2one('hotel.reservation',
@@ -106,24 +106,24 @@ class Wizard(models.TransientModel):
exit_date = fields.Date(default=default_exit_date,
required=True)
firstname_cardex = fields.Char('Firstname',
firstname_checkin_partner = fields.Char('Firstname',
required=True)
lastname_cardex = fields.Char('Lastname',
lastname_checkin_partner = fields.Char('Lastname',
required=True)
email_cardex = fields.Char('E-mail')
email_checkin_partner = fields.Char('E-mail')
mobile_cardex = fields.Char('Mobile')
mobile_checkin_partner = fields.Char('Mobile')
segmentation_id = fields.Many2many(
related='reservation_id.folio_id.segmentation_ids')
''' TODO: clean-up - list of checkins on smart button clean is not used anymore
list_checkin_cardex = fields.Boolean(compute=comp_checkin_list_visible,
list_checkin_checkin_partner = fields.Boolean(compute=comp_checkin_list_visible,
default=True, store=True)
'''
# edit_checkin_cardex = fields.Boolean(default=comp_checkin_edit,
# edit_checkin_checkin_partner = fields.Boolean(default=comp_checkin_edit,
# store=True)
op_select_partner = fields.Selection([
@@ -142,38 +142,38 @@ class Wizard(models.TransientModel):
if self.op_select_partner == 'S':
partner_vals = {
'id': self.partner_id.id,
'firstname': self.firstname_cardex,
'lastname': self.lastname_cardex,
'email': self.email_cardex,
'mobile': self.mobile_cardex,
'firstname': self.firstname_checkin_partner,
'lastname': self.lastname_checkin_partner,
'email': self.email_checkin_partner,
'mobile': self.mobile_checkin_partner,
}
self.partner_id.sudo().write(partner_vals)
elif self.op_select_partner == 'C':
partner_vals = {
'firstname': self.firstname_cardex,
'lastname': self.lastname_cardex,
'email': self.email_cardex,
'mobile': self.mobile_cardex,
'firstname': self.firstname_checkin_partner,
'lastname': self.lastname_checkin_partner,
'email': self.email_checkin_partner,
'mobile': self.mobile_checkin_partner,
}
new_partner = self.env['res.partner'].create(partner_vals)
self.partner_id = self.env['res.partner'].browse(new_partner.id)
# prepare checkin values
cardex_val = {
checkin_partner_val = {
'partner_id': self.partner_id.id,
'enter_date': self.enter_date,
'exit_date': self.exit_date
}
record_id = self.env['hotel.reservation'].browse(
self.reservation_id.id)
# save the cardex for this reservation
# save the checkin for this reservation
record_id.write({
'cardex_ids': [(0, False, cardex_val)],
'checkin_partner_ids': [(0, False, checkin_partner_val)],
'segmentation_id': self.segmentation_id,
})
# update the state of the current reservation
if record_id.cardex_count > 0:
if record_id.checkin_partner_count > 0:
record_id.state = 'booking'
record_id.is_checkin = False
folio = self.env['hotel.folio'].browse(self.reservation_id.folio_id.id)
@@ -192,11 +192,11 @@ class Wizard(models.TransientModel):
ids = [item[1] for item in self.env.context['reservation_ids']]
reservations = self.env['hotel.reservation'].browse(ids)
for res in reservations:
_logger.info('reservation cardex_count %d', res.cardex_count)
_logger.info('reservation checkin_partner_count %d', res.checkin_partner_count)
# return {
# 'domain': {'reservation_id': [('folio_id','=', self.env.context['folio']), 'count_cardex','=','2']},
# 'warning': {'title': "Warning", 'message': self.env.context['cardex_count']},
# 'domain': {'reservation_id': [('folio_id','=', self.env.context['folio']), 'count_checkin_partner','=','2']},
# 'warning': {'title': "Warning", 'message': self.env.context['checkin_partner_count']},
# }
'''
@@ -204,10 +204,10 @@ class Wizard(models.TransientModel):
def onchange_partner_id(self):
# update partner fields
write_vals = {
'firstname_cardex': self.partner_id.firstname,
'lastname_cardex': self.partner_id.lastname,
'email_cardex': self.partner_id.email,
'mobile_cardex': self.partner_id.mobile,
'firstname_checkin_partner': self.partner_id.firstname,
'lastname_checkin_partner': self.partner_id.lastname,
'email_checkin_partner': self.partner_id.email,
'mobile_checkin_partner': self.partner_id.mobile,
}
# show the checkin fields if a partner is selected
if self.op_select_partner == 'S' and self.partner_id.id != False:

View File

@@ -10,7 +10,7 @@
<group col="4">
<field options="{'no_quick_create': True, 'no_create_edit' : True, 'no_open': True}"
name="reservation_id" nolabel="1"
domain="[('folio_id','=',context.get('folio')), ('state', '!=', 'cancelled'), ('cardex_pending_count', '>', 0)]"
domain="[('folio_id','=',context.get('folio')), ('state', '!=', 'cancelled'), ('checkin_partner_pending_count', '>', 0)]"
style="max-width: 95%; width: 32.2em"/>
</group>
<group col="4">
@@ -25,13 +25,13 @@
</group>
<group col="4" attrs="{'invisible':[('checkin_mode', '=', 0)]}" >
<field name="firstname_cardex" colspan="2"/>
<field name="lastname_cardex" colspan="2"/>
<field name="firstname_checkin_partner" colspan="2"/>
<field name="lastname_checkin_partner" colspan="2"/>
</group>
<group col="4" attrs="{'invisible':[('checkin_mode', '=', 0)]}" >
<field name="email_cardex" colspan="2"/>
<field name="mobile_cardex" colspan="2"/>
<field name="email_checkin_partner" colspan="2"/>
<field name="mobile_checkin_partner" colspan="2"/>
</group>
<footer>
@@ -41,7 +41,7 @@
<field name="checkin_mode" invisible="True"/>
<!-- <field name="checkin_show" invisible="True"/> -->
<!-- <field name="edit_checkin_cardex" invisible="True"/> -->
<!-- <field name="edit_checkin_checkin_partner" invisible="True"/> -->
</footer>
</sheet>
</form>
@@ -66,17 +66,17 @@
<label for="reservation_id" string="Resevation"/>
<field name="reservation_id" nolabel="1" domain="[('folio_id','=',context.get('folio'))]"/>
<button type="action" class="oe_stat_button"
id="cardex_smart_button"
id="checkin_partner_smart_button"
icon="fa-user-plus"
name="%(launch_checkin_wizard_add)d"
context="{'reservation_id': reservation_id, 'hidden_cardex': True}">
context="{'reservation_id': reservation_id, 'hidden_checkin_partner': True}">
<div>
<field name="pending_cardex"
<field name="pending_checkin_partner"
string="Pending" widget="statinfo"/>
</div>
</button>
</group>
<field name="cardex_ids" readonly="1"/>
<field name="checkin_partner_ids" readonly="1"/>
</sheet>
</form>
</field>

View File

@@ -58,7 +58,7 @@
<field name="price_total" string="Final Price"/>
<field name="folio_pending_amount" string="Folio Pending Amount"/>
<button type="object" class="oe_stat_button"
id="cardex_smart_button" icon="fa fa-3x fa-money"
id="checkin_partner_smart_button" icon="fa fa-3x fa-money"
name="action_pay_folio"
attrs="{'invisible':[('folio_pending_amount','==',0)]}"
/>

View File

@@ -8,7 +8,7 @@
<xpath expr="//field[@name='channel_type']" position="after">
<!-- field name="channel_reservation_id" attrs='{"readonly": [("able_to_modify_channel","=",False)], "invisible":[("channel_type","!=", "web")]}' string="OTA"/-->
</xpath>
<xpath expr="//field[@name='cardex_pending_count']" position="before">
<xpath expr="//field[@name='checkin_partner_pending_count']" position="before">
<group colspan="6" col="6">
<field name="is_from_ota" readonly="True" invisible="True"/>
</group>