Changeset b9cfa95 in sicp for apps


Ignore:
Timestamp:
Aug 4, 2015, 6:04:37 PM (9 years ago)
Author:
Ing. Roldan D. Vargas G <rvargas@…>
Branches:
master
Children:
315a7c8
Parents:
5d9a45d
Message:

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

Location:
apps/simulacion
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • apps/simulacion/ajax.py

    rb2a57af rb9cfa95  
    2424from django.utils.translation import ugettext_lazy as _
    2525from datetime import date
     26
    2627from apps.comun.constantes import MSG_NOT_AJAX
    2728from apps.comun.functions import render_cadena
     29from apps.simulacion.functions import remove_nodos_cadena
     30from apps.simulacion.models import Cadena
    2831
    2932import logging
     
    104107    except Exception, e:
    105108        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}))
  • apps/simulacion/functions.py

    r476f140 rb9cfa95  
    2020__doc__    = "Funciones a implementar en la simulación de cadenas productivas"
    2121
     22from xml.etree.ElementTree import ElementTree
    2223from apps.simulacion.sigesic.models import Producto, Insumo, ProductoInsumo, ConsumoPreciosR
     24
     25def 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)
    2344
    2445
  • apps/simulacion/models.py

    rb2a57af rb9cfa95  
    2424from django.utils.translation import ugettext_lazy as _
    2525
     26import base64
     27
    2628class Cadena(models.Model):
    2729    """!
     
    4042    autor = models.ForeignKey(User, verbose_name=_(u"Autor"))
    4143
     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
    4253    ## Fecha y hora en que fue registrada la cadena productiva
    4354    fecha = models.DateTimeField(auto_now_add=True, verbose_name=_(u"Fecha de Modificación"))
    4455
    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"))
    4761
    4862    def __unicode__(self):
     
    5670        """
    5771        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
    5897
    5998    class Meta:
  • apps/simulacion/templates/cadena_productiva.html

    r5d9a45d rb9cfa95  
    194194                text: node_raiz+" ({% trans 'Atráz' %})",
    195195                state: { expanded: false },
     196                color: "#000000",
     197                backColor: "#FFFFFF",
    196198                tags: [{
    197199                    pr_index: '0',
     
    217219                                {
    218220                                    text: "{{ n.attrib.company_rif }} {{ n.attrib.company_name }} - {{ n.attrib.product_name }}",
     221                                    color: "#000000",
     222                                    backColor: "#FFFFFF",
    219223                                    tags: [{
    220224                                        pr_index: '{{ n.attrib.position }}',
     
    243247                text: node_raiz+" ({% trans 'Adelante' %})",
    244248                state: { expanded: false },
     249                color: "#000000",
     250                backColor: "#FFFFFF",
    245251                tags: [{
    246252                    pr_index: '0',
     
    266272                                {
    267273                                    text: "{{ n.attrib.company_rif }} {{ n.attrib.company_name }} - {{ n.attrib.product_name }}",
     274                                    color: "#000000",
     275                                    backColor: "#FFFFFF",
    268276                                    tags: [{
    269277                                        pr_index: '{{ n.attrib.position }}',
     
    295303    <div class="divider-vertical-20"></div>
    296304    <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())"
    298306           title="{% trans 'Pulse sobre esta opción para editar la cadena productiva' %}">
    299307            {% trans 'Editar Cadena Productiva' %} <i class="fa fa-pencil-square-o icon-link icon-red"></i>
    300308        </a>
     309        <input type="hidden" id="list_pr_id" name="list_pr_id" readonly value="">
    301310    </div>
    302311    <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()"
    304313           title="{% trans 'Pulse sobre esta opción para deshacer los cambios a la cadena productiva' %}">
    305314            {% trans 'Deshacer cambios' %} <i class="fa fa-undo icon-link icon-red"></i>
     
    319328    </div>
    320329{% endblock %}
     330{% block forms_popup %}{% include 'popup_form.html' %}{% endblock %}
    321331{% block class_contenedor %}container-fluid{% endblock %}
  • apps/simulacion/templates/panel_extra_menu.html

    r4359346 rb9cfa95  
    99        <div class="col-lg-1 col-xs-1 col-md-1 col-sm-1">
    1010            <i class="glyphicon glyphicon-floppy-disk tip-top icon-red" data-toggle="tooltip"
     11               onclick="modificar_cadena($('#modificar-cadena-form').html())"
    1112               title="{% trans 'Presione el botón para guardar la cadena modelada' %}"></i>&#160;
    1213            {% trans 'Guardar Cadena Productiva' %}
  • apps/simulacion/urls.py

    rb2a57af rb9cfa95  
    2828    url(r'^resultados/$', 'apps.simulacion.views.resultados_simulacion', name='resultados_simulacion'),
    2929    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'),
    3031]
Note: See TracChangeset for help on using the changeset viewer.