IF OBJECT_ID('Biztv.biztvscc_publicarOrdenes') IS NOT NULL
BEGIN
    DROP PROCEDURE Biztv.biztvscc_publicarOrdenes
    IF OBJECT_ID('Biztv.biztvscc_publicarOrdenes') IS NOT NULL
        PRINT '<<< FAILED DROPPING PROCEDURE Biztv.biztvscc_publicarOrdenes >>>'
    ELSE
        PRINT '<<< DROPPED PROCEDURE Biztv.biztvscc_publicarOrdenes >>>'
END
go
SET ANSI_NULLS OFF
go
SET QUOTED_IDENTIFIER OFF
go
CREATE Procedure biztvscc_publicarOrdenes
@strXMLDatos varchar(8000)	
As

--Declare @strXMLDatos varchar(8000)	
--set @strXMLDatos = '<?xml version=''1.0'' encoding=''iso-8859-1''?><ORDEN><AGNID>5</AGNID><ORD_ESTADO>1</ORD_ESTADO><ORD_NRO>84161</ORD_NRO><CLT_RUT>1-1</CLT_RUT><AGNM_RUT>1-5</AGNM_RUT><ORD_AGNM_USR>IPGLA\macarena.gonzalez</ORD_AGNM_USR><ORD_AGNM_RESP>IPGLA\macarena.gonzalez</ORD_AGNM_RESP><AGNC_RUT>2039843-9</AGNC_RUT><ORD_FEC>2008/9/22</ORD_FEC><ORD_CLIENTE>Banco Nova</ORD_CLIENTE><ORD_MEDIO>Television</ORD_MEDIO><ORD_CANAL>7</ORD_CANAL><ORD_EJEC_CANAL>Ejecutivo Canal</ORD_EJEC_CANAL><ORD_PARR_ZONA></ORD_PARR_ZONA><ORD_SOPORTE>Ninguno</ORD_SOPORTE><ORD_OBSERVACIONES>Hola</ORD_OBSERVACIONES><ORD_CONTRATO>0</ORD_CONTRATO><ORD_PERIODO>200807</ORD_PERIODO><ORD_PRESUPUESTO>13655.39000000000000000</ORD_PRESUPUESTO><ORD_PRODUCTO>Crédito Consumo                                   </ORD_PRODUCTO><ORD_CAMPANA>1</ORD_CAMPANA><ORD_TIPO_PUBLICIDAD>1</ORD_TIPO_PUBLICIDAD><ORD_GRUPO_OBJETIVO></ORD_GRUPO_OBJETIVO><COMPANIA>8</COMPANIA><CONTROL_ESTADO>1</CONTROL_ESTADO><ORD_NRO_AR></ORD_NRO_AR><MOTIVO_AR></MOTIVO_AR><EXPLICACION></EXPLICACION></ORDEN>'


set nocount on
Declare @newid_orden as int
Declare @id_orden_ar as int
Declare @cantDetalles_orden as int
Declare @idoc int
Declare @Error_existe int
Declare @doc varchar(8000)
Declare @msgerror varchar(200)

Declare @Compania as int
Declare @ORD_NRO VARCHAR(20)
Declare @ORD_NRO_AR VARCHAR(20)
Declare @MOTIVO_AR VARCHAR(10) 
Declare @EXPLICACION VARCHAR(300)
Declare @AGNC_RUT   VARCHAR(11)
Declare @AGNM_RUT  VARCHAR(11)
Declare @ordendelete int
declare @AGM_COD_MEGATIME varchar(20)
declare @rut	 varchar(20)
declare @ordid as int

SET @doc = @strXMLDatos

set @Error_existe = 0
set @msgerror = ''
--Create an internal representation of the XML document.
exec sp_xml_preparedocument @idoc OUTPUT, @doc
-- SELECT statement using OPENXML rowset provider

--- ANULA O REEMPLAZA
SELECT 
@Compania=COMPANIA,
@ORD_NRO =ORD_NRO,
@ORD_NRO_AR=ORD_NRO_AR,
@MOTIVO_AR=MOTIVO_AR, 
@EXPLICACION=ORD_OBSERVACIONES,
@AGNC_RUT=AGNC_RUT ,
@AGNM_RUT=AGNM_RUT  
FROM  OPENXML (@idoc, '//ORDEN',2)
WITH	
(
COMPANIA int,
ORD_NRO VARCHAR(20),
ORD_NRO_AR VARCHAR(20),
MOTIVO_AR VARCHAR(10), 
ORD_OBSERVACIONES VARCHAR(300),
AGNC_RUT   VARCHAR(11),
AGNM_RUT  VARCHAR(11)
)


BEGIN TRAN 
     
   
   SELECT 
   	   @ordid=ORDID 
   from 
       ORDEN_DE_PUBLICIDAD
   WHERE 
       NOT ORD_ESTADO IN (1,5) 
   AND ORD_NRO = @ORD_NRO
      
   IF isnull(@ordid,0) > 0 
      begin	     
		SET @msgerror = 'Ha ecorrido un error. La orden ya se Encuentra en proceso'		
		SET @Error_existe=1
		ROLLBACK TRAN
		goto tratar_error 
	  end
	
	
   SELECT 
   	   @ordid=ORDID 
   from 
       ORDEN_DE_PUBLICIDAD
   WHERE 
       ORD_ESTADO IN (1,5) 
   AND ORD_NRO = @ORD_NRO      
      
   IF isnull(@ordid,0) > 0 
	  begin	     

		--- Elimina orden de la tabla anula y reemplaza

		SELECT @ordendelete=ORDID from ORDEN_DE_PUBLICIDAD
      		WHERE ORD_NRO = @ORD_NRO

		Delete From ANULA_REEMPLAZA
		where ORDID = @ordendelete

		Delete From detalle_orden
		where ORDID = @ordendelete

		Delete From ORDEN_DE_PUBLICIDAD
		where  ORD_NRO = @ORD_NRO
 	END 


