source: sicp/apps/simulacion/ajax.py @ b9cfa95

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

se agrega formulario para la modificación de la cadena productiva, se agregan acciones para los botones de editar y deshacer cadena de producción, se agregan funciones para la edición de las cadenas productivas en las que se eliminan los nodos de las vistas de árbol de la cadena.

Modificación en el modelo que registra las cadenas productivas modificadas, agregando más campos para mayor detalle

Se agregan variables javascript para los mensajes de las ventanas emergentes, y se agregan templates de formularios pàra la modificación de la cadena productiva

  • Property mode set to 100644
File size: 6.0 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.ajax
8#
9# Funciones AJAX para el módulo de simulación
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 19-06-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__    = "Funciones AJAX para el módulo de simulación"
21
22from django.http import HttpResponse
23from django.contrib.auth.decorators import login_required
24from django.utils.translation import ugettext_lazy as _
25from datetime import date
26
27from apps.comun.constantes import MSG_NOT_AJAX
28from apps.comun.functions import render_cadena
29from apps.simulacion.functions import remove_nodos_cadena
30from apps.simulacion.models import Cadena
31
32import logging
33import json
34import os
35
36logger = logging.getLogger(__name__)
37
38@login_required()
39def get_node_sim(request):
40    """!
41    Función que permite obtener los datos de simulación de un nodo seleccionado
42
43    @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
44    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
45    @date 11-06-2015
46    @param[in] request Objeto que contiene la petición
47    @return Devuelve los datos del nodo consultado de la cadena simulada
48    """
49    try:
50        if not request.is_ajax():
51            return HttpResponse(json.dumps({'resultado': False, 'error': MSG_NOT_AJAX}))
52
53        nodo_id = request.GET.get('nodo_id', None)
54
55        if not nodo_id:
56            return HttpResponse(json.dumps({
57                'resultado': False, 'error': _(u"Debe seleccionar un nodo para mostrar la información.")
58            }))
59
60        usr = str(request.user) + "sim"
61        cadena = render_cadena(
62            usr, findgraph="simulated_graph", findnodes="simulated_nodes", findarcs="simulated_arcs",
63            findallnode="simulated_node", findallarc="simulated_arc"
64        )
65
66        n = cadena['node'][int(nodo_id)]
67        states = n.find('simulated_states')
68        state = states.findall('simulated_state')
69
70        ## Inicialización de variables para los datos relacionados al nodo
71        ue, rif, producto, cod_aran, attrib_pr, unid_medida = n.attrib['company_name'], n.attrib['company_rif'], \
72                                                              n.attrib['product_name'], n.attrib['tariff_code'], \
73                                                              'production', n.attrib['measurement_unit']
74
75        ## Incialización de variable para determinar la provenencia del producto (importación o producción)
76        tipo_pr, linecolor, empleados_leyenda, costos_leyenda = 'producción', '#2675ff', "empleados", \
77                                                                ["costo mano de obra", "costo insumos",
78                                                                "otros costos", "costo total"]
79        precios_leyenda = "precio"
80
81        if n.attrib['company_nationality'] == "E":
82            attrib_pr = 'imports'
83            tipo_pr = 'importación'
84            linecolor = '#edc240'
85
86        ## Incialización de variables para los datos relacionados a la producción
87        produccion, employees, cost1, cost2, cost3, cost4, price = [], [], [], [], [], [], []
88
89        for s in state:
90            produccion.append(s.attrib[attrib_pr])
91
92            employees.append(s.attrib.get('num_employees', 0))
93            cost1.append(float(s.attrib.get('administrative_staff_cost', 0))+float(s.attrib.get('labor_cost', 0)))
94            cost2.append(s.attrib.get('input_cost', 0))
95            cost3.append(s.attrib.get('other_cost', 0))
96            cost4.append(s.attrib.get('total_cost', 0))
97            price.append(s.attrib.get('price', 0))
98
99        return HttpResponse(json.dumps({
100            'resultado': True, 'produccion': produccion, 'employees': employees, 'cost1': cost1, 'cost2': cost2,
101            'cost3': cost3, 'cost4': cost4, 'price': price, 'ue': ue, 'rif': rif, 'producto': producto,
102            'cod_aran': cod_aran, 'tipo_pr': tipo_pr, 'unid_medida': unid_medida, 'attrib_pr': attrib_pr,
103            'linecolor': linecolor, 'empleados_leyenda': empleados_leyenda, 'precios_leyenda': precios_leyenda,
104            'costos_leyenda': costos_leyenda
105        }))
106
107    except Exception, e:
108        return HttpResponse(json.dumps({'resultado': False, 'error': e}))
109
110
111@login_required()
112def modificar_cadena(request):
113    try:
114        if not request.is_ajax():
115            return HttpResponse(json.dumps({'resultado': False, 'error': MSG_NOT_AJAX}))
116
117        producto_id = request.GET.getlist('producto_id', None) ## lista de productos a eliminar de la cadena
118        fuente = request.GET.get('fuente', None)
119        anho = request.GET.get('anho', None)
120
121        if not producto_id and not fuente:
122            return HttpResponse(json.dumps({
123                'resultado': False, 'error': _(u"No existe la cadena del producto a modificar.")
124            }))
125
126        archivo_xml = 'tmp/%s.xml' % request.username
127
128        f = open(archivo_xml, 'r')
129        xml_original = f.read()
130        f.close()
131
132        remove_nodos_cadena(producto_id, archivo_xml)
133
134        f = open(archivo_xml, 'r')
135        xml_modificado = f.read()
136        f.close()
137
138        cp = Cadena(nombre='', autor=request.username, fuente=fuente, anho=anho, producto_id=producto_id)
139        cp.cadena_original = cp.cifrar_cadena(xml_original)
140        cp.cadena = cp.cifrar_cadena(xml_modificado)
141        cp.save()
142
143
144
145        #remover nodos y arcos de la cadena modificada
146
147        #os.remove(archivo_xml)
148
149        return HttpResponse(json.dumps({'resultado': True}))
150
151    except Exception, e:
152        return HttpResponse(json.dumps({'resultado': False, 'error': e}))
Note: See TracBrowser for help on using the repository browser.