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

USE dbInventari;
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- ======================================================================
-- Description:	Després d'inserir una nova referencia,
--              actualitza el camp etiqueta de la familia d'aquesta referencia.
-- =======================================================================

--Eliminen el disparador si ja existeix
IF OBJECT_ID('act_etiqueta') IS NOT NULL
	DROP TRIGGER act_etiqueta;
GO

CREATE TRIGGER act_etiqueta
   ON  Referencia
   AFTER INSERT
AS 
BEGIN
	SET NOCOUNT ON;

	--Guardem la referencia que s'acaba d'inserir
	DECLARE @idRef varchar(12)=(SELECT idRef FROM inserted);

	IF @idRef<>NULL or @idRef<>''
		UPDATE FamReferencia SET etiqueta=@idRef WHERE FamReferencia.idFamRef=
		(SELECT idFamRef FROM Referencia WHERE idRef=@idRef);
END
GO

-- ======================================================================
-- Description:	Després d'insertar una registre a intervenció que tingui refRecanvi,
--				Si no és fungible, modifica l'estat del recanvi de 'Reserva'a 'Actiu.
--              Si el recanvi és de tipus fungible, resta 1 a la quantitat.
-- =======================================================================

--Eliminen el disparador si ja existeix
IF OBJECT_ID('act_referencia_int') IS NOT NULL
	DROP TRIGGER act_referencia_int;
GO

CREATE TRIGGER act_referencia_int
   ON  Intervencio
   AFTER INSERT
AS 
BEGIN
	SET NOCOUNT ON;

	--Verifiquem si la intervenció té una refRecanvi associado
	DECLARE @refRec varchar(12)=(SELECT refRecanvi FROM inserted);

	IF @refRec<>NULL AND @refRec<>''
	BEGIN
		--Verifiquem si la Familia de la Referencia RefRecanvi és fungible.
		DECLARE @esFungible bit=
		(SELECT esFungible FROM FamReferencia
		INNER JOIN Referencia ON Referencia.idRef=@refRec);

		-- Si és fungible, actualitzem la qtt (restem 1 unitat sinó es 0)
		IF @esFungible=1
		BEGIN
			IF (SELECT Referencia.qtt FROM Referencia WHERE idRef=@refRec)>0
				UPDATE Referencia SET qtt=qtt-1 WHERE idRef=@refRec;
		END
		-- Si no és fungible, actualitzem l'estat (passem a 'Actiu')
		ELSE
			UPDATE Referencia SET estat='Actiu' WHERE idRef=@refRec;
	END
END
GO

-- ======================================================================
-- Description:	Després d'insertar una registre a LinEntMat
--				Actualitzem Referencia: dataGar, dataCompra, nomProv, qtt, estat.
---				Si no és fungible, posem la qtt a 1 i l'estat de 'Pendent' a 'Reserva' 
--              Si és de tipus fungible, afegim 1 a la quantitat.
--				(si es modifica o s'elimina una linia no s'actualitzen automàticament aquests camps)
-- =======================================================================

--Eliminen el disparador si ja existeix
IF OBJECT_ID('act_referencia_lin') IS NOT NULL
	DROP TRIGGER act_referencia_lin;
GO

CREATE TRIGGER act_referencia_lin
   ON  LinEntMat
   AFTER INSERT
