dbo.LN_docs_campos_puntos_

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

Parameters

2
Name Data Type Length Description
@doc_id int 4
@puntaje float 8

SQL Script

Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
-- =============================================
-- Author: María Inés Soria
-- Create date: 9/5/2023
-- Description: Se guarda el puntaje de cada campo puntuable del doc_id 
-- =============================================
/*
declare @puntaje float
exec [LN_docs_campos_puntos_] 454292, @puntaje output 
select @puntaje  

select * from LN_tipo_doc_campos_puntos --> tiene la especifiación de los puntos por los campos de los formularios
select * from LN_docs_campos_puntos --> tiene los puntos del campo por doc_id

select * from ln_docs where contraparte = 201458
*/

CREATE OR ALTER PROCEDURE dbo.LN_docs_campos_puntos_ 
 @doc_id int, 
 @puntaje float output 
AS
BEGIN

 SET NOCOUNT ON;
 declare @cliente int = null 
 declare @familia int = null
 declare @set_doc int = null
 declare @tipo_doc int = null
 declare @seccion int = null 
 declare @campo int = null 
 declare @opciones_puntos varchar(max) = null 
 declare @valor_numerico float,
      @valor_texto varchar(1024) ,
      @tipo_campo  char(1)
 declare @val varchar(1000) = null
 declare @pun varchar(1000) = null
 declare @valores table (item int, valor varchar(1000))
 declare @puntos table  (item int, valor float)
 declare @item int
 declare @valor varchar(1000)
 declare @total float 

 select @cliente = C.cliente, @familia = F.familia, @set_doc = F2.set_doc, @tipo_doc = D.tipo_doc  
  from ln_docs D
 inner join ln_contrapartes C on C.contraparte = D.contraparte 
 inner join ln_contraparte_familias F on F.contraparte = D.contraparte
 inner join ln_familias F2 on F2.familia = F.familia
 where D.doc_id = @doc_id 
 
-- Si el documento es puntuable 
 if exists (select * from LN_tipo_doc_campos_puntos where cliente = @cliente and set_doc = @set_doc and tipo_doc = @tipo_doc) 
 begin 
 
  DECLARE C_Cursor CURSOR FOR
   select seccion, campo, opciones_puntos
     from LN_tipo_doc_campos_puntos
    where cliente = @cliente and set_doc = @set_doc and tipo_doc = @tipo_doc

  OPEN C_Cursor
  FETCH NEXT FROM C_Cursor INTO @seccion, @campo, @opciones_puntos
  WHILE @@fetch_status = 0
  BEGIN 
   set @valor_numerico = NULL 
      set @valor_texto = NULL
      set @tipo_campo  = NULL
   select @valor_numerico = LN_doc_campos.valor_numerico, 
          @valor_texto = LN_doc_campos.valor_texto,
       @tipo_campo  = ln_campos.tipo_campo 
     from LN_doc_campos
     inner join ln_campos on ln_campos.campo = ln_doc_campos.campo 
     where LN_doc_campos.doc_id = @doc_id
     and LN_doc_campos.seccion = @seccion
     and LN_doc_campos.campo = @campo 
   
   set @val = null 
   set @pun = null 

   select  @val = Item from dbo.DelimitedSplit8K(@opciones_puntos, '^')  where itemNumber = 1
   select  @pun = Item from dbo.DelimitedSplit8K(@opciones_puntos, '^')  where itemNumber = 2

   delete from @valores
   delete from @puntos 

   insert into @valores 
   select * from dbo.DelimitedSplit8K(@val, '|')
   
   insert into @puntos 
   select * from dbo.DelimitedSplit8K(@pun, '|')

   set @total = 0 
   
   if (@valor_texto is null) set @valor_texto = convert(varchar(max),@valor_numerico) 
   
   DECLARE C_busqueda CURSOR FOR
     select item, valor from @valores 
   OPEN C_busqueda
   FETCH NEXT FROM C_busqueda INTO @item, @valor 
   WHILE @@fetch_status = 0
   BEGIN
    if (@valor_texto like '%' + @valor + '%')
    begin 
     set @total = @total + (select valor from @puntos where item = @item) 
    end 
    FETCH NEXT FROM C_busqueda INTO @item, @valor 
   END  
   CLOSE C_busqueda
   DEALLOCATE C_busqueda

   if exists (select * from LN_docs_campos_puntos where doc_id  = @doc_id
                                                    and seccion = @seccion
                and campo   = @campo)
   begin
    update LN_docs_campos_puntos 
       set puntos = @total, modified = getdate() 
       where doc_id  = @doc_id
            and seccion = @seccion
      and campo   = @campo
   end 
   else
   begin
    insert into LN_docs_campos_puntos (doc_id,  seccion,  campo,  puntos, created) 
                               values (@doc_id, @seccion, @campo, @total, getdate())
   end 

   FETCH NEXT FROM C_Cursor INTO @seccion, @campo, @opciones_puntos
  END  
  CLOSE C_Cursor
  DEALLOCATE C_Cursor

  set @puntaje = (select SUM(puntos) as 'puntos_doc'
        from LN_docs_campos_puntos where doc_id = @doc_id) 

  /*select LN_docs_campos_puntos.doc_id, LN_docs_campos_puntos.seccion, LN_docs_campos_puntos.campo, lN_campos.etiqueta,
      LN_docs_campos_puntos.puntos
     from LN_docs_campos_puntos 
     inner join ln_campos on ln_campos.campo = LN_docs_campos_puntos.campo
     where doc_id = @doc_id */

 end 
 else 
 begin
  set @puntaje = null
 end 
END 
GO

Used By

1