DELIMITER //
CREATE PROCEDURE GetClienteBtcPagination (
	nroPage int ,
	numberOfEntries int ,
	textSearch varchar(250)
)
BEGIN 
	declare cantidadTotal int;
    declare inicial int;
    set numberOfEntries =  case when numberOfEntries <= 0 then 0 else numberOfEntries end;
	set cantidadTotal = (select distinct count(codigoCliente) from Btc2 where (  nombre like CONCAT('%', textSearch, '%') ) );   
	set inicial = numberOfEntries * (nroPage -1 );
	
	select 
	distinct codigoCliente,nombre
	from Btc2
	where(  nombre like CONCAT('%', textSearch, '%') ) ORDER BY nombre desc
	LIMIT inicial, numberOfEntries;
END //
DELIMITER ;

------------------------------------------------------------------------------------------------------------------------------------------------------------

DELIMITER //
CREATE PROCEDURE FindBtcByCliente (
	codigoCliente varchar(100)
)
BEGIN 
	select * from Btc2 where codigoCliente = codigoCliente;
END //
DELIMITER ;

------------------------------------------------------------------------------------------------------------------------------------------------------------

DELIMITER //
CREATE PROCEDURE findByBtcByNumeroContrato (
	numeroContrato VARCHAR(500),
    idCategoriaPerfil VARCHAR(64),
    idUsuario int,
    flag_notest bit
)
BEGIN 
	declare Perfil  VARCHAR(64);
    
    IF idCategoriaPerfil='88e453f3-f9db-4b78-b329-b5095d2b6933' THEN
		SET Perfil = '8f8b8a2f-1ab4-43f4-b16b-daec8119c6e5';
	ELSE
		SET Perfil = idCategoriaPerfil;
	END IF;
    
    IF flag_notest = 0 THEN
		select  *,
        a.totalRecurrente as puntosRecurrente
        from Btc2 a 
			left join CategoriaCliente b on b.descripcion = a.normativaContrato 
            left join DescuentoDetalle c on c.idCategoriaCliente = b.id and c.idCategoriaPerfil = Perfil
		where a.numeroContrato = numeroContrato;
	else
		select  * ,
         a.totalRecurrente as puntosRecurrente
        from Btc2 a 
			left join CategoriaCliente b on b.descripcion = a.normativaContrato 
            left join DescuentoDetalle c on c.idCategoriaCliente = b.id and c.idCategoriaPerfil = 'C20BF3AC-4536-41D6-B6BB-88076061B69B'
		where a.numeroContrato = numeroContrato;
	END IF;
    
	/*insert into ClienteBuscado values (default,@numeroContrato,@idUsuario,dbo.GetDatePE(),1);*/
END //
DELIMITER ;

------------------------------------------------------------------------------------------------------------------------------------------------------------

