示例#1
0
 def __init__(self, objeto = None, usuario = None):
     """
     Constructor. objeto puede ser un objeto de pclases con el que
     comenzar la ventana (en lugar del primero de la tabla, que es
     el que se muestra por defecto).
     """
     global fin
     Ventana.__init__(self, os.path.join("ui", 'consulta_precios.glade'), objeto)
     connections = {'b_salir/clicked': self.salir,
                    'b_buscar/clicked': self.buscar,
                    'b_imprimir/clicked': self.imprimir,
                    'b_fecha_inicio/clicked': self.set_inicio,
                    'b_fecha_fin/clicked': self.set_fin, 
                    'b_exportar/clicked': self.exportar}
     self.add_connections(connections)
     cols = [('Fecha', 'gobject.TYPE_STRING', False, True, True, None)]
     for p in pclases.ProductoVenta.select(orderBy = "nombre"):
         cols.append((p.nombre, "gobject.TYPE_STRING", 
                      False, False, False, None))
     cols += [('id', 'gobject.TYPE_STRING', False, False, False, None)]
     utils.preparar_listview(self.wids['tv_datos'], cols)
     for i in range(1, len(cols)-1):
         col = self.wids['tv_datos'].get_column(i)
         for cell in col.get_cell_renderers():
             cell.set_property("xalign", 1)
     temp = mx.DateTime.localtime()
     self.fin = utils.abs_mxfecha(temp)
     self.wids['e_fechafin'].set_text(utils.str_fecha(temp))
     self.wids['tv_datos'].set_size_request(700, 200)
     gtk.main()
示例#2
0
文件: seeker.py 项目: pacoqueen/ginn
 def es_diferente(self, debug_mode = False):
     """
     Devuelve True si algún valor en ventana difiere de 
     los del objeto.
     Si debug_mode es True devuelve la lista de campos que no son 
     iguales en vez de un booleano.
     """
     campos_diferentes = []
     if self.objeto == None:
         igual = True
     else:
         igual = self.objeto != None
         for colname in self.clase.sqlmeta.columns:
             col = self.clase.sqlmeta.columns[colname]
             valor_ventana = self.leer_valor(col)
             valor_objeto = getattr(self.objeto, col.name)
             if isinstance(col, pclases.SODateCol):
                 valor_objeto = utils.abs_mxfecha(valor_objeto)
             igual = igual and (valor_ventana == valor_objeto)
             if not igual:
                 campos_diferentes.append(colname)
                 if not debug_mode:  # No sigo mirando
                     break
     if not debug_mode:
         return not igual
     else:
         return campos_diferentes
示例#3
0
文件: remesas.py 项目: pacoqueen/ginn
 def es_diferente(self):
     """
     Devuelve True si algún valor en ventana difiere de 
     los del objeto.
     """
     if self.objeto == None:
         igual = True
     else:
         igual = self.objeto != None
         for colname in self.dic_campos:
             if colname in ("id", ):
                 continue
             col = self.clase.sqlmeta.columns[colname]
             try:
                 valor_ventana = self.leer_valor(col, 
                                                 self.dic_campos[colname])
             except (ValueError, mx.DateTime.RangeError, TypeError):
                 if isinstance(col, pclases.SODateCol):
                     valor_ventana = None
                 else:
                     igual = False
             valor_objeto = getattr(self.objeto, col.name)
             if isinstance(col, pclases.SODateCol):
                 if valor_objeto:
                     valor_objeto = utils.abs_mxfecha(valor_objeto)
             igual = igual and (valor_ventana == valor_objeto)
             if not igual:
                 break
     return not igual
示例#4
0
文件: salarios.py 项目: Virako/fpinn
 def drop_jornal(self, b):
     selection = self.wids['tv_jornales'].get_selection()
     model, paths = selection.get_selected_rows()
     for path in paths:
         id = model[path][-1]
         jornal = pclases.Jornal.get(id)
         # jornal.destroySelf()
         jornal.salario.horasCampo -= jornal.horasCampo
         jornal.salario.totalEuros -= (jornal.eurosCampo 
                                       + jornal.eurosManipulacion)
         dia = utils.abs_mxfecha(jornal.fechahoraInicio)
         dias = [utils.abs_mxfecha(j.fechahoraInicio) for j in jornal.salario.jornales]
         if dias.count(dia) == 1:
             jornal.salario.totalEuros -= jornal.empleado.precioDiario
         jornal.salario = None
     self.objeto.update_actividad()
     self.actualizar_ventana()
