
-- =============================================
-- Author:		M.Teresa Falomí
-- Create date: Desembre 2018
-- Description:	Procediments
-- =============================================

USE dbInventari;
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

------------------------------------------------------------------------
-- REGISTRE AUDITORIA------------------------------------------------------
------------------------------------------------------------------------

-- =============================================
-- Description:	<Insereix auditoria>
-- Paràmetres d'entrada: id usuari gestió, tipusLog, procediment, descripcio
-- Paràmetre de sortida: Resultat del procediment
-- =============================================

--Eliminen el procediment si ja existeix
IF OBJECT_ID('ins_auditoria') IS NOT NULL
	DROP PROCEDURE ins_auditoria;
GO

--Creem el procediment
CREATE PROCEDURE ins_auditoria
	-- Paràmetres d'entrada
	@idUsu varchar(15),
	@tipusLog char(1),
	@procediment varchar(50),
	@descripcio varchar(100),
	-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	-- afegim la inserció en un try-catch per si surtis algun error no controlat en el procediment.
	BEGIN TRY
		INSERT INTO Auditoria
		VALUES (getdate(),@tipusLog,@procediment,@descripcio,@idUsu);
		SET @sortida='Registre auditoria insertat correctament';
	END TRY
	BEGIN CATCH
		SET @sortida=(SELECT ERROR_MESSAGE());				
		RAISERROR (@sortida,-1,-1);
	END CATCH
END
GO



------------------------------------------------------------------------
-- TAULA USUGESTIO------------------------------------------------------
------------------------------------------------------------------------

-- =============================================
-- Description:	<Alta usuari de gestió>
-- Paràmetres d'entrada: id usuari gestió i nom
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: que l'id no siguin 'en blanc' i que no estigui repetit
-- =============================================

--Eliminen el procediment si ja existeix
IF OBJECT_ID('a_usugestio') IS NOT NULL
	DROP PROCEDURE a_usugestio;
GO

--Creem el procediment
CREATE PROCEDURE a_usugestio
	-- Paràmetres d'entrada
	@idUsu varchar(15),
	@nom varchar(50),
	-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	IF @idUsu=''
		SET @sortida='El identificador usuari no pot ser blanc';
	ELSE	
		BEGIN
		IF @idUsu=(SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsu)
			SET @sortida='L"usuari '+@idUsu+' ja existeix';
		ELSE
			-- afegim la inserció en un try-catch per si surtis algun error no controlat en el procediment.
			BEGIN
			BEGIN TRY
				INSERT INTO UsuGestio (idUsuGest, nom)
					VALUES (@idUsu, @nom);	
				SET @sortida='Registre insertat correctament';
			END TRY
			BEGIN CATCH
				SET @sortida=(SELECT ERROR_MESSAGE());				
				RAISERROR (@sortida,-1,-1);
			END CATCH
			END
		END
END
GO

-- =============================================
-- Description:	<Baixa usuari de gestió>
-- Paràmetres d'entrada: id usuari gestió
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: l'usuari ha d'existir
-- =============================================

--Eliminen el procediment si ja existeix
IF OBJECT_ID('b_usugestio') IS NOT NULL
	DROP PROCEDURE b_usugestio;
GO

--Creem el procediment
CREATE PROCEDURE b_usugestio
	-- Paràmetres d'entrada
	@idUsu varchar(15),
	-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	IF @idUsu=(SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsu)
	-- afegim la inserció en un try-catch per si surtis algun error no controlat en el procediment.
			BEGIN
			BEGIN TRY
				DELETE FROM UsuGestio WHERE idUsuGest=@idUsu;
				SET @sortida='Registre eliminat correctament';
			END TRY
			BEGIN CATCH
				SET @sortida=(SELECT ERROR_MESSAGE());				
				RAISERROR (@sortida,-1,-1);
			END CATCH	
			END
	ELSE
		SET @sortida='L"usuari '+@idUsu+' no existeix';			
END
GO

-- =============================================
-- Description:	<Modificació usuari de gestió>
-- Paràmetres d'entrada: id usuari gestió, nom
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: l'usuari ha d'existir
-- =============================================

--Eliminen el procediment si ja existeix
IF OBJECT_ID('m_usugestio') IS NOT NULL
	DROP PROCEDURE m_usugestio;
GO

--Creem el procediment
CREATE PROCEDURE m_usugestio
	-- Paràmetres d'entrada
	@idUsu varchar(15),
	@nom varchar(50),
	-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	IF @idUsu=(SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsu)
			-- afegim la inserció en un try-catch per si surtis algun error no controlat en el procediment.
			BEGIN
			BEGIN TRY
				UPDATE UsuGestio SET nom=@nom WHERE idUsuGest=@idUsu;
				SET @sortida='Registre modificat correctament';
			END TRY
			BEGIN CATCH
				SET @sortida=(SELECT ERROR_MESSAGE());				
				RAISERROR (@sortida,-1,-1);
			END CATCH
			END
	ELSE
		SET @sortida='L"usuari '+@idUsu+' no existeix';
		
END
GO

------------------------------------------------------------------------
-- TAULA FAMREFERENCIA--------------------------------------------------
------------------------------------------------------------------------

-- =============================================
-- Description:	<Alta familia i registre auditoria>
-- Paràmetres d'entrada: idUsuGest, id familia, descripcio, etiqueta, esOrdinador, esSwitch, esTelefon, esPeriferic
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: que l'usuari de gestió existeixi,
--				que l'id no sigui 'en blanc', que no estigui repetit, que el format del camp etiqueta sigui XX000/AA.
-- =============================================


--Eliminen el procediment si ja existeix
IF OBJECT_ID('a_famreferencia') IS NOT NULL
	DROP PROCEDURE a_famreferencia;
GO

--Creem el procediment
CREATE PROCEDURE a_famreferencia
	-- Paràmetres d'entrada
	@idUsuGest varchar(15),
	@idFamRef varchar(15),
	@descFamRef varchar(50),
	@etiqueta varchar(12),
	@esOrdinador bit,
	@esSwitch bit,
	@esTelefon bit,
	@esPeriferic bit,
	@esFungible bit,
	-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	--Fem les validacions

	DECLARE @control char(1)='E';
	
	IF NOT EXISTS (SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsuGest)
		SET @sortida='Aquest usuari de gestió no existeix';
	ELSE IF @idFamRef=''
		SET @sortida='El identificador de familia no pot ser blanc';
	--Comprovem el format de l'etiqueta
	ELSE IF (SELECT dbo.valida_etiqueta(@etiqueta))=1
		SET @sortida='El format de l"etiqueta ha de ser "XX000/AA"';
	ELSE IF @idFamRef=(SELECT @idFamRef FROM FamReferencia WHERE idFamRef=@idFamRef)
		SET @sortida='La familia '+@idFamRef+' ja existeix';
	ELSE
		BEGIN
		-- afegim la inserció en un try-catch per si surtis algun error no controlat en el procediment.
		BEGIN TRY
			INSERT INTO FamReferencia 
				VALUES (@idFamRef, @descFamRef,@etiqueta,@esOrdinador,@esSwitch,@esTelefon,@esPeriferic,@esFungible);	
			SET @sortida='Registre insertat correctament';
			SET @control='R';
		END TRY
		BEGIN CATCH
			SET @sortida=(SELECT ERROR_MESSAGE());				
			RAISERROR (@sortida,-1,-1);
		END CATCH
		END
		--registrar auditoria
		DECLARE @resultat varchar(250);
		SET @sortida=@idFamRef+'-'+@sortida;
		exec ins_auditoria @idUsuGest,@control,'a_famreferencia',@sortida, @resultat OUTPUT;
END
GO

-- =============================================
-- Description:	<Baixa familia i registre auditoria>
-- Paràmetres d'entrada: idUsuGest, id familia
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: que l'usuari de gestió existeixi
--              que l'id no sigui 'en blanc', que existeixi,
--				també s'ha de tenir en compte que hi ha unes families en concret que no es poden eliminar ni modificar.
--				Aquestes families són: Ordinador, Switch 		
-- =============================================


--Eliminen el procediment si ja existeix
IF OBJECT_ID('b_famreferencia') IS NOT NULL
	DROP PROCEDURE b_famreferencia;
GO

