source: sicp/apps/simulacion/matrizip/views.py @ 61dfe29

Last change on this file since 61dfe29 was 61dfe29, checked in by Ing. Roldan D. Vargas G <rvargas@…>, 9 years ago

documentación de función

  • Property mode set to 100644
File size: 10.7 KB
Line 
1# coding=utf-8
2"""
3Simulador Integral de Cadenas Productivas (SICP)
4
5Copyleft (@) 2015 CENDITEL nodo Mérida - https://miv.cenditel.gob.ve/simulacion/
6"""
7## @package apps.simulacion.matrizip.views
8#
9# Clases y funciones a implementar en las vistas del módulo de consulta de la matriz insumo / producto
10# @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
11# @author <a href='http://www.cenditel.gob.ve'>Centro Nacional de Desarrollo e Investigación en Tecnologías Libres
12# (CENDITEL) nodo Mérida - Venezuela</a>
13# @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
14# @date 07-10-2015
15# @version 3.0.0
16
17## Muestra el autor del script cuando es invocado
18__author__ = "Ing. Roldan Vargas (rvargas at cenditel.gob.ve)"
19## Muestra documentación breve sobre el script
20__doc__    = "Clases y funciones a implementar en las vistas del módulo de consulta de la matriz insumo / producto"
21
22from django.template.context import RequestContext
23from django.http import HttpResponse
24from django.shortcuts import render_to_response
25from django.conf import settings
26from django.utils.translation import ugettext_lazy as _
27from django.db.models import Sum
28from django.db.models.loading import get_model
29from apps.comun.functions import render_cadena
30from apps.comun.models import CodigoAran
31from apps.comun.constantes import MSG_NOT_AJAX
32from apps.simulacion.models import ConvertirActividadACIIU, ConvertirCodigoArancelario
33from apps.simulacion.sigesic.models import UnidadEconomica, Producto
34from apps.simulacion.matrizip.models import ProduccionMIP, UtilizacionMIP, ActividadesImportacion, \
35    Productos as ProductosMIP
36import os
37import json
38
39
40def graficar_matriz(request):
41    """!
42    Función que ejecuta la instrucción necesaria para mostrar el correspondiente gráfico de la Matriz Insumo/Producto
43    asociada al escenario en estudio
44
45    @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
46    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
47    @date 19-10-2015
48    @param request <b>{object}</b> Objeto que contiene la petición
49    @return Devuelve el correspondiente gráfico de la matriz insumo/producto a mostrar
50    """
51    rif = request.GET['rif']
52    id_prod = request.GET['id_prod']
53    ahora = request.GET.get('ahora')
54
55    existe, cod_act = None, None
56
57    pr = Producto.objects.using('sigesic').get(pk=id_prod)
58
59    try:
60        cod_aran = CodigoAran.objects.get(pk=pr.codigo_aran_id)
61        ca = ConvertirCodigoArancelario.objects.filter(codigo=cod_aran)
62
63        if ca:
64            cod_pr = ca[0].codigo_producto
65            if cod_pr.__len__() == 1:
66                cod_pr = "00%s" % cod_pr
67            elif cod_pr.__len__() == 2:
68                cod_pr = "0%s" % cod_pr
69
70            if ProduccionMIP.objects.using('matrizip_1997').filter(codigo_producto=cod_pr):
71                existe = True
72
73            if existe:
74                salida = os.path.join(settings.BASE_DIR, "tmp/%s_%s.svg" % (str(request.user),ahora))
75
76                narriba = '2'
77                nabajo = '2'
78                os.system("cd " + os.path.join(settings.BASE_DIR, "tmp/"))
79                os.system(
80                    os.path.join(settings.BASE_DIR, "apis/chains/print_prod_chain_act") +
81                    " --host=" + settings.DATABASES['matrizip_1997']['HOST'] +
82                    " --port=" + settings.DATABASES['matrizip_1997']['PORT'] +
83                    " --username=" + settings.DATABASES['matrizip_1997']['USER'] +
84                    " --password=" +settings.DATABASES['matrizip_1997']['PASSWORD'] +
85                    " --dbname=" + settings.DATABASES['matrizip_1997']['NAME'] +
86                    " --levelsup=" + narriba + " --levelsdown=" + nabajo +
87                    " --output=" + str(request.user) + "_" + ahora + " PROD " + cod_pr
88                )
89                archivo = str(request.user) + "_" + ahora + ".svg "
90                os.system(
91                    "mv -f " + os.path.join(settings.BASE_DIR, archivo) + os.path.join(settings.BASE_DIR, "tmp/")+";"+
92                    "chmod -R 755 "+ os.path.join(settings.BASE_DIR, "tmp/")
93                )
94
95                cadena = render_cadena(str(request.user))
96    except Exception, e:
97        print e
98
99    return render_to_response("grafico.html", {
100        "username":request.user, "existe":existe,"rif":rif,'ahora':ahora, 'matriz':True, 'prod':pr
101    }, context_instance=RequestContext(request))
102
103
104def datos_produccion(request):
105    """!
106    Función que ejecuta la instrucción necesaria para mostrar datos de producción, utilización e importación de la
107    Matriz Insumo / Producto asociada al escenario en estudio
108
109    @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
110    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
111    @date 27-10-2015
112    @param request <b>{object}</b> Objeto que contiene la petición
113    @return Devuelve un JSON con los datos de la Matriz Insumo / Producto
114    """
115    try:
116        if not request.is_ajax():
117            return HttpResponse(json.dumps({'resultado': False, 'error': MSG_NOT_AJAX}))
118
119        id_prod = request.GET.get('id_prod', None)
120        rif = request.GET.get('rif', None)
121
122        if not id_prod or not rif:
123            return HttpResponse(json.dumps({
124                'resultado': False, 'error': _(u"No existe datos de producción en la matriz insumo / producto.")
125            }))
126
127        datos = {
128            'produccion': [],
129            'utilizacion': [],
130            'importacion': []
131        }
132
133        ue = UnidadEconomica.objects.using('sigesic').get(rif=rif)
134        ae_ciiu = ue.actividadciiu_set.get(activo=True, principal=True)
135        actividad = {'codigo': ae_ciiu.ciiu_id, 'descripcion': ae_ciiu.ciiu.descripcion}
136        pr = Producto.objects.using('sigesic').get(pk=id_prod)
137        cod_aran = CodigoAran.objects.get(pk=pr.codigo_aran_id)
138        ca = ConvertirCodigoArancelario.objects.get(codigo=cod_aran)
139
140        produccion_total, utilizacion_total, importacion_total = 0, 0, 0
141
142        if ca:
143            cod_pr = ca.codigo_producto
144            for prdlen in range(1,3):
145                if cod_pr.__len__() <= prdlen:
146                    cod_pr = "0%s" % cod_pr
147
148
149            actividades = lambda x, y: [
150                p_mip.codigo_actividad_id
151                for p_mip in get_model('matrizip', y).objects.using('matrizip_1997').filter(codigo_producto=x)
152            ]
153            productos = lambda x, y: [
154                p.codigo_producto_id
155                for p in get_model('matrizip', y).objects.using('matrizip_1997').filter(codigo_actividad__in=x).distinct('codigo_producto')
156            ]
157            produccion_total = ProduccionMIP.objects.using('matrizip_1997').filter(codigo_producto__in=productos(actividades(cod_pr,'ProduccionMIP'),'ProduccionMIP')).aggregate(total_produccion=Sum('prod_mill_bs'))
158            for prdmip in ProduccionMIP.objects.using('matrizip_1997').filter(codigo_producto__in=productos(actividades(cod_pr,'ProduccionMIP'),'ProduccionMIP')).distinct('codigo_producto'):
159                for p in ProduccionMIP.objects.using('matrizip_1997').filter(codigo_producto=prdmip.codigo_producto_id).values('codigo_producto').annotate(total_produccion=Sum('prod_mill_bs')):
160                    datos['produccion'].append(
161                        {
162                            'total_produccion': str(p['total_produccion']),
163                            'codigo_producto': str(p['codigo_producto']),
164                            'descripcion': ProductosMIP.objects.using('matrizip_1997').get(codigo_producto=p['codigo_producto']).descripcion,
165                            'porcentaje': str(round((p['total_produccion'] * 100) / produccion_total['total_produccion'], 2))
166                        }
167                    )
168
169            utilizacion_total = UtilizacionMIP.objects.using('matrizip_1997').filter(codigo_producto__in=productos(actividades(cod_pr,'UtilizacionMIP'),'UtilizacionMIP')).aggregate(total_utilizacion=Sum('util_mill_bs'))
170            for utlmip in UtilizacionMIP.objects.using('matrizip_1997').filter(codigo_producto__in=productos(actividades(cod_pr,'UtilizacionMIP'),'UtilizacionMIP')).distinct('codigo_producto'):
171                for u in UtilizacionMIP.objects.using('matrizip_1997').filter(codigo_producto=utlmip.codigo_producto_id).values('codigo_producto').annotate(total_utilizacion=Sum('util_mill_bs')):
172                    datos['utilizacion'].append(
173                        {
174                            'total_utilizacion': str(u['total_utilizacion']),
175                            'codigo_producto': str(u['codigo_producto']),
176                            'descripcion': ProductosMIP.objects.using('matrizip_1997').get(codigo_producto=u['codigo_producto']).descripcion,
177                            'porcentaje': str(round((u['total_utilizacion'] * 100) / utilizacion_total['total_utilizacion'], 2))
178                        }
179                    )
180
181            importacion_total = ActividadesImportacion.objects.using('matrizip_1997').filter(codigo_producto__in=productos(actividades(cod_pr,'ActividadesImportacion'),'ActividadesImportacion')).aggregate(total_importacion=Sum('monto_mill_bs'))
182            for imp in ActividadesImportacion.objects.using('matrizip_1997').filter(codigo_producto__in=productos(actividades(cod_pr,'ActividadesImportacion'),'ActividadesImportacion')).distinct('codigo_producto'):
183                for i in ActividadesImportacion.objects.using('matrizip_1997').filter(codigo_producto=imp.codigo_producto_id).values('codigo_producto').annotate(total_importacion=Sum('monto_mill_bs')):
184                    datos['importacion'].append(
185                        {
186                            'total_importacion': str(i['total_importacion']),
187                            'codigo_producto': str(i['codigo_producto']),
188                            'descripcion': ProductosMIP.objects.using('matrizip_1997').get(codigo_producto=i['codigo_producto']).descripcion,
189                            'porcentaje': str(round((i['total_importacion'] * 100) / importacion_total['total_importacion'], 2))
190                        }
191                    )
192
193
194
195        return HttpResponse(json.dumps({
196            'resultado': True, 'ae_ciiu': actividad, 'produccion': datos['produccion'],
197            'produccion_total': str(produccion_total['total_produccion']),
198            'utilizacion': datos['utilizacion'], 'utilizacion_total': str(utilizacion_total['total_utilizacion']),
199            'importacion': datos['importacion'], 'importacion_total': str(importacion_total['total_importacion'])
200        }))
201
202    except Exception, e:
203        print e
204        #logger.error(_(u"Error al procesar la solicitud de simulación. Detalles: %s") % e)
205        return HttpResponse(json.dumps({'resultado': False, 'error': e}))
Note: See TracBrowser for help on using the repository browser.