defer.lua 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. --- Defer
  2. -- @module defer
  3. local defer = {
  4. name = "Defer ",
  5. slug = "defer",
  6. desc = "Defers a decision to another org",
  7. hide = true;
  8. }
  9. defer.data = {
  10. }
  11. --- Config for module
  12. -- @field defer_org Name or ID of target org
  13. -- @field approval_module module to use in target org
  14. -- @field prompt String passed on to approval_module
  15. defer.config = {
  16. approval_module = "consent",
  17. defer_org = "Root",
  18. prompt = ""
  19. }
  20. --- Initiate function
  21. -- @param result Callback if this module is embedded in other modules
  22. -- @function defer:initiate
  23. function defer:initiate(result)
  24. local defer_org = modpol.orgs.get_org(self.config.defer_org)
  25. if not defer_org then
  26. modpol.interactions.message(
  27. self.initiator, "Target org not found, aborting")
  28. self.org:delete_process(self.id)
  29. else
  30. defer_org:call_module(
  31. self.config.approval_module,
  32. self.initiator,
  33. {
  34. prompt = self.config.prompt
  35. },
  36. function()
  37. if result then result() end
  38. end)
  39. modpol.interactions.message(
  40. self.initiator, "Defer: action sent to " .. defer_org.name)
  41. end
  42. modpol.interactions.org_dashboard(
  43. self.initiator, self.org.id)
  44. self.org:delete_process(self.id)
  45. end
  46. --- (Required) Add to module table
  47. modpol.modules.defer = defer