DELIMITER //
CREATE PROCEDURE GetSelectProductosPagination2 (
	nroPage int ,
	numberOfEntries int ,
	textSearch varchar(250),
	idTipoModalidadProducto VARCHAR(64),
	tipoPanel varchar(200),
	codigoContrato varchar(200)
)
BEGIN 
	declare cantidadTotal int;
    declare inicial int;
    set numberOfEntries =  case when numberOfEntries <= 0 then 0 else numberOfEntries end;
	set cantidadTotal = (select COUNT(*) from ProductoDetalle a inner join Producto b on b.id = a.idProducto 
						 where a.estado = 1 and b.estado = 1 and a.idTipoModalidadProducto = idTipoModalidadProducto  and
						 (    b.descripcionOracle like CONCAT('%', textSearch, '%') or b.codigoOracle like CONCAT('%', textSearch, '%' )
								and ( IFNULL(tipoPanel,'') = ''	or ( b.tipoPanel like CONCAT('%', tipoPanel, '%') )) 
						 ));
	set inicial = numberOfEntries * (nroPage -1 );
                         
	select 
	a.*,b.codigoOracle,codigoSiebel,b.descripcionOracle,
    concat(b.descripcionOracle ,' - ', b.codigoOracle) as 'descriptionCodigo',
	CONVERT((if(b.esRecurrenteHogarNegocio = 1,
	case (select codigoActividadInmueble from btc2 b2 where b2.numeroContrato = codigoContrato limit 1)
		when 'NEGOCIO'  then b.RecurrenteNegocio
		when 'VEHÍCULO COMERCIAL'  then b.RecurrenteHogar
		when 'VIVIENDA'  then b.RecurrenteHogar
		when 'VEHÍCULO PARTICULAR'  then b.RecurrenteHogar
		else b.recurrenteSubtotal 
		end
	,b.recurrenteSubtotal) / 1.18), DECIMAL(10,2))  as recurrenteSubtotal,
	if(b.esRecurrenteHogarNegocio = 1,
	case (select codigoActividadInmueble from btc2 b2 where b2.numeroContrato = codigoContrato LIMIT 1)
		when 'NEGOCIO'  then b.RecurrenteNegocio
		when 'VEHÍCULO COMERCIAL'  then b.RecurrenteHogar
		when 'VIVIENDA'  then b.RecurrenteHogar
		when 'VEHÍCULO PARTICULAR'  then b.RecurrenteHogar
		else b.recurrenteSubtotal 
		end
	,b.recurrenteTotal) as recurrentetotal,
	idTipoModalidadProducto,b.flagProductoEspecial
	from ProductoDetalle a 
		inner join Producto b on b.id = a.idProducto 
	where a.estado = 1 and b.estado = 1 and a.idTipoModalidadProducto = idTipoModalidadProducto	
	and ( iFnull(tipoPanel,'') = ''	or b.tipoPanel like CONCAT('%', tipoPanel, '%'))  and ( b.descripcionOracle like CONCAT('%', textSearch, '%') or b.codigoOracle like CONCAT('%', textSearch, '%') )
    ORDER BY descripcionTipoProducto asc
    LIMIT inicial, numberOfEntries;
END //
DELIMITER ;

call GetSelectProductosPagination2 (1,30,"Siste",'B8398391-3E15-41B6-855A-17DE2971299E','NEO','552304')
------------------------------------------------------------------------------------------------------------------------------------------------------------

DELIMITER //
CREATE PROCEDURE CargaInicialVenta (
    idCategoriaPerfil VARCHAR(64)
)
BEGIN 
	declare Perfil  VARCHAR(64);
    
    select * from TipoModalidadProducto where estado=1;
END //
DELIMITER ;


------------------------------------------------------------------------------------------------------------------------------------------------------------


DELIMITER //
CREATE PROCEDURE sp_get_producto_por_id(_id varchar(64))
BEGIN
  SELECT * FROM producto WHERE id = _id;
END //
DELIMITER ;


------------------------------------------------------------------------------------------------------------------------------------------------------------


DELIMITER //
CREATE PROCEDURE GetInfoPdfTecnico(id varchar(64))
BEGIN
	select 
		v.fechaCreacion,
        v.costoInstalacion,
        v.numeroContizacion,
        IFNULL(b.telfDireccionInstalacion,'') as correo,
        s.nombres,
        v.numeroContrato,
        nombreCliente,
        codigoPostalDirInstalacion,
        localidadDirInstalacion,
        observacion,
		v.descripcionActividad,
        v.CodigoActividad,
        v.afiliacionDebito,
        v.renovacionContrato,
        direccionInstalacion,
        v.totalRecurrente,
        v.porcentajeDescuentoRecurrenteAdicional,
        IFNULL(v.totalVentaNbo2_7000M,0) as totalVentaNbo2_7000M
	from Venta v 
    inner join btc2 b on b.numeroContrato=v.numeroContrato 
    inner join Usuario u on u.idUsuario=v.usuarioCreador  
    inner join Socio s on s.id=u.idSocio
	where v.id=id;
END //
DELIMITER ;


------------------------------------------------------------------------------------------------------------------------------------------------------------


DELIMITER //
CREATE PROCEDURE GetInfoPdfTecnicoDetalle(id varchar(64))
BEGIN
	select *
    from Venta v 
    left join VentaDetalle vd on v.id=vd.idVenta
	left join Producto p on p.codigoOracle = vd.idProductoDetalle  
	where v.id=id and p.estado=1;
END //
DELIMITER ;