--- Validar si existe orden agencia creativa
	


      SELECT @AGM_COD_MEGATIME=AGM_COD_MEGATIME from AGENCIA_CREATIVA
      WHERE AGN_RUT = @AGNC_RUT
	
      if isnull(@AGM_COD_MEGATIME,'') = '' 
	begin		
		SET @msgerror = 'Ha ecorrido un error. Agencia Creativa no Existe'		
		SET @Error_existe=1
		ROLLBACK TRAN
		goto tratar_error 
	end
	
--- Validar si existe orden agencia de medios
  	select @rut=rut from companias
       	WHERE  rut = @AGNM_RUT

        IF isnull(@rut,'') = '' 
	begin		
		SET @msgerror = 'Ha ecorrido un error. Agencia medios no Existe'		
		SET @Error_existe=1
		ROLLBACK TRAN
		goto tratar_error 
	end
	

INSERT INTO ORDEN_DE_PUBLICIDAD 
SELECT 
AGNID,
'1',
ORD_NRO,
CLT_RUT,
AGNM_RUT,
ORD_AGNM_USR,
ORD_AGNM_RESP,
AGNC_RUT,
ORD_FEC,
ORD_CLIENTE,
ORD_MEDIO,
ORD_CANAL,
ORD_EJEC_CANAL,
ORD_PARR_ZONA,
ORD_SOPORTE,
ORD_OBSERVACIONES,
ORD_CONTRATO,
ORD_PERIODO,
ORD_PRESUPUESTO,
ORD_PRODUCTO,
ORD_CAMPANA,
ORD_TIPO_PUBLICIDAD,
ORD_GRUPO_OBJETIVO,
COMPANIA,
'1' 
FROM  OPENXML (@idoc, '//ORDEN',2)
WITH	
(
AGNID  int,
ORD_ESTADO  varchar(10),
ORD_NRO  varchar(20) ,
CLT_RUT  varchar(11),
AGNM_RUT  varchar(11),
ORD_AGNM_USR  varchar(30),
ORD_AGNM_RESP  varchar(30),
AGNC_RUT  varchar(11),
ORD_FEC  datetime,
ORD_CLIENTE  varchar(100),
ORD_MEDIO  varchar(100),
ORD_CANAL  varchar(3),
ORD_EJEC_CANAL  varchar(30),
ORD_PARR_ZONA  varchar(30),
ORD_SOPORTE  varchar(100),
ORD_OBSERVACIONES  varchar(150),
ORD_CONTRATO  varchar(50),
ORD_PERIODO  varchar(20),
ORD_PRESUPUESTO  varchar(50),
ORD_PRODUCTO  varchar(100),
ORD_CAMPANA  varchar(100),
ORD_TIPO_PUBLICIDAD  numeric(9),
ORD_GRUPO_OBJETIVO  char(5),
COMPANIA  numeric(5),
CONTROL_ESTADO  varchar(10)
)

if @@ERROR<>0 
	begin		
		SET @msgerror = 'Ha ecorrido un error. INSERT INTO ORDEN_DE_PUBLICIDAD '		
		SET @Error_existe=1
		ROLLBACK TRAN
		goto tratar_error 
	end
	set @newid_orden = @@identity

------------ validar anula y remplaza
IF ISNULL(@ORD_NRO_AR,'') <> ''
BEGIN
		select @id_orden_ar=ORDID FROM ORDEN_DE_PUBLICIDAD
		where ORD_NRO = @ORD_NRO_AR and compania = @Compania
       
	IF ISNULL(@id_orden_ar,0) <> 0
	BEGIN
		INSERT INTO ANULA_REEMPLAZA (ANL_RPLID,ANL_RPL_MOTIVO,ORDID,ANL_RPL_EXPLICACION)
		VALUES ( @id_orden_ar ,@MOTIVO_AR, @newid_orden  ,@EXPLICACION )
	END 
	if @@ERROR<>0 
	begin		
		SET @msgerror = 'Ha ecorrido un error. INSERT INTO ANULA_REEMPLAZA '		
		SET @Error_existe=1
		ROLLBACK TRAN
		goto tratar_error 
	end
END 

Exec sp_xml_removedocument @idoc
COMMIT TRAN 
goto salir

tratar_error:
If @Error_existe<>0 
BEGIN  	
	--todo volverá a estar como si nada hubiera ocurrido
	SET @newid_orden=0
	goto salir
END

salir:
SELECT @newid_orden AS IDDB,@msgerror as mensaje,@Error_existe as status
go
SET ANSI_NULLS OFF
go
SET QUOTED_IDENTIFIER OFF
go
IF OBJECT_ID('Biztv.biztvscc_publicarOrdenes') IS NOT NULL
    PRINT '<<< CREATED PROCEDURE Biztv.biztvscc_publicarOrdenes >>>'
ELSE
    PRINT '<<< FAILED CREATING PROCEDURE Biztv.biztvscc_publicarOrdenes >>>'
go
