示例#1
0
 def actualizar_asistencia(self, cell, path):
     """
     Crea o elimina un registro pclases.Asistencia en función de si se 
     marca o se desmarca la casilla del TreeView.
     """
     model = self.wids['tv_asistencias'].get_model()
     model[path][1] = not model[path][1]
     if model[path].parent:
         clientes = [pclases.getObjetoPUID(model[path][-1])]
         actividad = pclases.getObjetoPUID(model[path].parent[-1])
         # Es un alumno, actualizo el padre si todos asisten.
         z = model[path][1] and 1 or -1
         model[path].parent[1] = (
             len(actividad.asistencias) + z == len(actividad.clientes))
     else:
         actividad = pclases.getObjetoPUID(model[path][-1])
         clientes = actividad.clientes
         # Es todo el grupo. Actualizo sus hijos.
         for iterhijo in model[path].iterchildren():
             iterhijo[1] = model[path][1]
     if model[path][1]:
         for cliente in clientes:
             if cliente not in [a.cliente for a in actividad.asistencias]:
                 pclases.Asistencia(cliente = cliente, 
                                    actividad = actividad, 
                                    fechahora = datetime.datetime.today(), 
                                    observaciones = "")
     else:
         asistencias = [a for a in actividad.asistencias 
                        if a.cliente in clientes]
         for asistencia in asistencias:
             asistencia.destroySelf()
示例#2
0
 def facturar_seleccionado(self, boton):
     """
     Factura las actividades seleccionadas.
     """
     sel = self.wids['tv_datos'].get_selection()
     model, iters = sel.get_selected_rows()
     a_facturar = {}
     for iter in iters:
         puid = model[iter][-1]
         try:
             objeto = pclases.getObjetoPUID(puid)
         except ValueError:
             continue    # Es una clase sin producto relacionado.
         if isinstance(objeto, pclases.Cliente):
             # Facturar todas las actividades del cliente.
             for iterproducto in model[iter].iterchildren():
                 iterproducto = iterproducto.iter
                 for iteractividad in model[iterproducto].iterchildren():
                     try:
                         actividad=pclases.getObjetoPUID(iteractividad[-1])
                     except ValueError:
                         continue # Es una clase sin producto relacionado.
                     try:
                         a_facturar[objeto].append(actividad)
                     except KeyError:
                         a_facturar[objeto] = [actividad]
         elif isinstance(objeto, pclases.ProductoCompra):
             producto = objeto
             puidcliente = model[iter].parent[-1]
             cliente = pclases.getObjetoPUID(puidcliente)
             for iterhijo in model[iter].iterchildren():
                 try:
                     actividad = pclases.getObjetoPUID(iterhijo[-1])
                 except ValueError:
                     continue    # Es una clase sin producto relacionado.
                 try:
                     a_facturar[cliente].append(actividad)
                 except KeyError:
                     a_facturar[cliente] = [actividad]
         elif isinstance(objeto, pclases.Actividad):
             actividad = objeto
             puid = model[iter].parent.parent[-1]
             cliente = pclases.getObjetoPUID(puid)
             try:
                 a_facturar[cliente].append(actividad)
             except KeyError:
                 a_facturar[cliente] = [actividad]
         # Como solo muestro una actividad por producto, para no 
         # multiplicar por el número de clases el importe del producto 
         # completo, ahora tengo que mandar a facturar todas las 
         # actividades del mismo producto que no han entrado en el model 
         # pero que están en self.resultado.
         try:
             producto = actividad.get_or_guess_productoCompra()
         except UnboundLocalError:   # No hay actividad a facturar. El 
             pass                    # cliente no tenía hijos o vete tú 
         else:                       # a saber.
             a_facturar[cliente] += self.resultado[cliente][producto]
     self.crear_facturas(a_facturar)
示例#3
0
 def cambiar_descripcion_actividad(self, cell, path, text):
     model = self.wids['tv_actividades'].get_model()
     puid = model[path][-1]
     p = pclases.getObjetoPUID(puid)
     p.descripcion = text
     p.syncUpdate()
     model[path][0] = p.descripcion
