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
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