示例#5
0
文件: salarios.py 项目: Virako/fpinn
 def add_jornal(self, b):
     """
     Muestra un diálogo de resultados con los jornales sin salarios 
     relacionados, pertenecientes al empleado del registro salario y 
     su fechahoraInicio esté entre la fecha del salario y el final del 
     mes de esa misma fecha.
     """
     findemes = mx.DateTime.DateTimeFrom(day = -1, 
                                         month = self.objeto.fecha.month, 
                                         year = self.objeto.fecha.year)
     findemes += mx.DateTime.oneDay  # Porque vamos a comparar con fechahora.
     J = pclases.Jornal
     jornales = J.select(pclases.AND(J.q.salarioID == None, 
                                 J.q.empleadoID == self.objeto.empleadoID, 
                                 J.q.fechahoraInicio < findemes, 
                                 J.q.fechahoraInicio >= self.objeto.fecha), 
                         orderBy = "fechahoraInicio")
     cabeceras=("ID", "Inicio", "Fin", "Actividad", "Parcela", "Produccion")
     filas = [(j.id, 
               utils.str_fechahora(j.fechahoraInicio), 
               utils.str_fechahora(j.fechahoraFin), 
               j.actividad and j.actividad.descripcion or "", 
               j.parcela and j.parcela.parcela or "", 
               utils.float2str(j.produccion))
              for j in jornales]
     resjornales = utils.dialogo_resultado(filas, 
                                           "SELECCIONE JORNADAS", 
                                           self.wids['ventana'], 
                                           cabeceras, 
                                           multi = True)
     if resjornales and resjornales[0] > 0:
         for jid in resjornales:
             jornal = pclases.Jornal.get(jid)
             jornal.salario = self.objeto
             jornal.salario.horasCampo += jornal.horasCampo
             jornal.salario.totalEuros += (jornal.eurosCampo 
                                           + jornal.eurosManipulacion)
             dia = utils.abs_mxfecha(jornal.fechahoraInicio)
             dias = [utils.abs_mxfecha(j.fechahoraInicio) for j in jornal.salario.jornales]
             if dia not in dias:
                 jornal.salario.totalEuros += jornal.empleado.precioDiario
         self.objeto.update_actividad()
         self.actualizar_ventana()
def add_ldv_a_diccionario_resultados(ldv, r):
    if ldv.productoCompra:
        material = ldv.productoCompra.tipoDeMaterial
    else:
        material = None
    if material not in r:
        r[material] = {}
    if ldv.facturaVenta:
        fecha = ldv.facturaVenta.fecha
    elif ldv.albaranSalida:
        fecha = ldv.albaranSalida.fecha
    elif ldv.ticket:
        fecha = utils.abs_mxfecha(ldv.ticket.fechahora)
    else:
        fecha = None
    if fecha not in r[material]:
        r[material][fecha] = [ldv]
    else:
        r[material][fecha].append(ldv)
示例#7
0
 def __init__(self, objeto = None, usuario = None):
     """
     Constructor. objeto puede ser un objeto de pclases con el que
     comenzar la ventana (en lugar del primero de la tabla, que es
     el que se muestra por defecto).
     """
     global fin
     Ventana.__init__(self, os.path.join("ui", 
         'consulta_clientes.glade'), objeto)
     connections = {'b_salir/clicked': self.salir,
                    'b_buscar/clicked': self.buscar,
                    'b_imprimir/clicked': self.imprimir,
                    'b_fecha_inicio/clicked': self.set_inicio,
                    'b_fecha_fin/clicked': self.set_fin, 
                    'b_exportar/clicked': self.exportar}
     self.add_connections(connections)
     cols = (('Cliente', 'gobject.TYPE_STRING', False, True, True, None),
             ('Producto', 'gobject.TYPE_STRING', False, True, False, None),
             ('Media precio', 'gobject.TYPE_STRING', 
                 False, True, False, None),
             ('Facturación', 'gobject.TYPE_STRING', 
                 False, True, False, None),
             ('% facturación', 'gobject.TYPE_STRING', 
                 False, True, False, None),
             ('kg facturados', 'gobject.TYPE_STRING', 
                 False, True, False, None),
             ('id', 'gobject.TYPE_STRING', False, False, False, None))
     utils.preparar_treeview(self.wids['tv_datos'], cols)
     for i in range(2, 6):
         col = self.wids['tv_datos'].get_column(i)
         for cell in col.get_cell_renderers():
             cell.set_property("xalign", 1)
     col = self.wids['tv_datos'].get_column(1)
     self.wids['tv_datos'].set_expander_column(col)
     temp = mx.DateTime.localtime()
     self.fin = utils.abs_mxfecha(temp)
     self.wids['e_fechafin'].set_text(utils.str_fecha(temp))
     ops = []
     for s in pclases.SerieFacturasVenta.select():
         ops.append((s.id, s.get_info()))
     utils.rellenar_lista(self.wids['cb_serie'], ops)
     gtk.main()