--Creem el procediment
CREATE PROCEDURE b_famreferencia
	-- Paràmetres d'entrada
	@idUsuGest varchar(15),
	@idFamRef varchar(15),
	-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	--Fem les validacions

	DECLARE @control char(1)='E';
	
	IF NOT EXISTS (SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsuGest)
		SET @sortida='Aquest usuari de gestió no existeix';
	ELSE IF @idFamRef=''
		SET @sortida='El identificador de familia no pot ser blanc';
	ELSE IF NOT EXISTS (SELECT @idFamRef FROM FamReferencia WHERE idFamRef=@idFamRef)
		SET @sortida='La familia '+@idFamRef+' no existeix';
	ELSE IF @idFamRef='Ordinador' or @idFamRef='Switch'
		SET @sortida='Les families "Ordinador" i "Switch" no es poden eliminar';
	ELSE
		-- afegim la inserció en un try-catch per si surtis algun error no controlat en el procediment.
		BEGIN
		BEGIN TRY
			DELETE FROM FamReferencia WHERE idFamRef=@idFamRef;
			SET @sortida='Registre eliminat correctament';
			SET @control='R';
		END TRY
		BEGIN CATCH
			SET @sortida=(SELECT ERROR_MESSAGE());				
			RAISERROR (@sortida,-1,-1);
		END CATCH
		END
	--registrar auditoria
	DECLARE @resultat varchar(250);
	SET @sortida=@idFamRef+'-'+@sortida;
	exec ins_auditoria @idUsuGest,@control,'b_famreferencia',@sortida, @resultat OUTPUT;
END
GO


-- =============================================
-- Description:	<Modificació familia>
-- Paràmetres d'entrada: idUsuGes, id familia, descripcio, etiqueta, esOrdinador, esSwitch, esTelefon, esPeriferic
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: que l'usuari de gestió existeixi
--              que l'id no sigui 'en blanc', que no estigui repetit, que el format del camp etiqueta sigui XX000/AA.
--				també s'ha de tenir en compte que hi ha unes families en concret que no es poden eliminar ni modificar.
--				Aquestes families són: Ordinador, Switch 		
-- =============================================


--Eliminen el procediment si ja existeix
IF OBJECT_ID('m_famreferencia') IS NOT NULL
	DROP PROCEDURE m_famreferencia;
GO

--Creem el procediment
CREATE PROCEDURE m_famreferencia
	-- Paràmetres d'entrada
	@idUsuGest varchar(15),
	@idFamRef varchar(15),
	@descFamRef varchar(50),
	@etiqueta varchar(12),
	@esOrdinador bit,
	@esSwitch bit,
	@esTelefon bit,
	@esPeriferic bit,
	@esFungible bit,
	-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	--Fem les validacions

	DECLARE @control char(1)='E';
	
	IF NOT EXISTS (SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsuGest)
		SET @sortida='Aquest usuari de gestió no existeix';
	ELSE IF @idFamRef=''
		SET @sortida='El identificador de familia no pot ser blanc';
	--Comprovem el format de l'etiqueta
	ELSE IF (SELECT dbo.valida_etiqueta(@etiqueta))=1
		SET @sortida='El format de l"etiqueta ha de ser "XX000/AA"';
	ELSE IF NOT EXISTS (SELECT @idFamRef FROM FamReferencia WHERE idFamRef=@idFamRef)
		SET @sortida='La familia '+@idFamRef+' no existeix';
	ELSE IF @idFamRef='Ordinador' or @idFamRef='Switch'
		SET @sortida='Les families "Ordinador" i "Switch" no es poden modificar';
	ELSE
		-- afegim la inserció en un try-catch per si surtis algun error no controlat en el procediment.
		BEGIN
		BEGIN TRY
			UPDATE FamReferencia 
			SET descFamRef=@descFamRef,
			etiqueta=@etiqueta,
			esOrdinador=@esOrdinador,
			esSwitch=@esSwitch,
			esTelefon=@esTelefon,
			esPeriferic=@esPeriferic,
			esFungible=@esFungible
			WHERE idFamRef=@idFamRef;
			SET @sortida='Registre modificat correctament';
			SET @control='R';
		END TRY
		BEGIN CATCH
			SET @sortida=(SELECT ERROR_MESSAGE());				
			RAISERROR (@sortida,-1,-1);
		END CATCH
		END
	--registrar auditoria
	DECLARE @resultat varchar(250);
	SET @sortida=@idFamRef+'-'+@sortida;
	exec ins_auditoria @idUsuGest,@control,'m_famreferencia',@sortida, @resultat OUTPUT;
END
GO

------------------------------------------------------------------------
-- TAULA EDIFICI--------------------------------------------------
------------------------------------------------------------------------

-- =============================================
-- Description:	<Alta Edifici i registre auditoria>
-- Paràmetres d'entrada: idUsuGes, idEdifici, nom, adreca, poblacio
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: que l'usuari de gestió existeixi,
--				que l'id no sigui 'en blanc', que no estigui repetit.
-- =============================================


--Eliminen el procediment si ja existeix
IF OBJECT_ID('a_edifici') IS NOT NULL
	DROP PROCEDURE a_edifici;
GO

--Creem el procediment
CREATE PROCEDURE a_edifici
	-- Paràmetres d'entrada
	@idUsuGest varchar(15),
	@idEdifici varchar(8),
	@nom varchar(30),
	@adreca varchar(50),
	@poblacio varchar(30),
	-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	--Fem les validacions

	DECLARE @control char(1)='E';
	
	IF NOT EXISTS (SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsuGest)
		SET @sortida='Aquest usuari de gestió no existeix';
	ELSE IF @idEdifici=''
		SET @sortida='El identificador d"edifici no pot ser blanc';
	ELSE IF @idEdifici=(SELECT @idEdifici FROM Edifici WHERE idEdifici=@idEdifici)
		SET @sortida='L"Edifici '+@idEdifici+' ja existeix';
	ELSE
		BEGIN
		-- afegim la inserció en un try-catch per si surtis algun error no controlat en el procediment.
		BEGIN TRY
			INSERT INTO Edifici
				VALUES (@idEdifici, @nom,@adreca,@poblacio);	
			SET @sortida='Registre insertat correctament';
			SET @control='R';
		END TRY
		BEGIN CATCH
			SET @sortida=(SELECT ERROR_MESSAGE());				
			RAISERROR (@sortida,-1,-1);
		END CATCH
		END
		--registrar auditoria
		DECLARE @resultat varchar(250);
		SET @sortida=@idEdifici+'-'+@sortida;
		exec ins_auditoria @idUsuGest,@control,'a_edifici',@sortida, @resultat OUTPUT;
END
GO

-- =============================================
-- Description:	<Baixa d'edifici i registre auditoria>
-- Paràmetres d'entrada: id Edifici
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: que l'usuari de gestió existeixi
--              que l'id no sigui 'en blanc', que existeixi,
-- No eliminem planta ja que ho farà automàticament el sistema
-- =============================================


--Eliminen el procediment si ja existeix
IF OBJECT_ID('b_edifici') IS NOT NULL
	DROP PROCEDURE b_edifici;
GO

--Creem el procediment
CREATE PROCEDURE b_edifici
	-- Paràmetres d'entrada
	@idUsuGest varchar(15),
	@idEdifici varchar(8),
	-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	--Fem les validacions

	DECLARE @control char(1)='E';
	
	IF NOT EXISTS (SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsuGest)
		SET @sortida='Aquest usuari de gestió no existeix';
	ELSE IF @idEdifici=''
		SET @sortida='El identificador d"edifici no pot ser blanc';
	ELSE IF NOT EXISTS (SELECT @idEdifici FROM Edifici WHERE idEdifici=@idEdifici)
		SET @sortida='L"Edifici '+@idEdifici+' no existeix';
	ELSE
		-- afegim la inserció en un try-catch per si surtis algun error no controlat en el procediment.
		BEGIN
		BEGIN TRY
			DELETE FROM Edifici WHERE idEdifici=@idEdifici;
			SET @sortida='Registre eliminat correctament';
			SET @control='R';
		END TRY
		BEGIN CATCH
			SET @sortida=(SELECT ERROR_MESSAGE());				
			RAISERROR (@sortida,-1,-1);
		END CATCH
		END
	--registrar auditoria
	DECLARE @resultat varchar(250);
	SET @sortida=@idEdifici+'-'+@sortida;
	exec ins_auditoria @idUsuGest,@control,'b_edifici',@sortida, @resultat OUTPUT;
END
GO


-- =============================================
-- Description:	<Modificació Edifici i registre auditoria>
-- Paràmetres d'entrada: idEdifici, nom, adreca, poblacio
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: que l'usuari de gestió existeixi,
--				que l'id no sigui 'en blanc', que el registre existeixi
-- =============================================


