[ADD]pms_api_rest: Add service-lines services

This commit is contained in:
Darío Lodeiros
2022-07-22 17:31:24 +02:00
parent 861156832d
commit a3a2aaf290
5 changed files with 141 additions and 10 deletions

View File

@@ -15,4 +15,4 @@ class PmsServiceInfo(Datamodel):
priceTaxes = fields.Float(required=False, allow_none=True)
discount = fields.Float(required=False, allow_none=True)
isBoardService = fields.Boolean(required=False, allow_none=True)
serviceLines = NestedModel("pms.service.line.info", many=True)
serviceLines = fields.List(NestedModel("pms.service.line.info"))

View File

@@ -31,3 +31,4 @@ from . import pms_cancelation_rule_service
from . import pms_agency_service
from . import pms_service_service
from . import pms_service_line_service

View File

@@ -357,9 +357,23 @@ class PmsReservationService(Component):
reservation = self.env["pms.reservation"].search([("id", "=", reservation_id)])
if not reservation:
raise MissingError(_("Reservation not found"))
result_services = []
PmsServiceInfo = self.env.datamodels["pms.service.info"]
for service in reservation.service_ids:
PmsServiceLineInfo = self.env.datamodels["pms.service.line.info"]
service_lines = []
for line in service.service_line_ids:
service_lines.append(PmsServiceLineInfo(
id=line.id,
date=datetime.combine(
line.date, datetime.min.time()
).isoformat(),
priceUnit=line.price_unit,
discount=line.discount,
quantity=line.day_qty,
))
result_services.append(
PmsServiceInfo(
id=service.id,
@@ -371,6 +385,7 @@ class PmsReservationService(Component):
priceTaxes=round(service.price_tax, 2),
discount=round(service.discount, 2),
isBoardService=service.is_board_service,
serviceLines=service_lines,
)
)
return result_services

View File

@@ -0,0 +1,93 @@
from datetime import datetime
from odoo import _
from odoo.exceptions import MissingError
from odoo.addons.base_rest import restapi
from odoo.addons.base_rest_datamodel.restapi import Datamodel
from odoo.addons.component.core import Component
class PmsServiceLineService(Component):
_inherit = "base.rest.service"
_name = "pms.service.line.service"
_usage = "service-lines"
_collection = "pms.services"
@restapi.method(
[
(
[
"/<int:service_line_id>",
],
"GET",
)
],
output_param=Datamodel("pms.service.line.info", is_list=False),
auth="jwt_api_pms",
)
def get_service_line(self, service_line_id):
service_line = self.env["pms.service.line"].search([("id", "=", service_line_id)])
if not service_line:
raise MissingError(_("Service line not found"))
PmsServiceLineInfo = self.env.datamodels["pms.service.line.info"]
return PmsServiceLineInfo(
id=service_line.id,
date=datetime.combine(
service_line.date, datetime.min.time()
).isoformat(),
priceUnit=round(service_line.price_unit, 2),
discount=round(service_line.discount, 2),
quantity=service_line.day_qty,
)
@restapi.method(
[
(
[
"/<int:service_line_id>",
],
"PATCH",
)
],
input_param=Datamodel("pms.service.line.info"),
auth="jwt_api_pms",
)
def update_service_line(self, service_line_id, pms_service_line_info_data):
service_line = self.env["pms.service.line"].search([("id", "=", service_line_id)])
vals = {}
if service_line:
if pms_service_line_info_data.date:
vals["date"] = datetime.strptime(
pms_service_line_info_data.date, "%Y-%m-%d"
).date()
if pms_service_line_info_data.discount:
vals["discount"] = pms_service_line_info_data.discount
if pms_service_line_info_data.quantity:
vals["day_qty"] = pms_service_line_info_data.quantity
if pms_service_line_info_data.priceUnit:
vals["price_unit"] = pms_service_line_info_data.priceUnit
service_line.write(vals)
else:
raise MissingError(_("Service line not found"))
@restapi.method(
[
(
[
"/<int:service_line_id>",
],
"DELETE",
)
],
auth="jwt_api_pms",
)
def delete_service_line(self, service_line_id):
# esto tb podría ser con un browse
service_line = self.env["pms.service.line"].search([("id", "=", service_line_id)])
if service_line:
service_line.unlink()
else:
raise MissingError(_("Service line not found"))

View File

@@ -31,7 +31,17 @@ class PmsServiceService(Component):
if not service:
raise MissingError(_("Service not found"))
PmsServiceInfo = self.env.datamodels["pms.service.info"]
lines = [
self.env.datamodels["pms.service.line.info"](
id=line.id,
date=datetime.combine(
line.date, datetime.min.time()
).isoformat(),
priceUnit=line.price_unit,
discount=line.discount,
quantity=line.day_qty,
) for line in service.service_line_ids
]
return PmsServiceInfo(
id=service.id,
name=service.name,
@@ -42,16 +52,28 @@ class PmsServiceService(Component):
priceTaxes=round(service.price_tax, 2),
discount=round(service.discount, 2),
isBoardService=service.is_board_service,
serviceLines=[self.env.datamodels["pms.service.line.info"](
id=line.id,
date=datetime.combine(
line.date, datetime.min.time()
).isoformat(),
priceUnit=line.price_unit,
discount=line.discount,
) for line in service.service_line_ids],
serviceLines=lines,
)
@restapi.method(
[
(
[
"/<int:service_id>",
],
"DELETE",
)
],
auth="jwt_api_pms",
)
def delete_service(self, service_id):
# esto tb podría ser con un browse
service = self.env["pms.service"].search([("id", "=", service_id)])
if service:
service.unlink()
else:
raise MissingError(_("Service not found"))
@restapi.method(
[
(