//Summiert die Ergebnisse aller Kriterien (Unterkriterium und Oberkriterium)
        private void funktionsabdeckungsgrad_aufsummieren(Nutzwert NWAobjekt)
        {
            bool   change       = funktionsabdeckungsgrad_aufsummieren_check(NWAobjekt);
            double temp_beitrag = 0;

            if (change == false)
            {
                List <Kriterium> list = NWAobjekt.getKriterium(db).getUnterKriterium(db);
                if (list.Count > 0)
                {
                    foreach (Kriterium temp in list)
                    {
                        temp_beitrag += temp.getNutzwert(db: db, ProjektID: NWAobjekt.getProjektID(), ProduktID: NWAobjekt.getProduktID()).getBeitragAbsolut() * NWAobjekt.getAbstufung();
                    }
                    NWAobjekt.setBeitragAbsolut(temp_beitrag);
                    NWAobjekt.setBeitragAbsolutCheck(true);
                    db.update(NWAobjekt);
                }
            }
            List <Kriterium> temp_oberkriterien = NWAobjekt.getKriterium(db).getOberKriterium(db);

            if (temp_oberkriterien.Count > 0)
            {
                funktionsabdeckungsgrad_aufsummieren(temp_oberkriterien[0].getNutzwert(db, NWAobjekt.getProjektID(), NWAobjekt.getProduktID()));
            }
        }
        //Hauptfunktion der Nutzwertanalyse, die in die anderen Funktionen verzweigt
        public void funktionsabdeckungsgrad_berechnen(Nutzwert NWAobjekt)
        {
            NWAobjekt.setBeitragAbsolutCheck(false);
            db.update(NWAobjekt);
            List <Kriterium> list = NWAobjekt.getKriterium(db).getUnterKriterium(db);

            if (list.Count > 0)
            {
                foreach (Kriterium temp_obj in list)
                {
                    funktionsabdeckungsgrad_berechnen(temp_obj.getNutzwert(db: db, ProjektID: NWAobjekt.getProjektID(), ProduktID: NWAobjekt.getProduktID()));
                }
            }
            else
            {
                double temp_beitrag = funktionsabdeckungsgrad_beitrag(NWAobjekt);
                if (temp_beitrag != 0)
                {
                    double beitrag_absolut = funktionsabdeckungsgrad_beitrag_absolut(NWAobjekt.getKriterium(db).getOberKriterium(db)[0].getNutzwert(db, NWAobjekt.getProjektID(), NWAobjekt.getProduktID()), temp_beitrag);
                    NWAobjekt.setBeitragAbsolut(beitrag_absolut * NWAobjekt.getAbstufung());
                }
                else
                {
                    NWAobjekt.setBeitragAbsolut(0);
                }
                NWAobjekt.setBeitragAbsolutCheck(true);
                db.update(NWAobjekt);
                funktionsabdeckungsgrad_aufsummieren(NWAobjekt);
            }
        }
        //Funktion der Nutzwertanalyse, ruft die Zaehler und Nenner Funktion und verarbeitet die Ergebnisse in der Funktion
        private double funktionsabdeckungsgrad_beitrag_absolut(Nutzwert NWAobjekt, double beitrag_einzel)
        {
            int    nenner = funktionsabdeckungsgrad_beitrag_nenner(NWAobjekt);
            double result = beitrag_einzel * (double)NWAobjekt.getGewichtung() / (double)nenner;

            List <Kriterium> list = NWAobjekt.getKriterium(db).getOberKriterium(db);

            foreach (Kriterium temp_objekt in list)
            {
                result = funktionsabdeckungsgrad_beitrag_absolut(temp_objekt.getNutzwert(db: db, ProjektID: NWAobjekt.getProjektID(), ProduktID: NWAobjekt.getProduktID()), result);
            }
            return(Math.Round(result, 3));
        }
        private bool funktionsabdeckungsgrad_aufsummieren_check(Nutzwert NWAobjekt)
        {
            List <Kriterium> list = NWAobjekt.getKriterium(db).getUnterKriterium(db);

            foreach (Kriterium temp_obj in list)
            {
                if (new Nutzwert(ProjektID: 0, ProduktID: 0, KriteriumID: NWAobjekt.getKriteriumID()).getErfuellung() != false)
                {
                    if (temp_obj.getNutzwert(db, NWAobjekt.getProjektID(), NWAobjekt.getProduktID()).getBeitragAbsolutCheck() == false)
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
        //Funktion zur Berechnung des Nenners innerhalb der Nutzweranalysefunktion
        private int funktionsabdeckungsgrad_beitrag_nenner(Nutzwert NWAobjekt)
        {
            int nenner = 0;
            List <Kriterium> temp_krit = NWAobjekt.getKriterium(db).getOberKriterium(db);

            if (temp_krit.Count > 0)
            {
                List <Kriterium> list = temp_krit[0].getUnterKriterium(db);

                foreach (Kriterium temp_obj in list)
                {
                    nenner += temp_obj.getGewichtung(db: db, ProjektID: NWAobjekt.getProjektID(), ProduktID: NWAobjekt.getProduktID());
                }
            }
            else
            {
                nenner = NWAobjekt.getGewichtung();
            }
            if (nenner == 0)
            {
                return(0);
            }
            return(nenner);
        }
Example #6
0
        public void BuildDataTable(bool erfuellung, bool anforderungen, bool gewichtung, bool nutzwert, bool prozent, int ProjektID, int[] ProduktID, DatabaseAdapter db, bool produkte)
        {
            dt             = new DataGridView();
            dt.ColumnCount = 1;
            dt.Columns[dt.ColumnCount - 1].Name  = CONST_NUM;
            dt.Columns[dt.ColumnCount - 1].Width = 50;

            dt.ColumnCount += 1;
            dt.Columns[dt.ColumnCount - 1].Name  = CONST_BEZ;
            dt.Columns[dt.ColumnCount - 1].Width = 300;

            if (gewichtung)
            {
                dt.ColumnCount += 1;
                dt.Columns[dt.ColumnCount - 1].Name  = CONST_GEW;
                dt.Columns[dt.ColumnCount - 1].Width = 50;
            }

            if (anforderungen)
            {
                dt.ColumnCount += 1;
                dt.Columns[dt.ColumnCount - 1].Name  = CONST_ANF;
                dt.Columns[dt.ColumnCount - 1].Width = 50;
            }

            Produkt            temp_produkt  = new Produkt(ProduktID[0]);
            ControllerNutzwert cntrl_nutzwer = new ControllerNutzwert(db, null);

            if (produkte)
            {
                foreach (int produkt in ProduktID)
                {
                    temp_produkt    = db.get(new Produkt(produkt))[0];
                    dt.ColumnCount += 1;
                    string column_name = temp_produkt.getBezeichnung();
                    if (temp_produkt.getBezeichnung().Length > CONST_PROD_LENGTH)
                    {
                        column_name = column_name.Substring(0, CONST_PROD_LENGTH);
                    }
                    dt.Columns[dt.ColumnCount - 1].Name = column_name;
                }
            }

            dt.ColumnCount += 1;
            dt.Columns[dt.ColumnCount - 1].Name  = CONST_KOM;
            dt.Columns[dt.ColumnCount - 1].Width = 300;

            Nutzwert  temp_nwa       = db.get(new Nutzwert(KriteriumID: 1, ProjektID: ProjektID, ProduktID: temp_produkt.getProduktID()))[0];
            Kriterium root_kriterium = temp_nwa.getKriterium(db).getRootKriterium(db)[0];

            if (root_kriterium.getErfuellung(db: db, ProjektID: ProjektID, ProduktID: temp_produkt.getProduktID()) == true || anforderungen == false)
            {
                if (prozent)
                {
                    dt.ColumnCount += 1;
                    dt.Columns[dt.ColumnCount - 1].Name  = CONST_PROZ;
                    dt.Columns[dt.ColumnCount - 1].Width = 50;
                }
            }


            int row = dt.Rows.Add();

            dt.Rows[row].Cells[CONST_NUM].Value = "0";
            dt.Rows[row].Cells[CONST_BEZ].Value = root_kriterium.getBezeichnung();
            dt.Rows[row].Cells[CONST_KOM].Value = root_kriterium.getNutzwert(db, ProjektID, temp_produkt.getProduktID()).getKommentar();
            if (anforderungen)
            {
                if (root_kriterium.getNutzwert(db, 0, 0).getGewichtung() == 0)
                {
                    dt.Rows[row].Cells[CONST_ANF].Value = "-";
                }
                else
                {
                    dt.Rows[row].Cells[CONST_ANF].Value = "X";
                }
            }

            if (produkte)
            {
                foreach (int produkt in ProduktID)
                {
                    temp_produkt = db.get(new Produkt(produkt))[0];
                    string column_name = temp_produkt.getBezeichnung();
                    if (temp_produkt.getBezeichnung().Length > CONST_PROD_LENGTH)
                    {
                        column_name = column_name.Substring(0, CONST_PROD_LENGTH);
                    }

                    if (erfuellung == false)
                    {
                        cntrl_nutzwer.funktionsabdeckungsgrad_berechnen(root_kriterium.getNutzwert(db, ProjektID, temp_produkt.getProduktID()));
                    }

                    if (anforderungen == true)
                    {
                        dt.Rows[row].Cells[column_name].Value = root_kriterium.getNutzwert(db, ProjektID, temp_produkt.getProduktID()).getErfuellung();
                    }
                    else
                    {
                        dt.Rows[row].Cells[column_name].Value = root_kriterium.getNutzwert(db, ProjektID, temp_produkt.getProduktID()).getBeitragAbsolut();
                    }

                    if (erfuellung)
                    {
                        if (root_kriterium.getGewichtung(db: db, ProjektID: ProjektID, ProduktID: temp_produkt.getProduktID()) > 0)
                        {
                            dt.Rows[row].Cells[column_name].Value = "X";
                        }
                        else
                        {
                            dt.Rows[row].Cells[column_name].Value = "-";
                        }
                    }
                    else
                    {
                        dt.Rows[row].Cells[column_name].Value = root_kriterium.getNutzwert(db, ProjektID, temp_produkt.getProduktID()).getBeitragAbsolut();
                    }
                }
            }

            if (root_kriterium.getGewichtung(db: db, ProjektID: ProjektID, ProduktID: temp_produkt.getProduktID()) > 0 || anforderungen == false)
            {
                if (gewichtung)
                {
                    dt.Rows[row].Cells[CONST_GEW].Value = root_kriterium.getGewichtung(db, ProjektID, temp_produkt.getProduktID());
                }

                if (prozent)
                {
                    dt.Rows[row].Cells[CONST_PROZ].Value = cntrl_nutzwer.prozent(root_kriterium.getNutzwert(db: db, ProjektID: ProjektID, ProduktID: temp_produkt.getProduktID()));
                }
            }
            addtorow(root_kriterium, erfuellung, anforderungen, gewichtung, nutzwert, prozent, ProjektID, ProduktID, db, cntrl_nutzwer, "0", produkte);
        }