123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- module Ticket::Article::HasTicketContactAttributesImpact
- extend ActiveSupport::Concern
- included do
- after_create :update_ticket_article_attributes
- after_destroy :update_ticket_count_attribute
- end
- private
- def update_ticket_article_attributes
- changed = false
- if article_count_update
- changed = true
- end
- if first_response_at_update
- changed = true
- end
- if sender_type_update
- changed = true
- end
- if last_contact_update_at
- changed = true
- end
- if !changed
- ticket.touch
- return
- end
- ticket.save!
- end
- def update_ticket_count_attribute
- changed = false
- if article_count_update
- changed = true
- end
-
- if !changed
- ticket.touch
- return
- end
- ticket.save!
- end
-
- def article_count_update
- current_count = ticket.article_count
- sender = Ticket::Article::Sender.lookup(name: 'System')
- count = Ticket::Article.where(ticket_id: ticket_id).where.not(sender_id: sender.id).count
- return false if current_count == count
- ticket.article_count = count
- true
- end
-
- def first_response_at_update
-
- return false if Setting.get('import_mode')
-
- return false if internal
-
- sender = Ticket::Article::Sender.lookup(id: sender_id)
- return false if sender.name != 'Agent'
-
- type = Ticket::Article::Type.lookup(id: type_id)
- return false if !type.communication
-
- return false if ticket.first_response_at
-
- ticket.first_response_at = created_at
- true
- end
-
- def sender_type_update
-
- count = Ticket::Article.where(ticket_id: ticket_id).count
- return false if count > 1
- ticket.create_article_type_id = type_id
- ticket.create_article_sender_id = sender_id
- true
- end
-
- def last_contact_update_at
-
- return false if internal
-
- sender = Ticket::Article::Sender.lookup(id: sender_id)
- return false if sender.name == 'System'
-
- return false if !Ticket::Article::Type.lookup(id: type_id).communication
-
- sender = Ticket::Article::Sender.lookup(id: sender_id)
- ticket = self.ticket
- if sender.name == 'Customer'
-
- if Setting.get('ticket_last_contact_behaviour') == 'based_on_customer_reaction'
-
- self.ticket.last_contact_customer_at = created_at
-
- self.ticket.last_contact_at = created_at
- return true
- end
-
- return false if ticket.last_contact_customer_at &&
- ticket.last_contact_at &&
- ticket.last_contact_customer_at == ticket.last_contact_at
-
- if ticket.last_contact_customer_at.nil? ||
- ticket.last_contact_agent_at.nil? ||
- ticket.last_contact_agent_at.to_i > ticket.last_contact_customer_at.to_i
-
- self.ticket.last_contact_customer_at = created_at
-
- self.ticket.last_contact_at = created_at
- end
- return true
- end
-
- return false if sender.name != 'Agent'
-
- self.ticket.last_contact_agent_at = created_at
-
- self.ticket.last_contact_at = created_at
- true
- end
- end
|