CREATE PROCEDURE dbo.CP_Clientes_Fotos_Export
@pFecha_Desde	DATETIME,
@pFecha_Hasta	DATETIME,
@pTipo_Persona	CHAR(1),
@pBDServidor	VARCHAR(255),
@pBDUsuario		VARCHAR(255),
@pBDPassword	VARCHAR(255),
@pBDNombre		VARCHAR(255)
AS
SET NOCOUNT ON
/*Declaración de Variables*/
DECLARE @Comando					VARCHAR(2048)
DECLARE @FechaAhora					DATETIME
DECLARE @FechaVC					VARCHAR(20)
DECLARE @Cant_Registros				INT
DECLARE @Id_Cliente					INT
DECLARE @Id_Cliente_Externo			VARCHAR(14)
DECLARE @Fecha_Alta					DATETIME
DECLARE @Doc_Nro					BIGINT
DECLARE @Fecha_Nac					DATETIME
DECLARE @Razon_Social				VARCHAR(100)
DECLARE @Categoria					VARCHAR(50)
DECLARE @ArchFoto					VARCHAR(255)
DECLARE @Registro					VARCHAR(500)
DECLARE @Carpeta_Destino			VARCHAR(255)
DECLARE @Carpeta_Destino_Completo	VARCHAR(255)
DECLARE @Carpeta_Instalacion		VARCHAR(255)
DECLARE @Foto						VARBINARY(MAX)
DECLARE @Fecha_Foto					DATETIME
DECLARE @ObjectToken				INT
DECLARE @ResultadoEjecucion			INT
DECLARE @ErrorVar					INT
/*FIN Declaración de Variables*/

PRINT 'Procedimiento: CP_Clientes_Fotos_Export'

SET @FechaAhora = GETDATE()
SET @FechaVC = (SELECT CAST(DATEPART(YY,@FechaAhora) AS CHAR(4)) + 
						RIGHT('00' + CAST(DATEPART(mm, @FechaAhora) AS VARCHAR),2) + 
						RIGHT('00' + CAST(DATEPART(dd, @FechaAhora) AS VARCHAR),2) +
						'_' +
						RIGHT('00' + CAST(DATEPART(HH, @FechaAhora) AS VARCHAR),2) + 
						RIGHT('00' + CAST(DATEPART(MINUTE, @FechaAhora) AS VARCHAR),2) +
						RIGHT('00' + CAST(DATEPART(ss, @FechaAhora) AS VARCHAR),2)) 

PRINT 'Fecha Desde: ' + CONVERT(VARCHAR(10), @pFecha_Desde, 103) + ' Fecha Hasta: ' + CONVERT(VARCHAR(10), @pFecha_Hasta, 103)

SET @Carpeta_Destino = dbo.CF_xParam('Carpeta_Export') + '\' + @FechaVC

SET @Comando = 'MD '+ @Carpeta_Destino + ''
EXEC @ResultadoEjecucion = xp_cmdshell @Comando, NO_OUTPUT 

PRINT 'Genera el archivo Personas.csv en ' + @Carpeta_Destino 
PRINT ' '


IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'dbo.ArchivoExportCarnet') AND type IN (N'U'))
	DROP TABLE dbo.ArchivoExportCarnet;

CREATE TABLE ArchivoExportCarnet(Linea VARCHAR(2000), orden INT IDENTITY(1,1))

SET @Registro = 'Id_Cliente' + ';' + 'Id_Cliente_Externo' + ';' + 'Fecha_Alta' + ';' + 'Doc_Nro' +';' + 'Fecha_Nac'  +';' + 'Apellido_Nombre' + ';' + 'Categoria' + ';' + 'Foto' + ';' + 'Fecha_Foto'

INSERT INTO ArchivoExportCarnet VALUES(@Registro)
PRINT @Registro

SET @Cant_Registros = 0

