def load_obras_duplicadas(): """ Devuelve las obras duplicadas en un diccionario agrupando por nombre. """ obras = pclases.Obra.select(orderBy = "nombre") suffix = '%(percent)d%% [%(elapsed_td)s / %(eta_td)s]' bar = ShadyBar("Buscando duplicadas", suffix=suffix, max=obras.count()) dupes = defaultdict(lambda: []) for obra in bar.iter(obras): nombre = obra.nombre if pclases.Obra.selectBy(nombre=nombre).count() > 1: dupes[nombre].append(obra) return dupes
def main(fexistencias_ini_fib, fexistencias_ini_gtx, fexistencias_ini_cem, fproduccion_fib, fproduccion_gtx, fproduccion_cem, fsalidas_fib, fsalidas_gtx, fsalidas_cem, fconsumos, fexistencias_fin_fib, fexistencias_fin_gtx, fexistencias_fin_cem, fout = None): """ Abre y parsea uno por uno los ficheros de entrada. Construye una serie de diccionarios con la información de existencias, salidas, consumos y producción. A partir de esos diccionarios genera un fichero CSV que muestra por salida estándar. """ tpro = ShadyBar("Generando CSV de cierre de existencias...", suffix='%(percent)d%% [%(elapsed_td)s / %(eta_td)s]', max = 12) tpro.next() existencias_ini = parse_existencias(fexistencias_ini_fib) tpro.next() existencias_ini = parse_existencias(fexistencias_ini_gtx, existencias_ini) tpro.next() existencias_ini = parse_existencias(fexistencias_ini_cem, existencias_ini) tpro.next() produccion = parse_produccion(fproduccion_fib, fproduccion_gtx, fproduccion_cem) tpro.next() salidas = parse_salidas(fsalidas_fib, fsalidas_gtx, fsalidas_cem) tpro.next() consumos = parse_consumos(fconsumos) existencias_fin = parse_existencias(fexistencias_fin_fib) tpro.next() existencias_fin = parse_existencias(fexistencias_fin_gtx, existencias_fin) tpro.next() existencias_fin = parse_existencias(fexistencias_fin_cem, existencias_fin) tpro.next() dic_deltas = calculate_deltas(existencias_ini, produccion, salidas, consumos, existencias_fin) tpro.next() check_traspasos(dic_deltas) tpro.next() if AUTO_OUT: for tipo in (("fib", ), ("gtx", ), ("cem", ), ("fib", "gtx", "cem")): for qlty in (("A", ), ("B", ), ("C", ), ("total", ), ("A", "B", "C", "total")): OPTIONS.tipo = tipo OPTIONS.qlty = qlty if len(tipo) == 3: str_tipo = "" else: str_tipo = "_" + "".join(tipo) if len(qlty) == 4: str_qlty = "" else: str_qlty = "_" + "".join(qlty) fout = "diff%s%s.csv" % (str_tipo, str_qlty) dump_deltas(dic_deltas, fout) else: dump_deltas(dic_deltas, fout) tpro.next() tpro.finish()