Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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
- buscar todas las solicitudes de todos los formularios dentro de la ventana de tiempo (por de defectno 1 mes en curso)
- 0 - Llega nueva solicitud WorkflowRequest -> viene de solicitud
- 1- Del formulario (request form) actual de la solicitud -> sacar los jobs_ids = workflow_request.request_form.job_ids
- 2 - buscar todos los formularios que tengan esos job_ids
- request_forms = customer.request_forms.joins(:jobs).where(jobs: { id: job_ids }).distinct
- estos son N formularios
- 3- buscar todos los usuarios que puedo utilizar para asignar
- users_to_attend = request_forms.each_with_object([]) do |rf, arr|
- arr << RequestForms::AttendableUsersQuery.new(rf).call
- end.flatten.uniq
- 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
- requests = customer.workflow_requests.where(request_form_id: request_forms.ids, created_at: Time.current.all_month).where.not(taken_by: nil)
- request_by_users = requests.group(:taken_by).size
- {1=>21, 14=>2, 3=>10, 4=>1, 2=>31}
- formularios 1,2,3
- solicitudes formulario1 -> quien es el usuario que tiene menos solicitudes (solicitudes tienen un taken_by -> ese es el user_id)
- solicitudes forumulario 2 ->
- solicitudes formulario 3 ->
- 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
- request_by_users:
- {1=>21, 14=>2, 3=>10, 4=>1, 2=>31}
- el que tenga menos solicitudes es a quien debe ser asignada la solicitud
- obtenemos el minimo de solicitudes
- min_value = request_by_users.value.min
- users_with_min = request_by_users.select { |_, v| v == min_value }.keys
- si users_with_min es 1 entonces se termina el flujo y se asigna a el
- en caso contrario puede devolver un array de user_ids este caso es empate
- {1=>3, 14=>2, 3=>10, 4=>1, 2=>3}
- user 1 y user 2 tienen 3 solicitudes
- 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
- last_request = requests.where(taken_by: users_with_min).order(created_at: :desc).first
- assigned_user_id = (users_with_min - [last_request.taken_by]).first
- reglas ?????
Advertisement
Add Comment
Please, Sign In to add comment