def refinar_resultados_busqueda(self, resultados): """ Muestra en una ventana de resultados todos los registros de "resultados". Devuelve el id (primera columna de la ventana de resultados) de la fila seleccionada o None si se canceló. """ filas_res = [] for r in resultados: filas_res.append((r.id, r.numalbaran, utils.str_fecha(r.fecha), r.proveedor != None and r.proveedor.nombre or "" )) idalbaran = utils.dialogo_resultado(filas_res, titulo = 'SELECCIONE ALBARÁN', cabeceras = ('ID Interno', 'Número de albarán', 'Fecha', 'Proveedor'), padre = self.wids['ventana']) if idalbaran < 0: return None else: return idalbaran
def buscar_rollos(self, boton): """ Busca los rollos de la partida actual a los que se les ha extraído muestra. """ if self.partida != None: rollos = [r for r in self.partida.rollos if r.muestra or "muestra" in r.observaciones.lower()] if rollos == []: utils.dialogo_info(titulo = "NO SE ENCONTRARON ROLLOS", texto = "No se econtraron muestras de rollos en los " "partes implicados.", padre = self.wids['ventana']) else: filas = [(r.id, r.codigo, r.observaciones, "%s %s" % (utils.str_fecha(r.fechahora), utils.str_hora(r.fechahora)) ) for r in rollos] idrollo = utils.dialogo_resultado(filas, titulo = 'ROLLOS CON MUESTRA EN LA PARTIDA %s' % ( self.partida.codigo), cabeceras = ('ID', 'Código', 'Observaciones', 'Fecha y hora de fabricación'), padre = self.wids['ventana']) if idrollo != None and idrollo > 0: rollo = pclases.Rollo.get(idrollo) import trazabilidad_articulos trazabilidad_articulos.TrazabilidadArticulos( usuario = self.usuario, objeto = rollo)
def refinar_resultados_busqueda(self, resultados): """ Muestra en una ventana de resultados todos los registros de "resultados". Devuelve el id (primera columna de la ventana de resultados) de la fila seleccionada o None si se canceló. """ filas_res = [] for r in resultados: filas_res.append( (r.id, r.numpresupuesto != None and r.numpresupuesto or "", utils.str_fecha(r.fecha), r.cliente and r.cliente.nombre or "-", r.personaContacto, r.comercial and r.comercial.empleado.nombre + " " + r.comercial.empleado.apellidos or "Sin comercial relacionado")) idpresupuesto = utils.dialogo_resultado(filas_res, titulo = 'SELECCIONE OFERTA', cabeceras = ('ID', 'Número', 'Fecha', 'Nombre cliente', 'Persona de contacto', "Comercial"), padre = self.wids['ventana']) if idpresupuesto < 0: return None else: return idpresupuesto
def set_lote(self, w): numlote = utils.dialogo_entrada(titulo="Nº LOTE", texto="Introduzca número de lote:") if numlote != None: lotes = pclases.Lote.select(pclases.Lote.q.numlote.contains(numlote)) if lotes.count() == 0: utils.dialogo_info(titulo="LOTE NO ENCONTRADO", texto="No se encontró ningún lote %s." % numlote) return elif lotes.count() > 1: filas = [(l.id, l.numlote, l.codigo, l.tenacidad, l.elongacion, l.rizo, l.encogimiento) for l in lotes] idlote = utils.dialogo_resultado( filas, titulo="SELECCIONE LOTE", cabeceras=("ID", "Número", "Código", "Tenacidad", "Elongación", "Rizo", "Encogimiento"), ) if idlote < 0: return lote = pclases.Lote.get(idlote) else: lote = lotes[0] if len(lote.balas) == 0: utils.dialogo_info( titulo="LOTE VACÍO", texto="El lote no contiene balas, no puede\nrealizar pruebas sobre un lote vacío.", ) self.lote = None return self.lote = lote self.actualizar_ventana()
def refinar_resultados_busqueda(self, resultados): """ Muestra en una ventana de resultados todos los registros de "resultados". Devuelve el id (primera columna de la ventana de resultados) de la fila seleccionada o None si se canceló. """ filas_res = [] for r in resultados: filas_res.append((r.id, r.numrecibo, r.anno, r.get_cliente() and r.get_cliente().nombre or "", ", ".join([f.numfactura for f in r.get_facturas()]), utils.float2str(r.calcular_importe()), utils.str_fecha(r.fechaLibramiento), utils.str_fecha(r.fechaVencimiento) )) idrecibo = utils.dialogo_resultado(filas_res, titulo = 'SELECCIONE RECIBO', cabeceras = ('ID', 'Número', 'Año', 'Cliente', 'Facturas', 'Importe', 'Libramiento', 'Vencimiento'), padre = self.wids['ventana']) if idrecibo < 0: return None else: return idrecibo
def refinar_resultados_busqueda(self, resultados): """ Muestra en una ventana de resultados todos los registros de "resultados". Devuelve el id (primera columna de la ventana de resultados) de la fila seleccionada o None si se canceló. """ filas_res = [] for r in resultados: if r.es_transferencia(): filas_res.append((r.id, utils.str_fecha(r.fecha), r.proveedor and r.proveedor.nombre or "-", r.cuentaOrigen and r.cuentaOrigen.nombre or "-", r.cuentaDestino and r.cuentaDestino.nombre or "-", utils.float2str(r.importe))) idcuenta = utils.dialogo_resultado(filas_res, titulo = 'SELECCIONE TRANSFERENCIA', cabeceras = ('ID', 'Fecha', 'Proveedor', 'Cuenta', 'Destino', "Importe"), padre = self.wids['ventana']) if idcuenta < 0: return None else: return idcuenta
def pedir_producto_compra(self): """ Devuelve UN producto de compra obtenido a partir de una búsqueda, etc. """ producto = None a_buscar = utils.dialogo_entrada(titulo = "BUSCAR MATERIAL", texto = "Introduzca texto a buscar en productos de compra:", padre = self.wids['ventana']) if a_buscar != None: resultados = utils.buscar_productos_compra(a_buscar) if resultados.count() > 1: ## Refinar los resultados: filas_res = [] for r in resultados: filas_res.append((r.id, r.codigo, r.descripcion)) idproducto = utils.dialogo_resultado(filas_res, titulo = 'Seleccione producto', cabeceras = ('ID Interno', 'Código', 'Descripción'), padre = self.wids['ventana']) if idproducto < 0: return producto = pclases.ProductoCompra.get(idproducto) # id es clave primaria, esta comprensión debería devolver un único producto elif resultados.count() < 1: ## La búsqueda no produjo resultados. utils.dialogo_info('SIN RESULTADOS', 'La búsqueda no produjo ningún resultado.\nIntente una ' 'búsqueda menos restrictiva usando un texto más corto.', padre = self.wids['ventana']) return None else: producto = resultados[0] return producto
def refinar_resultados_busqueda(self, resultados): """ Muestra en una ventana de resultados todos los registros de "resultados". Devuelve el id (primera columna de la ventana de resultados) de la fila seleccionada o None si se canceló. """ filas_res = [] for r in resultados: filas_res.append((r.id, r.descripcion, r.retribuido, r.sinRetribuir, r.excedenciaMaxima)) idmotivo = utils.dialogo_resultado(filas_res, titulo = 'Seleccione motivo de ausencia', cabeceras = ('ID_interno', 'Descripcion', 'Días retribuidos', 'Días sin retribuir', 'Días excedencia máxima'), padre = self.wids['ventana']) if idmotivo < 0: return None else: return idmotivo
def refinar_resultados_busqueda(self, resultados): """ Muestra en una ventana de resultados todos los registros de "resultados". Devuelve el id (primera columna de la ventana de resultados) de la fila seleccionada o None si se canceló. """ filas_res = [] for r in resultados: cliente = r.cliente filas_res.append((r.id, r.codigo, cliente != None and cliente.nombre or "", utils.str_fecha(r.fechaRecepcion), "%s €" % (utils.float2str(r.cantidad)), utils.str_fecha(r.fechaCobro), r.pendiente and "Sí" or "No", ", ".join([c.numfactura for c in r.cobros]))) idpagare = utils.dialogo_resultado(filas_res, titulo = 'Seleccione Pagaré', cabeceras = ('ID', 'Número', 'Cliente', 'Fecha recepción', 'Importe', 'Vencimiento', 'Pendiente', 'Facturas'), padre = self.wids['ventana']) if idpagare < 0: return None else: return idpagare
def ver_productos(self, boton): """ Muestra todos los productos relacionados con el proveedor actual a través de los Pedidos<->LDV<->Artículos. """ proveedor = self.objeto if proveedor == None: return lista = [] productos = proveedor.get_productos() for p in productos: lista.append((p.id, p.codigo, p.descripcion, "\n".join([pedido.numpedido for pedido in p.get_pedidos(proveedor)]), "\n".join([albaran.numalbaran for albaran in p.get_albaranes(proveedor)]), "\n".join([factura.numfactura for factura in p.get_facturas(proveedor)]) )) idproducto = utils.dialogo_resultado(lista, 'PRODUCTOS COMPRADOS AL PROVEEDOR', cabeceras = ('ID', 'Código', 'Descripción', "Pedidos", "Albaranes", "Facturas"), padre = self.wids['ventana']) if idproducto > 0: import productos_compra p = productos_compra.ProductosCompra(pclases.ProductoCompra.get(idproducto))
def set_lote(self, w): numlote = utils.dialogo_entrada(titulo = 'Nº LOTE', texto = 'Introduzca número de lote:', padre = self.wids['ventana']) if numlote != None: lotes = pclases.Lote.select(pclases.Lote.q.numlote.contains(numlote)) if lotes.count() == 0: utils.dialogo_info(titulo = 'LOTE NO ENCONTRADO', texto = 'No se encontró ningún lote %s.' % numlote, padre = self.wids['ventana']) return elif lotes.count() > 1: filas = [(l.id, l.numlote, l.codigo, l.tenacidad, l.elongacion, l.rizo, l.encogimiento) for l in lotes] idlote = utils.dialogo_resultado(filas, titulo = 'SELECCIONE LOTE', cabeceras = ('ID', 'Número', 'Código', 'Tenacidad', 'Elongación', 'Rizo', 'Encogimiento'), padre = self.wids['ventana']) if idlote < 0: return lote = pclases.Lote.get(idlote) else: lote = lotes[0] if len(lote.balas) == 0: utils.dialogo_info(titulo = 'LOTE VACÍO', texto = 'El lote no contiene balas, no puede\nrealizar pruebas sobre un lote vacío.', padre = self.wids['ventana']) self.lote = None return self.lote = lote self.actualizar_ventana()
def set_partida(self, w): numpartida = utils.dialogo_entrada(titulo = 'Nº PARTIDA', texto = 'Introduzca número de partida:') if numpartida != None: partidas = pclases.Partida.select(pclases.Partida.q.numpartida.contains(numpartida)) if partidas.count() == 0: utils.dialogo_info(titulo = 'PARTIDA NO ENCONTRADA', texto = 'No se encontró ninguna partida %s.' % numpartida) return elif partidas.count() > 1: filas = [(l.id, l.numpartida, l.codigo, l.longitudinal, l.transversal, l.compresion, l.perforacion, l.permeabilidad, l.poros, l.espesor) for l in partidas] idpartida = utils.dialogo_resultado(filas, titulo = 'SELECCIONE PARTIDA', cabeceras = ('ID', 'Número', 'Código', 'Longitudinal', 'Transversal', 'CBR', 'Perforación', 'Permeabilidad', 'Poros', 'Espesor')) if idpartida < 0: return partida = pclases.Partida.get(idpartida) else: partida = partidas[0] if len(partida.rollos) == 0: utils.dialogo_info(titulo = 'PARTIDA VACÍA', texto = 'La partida no contiene rollos, no puede\nrealizar pruebas sobre una partida vacía.') self.partida = None return self.partida = partida self.actualizar_ventana()
def set_partida(self, w): numpartida = utils.dialogo_entrada(titulo="Nº PARTIDA", texto="Introduzca número de partida:") if numpartida != None: partidas = pclases.Partida.select(pclases.Partida.q.numpartida.contains(numpartida)) if partidas.count() == 0: utils.dialogo_info( titulo="PARTIDA NO ENCONTRADA", texto="No se encontró ninguna partida %s." % numpartida ) return elif partidas.count() > 1: filas = [ ( l.id, l.numpartida, l.codigo, l.longitudinal, l.transversal, l.compresion, l.perforacion, l.permeabilidad, l.poros, l.espesor, ) for l in partidas ] idpartida = utils.dialogo_resultado( filas, titulo="SELECCIONE PARTIDA", cabeceras=( "ID", "Número", "Código", "Longitudinal", "Transversal", "CBR", "Perforación", "Permeabilidad", "Poros", "Espesor", ), ) if idpartida < 0: return partida = pclases.Partida.get(idpartida) else: partida = partidas[0] if len(partida.rollos) == 0: utils.dialogo_info( titulo="PARTIDA VACÍA", texto="La partida no contiene rollos, no puede\nrealizar pruebas sobre una partida vacía.", ) self.partida = None return self.partida = partida self.actualizar_ventana()
def mostrar_silo(self, boton, silo): """ Recibe el silo del que hay que mostrar el detalle de cargas y descargas (consumos) y muestra una ventana con las mismas ordenadas por fecha. """ cd_fechas = self.leer_datos_cargas_descargas(silo) vpro = VentanaProgreso(padre = self.wids['ventana']) vpro.mostrar() i = 0.0 tot = len(cd_fechas) datos = [] fechas = cd_fechas.keys() fechas.sort() total_cargado = 0 total_descargado = 0 for fecha in fechas: vpro.set_valor(i/tot, 'Analizando movimientos...') i = i+1 str_fecha = utils.str_fecha(fecha) for carga in cd_fechas[fecha]['cargas']: datos.append((str_fecha, carga.productoCompra.descripcion, utils.float2str(carga.cantidad), "", "", "")) total_cargado += carga.cantidad for descarga in cd_fechas[fecha]['descargas']: producto_fabricado = "CLIC PARA VER [%d]" % (descarga.id) datos.append((str_fecha, "", "", descarga.productoCompra.descripcion, utils.float2str(descarga.cantidad), producto_fabricado)) total_descargado += descarga.cantidad datos.append(("", "TOTAL CARGAS: ", utils.float2str(total_cargado), "TOTAL CONSUMOS: ", utils.float2str(total_descargado), "")) vpro.ocultar() utils.dialogo_resultado(datos, titulo = "DETALLE DE CARGAS Y CONSUMOS DEL SILO", padre = self.wids['ventana'], cabeceras = ("Fecha", "Producto cargado", "Cantidad cargada", "Producto consumido", "Cantidad consumida", "Producto fabricado"), func_change = self.mostrar_info_producto_fabricado)
def refinar_busqueda_productos(self, resultados): filas_res = [] for r in resultados: filas_res.append((r.id, r.codigo, r.descripcion)) idproducto = utils.dialogo_resultado(filas_res, titulo = 'Seleccione producto', cabeceras = ('ID Interno', 'Código', 'Descripción')) if idproducto < 0: return None else: return idproducto
def annadir_producto_a_tarifa(self, event): """ Solicita un producto mediante su código, id o descripción. Una vez seleccionado el producto, se asocia el objeto que lo representa con la tarifa actual mostrada en pantalla y se actualiza la información de la ventana. NOTA: Si el producto ya está en la tarifa, se actualiza con el precio por defecto del producto. """ a_buscar = utils.dialogo_entrada(titulo = "BUSCAR PRODUCTO", texto = "Introduzca texto a buscar: ", padre = self.wids['ventana']) if a_buscar != None: criterio = sqlobject.OR(pclases.ProductoCompra.q.codigo.contains(a_buscar), pclases.ProductoCompra.q.descripcion.contains(a_buscar)) resultados_pc = pclases.ProductoCompra.select(criterio) numresultados = resultados_pc.count() if numresultados > 1: ## Refinar los resultados: filas_res = [] for r in resultados_pc: filas_res.append(("PC:%d" % r.id, r.codigo, r.descripcion)) idsproducto = utils.dialogo_resultado(filas_res, 'Seleccione producto', multi = True, padre = self.wids['ventana']) if idsproducto != [-1]: # No ha cancelado. productos = [] for tipo_id in idsproducto: tipo, id = tipo_id.split(":") id = int(id) if tipo == "PC": productos.append(pclases.ProductoCompra.get(id)) else: productos = [] elif numresultados == 1: if resultados_pc.count() == 1: productos = resultados_pc else: productos = [] else: ## La búsqueda no produjo resultados. utils.dialogo_info('SIN RESULTADOS', 'La búsqueda no produjo ningún resultado.\nIntente una búsqueda menos restrictiva usando un texto más corto.', padre = self.wids['ventana']) return tarifa = self.objeto for producto in productos: try: defecto = producto.preciopordefecto except AttributeError: defecto = producto.precioDefecto tarifa.asignarTarifa(producto, defecto) self.actualizar_ventana()
def set_mp(self, w): a_buscar = utils.dialogo_entrada(titulo = 'BUSCAR PRODUCTO', texto = 'Introduzca código o descripción:', padre = self.wids['ventana']) if a_buscar != None: try: materiaprima = pclases.TipoDeMaterial.select( pclases.TipoDeMaterial.q.descripcion.contains("prima"))[0] except IndexError: prods = pclases.ProductoCompra.select( pclases.AND( pclases.OR( pclases.ProductoCompra.q.codigo.contains(a_buscar), pclases.ProductoCompra.q.descripcion.contains(a_buscar)), pclases.ProductoCompra.q.obsoleto == False)) else: prods = pclases.ProductoCompra.select( pclases.AND( pclases.OR( pclases.ProductoCompra.q.codigo.contains(a_buscar), pclases.ProductoCompra.q.descripcion.contains(a_buscar) ), pclases.ProductoCompra.q.tipoDeMaterialID==materiaprima.id, pclases.ProductoCompra.q.obsoleto == False ) ) if prods.count() == 0: utils.dialogo_info(titulo = 'PRODUCTO NO ENCONTRADO', texto = 'No se encontró ningún producto al buscar "%s"\n' 'en código y descripción.' % a_buscar, padre = self.wids['ventana']) return elif prods.count() > 1: filas = [(l.id, l.codigo, l.descripcion, self.proveedores(l)) for l in prods] # CWT: Esto es probablemente lo más guarro que he hecho nunca: if "050" in a_buscar: filas = [i for i in filas if "SACOS" in i[2] or "GRANEL" in i[2]] idprod = utils.dialogo_resultado(filas, titulo = 'SELECCIONE PRODUCTO', cabeceras = ('ID', 'Código', 'Descripción', 'Proveedor'), padre = self.wids['ventana']) if idprod < 0: return prod = pclases.ProductoCompra.get(idprod) else: prod = prods[0] self.producto = prod self.actualizar_ventana()
def buscar_rollo(self, txt): ar = None ars = pclases.Rollo.select(pclases.Rollo.q.numrollo.contains(txt)) if ars.count() == 1: ar = ars[0] elif ars.count() > 1: filas = [(a.id, a.numrollo, a.codigo) for a in ars] idrollo = utils.dialogo_resultado(filas, titulo = "Seleccione rollo", cabeceras = ('ID', 'Número de rollo', 'Código'), padre = self.wids['ventana']) if idrollo > 0: ar = pclases.Rollo.get(idrollo) return ar
def buscar_bala(self, txt): ar = None ars = pclases.Bala.select(pclases.Bala.q.numbala.contains(txt)) if ars.count() == 1: ar = ars[0] elif ars.count() > 1: filas = [(a.id, a.numbala, a.codigo) for a in ars] idbala = utils.dialogo_resultado(filas, titulo = "Seleccione bala", cabeceras = ('ID', 'Número de bala', 'Código'), padre = self.wids['ventana']) if idbala > 0: ar = pclases.Bala.get(idbala) return ar
def set_partida(self, w): comprobar_y_preguntar_si_guardar(self) numpartida = utils.dialogo_entrada(titulo = 'Nº PARTIDA', texto = 'Introduzca número de partida:', padre = self.wids['ventana']) if numpartida != None: numpartida = numpartida.upper().replace("P-", "") partidas = pclases.Partida.select( pclases.Partida.q.codigo.contains(numpartida)) if partidas.count() == 0: utils.dialogo_info(titulo = 'PARTIDA NO ENCONTRADA', texto = 'No se encontró ninguna partida %s.' % numpartida, padre = self.wids['ventana']) return elif partidas.count() > 1: filas = [(l.id, l.numpartida, l.codigo, l.partidaCarga and l.partidaCarga.codigo or "" , l.longitudinal, l.transversal, l.compresion, l.perforacion, l.permeabilidad, l.poros, l.espesor, l.piramidal ) for l in partidas] idpartida = utils.dialogo_resultado(filas, titulo = 'SELECCIONE PARTIDA', cabeceras = ('ID', 'Número', 'Código', 'Partida Carga', 'Longitudinal', 'Transversal', 'CBR', 'Perforación', 'Permeabilidad', 'Poros', 'Espesor', 'Piramidal'), padre = self.wids['ventana']) if idpartida < 0: return partida = pclases.Partida.get(idpartida) else: partida = partidas[0] if len(partida.rollos) == 0: utils.dialogo_info(titulo = 'PARTIDA VACÍA', texto = 'La partida no contiene rollos, no puede\n' 'realizar pruebas sobre una partida vacía.', padre = self.wids['ventana']) self.partida = None return self.partida = partida self.actualizar_ventana()
def ver_pedidos(self, boton): """ Muestra todos los pedidos asignados al proveedor actual. """ proveedor = self.objeto if proveedor == None: return pedidos = [(p.id, p.numpedido, utils.str_fecha(p.fecha)) for p in proveedor.pedidosCompra] idpedido = utils.dialogo_resultado(pedidos, 'PEDIDOS HECHOS AL PROVEEDOR', cabeceras = ('ID', 'Número de pedido', 'Fecha'), padre = self.wids['ventana']) if idpedido > 0: import pedidos_de_compra p = pedidos_de_compra.PedidosDeCompra(pclases.PedidoCompra.get(idpedido), usuario = self.usuario)
def ver_facturas(self, boton): """ Muestra todos los facturas asignados al proveedor actual. """ proveedor = self.objeto if proveedor == None: return facturas = [(p.id, p.numfactura, utils.str_fecha(p.fecha)) for p in proveedor.facturasCompra] idfactura = utils.dialogo_resultado(facturas, 'FACTUDAS DEL PROVEEDOR', cabeceras = ('ID', 'Número de factura', 'Fecha'), padre = self.wids['ventana']) if idfactura > 0: import facturas_compra p = facturas_compra.FacturasDeEntrada(pclases.FacturaCompra.get(idfactura), usuario = self.usuario)
def refinar_busqueda_pedidos(self, resultados): filas_res = [] for r in resultados: if r.proveedor != None: proveedor = r.proveedor.nombre else: proveedor = '' filas_res.append((r.id, r.numpedido, utils.str_fecha(r.fecha), proveedor, )) idpedido = utils.dialogo_resultado(filas_res, titulo = 'Seleccione pedido', cabeceras = ('ID Interno', 'Num. Pedido', 'Fecha', 'Proveedor'), padre = self.wids['ventana']) if idpedido < 0: return None else: return idpedido
def ver_consumos(self, boton): """ Muestra un diálogo de resultados con los consumos del lote completo mostrado en pantalla. """ if self.lote != None: consumos = self.lote.get_consumos() if consumos == {}: utils.dialogo_info(titulo = "SIN CONSUMO", texto = "¡El lote %s no ha consumido productos en su fabricación!\n\nCompruebe que no esté vacío." % self.lote.codigo, padre = self.wids['ventana']) else: filas = [("", p.descripcion, "%s %s" % (utils.float2str(consumos[p], 3, autodec = True), p.unidad)) for p in consumos] nada = utils.dialogo_resultado(filas, titulo = 'CONSUMOS DEL LOTE %s EN PARTES DE PRODUCCIÓN' % (self.lote.codigo), cabeceras = ('', 'Producto', 'Cantidad consumida'), padre = self.wids['ventana'])
def add_empleado(self): empleados = pclases.Empleado.select(orderBy = 'apellidos') empleados = [(e.id, e.nombre, e.apellidos) for e in empleados \ if e.activo and (e.planta or (e.categoriaLaboral and e.categoriaLaboral.lineaDeProduccion))] ids = utils.dialogo_resultado(filas = empleados, titulo = 'SELECCIONE EMPLEADOS', cabeceras = ('ID', 'Nombre', 'Apellidos'), multi = True) if ids == [-1]: return for id in ids: try: e = pclases.Empleado.get(id) self.add_empleado_a_parte(e) except sqlobject.SQLObjectNotFound: utils.dialogo_info(titulo = 'NÚMERO INCORRECTO', texto = 'El empleado con código identificador %d no existe o no se pudo agregar.' % id)
def refinar_resultados_busqueda(self, resultados): """ Muestra en una ventana de resultados todos los registros de "resultados". Devuelve el id (primera columna de la ventana de resultados) de la fila seleccionada o None si se canceló. """ filas_res = [] for r in resultados: filas_res.append((r.id, r.codigo, r.descripcion)) idproducto = utils.dialogo_resultado(filas_res, titulo = 'Seleccione producto', cabeceras = ('ID Interno', 'Código', 'Descripción')) if idproducto < 0: return None else: return idproducto
def refinar_resultados_busqueda(self, resultados): """ Muestra en una ventana de resultados todos los registros de "resultados". Devuelve el id (primera columna de la ventana de resultados) de la fila seleccionada o None si se canceló. """ filas_res = [] for r in resultados: filas_res.append((r.id,r.nombre)) idcentroTrabajo = utils.dialogo_resultado(filas_res, titulo = 'Seleccione categoria laboral', cabeceras = ('Código (ID)', 'Centro de trabajo')) if idcentroTrabajo < 0: return None else: return idcentroTrabajo
def refinar_resultados_busqueda(self, resultados): """ Muestra en una ventana de resultados todos los registros de "resultados". Devuelve el id (primera columna de la ventana de resultados) de la fila seleccionada o None si se canceló. """ filas_res = [] for r in resultados: filas_res.append((r.id, r.numpedido, utils.str_fecha(r.fecha), r.get_nombre_cliente())) idpedido = utils.dialogo_resultado(filas_res, titulo = 'Seleccione pedido', cabeceras = ('ID', 'Número de pedido', 'Fecha', 'Cliente')) if idpedido < 0: return None else: return idpedido
def refinar_resultados_busqueda(self, resultados): """ Muestra en una ventana de resultados todos los registros de "resultados". Devuelve el id (primera columna de la ventana de resultados) de la fila seleccionada o None si se canceló. """ filas_res = [] for r in resultados: filas_res.append((r.id, r.usuario)) idusuario = utils.dialogo_resultado(filas_res, titulo = 'Seleccione usuario', cabeceras = ('ID Interno', 'Nombre de usuario')) if idusuario < 0: return None else: return idusuario
def buscar_factura(self, cliente, filtrar_pagadas = True): """ Si filtrar_pagadas == True solo busca entre las facturas que tengan algún pendiente de cobro. """ fras = None numfra = utils.dialogo_entrada(titulo = "NÚMERO DE FACTURA", texto = "Introduzca el número de factura", padre = self.wids['ventana']) if numfra != None: fras = [((isinstance(f, pclases.FacturaVenta) and "FV:%d" % f.id) or \ (isinstance(f, pclases.Prefactura) and "PF:%d" % f.id) or "-1", f.numfactura, utils.str_fecha(f.fecha), "%s €" % (utils.float2str(f.importeTotal)), "%s €" % (utils.float2str(f.calcular_pendiente_cobro())), f) for f in cliente.facturasVenta + cliente.prefacturas if numfra.upper() in f.numfactura.upper()] if filtrar_pagadas: fras = [tupla for tupla in fras if tupla[-1].calcular_pendiente_cobro() > 0] if len(fras) > 1: idsfra = utils.dialogo_resultado([f[:-1] for f in fras], titulo = "SELECCIONE FACTURA", cabeceras = ('ID', 'Número de factura', 'Fecha', 'Importe total', 'Pendiente de cobro'), padre = self.wids['ventana'], multi = True) elif len(fras) == 1: idsfra = [fras[0][0]] else: utils.dialogo_info(titulo = "FACTURA NO ENCONTRADA", texto = "No se encontró ninguna factura.", padre = self.wids['ventana']) idsfra = [] fras = [] if len(idsfra) > 0 and idsfra[0] != -1 and idsfra[0] != -2: for tipo, id in [e.split(":") for e in idsfra]: idfra = int(id) if tipo == "FV": fras.append(pclases.FacturaVenta.get(idfra)) elif tipo == "PF": fras.append(pclases.Prefactura.get(idfra)) else: fras = None return fras