
/***************************************
* 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
*
****************************************/
CREATE 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