--Eliminen el procediment si ja existeix
IF OBJECT_ID('m_edifici') IS NOT NULL
	DROP PROCEDURE m_edifici;
GO

--Creem el procediment
CREATE PROCEDURE m_edifici
	-- Paràmetres d'entrada
	@idUsuGest varchar(15),
	@idEdifici varchar(8),
	@nom varchar(30),
	@adreca varchar(50),
	@poblacio varchar(30),
	-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	--Fem les validacions

	DECLARE @control char(1)='E';
	
	IF NOT EXISTS (SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsuGest)
		SET @sortida='Aquest usuari de gestió no existeix';
	ELSE IF @idEdifici=''
		SET @sortida='El identificador d"edifici no pot ser blanc';
	ELSE IF NOT EXISTS (SELECT @idEdifici FROM Edifici WHERE idEdifici=@idEdifici)
		SET @sortida='L"Edifici '+@idEdifici+' no existeix';
	ELSE
		-- afegim la inserció en un try-catch per si surtis algun error no controlat en el procediment.
		BEGIN
		BEGIN TRY
			UPDATE Edifici 
			SET nom=@nom,
			adreca=@adreca,
			poblacio=@poblacio
			WHERE idEdifici=@idEdifici;
			SET @sortida='Registre modificat correctament';
			SET @control='R';
		END TRY
		BEGIN CATCH
			SET @sortida=(SELECT ERROR_MESSAGE());				
			RAISERROR (@sortida,-1,-1);
		END CATCH
		END
	--registrar auditoria
	DECLARE @resultat varchar(250);
	SET @sortida=@idEdifici+'-'+@sortida;
	exec ins_auditoria @idUsuGest,@control,'m_edifici',@sortida, @resultat OUTPUT;
END
GO

------------------------------------------------------------------------
-- TAULA PLANTA--------------------------------------------------
------------------------------------------------------------------------

-- =============================================
-- Description:	<Alta Planta i registre auditoria>
-- Paràmetres d'entrada: idUsuGes,idEdifici, idPlanta, planta
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: que l'usuari de gestió existeixi, que l'edifici existeixi
--				que l'id no sigui 'en blanc', que no estigui repetit.
-- =============================================


--Eliminen el procediment si ja existeix
IF OBJECT_ID('a_planta') IS NOT NULL
	DROP PROCEDURE a_planta;
GO

--Creem el procediment
CREATE PROCEDURE a_planta
	-- Paràmetres d'entrada
	@idUsuGest varchar(15),
	@idEdifici varchar(8),
	@idPlanta varchar(8),
	@planta int,
	-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	--Fem les validacions

	DECLARE @control char(1)='E';
	
	IF NOT EXISTS (SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsuGest)
		SET @sortida='Aquest usuari de gestió no existeix';
	ELSE IF @idEdifici='' or @idPlanta=''
		SET @sortida='El identificador d"edifici i planta no poden ser blanc';
	ELSE IF NOT EXISTS (SELECT * FROM Edifici WHERE idEdifici=@idEdifici)
		SET @sortida='L"Edifici '+@idEdifici+' no existeix';
	ELSE IF EXISTS (SELECT * FROM Planta WHERE idEdifici=@idEdifici AND idPlanta=@idPlanta)
		SET @sortida='L"Edifici - Planta'+@idEdifici+' - '+@idPlanta+' ja existeix';
	ELSE
		BEGIN
		-- afegim la inserció en un try-catch per si surtis algun error no controlat en el procediment.
		BEGIN TRY
			INSERT INTO Planta
				VALUES (@idEdifici, @idPlanta, @planta);
			SET @sortida='Registre insertat correctament';
			SET @control='R';
		END TRY
		BEGIN CATCH
			SET @sortida=(SELECT ERROR_MESSAGE());				
			RAISERROR (@sortida,-1,-1);
		END CATCH
		END
		--registrar auditoria
		DECLARE @resultat varchar(250);
		SET @sortida=@idEdifici+'/'+@idPlanta+'-'+@sortida;
		exec ins_auditoria @idUsuGest,@control,'a_planta',@sortida, @resultat OUTPUT;
END
GO

-- =============================================
-- Description:	<Baixa de planta i registre auditoria>
-- Paràmetres d'entrada: idEdifici i idPlanta
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: que l'usuari de gestió i l'edifici existeixin
--              que l'id no sigui 'en blanc', que la planta existeixi
-- =============================================


--Eliminen el procediment si ja existeix
IF OBJECT_ID('b_planta') IS NOT NULL
	DROP PROCEDURE b_planta;
GO

--Creem el procediment
CREATE PROCEDURE b_planta
	-- Paràmetres d'entrada
	@idUsuGest varchar(15),
	@idEdifici varchar(8),
	@idPlanta varchar(8),
	-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	--Fem les validacions

	DECLARE @control char(1)='E';
	
	IF NOT EXISTS (SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsuGest)
		SET @sortida='Aquest usuari de gestió no existeix';
	ELSE IF @idEdifici='' or @idPlanta=''
		SET @sortida='El identificador d"edifici i planta no poden ser blanc';
	ELSE IF NOT EXISTS (SELECT * FROM Edifici WHERE idEdifici=@idEdifici)
		SET @sortida='L"Edifici '+@idEdifici+' no existeix';
	ELSE IF NOT EXISTS (SELECT * FROM Planta WHERE idEdifici=@idEdifici AND idPlanta=@idPlanta)
		SET @sortida='L"Edifici - Planta'+@idEdifici+' - '+@idPlanta+' no existeix';
	ELSE
		-- afegim la inserció en un try-catch per si surtis algun error no controlat en el procediment.
		BEGIN
		BEGIN TRY
			DELETE FROM Planta WHERE idEdifici=@idEdifici AND idPlanta=@idPlanta;
			SET @sortida='Registre eliminat correctament';
			SET @control='R';
		END TRY
		BEGIN CATCH
			SET @sortida=(SELECT ERROR_MESSAGE());				
			RAISERROR (@sortida,-1,-1);
		END CATCH
		END
	--registrar auditoria
	DECLARE @resultat varchar(250);
	SET @sortida=@idEdifici+'/'+@idPlanta+'-'+@sortida;
	exec ins_auditoria @idUsuGest,@control,'b_planta',@sortida, @resultat OUTPUT;
END
GO


-- =============================================
-- Description:	<Modificació Planta i registre auditoria>
-- Paràmetres d'entrada: idEdifici, idPlanta, planta
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: que l'usuari de gestió i l'edifici existeixin,
--				que l'id no sigui 'en blanc', que el registre existeixi
-- =============================================


--Eliminen el procediment si ja existeix
IF OBJECT_ID('m_planta') IS NOT NULL
	DROP PROCEDURE m_planta;
GO

--Creem el procediment
CREATE PROCEDURE m_planta
	-- Paràmetres d'entrada
	@idUsuGest varchar(15),
	@idEdifici varchar(8),
	@idPlanta varchar(8),
	@planta int,
	-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	--Fem les validacions

	DECLARE @control char(1)='E';
	
	IF NOT EXISTS (SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsuGest)
		SET @sortida='Aquest usuari de gestió no existeix';
	ELSE IF @idEdifici='' or @idPlanta=''
		SET @sortida='El identificador d"edifici i planta no poden ser blanc';
	ELSE IF NOT EXISTS (SELECT * FROM Edifici WHERE idEdifici=@idEdifici)
		SET @sortida='L"Edifici '+@idEdifici+' no existeix';
	ELSE IF NOT EXISTS (SELECT * FROM Planta WHERE idEdifici=@idEdifici AND idPlanta=@idPlanta)
		SET @sortida='L"Edifici - Planta'+@idEdifici+' - '+@idPlanta+' no existeix';
	ELSE
		-- afegim la inserció en un try-catch per si surtis algun error no controlat en el procediment.
		BEGIN
		BEGIN TRY
			UPDATE Planta
			SET planta=@planta
			WHERE idEdifici=@idEdifici AND idPlanta=@idPlanta;
			SET @sortida='Registre modificat correctament';
			SET @control='R';
		END TRY
		BEGIN CATCH
			SET @sortida=(SELECT ERROR_MESSAGE());				
			RAISERROR (@sortida,-1,-1);
		END CATCH
		END
	--registrar auditoria
	DECLARE @resultat varchar(250);
	SET @sortida=@idEdifici+'/'+@idPlanta+'-'+@sortida;
	exec ins_auditoria @idUsuGest,@control,'m_planta',@sortida, @resultat OUTPUT;