AS 
BEGIN
	SET NOCOUNT ON;

	DECLARE @ref varchar(12)=(SELECT idRef FROM inserted);

	--Verifiquem si la linia de l'entrada té una ref vàlida
	IF @ref<>''
	BEGIN
		--Recollim les dades de la linia;
		DECLARE @qtt int=(SELECT qtt FROM inserted);		
		DECLARE @dataGar date=(SELECT dataGar FROM inserted);
		DECLARE @comLinMat int=(SELECT comLinMat FROM inserted);

		--Recollim les dades de EntMaterial
		DECLARE @dataFact date=(SELECT dataFact FROM entMaterial WHERE idEntMat=@comLinMat);
		DECLARE @nomProv varchar(50)=(SELECT nomComer FROM Proveidor WHERE idProveidor=
									(SELECT idProveidor FROM EntMaterial WHERE idEntMat=@comLinMat));										
		
		--Verifiquem si la Familia de la Referencia Ref és fungible.
		DECLARE @esFungible bit=
		(SELECT esFungible FROM FamReferencia 
		INNER JOIN Referencia ON Referencia.idFamRef=FamReferencia.idFamRef
		WHERE Referencia.idRef=@ref);

		-- Si és fungible, actualitzem augmentem la qtt.
		IF @esFungible=1
			UPDATE Referencia 
			SET qtt=qtt+@qtt, 
			dataGar=@dataGar,
			dataCompra=@dataFact,
			nomProv=@nomProv
			WHERE idRef=@ref;
		-- Si no és fungible, actualitzem l'estat (passem a 'Reserva' i posem la qtt a 1)
		ELSE
			UPDATE Referencia 
			SET estat='Reserva', 
			qtt=1,
			dataGar=@dataGar,
			dataCompra=@dataFact,
			nomProv=@nomProv			
			WHERE idRef=@ref;
		
	END
END
GO

-- ======================================================================
-- Description:	Després d'insertar una registre a movInventari
--				Actualitzem la qtt de la referencia
-- =======================================================================

--Eliminen el disparador si ja existeix
IF OBJECT_ID('act_qttref') IS NOT NULL
	DROP TRIGGER act_qttref;
GO

CREATE TRIGGER act_qttref
   ON  MovInventari
   AFTER INSERT
AS 
BEGIN
	SET NOCOUNT ON;

	--Verifiquem si la linia de l'entrada té una ref vàlida
	DECLARE @ref varchar(12)=(SELECT idRef FROM inserted);
	DECLARE @qtt int=(SELECT qtt FROM inserted);

	IF @ref<>NULL AND @ref<>'' and @qtt<>0 
	BEGIN
		UPDATE Referencia SET qtt=qtt+@qtt WHERE idRef=@ref;
	END
END
GO

-- ======================================================================
-- Description:	Al ABM un registre a Usuari
--				s'afegeix un registre a HistUsu
-- =======================================================================

--Eliminen el disparador si ja existeix
IF OBJECT_ID('ins_histusu') IS NOT NULL
	DROP TRIGGER ins_histusu;
GO

CREATE TRIGGER ins_histusu
   ON  Usuari
   AFTER INSERT, DELETE, UPDATE
