NameL3ss

reglas asignacion

Oct 24th, 2025 (edited)
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.91 KB | None | 0 0
  1. 1 tengo un formulario , cuando creas y configuras el formulario se le puede asignar un metodo de distribucion puede ser de 3 tipos, 1 manual , 2 automatico toma un grupo configurado y asigna a las personas del grupo considerando quien tiene la menor carga dentro de ese formularios refiriendose a solicitudes // injusto porque quien no tiene asignadas puede que sea una persona rapida 3- secuencial funciona igual que el automatico peor no se basa en la carga sino que por turnos, toma el grupo o grupos ordena a los usuarios por turno y va asignando a cada uno
  2.  
  3.  
  4.  
  5. buscar todas las solicitudes de todos los formularios dentro de la ventana de tiempo (por de defectno 1 mes en curso)
  6.  
  7. 0 - Llega nueva solicitud WorkflowRequest -> viene de solicitud
  8. 1- Del formulario (request form) actual de la solicitud -> sacar los jobs_ids = workflow_request.request_form.job_ids
  9.  
  10. 2 - buscar todos los formularios que tengan esos job_ids
  11. request_forms = customer.request_forms.joins(:jobs).where(jobs: { id: job_ids }).distinct
  12. estos son N formularios
  13.  
  14. 3- buscar todos los usuarios que puedo utilizar para asignar
  15.  
  16. users_to_attend = request_forms.each_with_object([]) do |rf, arr|
  17. arr << RequestForms::AttendableUsersQuery.new(rf).call
  18. end.flatten.uniq
  19.  
  20. 4- buscar todas las solicitudes (created_at del mes por defecto de la ventana) (todas, donde taken by NO sea nulo) que esten asignadas a todos los formularios que saque en el punto 2
  21. requests = customer.workflow_requests.where(request_form_id: request_forms.ids, created_at: Time.current.all_month).where.not(taken_by: nil)
  22.  
  23.  
  24. request_by_users = requests.group(:taken_by).size
  25. {1=>21, 14=>2, 3=>10, 4=>1, 2=>31}
  26.  
  27.  
  28. formularios 1,2,3
  29.  
  30.  
  31. solicitudes formulario1 -> quien es el usuario que tiene menos solicitudes (solicitudes tienen un taken_by -> ese es el user_id)
  32. solicitudes forumulario 2 ->
  33. solicitudes formulario 3 ->
  34.  
  35. Aca se deberia hacer un sum por usuarios y solicitudes eje: en form 1 que hay 10 sol pepito tiene 3, en form 2 de 20 sol, pepito tiene 4, y en form 3 con 15 sol pepito tiene 2 en total el usuario pepito tiene 9 solicitudes entre los 3 formularios
  36.  
  37. request_by_users:
  38. {1=>21, 14=>2, 3=>10, 4=>1, 2=>31}
  39.  
  40. el que tenga menos solicitudes es a quien debe ser asignada la solicitud
  41.  
  42. obtenemos el minimo de solicitudes
  43. min_value = request_by_users.value.min
  44. users_with_min = request_by_users.select { |_, v| v == min_value }.keys
  45.  
  46. si users_with_min es 1 entonces se termina el flujo y se asigna a el
  47.  
  48. en caso contrario puede devolver un array de user_ids este caso es empate
  49. {1=>3, 14=>2, 3=>10, 4=>1, 2=>3}
  50. user 1 y user 2 tienen 3 solicitudes
  51.  
  52. de esos 2 usuarios debo revisar quien atendio la ultima solicitud de cualquier formulario y este usuario es al cual NO se le va asignar la solicitud
  53.  
  54. last_request = requests.where(taken_by: users_with_min).order(created_at: :desc).first
  55. assigned_user_id = (users_with_min - [last_request.taken_by]).first
  56.  
  57.  
  58. reglas ?????
  59.  
  60.  
  61.  
Advertisement
Add Comment
Please, Sign In to add comment