1 | from django.shortcuts import render |
---|
2 | from django.contrib.auth.decorators import login_required |
---|
3 | from django.template.context import Context, RequestContext |
---|
4 | from django.shortcuts import render_to_response |
---|
5 | from django.template import Template,loader |
---|
6 | from django.http import HttpResponse |
---|
7 | from geraldo import Report |
---|
8 | from geraldo.generators import PDFGenerator |
---|
9 | from datetime import date |
---|
10 | from django.utils.translation import ugettext_lazy as _l, ugettext as _ |
---|
11 | from settings import PATH, DEBUG |
---|
12 | from StringIO import StringIO |
---|
13 | import csv |
---|
14 | |
---|
15 | from comun.paginador import Paginador |
---|
16 | from comun.models import Pais, CodigoArmonizado, Idioma, Moneda, UnidadMedida, Comercio |
---|
17 | from notificaciones.views import verificar_errores_carga_masiva |
---|
18 | from carga.forms import CargaMasivaForm, cargarPaises |
---|
19 | from carga.tasks import cargar_comercio_exterior, cargar_produccion_nacional |
---|
20 | |
---|
21 | @login_required |
---|
22 | def flujo(request): |
---|
23 | paises = cargarPaises(Pais.objects.exclude(anyo_inclusion__exact = None)) |
---|
24 | |
---|
25 | form = CargaMasivaForm(paises = paises) |
---|
26 | |
---|
27 | errores, pais, mes, anyo, flujo = verificar_errores_carga_masiva(request) |
---|
28 | |
---|
29 | contexto = {'form': form, 'error_carga_masiva': errores, 'pais': pais, 'numero_mes': mes, 'anyo': anyo, 'flujo': flujo} |
---|
30 | |
---|
31 | return render_to_response('carga/carga_flujo_comercial.html', contexto, context_instance = RequestContext(request)) |
---|
32 | #return render_to_response('carga/carga_flujo_comercial.html', {'form': form}, context_instance = RequestContext(request)) |
---|
33 | |
---|
34 | @login_required |
---|
35 | def cargar_archivo(request): |
---|
36 | paises = cargarPaises(Pais.objects.exclude(anyo_inclusion__exact = None)) |
---|
37 | |
---|
38 | if request.method == 'POST': |
---|
39 | form = CargaMasivaForm(data = request.POST, files=request.FILES, paises = paises) |
---|
40 | if form.is_valid(): |
---|
41 | usuario = request.user |
---|
42 | pais = form.cleaned_data['pais'] |
---|
43 | mes = form.cleaned_data['mes'] |
---|
44 | anyo = form.cleaned_data['anyo'] |
---|
45 | archivo = request.FILES['archivo'].read() |
---|
46 | flujo_comercial = int(form.cleaned_data['flujo_comercial']) |
---|
47 | |
---|
48 | if flujo_comercial == 1: |
---|
49 | if DEBUG: |
---|
50 | cargar_produccion_nacional(usuario, pais, anyo, mes, archivo) |
---|
51 | else: |
---|
52 | cargar_produccion_nacional.delay(usuario, pais, anyo, mes, archivo) |
---|
53 | elif flujo_comercial == 2: |
---|
54 | if DEBUG: |
---|
55 | cargar_comercio_exterior(usuario, pais, anyo, mes, archivo) |
---|
56 | else: |
---|
57 | cargar_comercio_exterior.delay(usuario, pais, anyo, mes, archivo) |
---|
58 | else: |
---|
59 | form = CargaMasivaForm(paises = paises) |
---|
60 | |
---|
61 | errores, pais, mes, anyo, flujo = verificar_errores_carga_masiva(request) |
---|
62 | |
---|
63 | contexto = {'form': form, 'error_carga_masiva': errores, 'pais': pais, 'numero_mes': mes, 'anyo': anyo, 'flujo': flujo} |
---|
64 | |
---|
65 | return render_to_response('carga/carga_flujo_comercial.html', contexto, context_instance = RequestContext(request)) |
---|
66 | |
---|
67 | @login_required |
---|
68 | def descargar_archivo(request, iso3166_3, mes, anyo, flujo): |
---|
69 | """ |
---|
70 | Vista para generar un archivo CSV para la descarga |
---|
71 | """ |
---|
72 | |
---|
73 | flujo_comercial = [2] |
---|
74 | |
---|
75 | if int(flujo) == 2: |
---|
76 | flujo_comercial = [0, 1] |
---|
77 | |
---|
78 | flujos_comerciales = Comercio.objects.filter(pais__iso3166_3=iso3166_3, mes=mes, anyo=anyo, flujo_comercial__in=flujo_comercial) |
---|
79 | |
---|
80 | salida = StringIO() |
---|
81 | #Creamos el archivo csv |
---|
82 | flujo_csv = csv.writer(salida, delimiter=';', quotechar='"') |
---|
83 | |
---|
84 | for flujo_comercial in flujos_comerciales: |
---|
85 | fila_csv = [flujo_comercial.flujo_comercial] |
---|
86 | fila_csv.append(flujo_comercial.codigo_armonizado.codigo) |
---|
87 | fila_csv.append(flujo_comercial.pais_relacion.iso3166_3) |
---|
88 | fila_csv.append(flujo_comercial.unidad_medida.simbolo) |
---|
89 | fila_csv.append(flujo_comercial.cantidad) |
---|
90 | fila_csv.append(flujo_comercial.monto) |
---|
91 | |
---|
92 | flujo_csv.writerow(fila_csv) |
---|
93 | |
---|
94 | nombre_archivo = '%s_%i_%i_%i' % (iso3166_3, int(mes), int(anyo), int(flujo)) |
---|
95 | |
---|
96 | # Definimos el tipo de documento que vamos a enviar al usuario |
---|
97 | response = HttpResponse(mimetype='text/csv') |
---|
98 | response['Content-Disposition'] = 'attachment; filename = %s' % nombre_archivo |
---|
99 | response.write(salida.getvalue()) |
---|
100 | return response |
---|