AS 
BEGIN
	SET NOCOUNT ON;
		
	--Comprovem quina acció s'ha fet:
	-- Si és una alta 
	IF EXISTS (SELECT 1 FROM inserted INNER JOIN Usuari ON inserted.idUsuari=Usuari.idUsuari) 
	AND NOT EXISTS (SELECT 1 FROM deleted INNER JOIN Usuari ON deleted.idUsuari=Usuari.idUsuari)
		INSERT INTO HistUsu 
		(idUsu,dataAccio,accio,nom,cognoms,dni,dataAlta,dataBaixa,estatUsu,carrec,carrec2,bustia,bustia2,
		nomTipUsu,nomDeptAssig,nomDeptAssig2) 
		SELECT 
		idUsuari,getdate(),'A',inserted.nom,cognoms,dni,dataAlta,dataBaixa,estatUsu,carrec,carrec2,bustia,bustia2,
		TipusUsuari.descripcio,Departament.nom AS nomDeptAssig1, Departament.nom AS nomdeptAssig2 
		FROM inserted
		LEFT JOIN TipusUsuari ON TipusUsuari.idTipUsu=inserted.tipUsu		
		LEFT JOIN Departament ON Departament.idDepartament=inserted.deptAssig
		LEFT JOIN Departament AS d3 ON d3.idDepartament=inserted.deptAssig2;
		-- si és una modificació
	ELSE IF EXISTS (SELECT 1 FROM inserted INNER JOIN Usuari ON inserted.idUsuari=Usuari.idUsuari) 
	AND EXISTS (SELECT 1 FROM deleted INNER JOIN Usuari ON deleted.idUsuari=Usuari.idUsuari)
		INSERT INTO HistUsu 
		(idUsu,dataAccio,accio,nom,cognoms,dni,dataAlta,dataBaixa,estatUsu,carrec,carrec2,bustia,bustia2,
		nomTipUsu,nomDeptAssig,nomDeptAssig2) 
		SELECT
		idUsuari,getdate(),'M',inserted.nom,cognoms,dni,dataAlta,dataBaixa,estatUsu,carrec,carrec2,bustia,bustia2,
		TipusUsuari.descripcio,Departament.nom AS nomDeptAssig1, Departament.nom AS nomdeptAssig2 
		FROM inserted
		LEFT JOIN TipusUsuari ON TipusUsuari.idTipUsu=inserted.tipUsu		
		LEFT JOIN Departament ON Departament.idDepartament=inserted.deptAssig
		LEFT JOIN Departament AS d3 ON d3.idDepartament=inserted.deptAssig2;
	-- si és una baixa
	ELSE IF NOT EXISTS (SELECT 1 FROM inserted INNER JOIN Usuari ON inserted.idUsuari=Usuari.idUsuari) 
	AND EXISTS (SELECT 1 FROM deleted INNER JOIN Usuari ON deleted.idUsuari=Usuari.idUsuari)
		INSERT INTO HistUsu 
		(idUsu,dataAccio,accio,nom,cognoms,dni,dataAlta,dataBaixa,estatUsu,carrec,carrec2,bustia,bustia2,
		nomTipUsu,nomDeptAssig,nomDeptAssig2) 
		SELECT 
		idUsuari,getdate(),'B',deleted.nom,cognoms,dni,dataAlta,dataBaixa,estatUsu,carrec,carrec2,bustia,bustia2,
		TipusUsuari.descripcio,Departament.nom AS nomDeptAssig1, Departament.nom AS nomdeptAssig2 
		FROM deleted
		LEFT JOIN TipusUsuari ON TipusUsuari.idTipUsu=deleted.tipUsu		
		LEFT JOIN Departament ON Departament.idDepartament=deleted.deptAssig
		LEFT JOIN Departament AS d3 ON d3.idDepartament=deleted.deptAssig2;
END
GO

-- ======================================================================
-- Description:	Al ABM un registre a PuntTreball
--				s'afegeix un registre a HistPuntTreb
-- =======================================================================

--Eliminen el disparador si ja existeix
IF OBJECT_ID('ins_histpuntreb') IS NOT NULL
	DROP TRIGGER ins_histpuntreb;
GO

CREATE TRIGGER ins_histpuntreb
   ON  PuntTreball
   AFTER INSERT, DELETE, UPDATE
