finish queries window

This commit is contained in:
2019-01-15 13:12:38 -03:00
parent 0f6ddb8075
commit 24932b6d94
37 changed files with 1018 additions and 101 deletions

View File

@@ -39,34 +39,123 @@ namespace Sernatur {
*/
public const string Q1_SQL = "CREATE VIEW REGIONES_SINDESCUENTO(nombreRegion, cantidad)
AS (
SELECT nombre_region, COUNT(R2.rut_turista) FROM region R
JOIN ciudad C ON (C.id_region = R.id_region) JOIN tour T ON (T.id_ciudad = C.id_ciudad)
JOIN realiza R2 ON (R2.id_tour = T.id_tour)
WHERE (
EXISTS(SELECT fecha_llegada
FROM asociado
WHERE (id_tour = T.id_tour AND fecha_llegada BETWEEN '2018-11-01' AND '2018-11-30')
) AND
R2.id_descuento = 2
)
GROUP BY (R.nombre_region)
SELECT nombre_region, COUNT(R2.rut_turista) FROM region R
JOIN ciudad C ON (C.id_region = R.id_region) JOIN tour T ON (T.id_ciudad = C.id_ciudad)
JOIN realiza R2 ON (R2.id_tour = T.id_tour)
WHERE (
EXISTS(SELECT fecha_llegada
FROM asociado
WHERE (id_tour = T.id_tour AND fecha_llegada BETWEEN '2018-11-01' AND '2018-11-30')
) AND
R2.id_descuento = 2
)
GROUP BY (R.nombre_region)
);
SELECT nombreRegion, cantidad FROM REGIONES_SINDESCUENTO WHERE (cantidad = (SELECT MAX(cantidad) FROM REGIONES_SINDESCUENTO));";
/**
* The Q2 SQL
*/
public const string Q2_SQL = "";
public const string Q2_SQL = "CREATE VIEW VALORES_TOURS(idT, nombreT, TotalVentas)
AS (
SELECT T.id_tour, T.nombre_tour,
((CASE
WHEN T.minima_personas <= (SELECT COUNT(rut_turista) FROM realiza WHERE (id_tour = T.id_tour))
THEN (SELECT costo_grupal FROM tour WHERE (id_tour = T.id_tour))
ELSE (SELECT costo_indiv FROM tour WHERE (id_tour = T.id_tour))
END) * COUNT(rut_turista)) AS cantidad
FROM tour T
JOIN realiza R ON (T.id_tour = R.id_tour)
GROUP BY (T.id_tour)
);
CREATE VIEW TOUR_DESCUENTOS(idT, nombreT, TotalDescuentos)
AS (
SELECT T.id_tour, T.nombre_tour,
SUM(DISTINCT (SELECT porcentaje FROM descuento WHERE (id_descuento = R.id_descuento)) *
(SELECT COUNT(rut_turista) FROM realiza WHERE (id_tour = R.id_tour AND id_descuento = R.id_descuento)) *
(CASE
WHEN T.minima_personas <= (SELECT COUNT(rut_turista) FROM realiza WHERE (id_tour = T.id_tour))
THEN (SELECT costo_grupal FROM tour WHERE (id_tour = T.id_tour))
ELSE (SELECT costo_indiv FROM tour WHERE (id_tour = T.id_tour))
END)) AS test
FROM tour T
JOIN realiza R ON (T.id_tour = R.id_tour)
WHERE (R.id_descuento != 2)
GROUP BY (T.id_tour)
);
SELECT V.nombreT, (V.TotalVentas - COALESCE(MAX(T.TotalDescuentos), 0)) AS ValorTotalRecibido
FROM VALORES_TOURS V FULL JOIN TOUR_DESCUENTOS T ON (T.idT = V.idT) GROUP BY (V.nombreT, V.TotalVentas);";
/**
* The Q3 SQL
*/
public const string Q3_SQL = "";
public const string Q3_SQL = "CREATE VIEW TOTAL_COORDINADORES(idT, nombreT, TotalCoordinadores)
AS (
SELECT T.id_tour, T.nombre_tour, COUNT(DISTINCT P.rut_guia)
FROM participa P
JOIN tour T ON (T.id_tour = P.id_tour)
JOIN guia G ON (G.rut_guia = P.rut_guia)
JOIN categoria C ON (C.id_categoria = P.id_categoria)
JOIN posee P2 ON (G.rut_guia = P2.rut_guia)
JOIN asociado A ON (A.id_tour = T.id_tour)
JOIN lugar L ON (L.id_lugar = A.id_lugar)
WHERE (
C.descripcion_categoria = 'Coordinador' AND
EXISTS(SELECT FROM lugar WHERE (id_lugar = L.id_lugar AND L.nivel = 3)) AND
(SELECT COUNT(rut_guia) FROM posee WHERE (rut_guia = G.rut_guia)) > 3
)
GROUP BY (T.id_tour)
);
SELECT nombreT, TotalCoordinadores FROM TOTAL_COORDINADORES WHERE (TotalCoordinadores = (SELECT MAX(TotalCoordinadores) FROM TOTAL_COORDINADORES));";
/**
* The Q4 SQL
*/
public const string Q4_SQL = "";
public const string Q4_SQL = "CREATE VIEW TOTAL_TURISTAS(idT, nombreT, TotalTuristas)
AS (
SELECT T.id_tour, T.nombre_tour, COUNT(R.rut_turista)
FROM tour T
JOIN realiza R ON (T.id_tour = R.id_tour)
JOIN asociado A ON (T.id_tour = A.id_tour)
JOIN lugar L ON (A.id_lugar = L.id_lugar)
WHERE (
EXISTS (SELECT id_lugar FROM lugar WHERE (id_lugar = L.id_lugar AND nivel >= 5)) AND
(A.fecha_llegada BETWEEN '2018-10-01' AND '2018-10-31') AND
NOT EXISTS (
SELECT id_enfermedad
FROM tiene_enfermedad
WHERE (rut_turista = R.rut_turista AND
(id_enfermedad = 1 OR id_enfermedad = 3)
)
)
)
GROUP BY (T.id_tour)
);
SELECT nombreT, TotalTuristas FROM TOTAL_TURISTAS WHERE (TotalTuristas = (SELECT MAX(TotalTuristas) FROM TOTAL_TURISTAS));";
/**
* The Q5 SQL
*/
public const string Q5_SQL = "";
public const string Q5_SQL = "CREATE VIEW TOTAL_ARRIENDOS(TotalArriendo)
AS (SELECT COUNT(A.patente)
FROM arrienda A
JOIN requerir_auto R ON (R.patente = A.patente)
JOIN tour T ON (T.id_tour = R.id_tour)
JOIN asociado A2 ON (T.id_tour = A2.id_tour)
WHERE (A2.fecha_llegada BETWEEN '2018-01-01' AND '2018-02-28')
);
CREATE VIEW TOTAL_VEHICULOS(TotalVeh)
AS (SELECT COUNT(V.patente)
FROM vehiculo V
JOIN requerir_auto R ON (R.patente = V.patente)
JOIN tour T ON (T.id_tour = R.id_tour)
JOIN asociado A ON (T.id_tour = A.id_tour)
WHERE (A.fecha_llegada BETWEEN '2018-01-01' AND '2018-02-28')
);
SELECT
(cast(T1.totalarriendo AS DECIMAL(3,2)) / cast(T2.totalveh AS DECIMAL(3,2))) AS porcentaje
FROM total_arriendos AS T1, total_vehiculos AS T2;";
}
}

