- Timestamp:
- Aug 4, 2015, 6:04:37 PM (9 years ago)
- Branches:
- master
- Children:
- 315a7c8
- Parents:
- 5d9a45d
- Location:
- apps/simulacion
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
apps/simulacion/ajax.py
rb2a57af rb9cfa95 24 24 from django.utils.translation import ugettext_lazy as _ 25 25 from datetime import date 26 26 27 from apps.comun.constantes import MSG_NOT_AJAX 27 28 from apps.comun.functions import render_cadena 29 from apps.simulacion.functions import remove_nodos_cadena 30 from apps.simulacion.models import Cadena 28 31 29 32 import logging … … 104 107 except Exception, e: 105 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})) -
apps/simulacion/functions.py
r476f140 rb9cfa95 20 20 __doc__ = "Funciones a implementar en la simulación de cadenas productivas" 21 21 22 from xml.etree.ElementTree import ElementTree 22 23 from apps.simulacion.sigesic.models import Producto, Insumo, ProductoInsumo, ConsumoPreciosR 24 25 def remove_nodos_cadena(producto_id, archivo_xml): 26 tree = ElementTree() 27 tree.parse(archivo_xml) 28 graph = tree.findall('graph') 29 for g in graph: 30 nodes = g.findall('nodes') 31 arcs = g.findall('arcs') 32 for n in nodes: 33 node = n.findall('node') 34 for sn in node: 35 if sn.attrib['product_id'] in producto_id: 36 n.remove(sn) 37 for a in arcs: 38 arc = a.findall('arc') 39 for sa in arc: 40 if sa.attrib['input_id'] in producto_id: 41 a.remove(sa) 42 43 tree.write(archivo_xml) 23 44 24 45 -
apps/simulacion/models.py
rb2a57af rb9cfa95 24 24 from django.utils.translation import ugettext_lazy as _ 25 25 26 import base64 27 26 28 class Cadena(models.Model): 27 29 """! … … 40 42 autor = models.ForeignKey(User, verbose_name=_(u"Autor")) 41 43 44 ## Fuente de la Cadena: SIGESIC, ENCUESTA INDUSTRIAL o MATRIZ INSUMO / PRODUCTO 45 fuente = models.CharField(max_length=2, verbose_name=_(u"Fuente de la Cadena")) 46 47 ## Año de la consulta de la cadena productiva 48 anho = models.CharField(max_length=4, verbose_name=_(u"Año de consulta")) 49 50 ## Identificador del producto al cual se le modifico la estructura de la cadena de producción 51 producto_id = models.IntegerField(verbose_name=_(u"ID del producto")) 52 42 53 ## Fecha y hora en que fue registrada la cadena productiva 43 54 fecha = models.DateTimeField(auto_now_add=True, verbose_name=_(u"Fecha de Modificación")) 44 55 45 ## Ruta del archivo xml de la cadena modificada 46 cadena = models.FileField(upload_to="cadenas", verbose_name=_(u"Cadena Productiva")) 56 ## Contenido XML de la cadena productiva original 57 cadena_original = models.TextField(verbose_name=_(u"Cadena Productiva Original")) 58 59 ## Contenido XML de la cadena productiva a guardar 60 cadena = models.TextField(verbose_name=_(u"Cadena Productiva Modificada")) 47 61 48 62 def __unicode__(self): … … 56 70 """ 57 71 return self.nombre 72 73 def cifrar_cadena(self, data): 74 """! 75 Método que cifra el contenido xml modificado de la cadena productiva a registrar en Base de Datos 76 77 @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve) 78 @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 79 @date 30-07-2015 80 @param data <b>{string}</b> Contenido del xml a cifrar 81 @return Devuelve la cadena productiva cifrada 82 """ 83 xml_crypt = base64.encodestring(data) 84 return xml_crypt 85 86 def descifrar_cadena(self): 87 """! 88 Método que descifra la cadena productiva registrada en base de datos para generar un archivo xml 89 90 @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve) 91 @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 92 @date 30-07-2015 93 @return Devuelve el contenido xml de la cadena descifrada 94 """ 95 xml_content = base64.decodestring(self.cadena) 96 return xml_content 58 97 59 98 class Meta: -
apps/simulacion/templates/cadena_productiva.html
r5d9a45d rb9cfa95 194 194 text: node_raiz+" ({% trans 'Atráz' %})", 195 195 state: { expanded: false }, 196 color: "#000000", 197 backColor: "#FFFFFF", 196 198 tags: [{ 197 199 pr_index: '0', … … 217 219 { 218 220 text: "{{ n.attrib.company_rif }} {{ n.attrib.company_name }} - {{ n.attrib.product_name }}", 221 color: "#000000", 222 backColor: "#FFFFFF", 219 223 tags: [{ 220 224 pr_index: '{{ n.attrib.position }}', … … 243 247 text: node_raiz+" ({% trans 'Adelante' %})", 244 248 state: { expanded: false }, 249 color: "#000000", 250 backColor: "#FFFFFF", 245 251 tags: [{ 246 252 pr_index: '0', … … 266 272 { 267 273 text: "{{ n.attrib.company_rif }} {{ n.attrib.company_name }} - {{ n.attrib.product_name }}", 274 color: "#000000", 275 backColor: "#FFFFFF", 268 276 tags: [{ 269 277 pr_index: '{{ n.attrib.position }}', … … 295 303 <div class="divider-vertical-20"></div> 296 304 <div class="col-xs-2 col-sm-2 col-md-2 text-right fuente-10"> 297 <a href="#" data-toggle="tooltip" class="tip-top" 305 <a href="#" data-toggle="tooltip" class="tip-top" onclick="eliminar_nodos_tree($('#list_pr_id').val())" 298 306 title="{% trans 'Pulse sobre esta opción para editar la cadena productiva' %}"> 299 307 {% trans 'Editar Cadena Productiva' %} <i class="fa fa-pencil-square-o icon-link icon-red"></i> 300 308 </a> 309 <input type="hidden" id="list_pr_id" name="list_pr_id" readonly value=""> 301 310 </div> 302 311 <div class="col-xs-2 col-sm-2 col-md-2 text-right fuente-10"> 303 <a href="#" data-toggle="tooltip" class="tip-top" 312 <a href="#" data-toggle="tooltip" class="tip-top" onclick="revert_eliminar_node()" 304 313 title="{% trans 'Pulse sobre esta opción para deshacer los cambios a la cadena productiva' %}"> 305 314 {% trans 'Deshacer cambios' %} <i class="fa fa-undo icon-link icon-red"></i> … … 319 328 </div> 320 329 {% endblock %} 330 {% block forms_popup %}{% include 'popup_form.html' %}{% endblock %} 321 331 {% block class_contenedor %}container-fluid{% endblock %} -
apps/simulacion/templates/panel_extra_menu.html
r4359346 rb9cfa95 9 9 <div class="col-lg-1 col-xs-1 col-md-1 col-sm-1"> 10 10 <i class="glyphicon glyphicon-floppy-disk tip-top icon-red" data-toggle="tooltip" 11 onclick="modificar_cadena($('#modificar-cadena-form').html())" 11 12 title="{% trans 'Presione el botón para guardar la cadena modelada' %}"></i>  12 13 {% trans 'Guardar Cadena Productiva' %} -
apps/simulacion/urls.py
rb2a57af rb9cfa95 28 28 url(r'^resultados/$', 'apps.simulacion.views.resultados_simulacion', name='resultados_simulacion'), 29 29 url(r'^ajax/get_node_sim/?$', 'apps.simulacion.ajax.get_node_sim', name='get_node_sim'), 30 url(r'^ajax/modificar_cadena/?$', 'apps.simulacion.ajax.modificar_cadena', name='modificar_cadena'), 30 31 ]
Note: See TracChangeset
for help on using the changeset viewer.