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: from formularios import productos_compra p = productos_compra.ProductosCompra(pclases.ProductoCompra.get(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, r.listado, r.otros, r.plazoSeguridad, r.dosis)) id = utils.dialogo_resultado(filas_res, titulo = 'SELECCIONE %s' % self.clase.sqlmeta.table.upper(), cabeceras = ('ID', 'Materia activa', 'Listado', 'Otros', 'Plazo de seguridad', 'Dosis'), padre = self.wids['ventana']) if id < 0: return None else: return 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.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) from formularios 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.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: filas_res.append((r.id, r.parcela, r.sectorDeRiego, r.superficie, r.finca and r.finca.nombre or "¡Sin finca asignada!")) id = utils.dialogo_resultado(filas_res, titulo = 'SELECCIONE %s' % ( self.clase.sqlmeta.table.upper()), cabeceras = ('ID', 'Parcela', 'Sector de riego', 'Superficie', 'Finca'), padre = self.wids['ventana']) if id < 0: return None else: return 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.nombre, r.provincia, r.poblacion, r.poligono, r.superficie, r.altitud, r.parcela)) id = utils.dialogo_resultado(filas_res, titulo = 'SELECCIONE %s' % self.clase.sqlmeta.table.upper(), cabeceras = ('ID', 'Nombre', 'Provincia', 'Población', 'Polígono', 'Superficie', 'Altitud', 'Parcela'), padre = self.wids['ventana']) if id < 0: return None else: return 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.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: filas_res.append((r.id, r.empleado and r.empleado.nombre or "SIN EMPLEADO", utils.str_fechahora(r.fechahoraInicio), utils.str_fechahora(r.fechahoraFin))) id = utils.dialogo_resultado(filas_res, titulo = 'SELECCIONE %s' % self.clase.sqlmeta.table.upper(), cabeceras = ('ID', 'Empleado', 'Inicio', 'Fin'), padre = self.wids['ventana']) if id < 0: return None else: return id
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.numalbaran, r.fecha and r.fecha.strftime('%d/%m/%Y') or '', r.clienteID and r.cliente.nombre or "")) idalbaran = utils.dialogo_resultado(filas_res, titulo = 'Seleccione albarán', cabeceras = ('ID', 'Número de albarán', 'Fecha', 'Cliente'), padre = self.wids['ventana']) if idalbaran < 0: return None else: return idalbaran
def clon_srv(self, boton): """ Busca un servicio existente en la BD (previamente facturado, por tanto) y crea un nuevo servicio idéntico pero asociado a la factura actual. """ a_buscar = utils.dialogo_entrada(titulo = 'BUSCAR SERVICIO FACTURADO', texto = 'Introduzca un concepto (o parte) ya facturado:', padre = self.wids['ventana']) servicios = pclases.Servicio.select(pclases.Servicio.q.concepto.contains(a_buscar), orderBy = "concepto") filas = [(s.id, s.concepto, s.precio, (s.facturaVenta and s.facturaVenta.numfactura) or (s.prefactura and s.prefactura.numfactura) or '', (s.facturaVenta and s.facturaVenta.cliente and s.facturaVenta.cliente.nombre) or (s.prefactura and s.prefactura.cliente and s.prefactura.cliente.nombre) or '') for s in servicios] res = utils.dialogo_resultado(filas, "SELECCIONE SERVICIO", cabeceras = ('ID', 'Concepto', 'Precio', 'Facturado en', 'Cliente'), multi = True, padre = self.wids['ventana']) if res[0] > 0: for idservicio in res: servicio = pclases.Servicio.get(idservicio) nuevo_servicio = pclases.Servicio(facturaVenta = self.objeto, concepto = servicio.concepto, precio = servicio.precio, descuento = servicio.descuento) self.rellenar_servicios() self.rellenar_vencimientos() # Para que verifique si los totales coinciden
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.numfactura, utils.str_fecha(r.fecha), r.proveedor and r.proveedor.nombre or "")) id = utils.dialogo_resultado(filas_res, titulo = 'SELECCIONE %s' % self.clase.sqlmeta.table.upper(), cabeceras = ('ID', 'Número de factura', 'Fecha', 'Proveedor'), padre = self.wids['ventana']) if id < 0: return None else: return id
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 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 buscar(self, boton): a_buscar = utils.dialogo_entrada(titulo = "BUSCAR EMPLEADO", texto = "Introduzca nombre, código o DNI:", padre = self.wids['ventana']) if a_buscar != None: if a_buscar.isdigit(): subcriterios = [pclases.Empleado.q.id == int(a_buscar)] else: subcriterios = [] if a_buscar: subnombre = pclases.AND(*[pclases.Empleado.q.nombre.contains( subtext) for subtext in a_buscar.split()]) subcriterios.append(subnombre) subdni = pclases.AND(*[pclases.Empleado.q.dni.contains(subtext) for subtext in a_buscar.split()]) subcriterios.append(subdni) resultados = pclases.Empleado.select(pclases.OR(*subcriterios), orderBy = "nombre") else: resultados = pclases.Empleado.select(orderBy = "nombre") resultados = [(r.id, r.nombre, r.dni) for r in resultados] idempleado = utils.dialogo_resultado(resultados, "SELECCIONE EMPLEADO", padre = self.wids['ventana'], cabeceras=("ID", "Nombre", "DNI")) if idempleado and idempleado > 0: self.empleado = pclases.Empleado.get(idempleado) self.rellenar_widgets()
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 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.nombre, r.descripcion)) idproducto = utils.dialogo_resultado(filas_res, titulo = 'Seleccione producto', cabeceras = ('ID Interno', 'Código', 'Nombre', 'Descripción'), padre = self.wids['ventana'], abrir_en_ventana_nueva = (ProductosDeVentaBalas, pclases.ProductoVenta, self.usuario)) if idproducto < 0: return None else: return idproducto
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 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_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 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 add_efecto(self, boton): """ Añade un pagaré o un confirming a la remesa, creando si hace falta el efecto "intermedio". """ efectos = [] # TODO: Aquí falta una barra de progreso y/o pedir un criterio de # búsqueda. O bien abrir la ventana de consulta pero con un # botón añadir a una remesa existente en lugar de "Generar". for p in pclases.PagareCobro.select(): if not p.remesado and p.esta_pendiente(): if not p.efecto: pclases.Efecto(pagareCobro = p, confirming = None, cuentaBancariaCliente = None) efecto = p.efecto efectos.append(efecto) # Los confirming no se envían en remesas. Solo pagarés. #for c in pclases.Confirming.select(): # if not c.remesado and c.esta_pendiente(): # if not c.efecto: # pclases.Efecto(pagareCobro = None, # confirming = c, # cuentaBancariaCliente = None) # efecto = c.efecto # efectos.append(efecto) efectos = [(e.id, e. codigo, e.cliente and e.cliente.nombre or "", utils.float2str(e.cantidad), utils.str_fecha(e.fechaVencimiento), utils.str_fecha(e.fechaRecepcion), e.get_str_tipo()) for e in efectos] idefectos = utils.dialogo_resultado(efectos, titulo = "SELECCIONE EFECTOS DE COBRO", texto = "Seleccione uno o varios efectos a incluir en la remesa.", padre = self.wids['ventana'], cabeceras = ["ID", "Código", "Cliente", "Importe", "Fecha de vencimiento", "Fecha de recepción", "Tipo"], multi = True) # FIXME: Ojo. No se hacen las comprobaciones de límite de # concentraciones, disponible, etc. Ni siquiera se indican # visualmente en la ventana los valores para ver si la remesa # excede los límites aceptados por el banco. for idefecto in idefectos: efecto = pclases.Efecto.get(idefecto) self.objeto.addEfecto(efecto) if idefectos: self.actualizar_ventana()
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 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 add_producto(self, b): """ Añade un precio a la tarifa, y a éste el producto seleccionado. En principio estaba contemplado que a un mismo precio (y sus detalles) se le asociara uno o varios productos. Esto es muy difícil de representar en un GUI y que resulte intuitivo, así que por cada producto añadido a la tarifa se creará un precio al que se le añadirán detalles independientemente o a la vez si se seleccionan varias líneas en el TreeView al darle al botón de añadir detalle. """ productos_no_en_tarifa = [] for p in pclases.ProductoVenta.select(): esta = False for precio in p.precios: if precio.tarifa == self.objeto: esta = True if not esta: productos_no_en_tarifa.append((p.id, p.nombre)) productos = utils.dialogo_resultado(productos_no_en_tarifa, "SELECCIONE UNO O VARIOS PRODUCTOS", padre = self.wids['ventana'], cabeceras = ("ID", "Producto"), multi = True) if productos[0] > 0: for idp in productos: producto = pclases.ProductoVenta.get(idp) precio = pclases.Precio(tarifa = self.objeto, descripcion = "Precio neto base") #Creo conceptos por defecto según la configuración del producto: if producto.envasep: pclases.Concepto(precio = precio, concepto = "Envase", importe = 0.0) if producto.manipulacion: pclases.Concepto(precio = precio, concepto = "Manipulación", importe = 0.0) if producto.transporte: pclases.Concepto(precio = precio, concepto = "Transporte", importe = 0.0) if producto.tarifa: pclases.Concepto(precio = precio, concepto = "Tarrina", importe = 0.0) precio.addProductoVenta(producto) self.rellenar_tabla_precios()
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 ide in ids: try: e = pclases.Empleado.get(ide) self.add_empleado_a_parte(e) except pclases.SQLObjectNotFound: utils.dialogo_info(titulo = 'NÚMERO INCORRECTO', texto = 'El empleado con código identificador %d no existe o no se pudo agregar.' % ide)
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, # @UnusedVariable titulo = 'CONSUMOS DEL LOTE %s EN PARTES DE PRODUCCIÓN' % (self.lote.codigo), cabeceras = ('', 'Producto', 'Cantidad consumida'), padre = self.wids['ventana'])