source: ecoalba/apps/complementariedad/views.py @ 1744544

Last change on this file since 1744544 was 1744544, checked in by Alejandro <amujica@…>, 10 years ago

cambio en nombre de funcion de reporte de complementariedad

  • Property mode set to 100755
File size: 8.9 KB
Line 
1from django.shortcuts import *
2from django.contrib.auth.decorators import login_required
3from django.template.context import Context, RequestContext
4from django.template import Template,loader
5from django.http import HttpResponse,  HttpResponseRedirect
6from comun.utilidades import dictfetchall
7
8from complementariedad.forms import *
9
10def 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
61def 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
113def 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
157def 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
212def 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))
Note: See TracBrowser for help on using the repository browser.