------------------------------------------------------------------------------------------------------------------------------------------------------------


DELIMITER $$
CREATE PROCEDURE `InsertVenta`(
    observacion varchar(500),
    ultimoVenta varchar(64),
    numeroContrato varchar(100),
    idCliente varchar(50),
    nombreCliente varchar(500),
    estadoVenta varchar(200),
    usuarioCreador int,
    renovacionContrato varchar(20),
    observacionRechazo varchar(1000),
    upgrade bit,
    afiliacionDebito bit,
    descripcionActividad varchar(200),
    codigoActividad varchar(200),
    porcentajeDescuentoRecurrenteAdicional decimal(10,2),
    totalRecurrente decimal(10,2),
    costoInstalacion decimal(8,2),
    totalVentaNbo2_7000M decimal(8,2)
)
BEGIN
    DECLARE GUIDID VARCHAR(64);
    DECLARE NUMCOTI INT;

    SET GUIDID = (SELECT UUID());
    SET NUMCOTI = (SELECT IFNULL(MAX(numeroContizacion), 0) + 1 FROM Venta);

    INSERT INTO Venta(
        id,
        numeroContrato,
        idCliente,
        estadoVenta,
        usuarioCreador,
        fechaCreacion,
        estado,
        observacion,
        ultimoVenta,
        nombreCliente,
        renovacionContrato,
        observacionRechazo,
        upgrade,
        afiliacionDebito,
        codigoActividad,
        descripcionActividad,
        porcentajeDescuentoRecurrenteAdicional,
        totalRecurrente,
        numeroContizacion,
        costoInstalacion,
        totalVentaNbo2_7000M) 
    VALUES (
        GUIDID,
        numeroContrato,
        idCliente,
        estadoVenta,
        usuarioCreador,
        NOW(),
        1,
        observacion,
        ultimoVenta,
        nombreCliente,
        renovacionContrato,
        observacionRechazo,
        upgrade,
        afiliacionDebito,
        codigoActividad,
        descripcionActividad,
        porcentajeDescuentoRecurrenteAdicional,
        totalRecurrente,
        NUMCOTI,
        costoInstalacion,
        totalVentaNbo2_7000M);

    SELECT GUIDID;
END$$
DELIMITER ;


------------------------------------------------------------------------------------------------------------------------------------------------------------


DELIMITER //
CREATE PROCEDURE InsertVentaDetalle(
	idVenta varchar(64),
    cantidad int,
    idProductoDetalle varchar(200),
    tipoActividad varchar(200),
	subTotal decimal(8,2),
    igv decimal(8,2),
	precioVenta decimal(8,2),
    usuarioCreador int,
    descuentoProducto decimal(8,2),
	descuentoRecurrente decimal(8,2),
	comision decimal(8,2),
    idTipoModalidadProducto varchar(64),
    precioUnitario decimal(8,2),
    descuentoAdicional decimal(8,2),
    recurrenteSubTotal decimal(8,2),
    precioVentaRecurrente decimal(8,2)
)
BEGIN
	DECLARE GUIDID VARCHAR(64);
    
	SET GUIDID = (SELECT UUID());
    
	INSERT INTO VentaDetalle(
		id,
        idVenta,
        cantidad,
        idProductoDetalle,
        subTotal,
        igv,precioVenta,
        usuarioCreador,
        fechaCreacion,
		estado,
        descuentoProducto,
        descuentoRecurrente,
        comision,
        idTipoModalidadProducto,
        precioUnitario,
        descuentoAdicional,
        recurrenteSubTotal,
        precioVentaRecurrente,
        tipoActividad) 
	values (
		GUIDID,
        idVenta,
        cantidad,
        idProductoDetalle,
        subTotal,
        igv,
        precioVenta,
		usuarioCreador,
        NOW(),
        1,
        descuentoProducto,
        descuentoRecurrente,
        comision,
        idTipoModalidadProducto,
        precioUnitario,
        descuentoAdicional,
        recurrenteSubTotal,
        precioVentaRecurrente,
        tipoActividad);
        
END //
DELIMITER ;




