mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
Merge branch '11.0' of https://github.com/hootel/hootel into 11.0
This commit is contained in:
@@ -27,10 +27,6 @@ class HotelRoom(models.Model):
|
|||||||
for item in room_type_ids:
|
for item in room_type_ids:
|
||||||
if item['new_room_type_id'] != item['old_room_type_id']:
|
if item['new_room_type_id'] != item['old_room_type_id']:
|
||||||
|
|
||||||
issue_backend_id = False
|
|
||||||
issue_internal_message = False
|
|
||||||
issue_channel_object_id = False
|
|
||||||
|
|
||||||
tz_hotel = self.env['ir.default'].sudo().get(
|
tz_hotel = self.env['ir.default'].sudo().get(
|
||||||
'res.config.settings', 'tz_hotel')
|
'res.config.settings', 'tz_hotel')
|
||||||
_today = fields.Date.context_today(self.with_context(tz=tz_hotel))
|
_today = fields.Date.context_today(self.with_context(tz=tz_hotel))
|
||||||
@@ -40,19 +36,32 @@ class HotelRoom(models.Model):
|
|||||||
('odoo_id', '=', item['old_room_type_id'])
|
('odoo_id', '=', item['old_room_type_id'])
|
||||||
])
|
])
|
||||||
|
|
||||||
# TODO: _onchange_availability doesn't exist
|
old_room_type_total_rooms_count = old_channel_room_type.total_rooms_count
|
||||||
#old_channel_room_type._onchange_availability()
|
|
||||||
|
if old_channel_room_type.default_quota > old_room_type_total_rooms_count:
|
||||||
|
old_channel_room_type.default_quota = old_room_type_total_rooms_count
|
||||||
|
|
||||||
|
if old_channel_room_type.default_max_avail > old_room_type_total_rooms_count:
|
||||||
|
old_channel_room_type.default_max_avail = old_room_type_total_rooms_count
|
||||||
|
|
||||||
if old_channel_room_type.ota_capacity > old_channel_room_type.capacity:
|
if old_channel_room_type.ota_capacity > old_channel_room_type.capacity:
|
||||||
old_channel_room_type._get_capacity()
|
old_channel_room_type.ota_capacity = old_channel_room_type.odoo_id.get_capacity()
|
||||||
issue_backend_id = old_channel_room_type.backend_id.id
|
issue_backend_id = old_channel_room_type.backend_id.id
|
||||||
issue_internal_message = "OTA capacity updated to %d for Room Type %s." % (
|
issue_internal_message = "OTA capacity updated to %d for Room Type %s." % (
|
||||||
old_channel_room_type.ota_capacity,
|
old_channel_room_type.ota_capacity,
|
||||||
old_channel_room_type.name)
|
old_channel_room_type.name)
|
||||||
issue_channel_object_id = old_channel_room_type.external_id
|
issue_channel_object_id = old_channel_room_type.external_id
|
||||||
|
|
||||||
|
self.env['hotel.channel.connector.issue'].create({
|
||||||
|
'backend_id': issue_backend_id,
|
||||||
|
'section': 'room',
|
||||||
|
'internal_message': issue_internal_message,
|
||||||
|
'channel_object_id': issue_channel_object_id,
|
||||||
|
})
|
||||||
|
|
||||||
channel_availability = self.env['channel.hotel.room.type.availability'].search([
|
channel_availability = self.env['channel.hotel.room.type.availability'].search([
|
||||||
('room_type_id', '=', item['old_room_type_id']),
|
('room_type_id', '=', item['old_room_type_id']),
|
||||||
('channel_avail', '>=', old_channel_room_type.total_rooms_count),
|
('channel_avail', '>=', old_room_type_total_rooms_count),
|
||||||
('date', '>=', _today)
|
('date', '>=', _today)
|
||||||
], order='date asc') or False
|
], order='date asc') or False
|
||||||
if channel_availability:
|
if channel_availability:
|
||||||
@@ -60,30 +69,44 @@ class HotelRoom(models.Model):
|
|||||||
dfrom = date_range[0]
|
dfrom = date_range[0]
|
||||||
dto = (fields.Date.from_string(date_range[-1]) + timedelta(days=1)).strftime(
|
dto = (fields.Date.from_string(date_range[-1]) + timedelta(days=1)).strftime(
|
||||||
DEFAULT_SERVER_DATE_FORMAT)
|
DEFAULT_SERVER_DATE_FORMAT)
|
||||||
|
|
||||||
self.env['channel.hotel.room.type.availability'].refresh_availability(
|
self.env['channel.hotel.room.type.availability'].refresh_availability(
|
||||||
checkin=dfrom,
|
checkin=dfrom,
|
||||||
checkout=dto,
|
checkout=dto,
|
||||||
backend_id=old_channel_room_type.backend_id.id,
|
backend_id=old_channel_room_type.backend_id.id,
|
||||||
room_type_id=item['old_room_type_id'],)
|
room_type_id=item['old_room_type_id'],)
|
||||||
|
|
||||||
|
# updates new room type values
|
||||||
new_channel_room_type = self.env['channel.hotel.room.type'].search([
|
new_channel_room_type = self.env['channel.hotel.room.type'].search([
|
||||||
('odoo_id', '=', item['new_room_type_id'])
|
('odoo_id', '=', item['new_room_type_id'])
|
||||||
])
|
])
|
||||||
|
|
||||||
# updates new room type values
|
new_room_type_total_rooms_count = new_channel_room_type.total_rooms_count
|
||||||
# TODO: _onchange_availability doesn't exist
|
|
||||||
#new_channel_room_type._onchange_availability()
|
if new_channel_room_type.default_quota > new_room_type_total_rooms_count:
|
||||||
|
new_channel_room_type.default_quota = new_room_type_total_rooms_count
|
||||||
|
|
||||||
|
if new_channel_room_type.default_max_avail > new_room_type_total_rooms_count:
|
||||||
|
new_channel_room_type.default_max_avail = new_room_type_total_rooms_count
|
||||||
|
|
||||||
if new_channel_room_type.ota_capacity > new_channel_room_type.capacity:
|
if new_channel_room_type.ota_capacity > new_channel_room_type.capacity:
|
||||||
new_channel_room_type._get_capacity()
|
new_channel_room_type.ota_capacity = new_channel_room_type.odoo_id.get_capacity()
|
||||||
issue_backend_id = new_channel_room_type.backend_id.id
|
issue_backend_id = new_channel_room_type.backend_id.id
|
||||||
issue_internal_message = "OTA capacity updated to %d for Room Type %s." % (
|
issue_internal_message = "OTA capacity updated to %d for Room Type %s." % (
|
||||||
new_channel_room_type.ota_capacity,
|
new_channel_room_type.ota_capacity,
|
||||||
new_channel_room_type.name)
|
new_channel_room_type.name)
|
||||||
issue_channel_object_id = old_channel_room_type.external_id
|
issue_channel_object_id = new_channel_room_type.external_id
|
||||||
|
|
||||||
|
self.env['hotel.channel.connector.issue'].create({
|
||||||
|
'backend_id': issue_backend_id,
|
||||||
|
'section': 'room',
|
||||||
|
'internal_message': issue_internal_message,
|
||||||
|
'channel_object_id': issue_channel_object_id,
|
||||||
|
})
|
||||||
|
|
||||||
channel_availability = self.env['channel.hotel.room.type.availability'].search([
|
channel_availability = self.env['channel.hotel.room.type.availability'].search([
|
||||||
('room_type_id', '=', item['new_room_type_id']),
|
('room_type_id', '=', item['new_room_type_id']),
|
||||||
('channel_avail', '>', old_channel_room_type.total_rooms_count),
|
('channel_avail', '>', new_room_type_total_rooms_count),
|
||||||
('date', '>=', _today)
|
('date', '>=', _today)
|
||||||
], order='date asc') or False
|
], order='date asc') or False
|
||||||
if channel_availability:
|
if channel_availability:
|
||||||
@@ -96,15 +119,6 @@ class HotelRoom(models.Model):
|
|||||||
checkout=dto,
|
checkout=dto,
|
||||||
backend_id=new_channel_room_type.backend_id.id,
|
backend_id=new_channel_room_type.backend_id.id,
|
||||||
room_type_id=item['new_room_type_id'], )
|
room_type_id=item['new_room_type_id'], )
|
||||||
|
|
||||||
if issue_backend_id:
|
|
||||||
self.env['hotel.channel.connector.issue'].create({
|
|
||||||
'backend_id': issue_backend_id,
|
|
||||||
'section': 'room',
|
|
||||||
'internal_message': issue_internal_message,
|
|
||||||
'channel_object_id': issue_channel_object_id,
|
|
||||||
})
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
res = super().write(vals)
|
res = super().write(vals)
|
||||||
return res
|
return res
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
##############################################################################
|
##############################################################################
|
||||||
#
|
#
|
||||||
@@ -367,7 +368,8 @@ class Data_Bi(models.Model):
|
|||||||
'Fecha_desde': line.date,
|
'Fecha_desde': line.date,
|
||||||
'Fecha_hasta': (datetime.strptime(line.date, "%Y-%m-%d") +
|
'Fecha_hasta': (datetime.strptime(line.date, "%Y-%m-%d") +
|
||||||
timedelta(days=1)).strftime("%Y-%m-%d"),
|
timedelta(days=1)).strftime("%Y-%m-%d"),
|
||||||
'ID_Tipo_Habitacion': line.reservation_id.room_id.room_type_id.id,
|
'ID_Tipo_Habitacion':
|
||||||
|
line.reservation_id.room_id.room_type_id.id,
|
||||||
'ID_Motivo_Bloqueo': id_m_b,
|
'ID_Motivo_Bloqueo': id_m_b,
|
||||||
'Nro_Habitaciones': 1})
|
'Nro_Habitaciones': 1})
|
||||||
return dic_bloqueos
|
return dic_bloqueos
|
||||||
@@ -376,8 +378,11 @@ class Data_Bi(models.Model):
|
|||||||
def data_bi_reservas(self, compan, lines, estado_array, dic_clientes):
|
def data_bi_reservas(self, compan, lines, estado_array, dic_clientes):
|
||||||
dic_reservas = []
|
dic_reservas = []
|
||||||
lineas = lines.filtered(
|
lineas = lines.filtered(
|
||||||
lambda n: (n.reservation_id.reservation_type == 'normal') and (
|
lambda n:
|
||||||
n.price > 0))
|
(n.reservation_id.reservation_type == 'normal') and
|
||||||
|
(n.price > 0) and
|
||||||
|
(n.reservation_id.state != 'cancelled')
|
||||||
|
)
|
||||||
_logger.info("DataBi: Calculating %s reservations", str(len(lineas)))
|
_logger.info("DataBi: Calculating %s reservations", str(len(lineas)))
|
||||||
channels = {'door': 0,
|
channels = {'door': 0,
|
||||||
'mail': 1,
|
'mail': 1,
|
||||||
@@ -408,10 +413,16 @@ class Data_Bi(models.Model):
|
|||||||
precio_dto = ota_prices[0]['precio_dto']
|
precio_dto = ota_prices[0]['precio_dto']
|
||||||
precio_iva = ota_prices[0]['precio_iva']
|
precio_iva = ota_prices[0]['precio_iva']
|
||||||
precio_comision = ota_prices[0]['precio_comision']
|
precio_comision = ota_prices[0]['precio_comision']
|
||||||
|
elif linea.reservation_id.channel_type == 'call':
|
||||||
|
# Call Center. 7% comision
|
||||||
|
precio_comision = (precio_neto*7/100)
|
||||||
|
precio_neto -= precio_comision
|
||||||
|
precio_iva = (precio_neto*10/100)
|
||||||
|
precio_neto -= precio_iva
|
||||||
else:
|
else:
|
||||||
precio_iva = round((precio_neto-(precio_neto/1.1)), 2)
|
precio_iva = round((precio_neto-(precio_neto/1.1)), 2)
|
||||||
precio_neto -= precio_iva
|
precio_neto -= precio_iva
|
||||||
|
|
||||||
if linea.reservation_id.discount != 0:
|
if linea.reservation_id.discount != 0:
|
||||||
precio_dto = linea.price * (
|
precio_dto = linea.price * (
|
||||||
linea.reservation_id.discount/100)
|
linea.reservation_id.discount/100)
|
||||||
@@ -502,10 +513,8 @@ class Data_Bi(models.Model):
|
|||||||
l for l in dic_clientes if l['Descripcion'] == tour.name),
|
l for l in dic_clientes if l['Descripcion'] == tour.name),
|
||||||
False)
|
False)
|
||||||
response = mach['ID_Cliente']
|
response = mach['ID_Cliente']
|
||||||
# _logger.info("%s Por Agencia: %s :", mach['Descripcion'], str(response))
|
|
||||||
else:
|
else:
|
||||||
response = 908
|
response = 908
|
||||||
# _logger.info("%s Por Agencia: %s :",reserva.reservation_id.folio_id.name, str(response))
|
|
||||||
|
|
||||||
return response
|
return response
|
||||||
|
|
||||||
@@ -523,68 +532,78 @@ class Data_Bi(models.Model):
|
|||||||
precio_iva = (precio_neto*10/100)
|
precio_iva = (precio_neto*10/100)
|
||||||
precio_neto -= precio_iva
|
precio_neto -= precio_iva
|
||||||
|
|
||||||
if reserva.reservation_id.ota_id.ota_id == "9":
|
elif reserva.reservation_id.ota_id.ota_id == "9":
|
||||||
# Hotelbeds 20% comision
|
# Hotelbeds 20% comision
|
||||||
precio_comision = (precio_neto*20/100)
|
precio_comision = (precio_neto*20/100)
|
||||||
precio_neto -= precio_comision
|
precio_neto -= precio_comision
|
||||||
precio_iva = (precio_neto*10/100)
|
precio_iva = (precio_neto*10/100)
|
||||||
precio_neto -= precio_iva
|
precio_neto -= precio_iva
|
||||||
|
|
||||||
if reserva.reservation_id.ota_id.ota_id == "11":
|
elif reserva.reservation_id.ota_id.ota_id == "11":
|
||||||
# HRS 20% comision
|
# HRS 20% comision
|
||||||
precio_comision = (precio_neto*20/100)
|
precio_comision = (precio_neto*20/100)
|
||||||
precio_neto -= precio_comision
|
precio_neto -= precio_comision
|
||||||
precio_iva = (precio_neto*10/100)
|
precio_iva = (precio_neto*10/100)
|
||||||
precio_neto -= precio_iva
|
precio_neto -= precio_iva
|
||||||
|
|
||||||
if reserva.reservation_id.ota_id.ota_id == "1":
|
elif reserva.reservation_id.ota_id.ota_id == "1":
|
||||||
# Expedia.
|
# Expedia.
|
||||||
precio_comision = (precio_neto*15/100)
|
expedia_rate = self.data_bi_rate_expedia(reserva)
|
||||||
precio_neto -= precio_comision
|
|
||||||
precio_iva = (precio_neto*10/100)
|
# if reserva.reservation_id.folio_id.name == 'F/03767':
|
||||||
|
# # Debug Stop -------------------
|
||||||
|
# import wdb; wdb.set_trace()
|
||||||
|
# # Debug Stop -------------------
|
||||||
|
|
||||||
|
precio_iva = precio_neto-(precio_neto/1.1)
|
||||||
precio_neto -= precio_iva
|
precio_neto -= precio_iva
|
||||||
if reserva.reservation_id.channel_bind_ids.channel_raw_data:
|
|
||||||
data = json.loads(
|
|
||||||
reserva.reservation_id.channel_bind_ids.channel_raw_data)
|
|
||||||
|
|
||||||
jsonBooked = data['booked_rooms'][0]
|
if (expedia_rate[3] == 'MERCHANT'):
|
||||||
if jsonBooked.get('ancillary').get(
|
precio_comision = inv_percent(precio_neto, expedia_rate[1])
|
||||||
'channel_rate_name') is not None:
|
|
||||||
jsonRate = jsonBooked.get('ancillary').get(
|
|
||||||
'channel_rate_name')
|
|
||||||
# _logger.warning("EXPEDIA ancillary : %s - %s",
|
|
||||||
# jsonRate, reserva.id)
|
|
||||||
|
|
||||||
elif jsonBooked.get('roomdays')[0].get(
|
|
||||||
'ancillary').get(
|
|
||||||
'channel_rate_name') is not None:
|
|
||||||
jsonRate = jsonBooked.get(
|
|
||||||
'roomdays')[0].get(
|
|
||||||
'ancillary').get('channel_rate_name')
|
|
||||||
# _logger.warning("EXPEDIA roomdays : %s - %s",
|
|
||||||
# jsonRate, reserva.id)
|
|
||||||
|
|
||||||
else:
|
|
||||||
_logger.critical(
|
|
||||||
"EXPEDIA Tarifa No Contemplada : "
|
|
||||||
+ jsonBooked)
|
|
||||||
|
|
||||||
jsonRefundable = jsonRate.upper().find('REFUNDABLE')
|
|
||||||
# _logger.warning("EXPEDIA Tarifa : %s", jsonRate)
|
|
||||||
# _logger.warning("EXPEDIA Tarifa : %s y %s",
|
|
||||||
# jsonRate, str(jsonRefundable))
|
|
||||||
|
|
||||||
# 10 % Iva
|
|
||||||
precio_iva = round((precio_neto-(precio_neto/1.1)), 2)
|
|
||||||
# 18 % comision ?
|
|
||||||
precio_comision = inv_percent(
|
|
||||||
precio_neto, self.env.user.company_id.expedia_rate)
|
|
||||||
precio_neto += precio_comision
|
precio_neto += precio_comision
|
||||||
# 3% Refundable ?
|
# iva "interno" de expedia.....
|
||||||
if jsonRefundable >= 0:
|
precio_iva2 = (precio_neto*10/100)
|
||||||
precio_dto = inv_percent(precio_neto, 3)
|
precio_neto += precio_iva2
|
||||||
precio_neto += precio_dto
|
else:
|
||||||
|
precio_comision = precio_neto*((100 - expedia_rate[1])/100)
|
||||||
|
precio_neto += precio_comision
|
||||||
|
precio_neto -= precio_comision
|
||||||
|
|
||||||
|
if expedia_rate[2] != 'NONE':
|
||||||
|
# De enero a marzo: 7%
|
||||||
|
# De abril a 15 octubre: 5%
|
||||||
|
# De 16 octubre a 31 diciembre: 7%
|
||||||
|
fence_dto = 7
|
||||||
|
fence_dia = int(reserva.date[8:10])
|
||||||
|
fence_mes = int(reserva.date[5:7])
|
||||||
|
if (fence_mes >= 4) and (fence_mes <= 10):
|
||||||
|
fence_dto = 5
|
||||||
|
if (fence_dia > 15) and (fence_mes == 10):
|
||||||
|
fence_dto = 7
|
||||||
|
precio_dto += inv_percent(precio_neto, fence_dto)
|
||||||
|
precio_neto += precio_dto
|
||||||
|
|
||||||
|
if expedia_rate[0] == 'NON-REFUNDABLE':
|
||||||
|
precio_dto += inv_percent(precio_neto, 3)
|
||||||
|
precio_neto += precio_dto
|
||||||
|
|
||||||
|
# _logger.info("%s - %s - %s - %s - En Odoo:%s - Neto a MOP:%s",
|
||||||
|
# reserva.reservation_id.folio_id.name,
|
||||||
|
# expedia_rate[0],
|
||||||
|
# expedia_rate[2],
|
||||||
|
# expedia_rate[3],
|
||||||
|
# reserva.price,
|
||||||
|
# precio_neto
|
||||||
|
# )
|
||||||
|
# _logger.info('Neto: %s Comision: %s IVA: %s DTO: %s ',
|
||||||
|
# precio_neto,
|
||||||
|
# precio_comision,
|
||||||
|
# precio_iva,
|
||||||
|
# precio_dto)
|
||||||
|
precio_neto = round(precio_neto, 2)
|
||||||
|
precio_comision = round(precio_comision, 2)
|
||||||
|
precio_iva = round(precio_iva, 2)
|
||||||
|
precio_dto = round(precio_dto, 2)
|
||||||
response_dic.append({'ota': reserva.reservation_id.ota_id.id,
|
response_dic.append({'ota': reserva.reservation_id.ota_id.id,
|
||||||
'ota_id': reserva.reservation_id.ota_id.ota_id,
|
'ota_id': reserva.reservation_id.ota_id.ota_id,
|
||||||
'precio_odoo': reserva.price,
|
'precio_odoo': reserva.price,
|
||||||
@@ -595,6 +614,75 @@ class Data_Bi(models.Model):
|
|||||||
})
|
})
|
||||||
return response_dic
|
return response_dic
|
||||||
|
|
||||||
|
@api.model
|
||||||
|
def data_bi_rate_expedia(self, reserva):
|
||||||
|
if datetime.strptime(reserva.reservation_id.folio_id.date_order[:10],
|
||||||
|
"%Y-%m-%d") < datetime(2019, 5, 9):
|
||||||
|
comi_rate = 18
|
||||||
|
else:
|
||||||
|
comi_rate = self.env.user.company_id.expedia_rate
|
||||||
|
json_rate = ''
|
||||||
|
json_promo = 'NONE'
|
||||||
|
json_pay_model = ''
|
||||||
|
if reserva.reservation_id.channel_bind_ids.channel_raw_data:
|
||||||
|
data = json.loads(
|
||||||
|
reserva.reservation_id.channel_bind_ids.channel_raw_data)
|
||||||
|
|
||||||
|
if data.get('channel_data')['pay_model'] is not None:
|
||||||
|
json_pay_model = data.get('channel_data')['pay_model'].upper()
|
||||||
|
else:
|
||||||
|
_logger.critical("EXPEDIA NO pay_model: %s",
|
||||||
|
reserva.reservation_id.folio_id.name,)
|
||||||
|
json_pay_model = 'MERCHANT'
|
||||||
|
|
||||||
|
if data.get('ancillary') is not None:
|
||||||
|
json_rate = data.get('ancillary').get('Expedia Rates').upper()
|
||||||
|
# _logger.info("EXPEDIA ANCILLARY 1 : %s - %s",
|
||||||
|
# json_rate,
|
||||||
|
# reserva.reservation_id.folio_id.name)
|
||||||
|
|
||||||
|
else:
|
||||||
|
jsonBooked = data['booked_rooms'][0]
|
||||||
|
if jsonBooked.get('ancillary').get(
|
||||||
|
'channel_rate_name') is not None:
|
||||||
|
json_rate = jsonBooked.get('ancillary').get(
|
||||||
|
'channel_rate_name').upper()
|
||||||
|
# _logger.info("EXPEDIA ANCILLARY 2 : %s - %s",
|
||||||
|
# json_rate,
|
||||||
|
# reserva.reservation_id.folio_id.name)
|
||||||
|
|
||||||
|
elif data.get('booked_rooms')[0].get(
|
||||||
|
'roomdays')[0].get('ancillary').get(
|
||||||
|
'channel_rate_name') is not None:
|
||||||
|
json_rate = data.get(
|
||||||
|
'booked_rooms')[0].get(
|
||||||
|
'roomdays')[0].get(
|
||||||
|
'ancillary').get('channel_rate_name').upper()
|
||||||
|
json_promo = data.get(
|
||||||
|
'booked_rooms')[0].get(
|
||||||
|
'roomdays')[0].get(
|
||||||
|
'ancillary').get('promoName').upper()
|
||||||
|
# _logger.info("EXPEDIA ANCILLARY 3 : %s - %s",
|
||||||
|
# json_rate,
|
||||||
|
# reserva.reservation_id.folio_id.name)
|
||||||
|
|
||||||
|
else:
|
||||||
|
_logger.critical("EXPEDIA Tarifa No Contemplada: %s",
|
||||||
|
reserva.reservation_id.folio_id.name)
|
||||||
|
json_rate = 'ROOM ONLY'
|
||||||
|
else:
|
||||||
|
_logger.error("EXPEDIA NO RAW DATA: %s",
|
||||||
|
reserva.reservation_id.folio_id.name)
|
||||||
|
json_rate = 'ROOM ONLY'
|
||||||
|
|
||||||
|
if json_rate == '':
|
||||||
|
_logger.critical("EXPEDIA Tarifa No Contemplada: %s",
|
||||||
|
reserva.reservation_id.folio_id.name)
|
||||||
|
json_rate = 'ROOM ONLY'
|
||||||
|
if json_promo == '':
|
||||||
|
json_promo = 'NONE'
|
||||||
|
return [json_rate, comi_rate, json_promo, json_pay_model]
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def data_bi_get_codeine(self, reserva):
|
def data_bi_get_codeine(self, reserva):
|
||||||
response = 'NONE'
|
response = 'NONE'
|
||||||
|
|||||||
Reference in New Issue
Block a user