Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- alertas de documento - repositorio
- alertas de documento en un workflow
- alertas de workflow
- alertas en configuraciones puedes agregar atributos
- las nuevas son de repositorio y documento de workflow
- ActsAsAlertable::Alert es la tabla que contiene el detalle de configuracion
- crear definition
- kind = date_trigger -> date_based (en las viejas cuando es date triger existe un valor para observable_date)
- kind = simple_periodic -> periodic (nil en observable date)
- name == name
- action_key: "send_document_alert"
- alertable_id: document.id,
- alertable_type: "Document",
- is_active: true
- reference_field = observable_date -> date_trigger
- reference_field = nil cuando es simple periodic
- reference_date: -> aplica solo para simple_periodic
- #<ActsAsAlertable::Alert:0x00000001288537b0
- id: 1,
- alertable_type: "Document",
- name: "nueva alerta",
- observable_date: "document_end_date",
- kind: "date_trigger",
- advanced_type: "before",
- cron_format: "0 0 1 * *",
- alertables_custom_method: "any",
- notifications: [{"value"=>-7, "type"=>"days"}, {"value"=>-7, "type"=>"months"}],
- created_at: Mon, 21 Jul 2025 11:19:12 -04 -04:00,
- updated_at: Mon, 21 Jul 2025 11:19:12 -04 -04:00,
- deleted_at: nil,
- special_kind: "alert">
- Alerts::Definition
- => 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)
- Alerts::Schedule
- alerta antigua
- kind: "date_trigger",
- notifications: [{"value"=>-7, "type"=>"days"}], schedule diferentes para la misma alerta en caso de ser +1
- value == value
- type = unit
- schedule = Alerts::Schedule.new(value: -7, unit: :days)
- schedule.next_send_at = Alerts::Scheduling.next_send_at_for(schedule)
- schedule.save!
- alerta antigua
- kind: "simple_periodic",
- jugar con cron_format para llenar value y unit
- schedule = Alerts::Schedule
- schedule.next_send_at = Alerts::Scheduling.next_send_at_for(schedule)
- schedule.save!
- => 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)
- Alerts::Recipient
- acts_as_alertable_alert_alerteds.alerted_id -> recipient_id
- acts_as_alertable_alert_alerteds.alerted_type -> recipient_type
- => Alerts::Recipient(id: integer, alert_definition_id: integer, recipient_type: string, recipient_id: integer, created_at: datetime, updated_at: datetime)
- 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
- [#<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>]
- al eliminar un registro de ActsAsAlertable::AlertAlertable (se puede usar soft delete, discard) la relacion con ActsAsAlertable::AlertAlertable se mantiene
- document_alert_ids = Customer.first.documents.joins(:alert_alertables).ids
- 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")
- 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]]
- => [#<ActsAsAlertable::Alert:0x000000011b173c68
- id: 1,
- name: "nueva alerta",
- observable_date: "document_end_date",
- kind: "date_trigger",
- advanced_type: "before",
- cron_format: "0 0 1 * *",
- alertables_custom_method: "any",
- notifications: [{"value"=>-7, "type"=>"days"}, {"value"=>-7, "type"=>"months"}],
- special_kind: "alert">,
- #<ActsAsAlertable::Alert:0x000000011b173b28
- id: 2,
- name: "alerta2",
- observable_date: nil,
- kind: "simple_periodic",
- advanced_type: "before",
- cron_format: "0 0 1 * *",
- alertables_custom_method: "any",
- notifications: [{"value"=>-7, "type"=>"days"}],
- special_kind: "alert">]
Advertisement
Add Comment
Please, Sign In to add comment