-- struttura

alter table Celle add
  constraint FK_Celle_TipoCella foreign key(IdxTipoCella) references TipoCella(IdxTipoCella) on update cascade
go


--

set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

alter VIEW V_statoCelleCapienzaAssegnati
AS
SELECT        dbo.Celle.IdxCella, dbo.Celle.CodCella, dbo.TipoCella.Capienza, ISNULL(COUNT(dbo.PosizioneUdcCorrente.UDC), 0) AS UdcAssegnati, dbo.Celle.Piena
FROM            dbo.TipoCella INNER JOIN
                         dbo.Celle ON dbo.TipoCella.IdxTipoCella = dbo.Celle.IdxTipoCella LEFT OUTER JOIN
                         dbo.PosizioneUdcCorrente ON dbo.Celle.IdxCella = dbo.PosizioneUdcCorrente.IdxCella
GROUP BY dbo.TipoCella.Capienza, dbo.Celle.IdxCella, dbo.Celle.Piena, dbo.Celle.CodCella
go

commit
go

--

set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/***************************************
* STORED stp_celleCreaMancantiBlocco
*
* crea il numero di celle richeiste e le assegna al blocco con valori default
*
* Steamware, S.E.L.
* mod: 2010.05.18
*
****************************************/
alter PROCEDURE stp_celleCreaMancantiBlocco
(
	@CodCS VARCHAR(2),
	@CodMag VARCHAR(50),
	@IdxBlocco INT,
	@IdxTipoCellaNew INT
)
AS

---------------------------------------------------------------------
-- setup iniziale valori XYZ del blocco
---------------------------------------------------------------------
DECLARE	@CodBlocco VARCHAR(3);
SET		@CodBlocco = (SELECT CodBlocco FROM Blocchi WHERE IdxBlocco = @IdxBlocco)
DECLARE @NumX INT;
DECLARE @NumY INT;
DECLARE @NumZ INT;
SET		@NumX = (SELECT NumX FROM Blocchi WHERE IdxBlocco = @IdxBlocco) ;
SET		@NumY = (SELECT NumY FROM Blocchi WHERE IdxBlocco = @IdxBlocco) ;
SET		@NumZ = (SELECT NumZ FROM Blocchi WHERE IdxBlocco = @IdxBlocco) ; 

DECLARE @Index INT ;
DECLARE @IdxTipoCella INT;


---------------------------------------------------------------------
-- creazione temp table x numeri delle dimensioni XYZ del blocco
---------------------------------------------------------------------
DECLARE @DimTable TABLE
(
	dimensione VARCHAR(1),
	valore INT
)

-- inserisco X
SET		@Index = 1 ;
WHILE	@Index <= @NumX 
    BEGIN 
		INSERT @DimTable(dimensione, valore)
		VALUES ('X', @Index)
		SET @Index = @Index + 1 ;
	END	
-- inserisco Y
SET		@Index = 1 ;
WHILE	@Index <= @NumY
    BEGIN 
		INSERT @DimTable(dimensione, valore)
		VALUES ('Y', @Index)
		SET @Index = @Index + 1 ;
	END	
-- inserisco Z
SET		@Index = 1 ;
WHILE	@Index <= @NumZ
    BEGIN 
		INSERT @DimTable(dimensione, valore)
		VALUES ('Z', @Index)
		SET @Index = @Index + 1 ;
	END	


---------------------------------------------------------------------
-- creazione temp table x schema COMPLETO posizioni blocco
---------------------------------------------------------------------
DECLARE @SchemaBlocco TABLE
(
	X INT,
	Y INT,
	Z INT
)
INSERT INTO @SchemaBlocco
SELECT X_val.valore, Y_val.valore, Z_val.valore 
FROM	(SELECT * FROM @DimTable WHERE dimensione='X') AS X_val, 
		(SELECT * FROM @DimTable WHERE dimensione='Y') AS Y_val,
		(SELECT * FROM @DimTable WHERE dimensione='Z') AS Z_val

----------------------------------------------------------------------------------
-- cerco primo tipo di celle per il mag indicato SE non ce ne è una specificata
----------------------------------------------------------------------------------
IF @IdxTipoCellaNew > 0 
	BEGIN
		SET @IdxTipoCella = @IdxTipoCellaNew
	END
ELSE
	BEGIN
		SET @IdxTipoCella = (SELECT        TOP (1) ISNULL(IdxTipoCella, 0) AS IdxTipoCella
							 FROM            TipoCella
							 WHERE        (CodCS = @CodCS) AND (CodMag = @CodMag))
	END
---------------------------------------------------------------------
-- inserisco le celle nelle posizioni LIBERE del blocco
---------------------------------------------------------------------
INSERT INTO Celle(CodCS, CodCella, IdxTipoCella, Descrizione, Attiva, Piena, IdxBlocco,X,Y,Z) 
SELECT @CodCS, @CodBlocco + dbo.f_padLeft(CAST(sb.X AS VARCHAR),2,'0') + dbo.f_padLeft(CAST(sb.Y AS VARCHAR),2,'0') + dbo.f_padLeft(CAST(sb.Z AS VARCHAR),2,'0'), @IdxTipoCella, '-', 1, 0, @IdxBlocco, sb.X, sb.Y, sb.Z
FROM @SchemaBlocco sb LEFT OUTER JOIN (SELECT	*
FROM	Celle 
WHERE	IdxBlocco = @IdxBlocco) c
ON sb.X = c.X AND sb.Y = c.Y AND sb.Z = c.Z
WHERE c.IdxCella IS NULL
ORDER BY sb.X,sb.Y,sb.Z ASC


RETURN
go

commit
go

--

set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/***************************************
* STORED stp_ricercaFullTerminalino
*
* effettua una ricerca full text da terminalino x codice UDC (su cartellini), x nome particolare (AnagParticolari) o posizione (Celle)
*
* Steamware, S.E.L.
* mod: 2010.09.10
*
****************************************/
create PROCEDURE stp_ricercaFullTerminalino
(
	@txtSearch VARCHAR(50)
)
AS

SELECT  'UDC' AS Tipo, UDC AS label, UDC AS valore
FROM    dbo.ElencoCartellini
WHERE	UDC LIKE '%'+@txtSearch+'%'

UNION

SELECT  'Particolare' AS Tipo, Particolare AS label, Particolare AS valore
FROM    RilPro.AnagParticolari
WHERE	Particolare LIKE '%'+@txtSearch+'%'

UNION

SELECT  'Cella' AS Tipo, CodCella AS label, CAST(IdxCella AS NVARCHAR)AS valore
FROM    dbo.Celle
WHERE	CodCella LIKE '%'+@txtSearch+'%'

RETURN
go

commit
go

-- DATI