END
GO


------------------------------------------------------------------------
-- TAULA REFERENCIA--------------------------------------------------
------------------------------------------------------------------------

-- =============================================
-- Description:	<Alta Referencia i registre auditoria>
-- Paràmetres d'entrada: idRef, nSerie, idFamRef, descRef, marca, model, pnum, estat, mac, extensio, observacions, ubiDriv
--						guardat, ip, dataCompra, nomProv, dataGar, qtt, pulzPant
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: que l'usuari de gestió, les ubicacions i la familia existeixin
--				que l'id no sigui 'en blanc' i tingui el format etiqueta
--              que no estigui repetit
--              i que si omplen els camps ubiDriv i guardat, aquests existeixen
-- =============================================


--Eliminen el procediment si ja existeix
IF OBJECT_ID('a_referencia') IS NOT NULL
	DROP PROCEDURE a_referencia;
GO

--Creem el procediment
CREATE PROCEDURE a_referencia
	-- Paràmetres d'entrada
	@idUsuGest varchar(15),
	@idRef varchar(12),
	@nSerie varchar(40),
	@idFamRef varchar(15),
	@descRef varchar(50),
	@marca varchar(20),
	@model varchar(30),
	@pNum varchar(20),
	@estat EstatRef,
	@mac varchar(12),
	@extensio varchar(9),
	@observacions varchar(100),
	@ubiDriv varchar(10),
	@guardat varchar(10),
	@ip varchar(15),
	@dataCompra date,
	@nomProv varchar(50),
	@dataGar date,
	@qtt int,
	@pulzPant decimal(5,2),
	-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	--Fem les validacions

	DECLARE @control char(1)='E';
	
	IF NOT EXISTS (SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsuGest)
		SET @sortida='Aquest usuari de gestió no existeix';
	ELSE IF @idRef='' or @idFamRef=''
		SET @sortida='El identificador de referencia i familia no poden ser blanc';
	ELSE IF NOT EXISTS (SELECT * FROM FamReferencia WHERE idFamRef=@idFamRef)
		SET @sortida='La familia '+@idFamRef+' no existeix';
	ELSE IF @ubiDriv<>'' AND @ubiDriv<>NULL AND NOT EXISTS (SELECT * FROM Ubicacio WHERE idUbicacio=@ubiDriv)
		SET @sortida='La ubicació del driver '+@ubiDriv+' no existeix';
	ELSE IF @guardat<>'' AND @guardat<>NULL AND NOT EXISTS (SELECT * FROM Ubicacio WHERE idUbicacio=@guardat)
		SET @sortida='La ubicació de la referència '+@guardat+' no existeix';
	ELSE IF EXISTS (SELECT * FROM Referencia WHERE idRef=@idRef)
		SET @sortida='La referencia'+@idRef+' ja existeix';
	ELSE
		BEGIN
		-- afegim la inserció en un try-catch per si surtis algun error no controlat en el procediment.
		BEGIN TRY
			INSERT INTO Referencia
				VALUES (@idRef,@nSerie,@idFamRef,@descRef,@marca,@model,@pNum,default,@mac,@extensio,@observacions,
				@ubiDriv,@guardat,@ip,@dataCompra,@nomProv,@dataGar,@qtt,@pulzPant);
			--Un cop insertat
			SET @sortida='Registre insertat correctament';
			SET @control='R';
		END TRY
		BEGIN CATCH
			SET @sortida=(SELECT ERROR_MESSAGE());				
			RAISERROR (@sortida,-1,-1);
		END CATCH
		END
		--registrar auditoria
		DECLARE @resultat varchar(250);
		SET @sortida=@idRef+'-'+@sortida;
		exec ins_auditoria @idUsuGest,@control,'a_referencia',@sortida, @resultat OUTPUT;
END
GO



-- =============================================
-- Description:	<Modificació Referencia i registre auditoria>
-- Paràmetres d'entrada: idRef, nSerie, idFamRef, descRef, marca, model, pnum, estat, mac, extensio, observacions, ubiDriv
--						guardat, ip, dataCompra, nomProv, dataGar, qtt, pulzPant
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: que l'usuari de gestió, ubicacions i la familia existeixi
--				que l'id no sigui 'en blanc' i tingui el format etiqueta
--              que el registre existeixi
--              i que si omplen els camps ubiDriv i guardat, aquests existeixen
--              No es permet canviar la familia (afecta al codi de referencia)
-- =============================================


--Eliminen el procediment si ja existeix
IF OBJECT_ID('m_referencia') IS NOT NULL
	DROP PROCEDURE m_referencia;
GO

--Creem el procediment
CREATE PROCEDURE m_referencia
	-- Paràmetres d'entrada
	@idUsuGest varchar(15),
	@idRef varchar(12),
	@nSerie varchar(40),
	@idFamRef varchar(15),
	@descRef varchar(50),
	@marca varchar(20),
	@model varchar(30),
	@pNum varchar(20),
	@estat EstatRef,
	@mac varchar(12),
	@extensio varchar(9),
	@observacions varchar(100),
	@ubiDriv varchar(10),
	@guardat varchar(10),
	@ip varchar(15),
	@dataCompra date,
	@nomProv varchar(50),
	@dataGar date,
	@qtt int,
	@pulzPant decimal(5,2),
	-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	--Fem les validacions

	DECLARE @control char(1)='E';
	
	IF NOT EXISTS (SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsuGest)
		SET @sortida='Aquest usuari de gestió no existeix';
	ELSE IF @idRef='' or @idFamRef=''
		SET @sortida='El identificador de referencia i familia no poden ser blanc';
	ELSE IF NOT EXISTS (SELECT * FROM FamReferencia WHERE idFamRef=@idFamRef)
		SET @sortida='La familia '+@idFamRef+' no existeix';
	ELSE IF @ubiDriv<>'' AND @ubiDriv<>NULL AND NOT EXISTS (SELECT * FROM Ubicacio WHERE idUbicacio=@ubiDriv)
		SET @sortida='La ubicació del driver '+@ubiDriv+' no existeix';
	ELSE IF @guardat<>'' AND @guardat<>NULL AND NOT EXISTS (SELECT * FROM Ubicacio WHERE idUbicacio=@guardat)
		SET @sortida='La ubicació de la referència '+@guardat+' no existeix';
	ELSE IF NOT EXISTS (SELECT * FROM Referencia WHERE idRef=@idRef)
		SET @sortida='La referencia'+@idRef+' no existeix';
	ELSE IF @idFamRef<>(SELECT idFamRef FROM Referencia wherE idRef=@idRef)
		SET @sortida='No es pot modificar la familia de la referencia'+@idRef;	
	ELSE
		-- afegim la inserció en un try-catch per si surtis algun error no controlat en el procediment.
		BEGIN
		BEGIN TRY
			UPDATE Referencia
			SET nSerie=@nSerie,
			idFamRef=@idFamRef,
			descRef=@descRef,
			marca=@marca,
			model=@model,
			pNum=@pNum,
			estat=@estat,
			mac=@mac,
			extensio=@extensio,
			observacions=@observacions,
			ubiDriv=@ubiDriv,
			guardat=@guardat,
			ip=@ip,
			dataCompra=@dataCompra,
			nomProv=@nomProv,
			dataGar=@dataGar,
			qtt=@qtt,
			pulzPant=@pulzPant
			WHERE idRef=@idRef;
			SET @sortida='Registre modificat correctament';
			SET @control='R';
		END TRY
		BEGIN CATCH
			SET @sortida=(SELECT ERROR_MESSAGE());				
			RAISERROR (@sortida,-1,-1);
		END CATCH
		END
	--registrar auditoria
	DECLARE @resultat varchar(250);
		SET @sortida=@idRef+'-'+@sortida;
		exec ins_auditoria @idUsuGest,@control,'m_referencia',@sortida, @resultat OUTPUT;
END
GO

-- =============================================
-- Description:	<Baixa Referencia i registre auditoria>
-- No s'implementa la baixa d'una referencia 
-- =============================================

------------------------------------------------------------------------
-- TAULA ORDINADORS--------------------------------------------------
------------------------------------------------------------------------

-- =============================================
-- Description:	<Alta Ordinador i registre auditoria>
-- Paràmetres d'entrada: idUsuGest, idRef, processador, gbRam, gbDisc, tDdur, wol, periferics
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: que l'usuari de gestió i la referencia existeixein
--              que no estigui repetit
-- =============================================


