NameL3ss

alertas migracion

Jul 21st, 2025
21
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.54 KB | None | 0 0
  1. alertas de documento - repositorio
  2. alertas de documento en un workflow
  3. alertas de workflow
  4.  
  5. alertas en configuraciones puedes agregar atributos
  6.  
  7.  
  8. las nuevas son de repositorio y documento de workflow
  9.  
  10.  
  11. ActsAsAlertable::Alert es la tabla que contiene el detalle de configuracion
  12.  
  13. crear definition
  14. kind = date_trigger -> date_based (en las viejas cuando es date triger existe un valor para observable_date)
  15. kind = simple_periodic -> periodic (nil en observable date)
  16.  
  17. name == name
  18. action_key: "send_document_alert"
  19. alertable_id: document.id,
  20. alertable_type: "Document",
  21. is_active: true
  22. reference_field = observable_date -> date_trigger
  23. reference_field = nil cuando es simple periodic
  24.  
  25. reference_date: -> aplica solo para simple_periodic
  26.  
  27. #<ActsAsAlertable::Alert:0x00000001288537b0
  28. id: 1,
  29. alertable_type: "Document",
  30. name: "nueva alerta",
  31. observable_date: "document_end_date",
  32. kind: "date_trigger",
  33. advanced_type: "before",
  34. cron_format: "0 0 1 * *",
  35. alertables_custom_method: "any",
  36. notifications: [{"value"=>-7, "type"=>"days"}, {"value"=>-7, "type"=>"months"}],
  37. created_at: Mon, 21 Jul 2025 11:19:12 -04 -04:00,
  38. updated_at: Mon, 21 Jul 2025 11:19:12 -04 -04:00,
  39. deleted_at: nil,
  40. special_kind: "alert">
  41.  
  42.  
  43. Alerts::Definition
  44. => Alerts::Definition(id: integer, name: string, alertable_type: string, alertable_id: integer, reference_field: string, is_active: boolean, customer_id: integer, created_at: datetime, updated_at: datetime, kind: integer, reference_date: datetime, action_key: string)
  45.  
  46.  
  47.  
  48.  
  49. Alerts::Schedule
  50. alerta antigua
  51. kind: "date_trigger",
  52.  
  53.  
  54. notifications: [{"value"=>-7, "type"=>"days"}], schedule diferentes para la misma alerta en caso de ser +1
  55. value == value
  56. type = unit
  57. schedule = Alerts::Schedule.new(value: -7, unit: :days)
  58. schedule.next_send_at = Alerts::Scheduling.next_send_at_for(schedule)
  59. schedule.save!
  60.  
  61.  
  62.  
  63. alerta antigua
  64. kind: "simple_periodic",
  65. jugar con cron_format para llenar value y unit
  66.  
  67.  
  68. schedule = Alerts::Schedule
  69. schedule.next_send_at = Alerts::Scheduling.next_send_at_for(schedule)
  70. schedule.save!
  71.  
  72.  
  73. => Alerts::Schedule(id: integer, alert_definition_id: integer, value: integer, unit: integer, last_sent_at: datetime, next_send_at: datetime, created_at: datetime, updated_at: datetime, days_of_week: integer, max_occurrences: integer, occurrences_count: integer, end_date: datetime, repeat_enabled: boolean)
  74.  
  75.  
  76. Alerts::Recipient
  77. acts_as_alertable_alert_alerteds.alerted_id -> recipient_id
  78. acts_as_alertable_alert_alerteds.alerted_type -> recipient_type
  79. => Alerts::Recipient(id: integer, alert_definition_id: integer, recipient_type: string, recipient_id: integer, created_at: datetime, updated_at: datetime)
  80.  
  81. ActsAsAlertable::AlertAlertable es la tabla que tiene el detalle del elemento que tiene la configuracion en este caso el documento, sera 1 o pueden ser varios relacionados con la misma configuracion? me parece que solo 1
  82.  
  83. [#<ActsAsAlertable::AlertAlertable:0x000000013fcf94b0 id: 1, alert_id: 1, alertable_type: "Document", alertable_id: 1323, created_at: Mon, 21 Jul 2025 11:19:12 -04 -04:00, updated_at: Mon, 21 Jul 2025 11:19:12 -04 -04:00>]
  84.  
  85. al eliminar un registro de ActsAsAlertable::AlertAlertable (se puede usar soft delete, discard) la relacion con ActsAsAlertable::AlertAlertable se mantiene
  86.  
  87. document_alert_ids = Customer.first.documents.joins(:alert_alertables).ids
  88.  
  89. current_alerts = ActsAsAlertable::Alert.joins(:alert_alertables, :alert_alerteds).where(alertable_type: "Document", acts_as_alertable_alert_alertables: {alertable_id: document_alert_ids}).select("acts_as_alertable_alerts.id, acts_as_alertable_alerts.name, acts_as_alertable_alerts.observable_date, acts_as_alertable_alerts.kind, acts_as_alertable_alerts.advanced_type, acts_as_alertable_alerts.cron_format, acts_as_alertable_alerts.alertables_custom_method, acts_as_alertable_alerts.notifications, acts_as_alertable_alerts.special_kind, acts_as_alertable_alert_alertables.alertable_id AS document_id")
  90. ActsAsAlertable::Alert Load (0.8ms) SELECT acts_as_alertable_alerts.id, acts_as_alertable_alerts.name, acts_as_alertable_alerts.observable_date, acts_as_alertable_alerts.kind, acts_as_alertable_alerts.advanced_type, acts_as_alertable_alerts.cron_format, acts_as_alertable_alerts.alertables_custom_method, acts_as_alertable_alerts.notifications, acts_as_alertable_alerts.special_kind, acts_as_alertable_alert_alertables.alertable_id AS document_id FROM "acts_as_alertable_alerts" INNER JOIN "acts_as_alertable_alert_alertables" ON "acts_as_alertable_alert_alertables"."alert_id" = "acts_as_alertable_alerts"."id" WHERE "acts_as_alertable_alerts"."deleted_at" IS NULL AND "acts_as_alertable_alerts"."special_kind" = $1 AND "acts_as_alertable_alerts"."alertable_type" = $2 AND "acts_as_alertable_alert_alertables"."alertable_id" IN ($3, $4) /*application:webdox.portal.backend.dev.g*/ [["special_kind", 0], ["alertable_type", "Document"], ["alertable_id", 1323], ["alertable_id", 1952]]
  91. => [#<ActsAsAlertable::Alert:0x000000011b173c68
  92. id: 1,
  93. name: "nueva alerta",
  94. observable_date: "document_end_date",
  95. kind: "date_trigger",
  96. advanced_type: "before",
  97. cron_format: "0 0 1 * *",
  98. alertables_custom_method: "any",
  99. notifications: [{"value"=>-7, "type"=>"days"}, {"value"=>-7, "type"=>"months"}],
  100. special_kind: "alert">,
  101. #<ActsAsAlertable::Alert:0x000000011b173b28
  102. id: 2,
  103. name: "alerta2",
  104. observable_date: nil,
  105. kind: "simple_periodic",
  106. advanced_type: "before",
  107. cron_format: "0 0 1 * *",
  108. alertables_custom_method: "any",
  109. notifications: [{"value"=>-7, "type"=>"days"}],
  110. special_kind: "alert">]
  111.  
Advertisement
Add Comment
Please, Sign In to add comment