Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions pms/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,5 @@
from . import wizards
from . import controllers
from .init_hook import post_init_hook
from . import services
from . import datamodels
2 changes: 2 additions & 0 deletions pms/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
# "email_template_qweb",
"sale",
"multi_pms_properties",
"base_rest",
"base_rest_datamodel",
],
"data": [
"security/pms_security.xml",
Expand Down
1 change: 1 addition & 0 deletions pms/controllers/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
from . import pms_portal
from . import pms_rest
7 changes: 7 additions & 0 deletions pms/controllers/pms_rest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from odoo.addons.base_rest.controllers import main


class BaseRestDemoPublicApiController(main.RestController):
_root_path = "/api/"
_collection_name = "pms.services"
_default_auth = "public"
5 changes: 5 additions & 0 deletions pms/datamodels/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from . import pms_reservation_short_info
from . import pms_reservation_long_info
from . import pms_reservation_search_param
from . import pms_reservation_patch_param
from . import pms_room_type_short_info
17 changes: 17 additions & 0 deletions pms/datamodels/pms_reservation_long_info.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from marshmallow import fields

from odoo.addons.datamodel.core import Datamodel


class PmsReservationLongInfo(Datamodel):
_name = "pms.reservation.long.info"

id = fields.Integer(required=True, allow_none=False)
partner = fields.String(required=True, allow_none=False)
checkin = fields.String(required=True, allow_none=False)
checkout = fields.String(required=True, allow_none=False)
preferred_room_id = fields.String(required=True, allow_none=False)
room_type_id = fields.String(required=True, allow_none=False)
price = fields.Float(required=True, allow_none=False)
partner_requests = fields.String(required=False, allow_none=True)
name = fields.String(required=True, allow_none=False)
8 changes: 8 additions & 0 deletions pms/datamodels/pms_reservation_patch_param.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from marshmallow import fields

from odoo.addons.datamodel.core import Datamodel


class PmsReservationPatchParam(Datamodel):
_name = "pms.reservation.patch.param"
partner_requests = fields.String(required=True, allow_none=False)
10 changes: 10 additions & 0 deletions pms/datamodels/pms_reservation_search_param.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from marshmallow import fields

from odoo.addons.datamodel.core import Datamodel


class PmsReservationSearchParam(Datamodel):
_name = "pms.reservation.search.param"

id = fields.Integer(required=False, allow_none=False)
name = fields.String(required=False, allow_none=False)
15 changes: 15 additions & 0 deletions pms/datamodels/pms_reservation_short_info.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from marshmallow import fields

from odoo.addons.datamodel.core import Datamodel


class PmsReservationShortInfo(Datamodel):
_name = "pms.reservation.short.info"

id = fields.Integer(required=True, allow_none=False)
partner = fields.String(required=True, allow_none=False)
checkin = fields.String(required=True, allow_none=False)
checkout = fields.String(required=True, allow_none=False)
preferred_room_id = fields.String(required=True, allow_none=False)
room_type_id = fields.String(required=True, allow_none=False)
name = fields.String(required=True, allow_none=False)
10 changes: 10 additions & 0 deletions pms/datamodels/pms_room_type_short_info.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from marshmallow import fields

from odoo.addons.datamodel.core import Datamodel


class PmsRoomTypeShortInfo(Datamodel):
_name = "pms.room.type.short.info"

id = fields.Integer(required=False, allow_none=False)
name = fields.String(required=False, allow_none=False)
2 changes: 2 additions & 0 deletions pms/services/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import reservation_services
from . import room_type_services
147 changes: 147 additions & 0 deletions pms/services/reservation_services.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
from odoo.addons.base_rest import restapi
from odoo.addons.base_rest_datamodel.restapi import Datamodel
from odoo.addons.component.core import Component


class PmsReservationService(Component):
_inherit = "base.rest.service"
_name = "pms.service"
_usage = "reservations"
_collection = "pms.services"
_description = """
Reservation API Services
Services developed with the new api provided by base_rest
"""

@restapi.method(
[(["/"], "GET")],
input_param=Datamodel("pms.reservation.search.param"),
output_param=Datamodel("pms.reservation.short.info", is_list=True),
auth="public",
)
def search(self, reservation_search_param):
"""
Devuelve un listado de todas las reservas,
admite parámetros de búsqueda 'id' y 'name'
(ejs.: "/reservations", "/reservations?id=1&name=R/21003449")
"""
domain = []
if reservation_search_param.name:
domain.append(("name", "like", reservation_search_param.name))
if reservation_search_param.id:
domain.append(("id", "=", reservation_search_param.id))
res = []
PmsReservationShortInfo = self.env.datamodels["pms.reservation.short.info"]
for reservation in self.env["pms.reservation"].sudo().search(domain):
res.append(
PmsReservationShortInfo(
id=reservation.id,
partner=reservation.partner_id.name,
checkin=str(reservation.checkin),
checkout=str(reservation.checkout),
preferred_room_id=reservation.preferred_room_id.name
if reservation.preferred_room_id
else "",
room_type_id=reservation.room_type_id.name
if reservation.room_type_id
else "",
name=reservation.name,
)
)
return res

@restapi.method(
[(["/<int:id>"], "GET")],
output_param=Datamodel("pms.reservation.long.info"),
auth="public",
)
def search_by_id(self, reservation_id):
"""
Devuelve la reserva que se corresponde con el 'id' indicado
(ej.: /reservations/34)
"""
reservation = self.env["pms.reservation"].sudo().browse(reservation_id)
if reservation:
PmsReservationLongInfo = self.env.datamodels["pms.reservation.long.info"]
return PmsReservationLongInfo(
id=reservation.id,
partner=reservation.partner_id.name,
checkin=str(reservation.checkin),
checkout=str(reservation.checkout),
preferred_room_id=reservation.preferred_room_id.name
if reservation.preferred_room_id
else "",
room_type_id=reservation.room_type_id.name
if reservation.room_type_id
else "",
name=reservation.name,
price=reservation.price_room_services_set,
partner_requests=reservation.partner_requests
if reservation.partner_requests
else "",
)

@restapi.method(
[(["/<int:id>/partner-requests"], "PATCH")],
input_param=Datamodel("pms.reservation.patch.param"),
output_param=Datamodel("pms.reservation.short.info"),
auth="public",
)
def update_partner_requests(self, reservation_id, reservation_patch_params):
"""
Actualiza el campo de peticiones de huéspedes para la reserva
indicada con el id (ej.: /reservations/34)
"""
reservation = self.env["pms.reservation"].sudo().browse(reservation_id)
reservation.partner_requests = reservation_patch_params.partner_requests
if reservation:
PmsReservationShortInfo = self.env.datamodels["pms.reservation.short.info"]
return PmsReservationShortInfo(
id=reservation.id,
partner=reservation.partner_id.name,
checkin=str(reservation.checkin),
checkout=str(reservation.checkout),
preferred_room_id=reservation.preferred_room_id.name
if reservation.preferred_room_id
else "",
room_type_id=reservation.room_type_id.name
if reservation.room_type_id
else "",
name=reservation.name,
price=reservation.price_room_services_set,
partner_requests=reservation.partner_requests
if reservation.partner_requests
else "",
)

@restapi.method(
[(["/<int:id>"], "DELETE")],
output_param=Datamodel("pms.reservation.short.info"),
auth="public",
)
def delete_reservation(self, reservation_id):
"""
Borra la reserva indicada con el id (ej.: /reservations/34)
"""
reservation = self.env["pms.reservation"].sudo().browse(reservation_id)
if reservation:
PmsReservationShortInfo = self.env.datamodels["pms.reservation.short.info"]
result = PmsReservationShortInfo(
id=reservation.id,
partner=reservation.partner_id.name,
checkin=str(reservation.checkin),
checkout=str(reservation.checkout),
preferred_room_id=reservation.preferred_room_id.name
if reservation.preferred_room_id
else "",
room_type_id=reservation.room_type_id.name
if reservation.room_type_id
else "",
name=reservation.name,
price=reservation.price_room_services_set,
partner_requests=reservation.partner_requests
if reservation.partner_requests
else "",
)
reservation.sudo().unlink()
return result
42 changes: 42 additions & 0 deletions pms/services/room_type_services.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
from odoo.addons.base_rest import restapi
from odoo.addons.base_rest_datamodel.restapi import Datamodel
from odoo.addons.component.core import Component


class PmsRoomTypeServices(Component):
_inherit = "base.rest.service"
_name = "pms.room.type.service"
_usage = "room-types"
_collection = "pms.services"
_description = """
Room type API Services
Services developed with the new api provided by base_rest
"""

@restapi.method(
[(["/"], "GET")],
input_param=Datamodel("pms.room.type.short.info"),
output_param=Datamodel("pms.room.type.short.info", is_list=True),
auth="public",
)
def search(self, room_type_search_param):
"""
Devuelve un listado de todos los tipos de habitación,
admite parámetros de búsqueda 'id' y 'name'
(ejs.: "/room-types", "/room-types?id=1&name=R/21003449")
"""
domain = []
if room_type_search_param.name:
domain.append(("name", "like", room_type_search_param.name))
if room_type_search_param.id:
domain.append(("id", "=", room_type_search_param.id))
res = []
PmsReservationShortInfo = self.env.datamodels["pms.room.type.short.info"]
for room_type in self.env["pms.room.type"].sudo().search(domain):
res.append(
PmsReservationShortInfo(
id=room_type.id,
name=room_type.name,
)
)
return res