--Eliminen el procediment si ja existeix
IF OBJECT_ID('a_ordinador') IS NOT NULL
	DROP PROCEDURE a_ordinador;
GO

--Creem el procediment
CREATE PROCEDURE a_ordinador
	-- Paràmetres d'entrada
	@idUsuGest varchar(15),
	@idRef varchar(12),
	@processador varchar(20),
	@gbRam decimal(6,2),
	@gbDisc decimal(6,2),
	@tDdur varchar(8),
	@wol bit,
	@periferics varchar(50),
	-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	--Fem les validacions

	DECLARE @control char(1)='E';
	
	IF NOT EXISTS (SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsuGest)
		SET @sortida='Aquest usuari de gestió no existeix';
	ELSE IF @idRef='' 
		SET @sortida='El identificador de referencia no pot ser blanc';
	ELSE IF NOT EXISTS (SELECT idRef FROM Referencia WHERE idRef=@idRef)
		SET @sortida='La referencia '+@idRef+' no existeix';
	ELSE IF EXISTS (SELECT * FROM Ordinador WHERE idRef=@idRef)
		SET @sortida='L"Ordinador'+@idRef+' ja existeix';
	ELSE
		BEGIN
		-- afegim la inserció en un try-catch per si surtis algun error no controlat en el procediment.
		BEGIN TRY
			INSERT INTO Ordinador
				VALUES (@idRef,@processador, @gbRam, @gbDisc, @tDdur, @wol, @periferics);
			--Un cop insertat
			SET @sortida='Registre insertat correctament';
			SET @control='R';
		END TRY
		BEGIN CATCH
			SET @sortida=(SELECT ERROR_MESSAGE());				
			RAISERROR (@sortida,-1,-1);
		END CATCH
		END
		--registrar auditoria
		DECLARE @resultat varchar(250);
		SET @sortida=@idRef+'-'+@sortida;
		exec ins_auditoria @idUsuGest,@control,'a_ordinador',@sortida, @resultat OUTPUT;
END
GO



-- =============================================
-- Description:	<Modificació Ordinador i registre auditoria>
-- Paràmetres d'entrada: idUsuGest, idRef, processador, gbRam, gbDisc, tDdur, wol, periferics
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: que l'usuari de gestió i la referencia existeixein
--              que l'ordinador existeixi
-- =============================================


--Eliminen el procediment si ja existeix
IF OBJECT_ID('m_ordinador') IS NOT NULL
	DROP PROCEDURE m_ordinador;
GO

--Creem el procediment
CREATE PROCEDURE m_ordinador
	-- Paràmetres d'entrada
@idUsuGest varchar(15),
	@idRef varchar(12),
	@processador varchar(20),
	@gbRam decimal(6,2),
	@gbDisc decimal(6,2),
	@tDdur varchar(8),
	@wol bit,
	@periferics varchar(50),
	-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	--Fem les validacions

	DECLARE @control char(1)='E';
	
IF NOT EXISTS (SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsuGest)
		SET @sortida='Aquest usuari de gestió no existeix';
	ELSE IF @idRef='' 
		SET @sortida='El identificador de referencia no pot ser blanc';
	ELSE IF NOT EXISTS (SELECT idRef FROM Referencia WHERE idRef=@idRef)
		SET @sortida='La referencia '+@idRef+' no existeix';
	ELSE IF NOT EXISTS (SELECT * FROM Ordinador WHERE idRef=@idRef)
		SET @sortida='L"Ordinador '+@idRef+' no existeix';
	ELSE
			-- afegim la inserció en un try-catch per si surtis algun error no controlat en el procediment.
		BEGIN
		BEGIN TRY
			UPDATE Ordinador
			SET processador=@processador,
			gbRam=@gbRam,
			gbDisc=@gbDisc,
			tDdur=@tDdur,
			wol=@wol,
			periferics=@periferics
			WHERE idRef=@idRef;
			SET @sortida='Registre modificat correctament';
			SET @control='R';
		END TRY
		BEGIN CATCH
			SET @sortida=(SELECT ERROR_MESSAGE());				
			RAISERROR (@sortida,-1,-1);
		END CATCH
		END
	--registrar auditoria
	DECLARE @resultat varchar(250);
		SET @sortida=@idRef+'-'+@sortida;
		exec ins_auditoria @idUsuGest,@control,'m_ordinador',@sortida, @resultat OUTPUT;
END
GO

-- =============================================
-- Description:	<Baixa Ordinador i registre auditoria>
-- No s'implementa la baixa d'un ordinador (lligat a referencia) 
-- =============================================

------------------------------------------------------------------------
-- TAULA BOQSWITCH---------------------------------------------------------
------------------------------------------------------------------------

-- =============================================
-- Description:	<Alta BoqSwitch i registre auditoria>
-- Paràmetres d'entrada: idUsuGest, idRef, modul, port, valid, tipPort
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: que l'usuari de gestió i la referencia existeixein
--              que no estigui repetit
-- =============================================


--Eliminen el procediment si ja existeix
IF OBJECT_ID('a_boqswitch') IS NOT NULL
	DROP PROCEDURE a_boqswitch;
GO

--Creem el procediment
CREATE PROCEDURE a_boqswitch
	-- Paràmetres d'entrada
	@idUsuGest varchar(15),
	@idRef varchar(12),
	@modul char(1),
	@port int,
	@valid bit,
	@tipPort TipPort,
	-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	--Fem les validacions

	DECLARE @control char(1)='E';
	
	IF NOT EXISTS (SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsuGest)
		SET @sortida='Aquest usuari de gestió no existeix';
	ELSE IF @idRef='' 
		SET @sortida='El identificador de referencia no pot ser blanc';
	ELSE IF NOT EXISTS (SELECT idRef FROM Referencia WHERE idRef=@idRef)
		SET @sortida='La referencia '+@idRef+' no existeix';
	ELSE IF EXISTS (SELECT * FROM BoqSwitch WHERE idRef=@idRef AND modul=@modul and port=@port)
		SET @sortida='El switch '+@idRef+'-'+@modul+'-'+str(@port,2,0)+' ja existeix';
	ELSE
		BEGIN
		-- afegim la inserció en un try-catch per si surtis algun error no controlat en el procediment.
		BEGIN TRY
			INSERT INTO BoqSwitch
				VALUES (@idRef,@modul, @port, @valid, @tipPort);
			--Un cop insertat
			SET @sortida='Registre insertat correctament';
			SET @control='R';
		END TRY
		BEGIN CATCH
			SET @sortida=(SELECT ERROR_MESSAGE());				
			RAISERROR (@sortida,-1,-1);
		END CATCH
		END
		--registrar auditoria
		DECLARE @resultat varchar(250);
		SET @sortida=@idRef+'/'+@modul+'/'+str(@port,2,0)+'-'+@sortida;
		exec ins_auditoria @idUsuGest,@control,'a_boqswitch',@sortida, @resultat OUTPUT;
END
GO



-- =============================================
-- Description:	<Modificació switch i registre auditoria>
-- Paràmetres d'entrada: idUsuGest, idRef, processador, gbRam, gbDisc, tDdur, wol, periferics
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: que l'usuari de gestió i la referencia existeixein
--              que el switch existeixi
-- =============================================


--Eliminen el procediment si ja existeix
IF OBJECT_ID('m_boqswitch') IS NOT NULL
	DROP PROCEDURE m_boqswitch;
GO

--Creem el procediment
CREATE PROCEDURE m_boqswitch
	-- Paràmetres d'entrada
	@idUsuGest varchar(15),
	@idRef varchar(12),
	@modul char(1),
	@port int,
	@valid bit,
	@tipPort TipPort,
	-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	--Fem les validacions

	DECLARE @control char(1)='E';
	
	IF NOT EXISTS (SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsuGest)
		SET @sortida='Aquest usuari de gestió no existeix';
	ELSE IF @idRef='' 
		SET @sortida='El identificador de referencia no pot ser blanc';
	ELSE IF NOT EXISTS (SELECT idRef FROM Referencia WHERE idRef=@idRef)
		SET @sortida='La referencia '+@idRef+' no existeix';
	ELSE IF NOT EXISTS (SELECT * FROM BoqSwitch WHERE idRef=@idRef AND modul=@modul and port=@port)
		SET @sortida='El switch '+@idRef+'-'+@modul+'-'+str(@port,2,0)+' no existeix';
			-- afegim la inserció en un try-catch per si surtis algun error no controlat en el procediment.
	ELSE
		BEGIN
		BEGIN TRY
			UPDATE BoqSwitch
			SET valid=@valid,
			tipPort=@tipPort
			WHERE idRef=@idRef AND modul=@modul and port=@port;
			SET @sortida='Registre modificat correctament';
			SET @control='R';
		END TRY
		BEGIN CATCH
			SET @sortida=(SELECT ERROR_MESSAGE());				
			RAISERROR (@sortida,-1,-1);
		END CATCH
		END
	--registrar auditoria
	DECLARE @resultat varchar(250);
		SET @sortida=@idRef+'/'+@modul+'/'+str(@port,2,0)+'-'+@sortida;
		exec ins_auditoria @idUsuGest,@control,'m_boqswitch',@sortida, @resultat OUTPUT;
