def buscar(self): """ Buscar las facturas de compra y de venta comprendidas entre las fechas de la ventana, las ordena por fecha y devuelve una lista de las mismas. """ try: txt_fini = self.wids['e_fecha_inicio'].get_text() fini = utils.parse_fecha(txt_fini) except: utils.dialogo_info(titulo = "ERROR FORMATO", texto = "El texto %s no es una fecha correcta." % txt_fini, padre = self.wids['ventana']) return [] try: txt_ffin = self.wids['e_fecha_fin'].get_text() ffin = utils.parse_fecha(txt_ffin) except: utils.dialogo_info(titulo = "ERROR FORMATO", texto = "El texto %s no es una fecha correcta." % txt_ffin, padre = self.wids['ventana']) return [] fraventas = pclases.FacturaVenta.select(pclases.AND(pclases.FacturaVenta.q.fecha >= fini, pclases.FacturaVenta.q.fecha <= ffin)) fracompras = pclases.FacturaCompra.select(pclases.AND(pclases.FacturaCompra.q.fecha >= fini, pclases.FacturaCompra.q.fecha <= ffin)) #facturas = list(fraventas) + list(fracompras) # Me quito las facturas con IVA 0 (usualmente generadas para controlar ingresos a Hacienda y SS) y las de # Portugal (21% de IVA) que irían en adquisiciones intracomunitarias en caso de que la empresa esté dada de # alta como operador intracomunitario y sería autorrepercutido, etc. facturas = list(fraventas) + [f for f in fracompras if not f.iva_homogeneo() or (f.iva != 0.0 and f.iva < 0.21)] facturas.sort(lambda f1, f2: utils.orden_por_campo_o_id(f1, f2, "fecha")) return facturas
def rellenar_adjuntos(self): """ Introduce los adjuntos del objeto en la tabla de adjuntos. """ model = self.wids['tv_adjuntos'].get_model() model.clear() if self.objeto != None: docs = self.objeto.documentos[:] docs.sort(lambda x, y: utils.orden_por_campo_o_id(x, y, "id")) for adjunto in self.objeto.documentos: model.append((adjunto.nombre, adjunto.observaciones, adjunto.id))
def buscar(self,boton): vpro = ventana_progreso.VentanaProgreso(padre = self.wids['ventana']) vpro.mostrar() self.resultado = [] facturas = pclases.FacturaVenta.select(pclases.AND( pclases.FacturaVenta.q.fecha >= self.inicio, pclases.FacturaVenta.q.fecha <= self.fin)) act = 0.0; tot = facturas.count() for f in facturas: vpro.set_valor(act/tot, "Calculando beneficio factura %s..." % ( f.numfactura)) self.resultado.append(f) self.resultado.sort( lambda f1, f2: utils.orden_por_campo_o_id(f1, f2, "fecha")) self.rellenar_tabla(self.resultado) vpro.ocultar()
def buscar(self,boton): vpro = ventana_progreso.VentanaProgreso(padre = self.wids['ventana']) vpro.mostrar() self.resultado = {} facturas = pclases.FacturaVenta.select(pclases.AND( pclases.FacturaVenta.q.fecha >= self.inicio, pclases.FacturaVenta.q.fecha <= self.fin)) act = 0.0; tot = facturas.count() for f in facturas: vpro.set_valor(act/tot, "Buscando facturas...") cliente = f.cliente try: self.resultado[cliente].append(f) except KeyError: self.resultado[cliente] = [f] for c in self.resultado: self.resultado[c].sort( lambda f1, f2: utils.orden_por_campo_o_id(f1, f2, "fecha")) self.rellenar_tabla(self.resultado) vpro.ocultar()
def mostrar_horas(self, tv, path, vc): """ Abre una ventana de búsqueda con las horas trabajadas en partes de producción y partes de trabajo. """ # EMPLEADO self.wids['ventana'].window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) while gtk.events_pending(): gtk.main_iteration(False) model = tv.get_model() idempleado = model[path][-1] empleado = pclases.Empleado.get(idempleado) # PARTES DE PRODUCCIÓN try: dia, mes, anno = map(int, self.wids['e_fecha_ini'].get_text().split('/')) except: utils.dialogo_info(titulo = "FECHA INCORRECTA", texto = "La fecha inicial no es correcta. Use el formato día/mes/año") else: fecha_ini = mx.DateTime.DateTimeFrom(day = dia, month = mes, year = anno) dia, mes, anno = map(int, self.wids['e_fecha_fin'].get_text().split('/')) try: fecha_fin = mx.DateTime.DateTimeFrom(day = dia, month = mes, year = anno) except: utils.dialogo_info(titulo = "FECHA INCORRECTA", texto = "La fecha inicial no es correcta. Use el formato día/mes/año") else: partes_produccion = self.buscar_partes_produccion(fecha_ini, fecha_fin) horas_trabajadas = [] # Horas en partes de producción horas_recuperacion = [] # Horas en partes de trabajo for pdp in partes_produccion: for ht in pdp.horasTrabajadas: if ht.empleado == empleado: horas_trabajadas.append(("PDP:%d" % (ht.parteDeProduccion.id), utils.str_fecha(pdp.fecha), utils.str_hora_corta(pdp.horainicio), utils.str_hora_corta(pdp.horafin), utils.str_hora_corta(pdp.get_duracion()), utils.str_hora_corta(ht.horas), pdp)) # PARTES DE TRABAJO ftini = mx.DateTime.DateTimeFrom(year = fecha_ini.year, month = fecha_ini.month, day = fecha_ini.day, hour = 6, minute = 0, second = 0).strftime('%Y-%m-%d %H:%M:%S') ftfin = (mx.DateTime.DateTimeFrom(year = fecha_fin.year, month = fecha_fin.month, day = fecha_fin.day, hour = 6, minute = 0, second = 0) + mx.DateTime.oneDay).strftime('%Y-%m-%d %H:%M:%S') partes_trabajo = pclases.ParteDeTrabajo.select("""horainicio >= '%s' AND horainicio < '%s' """ % (ftini, ftfin)) for pdt in partes_trabajo: if pdt.empleado == empleado: horas_recuperacion.append(("PDT:%d" % (pdt.id), utils.str_fecha(pdt.horainicio), utils.str_hora_corta(pdt.horainicio), utils.str_hora_corta(pdt.horafin), utils.str_hora_corta(pdt.get_duracion()), utils.str_hora_corta(pdt.get_duracion()), pdt)) horas = horas_trabajadas + horas_recuperacion horas.sort(lambda x, y: utils.orden_por_campo_o_id(x[-1], y[-1], "fecha")) horas = [i[:-1] for i in horas] # DIÁLOGO RESULTADOS id_parte = utils.dialogo_resultado(horas, "Horas trabajadas de producción y partes de trabajo de %s %s:" % (empleado.nombre, empleado.apellidos), multi = False, padre = self.wids['ventana'], cabeceras = ("ID", "Fecha", "Hora inicio", "Hora fin", "Duración", "Horas trabajadas")) if id_parte != -1: tipo, id = id_parte.split(":") self.wids['ventana'].window.set_cursor(None) if tipo == "PDP": parte = pclases.ParteDeProduccion.get(id) if parte.es_de_geotextiles(): import partes_de_fabricacion_rollos v = partes_de_fabricacion_rollos.PartesDeFabricacionRollos(objeto = parte, usuario = self.usuario) elif parte.es_de_fibra(): import partes_de_fabricacion_balas v = partes_de_fabricacion_balas.PartesDeFabricacionBalas(objeto = parte, usuario = sef.usuario) elif tipo == "PDT": parte = pclases.ParteDeTrabajo.get(id) import partes_de_trabajo v = partes_de_trabajo.PartesDeTrabajo(objeto = parte, usuario = self.usuario) self.wids['ventana'].window.set_cursor(None)