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

USE dbInventari;
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


-- =============================================
-- Description:	<Comprova el format de l'etiqueta>
-- Paràmetres d'entrada: etiqueta
-- Paràmetre de sortida: 0 si és correcte, 1 si no
-- =============================================

--Eliminen la funció si ja existeix
IF OBJECT_ID('valida_etiqueta') IS NOT NULL
	DROP FUNCTION valida_etiqueta;
GO

--Creem una funció que verifica si l'entrada té el format correcte
CREATE FUNCTION valida_etiqueta (@etiqueta varchar(12)) 
RETURNS bit -- Indiquem el tipus de retorn
AS
BEGIN
 DECLARE @resultat bit=0;
 
 --Comprovem el format de l'etiqueta
	IF (len(@etiqueta)<8)
		SET @resultat=1;
	ELSE
		BEGIN
		-- Retorn ISNUMERIC 1=true, 0=false
		DECLARE @prefix int=(SELECT ISNUMERIC(SUBSTRING(@etiqueta,1,2)));
		DECLARE @codi int=(SELECT ISNUMERIC(SUBSTRING(@etiqueta,3,3))); 
		DECLARE @any int=(SELECT ISNUMERIC(SUBSTRING(@etiqueta,7,2)));
		IF @prefix=1 OR @codi=0 OR @any=0
			SET @resultat=1;
	END

 RETURN (@resultat) 
END
GO



-- =============================================
-- Description:	<Retorna el següent número de referencia segons el format d'etiqueta de la familia>
-- Paràmetres d'entrada: familia
-- Paràmetre de sortida: etiqueta
-- =============================================

--Eliminen la funció si ja existeix
IF OBJECT_ID('retorna_etiqueta') IS NOT NULL
	DROP FUNCTION retorna_etiqueta;
GO

--Creem una funció que retorna el següent número de referencia segons el format de l'etiqueta de la familia
CREATE FUNCTION retorna_etiqueta (@familia varchar(15)) 
RETURNS varchar(12) -- Indiquem el tipus de retorn
AS
BEGIN
 DECLARE @eti varchar(12)='';
 
 --Busquem el format de l'etiqueta de la familia;
 SET @eti=(SELECT etiqueta FROM FamReferencia WHERE idFamRef=@familia);
 
 --Recollim el número i l'augmentem en 1 unitat.
	IF (len(@eti)<8)
		SET @eti='';
	ELSE
	BEGIN
		-- Retorn ISNUMERIC 1=true, 0=false
		IF (SELECT ISNUMERIC(SUBSTRING(@eti,3,3)))=1
		 BEGIN
		 DECLARE @num int =SUBSTRING(@eti,3,3);
		 SET @num=@num+1;
		 SET @eti=SUBSTRING(@eti,1,2)+right('000'+ltrim(rtrim(str(@num,3,0))),3)+'/'+SUBSTRING(@eti,7,2);
		 END
		ELSE
		 SET @eti='';
	END
 RETURN (@eti) 
END
GO

