1 | # coding=utf-8 |
---|
2 | """ |
---|
3 | Simulador Integral de Cadenas Productivas (SICP) |
---|
4 | |
---|
5 | Copyleft (@) 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 | |
---|
22 | from django.http import HttpResponse |
---|
23 | from django.contrib.auth.decorators import login_required |
---|
24 | from django.utils.translation import ugettext_lazy as _ |
---|
25 | from datetime import date |
---|
26 | |
---|
27 | from apps.comun.constantes import MSG_NOT_AJAX |
---|
28 | from apps.comun.functions import render_cadena |
---|
29 | from apps.simulacion.functions import remove_nodos_cadena |
---|
30 | from apps.simulacion.models import Cadena |
---|
31 | |
---|
32 | import logging |
---|
33 | import json |
---|
34 | import os |
---|
35 | |
---|
36 | logger = logging.getLogger(__name__) |
---|
37 | |
---|
38 | @login_required() |
---|
39 | def 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() |
---|
112 | def 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})) |
---|