View File

@@ -30,10 +30,25 @@ namespace Sernatur {
* The queries that can be called
*/
public enum Query {
/**
* The Q1 query
*/
Q1,
/**
* The Q2 query
*/
Q2,
/**
* The Q3 query
*/
Q3,
/**
* The Q4 query
*/
Q4,
/**
* The Q5 query
*/
Q5
}
/**
@@ -164,7 +179,7 @@ namespace Sernatur {
if (button == run_query) {
list_store.clear ();
if (query == Query.Q1) {
var region_list = RegionesSinDescuento.get_regions (conn.db);
var region_list = Views.Q1.get_regions_without_discount (conn.db);
region_list.foreach ((entry) => {
Gtk.TreeIter iter;
@@ -174,6 +189,49 @@ namespace Sernatur {
Q1Column.QUANTITY, entry.cantidad);
});
}
else if (query == Query.Q2) {
var value_list = Views.Q2.get_value_received (conn.db);
value_list.foreach ((entry) => {
Gtk.TreeIter iter;
list_store.append (out iter);
list_store.set (iter,
Q2Column.TOUR_NAME, entry.nombre_tour,
Q2Column.TOTAL_VALUE, Money.format_uint (entry.valor_recibido));
});
}
else if (query == Query.Q3) {
var value_list = Views.Q3.get_total_coordinators (conn.db);
value_list.foreach ((entry) => {
Gtk.TreeIter iter;
list_store.append (out iter);
list_store.set (iter,
Q3Column.TOUR_NAME, entry.nombre_tour,
Q3Column.COORDINATOR_TOTAL, entry.total_coordinadores);
});
}
else if (query == Query.Q4) {
var value_list = Views.Q4.get_total_tourists (conn.db);
value_list.foreach ((entry) => {
Gtk.TreeIter iter;
list_store.append (out iter);
list_store.set (iter,
Q4Column.TOUR_NAME, entry.nombre_tour,
Q4Column.TOURIST_TOTAL, entry.total_turistas);
});
}
else if (query == Query.Q5) {
var value_list = Views.Q5.get_percentage (conn.db);
value_list.foreach ((entry) => {
Gtk.TreeIter iter;
list_store.append (out iter);
list_store.set (iter,
Q5Column.PERCENTAGE, Percentage.format_float (entry.porcentaje));
});
}
}
else if (button == close_query) {
this.close ();
@@ -246,7 +304,7 @@ namespace Sernatur {
list_store = new Gtk.ListStore (Q2Column.N_COLUMNS,
typeof (string),
typeof (uint));
typeof (string));
query_tree.set_model (list_store);
@@ -284,7 +342,7 @@ namespace Sernatur {
this.set_title (dgettext (null, "(Q5) Vehicle total"));
list_store = new Gtk.ListStore (Q5Column.N_COLUMNS,
typeof (float));
typeof (string));
query_tree.set_model (list_store);