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.

81 lines
2.9 KiB

  1. # Copyright 2020 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. from odoo import api, fields, models
  5. from .subscription_request_adapter import SubscriptionRequestAdapter
  6. class SubscriptionRequest(models.Model):
  7. _inherit = "subscription.request"
  8. source = fields.Selection(selection_add=[("emc_api", "Easy My Coop API")])
  9. binding_id = fields.One2many(
  10. comodel_name="emc.binding.subscription.request",
  11. inverse_name="internal_id",
  12. string="Binding ID",
  13. required=False,
  14. )
  15. @api.model
  16. def fetch_subscription_requests(self, date_from=None, date_to=None):
  17. SRBinding = self.env["emc.binding.subscription.request"]
  18. backend = self.env["emc.backend"].search([("active", "=", True)])
  19. backend.ensure_one()
  20. adapter = SubscriptionRequestAdapter(backend=backend)
  21. requests_dict = adapter.search(date_from=date_from, date_to=date_to)
  22. for request_dict in requests_dict["rows"]:
  23. external_id = request_dict["id"]
  24. request_values = adapter.to_write_values(request_dict)
  25. sr_binding = SRBinding.search_binding(backend, external_id)
  26. if sr_binding: # update request
  27. sr_binding.internal_id.write(request_values)
  28. else:
  29. srequest = self.env["subscription.request"].create(
  30. request_values
  31. )
  32. SRBinding.create(
  33. {
  34. "backend_id": backend.id,
  35. "external_id": external_id,
  36. "internal_id": srequest.id,
  37. }
  38. )
  39. external_ids = [row["id"] for row in requests_dict["rows"]]
  40. srequests = SRBinding.search(
  41. [
  42. ("backend_id", "=", backend.id),
  43. ("external_id", "in", external_ids),
  44. ]
  45. ).mapped("internal_id")
  46. return srequests
  47. @api.model
  48. def backend_read(self, external_id):
  49. SRBinding = self.env["emc.binding.subscription.request"]
  50. backend = self.env["emc.backend"].search([("active", "=", True)])
  51. backend.ensure_one()
  52. adapter = SubscriptionRequestAdapter(backend)
  53. sr_data = adapter.read(external_id)
  54. request_values = adapter.to_write_values(sr_data)
  55. sr_binding = SRBinding.search_binding(backend, external_id)
  56. if sr_binding: # update request
  57. srequest = sr_binding.internal_id
  58. srequest.write(request_values)
  59. else:
  60. srequest = self.env["subscription.request"].create(request_values)
  61. SRBinding.create(
  62. {
  63. "backend_id": backend.id,
  64. "external_id": external_id,
  65. "internal_id": srequest.id,
  66. }
  67. )
  68. return srequest