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