Changeset 32f758e in mmcs for mainwindow.C


Ignore:
Timestamp:
Sep 25, 2015, 11:01:29 AM (9 years ago)
Author:
rboet <rboet@…>
Branches:
master
Children:
37dd9aa
Parents:
b1ef0b1
Message:

corregida la funcionabilidad de los encadenamientos, minimo de cuentas cambiado a 2

File:
1 edited

Legend:

Unmodified
Added
Removed
  • mainwindow.C

    rb1ef0b1 r32f758e  
    949949
    950950            QTableWidget *tw = findChild<QTableWidget *>("TablaPrincipal");
    951             CalcularTotales(tw,2);//Se llama a la funcion que agregue una nueva fila y columna con los totales respectivos
     951            bool iguales = true;
     952            CalcularTotales(tw,2,iguales);//Se llama a la funcion que agregue una nueva fila y columna con los totales respectivos
     953            if(!iguales)
     954            {
     955                QMessageBox::warning(this,"Alerta","El Total de una(s) fila(s)\n es distinto al Total de\nuna(s) columna(s)");
     956            }
    952957            setAccountTitle(tw);
    953958
     
    968973}
    969974
    970 void MainWindow::CalcularTotales(QTableWidget *tableWidget,int inicio)//Se calculan los totales por fila/columna
    971 {
    972     bool iguales = true;
     975void MainWindow::CalcularTotales(QTableWidget *tableWidget,int inicio,bool &iguales)//Se calculan los totales por fila/columna
     976{
    973977    int filas=tableWidget->rowCount();
    974978    int columnas=tableWidget->columnCount();
     
    10271031    int cantidad = tableWidget->rowCount();
    10281032    ItemsNoEditable(tableWidget,0,inicio-1,cantidad-1);
    1029     if(!iguales)
    1030     {
    1031         QMessageBox::warning(this,"Alerta","El Total de una(s) fila(s)\n es distinto al Total de\nuna(s) columna(s)");
    1032     }
    1033 
    10341033}
    10351034
     
    14561455}
    14571456
    1458 /*          Funcion para agregar el estilo de una celda en negrita con fondo de color gris (Componente)       */
     1457/*          Funcion para agregar el estilo de una celda con fondo de color gris (Componente)       */
    14591458void MainWindow::CellStyleComponente(QTableWidgetItem *ti)
    14601459{
    14611460    ti->setBackgroundColor(QColor(221,227,230));
     1461}
     1462
     1463/*              Funcion para obtener las cuentas de la parte endogena        */
     1464QStringList MainWindow::obtenerCuentas()
     1465{
     1466    QStringList cuenta;
     1467    QTableWidget *tw = findChild<QTableWidget *>("MatrizEndogenaEndogena");
     1468    int count = tw->rowCount();
     1469    for(int i=2;i<count-1;i++)
     1470    {
     1471        QString valor = tw->item(0,i)->text();
     1472        if(!cuenta.contains(valor))
     1473        {
     1474            cuenta.append(valor);
     1475        }
     1476    }
     1477    return cuenta;
    14621478}
    14631479
     
    18131829        calcularSubtotal(tablaEE,2,count-1,inicioExogena-1);
    18141830
     1831        bool var = false;
    18151832        clonarTabla(tablaEE,matrizEndogena,inicioExogena);
    1816         CalcularTotales(matrizEndogena,2);
    1817 
    1818         CalcularTotales(tablaEE,2);
     1833        CalcularTotales(matrizEndogena,2,var);
     1834
     1835        CalcularTotales(tablaEE,2,var);
    18191836        setEndogenaExogenaCell(tablaEE,inicioExogena,elementos,true);
    18201837
     
    22862303    {
    22872304        QStringList list;
    2288         diccCuentasComponentes.insert(diccCuentasEndogenas[key][0],list);
     2305        QMap<QString,QStringList>  a;
     2306        a.insert(diccCuentasEndogenas[key][0],list);
     2307        int clave = diccCuentasComponentes.count();
     2308        diccCuentasComponentes.insert(clave,a);
    22892309    }
    22902310    QStringList lista;
    22912311    QTableWidget *tw = findChild<QTableWidget *>("MatrizEndogenaEndogena");
    22922312    int count = tw->rowCount();
    2293     foreach(QString key,diccCuentasComponentes.keys())
    2294     {
    2295         for(int i=2;i<count-1;i++)
    2296         {
    2297             QString accTitle = tw->item(i,0)->text();
    2298             if(accTitle==key)
    2299             {
    2300                 lista.append(tw->item(i,1)->text());
    2301             }
    2302         }
    2303         diccCuentasComponentes[key].append(lista);
    2304         lista.clear();
     2313    foreach(int key,diccCuentasComponentes.keys())
     2314    {
     2315        foreach (QString name, diccCuentasComponentes[key].keys())
     2316        {
     2317            for(int i=2;i<count-1;i++)
     2318            {
     2319                QString accTitle = tw->item(i,0)->text();
     2320                if(accTitle==name)
     2321                {
     2322                    lista.append(tw->item(i,1)->text());
     2323                }
     2324            }
     2325            diccCuentasComponentes[key][name].append(lista);
     2326            lista.clear();
     2327
     2328        }
    23052329    }
    23062330    for(int i=2;i<count-1;i++)
     
    24442468        QRadioButton *ct = new QRadioButton;
    24452469        ct->setObjectName("CTButton");
    2446         ct->setDisabled(true);
    24472470        QRadioButton *ma = new QRadioButton;
    24482471        ma->setObjectName("MaButton");
    2449         ma->setDisabled(true);
    24502472        ct->setText("Coeficientes Técnicos");
    24512473        ma->setText("Multiplicadores Leontief");
     
    25022524        formEncadenamientos->show();
    25032525        opcionEncadenamientos = 1;
    2504         if(opcionMa==1)
    2505         {
    2506             QRadioButton *ma = findChild<QRadioButton *>("MaButton");
    2507             ma->setEnabled(true);
    2508             QRadioButton *ct = findChild<QRadioButton *>("CTButton");
    2509             ct->setEnabled(true);
    2510         }
    25112526    }
    25122527    else
    25132528    {
    2514         if(opcionMa==1)
    2515         {
    2516             QRadioButton *ma = findChild<QRadioButton *>("MaButton");
    2517             ma->setEnabled(true);
    2518             QRadioButton *ct = findChild<QRadioButton *>("CTButton");
    2519             ct->setEnabled(true);
    2520         }
    25212529        formEncadenamientos->show();
    25222530    }
     
    25572565            lw->setDisabled(true);
    25582566            opcionCuentaEncadenamientos=1;//Se establece un valor para la variable de la opcion
    2559             diccCuentasEncadenamientos.insert(nombre_cuenta,componentes_cuenta);
     2567            QMap<QString,QStringList> a;
     2568            a.insert(nombre_cuenta,componentes_cuenta);
     2569            int diccCount = diccCuentasEncadenamientos.count();
     2570            diccCuentasEncadenamientos.insert(diccCount,a);
    25602571        }
    25612572    }
     
    26522663{
    26532664    int countEndogena = tw->rowCount();
    2654     int elementos = contarElementosMap(diccCuentasEncadenamientos);
     2665    int elementos = 0;
     2666    foreach(int key,diccCuentasEncadenamientos.keys())
     2667    {
     2668        foreach(QString name,diccCuentasEncadenamientos[key].keys())
     2669        {
     2670            QStringList prueba = diccCuentasEncadenamientos[key][name];
     2671            elementos += prueba.count();
     2672        }
     2673    }
    26552674    crearTablaVaciaEncadenamiento(elementos,enTable);
    26562675    int columna=0;
    2657     foreach(QString key,diccCuentasEncadenamientos.keys())
    2658     {
    2659         for(int j=2;j<countEndogena;j++)
    2660         {
    2661             QString titulo =tw->item(0,j)->text();
    2662             QString componente = tw->item(1,j)->text();
    2663             double sumaColumna = 0;
    2664             double sumaFila = 0;
    2665             if(titulo==key)
    2666             {
    2667                 foreach(QString valor,diccCuentasEncadenamientos[key])
     2676    foreach(int key,diccCuentasEncadenamientos.keys())
     2677    {
     2678        foreach(QString name,diccCuentasEncadenamientos[key].keys())
     2679        {
     2680            for(int j=2;j<countEndogena;j++)
     2681            {
     2682                QString titulo =tw->item(0,j)->text();
     2683                QString componente = tw->item(1,j)->text();
     2684                double sumaColumna = 0;
     2685                double sumaFila = 0;
     2686                if(titulo==name)
    26682687                {
    2669                     if(componente==valor)
     2688                    foreach(QString valor,diccCuentasEncadenamientos[key][name])
    26702689                    {
    2671                         for(int k=2;k<countEndogena;k++)
     2690                        if(componente==valor)
    26722691                        {
    2673                             double EncadenamientoAtras;
    2674                             double EncadenamientoAdelante;
    2675                             if(tw->objectName()=="MatrizMa")
     2692                            for(int k=2;k<countEndogena;k++)
    26762693                            {
    2677                                 EncadenamientoAtras = MatrixMa(k-2,j-2);
    2678                                 EncadenamientoAdelante = MatrixMa(j-2,k-2);
     2694                                double EncadenamientoAtras;
     2695                                double EncadenamientoAdelante;
     2696                                if(tw->objectName()=="MatrizMa")
     2697                                {
     2698                                    EncadenamientoAtras = MatrixMa(k-2,j-2);
     2699                                    EncadenamientoAdelante = MatrixMa(j-2,k-2);
     2700                                }
     2701                                else
     2702                                {
     2703                                    EncadenamientoAtras = tw->item(k,j)->text().toDouble();//Suma Columna(Encadenamiento hacia atras)
     2704                                    EncadenamientoAdelante = tw->item(j,k)->text().toDouble();//Suma Fila(Encadenamiento hacia adelante)
     2705                                }
     2706                                sumaColumna+=EncadenamientoAtras;
     2707                                sumaFila+=EncadenamientoAdelante;
    26792708                            }
    2680                             else
    2681                             {
    2682                                 EncadenamientoAtras = tw->item(k,j)->text().toDouble();//Suma Columna(Encadenamiento hacia atras)
    2683                                 EncadenamientoAdelante = tw->item(j,k)->text().toDouble();//Suma Fila(Encadenamiento hacia adelante)
    2684                             }
    2685                             sumaColumna+=EncadenamientoAtras;
    2686                             sumaFila+=EncadenamientoAdelante;
     2709                            //Elementos del encadenamiento hacia atras
     2710                            QTableWidgetItem *valorAtras = new QTableWidgetItem(QString::number(sumaColumna,'f',precission));
     2711                            QString value = Separador(valorAtras,false);
     2712                            valorAtras->setText(value);
     2713                            valorAtras->setFlags(valorAtras->flags() ^ Qt::ItemIsEditable);
     2714                            valorAtras->setTextAlignment(Qt::AlignCenter);
     2715                            enTable->setItem(columna,2,valorAtras);
     2716                            //Elementos del encadenamiento hacia adelante
     2717                            QTableWidgetItem *valorAdelante = new QTableWidgetItem(QString::number(sumaFila,'f',precission));
     2718                            value = Separador(valorAdelante,false);
     2719                            valorAdelante->setText(value);
     2720                            valorAdelante->setFlags(valorAdelante->flags() ^ Qt::ItemIsEditable);
     2721                            valorAdelante->setTextAlignment(Qt::AlignCenter);
     2722                            enTable->setItem(columna,3,valorAdelante);
     2723                            columna++;
    26872724                        }
    2688                         //Elementos del encadenamiento hacia atras
    2689                         QTableWidgetItem *valorAtras = new QTableWidgetItem(QString::number(sumaColumna,'f',precission));
    2690                         QString value = Separador(valorAtras,false);
    2691                         valorAtras->setText(value);
    2692                         valorAtras->setFlags(valorAtras->flags() ^ Qt::ItemIsEditable);
    2693                         valorAtras->setTextAlignment(Qt::AlignCenter);
    2694                         enTable->setItem(columna,2,valorAtras);
    2695                         //Elementos del encadenamiento hacia adelante
    2696                         QTableWidgetItem *valorAdelante = new QTableWidgetItem(QString::number(sumaFila,'f',precission));
    2697                         value = Separador(valorAdelante,false);
    2698                         valorAdelante->setText(value);
    2699                         valorAdelante->setFlags(valorAdelante->flags() ^ Qt::ItemIsEditable);
    2700                         valorAdelante->setTextAlignment(Qt::AlignCenter);
    2701                         enTable->setItem(columna,3,valorAdelante);
    2702                         columna++;
    27032725                    }
    27042726                }
     
    27162738    noEditColZero(enTable);
    27172739    //Se agregan las cuentas y sus componentes
    2718     cuentacomponentesResultado(enTable,elementos);
     2740    cuentacomponentesEncadenamiento(enTable,elementos);
    27192741    //Se agregan los totales
    27202742    calcularTotalesEncadenamientos(enTable);
     
    27292751        lw = findChild<QListWidget *>(QString("encadenamientosAccList %1").arg(i + 1));
    27302752        lw->setEnabled(true);
     2753    }
     2754}
     2755
     2756void MainWindow::cuentacomponentesEncadenamiento(QTableWidget *to,int count)
     2757{
     2758    QStringList cuentaTitulos;
     2759    noEditColZero(to);
     2760    QTableWidgetItem *zero = new QTableWidgetItem;
     2761    zero->setFlags(zero->flags() ^ Qt::ItemIsEditable);
     2762    to->setItem(0,1,zero);
     2763    int i=1;
     2764    foreach(int key,diccCuentasEncadenamientos.keys())
     2765    {
     2766        foreach (QString name, diccCuentasEncadenamientos[key].keys())
     2767        {
     2768            foreach (QString Item, diccCuentasEncadenamientos[key][name])
     2769            {
     2770                //Se agregan cuentas y componentes
     2771                QString accName=name;
     2772                QTableWidgetItem *cuenta = new QTableWidgetItem(accName);
     2773                cuenta->setFlags(cuenta->flags() ^ Qt::ItemIsEditable);
     2774                CellStyle(cuenta);
     2775                QTableWidgetItem *componente = new QTableWidgetItem(Item);
     2776                componente->setFlags(componente->flags() ^ Qt::ItemIsEditable);
     2777                CellStyleComponente(componente);
     2778                to->setItem(i,0,cuenta);
     2779                to->setItem(i,1,componente);
     2780                cuentaTitulos.append(accName);
     2781                i++;
     2782            }
     2783        }
     2784    }
     2785    for(int i=0;i<count-1;i++)
     2786    {
     2787        QString accName=to->item(i+1,0)->text();
     2788        if(cuentaTitulos.contains(accName))
     2789        {
     2790            int contar = cuentaTitulos.count(accName);
     2791            to->setSpan(i+1,0,contar,1);
     2792            cuentaTitulos.removeAll(accName);
     2793        }
     2794        if(cuentaTitulos.isEmpty())
     2795        {
     2796            break;
     2797        }
    27312798    }
    27322799}
     
    28042871{
    28052872    int count = tw->rowCount();
    2806     double sumaAdelante=0;
    2807     double sumaAtras=0;
    2808     //Se realizan los calculos
    2809     for(int i=1;i<count;i++)
    2810     {
    2811         QString stringAtras = Separador(tw->item(i,2),true);
    2812         double itemAtras = stringAtras.toDouble();
    2813         sumaAtras+=itemAtras;
    2814         QString stringAdelante = Separador(tw->item(i,3),true);
    2815         double itemAdelante = stringAdelante.toDouble();
    2816         sumaAdelante+=itemAdelante;
    2817     }
    2818     //Se inserta la fila donde iran los totales
    2819     tw->insertRow(count);
    2820     //Se insertan las celdas con los respectivos valores totales
    2821     QTableWidgetItem *zero = new QTableWidgetItem;
    2822     zero->setFlags(zero->flags() ^ Qt::ItemIsEditable);
    2823     tw->setItem(count,0,zero);
    2824     QTableWidgetItem *titulo = new QTableWidgetItem("Encadenamiento Parcial, Total");
    2825     encademientosStyle(titulo);
    2826     tw->setItem(count,1,titulo);
    2827     QTableWidgetItem *totalAtras = new QTableWidgetItem(QString::number(sumaAtras,'f',precission));
    2828     QString value = Separador(totalAtras,false);
    2829     totalAtras->setText(value);
    2830     encademientosStyle(totalAtras);
    2831     QTableWidgetItem *totalAdelante = new QTableWidgetItem(QString::number(sumaAdelante,'f',precission));
    2832     value = Separador(totalAdelante,false);
    2833     totalAdelante->setText(value);
    2834     encademientosStyle(totalAdelante);
    2835     tw->setItem(count,2,totalAtras);
    2836     tw->setItem(count,3,totalAdelante);
     2873    QStringList accName;
     2874    for(int i=0;i<count-1;i++)
     2875    {
     2876        QString cuenta = tw->item(i+1,0)->text();
     2877        if(!accName.contains(cuenta))
     2878        {
     2879            accName.append(cuenta);
     2880        }
     2881    }
     2882    int cantidad = accName.count();
     2883    for(int k=0;k<cantidad;k++)
     2884    {
     2885        count = tw->rowCount();
     2886        double sumaAdelante=0;
     2887        double sumaAtras=0;
     2888        //Se realizan los calculos
     2889        for(int i=1;i<count;i++)
     2890        {
     2891            if(tw->item(i,0)->text()==accName.at(k))
     2892            {
     2893                QString stringAtras = Separador(tw->item(i,2),true);
     2894                double itemAtras = stringAtras.toDouble();
     2895                sumaAtras+=itemAtras;
     2896                QString stringAdelante = Separador(tw->item(i,3),true);
     2897                double itemAdelante = stringAdelante.toDouble();
     2898                sumaAdelante+=itemAdelante;
     2899            }
     2900        }
     2901        //Se inserta la fila donde iran los totales
     2902        tw->insertRow(count);
     2903        //Se insertan las celdas con los respectivos valores totales
     2904        QTableWidgetItem *zero = new QTableWidgetItem;
     2905        zero->setFlags(zero->flags() ^ Qt::ItemIsEditable);
     2906        tw->setItem(count,0,zero);
     2907        QTableWidgetItem *titulo = new QTableWidgetItem(QString("Encadenamiento Parcial %1, Total").arg(accName.at(k)));
     2908        encademientosStyle(titulo);
     2909        tw->setItem(count,1,titulo);
     2910        QTableWidgetItem *totalAtras = new QTableWidgetItem(QString::number(sumaAtras,'f',precission));
     2911        QString value = Separador(totalAtras,false);
     2912        totalAtras->setText(value);
     2913        encademientosStyle(totalAtras);
     2914        QTableWidgetItem *totalAdelante = new QTableWidgetItem(QString::number(sumaAdelante,'f',precission));
     2915        value = Separador(totalAdelante,false);
     2916        totalAdelante->setText(value);
     2917        encademientosStyle(totalAdelante);
     2918        tw->setItem(count,2,totalAtras);
     2919        tw->setItem(count,3,totalAdelante);
     2920    }
    28372921}
    28382922
     
    36323716    QWidget *widget = tabWidget->widget(indice);
    36333717    widget->setLayout(layoutCentralWidget);
    3634     tabWidget->setCurrentIndex(indice);
     3718    tabWidget->removeTab(indice);
    36353719}
    36363720
     
    39514035    FI = new FormIncidenciaI(this);
    39524036    QTableWidget *tw = FI->ui->TableIncidencia;
    3953     int cuentas = totalCuentas.count();
     4037    QStringList nombreCuenta = obtenerCuentas();
     4038    int cuentas = nombreCuenta.count();
    39544039    crearTablaVaciaEncadenamiento(2,tw,cuentas);
    3955     QStringList nombreCuenta = totalCuentas.keys();
    39564040    for(int i=0;i<cuentas;i++)
    39574041    {
     
    39744058{
    39754059    QTableWidget *tw = FI->ui->TableIncidencia;
    3976     int cuentas = totalCuentas.count();
     4060    QStringList nombreCuenta = obtenerCuentas();
     4061    int cuentas = nombreCuenta.count();
    39774062    QMap<QString,double> cantidades;
    39784063    for(int i=0;i<cuentas;i++)
     
    41664251    QWidget *widget = tabWidget->widget(indice);
    41674252    widget->setLayout(layoutCentralWidget);
    4168     tabWidget->setCurrentIndex(indice);
     4253    tabWidget->removeTab(indice);
    41694254    opcionMBT++;
    41704255}
     
    42584343    FI = new FormIncidenciaI(this);
    42594344    QTableWidget *tw = FI->ui->TableIncidencia;
    4260     int cuentas = totalCuentas.count();
     4345    QStringList nombreCuenta = obtenerCuentas();
     4346    int cuentas = nombreCuenta.count();
    42614347    crearTablaVaciaEncadenamiento(2,tw,cuentas);
    4262     QStringList nombreCuenta = totalCuentas.keys();
    42634348    for(int i=0;i<cuentas;i++)
    42644349    {
     
    42814366{
    42824367    QTableWidget *tw = FI->ui->TableIncidencia;
    4283     int cuentas = totalCuentas.count();
     4368    QStringList nombreCuenta = obtenerCuentas();
     4369    int cuentas = nombreCuenta.count();
    42844370    QMap<QString,double> cantidades;
    42854371    for(int i=0;i<cuentas;i++)
     
    46094695        FI = new FormIncidenciaI(this);
    46104696        QTableWidget *tw = FI->ui->TableIncidencia;
    4611         int cuentas = totalCuentas.count();
    4612         crearTablaVaciaEncadenamiento(2,tw,cuentas);
    4613         QStringList nombreCuenta = totalCuentas.keys();
     4697        QStringList nombreCuenta = obtenerCuentas();
     4698        int cuentas = nombreCuenta.count();
     4699        crearTablaVaciaEncadenamiento(2,tw,cuentas);       
    46144700        for(int i=0;i<cuentas;i++)
    46154701        {
     
    46434729
    46444730    QTableWidget *tw = FI->ui->TableIncidencia;
    4645     int cuentas = totalCuentas.count();
     4731    QStringList nombreCuenta = obtenerCuentas();
     4732    int cuentas = nombreCuenta.count();
    46464733    QMap<QString,double> cantidades;
    46474734    for(int i=0;i<cuentas;i++)
Note: See TracChangeset for help on using the changeset viewer.