AS 
BEGIN
	SET NOCOUNT ON;
	--Comprovem quina acció s'ha fet:
	-- Si és una alta 
	IF EXISTS (SELECT 1 FROM inserted INNER JOIN PuntTreball ON inserted.idPuntTreb=PuntTreball.idPuntTreb) 
	AND NOT EXISTS (SELECT 1 FROM deleted INNER JOIN PuntTreball ON deleted.idPuntTreb=PuntTreball.idPuntTreb)
		INSERT INTO HistPuntTreb 
		(idPuntTreb,dataAccio,accio,nom,dataAlta,estat,observacions,usb,nomDep,progNLlic,ubiPuntTreb,ordinador,
		reinstalat,gbRam,gbDisc,tDdur,sOpe,office,monitor,monitor2,teclat,ratoli,telf,mobil,tauleta,periferics,
		impressora,escaner,wol,altPer,altPer2,pulzPant)
		SELECT 
		i.idPuntTreb,getdate(),'A',i.nom,i.dataAlta,i.estat,i.observacions,i.usb,Departament.nom,
		i.progNLlic,i.ubiPuntTreb,i.ordinador, i.reinstalat,Ordinador.gbRam,Ordinador.gbDisc,Ordinador.tDdur,i.sOpe,i.office,
		i.monitor,i.monitor2,i.teclat,i.ratoli,i.telf,i.mobil,i.tauleta,ordinador.periferics,i.impressora,i.escaner,i.wol,
		i.altPer,i.altPer2,Referencia.pulzPant
		FROM inserted as i
		INNER JOIN PuntTreball ON i.idPuntTreb=PuntTreball.idPuntTreb		
		LEFT JOIN Departament ON Departament.idDepartament=i.ubiPuntTreb
		LEFT JOIN Ordinador ON Ordinador.idRef=i.ordinador
		LEFT JOIN Referencia ON Referencia.idRef=i.ordinador;
	-- si és una modificació
	ELSE IF EXISTS (SELECT 1 FROM inserted INNER JOIN PuntTreball ON inserted.idPuntTreb=PuntTreball.idPuntTreb) 
	AND EXISTS (SELECT 1 FROM deleted INNER JOIN PuntTreball ON deleted.idPuntTreb=PuntTreball.idPuntTreb)
		INSERT INTO HistPuntTreb 
		(idPuntTreb,dataAccio,accio,nom,dataAlta,estat,observacions,usb,nomDep,progNLlic,ubiPuntTreb,ordinador,
		reinstalat,gbRam,gbDisc,tDdur,sOpe,office,monitor,monitor2,teclat,ratoli,telf,mobil,tauleta,periferics,
		impressora,escaner,wol,altPer,altPer2,pulzPant)
		SELECT 
		i.idPuntTreb,getdate(),'M',i.nom,i.dataAlta,i.estat,i.observacions,i.usb,Departament.nom,
		i.progNLlic,i.ubiPuntTreb,i.ordinador, i.reinstalat,Ordinador.gbRam,Ordinador.gbDisc,Ordinador.tDdur,i.sOpe,i.office,
		i.monitor,i.monitor2,i.teclat,i.ratoli,i.telf,i.mobil,i.tauleta,ordinador.periferics,i.impressora,i.escaner,i.wol,
		i.altPer,i.altPer2,Referencia.pulzPant
		FROM inserted as i
		INNER JOIN PuntTreball ON i.idPuntTreb=PuntTreball.idPuntTreb		
		LEFT JOIN Departament ON Departament.idDepartament=i.ubiPuntTreb
		LEFT JOIN Ordinador ON Ordinador.idRef=i.ordinador
		LEFT JOIN Referencia ON Referencia.idRef=i.ordinador;
	-- si és una baixa
	IF NOT EXISTS (SELECT 1 FROM inserted INNER JOIN PuntTreball ON inserted.idPuntTreb=PuntTreball.idPuntTreb) 
	AND EXISTS (SELECT 1 FROM deleted INNER JOIN PuntTreball ON deleted.idPuntTreb=PuntTreball.idPuntTreb)
		INSERT INTO HistPuntTreb 
		(idPuntTreb,dataAccio,accio,nom,dataAlta,estat,observacions,usb,nomDep,progNLlic,ubiPuntTreb,ordinador,
		reinstalat,gbRam,gbDisc,tDdur,sOpe,office,monitor,monitor2,teclat,ratoli,telf,mobil,tauleta,periferics,
		impressora,escaner,wol,altPer,altPer2,pulzPant)
		SELECT 
		i.idPuntTreb,getdate(),'B',i.nom,i.dataAlta,i.estat,i.observacions,i.usb,Departament.nom,
		i.progNLlic,i.ubiPuntTreb,i.ordinador, i.reinstalat,Ordinador.gbRam,Ordinador.gbDisc,Ordinador.tDdur,i.sOpe,i.office,
		i.monitor,i.monitor2,i.teclat,i.ratoli,i.telf,i.mobil,i.tauleta,ordinador.periferics,i.impressora,i.escaner,i.wol,
		i.altPer,i.altPer2,Referencia.pulzPant
		FROM deleted as i
		INNER JOIN PuntTreball ON i.idPuntTreb=PuntTreball.idPuntTreb		
		LEFT JOIN Departament ON Departament.idDepartament=i.ubiPuntTreb
		LEFT JOIN Ordinador ON Ordinador.idRef=i.ordinador
		LEFT JOIN Referencia ON Referencia.idRef=i.ordinador;
END
GO

