Changeset 322ec56 in sicp


Ignore:
Timestamp:
Aug 10, 2015, 2:39:06 PM (9 years ago)
Author:
Ing. Roldan D. Vargas G <rvargas@…>
Branches:
master
Children:
61637e1
Parents:
3c16ccb
Message:

se agrega filtro que permite mostrar un listado de cadenas productivas modificadas asociadas al producto que fue consultado

File:
1 edited

Legend:

Unmodified
Added
Removed
  • apps/simulacion/ajax.py

    r86b243a r322ec56  
    2424from django.contrib.auth.decorators import login_required
    2525from django.utils.translation import ugettext_lazy as _
     26from xml.etree.ElementTree import parse
    2627from datetime import date
    2728
     
    3536import os
    3637
    37 logger = logging.getLogger(__name__)
     38logger = logging.getLogger("simulacion")
    3839
    3940@login_required()
     
    5960            }))
    6061
     62        #logger.info(_(u"Solicitud de simulación por el usuario [%s]") % str(request.username))
     63
    6164        usr = str(request.user) + "sim"
    6265        cadena = render_cadena(
     
    107110
    108111    except Exception, e:
     112        #logger.error(_(u"Error al procesar la solicitud de simulación. Detalles: %s") % e)
    109113        return HttpResponse(json.dumps({'resultado': False, 'error': e}))
    110114
     
    112116@login_required()
    113117def modificar_cadena(request):
     118    """!
     119    Función que modifica la estructura de la cadena productiva y la almacena en Base de Datos
     120
     121    @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
     122    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     123    @date 06-08-2015
     124    @param[in] request Objeto que contiene la petición
     125    @return Devuelve verdardero si el proceso de modificación de la estructura se llevó a cabo sin problemas, en caso
     126            contrario devuelve falso y el correspondiente mensaje de error
     127    """
    114128    try:
    115129        if not request.is_ajax():
     
    127141            }))
    128142
     143        #logger.info(_(u"Petición de modificación de cadena productiva por el usuario [%s]") % str(request.username))
     144
    129145        archivo_xml = os.path.join(settings.BASE_DIR, "tmp/%s.xml" % str(request.user))
    130146
     
    145161        cp.save()
    146162
    147 
     163        #logger.info(_(u"Se registro una nueva modificación para la cadena [%s] con el ID [%s]") % (producto_id, cp.pk))
    148164
    149165        #remover nodos y arcos de la cadena modificada
     
    154170
    155171    except Exception, e:
     172        """pr_id = request.GET.get('producto_id', None)
     173        if pr_id:
     174            logger.error(_(u"Error al modificar la cadena de producción del producto [%s]. Detalles: %s")
     175                         % (pr_id, e))"""
    156176        return HttpResponse(json.dumps({'resultado': False, 'error': e}))
     177
     178
     179@login_required()
     180def listar_cadenas_modificadas(request):
     181    """!
     182    Función que obtiene los datos a ser mostrados en el listado de cadenas modificadas
     183
     184    @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
     185    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     186    @date 07-08-2015
     187    @param[in] request Objeto que contiene la petición
     188    @return Devuelve verdadero si existen los datos de las cadenas modificadas, así como también dichos datos,
     189            en caso contrario devuelve falso y su correspondiente mensaje de error
     190    """
     191    try:
     192        if not request.is_ajax():
     193            return HttpResponse(json.dumps({'resultado': False, 'error': MSG_NOT_AJAX}))
     194
     195
     196        producto = request.GET.get('ciiu', None)
     197        dataSet = {}
     198
     199        for cadena in Cadena.objects.filter(producto_id=producto):
     200            cp = [
     201                '<input type=\'radio\' id=\'sel_cad\' name=\'sel_cad\' value=\'%s\'>' % cadena.id,
     202                cadena.nombre,
     203                cadena.autor.get_full_name(),
     204                cadena.fecha.strftime("%d-%m-%Y %H:%M:%S")
     205            ]
     206            dataSet[cadena.id] = cp
     207
     208        #logger.info(_(u"Petición solicitada por el usuario [%s] para mostrar el listado de cadenas modificadas") % str(request.username))
     209
     210        return HttpResponse(json.dumps({'resultado': True, 'dataSet': dataSet}))
     211
     212    except Exception, e:
     213        #logger.error(_(u"Error al procesar la petición de mostrar listado de cadenas modificadas. Detalles: %s") % e)
     214        return HttpResponse(json.dumps({'resultado': False, 'error': e}))
     215
     216@login_required()
     217def show_tree_compare_cadenas(request):
     218    """!
     219    Función que permite obtener los datos de las cadenas a mostrar para su correspondiente comparación
     220
     221    @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
     222    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     223    @date 07-08-2015
     224    @param[in] request Objeto que contiene la petición
     225    @return Devuelve los datos de las cadenas a comparar, si ocurre un error devuelve falso y el correspondiente mensaje
     226    """
     227    try:
     228        if not request.is_ajax():
     229            return HttpResponse(json.dumps({'resultado': False, 'error': MSG_NOT_AJAX}))
     230
     231        cadena_id = request.GET.get("cadena_id", None)
     232
     233        if not cadena_id:
     234            return HttpResponse(json.dumps({
     235                'resultado': False, 'error': _(u"Debe seleccionar una cadena a comparar.")
     236            }))
     237
     238        #logger.info(_(u"Generando la cadena con ID %s") % str(cadena_id))
     239
     240        listNodes, listArcs = [], []
     241        archivo_xml = os.path.join(settings.BASE_DIR, "tmp/%s_modificado.xml" % str(request.user))
     242
     243        cad = Cadena.objects.get(pk=cadena_id)
     244        f = open(archivo_xml, 'w')
     245        f.write(cad.descifrar_cadena())
     246        f.close()
     247
     248        tree = parse(archivo_xml)
     249        root = tree.getroot()
     250        graph = root.find("graph")
     251        nodes = graph.find("nodes")
     252        arcs = graph.find("arcs")
     253        node = nodes.findall("node")
     254        arc = arcs.findall("arc")
     255
     256        ## Funcion lambda que permite obtener los nodos de la cadena de produccion aguas arriba
     257        subNodeUp = lambda x: [
     258            {
     259                "text": n.attrib['company_rif'] + " " + n.attrib['company_name'] + " - " + n.attrib['product_name'],
     260                "selectable": False,
     261                "tags": [x],
     262                "nodes": subNodeUp(n.attrib['position'])
     263            } for n in node if n.attrib['position'] in [a.attrib['src'] for a in arc if a.attrib['tgt'] == x]
     264        ]
     265
     266        ## Funcion lambda que permite obtener los nodos de la cadena de produccion aguas abajo
     267        subNodeDown = lambda x: [
     268            {
     269                "text": n.attrib['company_rif'] + " " + n.attrib['company_name'] + " - " + n.attrib['product_name'],
     270                "selectable": False,
     271                "tags": [x],
     272                "nodes": subNodeUp(n.attrib['position'])
     273            } for n in node if n.attrib['position'] in [a.attrib['tgt'] for a in arc if a.attrib['src'] == x]
     274        ]
     275
     276        ## Listado de nodos aguas arriba
     277        listNodes.append({
     278            "text": "%s %s - %s (%s)" % (
     279                node[0].attrib['company_rif'], node[0].attrib['company_name'],
     280                node[0].attrib['product_name'], _(u"Atrás")
     281            ),
     282            "selectable": False,
     283            "tags": ['0'],
     284            "nodes": subNodeUp('0')
     285        })
     286
     287        ## Listado de nodos aguas abajo
     288        listNodes.append({
     289            "text": "%s %s - %s (%s)" % (
     290                node[0].attrib['company_rif'], node[0].attrib['company_name'],
     291                node[0].attrib['product_name'], _(u"Adelante")
     292            ),
     293            "selectable": False,
     294            "tags": ['0'],
     295            "nodes": subNodeDown('0')
     296        })
     297
     298        #logger.info(_(u"Se genero la cadena a comparar con el ID %s") % str(cadena_id))
     299
     300        return HttpResponse(json.dumps({
     301            'resultado': True, 'node': listNodes, 'cadena_nombre': cad.nombre
     302        }))
     303
     304    except Exception, e:
     305        #logger.error(_(u"Error al procesar los datos para la comparación de la cadena. Detalles: %s" % e))
     306        return HttpResponse(json.dumps({'resultado': False, 'error': e}))
Note: See TracChangeset for help on using the changeset viewer.