Acciones
Funcionalidad #5229
cerrada[Contratos] Enviar correo a jurídico cuando el contrato pasa a metaestado 'Revisión jurídico'
Fecha de inicio:
2024-02-01
Fecha fin:
% Realizado:
100%
Tiempo estimado:
Versión:
Descripción
Especificación¶
Cuando un usuario cambie el estado de un contrato a uno con metaestado 'Revisión jurídico', se debe enviar un correo a todos los usuarios con rol 'Autorizador Jurídico'.
Análisis¶
Localizar el punto del código donde se cambia de estado un contrato para poder enviar el correo correspondiente: EstadoContratoController.modificar_crear
Implementación¶
app/views/contratos_mailer/aviso_revision_juridico_contrato.html.erb
<p><%= _("El contrato '%{nombre}' ha pasado a estado de revisión jurídico.")%{nombre: @contrato.codigo_nombre} %></p> <p><ul> <% @info_contrato.each do |k,v| %> <li><strong><%= k %>: </strong><%= v %></li> <% end %> </ul></p>
app/views/contratos_mailer/aviso_revision_juridico_contrato.text.erb
<%= _("El contrato '%{nombre}' ha pasado a estado de revisión jurídico.")%{nombre: @contrato.codigo_nombre} %>: <% @info_contrato.each do |k,v| -%> * <%= k %>: <%= v %> <% end -%>
app/mailers/contratos_mailer.rb
def aviso_revision_juridico_contrato destinatario, contrato
@usuario = destinatario
@contrato = contrato
@info_contrato = info_contrato contrato
if contrato.proyecto
@url = default_url_values.merge( seccion: 'proyectos', proyecto_id: contrato.proyecto_id,
menu: 'ejecucion_economica', controller: 'contrato' )
else
@url = default_url_values.merge( seccion: 'agentes', agente_id: contrato.agente_id,
menu: 'economico_agente', controller: 'contrato' )
end
texto_subject = _('El contrato %{contrato} ha pasado a estado de revisión jurídico')%{contrato: contrato.codigo}
subject = "[#{INSTANCIA}][AVISO][Contrato] #{texto_subject}"
# Envia el correo al usuario
logger.info "=========== Enviando mail de aviso de revisión jurídica del contrato '#{contrato.codigo_nombre}' a '#{@usuario.nombre_completo}'"
mail to: "#{@usuario.nombre_completo} <#{@usuario.correoe}>", subject: subject
end
app/models/contrato.rb
# Devolver todos los usuarios con rol de autorizador jurídico
def usuarios_autorizador_juridico
destinatarios = []
usuarios = UsuarioXAgente.joins(:rol_asignado).joins(:usuario).
where(:agente_id => agente_id, "usuario.bloqueado" => false, "rol.nombre" => "Autorizador Jurídico")
usuarios.each do |elem|
usuario_correo = Usuario.find_by_id elem.usuario_id
destinatarios.push(usuario_correo) if usuario_correo
end
return destinatarios
end
app/controllers/estado_contrato_controller.rb
# en gestion de estados de un contrato: cambia el estado
def modificar_crear
@contrato = (@proyecto||@agente).contrato.find_by_id params[:id]
estado_anterior = @contrato.estado_contrato.find_by_id params[:estado_anterior_id]
# PENDIENTE: Debemos validar que "estado_anterior" tenga el "estado_actual" a true
@estado = EstadoContrato.create(contrato_id: @contrato.id, fecha_inicio: Date.today, usuario_id: @usuario_identificado.id,
estado_actual: true, workflow_contrato_id: params[:nuevo_estado][:id])
if @estado.errors.empty?
if params[:selector] && params[:selector][:detalle] == '1'
errores_docu = sube_documento_detalle_contrato
logger.error "----------> ERROR: " + errores_docu.inspect unless errores_docu.empty?
end
# Eliminamos al estado anterior como "estado_actual"
estado_anterior.update_attributes(estado_actual: false, observaciones: params[:estado_anterior][:observaciones], fecha_fin: Date.today) if estado_anterior
# Enviar correo a usuarios con rol 'Autorizador Jurídico' cuando
# se pasa a un estado con metaestado 'revision_juridico'
if @estado.workflow_contrato.revision_juridico
usuarios_correo = @contrato.usuarios_autorizador_juridico
usuarios_correo.each do |destinatario|
Rails.logger.debug '[EstadoContratoController.modificar_crear] Enviando correo rol Autorizador Jurídico a ' + destinatario.correoe
begin
ContratosMailer.aviso_revision_juridico_contrato(destinatario, @contrato).deliver
rescue => e
Rails.logger.error '[EstadoContratoController.modificar_crear] Error enviando correo rol Autorizador Jurídico a ' + destinatario.correoe
Rails.logger.error e.inspect
end
end
end
@estados = @contrato.estado_contrato.reorder('id desc')
# Y luego actualizamos el listado de estados
render(:update) { |page| page.replace_html params[:update_listado], partial: 'estado_contrato/listado', locals: {update_listado: params[:update_listado]} }
else
datos_formulario
render(:update) { |page| page.recargar_formulario partial: 'estado_contrato/formulario_cambiar_estado', update: params[:update], mensaje: {errors: @estado.errors} }
end
end
Acciones