END
GO

-- =============================================
-- Description:	<Baixa Switch i registre auditoria>
-- No s'implementa la baixa d'un switch (lligat a referencia) 
-- =============================================

------------------------------------------------------------------------
-- TAULA ENTMAT---------------------------------------------------------
------------------------------------------------------------------------

-- =============================================
-- Description:	<Alta Entrada de material i registre auditoria>
-- Paràmetres d'entrada: idUsuGest, dateentmat, numentmat, numfact, datafact, numreg, datareg, idProveidor
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: que l'usuari de gestió i el proveidor existeix, 
-- 104 format dd.mm.aa
-- =============================================


--Eliminen el procediment si ja existeix
IF OBJECT_ID('a_entmat') IS NOT NULL
	DROP PROCEDURE a_entmat;
GO

--Creem el procediment
CREATE PROCEDURE a_entmat
	-- Paràmetres d'entrada
	@idUsuGest varchar(15),
	@dateEntMat date,
	@numEntMat varchar(15),
	@numFact varchar(15),
	@dataFact date,
	@numReg varchar(15),
	@dataReg date,
	@idProveidor varchar(8),
	-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	--Fem les validacions

	DECLARE @control char(1)='E';
	
	IF NOT EXISTS (SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsuGest)
		SET @sortida='Aquest usuari de gestió no existeix';
	ELSE IF NOT EXISTS (SELECT idProveidor FROM Proveidor WHERE idProveidor=@idProveidor)
		SET @sortida='El proveïdor '+@idProveidor+' no existeix';
	ELSE
		BEGIN
		-- afegim la inserció en un try-catch per si surtis algun error no controlat en el procediment.
		BEGIN TRY
			INSERT INTO EntMaterial
				VALUES (@dateEntMat,@numEntMat,@numFact,@dataFact,@numReg,@dataReg,@idProveidor);
			--Un cop insertat
			SET @sortida='Registre insertat correctament';
			SET @control='R';
		END TRY
		BEGIN CATCH
			SET @sortida=(SELECT ERROR_MESSAGE());				
			RAISERROR (@sortida,-1,-1);
		END CATCH
		END
		--registrar auditoria
		DECLARE @resultat varchar(250);
		SET @sortida=@idProveidor+'/'+@numEntMat+'-'+@sortida;
		exec ins_auditoria @idUsuGest,@control,'a_entmat',@sortida, @resultat OUTPUT;
END
GO



-- =============================================
-- Description:	<Modificació entrada de material i registre auditoria>
-- Paràmetres d'entrada: idUsuGest, identmat, dateentmat, numentmat, numfact, datafact, numreg, datareg, idProveidor
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: que l'usuari de gestió, el proveidor i l'entrada existeixin
-- =============================================


--Eliminen el procediment si ja existeix
IF OBJECT_ID('m_entmat') IS NOT NULL
	DROP PROCEDURE m_entmat;
GO

--Creem el procediment
CREATE PROCEDURE m_entmat
	-- Paràmetres d'entrada
	@idUsuGest varchar(15),
	@idEntMat int,
	@dateEntMat date,
	@numEntMat varchar(15),
	@numFact varchar(15),
	@dataFact date,
	@numReg varchar(15),
	@dataReg date,
	@idProveidor varchar(8),
	-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	--Fem les validacions

	DECLARE @control char(1)='E';
	
	IF NOT EXISTS (SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsuGest)
		SET @sortida='Aquest usuari de gestió no existeix';
	ELSE IF @idEntMat='' OR @idEntMat=NULL 
		SET @sortida='El número d"entrada no poden ser blanc';
	ELSE IF NOT EXISTS (SELECT idProveidor FROM Proveidor WHERE idProveidor=@idProveidor)
		SET @sortida='El proveïdor '+@idProveidor+' no existeix';
	ELSE IF NOT EXISTS (SELECT * FROM EntMaterial WHERE idEntMat=@idEntMat)
		SET @sortida='L"entrada '+str(@idEntMat,10)+' no existeix';
	ELSE
		BEGIN
		BEGIN TRY
			UPDATE EntMaterial
			SET dateEntMat=@dateEntMat,
			numEntMat=@numEntMat,
			numFact=@numFact,
			dataFact=@dataFact,
			numReg=@numReg,
			dataReg=@dataReg,
			idProveidor=@idProveidor
			WHERE idEntMat=@idEntMat;
			SET @sortida='Registre modificat correctament';
			SET @control='R';
		END TRY
		BEGIN CATCH
			SET @sortida=(SELECT ERROR_MESSAGE());				
			RAISERROR (@sortida,-1,-1);
		END CATCH
		END
	--registrar auditoria
	DECLARE @resultat varchar(250);
		SET @sortida=str(@idEntMat,10)+'-'+@sortida;
		exec ins_auditoria @idUsuGest,@control,'m_entmat',@sortida, @resultat OUTPUT;
END
GO

-- =============================================
-- Description:	<baixa entrada de material i registre auditoria>
-- Paràmetres d'entrada: idUsuGest, identmat
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: que l'usuari de gestió i l'entrada existeixin
-- =============================================


--Eliminen el procediment si ja existeix
IF OBJECT_ID('b_entmat') IS NOT NULL
	DROP PROCEDURE b_entmat;
GO

--Creem el procediment
CREATE PROCEDURE b_entmat
	-- Paràmetres d'entrada
	@idUsuGest varchar(15),
	@idEntMat int,
	-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	--Fem les validacions

	DECLARE @control char(1)='E';
	
	IF NOT EXISTS (SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsuGest)
		SET @sortida='Aquest usuari de gestió no existeix';
	ELSE IF @idEntMat='' OR @idEntMat=NULL 
		SET @sortida='El número d"entrada no poden ser blanc';
	ELSE IF NOT EXISTS (SELECT * FROM EntMaterial WHERE idEntMat=@idEntMat)
		SET @sortida='L"entrada '+str(@idEntMat,10)+' no existeix';
	ELSE
		BEGIN
		BEGIN TRY
			DELETE FROM EntMaterial
			WHERE idEntMat=@idEntMat;
			SET @sortida='Registre eliminat correctament';
			SET @control='R';
		END TRY
		BEGIN CATCH
			SET @sortida=(SELECT ERROR_MESSAGE());				
			RAISERROR (@sortida,-1,-1);
		END CATCH
		END
	--registrar auditoria
	DECLARE @resultat varchar(250);
		SET @sortida=str(@idEntMat,10)+'-'+@sortida;
		exec ins_auditoria @idUsuGest,@control,'b_entmat',@sortida, @resultat OUTPUT;
END
GO

------------------------------------------------------------------------
-- TAULA LINENTMAT---------------------------------------------------------
------------------------------------------------------------------------

-- =============================================
-- Description:	<Alta Linies Entrada de material i registre auditoria>
-- Paràmetres d'entrada: idUsuGest, comlinmat, idref, qtt, preSiva, tipGar, mesosGar, dataGar
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: que l'usuari de gestió, l'entrada de material i la referencia existeixin.
-- =============================================


--Eliminen el procediment si ja existeix
IF OBJECT_ID('a_linentmat') IS NOT NULL
	DROP PROCEDURE a_linentmat;
GO