示例#4
0
 def abrir_factura(self, tv, path, view_column):
     model = tv.get_model()
     puid = model[path][-1]
     if puid:
         objeto = pclases.getObjetoPUID(puid)
         if isinstance(objeto, pclases.FacturaVenta):
             fra = objeto 
             try:
                 import facturas_venta
             except ImportError:
                 from os.path import join as pathjoin
                 from sys import path
                 path.insert(0, pathjoin("..", "formularios"))
                 import facturas_venta
             ventana = facturas_venta.FacturasVenta(fra, self.usuario)
         elif isinstance(objeto, pclases.Cliente):
             cliente = objeto 
             try:
                 import clientes
             except ImportError:
                 from os.path import join as pathjoin
                 from sys import path
                 path.insert(0, pathjoin("..", "formularios"))
                 import clientes
             ventana_clientes = clientes.Clientes(cliente, self.usuario)
示例#5
0
 def imprimir_ticket(self, boton):
     """
     Genera un ticket en texto plano y lo lanza a la impresora de tickets.
     """
     tv = self.wids['tv_datos']
     model, iter = tv.get_selection().get_selected()
     path = model.get_path(iter)
     puid = model[path][-1]
     if puid:
         try:
             objeto = pclases.getObjetoPUID(puid)
         except:
             return
         if isinstance(objeto, pclases.FacturaVenta):
             fra = objeto
             if utils.dialogo(titulo = "¿IMPRIMIR TICKET?", 
                     texto = "¿Desea imprimir el ticket?\n\n\n"
                             "Necesitará una impresora de tickets \n"
                             "encendida y conectada al puerto paralelo.\n"
                             "En otro caso se provocará un error.", 
                     padre = self.wids['ventana'], 
                     defecto = True, 
                     tiempo = 20): 
                 imprimir_ticket_from_factura(fra)
             self.preguntar_si_cobrado(fra)
示例#6
0
 def drop_actividad(self, boton):
     sel = self.wids['tv_actividades'].get_selection()
     model, iters = sel.get_selected_rows()
     for iter in iters:
         puid = model[iter][-1]
         actividad = pclases.getObjetoPUID(puid)
         actividad.destroySelf()
     self.rellenar_tabla_actividades()
示例#7
0
 def abrir_cliente(self, tv, path, cv):
     model = tv.get_model()
     puid = model[path][-1]
     print puid
     if puid:
         objeto = pclases.getObjetoPUID(puid)
         import clientes
         v = clientes.Clientes(usuario = self.usuario, 
                               objeto = objeto)
示例#8
0
 def drop_docpago(self, boton):
     """
     Elimina el documento de pago seleccionado.
     """
     sel = self.wids["tv_documentos_pago"].get_selection()
     model, iter = sel.get_selected()
     if iter:
         objeto = pclases.getObjetoPUID(model[iter][-1])
         objeto.destroy_en_cascada()
         model.remove(iter)
示例#9
0
 def abrir_factura(self, tv, path, view_column):
     """
     Abre la factura a la que pertenece el vencimiento sobre el que se ha 
     hecho doble clic.
     """
     model = tv.get_model()
     puid = model[path][-1]
     fra = pclases.getObjetoPUID(puid)
     if isinstance(fra, pclases.FacturaVenta):
         import facturas_venta
         v = facturas_venta.FacturasVenta(fra, usuario = self.usuario)
示例#10
0
 def abrir_cliente(self, tv, path, cv):
     """
     Abre el cliente seleccionado en una nueva ventana.
     """
     model = tv.get_model()
     while model[path].parent:
         path = model[path].parent.path
     puid = model[path][-1]
     objeto = pclases.getObjetoPUID(puid)
     import clientes
     v = clientes.Clientes(objeto, usuario = self.usuario)
