def buscar(self, boton):
     """
     """
     idproducto = utils.combo_get_value(self.wids["cmbe_producto"])
     if idproducto == None:
         utils.dialogo_info(titulo="ERROR", texto="Seleccione un producto", padre=self.wids["ventana"])
         return
     producto = pclases.ProductoVenta.get(idproducto)
     and_fecha_inicio = "AND parte_de_produccion.fecha >= '%s'" % (self.get_unambiguous_fecha(self.inicio))
     if producto.es_rollo():
         parte_where_de_consulta = """
 partida.id IN 
     (SELECT rollo.partida_id 
      FROM rollo 
      WHERE rollo.id IN 
         (SELECT articulo.rollo_id 
          FROM articulo 
          WHERE articulo.producto_venta_id = %d AND articulo.parte_de_produccion_id IN 
             (SELECT parte_de_produccion.id 
              FROM parte_de_produccion 
              WHERE parte_de_produccion.fecha <= '%s' %s
              ORDER BY parte_de_produccion.fecha
             )
         )
     ) """ % (
             producto.id,
             self.get_unambiguous_fecha(self.fin),
             self.inicio and and_fecha_inicio or "",
         )
     else:
         parte_where_de_consulta = """
 partida.id IN 
     (SELECT bala.partida_carga_id 
      FROM bala 
      WHERE bala.id IN 
         (SELECT articulo.rollo_id 
          FROM articulo 
          WHERE articulo.producto_venta_id = %d AND articulo.parte_de_produccion_id IN 
             (SELECT parte_de_produccion.id 
              FROM parte_de_produccion 
              WHERE parte_de_produccion.fecha <= '%s' %s
              ORDER BY parte_de_produccion.fecha
             )
         )
     ) """ % (
             producto.id,
             self.get_unambiguous_fecha(self.fin),
             self.inicio and and_fecha_inicio or "",
         )
     partidas = pclases.Partida.select(parte_where_de_consulta, distinct=True)
     # Hasta aquí la consulta optimizada para obtener las partidas. Pasamos a recuperar los datos en sí:
     vpro = VentanaActividad(padre=self.wids["ventana"])
     vpro.mostrar()
     self.resultado = []
     for p in partidas:
         vpro.mover()
         self.resultado.append(p)
     vpro.ocultar()
     self.resultado = partidas
     self.rellenar_tabla(self.resultado)
 def buscar(self,boton):
     """
     """
     idproducto = utils.combo_get_value(self.wids['cmbe_producto'])
     if idproducto == None:
         utils.dialogo_info(titulo = 'ERROR', texto = 'Seleccione un producto', padre = self.wids['ventana'])
         return
     producto = pclases.ProductoVenta.get(idproducto)
     and_fecha_inicio = "AND parte_de_produccion.fecha >= '%s'" % (self.get_unambiguous_fecha(self.inicio))
     if producto.es_rollo():     # No debería ocurrir. Lo mantengo porque es copy-paste de la consulta de partidas.
         parte_where_de_consulta = """
 partida.id IN 
     (SELECT rollo.partida_id 
      FROM rollo 
      WHERE rollo.id IN 
         (SELECT articulo.rollo_id 
          FROM articulo 
          WHERE articulo.producto_venta_id = %d AND articulo.parte_de_produccion_id IN 
             (SELECT parte_de_produccion.id 
              FROM parte_de_produccion 
              WHERE parte_de_produccion.fecha <= '%s' %s
              ORDER BY parte_de_produccion.fecha
             )
         )
     ) """ %(producto.id, 
             self.get_unambiguous_fecha(self.fin), 
             self.inicio and and_fecha_inicio or "")
     else:
         parte_where_de_consulta = """
 lote.id IN 
     (SELECT bala.lote_id 
      FROM bala 
      WHERE bala.id IN 
         (SELECT articulo.bala_id 
          FROM articulo 
          WHERE articulo.producto_venta_id = %d AND articulo.parte_de_produccion_id IN 
             (SELECT parte_de_produccion.id 
              FROM parte_de_produccion 
              WHERE parte_de_produccion.fecha <= '%s' %s
              ORDER BY parte_de_produccion.fecha
             )
         )
     ) """ %(producto.id, 
             self.get_unambiguous_fecha(self.fin), 
             self.inicio and and_fecha_inicio or "")
     lotes = pclases.Lote.select(parte_where_de_consulta, distinct = True)
     # Hasta aquí la consulta optimizada para obtener los lotes. Pasamos a recuperar los datos en sí:
     vpro = VentanaActividad(padre = self.wids['ventana'])
     vpro.mostrar()
     self.resultado = []
     for p in lotes:
         vpro.mover()
         self.resultado.append(p)
     vpro.ocultar()
     self.resultado = lotes
     self.rellenar_tabla(self.resultado)
Example #3
0
    def metodo_remoto(self, rutacompleta, rutacompleta_cuentas):
        # Llamada RPC para importar: 
        nomarchivo = os.path.basename(rutacompleta)
        nomarchivo_cuentas = os.path.basename(rutacompleta_cuentas)
        self.add_salida('Importando datos...\n')
        # Ventana de actividad: ---8<---
        self.seguir = True
        self.wids['ventana'].window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))
        while gtk.events_pending(): gtk.main_iteration(False)
        vprogreso = VentanaActividad(texto = 'Invocando procedimiento remoto...\n(Esta operación puede tomar algún tiempo.)', padre = self.wids['ventana'])
        vprogreso.mostrar()
        vprogreso.mover()
