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] # 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() == "": id = fila_cliente[-1] if id not in nodos_clientes: itercliente = model.append(None, fila_cliente) nodos_clientes[id] = itercliente else: itercliente = nodos_clientes[id] 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) tmp = model.append(None, fila_cliente) itercliente = tmp # FIXME: No estoy muy seguro de esto. # Si no asigno, peta por no tener valor itercliente. # Pasa con las facturas sin vencimiento. # 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)
def cambiar_importe_cobro(self, cell, path, texto): """ Cambia el importe del cobro. """ model = self.wids['tv_cobros'].get_model() try: importe = utils.parse_euro(texto) except ValueError: utils.dialogo_info('ERROR EN FORMATO', 'El importe introducido no es correcto.', padre = self.wids['ventana']) return idcobro = model[path][-1] cobro = pclases.Cobro.get(idcobro) cobro.importe = importe cobro.syncUpdate() model[path][1] = cobro.importe