示例#11
0
 def abrir_grupo(self, tv, path, cv, dia):
     """
     Abre el grupo al que se le ha hecho doble clic. Recibe el día, pero 
     no se llega a usar.
     """
     model = tv.get_model()
     puid = model[path][-1]
     objeto = pclases.getObjetoPUID(puid)
     if isinstance(objeto, pclases.Actividad):
         actividad = objeto
         grupo = actividad.grupoAlumnos
     elif isinstance(objeto, pclases.Asistencia):
         grupo = objeto.actividad.grupo
     elif isinstance(objeto, pclases.Cliente):
         puidgrupo = model[path].parent[-1]
         grupo = pclases.getObjetoPUID(puidgrupo)
     else:
         grupo = objeto
     if grupo:   # Es posible que no esté asignado, aunque en ese caso no 
                 # aparecería en el TreeView, pero por si las moscas.
         import grupos_alumnos
         v = grupos_alumnos.GruposAlumnos(grupo, usuario = self.usuario)
示例#12
0
 def cambiar_fin_actividad(self, cell, path, text):
     model = self.wids['tv_actividades'].get_model()
     puid = model[path][-1]
     p = pclases.getObjetoPUID(puid)
     try:
         p.fechahoraFin = utils.parse_fechahora(text)
         p.syncUpdate()
     except (TypeError, ValueError):
         utils.dialogo_info(titulo = "ERROR DE FORMATO", 
                            texto = "La fecha %s no es correcta." % text, 
                            padre = self.wids['ventana'])
     else:
         model[path][3] = utils.str_fechahora(p.fechahoraFin)
示例#13
0
 def drop_cliente(self, boton):
     for tvname in ("tv_clientes", "tv_espera"):
         sel = self.wids[tvname].get_selection()
         model, iters = sel.get_selected_rows()
         for iter in iters:
             puid = model[iter][-1]
             cliente = pclases.getObjetoPUID(puid)
             # Lo elimino de las clases no dadas:
             if not self.objeto.en_lista_de_espera(cliente):
                 acts = self.objeto.get_actividades_pendientes()
                 for a in acts:
                     a.removeCliente(cliente)
             cliente.removeGrupoAlumnos(self.objeto)
     self.rellenar_tabla_clientes()
 def abrir_producto(self, tv, path, column):
     """
     Abre el producto al que se le ha hecho doble clic en una ventana nueva.
     """
     model = tv.get_model()
     puid = model[path][-1]
     producto = pclases.getObjetoPUID(puid)
     if producto.es_rollo():
         import productos_de_venta_rollos
         V = productos_de_venta_rollos.ProductosDeVentaRollos
         ventana_producto = V(producto, usuario = self.usuario)
     elif producto.es_bala() or producto.es_bigbag() or producto.es_bolsa():
         import productos_de_venta_balas
         V = productos_de_venta_balas.ProductosDeVentaBalas
         ventana_producto = V(producto, usuario = self.usuario)
示例#15
0
    def abrir_factura(self, tv, path, cv):
        """
        Abre la factura relacionada con el cobro o el vencimiento.
        """
        model = tv.get_model()
        puid = model[path][-1]
        if puid:
            objeto = pclases.getObjetoPUID(puid)
            factura = objeto.get_factura_o_prefactura()
            if isinstance(factura, pclases.FacturaVenta):
                import facturas_venta

                v = facturas_venta.FacturasVenta(factura, usuario=self.usuario)
            elif isinstance(factura, pclases.Prefactura):
                import prefacturas

                v = prefacturas.Prefacturas(factura, usuario=self.usuario)
示例#16
0
    def abrir_calendario(self, tv, path, cv):
        """
        Abre el calendario con el día del evento seleccionado.
        """
        model = tv.get_model()
        puid = model[path][-1]
        if puid:
            objeto = pclases.getObjetoPUID(puid)
            if hasattr(objeto, "fechahoraInicio"):
                import up_calendario

                v = up_calendario.Calendario(usuario=self.usuario, objeto=objeto)
            elif isinstance(objeto, pclases.Cobro):
                fra = objeto.facturaVenta
                import facturas_venta

                v = facturas_venta.FacturasVenta(usuario=self.usuario, objeto=fra)