#        gobject.idle_add(self._actualizar, vprogreso, priority = gobject.PRIORITY_LOW)#, priority = gobject.PRIORITY_HIGH_IDLE)
#        self._actualizar(vprogreso)
#        while gtk.events_pending(): gtk.main_iteration(False)
        # ------------------------->8---
        try:
            res = self.importar_en_remoto(self.CONFIG['host'], self.CONFIG['port'], nomarchivo, nomarchivo_cuentas)
        except socket.error, msg:
            self.add_salida('La llamada a procedimiento remoto falló:\n%s\n' % msg)
            res = 1
Example #4
0
    def copia_remota(self, rutacompleta):
        # Copia del .mdb a un directorio temporal en el servidor GNU/Linux.
        self.add_salida('Copiando fichero %s...\n' % (rutacompleta))
        # Ventana de actividad: ---8<---
        self.seguir = True
        vprogreso = VentanaActividad(texto = 'Creando copia remota...\n(Esta operación puede tomar algún tiempo.)', padre = self.wids['ventana'])
        self.wids['ventana'].window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))
        while gtk.events_pending(): gtk.main_iteration(False)
        vprogreso.mostrar()
        vprogreso.mover()
#        gobject.idle_add(self._actualizar, vprogreso, priority = gobject.PRIORITY_LOW)
#        self._actualizar(vprogreso)
#        while gtk.events_pending(): gtk.main_iteration(False)
        # ------------------------->8---
        sesion = SshSession(host = self.CONFIG['host'], user = self.CONFIG['user'], password = self.CONFIG['password'])
        sesion.scp(src = rutacompleta, dest = self.CONFIG['dir_destino'])
        # -------------------------8<---
        vprogreso.mover()
        self.seguir = False
        vprogreso.ocultar()
        # ------------------------->8---
        self.wids['ventana'].window.set_cursor(None)
 def rellenar_tabla(self, items):
     """
     Rellena el model con los items de la consulta
     """
     numpagos = len(items)
     vpro = VentanaActividad(
         padre=self.wids["ventana"], texto="Mostrando datos de %d pagos realizados..." % numpagos
     )
     vpro.mostrar()
     model = self.wids["tv_datos"].get_model()
     model.clear()
     total = 0
     vencido = 0  # @UnusedVariable
     hoy = mx.DateTime.localtime()  # @UnusedVariable
     por_fecha = {}
     por_formapago = {"en_pagares": 0.0, "en_transf": 0.0, "en_recibos": 0.0, "otras": 0.0}
     self.tipo_pago = {}
     for pago in items:
         vpro.mover()
         importe = pago.importe
         anno = pago.fecha.year
         mes = pago.fecha.month
         total += pago.importe
         fra = pago.facturaCompra
         # Busco a qué vencimiento corresponde un pago:
         vto = None
         try:
             dvtos = fra.emparejar_vencimientos()
         except AttributeError:  # Sin factura.
             dvtos = []
         for vtokey in dvtos:
             if isinstance(vtokey, str):
                 continue  # Hay una lista de cobros y vencimientos
                 # además de la lista de pagos por vencimiento y demás.
                 # Eso me lo salto porque son solo listas de todo que
                 # no emparejan realmente los vtos. con los cobros.
             if pago in dvtos[vtokey]:
                 vto = vtokey
                 break
         txt_formapago = get_txtformapago(pago, vto)
         txt_fecha = get_txtfecha(pago, vto)
         txt_fechavtopago = get_txtfechavtopago(pago)
         txt_fecha_emision = utils.str_fecha(pago.get_fecha_emision())
         model.append(
             (
                 fra and fra.numfactura or "",
                 fra and utils.str_fecha(fra.fecha) or "",
                 utils.float2str(pago.importe),
                 fra and fra.proveedor.nombre or "",
                 txt_formapago,
                 txt_fecha_emision,
                 txt_fecha,
                 txt_fechavtopago,
                 pago.id,
             )
         )
         if anno not in por_fecha:
             por_fecha[anno] = {}
         if mes not in por_fecha[anno]:
             por_fecha[anno][mes] = 0.0
         por_fecha[anno][mes] += importe
         key_formapago = guess_keyformapago(pago)
         por_formapago[key_formapago] += importe
         self.tipo_pago[pago.id] = key_formapago
     self.wids["e_total"].set_text("%s €" % utils.float2str(total))
     # Relleno el model de totales.
     annos = por_fecha.keys()
     annos.sort()
     model = self.wids["tv_totales"].get_model()
     model.clear()
     for anno in annos:
         vpro.mover()
         total_anno = sum([por_fecha[anno][mes] for mes in por_fecha[anno]])
         anno_padre = model.append(None, (` anno `, utils.float2str(total_anno), ""))
         meses = por_fecha[anno].keys()
Example #6
0
import pygtk
pygtk.require('2.0')

import sys, os
import time
import gtk, pango

import mx, mx.DateTime

import utils

from threading import Thread, Semaphore

from ventana_progreso import VentanaActividad
vpro = VentanaActividad(texto = "Generando excepciones a ignorar...")
vpro.mostrar()

path_framework = os.path.join("..", "framework")
if path_framework not in sys.path:
    sys.path.append(path_framework)

vpro.mover()
import pclases
vpro.mover()
dde = pclases.DatosDeLaEmpresa.select()[0]
vpro.mover()
if dde.nombre == "Geotexan, S.A.":
    PEDIDOS_ALBARANES_Y_FACTURAS_A_IGNORAR_MISMO_C_O_P = [
        pclases.PedidoVenta.get(376), 
        pclases.PedidoVenta.get(369),