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)
|
priceTaxes = fields.Float(required=False, allow_none=True)
|
||||||
discount = fields.Float(required=False, allow_none=True)
|
discount = fields.Float(required=False, allow_none=True)
|
||||||
isBoardService = fields.Boolean(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_agency_service
|
||||||
from . import pms_service_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)])
|
reservation = self.env["pms.reservation"].search([("id", "=", reservation_id)])
|
||||||
if not reservation:
|
if not reservation:
|
||||||
raise MissingError(_("Reservation not found"))
|
raise MissingError(_("Reservation not found"))
|
||||||
|
|
||||||
result_services = []
|
result_services = []
|
||||||
PmsServiceInfo = self.env.datamodels["pms.service.info"]
|
PmsServiceInfo = self.env.datamodels["pms.service.info"]
|
||||||
for service in reservation.service_ids:
|
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(
|
result_services.append(
|
||||||
PmsServiceInfo(
|
PmsServiceInfo(
|
||||||
id=service.id,
|
id=service.id,
|
||||||
@@ -371,6 +385,7 @@ class PmsReservationService(Component):
|
|||||||
priceTaxes=round(service.price_tax, 2),
|
priceTaxes=round(service.price_tax, 2),
|
||||||
discount=round(service.discount, 2),
|
discount=round(service.discount, 2),
|
||||||
isBoardService=service.is_board_service,
|
isBoardService=service.is_board_service,
|
||||||
|
serviceLines=service_lines,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
return result_services
|
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:
|
if not service:
|
||||||
raise MissingError(_("Service not found"))
|
raise MissingError(_("Service not found"))
|
||||||
PmsServiceInfo = self.env.datamodels["pms.service.info"]
|
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(
|
return PmsServiceInfo(
|
||||||
id=service.id,
|
id=service.id,
|
||||||
name=service.name,
|
name=service.name,
|
||||||
@@ -42,16 +52,28 @@ class PmsServiceService(Component):
|
|||||||
priceTaxes=round(service.price_tax, 2),
|
priceTaxes=round(service.price_tax, 2),
|
||||||
discount=round(service.discount, 2),
|
discount=round(service.discount, 2),
|
||||||
isBoardService=service.is_board_service,
|
isBoardService=service.is_board_service,
|
||||||
serviceLines=[self.env.datamodels["pms.service.line.info"](
|
serviceLines=lines,
|
||||||
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],
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@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(
|
@restapi.method(
|
||||||
[
|
[
|
||||||
(
|
(
|
||||||
|
|||||||
Reference in New Issue
Block a user