示例#17
0
 def mostrar_info_factura(self, tv):
     """
     Rellena la información de la factura en los "entries": importe y forma 
     de pago.
     """
     model, iter = tv.get_selection().get_selected()
     if iter:
         path = model.get_path(iter)
         puid = model[path][-1]
         if puid:
             try:
                 objeto = pclases.getObjetoPUID(puid)
             except:
                 return
             if isinstance(objeto, pclases.FacturaVenta):
                 fra = objeto 
                 importe = fra.calcular_total()
                 formapago = fra.get_forma_de_pago()
                 self.wids['e_importe'].set_text(utils.float2str(importe))
                 self.wids['e_formapago'].set_text(formapago)
示例#18
0
 def imprimir(self, boton):
     # OJO: Como no hay catálogo de pruebas en la base de datos, las 
     # unidades, métodos y descripciones de las pruebas sobre geotextiles 
     # están HARCODED aquí.
     # PLAN: Meter todo esto en el tablas.sql, como debe de ser.
     data_prueba = {
         "Resistencia longitudinal": 
             {"descripción": "Resistencia a la tracción DM", 
              "método": "EN ISO 10319", 
              "unidad": "kN/m"}, 
         "Resistencia transversal":  
             {"descripción": "Resistencia a la tracción DT", 
              "método": "EN ISO 10319", 
              "unidad": "kN/m"}, 
         "Alargamiento longitudinal":  
             {"descripción": "Alargamiento DM", 
              "método": "EN ISO 10319", 
              "unidad": "%"}, 
         "Alargamiento transversal":  
             {"descripción": "Alargamiento DT", 
              "método": "EN ISO 10319", 
              "unidad": "%"}, 
         "Perforación":  
             {"descripción": 
                 "Resistencia a la perforación dinámica (Caída de cono)", 
              "método": "EN ISO 13433", 
              "unidad": "mm"}, 
         "Resistencia a la compresión":  
             {"descripción": 
                 "Resistencia al punzonado estático (CBR a perforación)", 
              "método": "EN ISO 12236", 
              "unidad": "kN"}, 
         "Apertura de poros":  
             {"descripción": "Medida de apertura (Porometría 090)", 
              "método": "EN ISO 12956", 
              "unidad": "mm"}, 
         "Punzonado piramidal":  
             {"descripción": "Resistencia al punzonado piramidal", 
              "método": "NF G38-019", 
              "unidad": "kN"}, 
         "Permeabilidad":  
             {"descripción": "Permeabilidad perpendicular al agua", 
              "método": "EN ISO 11058", 
              "unidad": "l/m²/s"}, 
         "Gramaje":  
             {"descripción": "Gramaje", 
              "método": "EN ISO 9864", 
              "unidad": "g/m²"}, 
         "Espesor": 
             {"descripción": "Espesor bajo 2 kPa", 
              "método": "EN ISO 9863-1", 
              "unidad": "mm"}
         }
     if not self.objeto:
         return
     #tv = self.wids['tv_datos']
     #from treeview2pdf import treeview2pdf
     from informes import abrir_pdf
     #strfecha = "%s - %s" % (utils.str_fecha(mx.DateTime.localtime()), 
     #                        utils.str_hora(mx.DateTime.localtime()))
     #abrir_pdf(treeview2pdf(tv, 
     #    titulo = "Certificado de calidad de albarán %s" % (
     #        self.objeto.numalbaran),
     #    fecha = strfecha, 
     #    apaisado = False))
     path_informes = os.path.join("..", "informes")
     if path_informes not in sys.path:
         sys.path.append(path_informes)
     import informe_certificado_calidad
     from geninformes import give_me_the_name_baby
     from time import sleep
     dic_productos = {}
     model = self.wids['tv_datos'].get_model()
     for fila in model:
         producto = pclases.getObjetoPUID(fila[-1])
         dic_productos[producto] = {}
         for hijo in fila.iterchildren():
             caracteristica = hijo[0]
             valor = hijo[-2]
             dic_productos[producto][caracteristica] = {
                 "descripción": data_prueba[caracteristica]["descripción"], 
                 "método": data_prueba[caracteristica]["método"], 
                 "unidad": data_prueba[caracteristica]["unidad"], 
                 "valor": valor}
     for producto in dic_productos:
         dic_valores = dic_productos[producto]
         if producto.es_rollo():
             orden = ("Resistencia longitudinal", 
                      "Resistencia transversal", 
                      "Alargamiento longitudinal", 
                      "Alargamiento transversal", 
                      "Perforación", 
                      "Resistencia a la compresión", 
                      "Apertura de poros", 
                      "Permeabilidad", 
                      "Gramaje", 
                      "Espesor", 
                      "Punzonado piramidal")
         nomfich = informe_certificado_calidad.go(
             "certcalidad_%s.pdf" % give_me_the_name_baby(), 
             producto, 
             dic_valores, 
             pclases.DatosDeLaEmpresa.select()[0], 
             self.objeto, 
             orden = orden)
         sleep(1)
         abrir_pdf(nomfich)
