From 525497fa06eeb117e20ae317458e141eb61118f6 Mon Sep 17 00:00:00 2001 From: Pablo Date: Sat, 13 Oct 2018 19:08:49 +0200 Subject: [PATCH] [WIP] Wizard Node Reservation --- .../wizards/wizard_hotel_node_reservation.py | 58 +++++++++++++++---- 1 file changed, 48 insertions(+), 10 deletions(-) diff --git a/hotel_node_master/wizards/wizard_hotel_node_reservation.py b/hotel_node_master/wizards/wizard_hotel_node_reservation.py index 2ead5e23a..77f5b0638 100644 --- a/hotel_node_master/wizards/wizard_hotel_node_reservation.py +++ b/hotel_node_master/wizards/wizard_hotel_node_reservation.py @@ -5,12 +5,13 @@ import wdb import logging +import urllib.error +import odoorpc.odoo from datetime import timedelta from odoo import models, fields, api, _ +from odoo.exceptions import ValidationError from odoo.tools import ( - misc, - DEFAULT_SERVER_DATE_FORMAT, - DEFAULT_SERVER_DATETIME_FORMAT) + DEFAULT_SERVER_DATE_FORMAT) _logger = logging.getLogger(__name__) @@ -42,7 +43,14 @@ class HotelNodeReservationWizard(models.TransientModel): @api.onchange('node_id') def onchange_node_id(self): self.ensure_one() + _logger.info('onchange_node_id(self): %s', self) if self.node_id: + try: + noderpc = odoorpc.ODOO(self.node_id.odoo_host, self.node_id.odoo_protocol, self.node_id.odoo_port) + noderpc.login(self.node_id.odoo_db, self.node_id.odoo_user, self.node_id.odoo_password) + except (odoorpc.error.RPCError, odoorpc.error.InternalError, urllib.error.URLError) as err: + raise ValidationError(err) + today = fields.Date.context_today(self.with_context()) # TODO check hotel timezone @@ -55,7 +63,13 @@ class HotelNodeReservationWizard(models.TransientModel): if checkin >= checkout: checkout = checkin + timedelta(days=1) - room_type_ids = self.env['hotel.node.room.type'].search([('node_id','=',self.node_id.id)]) + wdb.set_trace() + + rooms_availability = noderpc.env['hotel.room.type'].check_availability_room(checkin, checkout) + node.env['hotel.room.type'].search([('id', '=', room_type.id)]) + + room_type_ids = self.env['hotel.node.room.type'].search([('node_id', '=', self.node_id.id)]) + cmds = room_type_ids.mapped(lambda x: (0, False, { 'room_type_id': x.id, 'checkin': checkin, @@ -66,6 +80,12 @@ class HotelNodeReservationWizard(models.TransientModel): 'checkout': checkout, 'room_type_wizard_ids': cmds, }) +# +# def create_folio_node(self): +# # Mediante un botón en el nodo creamos el folio indicando {partner_id, room_lines} pasandole con el +# # formato o2m todas las reservas -room_lines- indicando {room_type_id, checkin, checkout, reservation_lines} +# # reservation_lines en formato o2m usando el campo json_days de node.room.type.wizard. +# class NodeRoomTypeWizard(models.TransientModel): @@ -82,11 +102,13 @@ class NodeRoomTypeWizard(models.TransientModel): node_reservation_wizard_id = fields.Many2one('hotel.node.reservation.wizard') + node_id = fields.Many2one(related='node_reservation_wizard_id.node_id') + room_type_id = fields.Many2one('hotel.node.room.type', 'Rooms Type') room_type_name = fields.Char('Name', related='room_type_id.name') - room_type_availability = fields.Integer('Availability', compute="_compute_room_type_availability") + room_type_availability = fields.Integer('Availability', compute="_compute_room_type_availability") rooms_qty = fields.Integer('Number of Rooms', default=0) @@ -95,9 +117,25 @@ class NodeRoomTypeWizard(models.TransientModel): checkout = fields.Date('Check Out', required=True, default=_get_default_checkout) - # compute and search fields, in the same order that fields declaration - @api.multi - def _compute_room_type_availability(self): - for record in self: - record.room_type_availability = 42; +# price_unit #compute +# price_total #compute +# json_days #enchufar como texto literal la cadena devuelta por el método prepare_reservation_lines del hotel.reservation del nodo.(para que funcione +# #es necesario que Darío modifique el método en el modulo Hotel haciendolo independiente del self. + # compute and search fields, in the same order that fields declaration + @api.depends('node_id') + def _compute_room_type_availability(self): + pass + # for record in self: + # record.room_type_availability = 42 +# +# @api.onchange('checkin','checkout') +# def onchange_dates(self): +# # Conectar con nodo para traer dispo(availability) y precio por habitación(price_unit) +# # availability: search de hotel.room.type.availability filtrando por room_type y date y escogiendo el min avail en el rango +# # preci_unit y json_days: usando prepare_reservation_lines +# +# @api.onchange('rooms_qty') +# def _compute_price_total(self): +# # Unidades x precio unidad (el precio de unidad ya incluye el conjunto de días) +#