dbo.LN_balances

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

Parameters

7
Name Data Type Length Description
@accion varchar 30
@p_contraparte int 4
@p_id_balance int 4
@p_clave_indicador varchar 50
@p_valor float 8
@p_user_id int 4
@p_valor_fecha datetime 8

SQL Script

Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE OR ALTER PROCEDURE dbo.LN_balances 

 -- Add the parameters for the stored procedure here

 @accion           varchar(30),
 @p_contraparte         int,
 @p_id_balance         int = null,
 @p_clave_indicador        varchar(50) = null,
 @p_valor          float = null,
 @p_user_id          int = null,
 @p_valor_fecha         datetime = null


AS
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 SET NOCOUNT ON;

 declare @gestion int = null 

    -- Insert statements for procedure here

 IF (@accion = 'producto') BEGIN

  if (@p_contraparte is not null) begin

   select LN_contrapartes.contraparte, LN_productos.producto,
     LN_productos.nombre_producto, LN_productos.producto_id,
     LN_productos.class_icon, LN_productos.etiqueta,
     LN_productos.balance_carga, LN_productos.balance_analisis,
     LN_productos.balance_score, LN_productos.balance_valoracion

   from LN_contrapartes inner join LN_contraparte_familias
      on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
   inner join LN_familia_productos on LN_contraparte_familias.familia = LN_familia_productos.familia
   inner join LN_productos on LN_familia_productos.producto = LN_productos.producto
   inner join LN_familias on 
    (LN_familia_productos.familia = LN_familias.familia
     and LN_contrapartes.cliente = LN_familias.cliente)
   inner join LN_cliente_productos on 
    (LN_familia_productos.producto = LN_cliente_productos.producto
     and LN_contrapartes.cliente = LN_cliente_productos.cliente)
   /*inner join LN_producto_tipo_doc on LN_cliente_productos.producto = LN_producto_tipo_doc.producto*/
   where LN_contrapartes.contraparte = @p_contraparte
   and LN_productos.balance > 0
   and LN_contraparte_familias.activo = 1
   and LN_cliente_productos.activo = 1
   and LN_familias.visible = 1
   and LN_familia_productos.activo = 1
   and LN_productos.visible = 1
   /*and LN_producto_tipo_doc.activo = 1*/
   group by LN_contrapartes.contraparte, LN_productos.producto,
     LN_productos.nombre_producto, LN_productos.producto_id,
     LN_productos.class_icon, LN_productos.etiqueta,
     LN_productos.balance_carga, LN_productos.balance_analisis,
     LN_productos.balance_score, LN_productos.balance_valoracion

  end


 END ELSE

  IF (@accion = 'ultimo_balance') BEGIN

   /* para obtener el ID del balance más nuevo PUBLICADO de una contraparte vinculado 
    a un documento LED que se encuentre VERIFICADO. De este modo se puede indicar
    al API de cálculo de scores de balances sobré qué registro debe calcularse */


   if (@p_contraparte is not null) begin

    select TOP 1 balances_contables.id_balance
    from balances_contables
    inner join LN_docs on balances_contables.id_balance = LN_docs.id_externo
    inner join LN_tipos_doc on LN_docs.tipo_doc = LN_tipos_doc.tipo_doc
    inner join LN_gestiones on (LN_docs.gestion = LN_gestiones.gestion
              and LN_docs.contraparte = LN_gestiones.contraparte)
    where LN_tipos_doc.es_balance > 0
    and LN_docs.contraparte = @p_contraparte
    and LN_docs.estado_doc = 'V'
    and LN_gestiones.desde <= GETDATE()
    and LN_gestiones.hasta >= CONVERT(date, GETDATE())
    and balances_contables.estado = 'PUBLICADO'
    order by balances_contables.fecha_balance DESC

   end

  END ELSE

   IF (@accion = 'balances_contraparte') BEGIN

    /* 
     para obtener los documentos balances de la gestión activa de la contraparte,
     ordenados por fecha de cierre independientemente de su estado de carga.
     Se cruza la información existente con balances_contables por fecha y cuit
     que se encuentren visibles y en estado PUBLICADO.
     De esta manera se sabe si en los balances que se muestran en la solapa de LED
     aparece alguno que es provisto por Fidelitas y no por la contraparte. Sería
     el caso en el registro se cumple esta condición:
     (LN_docs.estado_doc <> 'V' and balances_contables = 'PUBLICADO')
     */


    if (@p_contraparte is not null) begin

     DECLARE @cuitc varchar(50)

     SELECT @cuitc = padrones.identificacion, @gestion = ln_gestiones.gestion 
     from LN_contrapartes 
     inner join ln_gestiones on ln_gestiones.contraparte = ln_contrapartes.contraparte and ln_gestiones.vigente = 1
     inner join padrones on LN_contrapartes.id_padron = padrones.id_padron
     where LN_contrapartes.contraparte = @p_contraparte

     /*select TOP 3 balances_contables.fecha_balance, LN_docs.doc_id, LN_docs.estado_doc,
      LN_docs.inicio_ejercicio, LN_docs.fin_ejercicio, balances_contables.estado,
      balances_contables.id_balance, Year(balances_contables.fecha_balance) as anio_ejercicio
      from balances_contables
      left outer join LN_docs on balances_contables.id_balance = LN_docs.id_externo
      where balances_contables.cuit = @cuitc
      and balances_contables.estado = 'PUBLICADO'
      and isnull(balances_contables.visible,0) = 1
      and datediff(year, balances_contables.fecha_balance, GETDATE()) < 6
      order by balances_contables.fecha_balance DESC*/


     select top 5 bb.* from

      (select balances_contables.fecha_balance, LN_docs.estado_doc,
       LN_docs.inicio_ejercicio, LN_docs.fin_ejercicio, balances_contables.estado,
       balances_contables.id_balance, Year(balances_contables.fecha_balance) as anio_ejercicio,
       substring(convert(varchar,balances_contables.fecha_balance,103),4,7) as cierre_ejercicio
      from balances_contables
      left outer join LN_docs on ( balances_contables.id_balance = LN_docs.id_externo 
             and ln_docs.estado_doc !='X' and ln_docs.aplica = 1 
             and LN_docs.contraparte = @p_contraparte 
             and LN_docs.gestion = @gestion) 
      where balances_contables.cuit = @cuitc
      and balances_contables.estado = 'PUBLICADO'
      and isnull(balances_contables.visible,0) = 1
      --and datediff(year, balances_contables.fecha_balance, GETDATE()) < 6
      and balances_contables.fecha_balance >= convert(date,dateadd(yy, -6, getdate()))
            group by balances_contables.fecha_balance, LN_docs.estado_doc,
        LN_docs.inicio_ejercicio, LN_docs.fin_ejercicio, balances_contables.estado,
        balances_contables.id_balance) bb

     order by bb.fecha_balance DESC


    end
    
   END ELSE

    /* Consulta por ID balance */

    IF (@accion = 'datos_contables') BEGIN

     select  id_balance, cuit, codigo, fecha_balance, bal_manifestacion, ejercicio, periodo, monedaifx, moneda, ac_cajban, ac_inver, ac_crevta, ac_otrcre, ac_biecam, ac_otract, ac_bietan, ac_total, anc_crevta, anc_otrcre, 
                         anc_inver, anc_actint, anc_otract, anc_bieuso, anc_bieusovo, anc_depacu, anc_total, act_total, pc_ctapag, pc_presta, pc_remune, pc_carfis, pc_antcli, pc_otrpas, pc_total, pnc_cuepag, pnc_previ, pnc_presta, 
                         pnc_otrpas, pnc_deufis, pnc_total, iif(pas_total>0,pas_total,1) as pas_total, capsoc, resacu, res_noasig, patrimonio, res_vtanet, res_compras, res_cosmer, amortiza, res_gascom, res_gasadm, res_gasfin, res_otrosing, res_otrosegr, 
                         res_resfin, res_iva, ganancia, ebitda, ajucap, notas, comentarios, ind_liqcorr, ind_liqseca, ind_endeu, ind_solvencia, ind_endeuact, ind_captra, ind_cappro, ind_invbu, ind_inmact, ind_inmpat, ind_marbru, 
                         ind_utilfin, ind_retpat, ind_rotvta, ind_rotvta_dias, ind_rotact, ind_rotact_dias, ind_rentabilidad, ind_indrot, ind_indrot_dias, ind_rotinv, ind_rotinv_dias, ind_prest_pn, ind_prest_vtas, ind_solvencia_pat, 
                         fecha_act, usuario, idifx, created, created_by, modified, modified_by, visible, estado, id_padron, ind_ebipas, task_id, resacu_ant, res_noasig_ant, ruta_archivo, valoracion
     FROM            balances_contables

     where balances_contables.id_balance = @p_id_balance

    END ELSE

     /* Dada una contraparte, devuelve la consulta de indicadores (índices) de balances suscriptos
      por el cliente, si tiene el producto */


     IF (@accion = 'obtener_indicadores') BEGIN
      -- Se fija cuantos dias pasaron de la ultima carga o actualizacion de balance
      declare @cuit varchar(20) = (select identificacion from padrones where id_padron = 
                                     (select id_padron from LN_contrapartes where contraparte = @p_contraparte))
      declare @created  date = (select MAX(created)  from balances_contables where cuit = @cuit) 
      declare @modified date = (select MAX(modified) from balances_contables where cuit = @cuit) 
      set @created  = isnull(@created,'2018-01-01 00:00:00')
      set @modified = isnull(@modified,'2018-01-01 00:00:00')
      if ( @created >=  @modified ) set @modified =  @created 
      declare @dias_balance int = (datediff(day, @modified, getdate()))
      
      select LN_indicadores.indicador, LN_indicadores.nombre_indicador, 
        LN_indicadores.clave_indicador, LN_indicadores.valoracion,
        LN_indicadores.tipo_dato, LN_indicadores.orden,
        actualizacion.ultima_actualizacion, 
        -- Si fue actualizado, despues de la ultima vez que se calculo el indicador, lo tiene le ponemos 100 dias, para que lo calcule.
        iif(@dias_balance < isnull(actualizacion.dias_ultima_actualizacion, 100),100,
        isnull(actualizacion.dias_ultima_actualizacion, 100)) as dias_ultima_actualizacion

        --isnull(actualizacion.dias_ultima_actualizacion, 100) as dias_ultima_actualizacion

      from LN_indicadores 
      inner join LN_productos on LN_indicadores.producto = LN_productos.producto
      inner join LN_cliente_productos on LN_productos.producto = LN_cliente_productos.producto
      inner join LN_familia_productos on LN_cliente_productos.producto = LN_familia_productos.producto
      inner join LN_contraparte_familias on LN_familia_productos.familia = LN_contraparte_familias.familia
      inner join LN_contrapartes on LN_contraparte_familias.contraparte = LN_contrapartes.contraparte
      inner join LN_familias on (LN_contraparte_familias.familia = LN_familias.familia
             and LN_contrapartes.cliente = LN_familias.cliente)
      inner join LN_cliente_indicadores on (LN_contrapartes.cliente = LN_cliente_indicadores.cliente
               and LN_indicadores.indicador = LN_cliente_indicadores.indicador)

      left outer join (select LN_contraparte_indicadores.indicador,
            isnull(LN_contraparte_indicadores.modified, isnull(LN_contraparte_indicadores.created, '2018-01-01 00:00:00')) as ultima_actualizacion,
            datediff(day, isnull(LN_contraparte_indicadores.modified, isnull(LN_contraparte_indicadores.created, '2018-01-01 00:00:00')), getdate()) as dias_ultima_actualizacion
          from LN_contraparte_indicadores
          inner join LN_gestiones on (LN_contraparte_indicadores.contraparte = LN_gestiones.contraparte
                 and LN_contraparte_indicadores.gestion = LN_gestiones.gestion)
          where LN_contraparte_indicadores.contraparte = @p_contraparte
          and LN_gestiones.desde <= GETDATE()
          and LN_gestiones.hasta >= GETDATE()) actualizacion on LN_indicadores.indicador = actualizacion.indicador

      where ISNULL(LN_productos.balance, 0) > 0
      and LN_contrapartes.contraparte = @p_contraparte
      and LN_cliente_productos.activo = 1
      and LN_familia_productos.activo = 1
      and LN_contraparte_familias.activo = 1
      group by LN_indicadores.indicador, LN_indicadores.nombre_indicador, 
        LN_indicadores.clave_indicador, LN_indicadores.valoracion,
        LN_indicadores.tipo_dato, LN_indicadores.orden,
        actualizacion.ultima_actualizacion, actualizacion.dias_ultima_actualizacion
      order by LN_indicadores.orden

     END ELSE

      /* Guarda en la tabla contraparte_indicadores el valor de un indicador de balance.
       Requiere como parámetros el ID de contraparte, la clave del indicador y el valor numérico del indicador */

      IF (@accion = 'actualizar_indicador') BEGIN

       if (@p_contraparte > 0 AND @p_clave_indicador is not null) begin

        declare @gest int = null
        declare @indic int = null
        declare @tipo_dato varchar(1) = NULL

        select @gest = LN_gestiones.gestion,
          @indic = LN_indicadores.indicador,
          @tipo_dato = LN_indicadores.tipo_dato
        from LN_gestiones inner join LN_contrapartes on LN_gestiones.contraparte = LN_contrapartes.contraparte
        inner join LN_cliente_indicadores on LN_contrapartes.cliente = LN_cliente_indicadores.cliente
        inner join LN_indicadores on LN_cliente_indicadores.indicador = LN_indicadores.indicador
        inner join LN_cliente_productos on (LN_indicadores.producto = LN_cliente_productos.producto
                 AND LN_contrapartes.cliente = LN_cliente_productos.cliente)
        inner join LN_contraparte_familias on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
        inner join LN_familia_productos on (LN_contraparte_familias.familia = LN_familia_productos.familia
                 AND LN_indicadores.producto = LN_familia_productos.producto)

        where LN_contrapartes.contraparte = @p_contraparte
        and LN_indicadores.clave_indicador = @p_clave_indicador
        and LN_cliente_productos.activo = 1
        and LN_contraparte_familias.activo = 1
        and LN_familia_productos.activo = 1
        and LN_gestiones.desde <= GETDATE()
        and LN_gestiones.hasta >= GETDATE()
        group by LN_gestiones.gestion, LN_indicadores.indicador, LN_indicadores.tipo_dato

        if (@gest is not null AND @indic is not null) begin

         if not exists (select contraparte, gestion, indicador
             from LN_contraparte_indicadores
             where contraparte = @p_contraparte
             and gestion = @gest
             and indicador = @indic)

          if (@tipo_dato != 'D')

           insert into LN_contraparte_indicadores
           (contraparte, gestion, indicador, valor_numerico, created, created_by)
           values
           (@p_contraparte, @gest, @indic, @p_valor, GETDATE(), @p_user_id)

          else

           insert into LN_contraparte_indicadores
           (contraparte, gestion, indicador, valor_fecha, created, created_by)
           values
           (@p_contraparte, @gest, @indic, @p_valor_fecha, GETDATE(), @p_user_id)


         else

          if (@tipo_dato != 'D')

           update LN_contraparte_indicadores set
           valor_numerico = @p_valor,
           modified = GETDATE(),
           modified_by = @p_user_id
           where contraparte = @p_contraparte
           and gestion = @gest
           and indicador = @indic

          else

           update LN_contraparte_indicadores set
           valor_fecha = @p_valor_fecha,
           modified = GETDATE(),
           modified_by = @p_user_id
           where contraparte = @p_contraparte
           and gestion = @gest
           and indicador = @indic


        end

       end


      END

 
 
 
END

GO

Used By

No items found