示例#19
0
def abrir_trazabilidad(tv, path, view_col, usuario):
    puid = tv.get_model()[path][-1]
    objeto = pclases.getObjetoPUID(puid)
    import trazabilidad_articulos
    v = trazabilidad_articulos.TrazabilidadArticulos(usuario = usuario, 
                                                     objeto = objeto)
示例#20
0
 def cambiar_observaciones_pagare(self, cell, path, texto):
     model = self.wids['tv_documentos_pago'].get_model() 
     puid = model[path][-1]
     objeto = pclases.getObjetoPUID(puid)
     objeto.observaciones = texto
     model[path][4] = objeto.observaciones
示例#21
0
 def abrir_objeto(self, tv, path, view_col):
     puid = tv.get_model()[path][-1]
     o = pclases.getObjetoPUID(puid)
     if isinstance(o, pclases.FacturaCompra):
         from facturas_compra import FacturasDeEntrada as NewW
     elif isinstance(o, pclases.Proveedor):
         from proveedores import Proveedores as NewW
     elif isinstance(o, pclases.AlbaranEntrada):
         from albaranes_de_entrada import AlbaranesDeEntrada as NewW
     elif isinstance(o, pclases.LineaDeCompra):
         if o.facturaCompra:
             from facturas_compra import FacturasDeEntrada as NewW
             o = o.facturaCompra
         elif o.albaranEntrada:
             from albaranes_de_entrada import AlbaranesDeEntrada as NewW
             o = o.albaranEntrada
         else:
             o = None
     elif isinstance(o, pclases.TransporteACuenta):
         if o.proveedor:
             from proveedores import Proveedor as NewW
             o = o.proveedor
         else:
             from albaranes_de_salida import AlbaranesDeSalida as NewW
             o = o.albaranSalida
     elif isinstance(o, pclases.ServicioTomado):
         if o.facturaCompra:
             from facturas_compra import FacturasDeEntrada as NewW
             o = o.facturaCompra
         elif o.comision:
             if o.comision.facturaVenta:
                 from facturas_venta import FacturasVenta as NewW
                 o = o.comision.facturaVenta
             elif o.comision.albaranSalida:
                 from albaranes_de_salida import AlbaranesDeSalida as NewW
                 o = o.comision.albaranSalida
             else:
                 o = None
         else:
             o = None
     elif isinstance(o, pclases.AlbaranSalida):
         from albaranes_de_salida import AlbaranesDeSalida as NewW
     else:
         o = None
     if o:
         self.wids['ventana'].window.set_cursor(
             gtk.gdk.Cursor(gtk.gdk.WATCH))
         while gtk.events_pending(): gtk.main_iteration(False)
         if not self.usuario:
             self.wids['ventana'].window.set_cursor(None)
             v = NewW(objeto = o, usuario = self.usuario)
         else:
             try:
                 ventana = pclases.Ventana.selectBy(
                     fichero = NewW.__module__)[0]
             except IndexError:#¿Ventana no está dada de alta en el sistema?
                 self.wids['ventana'].window.set_cursor(None)
                 v = NewW(objeto = o, usuario = self.usuario)
             else:
                 if self.usuario.get_permiso(ventana):
                     self.wids['ventana'].window.set_cursor(None)
                     v = NewW(objeto = o, usuario = self.usuario)
                 else:
                     utils.dialogo_info(titulo = "USUARIO SIN PERMISO", 
                         texto = "Carece de permiso para abrir el elemento"
                                 "en una ventana nueva.", 
                         padre = self.wids['ventana'])