def invertir_agrupaciones_cliente_fechas(self): """ Recoge todos los datos del model por mes y año y los agrupa por cliente y mes/año (justo al contrario que en el model original). """ nodos_clientes = {} modelfechas = self.wids['tv_facturas'].get_model() model = self.wids['tv_cliente'].get_model() model.clear() for fila_mes_anno in modelfechas: fecha = fila_mes_anno[1] # @UnusedVariable # Inserto el cliente en el otro model, y si existe actualizo # cantidades. for fila_cliente in fila_mes_anno.iterchildren(): #print fila_cliente[2], fila_cliente[-1] if fila_cliente[0].strip() == "": ide = fila_cliente[-1] if ide not in nodos_clientes: itercliente = model.append(None, fila_cliente) nodos_clientes[ide] = itercliente else: itercliente = nodos_clientes[ide] row = model[itercliente] for ncol in (3, 6, 11, 12): row[ncol] += fila_cliente[ncol] else: # ES UN NODO DE FACTURA INCORRECTA SUELTO (celdas rojas) itercliente = model.append(None, fila_cliente) # Ahora inserto la fila de fecha como hijo, pero tengo que # ponerle las cantidades solo del cliente donde lo inserto. # Que no son ni más ni menos que las que tiene la fila_cliente # original. padre = itercliente iterfecha = model.append(padre, fila_mes_anno) model[iterfecha][0] = "0.0" # Reinicio el total de facturas. for ncol in (3, 6, 11, 12): model[iterfecha][ncol] = fila_cliente[ncol] # Y ahora cuelgo las facturas de la fila de fecha. for fila_factura in fila_cliente.iterchildren(): iterfactura = model.append(iterfecha, fila_factura) try: totalfacturas = utils.parse_euro( rex_importe_fras.findall( fila_factura[0])[0][1:-1]) except (IndexError, TypeError, ValueError): totalfacturas = 0.0 print fila_factura[0] totalfacturas += utils.parse_euro(model[iterfecha][0]) model[iterfecha][0] = "%s €" % ( utils.float2str(totalfacturas)) # Y si por casualidad tiene varios vencimientos: for fila_vencimientos in fila_factura.iterchildren(): model.append(iterfactura, fila_vencimientos)