-- ======================================================================
-- Description:	Al ABM una assignació de usuari a punt de treball
--				s'afegeix un registre a HistPuntTreb i a HistAssigUsu
-- =======================================================================

--Eliminen el disparador si ja existeix
IF OBJECT_ID('ins_histpuntreb_ausu') IS NOT NULL
	DROP TRIGGER ins_histpuntreb_ausu;
GO

CREATE TRIGGER ins_histpuntreb_ausu
   ON  AssigUsu
   AFTER INSERT, DELETE, UPDATE
AS 
BEGIN
	SET NOCOUNT ON;
	DECLARE @idPuntTreb varchar(9);
	DECLARE @numReg int;
	--Comprovem quina acció s'ha fet:
	-- Si és una alta 
	IF EXISTS (SELECT 1 FROM inserted LEFT JOIN AssigUsu ON inserted.idPuntTreb=AssigUsu.idPuntTreb AND inserted.idUsu=AssigUsu.idUsu) 
	AND NOT EXISTS (SELECT 1 FROM deleted LEFT JOIN AssigUsu ON deleted.idPuntTreb=AssigUsu.idPuntTreb AND deleted.idUsu=AssigUsu.idUsu)
	BEGIN

		SET @idPuntTreb=
		(SELECT inserted.idPuntTreb FROM inserted LEFT JOIN AssigUsu ON inserted.idPuntTreb=AssigUsu.idPuntTreb AND inserted.idUsu=AssigUsu.idUsu);
				
		-- Inserim el registre en HistPuntTreb		
		INSERT INTO HistPuntTreb 
		(idPuntTreb,dataAccio,accio,nom,dataAlta,estat,observacions,usb,nomDep,progNLlic,ubiPuntTreb,ordinador,
		reinstalat,gbRam,gbDisc,tDdur,sOpe,office,monitor,monitor2,teclat,ratoli,telf,mobil,tauleta,periferics,
		impressora,escaner,wol,altPer,altPer2,pulzPant)
		SELECT 
		p.idPuntTreb,getdate(),'A',p.nom,p.dataAlta,p.estat,p.observacions,p.usb,Departament.nom,p.progNLlic,p.ubiPuntTreb,p.ordinador,
		p.reinstalat,Ordinador.gbRam,Ordinador.gbDisc,Ordinador.tDdur,p.sOpe,p.office,p.monitor,p.monitor2,p.teclat,p.ratoli,p.telf,p.mobil,
		p.tauleta,ordinador.periferics,p.impressora,p.escaner,p.wol,p.altPer,p.altPer2,Referencia.pulzPant
		FROM PuntTreball as p
		INNER JOIN Departament ON idDepartament=p.ubiPuntTreb
		INNER JOIN Ordinador ON Ordinador.idRef=p.ordinador
		INNER JOIN Referencia ON Referencia.idRef=p.ordinador
		WHERE p.idPuntTreb=@idPuntTreb;

		--Recollim l'id de HistPuntTreb.
		SET @numReg=(SELECT max(idHistPuntTreb) FROM HistPuntTreb);

		--Inserim el registre en HistAssigUsu
		INSERT INTO HistAssigUsu
		(idHistPuntTreb,idUsu,perfil,esPpal,dataAssig)
		SELECT @numReg,idUsu,perfil,esPpal,dataAssig
		FROM inserted;
	END
	-- si és una modificació
	ELSE IF EXISTS (SELECT 1 FROM inserted) AND EXISTS (SELECT 1 FROM deleted)
	BEGIN
		
		SET @idPuntTreb=
		(SELECT inserted.idPuntTreb FROM inserted LEFT JOIN AssigUsu ON inserted.idPuntTreb=AssigUsu.idPuntTreb AND inserted.idUsu=AssigUsu.idUsu);
				
		-- Inserim el registre en HistPuntTreb		
		INSERT INTO HistPuntTreb 
		(idPuntTreb,dataAccio,accio,nom,dataAlta,estat,observacions,usb,nomDep,progNLlic,ubiPuntTreb,ordinador,
		reinstalat,gbRam,gbDisc,tDdur,sOpe,office,monitor,monitor2,teclat,ratoli,telf,mobil,tauleta,periferics,
		impressora,escaner,wol,altPer,altPer2,pulzPant)
		SELECT 
		p.idPuntTreb,getdate(),'M',p.nom,p.dataAlta,p.estat,p.observacions,p.usb,Departament.nom,p.progNLlic,p.ubiPuntTreb,p.ordinador,
		p.reinstalat,Ordinador.gbRam,Ordinador.gbDisc,Ordinador.tDdur,p.sOpe,p.office,p.monitor,p.monitor2,p.teclat,p.ratoli,p.telf,p.mobil,
		p.tauleta,ordinador.periferics,p.impressora,p.escaner,p.wol,p.altPer,p.altPer2,Referencia.pulzPant
		FROM PuntTreball as p
		INNER JOIN Departament ON idDepartament=p.ubiPuntTreb
		INNER JOIN Ordinador ON Ordinador.idRef=p.ordinador
		INNER JOIN Referencia ON Referencia.idRef=p.ordinador
		WHERE p.idPuntTreb=@idPuntTreb;

		--Recollim l'id de HistPuntTreb.
		SET @numReg=(SELECT max(idHistPuntTreb) FROM HistPuntTreb);

		--Inserim el registre en HistAssigUsu
		INSERT INTO HistAssigUsu
		(idHistPuntTreb,idUsu,perfil,esPpal,dataAssig)
		SELECT @numReg,idUsu,perfil,esPpal,dataAssig
		FROM inserted;
	END
	-- si és una baixa
	ELSE IF NOT EXISTS (SELECT 1 FROM inserted) AND EXISTS (SELECT 1 FROM deleted)
	BEGIN
		SET @idPuntTreb=
		(SELECT deleted.idPuntTreb FROM deleted LEFT JOIN AssigUsu ON deleted.idPuntTreb=AssigUsu.idPuntTreb AND deleted.idUsu=AssigUsu.idUsu);
				
		-- Inserim el registre en HistPuntTreb		
		INSERT INTO HistPuntTreb 
		(idPuntTreb,dataAccio,accio,nom,dataAlta,estat,observacions,usb,nomDep,progNLlic,ubiPuntTreb,ordinador,
		reinstalat,gbRam,gbDisc,tDdur,sOpe,office,monitor,monitor2,teclat,ratoli,telf,mobil,tauleta,periferics,
		impressora,escaner,wol,altPer,altPer2,pulzPant)
		SELECT 
		p.idPuntTreb,getdate(),'B',p.nom,p.dataAlta,p.estat,p.observacions,p.usb,Departament.nom,p.progNLlic,p.ubiPuntTreb,p.ordinador,
		p.reinstalat,Ordinador.gbRam,Ordinador.gbDisc,Ordinador.tDdur,p.sOpe,p.office,p.monitor,p.monitor2,p.teclat,p.ratoli,p.telf,p.mobil,
		p.tauleta,ordinador.periferics,p.impressora,p.escaner,p.wol,p.altPer,p.altPer2,Referencia.pulzPant
		FROM PuntTreball as p
		INNER JOIN Departament ON idDepartament=p.ubiPuntTreb
		INNER JOIN Ordinador ON Ordinador.idRef=p.ordinador
		INNER JOIN Referencia ON Referencia.idRef=p.ordinador
		WHERE p.idPuntTreb=@idPuntTreb;

		--Recollim l'id de HistPuntTreb.
		SET @numReg=(SELECT max(idHistPuntTreb) FROM HistPuntTreb);

		--Inserim el registre en HistAssigUsu
		INSERT INTO HistAssigUsu
		(idHistPuntTreb,idUsu,perfil,esPpal,dataAssig)
		SELECT @numReg,idUsu,perfil,esPpal,dataAssig
		FROM deleted;
	END
