Changeset 6c20a0f in sicp for apps


Ignore:
Timestamp:
Oct 27, 2015, 12:50:16 PM (9 years ago)
Author:
Ing. Roldan D. Vargas G <rvargas@…>
Branches:
master
Children:
61dfe29
Parents:
2cbc62f
Message:

se agregan instrucciones para mostrar datos de producción, utilización e importación en la matriz ip

File:
1 edited

Legend:

Unmodified
Added
Removed
  • apps/simulacion/matrizip/views.py

    r2e0c3e2 r6c20a0f  
    2121
    2222from django.template.context import RequestContext
     23from django.http import HttpResponse
    2324from django.shortcuts import render_to_response
    2425from 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
    2529from apps.comun.functions import render_cadena
    2630from apps.comun.models import CodigoAran
     31from apps.comun.constantes import MSG_NOT_AJAX
    2732from apps.simulacion.models import ConvertirActividadACIIU, ConvertirCodigoArancelario
    2833from apps.simulacion.sigesic.models import UnidadEconomica, Producto
    29 from apps.simulacion.matrizip.models import ProduccionMIP
     34from apps.simulacion.matrizip.models import ProduccionMIP, UtilizacionMIP, ActividadesImportacion, \
     35    Productos as ProductosMIP
    3036import os
     37import json
     38
    3139
    3240def graficar_matriz(request):
     
    92100        "username":request.user, "existe":existe,"rif":rif,'ahora':ahora, 'matriz':True, 'prod':pr
    93101    }, context_instance=RequestContext(request))
     102
     103
     104def datos_produccion(request):
     105    try:
     106        if not request.is_ajax():
     107            return HttpResponse(json.dumps({'resultado': False, 'error': MSG_NOT_AJAX}))
     108
     109        id_prod = request.GET.get('id_prod', None)
     110        rif = request.GET.get('rif', None)
     111
     112        if not id_prod or not rif:
     113            return HttpResponse(json.dumps({
     114                'resultado': False, 'error': _(u"No existe datos de producción en la matriz insumo / producto.")
     115            }))
     116
     117        datos = {
     118            'produccion': [],
     119            'utilizacion': [],
     120            'importacion': []
     121        }
     122
     123        ue = UnidadEconomica.objects.using('sigesic').get(rif=rif)
     124        ae_ciiu = ue.actividadciiu_set.get(activo=True, principal=True)
     125        actividad = {'codigo': ae_ciiu.ciiu_id, 'descripcion': ae_ciiu.ciiu.descripcion}
     126        pr = Producto.objects.using('sigesic').get(pk=id_prod)
     127        cod_aran = CodigoAran.objects.get(pk=pr.codigo_aran_id)
     128        ca = ConvertirCodigoArancelario.objects.get(codigo=cod_aran)
     129
     130        produccion_total, utilizacion_total, importacion_total = 0, 0, 0
     131
     132        if ca:
     133            cod_pr = ca.codigo_producto
     134            for prdlen in range(1,3):
     135                if cod_pr.__len__() <= prdlen:
     136                    cod_pr = "0%s" % cod_pr
     137
     138
     139            actividades = lambda x, y: [
     140                p_mip.codigo_actividad_id
     141                for p_mip in get_model('matrizip', y).objects.using('matrizip_1997').filter(codigo_producto=x)
     142            ]
     143            productos = lambda x, y: [
     144                p.codigo_producto_id
     145                for p in get_model('matrizip', y).objects.using('matrizip_1997').filter(codigo_actividad__in=x).distinct('codigo_producto')
     146            ]
     147            produccion_total = ProduccionMIP.objects.using('matrizip_1997').filter(codigo_producto__in=productos(actividades(cod_pr,'ProduccionMIP'),'ProduccionMIP')).aggregate(total_produccion=Sum('prod_mill_bs'))
     148            for prdmip in ProduccionMIP.objects.using('matrizip_1997').filter(codigo_producto__in=productos(actividades(cod_pr,'ProduccionMIP'),'ProduccionMIP')).distinct('codigo_producto'):
     149                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')):
     150                    datos['produccion'].append(
     151                        {
     152                            'total_produccion': str(p['total_produccion']),
     153                            'codigo_producto': str(p['codigo_producto']),
     154                            'descripcion': ProductosMIP.objects.using('matrizip_1997').get(codigo_producto=p['codigo_producto']).descripcion,
     155                            'porcentaje': str(round((p['total_produccion'] * 100) / produccion_total['total_produccion'], 2))
     156                        }
     157                    )
     158
     159            utilizacion_total = UtilizacionMIP.objects.using('matrizip_1997').filter(codigo_producto__in=productos(actividades(cod_pr,'UtilizacionMIP'),'UtilizacionMIP')).aggregate(total_utilizacion=Sum('util_mill_bs'))
     160            for utlmip in UtilizacionMIP.objects.using('matrizip_1997').filter(codigo_producto__in=productos(actividades(cod_pr,'UtilizacionMIP'),'UtilizacionMIP')).distinct('codigo_producto'):
     161                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')):
     162                    datos['utilizacion'].append(
     163                        {
     164                            'total_utilizacion': str(u['total_utilizacion']),
     165                            'codigo_producto': str(u['codigo_producto']),
     166                            'descripcion': ProductosMIP.objects.using('matrizip_1997').get(codigo_producto=u['codigo_producto']).descripcion,
     167                            'porcentaje': str(round((u['total_utilizacion'] * 100) / utilizacion_total['total_utilizacion'], 2))
     168                        }
     169                    )
     170
     171            importacion_total = ActividadesImportacion.objects.using('matrizip_1997').filter(codigo_producto__in=productos(actividades(cod_pr,'ActividadesImportacion'),'ActividadesImportacion')).aggregate(total_importacion=Sum('monto_mill_bs'))
     172            for imp in ActividadesImportacion.objects.using('matrizip_1997').filter(codigo_producto__in=productos(actividades(cod_pr,'ActividadesImportacion'),'ActividadesImportacion')).distinct('codigo_producto'):
     173                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')):
     174                    datos['importacion'].append(
     175                        {
     176                            'total_importacion': str(i['total_importacion']),
     177                            'codigo_producto': str(i['codigo_producto']),
     178                            'descripcion': ProductosMIP.objects.using('matrizip_1997').get(codigo_producto=i['codigo_producto']).descripcion,
     179                            'porcentaje': str(round((i['total_importacion'] * 100) / importacion_total['total_importacion'], 2))
     180                        }
     181                    )
     182
     183
     184
     185        return HttpResponse(json.dumps({
     186            'resultado': True, 'ae_ciiu': actividad, 'produccion': datos['produccion'],
     187            'produccion_total': str(produccion_total['total_produccion']),
     188            'utilizacion': datos['utilizacion'], 'utilizacion_total': str(utilizacion_total['total_utilizacion']),
     189            'importacion': datos['importacion'], 'importacion_total': str(importacion_total['total_importacion'])
     190        }))
     191
     192    except Exception, e:
     193        print e
     194        #logger.error(_(u"Error al procesar la solicitud de simulación. Detalles: %s") % e)
     195        return HttpResponse(json.dumps({'resultado': False, 'error': e}))
Note: See TracChangeset for help on using the changeset viewer.