1 | from django.shortcuts import * |
---|
2 | from django.contrib.auth.decorators import login_required |
---|
3 | from django.template.context import Context, RequestContext |
---|
4 | from django.template import Template,loader |
---|
5 | from django.http import HttpResponse, HttpResponseRedirect |
---|
6 | from comun.utilidades import dictfetchall |
---|
7 | |
---|
8 | from complementariedad.forms import * |
---|
9 | |
---|
10 | def reporte_n_principales_productos(pais, flujo_comercial, n = 5): |
---|
11 | query = """ |
---|
12 | SELECT cc.pais_id, cp.iso3166_3, cc.codigo_armonizado_id, cca.codigo, |
---|
13 | SUM(cantidad) AS cantidad, cum.simbolo, |
---|
14 | SUM(cc.monto) AS monto |
---|
15 | FROM comun_comercio AS cc |
---|
16 | INNER JOIN comun_pais AS cp ON cp.id = cc.pais_id |
---|
17 | INNER JOIN comun_codigoarmonizado AS cca |
---|
18 | ON cca.id = cc.codigo_armonizado_id |
---|
19 | INNER JOIN comun_unidadmedida AS cum ON cum.id = cc.unidad_medida_id |
---|
20 | WHERE cc.pais_id <> %s |
---|
21 | AND cc.flujo_comercial = %s |
---|
22 | AND cc.id in |
---|
23 | (SELECT id |
---|
24 | FROM comun_comercio |
---|
25 | WHERE (pais_id, codigo_armonizado_id) in |
---|
26 | (SELECT pais_id, codigo_armonizado_id |
---|
27 | FROM comun_comercio |
---|
28 | WHERE pais_relacion_id in |
---|
29 | (SELECT id |
---|
30 | FROM comun_pais |
---|
31 | WHERE anyo_inclusion is NULL) |
---|
32 | AND flujo_comercial = 1 |
---|
33 | EXCEPT |
---|
34 | SELECT pais_id, codigo_armonizado_id |
---|
35 | FROM comun_comercio |
---|
36 | WHERE pais_relacion_id = %s AND flujo_comercial = %s |
---|
37 | ) |
---|
38 | ) |
---|
39 | AND cc.pais_relacion_id in |
---|
40 | (SELECT id FROM comun_pais WHERE anyo_inclusion is NULL) |
---|
41 | GROUP BY cc.pais_id, cp.iso3166_3, cc.codigo_armonizado_id, |
---|
42 | cca.codigo, cum.simbolo |
---|
43 | ORDER BY cantidad DESC |
---|
44 | LIMIT 5 |
---|
45 | """ |
---|
46 | |
---|
47 | try: |
---|
48 | cursor = connection.cursor() |
---|
49 | |
---|
50 | cursor.execute(query, [pais, flujo_comercial, pais, flujo_comercial]) |
---|
51 | |
---|
52 | filas = dictfetchall(cursor) |
---|
53 | |
---|
54 | except Exception as e: |
---|
55 | logger.fatal('Exception ejecutando consulta de reporte general: %s' % e) |
---|
56 | print e |
---|
57 | raise e |
---|
58 | |
---|
59 | return filas |
---|
60 | |
---|
61 | def reporte_por_paises_y_productos(pais, flujo_comercial, |
---|
62 | paises_relacion, productos): |
---|
63 | query = """ |
---|
64 | SELECT cc.pais_id, cp.iso3166_3, cca.codigo, cc.cantidad, |
---|
65 | cum.simbolo, cc.monto |
---|
66 | FROM comun_comercio AS cc |
---|
67 | INNER JOIN comun_codigoarmonizado AS cca |
---|
68 | ON cc.codigo_armonizado_id = cca.id |
---|
69 | INNER JOIN comun_pais AS cp ON cp.id = cc.pais_id |
---|
70 | INNER JOIN comun_unidadmedida AS cum ON cc.unidad_medida_id = cum.id |
---|
71 | WHERE cc.pais_id in %s |
---|
72 | AND cc.flujo_comercial = %s |
---|
73 | AND (cc.codigo_armonizado_id in %s |
---|
74 | OR cc.codigo_armonizado_id in (SELECT hs_96_id |
---|
75 | FROM comun_codigoarmonizado AS cca |
---|
76 | INNER JOIN comun_conversionhs AS cchs |
---|
77 | ON cchs.hs_02_id = cca.id |
---|
78 | WHERE cca.id in %s)) |
---|
79 | AND cc.id in |
---|
80 | (SELECT id FROM comun_comercio |
---|
81 | WHERE (pais_id, codigo_armonizado_id) in |
---|
82 | (SELECT pais_id, codigo_armonizado_id |
---|
83 | FROM comun_comercio |
---|
84 | WHERE pais_relacion_id in |
---|
85 | (SELECT id FROM comun_pais WHERE anyo_inclusion is NULL) |
---|
86 | AND flujo_comercial = %s |
---|
87 | EXCEPT |
---|
88 | SELECT pais_id, codigo_armonizado_id |
---|
89 | FROM comun_comercio |
---|
90 | WHERE pais_relacion_id = %s AND flujo_comercial = %s |
---|
91 | ) |
---|
92 | ) |
---|
93 | AND cc.pais_relacion_id in (SELECT id FROM comun_pais |
---|
94 | WHERE anyo_inclusion is NULL) |
---|
95 | """ |
---|
96 | |
---|
97 | try: |
---|
98 | cursor = connection.cursor() |
---|
99 | |
---|
100 | cursor.execute(query, [paises_relacion, flujo_comercial, productos, |
---|
101 | productos, flujo_comercial, pais, |
---|
102 | flujo_comercial]) |
---|
103 | |
---|
104 | filas = dictfetchall(cursor) |
---|
105 | |
---|
106 | except Exception as e: |
---|
107 | logger.fatal('Exception ejecutando consulta de reporte general: %s' % e) |
---|
108 | print e |
---|
109 | raise e |
---|
110 | |
---|
111 | return filas |
---|
112 | |
---|
113 | def reporte_productos_por_pais_relacion(pais, flujo_comercial, pais_relacion): |
---|
114 | query = """ |
---|
115 | SELECT cc.codigo_armonizado_id, cca.codigo, |
---|
116 | SUM(cc.cantidad) AS cantidad, cum.simbolo, SUM(cc.monto) AS monto |
---|
117 | FROM comun_comercio AS cc |
---|
118 | INNER JOIN comun_codigoarmonizado AS cca |
---|
119 | ON cca.id = cc.codigo_armonizado_id |
---|
120 | INNER JOIN comun_unidadmedida AS cum ON cum.id = cc.unidad_medida_id |
---|
121 | WHERE cc.pais_id = 2 |
---|
122 | AND cc.flujo_comercial = 1 |
---|
123 | AND cc.pais_relacion_id in (SELECT id FROM comun_pais |
---|
124 | WHERE anyo_inclusion is NULL) |
---|
125 | AND cc.id in (SELECT id FROM comun_comercio |
---|
126 | WHERE (pais_id, codigo_armonizado_id) in |
---|
127 | (SELECT pais_id, codigo_armonizado_id |
---|
128 | FROM comun_comercio |
---|
129 | WHERE pais_relacion_id in |
---|
130 | (SELECT id FROM comun_pais |
---|
131 | WHERE anyo_inclusion is NULL) |
---|
132 | AND flujo_comercial = 1 |
---|
133 | EXCEPT |
---|
134 | SELECT pais_id, codigo_armonizado_id |
---|
135 | FROM comun_comercio |
---|
136 | WHERE pais_relacion_id = 1 AND flujo_comercial = 1 |
---|
137 | ) |
---|
138 | ) |
---|
139 | GROUP BY cc.codigo_armonizado_id, cca.codigo, cum.simbolo |
---|
140 | ORDER BY cc.codigo_armonizado_id |
---|
141 | """ |
---|
142 | try: |
---|
143 | cursor = connection.cursor() |
---|
144 | |
---|
145 | cursor.execute(query, []) |
---|
146 | |
---|
147 | filas = dictfetchall(cursor) |
---|
148 | |
---|
149 | except Exception as e: |
---|
150 | logger.fatal('Exception ejecutando consulta de reporte general: %s' % e) |
---|
151 | print e |
---|
152 | raise e |
---|
153 | |
---|
154 | return filas |
---|
155 | |
---|
156 | |
---|
157 | def reporte_general(pais, flujo_comercial): |
---|
158 | query = """ |
---|
159 | SELECT cc.pais_id, cp.iso3166_3, SUM(cc.monto) AS monto |
---|
160 | FROM comun_comercio AS cc |
---|
161 | INNER JOIN comun_pais AS cp ON cp.id = cc.pais_id |
---|
162 | WHERE cc.pais_id <> %s |
---|
163 | AND cc.flujo_comercial = %s |
---|
164 | AND cc.id in |
---|
165 | (SELECT id |
---|
166 | FROM comun_comercio |
---|
167 | WHERE (pais_id, codigo_armonizado_id) in |
---|
168 | (SELECT pais_id, codigo_armonizado_id |
---|
169 | FROM comun_comercio |
---|
170 | WHERE pais_relacion_id in |
---|
171 | (SELECT id |
---|
172 | FROM comun_pais |
---|
173 | WHERE anyo_inclusion is NULL |
---|
174 | AND flujo_comercial = %s) |
---|
175 | EXCEPT |
---|
176 | SELECT pais_id, codigo_armonizado_id |
---|
177 | FROM comun_comercio |
---|
178 | WHERE pais_relacion_id = %s AND flujo_comercial = %s |
---|
179 | ) |
---|
180 | ) |
---|
181 | AND cc.pais_relacion_id in |
---|
182 | (SELECT id FROM comun_pais WHERE anyo_inclusion is NULL) |
---|
183 | GROUP BY cc.pais_id, cp.iso3166_3 |
---|
184 | ORDER BY cc.pais_id |
---|
185 | """ |
---|
186 | try: |
---|
187 | cursor = connection.cursor() |
---|
188 | |
---|
189 | cursor.execute(query, [pais, flujo_comercial, flujo_comercial, pais, |
---|
190 | flujo_comercial]) |
---|
191 | |
---|
192 | filas = dictfetchall(cursor) |
---|
193 | |
---|
194 | for fila in filas: |
---|
195 | sum_monto = 0.0 |
---|
196 | |
---|
197 | fila['monto'] = fila['monto'] / 100000 |
---|
198 | |
---|
199 | sum_monto = sum_monto + fila['monto'] |
---|
200 | |
---|
201 | for fila in filas: |
---|
202 | fila['porcentaje'] = 100 * fila['monto'] / sum_monto |
---|
203 | |
---|
204 | except Exception as e: |
---|
205 | logger.fatal('Exception ejecutando consulta de reporte general: %s' % e) |
---|
206 | print e |
---|
207 | raise e |
---|
208 | |
---|
209 | return filas |
---|
210 | |
---|
211 | @login_required |
---|
212 | def complementariedad(request): |
---|
213 | if request.method == 'POST': |
---|
214 | formu = FormularioComplementariedad(request.POST) |
---|
215 | if formu.is_valid(): |
---|
216 | pais = formu.cleaned_data['pais'] |
---|
217 | |
---|
218 | flujo_comercial = formu.cleaned_data['flujo_comercial'] |
---|
219 | |
---|
220 | codigos_armonizados = formu.cleaned_data['codigo_armonizado'] |
---|
221 | |
---|
222 | paises_relacion = formu.cleaned_data['paises_relacion'] |
---|
223 | |
---|
224 | return render_to_response('complementariedad/resultado.html',context_instance = RequestContext(request)) |
---|
225 | else: |
---|
226 | formu = FormularioComplementariedad() |
---|
227 | |
---|
228 | return render_to_response('complementariedad/complementariedad.html',{'FormularioComplementariedad':formu}, context_instance = RequestContext(request)) |
---|