END
GO

-- ======================================================================
-- Description:	Al ABM una assignació de programari a punt de treball
--				s'afegeix un registre a HistPuntTreb i a HistAssigPro
-- =======================================================================

--Eliminen el disparador si ja existeix
IF OBJECT_ID('ins_histpuntreb_apro') IS NOT NULL
	DROP TRIGGER ins_histpuntreb_apro;
GO

CREATE TRIGGER ins_histpuntreb_apro
   ON  AssigProg
   AFTER INSERT, DELETE, UPDATE
AS 
BEGIN
	SET NOCOUNT ON;
	DECLARE @idPuntTreb varchar(9);
	DECLARE @numReg int;
	--Comprovem quina acció s'ha fet:
	-- Si és una alta 
	IF EXISTS (SELECT 1 FROM inserted LEFT JOIN AssigProg ON inserted.idPuntTreb=AssigProg.idPuntTreb AND inserted.idRef=AssigProg.idRef) 
	AND NOT EXISTS (SELECT 1 FROM deleted LEFT JOIN AssigProg ON deleted.idPuntTreb=AssigProg.idPuntTreb AND deleted.idRef=AssigProg.idRef)
	BEGIN
		-- Inserim el registre en HistPuntTreb

		SET @idPuntTreb=
		(SELECT inserted.idPuntTreb FROM inserted LEFT JOIN AssigProg ON inserted.idPuntTreb=AssigProg.idPuntTreb AND inserted.idRef=AssigProg.idRef);
				
		-- Inserim el registre en HistPuntTreb		
		INSERT INTO HistPuntTreb 
		(idPuntTreb,dataAccio,accio,nom,dataAlta,estat,observacions,usb,nomDep,progNLlic,ubiPuntTreb,ordinador,
		reinstalat,gbRam,gbDisc,tDdur,sOpe,office,monitor,monitor2,teclat,ratoli,telf,mobil,tauleta,periferics,
		impressora,escaner,wol,altPer,altPer2,pulzPant)
		SELECT 
		p.idPuntTreb,getdate(),'A',p.nom,p.dataAlta,p.estat,p.observacions,p.usb,Departament.nom,p.progNLlic,p.ubiPuntTreb,p.ordinador,
		p.reinstalat,Ordinador.gbRam,Ordinador.gbDisc,Ordinador.tDdur,p.sOpe,p.office,p.monitor,p.monitor2,p.teclat,p.ratoli,p.telf,p.mobil,
		p.tauleta,ordinador.periferics,p.impressora,p.escaner,p.wol,p.altPer,p.altPer2,Referencia.pulzPant
		FROM PuntTreball as p
		INNER JOIN Departament ON idDepartament=p.ubiPuntTreb
		INNER JOIN Ordinador ON Ordinador.idRef=p.ordinador
		INNER JOIN Referencia ON Referencia.idRef=p.ordinador
		WHERE p.idPuntTreb=@idPuntTreb;

		--Recollim l'id de HistPuntTreb.
		SET @numReg=(SELECT max(idHistPuntTreb) FROM HistPuntTreb);

		--Inserim el registre en HistAssigUsu
		INSERT INTO HistAssigProg
		(idHistPuntTreb,idRef,dataAssig)
		SELECT @numReg,idRef,dataAssig
		FROM inserted;
	END
	-- si és una modificació
	ELSE IF EXISTS (SELECT 1 FROM inserted LEFT JOIN AssigProg ON inserted.idPuntTreb=AssigProg.idPuntTreb AND inserted.idRef=AssigProg.idRef) 
	AND EXISTS (SELECT 1 FROM deleted LEFT JOIN AssigProg ON deleted.idPuntTreb=AssigProg.idPuntTreb AND deleted.idRef=AssigProg.idRef)
	BEGIN
		SET @idPuntTreb=
		(SELECT inserted.idPuntTreb FROM inserted LEFT JOIN AssigProg ON inserted.idPuntTreb=AssigProg.idPuntTreb AND inserted.idRef=AssigProg.idRef);
				
		-- Inserim el registre en HistPuntTreb		
		INSERT INTO HistPuntTreb 
		(idPuntTreb,dataAccio,accio,nom,dataAlta,estat,observacions,usb,nomDep,progNLlic,ubiPuntTreb,ordinador,
		reinstalat,gbRam,gbDisc,tDdur,sOpe,office,monitor,monitor2,teclat,ratoli,telf,mobil,tauleta,periferics,
		impressora,escaner,wol,altPer,altPer2,pulzPant)
		SELECT 
		p.idPuntTreb,getdate(),'M',p.nom,p.dataAlta,p.estat,p.observacions,p.usb,Departament.nom,p.progNLlic,p.ubiPuntTreb,p.ordinador,
		p.reinstalat,Ordinador.gbRam,Ordinador.gbDisc,Ordinador.tDdur,p.sOpe,p.office,p.monitor,p.monitor2,p.teclat,p.ratoli,p.telf,p.mobil,
		p.tauleta,ordinador.periferics,p.impressora,p.escaner,p.wol,p.altPer,p.altPer2,Referencia.pulzPant
		FROM PuntTreball as p
		INNER JOIN Departament ON idDepartament=p.ubiPuntTreb
		INNER JOIN Ordinador ON Ordinador.idRef=p.ordinador
		INNER JOIN Referencia ON Referencia.idRef=p.ordinador
		WHERE p.idPuntTreb=@idPuntTreb;

		--Recollim l'id de HistPuntTreb.
		SET @numReg=(SELECT max(idHistPuntTreb) FROM HistPuntTreb);

		--Inserim el registre en HistAssigUsu
		INSERT INTO HistAssigProg
		(idHistPuntTreb,idRef,dataAssig)
		SELECT @numReg,idRef,dataAssig
		FROM inserted;
	END
	-- si és una baixa
	ELSE IF NOT EXISTS (SELECT 1 FROM inserted LEFT JOIN AssigProg ON inserted.idPuntTreb=AssigProg.idPuntTreb AND inserted.idRef=AssigProg.idRef) 
	AND EXISTS (SELECT 1 FROM deleted LEFT JOIN AssigProg ON deleted.idPuntTreb=AssigProg.idPuntTreb AND deleted.idRef=AssigProg.idRef)
	BEGIN
		SET @idPuntTreb=
		(SELECT deleted.idPuntTreb FROM deleted LEFT JOIN AssigProg ON deleted.idPuntTreb=AssigProg.idPuntTreb AND deleted.idRef=AssigProg.idRef);
				
		-- Inserim el registre en HistPuntTreb		
		INSERT INTO HistPuntTreb 
		(idPuntTreb,dataAccio,accio,nom,dataAlta,estat,observacions,usb,nomDep,progNLlic,ubiPuntTreb,ordinador,
		reinstalat,gbRam,gbDisc,tDdur,sOpe,office,monitor,monitor2,teclat,ratoli,telf,mobil,tauleta,periferics,
		impressora,escaner,wol,altPer,altPer2,pulzPant)
		SELECT 
		p.idPuntTreb,getdate(),'B',p.nom,p.dataAlta,p.estat,p.observacions,p.usb,Departament.nom,p.progNLlic,p.ubiPuntTreb,p.ordinador,
		p.reinstalat,Ordinador.gbRam,Ordinador.gbDisc,Ordinador.tDdur,p.sOpe,p.office,p.monitor,p.monitor2,p.teclat,p.ratoli,p.telf,p.mobil,
		p.tauleta,ordinador.periferics,p.impressora,p.escaner,p.wol,p.altPer,p.altPer2,Referencia.pulzPant
		FROM PuntTreball as p
		INNER JOIN Departament ON idDepartament=p.ubiPuntTreb
		INNER JOIN Ordinador ON Ordinador.idRef=p.ordinador
		INNER JOIN Referencia ON Referencia.idRef=p.ordinador
		WHERE p.idPuntTreb=@idPuntTreb;

		--Recollim l'id de HistPuntTreb.
		SET @numReg=(SELECT max(idHistPuntTreb) FROM HistPuntTreb);

		--Inserim el registre en HistAssigUsu
		INSERT INTO HistAssigProg
		(idHistPuntTreb,idRef,dataAssig)
		SELECT @numReg,idRef,dataAssig
		FROM deleted;
	END
END
GO