DELIMITER //
CREATE PROCEDURE UpdateInsertVentaDetalle(
    idVenta varchar(64),
    cantidad int,
    idProductoDetalle varchar(200),
    tipoActividad varchar(200),
    subTotal decimal(8,2),
    igv decimal(8,2),
    precioVenta decimal(8,2),
    usuarioCreador int,
    descuentoProducto decimal(8,2),
    descuentoRecurrente decimal(8,2),
    comision decimal(8,2),
    idTipoModalidadProducto varchar(64),
    precioUnitario decimal(8,2),
    descuentoAdicional decimal(8,2),
    recurrenteSubTotal decimal(8,2),
    precioVentaRecurrente decimal(8,2)
)
BEGIN
    DECLARE GUIDID VARCHAR(64);

    SET GUIDID = (SELECT UUID());

 

    INSERT INTO ventadetalle (
        id,
        idVenta,
        cantidad,
        idProductoDetalle,
        subTotal,
        igv,
        precioVenta,
        usuarioCreador,
        fechaCreacion,
        estado,
        descuentoProducto,
        descuentoRecurrente,
        comision,
        idTipoModalidadProducto,
        precioUnitario,
        descuentoAdicional,
        recurrenteSubTotal,
        precioVentaRecurrente,
        tipoActividad
    ) VALUES (
        GUIDID,
        idVenta,
        cantidad,
        idProductoDetalle,
        subTotal,
        igv,
        precioVenta,
        usuarioCreador,
        NOW(),
        1,
        descuentoProducto,
        descuentoRecurrente,
        comision,
        idTipoModalidadProducto,
        precioUnitario,
        descuentoAdicional,
        recurrenteSubTotal,
        precioVentaRecurrente,
        tipoActividad
    );
END //
DELIMITER ;

drop procedure GetOfferHistory;
DELIMITER //
CREATE PROCEDURE GetOfferHistory(
    IN search_term VARCHAR(255),
    IN searchQuoteNumber VARCHAR(255),
    IN searchContractNumber VARCHAR(255),
    IN search_state int,
    IN start_date DATE,
    IN end_date DATE
)
BEGIN
    SELECT
        v.id,
        v.numeroContizacion,
        v.numeroContrato,
        nombreCliente,
        v.estadoVenta,
        v.fechaCreacion
    FROM
        Venta v
    WHERE
        (search_term IS NULL OR v.numeroContrato = search_term OR v.nombreCliente LIKE CONCAT('%', search_term, '%'))
        AND (searchQuoteNumber IS NULL OR v.numeroContizacion = searchQuoteNumber)
        AND (searchContractNumber IS NULL OR v.numeroContrato = searchContractNumber)
        AND (search_state IS NULL OR v.estadoVenta = search_state)
       AND ((start_date IS NULL AND end_date IS NULL) OR (DATE(v.fechaCreacion) BETWEEN COALESCE(STR_TO_DATE(start_date, '%Y-%m-%d'), DATE(v.fechaCreacion)) AND COALESCE(STR_TO_DATE(end_date, '%Y-%m-%d'), DATE(v.fechaCreacion))))

    ORDER BY
       v.numeroContizacion desc, v.fechaCreacion DESC ;
END //
DELIMITER ;



////////////////////////////////////////////////
drop procedure GetInfoProductsDetalle;
DELIMITER //
CREATE PROCEDURE GetInfoProductsDetalle(id varchar(64))
BEGIN
	select vd.*, id,
		descripcionTipoProducto,
		codigoSiebel,	
		descripcionSiebel,	
		codigoOracle,	
		descripcionOracle,	
		codigoGsmart,	
		recurrenteTotal,		
		tipoPanel,	
		flagProductoEspecial,	
		marca,
		recurrenteHogar,
		recurrenteNegocio,
		esRecurrenteHogarNegocio,
        v.estadoVenta,
        vd.cantidad as 'quantity'
    from Venta v 
    left join VentaDetalle vd on v.id=vd.idVenta
	left join Producto p on p.codigoOracle = vd.idProductoDetalle  
	where v.id=id and p.estado=1;
END //
DELIMITER ;


///////////////////////////////////////
CREATE PROCEDURE SP_GETVENTABYID(IN _ID VARCHAR(200))
BEGIN
select *  from venta v where id=_ID;
END
       