Proyecto

General

Perfil

Acciones

Funcionalidad #5229

cerrada

[Contratos] Enviar correo a jurídico cuando el contrato pasa a metaestado 'Revisión jurídico'

Añadido por Oscar Abad hace 10 meses. Actualizado hace 10 meses.

Estado:
Resuelta
Prioridad:
Normal
Asignado a:
Categoría:
Desarrollo
Versión prevista:
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

Exportar a: Atom PDF