<?xml version="1.0" encoding="iso-8859-1"?>
<turisoftreportfile title="Reservas con control de cobros I" breakpoint="" group="">
	<parameters>
		<param name=":1" description="Desde fecha de entrada" type="DATE" order="2" show="yes" default="" />
		<param name=":2" description="Hasta fecha de entrada" type="DATE" order="3" show="yes" default="" />
	</parameters>
	<sql>
/*
	NOTA SOBRE LOS TIPOS DE RECIBO
	1 -&gt; Alojamiento
	2 -&gt; Alojamiento
	3 -&gt; Alojamiento
	4 -&gt; Alojamiento
	5 -&gt; Complementos
	6 -&gt; Abono
	7 -&gt; Fianza (a devolver)

*/

SELECT 	

	/* COUNT(*)-COUNT(*)+1  RES."GrupoQuery", */
	"RES"."Vivienda",
	RES.Desde Entrada,
	RES.Hasta Salida,
	RES.Adultos F."Ad.",
	RES."Niños" F."Niñ.",
	AGENCIAS."Descripción" Cliente,
	INQUI.Nombre Inquilino,
	RES.Reserva RES."Res.",
	SUM(PRECIOSRESERVA.Precio)/COUNT(DISTINCT RECIBOS.Contador)   F."Importe$E$SUM",
	SUM(RECIBOS.Importe)/COUNT(DISTINCT PRECIOSRESERVA.Contador)  F."Cobrado$E$SUM",
	SUM(PRECIOSRESERVA.Precio)/COUNT(DISTINCT RECIBOS.Contador)  -
	SUM(RECIBOS.Importe)/COUNT(DISTINCT PRECIOSRESERVA.Contador) F."Pendiente$E$SUM",
	RES."Fecha realizada" AS RES."Realizada"
FROM
	RESERVAS AS RES,AGRUPACIONES AS AGRUP,AGENCIAS,INQUI,PRECIOSRESERVA,RECIBOS
WHERE
	RES."Agrupación"=AGRUP."Código"
	AND RES.DESDE &gt;= &#39;:1&#39;
	AND RES.DESDE &lt;= &#39;:2&#39;	
	AND AGENCIAS."Código" = RES.Agencia
	AND RES.INQUILINO = INQUI."Código"
	AND PRECIOSRESERVA.Reserva=RES.Reserva
	AND RECIBOS.Reserva=RES.Reserva
	AND ( (RECIBOS.TIPO&lt;&gt;5 AND RECIBOS.TIPO&lt;&gt;7) OR RECIBOS.TIPO IS NULL)
GROUP BY
	"RES"."Vivienda",
	RES.Desde,
	RES.Hasta,
	RES.Adultos,
	RES."Niños" ,
	AGENCIAS."Descripción",
	INQUI.Nombre,
	RES.Reserva,
	RES."Fecha realizada"

UNION ALL

/*
	En este grupo van las reservas que no tienen agrupado ningún cobro.
	Nada de nad, de ningún tipo.
*/

SELECT 
	/* COUNT(*)-COUNT(*)+2  RES."GrupoQuery", */
	"RES"."Vivienda",
	RES.Desde Entrada,
	RES.Hasta Salida,
	RES.Adultos F."Ad.",
	RES."Niños" F."Niñ.",
	AGENCIAS."Descripción" Cliente,
	INQUI.Nombre Inquilino,
	RES.Reserva RES."Res.",
	SUM(PRECIOSRESERVA.Precio)  F."Importe$E$SUM",
	0  F."Cobrado$E$SUM",
	SUM(PRECIOSRESERVA.Precio) F."Pendiente$E$SUM",
	RES."Fecha realizada" AS RES."Realizada"
FROM
	RESERVAS AS RES,AGRUPACIONES AS AGRUP,AGENCIAS,INQUI
JOIN PRECIOSRESERVA ON
	PRECIOSRESERVA.Reserva=RES.Reserva
FULL OUTER JOIN RECIBOS ON
	RECIBOS.Reserva=RES.Reserva
WHERE
	RES."Agrupación"=AGRUP."Código"
	AND RES.DESDE &gt;= &#39;:1&#39;
	AND RES.DESDE &lt;= &#39;:2&#39;	
	AND AGENCIAS."Código" = RES.Agencia
	AND RES.INQUILINO = INQUI."Código"
GROUP BY
	"RES"."Vivienda",
	RES.Desde,
	RES.Hasta,
	RES.Adultos,
	RES."Niños" ,
	AGENCIAS."Descripción",
	INQUI.Nombre,
	RES.Reserva,
	RES."Fecha realizada"

HAVING
	COUNT(DISTINCT RECIBOS.Contador)  = 0

UNION ALL

/*
	En este último grupo se toman las reservas que tienen anotados complementos o fianzas
	pero ningún otro tipo de cobro de alojamiento.
*/

SELECT 
	/* COUNT(*)-COUNT(*)+3  RES."GrupoQuery", */
	"RES"."Vivienda",
	RES.Desde Entrada,
	RES.Hasta Salida,
	RES.Adultos F."Ad.",
	RES."Niños" F."Niñ.",
	AGENCIAS."Descripción" Cliente,
	INQUI.Nombre Inquilino,
	RES.Reserva RES."Res.",
	SUM(PRECIOSRESERVA.Precio)/COUNT(DISTINCT RECIBOS.CONTADOR)  F."Importe$E$SUM",
	0  F."Cobrado$E$SUM",
	SUM(PRECIOSRESERVA.Precio)/COUNT(DISTINCT RECIBOS.CONTADOR) F."Pendiente$E$SUM",
	RES."Fecha realizada"
FROM
	RESERVAS AS RES,AGRUPACIONES AS AGRUP,AGENCIAS,INQUI,RECIBOS,PRECIOSRESERVA
	
WHERE
	PRECIOSRESERVA.Reserva=RES.Reserva
	AND RECIBOS.Reserva=RES.Reserva
	AND RES."Agrupación"=AGRUP."Código"
	AND RES.DESDE &gt;= &#39;:1&#39;
	AND RES.DESDE &lt;= &#39;:2&#39;	
	AND AGENCIAS."Código" = RES.Agencia
	AND RES.INQUILINO = INQUI."Código"
GROUP BY
	"RES"."Vivienda",
	RES.Desde,
	RES.Hasta,
	RES.Adultos,
	RES."Niños" ,
	AGENCIAS."Descripción",
	INQUI.Nombre,
	RES.Reserva,
	RES."Fecha realizada"
HAVING
	/* Solo tiene cobros de complemtos */
	( COUNT(DISTINCT RECIBOS.TIPO) = 1 AND MIN(RECIBOS.TIPO)=5 AND MAX(RECIBOS.TIPO)=5 )

	/* Solo tiene cobros de fianza (a devolver) */
	OR ( COUNT(DISTINCT RECIBOS.TIPO) = 1 AND MIN(RECIBOS.TIPO)=7 AND MAX(RECIBOS.TIPO)=7 )

	/* Tiene cobros de complementos y de fianza */
	OR ( COUNT(DISTINCT RECIBOS.TIPO) = 2 AND MIN(RECIBOS.TIPO)=5 AND MAX(RECIBOS.TIPO)=7 )	

ORDER BY
	RES.Desde,
	RES.Vivienda</sql>
	<totals>
	</totals>
	<footer></footer>
</turisoftreportfile>
