dbo.LN_dependencia_economica

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

Parameters

1
Name Data Type Length Description
@p_contraparte int 4

SQL Script

Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
/*
exec [LN_dependencia_economica] 95
*/

CREATE OR ALTER PROCEDURE dbo.LN_dependencia_economica 
@p_contraparte int 
 
AS
BEGIN
 SET NOCOUNT ON;
 
  DECLARE @gest int = NULL, @cliente int = null , @cuit varchar(20) = null, @id_padron int = null
 
  DECLARE @campo      int = null
  DECLARE @seccion     int = null
  DECLARE @tipo_campo     varchar(1) = null
  DECLARE @monto_ventas    money = NULL
  DECLARE @moneda_ventas varchar(10) = NULL
  DECLARE @monto_iva        money = NULL
  DECLARE @monto_compras    money = NULL
  DECLARE @moneda_compras varchar(10) = NULL
  declare @ventas_declaradas          money = NULL
  declare @ventas_por_iva             money = NULL
  declare @ventas_mas_iva             money = NULL
  DECLARE @dep_econ_calc_ventas  float = NULL
  DECLARE @dep_econ_calc_ventas_mas_iva float = NULL
  DECLARE @dep_econ_calc_iva    float = NULL
  DECLARE @fecha_vigencia    datetime = null
  DECLARE @leyenda varchar(max) = NULL
  DECLARE @doc_id int, @tipo_doc int

  SELECT  @gest = LN_gestiones.gestion,
    @cuit = padrones.identificacion,
    @cliente = LN_contrapartes.cliente,
    @id_padron = LN_contrapartes.id_padron
  FROM LN_gestiones INNER JOIN LN_contrapartes
  ON LN_gestiones.contraparte = LN_contrapartes.contraparte
  INNER JOIN padrones ON LN_contrapartes.id_padron = padrones.id_padron
  WHERE LN_gestiones.desde <= GETDATE()
  AND LN_gestiones.hasta >= GETDATE()
  AND LN_contrapartes.activo = 1
  AND LN_contrapartes.contraparte = @p_contraparte

  if (@gest > 0) begin

   /* Verifico el indicador Dependencia Económica Calculada */

   DECLARE @idec int = null
   DECLARE @producto_de int = NULL

   select @idec = LN_indicadores.indicador,
     @producto_de = LN_indicadores.producto
   from LN_indicadores inner join LN_productos on 
    LN_indicadores.producto = LN_productos.producto
   inner join LN_familia_productos on
    LN_productos.producto = LN_familia_productos.producto
   inner join LN_familias on
    LN_familia_productos.familia = LN_familias.familia
   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
    AND LN_familias.cliente = LN_contrapartes.cliente)
   inner join LN_cliente_productos on
    (LN_productos.producto = LN_cliente_productos.producto
    AND LN_contrapartes.cliente = LN_cliente_productos.cliente)
   where LN_contrapartes.contraparte = @p_contraparte
   and LN_indicadores.clave_indicador = 'DEP_ECON_CALC'
   and LN_familias.visible = 1
   and LN_familia_productos.activo = 1
   and LN_cliente_productos.activo = 1
   and LN_productos.visible = 1

   if (@idec > 0) begin

    /* Búsqueda de un documento de la contraparte cargado con información de ventas */

    select @campo = LN_tipo_doc_campos.campo, 
      @seccion = LN_tipo_doc_campos.seccion,
      @doc_id = LN_docs.doc_id, 
      @tipo_doc = LN_docs.tipo_doc,
      @tipo_campo = LN_campos.tipo_campo /*,
       @fecha_vigencia = LN_docs.fecha_vigencia*/


    from LN_tipo_doc_campos
    INNER JOIN LN_campos on LN_tipo_doc_campos.campo = LN_campos.campo
    INNER JOIN LN_docs on LN_tipo_doc_campos.tipo_doc = LN_docs.tipo_doc
    where LN_docs.contraparte = @p_contraparte
    and LN_docs.gestion = @gest
    and LN_tipo_doc_campos.campo_id = 'VENTAS-ANUALES'
    and LN_docs.estado_doc = 'V'

    /* Buscamos: el ultimo año cargado en las declaraciones de iva - ventas, para comparar con las compras del mismo año */
    if (@doc_id > 0)
    select @fecha_vigencia = convert(date,convert(char(4),max(year(valor_fecha))) + '-12-31')
      FROM LN_doc_campos_col
     WHERE doc_id = @doc_id
      AND seccion = @seccion
      AND campo = @campo
      AND col = 0
    
    --select @fecha_vigencia

    if (@doc_id > 0 AND @fecha_vigencia is not null) begin

     /* Existe el documento de ventas, busco las compras en un período anual */

     if exists ( select cliente 
        from LN_dep_econ_compras
        where cliente = @cliente
        and (id_padron = @id_padron or identificacion = @cuit) 
        /*and desde >= DATEADD(DAY,1,DATEADD(YEAR,-1,CONVERT(DATE, @fecha_vigencia)))
         and hasta <= CONVERT(DATE, @fecha_vigencia) */

        and hasta = CONVERT(DATE, @fecha_vigencia)
        ) begin

      --SELECT @monto_compras = SUM(ISNULL(total_compras,0))
      SELECT @monto_compras = ISNULL(total_compras,0), @moneda_compras = moneda
      FROM LN_dep_econ_compras
      where cliente = @cliente
      and (id_padron = @id_padron or identificacion = @cuit) 
      /*and desde >= DATEADD(DAY,1,DATEADD(YEAR,-1,CONVERT(DATE, @fecha_vigencia)))
       and hasta <= CONVERT(DATE, @fecha_vigencia) */

      and hasta = CONVERT(DATE, @fecha_vigencia)
     

      /* Sumo las ventas, analizando si el campo que contiene el documento 
       es un valor simple o es una tabla, tomando en tal caso la columna 1 */


      if (@tipo_campo != 'G') begin

       SELECT @monto_ventas = ISNULL(valor_numerico,0)
       FROM LN_doc_campos
       WHERE doc_id = @doc_id
       AND seccion = @seccion
       AND campo = @campo
      
      end
      else begin

       /* ventas */
       SELECT @monto_ventas = SUM(ISNULL(valor_numerico,0))
       FROM LN_doc_campos_col
       WHERE doc_id = @doc_id
       AND seccion = @seccion
       AND campo = @campo
       AND col = 1

       /* columna iva */
       SELECT @monto_iva = SUM(ISNULL(valor_numerico,0))
       FROM LN_doc_campos_col
       WHERE doc_id = @doc_id
       AND seccion = @seccion
       AND campo = @campo
       AND col = 2

      end


      /* Determinación de la alícuota de iva ingresada en el documento de las ventas anuales */
      declare @alicuota_iva float, @aplica_iva_ventas float = 21, @pais varchar(2)
      select 
        @alicuota_iva = isnull(LN_doc_campos.valor_numerico, 0),
        @pais = LN_contrapartes.country_code
      from LN_doc_campos 
      inner join LN_docs on LN_doc_campos.doc_id = LN_docs.doc_id
      inner join LN_tipo_doc_campos on
       (LN_doc_campos.campo = LN_tipo_doc_campos.campo
       and LN_docs.tipo_doc = LN_tipo_doc_campos.tipo_doc)
      inner join LN_contrapartes on LN_docs.contraparte = LN_contrapartes.contraparte
      where LN_doc_campos.seccion = @seccion
      and LN_doc_campos.doc_id = @doc_id
      and LN_tipo_doc_campos.campo_id = 'ALICUOTA-IVA'

      
      set @aplica_iva_ventas = 
       CASE
        WHEN @pais = 'AR' THEN iif(@alicuota_iva = 10, 10.5, 21)
        WHEN @pais = 'UY' THEN 22
        WHEN @pais = 'PY' THEN iif(@alicuota_iva = 0, 10, iif(@alicuota_iva < 10, 5, 10))
       END
        
      
      if (@monto_compras > 0 AND (@monto_ventas > 0 OR @monto_iva > 0 AND @aplica_iva_ventas > 0)) 
      begin
       SET @ventas_declaradas = @monto_ventas
       SET @ventas_por_iva    = (@monto_iva/@aplica_iva_ventas*100)
       SET @ventas_mas_iva    = (@monto_ventas+@monto_iva)
       IF (@monto_iva > 0 AND @aplica_iva_ventas > 0)
        SET @dep_econ_calc_iva = CONVERT(float, @monto_compras / (@monto_iva/@aplica_iva_ventas*100) * 100)
       IF (@monto_ventas > 0)
        SET @dep_econ_calc_ventas = CONVERT(float, @monto_compras / @monto_ventas * 100)
       IF (@monto_ventas > 0 or @monto_iva > 0)
        SET @dep_econ_calc_ventas_mas_iva = CONVERT(float, @monto_compras / (@monto_ventas+@monto_iva) * 100)
    
      end
     end
     else
     begin
     set @leyenda = 'No hay datos para calcular la dependencia económica'
     end 
    end
    else 
    begin
     set @leyenda = 'No hay datos para calcular la dependencia económica'

    end 
   end
  end
  
  select @monto_compras as compras, @moneda_compras as moneda_compras, @ventas_declaradas as ventas_declaradas, 
  @ventas_por_iva as ventas_segun_iva, @ventas_mas_iva as ventas_mas_iva, @dep_econ_calc_iva as dep_econ_iva,
   @dep_econ_calc_ventas as dep_econ_ventas , @dep_econ_calc_ventas_mas_iva as dep_econ_ventas_mas_iva , 
   iif(@fecha_vigencia is null, null, convert(varchar,convert(date,@fecha_vigencia),103)) as fecha, @leyenda as leyenda
       
 END

GO