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)
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
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()
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),