コード例 #1
0
ファイル: proveedores.py プロジェクト: pacoqueen/ginn
    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))
コード例 #2
0
ファイル: materias_activas.py プロジェクト: Virako/fpinn
 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
コード例 #3
0
 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
コード例 #4
0
 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)
コード例 #5
0
ファイル: motivos_ausencia.py プロジェクト: pacoqueen/ginn
 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
コード例 #6
0
ファイル: parcelas.py プロジェクト: Virako/fpinn
 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
コード例 #7
0
ファイル: fincas.py プロジェクト: Virako/fpinn
 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
コード例 #8
0
ファイル: recibos.py プロジェクト: pacoqueen/ginn
 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
コード例 #9
0
ファイル: jornales.py プロジェクト: Virako/fpinn
 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
コード例 #10
0
 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
コード例 #11
0
 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
コード例 #12
0
ファイル: facturas_venta.py プロジェクト: Virako/fpinn
 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
コード例 #13
0
ファイル: facturas_compra.py プロジェクト: Virako/fpinn
 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
コード例 #14
0
ファイル: resultados_grasa.py プロジェクト: pacoqueen/ginn
 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()
コード例 #15
0
ファイル: resultados_espesor.py プロジェクト: pacoqueen/ginn
 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()
コード例 #16
0
ファイル: empleados_produccion.py プロジェクト: Virako/fpinn
 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()
コード例 #17
0
ファイル: transferencias.py プロジェクト: pacoqueen/ginn
 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
コード例 #18
0
 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
コード例 #19
0
 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()
コード例 #20
0
ファイル: silos.py プロジェクト: pacoqueen/ginn
 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)
コード例 #21
0
 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
コード例 #22
0
ファイル: resultados_fluidez.py プロジェクト: pacoqueen/ginn
 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()
コード例 #23
0
ファイル: trazabilidad.py プロジェクト: Virako/fpinn
 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
コード例 #24
0
ファイル: trazabilidad.py プロジェクト: Virako/fpinn
 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
コード例 #25
0
ファイル: remesas.py プロジェクト: pacoqueen/ginn
 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()
コード例 #26
0
 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()
コード例 #27
0
 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
コード例 #28
0
ファイル: tarifas.py プロジェクト: Virako/fpinn
 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()
コード例 #29
0
ファイル: partes_de_trabajo.py プロジェクト: pacoqueen/ginn
 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)
コード例 #30
0
ファイル: resultados_fibra.py プロジェクト: pacoqueen/ginn
 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'])