--Creem el procediment
CREATE PROCEDURE a_linentmat
	-- Paràmetres d'entrada
	@idUsuGest varchar(15),
	@comLinMat int,
	@idRef varchar(12),
	@qtt int,
	@preuSiva decimal(6,2),
	@tipGar varchar(15),
	@mesosGar int,
	@dataGar date,
	-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	--Fem les validacions

	DECLARE @control char(1)='E';
	
	IF NOT EXISTS (SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsuGest)
		SET @sortida='Aquest usuari de gestió no existeix';
	ELSE IF NOT EXISTS (SELECT idRef FROM Referencia WHERE idRef=@idRef)
		SET @sortida='La referencia '+@idRef+' no existeix';
	ELSE IF NOT EXISTS (SELECT idEntMat FROM EntMaterial WHERE idEntMat=@comLinMat)
		SET @sortida='L"entrada '+str(@comLinMat,10)+' no existeix';
	ELSE
		BEGIN
		-- afegim la inserció en un try-catch per si surtis algun error no controlat en el procediment.
		BEGIN TRY
			INSERT INTO LinEntMat
				VALUES (@comLinMat,@idRef,@qtt,@preuSiva,@tipGar,@mesosGar,@dataGar);
			--Un cop insertat
			SET @sortida='Registre insertat correctament';
			SET @control='R';
		END TRY
		BEGIN CATCH
			SET @sortida=(SELECT ERROR_MESSAGE());				
			RAISERROR (@sortida,-1,-1);
		END CATCH
		END
		--registrar auditoria
		DECLARE @resultat varchar(250);
		SET @sortida=str(@comLinMat,10)+'/'+@idRef+'-'+@sortida;
		exec ins_auditoria @idUsuGest,@control,'a_linentmat',@sortida, @resultat OUTPUT;
END
GO



-- =============================================
-- Description:	<Modificació linies entrada de material i registre auditoria>
-- Paràmetres d'entrada: idUsuGest, comlinmat, idLinMat, idref, qtt, preSiva, tipGar, mesosGar, dataGar
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: que l'usuari de gestió, l'entrada de material i la referencia existeixin.
--              que el registre existeixi
-- =============================================


--Eliminen el procediment si ja existeix
IF OBJECT_ID('m_linentmat') IS NOT NULL
	DROP PROCEDURE m_linentmat;
GO

--Creem el procediment
CREATE PROCEDURE m_linentmat
	-- Paràmetres d'entrada
	@idUsuGest varchar(15),
	@comLinMat int,
	@idLinEntMat int,
	@idRef varchar(12),
	@qtt int,
	@preuSiva decimal(6,2),
	@tipGar varchar(15),
	@mesosGar int,
	@dataGar date,
		-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	--Fem les validacions

	DECLARE @control char(1)='E';
	
	IF NOT EXISTS (SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsuGest)
		SET @sortida='Aquest usuari de gestió no existeix';
	ELSE IF NOT EXISTS (SELECT idRef FROM Referencia WHERE idRef=@idRef)
		SET @sortida='La referencia '+@idRef+' no existeix';
	ELSE IF NOT EXISTS (SELECT idEntMat FROM EntMaterial WHERE idEntMat=@comLinMat)
		SET @sortida='L"entrada '+str(@comLinMat,10)+' no existeix';
	ELSE IF NOT EXISTS (SELECT * FROM LinEntMat WHERE comLinMat=@comLinMat and idLinEntMat=@idLinEntMat)
		SET @sortida='La linia d"entrada '+str(@comLinMat,15)+'/'+str(@idLinEntMat,5)+' no existeix';	
	ELSE
		BEGIN
		BEGIN TRY
			UPDATE LinEntMat
			SET idRef=@idRef,
			qtt=@qtt,
			preuSiva=@preuSiva,
			tipGar=@tipGar,
			mesosGar=@mesosGar,
			dataGar=@dataGar
			WHERE comLinMat=@comLinMat and idLinEntMat=@idLinEntMat;
			SET @sortida='Registre modificat correctament';
			SET @control='R';
		END TRY
		BEGIN CATCH
			SET @sortida=(SELECT ERROR_MESSAGE());				
			RAISERROR (@sortida,-1,-1);
		END CATCH
		END
	--registrar auditoria
	DECLARE @resultat varchar(250);
		SET @sortida=str(@comLinMat,10)+'/'+str(@idLinEntMat)+'-'+@sortida;
		exec ins_auditoria @idUsuGest,@control,'m_linentmat',@sortida, @resultat OUTPUT;
END
GO

-- =============================================
-- Description:	<baixa linies d'entrada de material i registre auditoria>
-- Paràmetres d'entrada: idUsuGest, comLinMat, idLinEntMat
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: que l'usuari de gestió i l linia d'entrada existeixin
-- =============================================


--Eliminen el procediment si ja existeix
IF OBJECT_ID('b_linentmat') IS NOT NULL
	DROP PROCEDURE b_linentmat;
GO

--Creem el procediment
CREATE PROCEDURE b_linentmat
	-- Paràmetres d'entrada
	@idUsuGest varchar(15),
	@comLinMat int,
	@idLinEntMat int,
	-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	--Fem les validacions

	DECLARE @control char(1)='E';
	
	IF NOT EXISTS (SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsuGest)
		SET @sortida='Aquest usuari de gestió no existeix';
	ELSE IF NOT EXISTS (SELECT idEntMat FROM EntMaterial WHERE idEntMat=@comLinMat)
		SET @sortida='L"entrada '+str(@comLinMat,10)+' no existeix';
	ELSE IF NOT EXISTS (SELECT * FROM LinEntMat WHERE comLinMat=@comLinMat and idLinEntMat=@idLinEntMat)
		SET @sortida='La linia d"entrada '+@comLinMat+'/'+str(@idLinEntMat,5)+' no existeix';	
	ELSE
		BEGIN
		BEGIN TRY
			DELETE FROM LinEntMat
			WHERE comLinMat=@comLinMat and idLinEntMat=@idLinEntMat;
			SET @sortida='Registre eliminat correctament';
			SET @control='R';
		END TRY
		BEGIN CATCH
			SET @sortida=(SELECT ERROR_MESSAGE());				
			RAISERROR (@sortida,-1,-1);
		END CATCH
		END
	--registrar auditoria
	DECLARE @resultat varchar(250);
		SET @sortida=str(@comLinMat,10)+'/'+str(@idLinEntMat)+'-'+@sortida;
		exec ins_auditoria @idUsuGest,@control,'b_linentmat',@sortida, @resultat OUTPUT;
END
GO

------------------------------------------------------------------------
-- TAULA USUARIS---------------------------------------------------------
------------------------------------------------------------------------

-- =============================================
-- Description:	<Alta usuari i registre auditoria>
-- Paràmetres d'entrada: idUsuGest, idUsuari, nom, cognoms, dni, dataAlta, dataBaixa, estatUsu, carrec, carrec2,
--                       bustia, bustia2, tipUsu, deptAssig, deptAssig2
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: que l'usuari de gestió, bustia, bustia2, tipUsu, deptAssig i deptAssig2 existeixin (si no són NULL), 
--              que el registre no estigui repetit i que idUsuari i dataAlta no sigui blanc
--              si la data baixa existeix, que no sigui més petita que la data d'alta
-- =============================================


--Eliminen el procediment si ja existeix
IF OBJECT_ID('a_usuari') IS NOT NULL
	DROP PROCEDURE a_usuari;
GO

