1 | /* |
---|
2 | Copyright (C) 2012 |
---|
3 | Alejandro Mujica (amujica@cenditel.gob.ve) |
---|
4 | Erwin Paredes (eparedes@cenditel.gob.ve) |
---|
5 | José Ruiz (jruiz@cenditel.gob.ve) |
---|
6 | Rodolfo Rangel (rrangel@cenditel.gob.ve) |
---|
7 | Julie Vera (jvera@cenditel.gob.ve) |
---|
8 | |
---|
9 | CENDITEL Fundación Centro Nacional de Desarrollo e Investigación en |
---|
10 | Tecnologías Libres |
---|
11 | |
---|
12 | Este programa es software libre; Usted puede usarlo bajo los términos de la |
---|
13 | licencia de software GPL versión 2.0 de la Free Software Foundation. |
---|
14 | |
---|
15 | Este programa se distribuye con la esperanza de que sea útil, pero SIN |
---|
16 | NINGUNA GARANTÍA; tampoco las implícitas garantías de MERCANTILIDAD o |
---|
17 | ADECUACIÓN A UN PROPÓSITO PARTICULAR. |
---|
18 | Consulte la licencia GPL para más detalles. Usted debe recibir una copia |
---|
19 | de la GPL junto con este programa; si no, escriba a la Free Software |
---|
20 | Foundation Inc. 51 Franklin Street,5 Piso, Boston, MA 02110-1301, USA. |
---|
21 | */ |
---|
22 | |
---|
23 | /* |
---|
24 | Autor: Alejandro J. Mujica |
---|
25 | Fecha de creación: 01/08/2013 |
---|
26 | Este archivo contiene la definición de un conjunto de consultas a base de |
---|
27 | datos utilizadas a lo largo del proyecto. |
---|
28 | */ |
---|
29 | |
---|
30 | # ifndef QUERIES_H |
---|
31 | # define QUERIES_H |
---|
32 | |
---|
33 | # include <common.H> |
---|
34 | # include <autoConnection.H> |
---|
35 | |
---|
36 | /** Encierra una cadena entre comillas simples. |
---|
37 | * |
---|
38 | * Utilizada para los campos de tipo cadena que se almacenan en base de datos. |
---|
39 | * |
---|
40 | * @param str cadena que se va a encerrar entre comillas simples. |
---|
41 | * @return cadena encerrada entre comillas simples. |
---|
42 | */ |
---|
43 | std::string singleQuote(const std::string & str); |
---|
44 | |
---|
45 | /** Encierra una cadena entre comillas dobles. |
---|
46 | * |
---|
47 | * @param str cadena que se va a encerrar entre comillas simples. |
---|
48 | * @return cadena encerrada entre comillas simples. |
---|
49 | */ |
---|
50 | std::string doubleQuote(const std::string & str); |
---|
51 | |
---|
52 | /** Concatena dos cadenas mediante un conector. |
---|
53 | * |
---|
54 | * Últil para concatenar nombres de tablas con nombres de campos. |
---|
55 | * Ej: estudiante.id. |
---|
56 | * |
---|
57 | * @param table nombre de la tabla. |
---|
58 | * @param field nombre del campo. |
---|
59 | * @param connector caracter que conectará a las dos cadenas. |
---|
60 | * @return cadena concatenada. |
---|
61 | */ |
---|
62 | std::string concat(const std::string & table, const std::string & field, |
---|
63 | const char & connector = '.'); |
---|
64 | |
---|
65 | /** Concatena "campo AS alias" |
---|
66 | * |
---|
67 | * @param field nombre del campo de la tabla. |
---|
68 | * @param alias alias que se le asignará al campo. |
---|
69 | * @return cadena concatenada. |
---|
70 | */ |
---|
71 | std::string as(const std::string & field, const std::string & alias); |
---|
72 | |
---|
73 | /** Concatena "tabla.campo AS alias" |
---|
74 | * |
---|
75 | * @param table nombre de la tabla. |
---|
76 | * @param field nombre del campo de la tabla. |
---|
77 | * @param alias alias que se le asignará al campo. |
---|
78 | * @return cadena concatenada. |
---|
79 | */ |
---|
80 | std::string concatas(const std::string & table, const std::string & field, |
---|
81 | const std::string & alias); |
---|
82 | |
---|
83 | /** Concatena tabla y campo de la forma tabla.campo AS tabla_campo |
---|
84 | * |
---|
85 | * @param table nombre de la tabla. |
---|
86 | * @param field nombre del campo de la tabla. |
---|
87 | * @return cadena concatenada. |
---|
88 | */ |
---|
89 | std::string concatas(const std::string &, const std::string &); |
---|
90 | |
---|
91 | /** Concatena una operación de comparación para base de datos. |
---|
92 | * |
---|
93 | * @param field nombre del campo. |
---|
94 | * @param value valor con el cual se va a comparar el campo. |
---|
95 | * @param oper operador de comparación (=, <, <=, >, >= <>) |
---|
96 | */ |
---|
97 | std::string op(const std::string & field, const std::string & value, |
---|
98 | const std::string & oper = "="); |
---|
99 | |
---|
100 | /** Convierte un campo id (de tipo long) en cadena. |
---|
101 | * |
---|
102 | * @param id valor numérico del id. |
---|
103 | * @return valor del id convertido en cadena. |
---|
104 | */ |
---|
105 | std::string idToStr(const size_t & id); |
---|
106 | |
---|
107 | |
---|
108 | /** Concatena la operación field BETWEEN beg AND end (para fechas). |
---|
109 | * |
---|
110 | * @param field nombre del campo a evaluar. |
---|
111 | * @param beg valor mínimo de comparación. |
---|
112 | * @param end valor máximo de comparación. |
---|
113 | * @return cadena concatenada. |
---|
114 | */ |
---|
115 | std::string between(const std::string & field, const std::string & beg, |
---|
116 | const std::string & end); |
---|
117 | |
---|
118 | /** Dados un campo y un año (en cadena), efectúa la operación between entre |
---|
119 | * el primer y el último día del año. |
---|
120 | * |
---|
121 | * @param field nombre del campo que se va a comparar. |
---|
122 | * @param year valor del año. |
---|
123 | * @return cadena concatenada. |
---|
124 | */ |
---|
125 | std::string inYear(const std::string & field, const std::string & year); |
---|
126 | |
---|
127 | /** Extrae de la base de datos toda la información de un producto con id dado. |
---|
128 | * |
---|
129 | * @param conn Conexión a la base de datos. |
---|
130 | * @param id id del producto que se quiere consultar. |
---|
131 | * @return Objeto ProductInfo con toda la información del producto consultado. |
---|
132 | */ |
---|
133 | ProductInfo loadInfoByProductId(AutoConnection & conn, const size_t & id); |
---|
134 | |
---|
135 | /** Carga la lista de id de los insumos para un producto dado. |
---|
136 | * |
---|
137 | * @param conn Conexión a la base de datos. |
---|
138 | * @param[in] productId id del producto. |
---|
139 | * @param[in] year año de declaración de la matriz. |
---|
140 | * @param[out] inputIds Lista de enteros en la cual se van a escribir los ids |
---|
141 | * de los insumos. |
---|
142 | */ |
---|
143 | void listInputIds(AutoConnection & conn, const size_t & productId, |
---|
144 | const std::string & year, List <size_t> & inputIds); |
---|
145 | |
---|
146 | /** Carga a todos los proveedores de un insumo dado. |
---|
147 | * |
---|
148 | * @param conn Conexión a la base de datos. |
---|
149 | * @param[in] inputId id del insumo. |
---|
150 | * @param[in] year año de la venta del insumo. |
---|
151 | * @param[out] Lista de proveedores del insumo. |
---|
152 | */ |
---|
153 | void listInputs(AutoConnection & conn, const size_t & inputId, |
---|
154 | const std::string & year, List <InputInfo> & inputs); |
---|
155 | |
---|
156 | |
---|
157 | /** Dado un proveedor, obtiene todos los posibles productos asociados a ese |
---|
158 | * proveedor que coincidan con el mismo código arancelario. |
---|
159 | * |
---|
160 | * @param conn Conexión a la base de datos. |
---|
161 | * @param[in] inputInfo información del insumo. |
---|
162 | * @param[out] Lista de productos asociados al insumo. |
---|
163 | */ |
---|
164 | void productInfoFromInput(AutoConnection & conn, const InputInfo & inputInfo, |
---|
165 | List <ProductInfo> & list); |
---|
166 | |
---|
167 | /** Carga la lista de todos los productos que utilizan como insumo un producto |
---|
168 | * dado. |
---|
169 | * |
---|
170 | * @param conn Conexión a la base de datos. |
---|
171 | * @param[in] good bien del cual se requieren los que lo usan. |
---|
172 | * @param[in] Año de declaración de la relación. |
---|
173 | * @param[out] list Lista sobre la cual se escribirán los productos que lo usan |
---|
174 | * junto al id que se le asocia como insumo a good por cada uno. |
---|
175 | */ |
---|
176 | void listRequesters(AutoConnection & conn, Good * good, |
---|
177 | const std::string & year, |
---|
178 | List <Aleph::pair<ProductInfo, long>> & list); |
---|
179 | |
---|
180 | /** Consulta la candidad de insumo requerida para producir una unidad de |
---|
181 | * producto. |
---|
182 | * |
---|
183 | * @param conn Conexión a la base de datos. |
---|
184 | * @param inputId id del insumo. |
---|
185 | * @param productId id del producto. |
---|
186 | * @return cantidad de insumo para producir una unidad de producto. |
---|
187 | */ |
---|
188 | real getUnitarianRequest(AutoConnection & conn, const size_t & inputId, |
---|
189 | const size_t & productId); |
---|
190 | |
---|
191 | /** Carga la cantidad producida y el precio de un producto en un año dado. |
---|
192 | * |
---|
193 | * @param conn Conexión a la base de datos. |
---|
194 | * @param[in-out] good bien al cual se le efectúa la consulta y se le asignan |
---|
195 | * los valores. |
---|
196 | * @param year año de la producción. |
---|
197 | */ |
---|
198 | void getProducedQuantityAndPrice(AutoConnection & conn, Good * good, |
---|
199 | const std::string & year); |
---|
200 | |
---|
201 | |
---|
202 | /** Carga la cantidad producida y el precio de un producto en un año dado. |
---|
203 | * |
---|
204 | * @param conn Conexión a la base de datos. |
---|
205 | * @param[in-out] info producto al cual se le efectúa la consulta y se le |
---|
206 | * asignan los valores. |
---|
207 | * @param year año de la producción. |
---|
208 | */ |
---|
209 | void getProducedQuantityAndPrice(AutoConnection & conn, ProductInfo & info, |
---|
210 | const std::string & year); |
---|
211 | |
---|
212 | /** Calcula la cantidad que se le debe asignar a un arco que va hacia aguas |
---|
213 | * arriba. |
---|
214 | * |
---|
215 | * @param[in] conn Conexión a la base de datos. |
---|
216 | * @param[in] src bien en el nodo fuente. |
---|
217 | * @param[in] tgt bien en el nodo destino. |
---|
218 | * @param[in] year año de la relación. |
---|
219 | * @param[out] info Referencia a la información del arco |
---|
220 | */ |
---|
221 | void computeArcQuantityUpstream(AutoConnection & conn, Good * src, Good * tgt, |
---|
222 | const std::string & year, ArcInfo & info); |
---|
223 | |
---|
224 | /** Consulta la cantidad que un comprador declara que obtiene de un proveedor. |
---|
225 | * |
---|
226 | * @param conn Conexión a la base de datos. |
---|
227 | * @param rif R.I.F. del proveedor. |
---|
228 | * @param inputId id del insumo. |
---|
229 | * @param year año de la compra. |
---|
230 | * @return cantidad de insumo declarado. |
---|
231 | */ |
---|
232 | real getDeclaredBoughtQuantity(AutoConnection & conn, const std::string & rif, |
---|
233 | const long & inputId, const std::string & year); |
---|
234 | |
---|
235 | /** Calcula la cantidad que se le debe asignar a un arco que va hacia aguas |
---|
236 | * abajo. |
---|
237 | * |
---|
238 | * @param conn Conexión a la base de datos. |
---|
239 | * @param[in] src bien en el nodo fuente. |
---|
240 | * @param[in] tgt bien en el nodo destino. |
---|
241 | * @param[in-out] arcInfo información del arco sobre la cual se van a escribir |
---|
242 | los resultados. |
---|
243 | * @param[in] year año de la relación. |
---|
244 | */ |
---|
245 | void computeArcQuantityDownstream(AutoConnection & conn, Good * src, Good * tgt, |
---|
246 | const std::string & year, ArcInfo & arcInfo); |
---|
247 | |
---|
248 | /** Consulta el precio declarado de compra para un insumo el cual no está |
---|
249 | * registrado en el sigesic como un producto. |
---|
250 | * |
---|
251 | * @param conn Conexión a la base de datos. |
---|
252 | * @param good Bien proveído. |
---|
253 | * @param id id del insumo. |
---|
254 | * @param year año de la compra. |
---|
255 | * @return precio de compra del insumo. |
---|
256 | */ |
---|
257 | real getAcquisitionPrice(AutoConnection & conn, Good * good, const long & id, |
---|
258 | const std::string & year); |
---|
259 | |
---|
260 | /** Consulta el país de origen de una empresa. |
---|
261 | * |
---|
262 | * @param conn Conexión a la base de datos. |
---|
263 | * @param rif R.I.F. de la empresa. |
---|
264 | * @return nombre del país de origen. |
---|
265 | */ |
---|
266 | std::string getOrigCountry(AutoConnection & conn, const long & supplierId); |
---|
267 | |
---|
268 | /** Consulta el país de procedencia de una empresa. |
---|
269 | * |
---|
270 | * @param conn Conexión a la base de datos. |
---|
271 | * @param rif R.I.F. de la empresa. |
---|
272 | * @return nombre del país de procedencia. |
---|
273 | */ |
---|
274 | std::string getProcCountry(AutoConnection & conn, const long & supplierId); |
---|
275 | |
---|
276 | /** Carga una lista de posibles proveedores para un insumo. |
---|
277 | * |
---|
278 | * @param conn Conexión a la base de datos. |
---|
279 | * @param[in] tariffCode código arancelario del insumo. |
---|
280 | * @param[in] year año de la venta. |
---|
281 | * @param[out] list Lista de posibles proveedores. |
---|
282 | */ |
---|
283 | void listSuggestedSuppliers(AutoConnection & conn, |
---|
284 | const std::string & tariffCode, |
---|
285 | const std::string & year, |
---|
286 | List<ProductInfo> & list); |
---|
287 | |
---|
288 | /** Carga la lista de id de productos de un insumo dado. |
---|
289 | * |
---|
290 | * @param conn Conexión a la base de datos. |
---|
291 | * @param[in] id id del insumo. |
---|
292 | * @param[in] año de la de las ventas. |
---|
293 | * @param[out] ids lista de id de los productos. |
---|
294 | */ |
---|
295 | void listRealProductId(AutoConnection & conn, const long & id, |
---|
296 | const std::string & year, List<long> & ids); |
---|
297 | |
---|
298 | /** Consulta el nombre de un insumo. |
---|
299 | * |
---|
300 | * @param conn Conexión a la base de datos. |
---|
301 | * @param id id del insumo. |
---|
302 | * @return nombre del insumo. |
---|
303 | */ |
---|
304 | std::string getInputName(AutoConnection & conn, const long & id); |
---|
305 | |
---|
306 | /** Consulta la ubicación de una planta. |
---|
307 | * |
---|
308 | * @param conn Conexión a la base de datos. |
---|
309 | * @param id id de la planta. |
---|
310 | * @return ubicación de la planta. |
---|
311 | */ |
---|
312 | PlantLocation getPlantLocation(AutoConnection & conn, const long & id); |
---|
313 | |
---|
314 | /** Consulta el CIIU de una unidad económica. |
---|
315 | * |
---|
316 | * @param conn Conexión a la base de datos. |
---|
317 | * @param rif R.I.F. de la empresa. |
---|
318 | * @return valor del CIIU de la actividad económica. |
---|
319 | */ |
---|
320 | std::string getCiiu(AutoConnection & conn, const std::string & rif); |
---|
321 | |
---|
322 | /** Consulta la cantidad de emplados operativos de una unidad económica. |
---|
323 | * |
---|
324 | * @param conn Conexión a la base de datos. |
---|
325 | * @param rif R.I.F. de la empresa. |
---|
326 | * @param year Año máximo de la declaración. |
---|
327 | * @return cantidad de empleados en la unidad económica. |
---|
328 | */ |
---|
329 | real getOperatingStaffNumber(AutoConnection & conn, const std::string & rif, |
---|
330 | const std::string & year); |
---|
331 | |
---|
332 | /** Consulta el monto total producido por una empresa en un año dado. |
---|
333 | * |
---|
334 | * @param conn Conexión a la base de datos. |
---|
335 | * @param rif R.I.F. de la empresa. |
---|
336 | * @param year Año de la producción. |
---|
337 | * @return monto total producido por la empresa. |
---|
338 | */ |
---|
339 | real getTotalAmount(AutoConnection & conn, const std::string & rif, |
---|
340 | const std::string & year); |
---|
341 | |
---|
342 | /** Extrae los años para los cuales existe una producción. |
---|
343 | * |
---|
344 | * @param conn Conexión a la base de datos. |
---|
345 | * @param[in] productId Id del producto del cual se quiere consultar. |
---|
346 | * @param[out] years Lista de años para los cuales hay producción declarada. |
---|
347 | */ |
---|
348 | void getProductionYears(AutoConnection & conn, const long productId, |
---|
349 | List<std::string> & years); |
---|
350 | |
---|
351 | struct CompanyRifName { |
---|
352 | std::string rif; |
---|
353 | |
---|
354 | std::string name; |
---|
355 | }; |
---|
356 | |
---|
357 | /** Lista las empresas que tengan nombre parecido al dado. |
---|
358 | * |
---|
359 | * @param conn Conexión a la base de datos. |
---|
360 | * @param[in] company Nombre de la empresa. |
---|
361 | * @param[out] list Lista de pares (rif, nombre) de cada empresa coincidente. |
---|
362 | */ |
---|
363 | void listCompaniesLike(AutoConnection & conn, const std::string & company, |
---|
364 | List <CompanyRifName> & list); |
---|
365 | |
---|
366 | struct ProductIdName { |
---|
367 | long id; |
---|
368 | |
---|
369 | std::string name; |
---|
370 | |
---|
371 | std::string technicalSpecifications; |
---|
372 | }; |
---|
373 | |
---|
374 | /** Lista todos los productos producidos por una empresa. |
---|
375 | * |
---|
376 | * @param conn Conexión a la base de datos. |
---|
377 | * @param[in] rif R.I.F. de la empresa. |
---|
378 | * @param[out] list Lista de pares (id, nombre) de cada cada producto. |
---|
379 | */ |
---|
380 | void listProductsByCompany(AutoConnection & conn, const std::string & rif, |
---|
381 | List <ProductIdName> & list); |
---|
382 | |
---|
383 | void setArcMeasurementUnit(AutoConnection & conn, ArcInfo & info); |
---|
384 | |
---|
385 | # endif // QUERIES_H |
---|
386 | |
---|