mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[ADD]pms_api_rest: Add service-lines services
This commit is contained in:
@@ -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"))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
93
pms_api_rest/services/pms_service_line_service.py
Normal file
93
pms_api_rest/services/pms_service_line_service.py
Normal 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"))
|
||||
|
||||
@@ -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(
|
||||
[
|
||||
(
|
||||
|
||||
Reference in New Issue
Block a user