--Creem el procediment
CREATE PROCEDURE a_usuari
	-- Paràmetres d'entrada
	@idUsuGest varchar(15),
	@idUsuari varchar(15),
	@nom varchar(30),
	@cognoms varchar(50),
	@dni varchar(9),
	@dataAlta date,
	@dataBaixa date,
	@estatUsu EstatUsuari,
	@carrec varchar(30),
	@carrec2 varchar(30),
	@bustia varchar(30),
	@bustia2 varchar(30),
	@tipUsu varchar(8),
	@deptAssig varchar(8),
	@deptAssig2 varchar(8),	
	-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	--Fem les validacions

	DECLARE @control char(1)='E';
	
	
	IF NOT EXISTS (SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsuGest)
		SET @sortida='Aquest usuari de gestió no existeix';
	ELSE IF @idUsuari=NULL or @idUsuari=''
		SET @sortida='L"usuari no pot ser blanc';
	ELSE IF ISNULL(@dataAlta,'')=''
		SET @sortida='La data d"alta no pot ser blanc';	
	ELSE IF (@dataBaixa<>NULL or @dataBaixa='') and @dataBaixa<@dataAlta
		SET @sortida='La data de baixa no pot ser inferior a la data d"alta';	
	ELSE IF NOT EXISTS (SELECT idtipUsu FROM TipusUsuari WHERE idTipUsu=@tipUsu)
		SET @sortida='El tipus d"usuari '+@tipUsu+' no existeix';
	ELSE IF ISNULL(@bustia,'')<>'' and NOT EXISTS (SELECT idBustia FROM Bustia WHERE idBustia=@bustia)
		SET @sortida='La bustia '+@bustia+' no existeix';
	ELSE IF ISNULL(@bustia2,'')<>'' and NOT EXISTS (SELECT idBustia FROM Bustia WHERE idBustia=@bustia2)
		SET @sortida='La bustia2 '+@bustia2+' no existeix';
	ELSE IF ISNULL(@deptAssig,'')<>'' and NOT EXISTS (SELECT idDepartament FROM Departament WHERE idDepartament=@deptAssig)
		SET @sortida='El departament '+@deptAssig+' no existeix';
	ELSE IF ISNULL(@deptAssig2,'')<>'' and NOT EXISTS (SELECT idDepartament FROM Departament WHERE idDepartament=@deptAssig2)
		SET @sortida='El departament2 '+@deptAssig2+' no existeix';
	ELSE IF EXISTS (SELECT idUsuari FROM Usuari WHERE idUsuari=@idUsuari)
		SET @sortida='L"usuari '+@idUsuari+' ja existeix';
	ELSE
		BEGIN
		-- afegim la inserció en un try-catch per si surtis algun error no controlat en el procediment.
		BEGIN TRY
			INSERT INTO Usuari
				VALUES (@idUsuari, @nom, @cognoms,@dni, @dataAlta, @dataBaixa, @estatUsu, @carrec, @carrec2, 
				@bustia, @bustia2, @tipUsu, @deptAssig, @deptAssig2);
			--Un cop insertat
			SET @sortida='Registre insertat correctament';
			SET @control='R';
		END TRY
		BEGIN CATCH
			SET @sortida=(SELECT ERROR_MESSAGE());				
			RAISERROR (@sortida,-1,-1);
		END CATCH
		END
		--registrar auditoria
		DECLARE @resultat varchar(250);
		SET @sortida=@idUsuari+'-'+@sortida;
		exec ins_auditoria @idUsuGest,@control,'a_usuari',@sortida, @resultat OUTPUT;
END
GO



-- =============================================
-- Description:	<Modificació usuari i registre auditoria>
-- Paràmetres d'entrada: idUsuGest, idUsuari, nom, cognoms, dni, dataAlta, dataBaixa, estatUsu, carrec, carrec2,
--                       bustia, bustia2, tipUsu, deptAssig, deptAssig2
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: que l'usuari de gestió, bustia, bustia2, tipUsu, deptAssig i deptAssig2 existeixin (si no són NULL), 
--              que el registre existeixi i que idUsuari i dataAlta no sigui blanc
--              si la data baixa existeix, que no sigui més petita que la data d'alta
-- =============================================


--Eliminen el procediment si ja existeix
IF OBJECT_ID('m_usuari') IS NOT NULL
	DROP PROCEDURE m_usuari;
GO

--Creem el procediment
CREATE PROCEDURE m_usuari
	-- Paràmetres d'entrada
	@idUsuGest varchar(15),
	@idUsuari varchar(15),
	@nom varchar(30),
	@cognoms varchar(50),
	@dni varchar(9),
	@dataAlta date,
	@dataBaixa date,
	@estatUsu EstatUsuari,
	@carrec varchar(30),
	@carrec2 varchar(30),
	@bustia varchar(30),
	@bustia2 varchar(30),
	@tipUsu varchar(8),
	@deptAssig varchar(8),
	@deptAssig2 varchar(8),	
	-- Paràmetre de sortida
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	--Fem les validacions

	DECLARE @control char(1)='E';
	
	IF NOT EXISTS (SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsuGest)
		SET @sortida='Aquest usuari de gestió no existeix';
	ELSE IF @idUsuari=NULL or @idUsuari=''
		SET @sortida='L"usuari no pot ser blanc';
	ELSE IF ISNULL(@dataAlta,'')=''
		SET @sortida='La data d"alta no pot ser blanc';	
	ELSE IF ISNULL(@dataBaixa,'')<>'' and @dataBaixa<@dataAlta
		SET @sortida='La data de baixa no pot ser inferior a la data d"alta';		
	ELSE IF NOT EXISTS (SELECT idtipUsu FROM TipusUsuari WHERE idTipUsu=@tipUsu)
		SET @sortida='El tipus d"usuari '+@tipUsu+' no existeix';
	ELSE IF ISNULL(@bustia,'')<>'' and NOT EXISTS (SELECT idBustia FROM Bustia WHERE idBustia=@bustia)
		SET @sortida='La bustia '+@bustia+' no existeix';
	ELSE IF ISNULL(@bustia2,'')<>'' and NOT EXISTS (SELECT idBustia FROM Bustia WHERE idBustia=@bustia2)
		SET @sortida='La bustia2 '+@bustia2+' no existeix';
	ELSE IF ISNULL(@deptAssig,'')<>'' and NOT EXISTS (SELECT idDepartament FROM Departament WHERE idDepartament=@deptAssig)
		SET @sortida='El departament '+@deptAssig+' no existeix';
	ELSE IF ISNULL(@deptAssig2,'')<>'' and NOT EXISTS (SELECT idDepartament FROM Departament WHERE idDepartament=@deptAssig2)
		SET @sortida='El departament2 '+@deptAssig2+' no existeix';
	ELSE IF NOT EXISTS (SELECT idUsuari FROM Usuari WHERE idUsuari=@idUsuari)
		SET @sortida='L"usuari '+@idUsuari+' no existeix';
	ELSE
		BEGIN
		BEGIN TRY
			UPDATE Usuari
			SET nom=@nom, 
			cognoms=@cognoms,
			dni=@dni, 
			dataAlta=@dataAlta, 
			dataBaixa=@dataBaixa, 
			estatUsu=@estatUsu, 
			carrec=@carrec, 
			carrec2=@carrec2, 
			bustia=@bustia, 
			bustia2=@bustia2, 
			tipUsu=@tipUsu, 
			deptAssig=@deptAssig, 
			deptAssig2=@deptAssig2
			WHERE idUsuari=@idUsuari;
			SET @sortida='Registre modificat correctament';
			SET @control='R';
		END TRY
		BEGIN CATCH
			SET @sortida=(SELECT ERROR_MESSAGE());				
			RAISERROR (@sortida,-1,-1);
		END CATCH
		END
	--registrar auditoria
	DECLARE @resultat varchar(250);
		SET @sortida=@idUsuari+'-'+@sortida;
		exec ins_auditoria @idUsuGest,@control,'m_usuari',@sortida, @resultat OUTPUT;
END
GO

-- =============================================
-- Description:	<baixa usuari i registre auditoria>
-- Paràmetres d'entrada: idUsuGest, idUsuari
-- Paràmetre de sortida: Resultat del procediment
-- Validacions: que l'usuari de gestió, l'usuari i la data de baixa existeixin
--              que la data de baixa no sigui inferior a la data d'alta
-- =============================================


--Eliminen el procediment si ja existeix
IF OBJECT_ID('b_usuari') IS NOT NULL
	DROP PROCEDURE b_usuari;
GO

--Creem el procediment
CREATE PROCEDURE b_usuari
	-- Paràmetres d'entrada
	@idUsuGest varchar(15),
	@idUsuari varchar(15),
	@dataBaixa date,
	@sortida varchar(250) OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	--Fem les validacions

	DECLARE @control char(1)='E';
	
	IF NOT EXISTS (SELECT idUsuGest FROM UsuGestio WHERE idUsuGest=@idUsuGest)
		SET @sortida='Aquest usuari de gestió no existeix';
	ELSE IF @idUsuari=NULL or @idUsuari=''
		SET @sortida='L"usuari no pot ser blanc';
	ELSE IF ISNULL(@dataBaixa,'')<>'' and @dataBaixa<(SELECT dataAlta FROM Usuari WHERE idUsuari=@idUsuari)
		SET @sortida='La data de baixa no pot ser inferior a la data d"alta';		
	ELSE IF NOT EXISTS (SELECT idUsuari FROM Usuari WHERE idUsuari=@idUsuari)
		SET @sortida='L"usuari '+@idUsuari+' no existeix';
	ELSE
		BEGIN
		BEGIN TRY
			DELETE FROM Usuari
			WHERE idUsuari=@idUsuari;
			SET @sortida='Registre eliminat correctament';
			SET @control='R';
		END TRY
		BEGIN CATCH
			SET @sortida=(SELECT ERROR_MESSAGE());				
			RAISERROR (@sortida,-1,-1);
		END CATCH
		END
	--registrar auditoria
	DECLARE @resultat varchar(250);
		SET @sortida=@idUsuari+'-'+@sortida;
		exec ins_auditoria @idUsuGest,@control,'b_usuari',@sortida, @resultat OUTPUT;
END
GO