DECLARE curExpArchCarnet CURSOR FOR 
SELECT CL.Id_Cliente, RTRIM(LTRIM(ISNULL(CL.Id_Cliente_Externo, ''))), Fecha_Alta, ISNULL(Doc_Nro, 0), Fecha_Nac, RTRIM(LTRIM(CL.Razon_Social)), RTRIM(LTRIM(CT.Descripcion)), CONVERT(VARBINARY(MAX), CF.Foto, 1), ISNULL(CF.Fecha, '19000101')
FROM Clientes CL, Clientes_Tipos CT, Clientes_Fotos CF
WHERE
CL.Id_Tipo_Cli = CT.Id_Tipo_Cli
AND CL.Id_Cliente = CF.Id_Cliente
AND CT.Id_Tipo_Cli <> 0
AND CL.Tipo_Persona = @pTipo_Persona
AND CF.Fecha >= @pFecha_Desde
AND CF.Fecha < (@pFecha_Hasta + 1)
ORDER BY CL.Id_Cliente

OPEN curExpArchCarnet
FETCH NEXT FROM curExpArchCarnet INTO @Id_Cliente, @Id_Cliente_Externo, @Fecha_Alta, @Doc_Nro, @Fecha_Nac, @Razon_Social, @Categoria, @Foto, @Fecha_Foto
WHILE @@FETCH_STATUS = 0
BEGIN

	SET @Cant_Registros = @Cant_Registros + 1

	SET @ArchFoto = CONVERT(VARCHAR(10), @Id_Cliente) +'.jpg'
	SET @Carpeta_Destino_Completo = @Carpeta_Destino + '\' + @ArchFoto
	--SET @Foto = (SELECT CONVERT(VARBINARY(MAX), Foto, 1) FROM Clientes_Fotos WHERE Id_Cliente = @Id_Cliente)

	/*Genera un registro nuevo a guardar en el CSV*/
	SET @Registro = CONVERT(VARCHAR(10), @Id_Cliente) + ';' + @Id_Cliente_Externo + ';' + CONVERT(VARCHAR(10), @Fecha_Alta, 103) + ';' + CONVERT(VARCHAR(20), @Doc_Nro) + ';' + CONVERT(VARCHAR(10), @Fecha_Nac, 103) + ';' + @Razon_Social + ';' + @Categoria + ';' + @ArchFoto + ';' + CONVERT(VARCHAR(10), @Fecha_Foto, 103)

	INSERT INTO ArchivoExportCarnet VALUES(@Registro)
	PRINT @Registro		
	
	/*Genera Archivo Jpg a partir de la Foto guardada en la Base*/
	EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT;
	EXEC sp_OASetProperty @ObjectToken, 'Type', 1;
	EXEC sp_OAMethod @ObjectToken, 'Open';
	EXEC sp_OAMethod @ObjectToken, 'Write', NULL, @Foto;
	EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, @Carpeta_Destino_Completo, 2;
	EXEC sp_OAMethod @ObjectToken, 'Close';
	EXEC sp_OADestroy @ObjectToken;

	FETCH NEXT FROM curExpArchCarnet INTO @Id_Cliente, @Id_Cliente_Externo, @Fecha_Alta, @Doc_Nro, @Fecha_Nac, @Razon_Social, @Categoria, @Foto, @Fecha_Foto
END 
CLOSE curExpArchCarnet
DEALLOCATE curExpArchCarnet

/*Genera el Archivo CSV*/
SET @Comando = 'bcp "SELECT Linea FROM ' + @pBDNombre +'.dbo.ArchivoExportCarnet ORDER BY Orden" QUERYOUT "' + @Carpeta_Destino + '\Personas.csv'+'" -w -T -S ' + @pBDServidor + ' -U ' + @pBDUsuario +' -P ' + @pBDPassword + ''
EXEC @ResultadoEjecucion = xp_cmdshell @Comando, NO_OUTPUT 
SELECT @ErrorVar = @@ERROR

SET @Carpeta_Instalacion = dbo.CF_xParam('Carpeta_Instal')

/*Comprime las fotos y el archivo CSV*/
SET @Comando = ''+@Carpeta_Instalacion +'\zip.exe -j ' + @Carpeta_Destino + '\Personas.zip ' + @Carpeta_Destino + '\*'
EXEC @ResultadoEjecucion = xp_cmdshell @Comando, NO_OUTPUT 
SELECT @ErrorVar = @@ERROR

SELECT	 @ErrorVar			AS ErrorNumber 
		,0					AS ErrorSeverity  
		,0					AS ErrorState 
		,0					AS ErrorProcedure  
		,0					AS ErrorLine		
		,''					AS ErrorMessage
		,@Cant_Registros    AS Cant_Registros

PRINT 'FIN Procedimiento: CP_Clientes_Fotos_Export'