示例#8
0
 def __init__(self, objeto = None, usuario = None):
     """
     Constructor. objeto puede ser un objeto de pclases con el que
     comenzar la ventana (en lugar del primero de la tabla, que es
     el que se muestra por defecto).
     """
     global fin
     Ventana.__init__(self, os.path.join("ui", 'consulta_parcelas.glade'), objeto)
     connections = {'b_salir/clicked': self.salir,
                    'b_buscar/clicked': self.buscar,
                    'b_imprimir/clicked': self.imprimir,
                    'b_fecha_inicio/clicked': self.set_inicio,
                    'b_fecha_fin/clicked': self.set_fin, 
                    'b_exportar/clicked': self.exportar}
     self.add_connections(connections)
     cols = (('Parcela', 'gobject.TYPE_STRING', False, True, True, None),
             ('Kg/planta', 'gobject.TYPE_STRING', False, True, False, None),
             ('Kg totales', 'gobject.TYPE_STRING', False, True, False, None),
             ('Gastos apertura', 'gobject.TYPE_STRING', 
                 False, True, False, None),
             ('Gastos cierre', 'gobject.TYPE_STRING', 
                 False, True, False, None),
             ('Gastos generales', 'gobject.TYPE_STRING', 
                 False, True, False, None),
             ('Ingresos', 'gobject.TYPE_STRING', 
                 False, True, False, None),
             ('id', 'gobject.TYPE_STRING', False, False, False, None))
     utils.preparar_listview(self.wids['tv_datos'], cols)
     for i in range(1, 7):
         col = self.wids['tv_datos'].get_column(i)
         for cell in col.get_cell_renderers():
             cell.set_property("xalign", 1)
     temp = mx.DateTime.localtime()
     self.fin = utils.abs_mxfecha(temp)
     self.wids['e_fechafin'].set_text(utils.str_fecha(temp))
     gtk.main()
示例#9
0
 def generar(self, boton):
     """
     Genera un salario por empleado con todos los jornales que tenga a 
     True.
     Después abre una ventana Salarios con cada uno de los salarios 
     generados.
     Finalmente recarga la información de esta ventana con los jornales 
     que han quedado pendientes.
     """
     horas = self.wids['e_horas'].get_text()
     try:
         horas = utils._float(horas)
     except ValueError:
         utils.dialogo_info(titulo = "ERROR", 
                            texto = "El texto «%s» no es un número."%horas, 
                            padre = self.wids['ventana'])
     else:
         jornales = {}
         model = self.wids['tv_datos'].get_model()
         for fila in range(len(model)):
             if model[fila][2]:
                 jornal = pclases.Jornal.get(model[fila][-1])
                 try:
                     jornales[jornal.empleado].append(jornal)
                 except KeyError:
                     jornales[jornal.empleado] = [jornal]
         txtfecha = self.wids['e_fecha'].get_text()
         fecha = utils.parse_fecha(txtfecha)
         salarios_creados = []
         for empleado in jornales:
             gasto, empleado = build_gasto_salario(self.wids['ventana'], 
                                                   empleado)
             salario = pclases.Salario(horasCampo = 0.0, 
                                       fecha = fecha, 
                                       horasManipulacion = horas, 
                                       totalEuros = 0.0, 
                                       empleado = empleado, 
                                       gasto = gasto, 
                                       actividad = None)
             for jornal in jornales[empleado]:
                 jornal.salario = salario
                 salario.horasCampo += jornal.horasCampo
                 # OJO: CWT: No actualizo las horas de manipulación. Eran 
                 # las mismas para todos los salarios creados según 
                 # documento de requisitos v2 (cuaderno).
                 salario.totalEuros += (jornal.eurosCampo 
                                        + jornal.eurosManipulacion)
             dias = []
             for jornal in salario.jornales:
                 dia = utils.abs_mxfecha(jornal.fechahoraInicio)
                 if dia not in dias:
                     dias.append(dia)
                     # NOTA: OJO: Si echa "dos peonás" en el mismo día, se 
                     # le cuenta como un día (aparte de las horas que eche 
                     # y demás. Hablo del precio por día del empleado). Lo 
                     # mismo digo si viene y echa tres días seguidos en el 
                     # mismo jornal. Cuenta como uno. O lo parte el nodo de 
                     # campo o se le cuenta como uno.
             salario.totalEuros += len(dias) * empleado.precioDiario
             salario.update_actividad()
             salarios_creados.append(salario)
         self.rellenar_widgets()
         import salarios
         #for salario in salarios_creados:
         #    ventana = salarios.Salarios(salario, self.usuario)
         #No puedo abrir varias ventanas a la vez. Abro el último salario creado.
         try:
             ventana = salarios.Salarios(salarios_creados[-1], self.usuario)
         except IndexError:
             pass