You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

168 lines
5.2 KiB

  1. # Copyright 2019 Coop IT Easy SCRL fs
  2. # Robin Keunen <robin@coopiteasy.be>
  3. # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
  4. # pylint: disable=consider-merging-classes-inherited
  5. import logging
  6. from werkzeug.exceptions import BadRequest, NotFound
  7. from odoo import _
  8. from odoo.fields import Date
  9. from odoo.addons.base_rest.http import wrapJsonException
  10. from odoo.addons.component.core import Component
  11. from . import schemas
  12. _logger = logging.getLogger(__name__)
  13. class SubscriptionRequestService(Component):
  14. _inherit = "base.rest.service"
  15. _name = "subscription.request.services"
  16. # service_name todo subscription-request
  17. _usage = "subscription_request"
  18. _collection = "emc.services"
  19. _description = """
  20. Subscription requests
  21. """
  22. def get(self, _id):
  23. sr = self.env["subscription.request"].browse(_id)
  24. if sr:
  25. return self._to_dict(sr)
  26. else:
  27. raise wrapJsonException(
  28. NotFound(_("No subscription request for id %s") % _id)
  29. )
  30. def search(self, date_from=None, date_to=None):
  31. _logger.info("search from {} to {}".format(date_from, date_to))
  32. domain = []
  33. if date_from:
  34. date_from = Date.from_string(date_from)
  35. domain.append(("date", ">=", date_from))
  36. if date_to:
  37. date_to = Date.from_string(date_to)
  38. domain.append(("date", "<=", date_to))
  39. requests = self.env["subscription.request"].search(domain)
  40. response = {
  41. "count": len(requests),
  42. "rows": [self._to_dict(sr) for sr in requests],
  43. }
  44. return response
  45. def create(self, **params): # pylint: disable=method-required-super
  46. params = self._prepare_create(params)
  47. sr = self.env["subscription.request"].create(params)
  48. return self._to_dict(sr)
  49. def update(self, _id, **params):
  50. params = self._prepare_update(params)
  51. sr = self.env["subscription.request"].browse(_id)
  52. if not sr:
  53. raise wrapJsonException(
  54. NotFound(_("No subscription request for id %s") % _id)
  55. )
  56. sr.write(params)
  57. return self._to_dict(sr)
  58. def _to_dict(self, sr):
  59. sr.ensure_one()
  60. return {
  61. "id": sr.id,
  62. "name": sr.name,
  63. "email": sr.email,
  64. "state": sr.state,
  65. "date": Date.to_string(sr.date),
  66. "ordered_parts": sr.ordered_parts,
  67. "share_product": {
  68. "id": sr.share_product_id.id,
  69. "name": sr.share_product_id.name,
  70. },
  71. "address": {
  72. "street": sr.address,
  73. "zip_code": sr.zip_code,
  74. "city": sr.city,
  75. "country": sr.country_id.code,
  76. },
  77. "lang": sr.lang,
  78. }
  79. def _get_country(self, code):
  80. country = self.env["res.country"].search([("code", "=", code)])
  81. if country:
  82. return country
  83. else:
  84. raise wrapJsonException(
  85. BadRequest(_("No country for isocode %s") % code)
  86. )
  87. def _prepare_create(self, params):
  88. address = params["address"]
  89. country = self._get_country(address["country"])
  90. return {
  91. "name": params["name"],
  92. "email": params["email"],
  93. "ordered_parts": params["ordered_parts"],
  94. "share_product_id": params["share_product"],
  95. "address": address["street"],
  96. "zip_code": address["zip_code"],
  97. "city": address["city"],
  98. "country_id": country.id,
  99. "lang": params["lang"],
  100. }
  101. def _prepare_update(self, params):
  102. if "address" in params:
  103. address = params["address"]
  104. if "country" in address:
  105. country = self._get_country(address["country"]).id
  106. address["country"] = country
  107. else:
  108. address = {}
  109. params = {
  110. "name": params.get("name"),
  111. "email": params.get("email"),
  112. "state": params.get("state"),
  113. "ordered_parts": params.get("ordered_parts"),
  114. "share_product_id": params.get("share_product"),
  115. "address": address.get("street"),
  116. "zip_code": address.get("zip_code"),
  117. "city": address.get("city"),
  118. "country_id": address.get("country"),
  119. "lang": params.get("lang"),
  120. }
  121. params = {k: v for k, v in params.items() if v is not None}
  122. return params
  123. def _validator_get(self):
  124. return schemas.S_SUBSCRIPTION_REQUEST_GET
  125. def _validator_return_get(self):
  126. return schemas.S_SUBSCRIPTION_REQUEST_RETURN_GET
  127. def _validator_search(self):
  128. return schemas.S_SUBSCRIPTION_REQUEST_SEARCH
  129. def _validator_return_search(self):
  130. return schemas.S_SUBSCRIPTION_REQUEST_RETURN_SEARCH
  131. def _validator_create(self):
  132. return schemas.S_SUBSCRIPTION_REQUEST_CREATE
  133. def _validator_return_create(self):
  134. return schemas.S_SUBSCRIPTION_REQUEST_RETURN_GET
  135. def _validator_update(self):
  136. return schemas.S_SUBSCRIPTION_REQUEST_UPDATE
  137. def _validator_return_update(self):
  138. return schemas.S_SUBSCRIPTION_REQUEST_RETURN_GET