def run(self):
        """run FLA Tool"""

        params = self.par
        projektname = self.projectname


        tablepath_bilanz = self.folders.get_table('Gemeindebilanzen', "FGDB_Einnahmen.gdb")
        fields = ['FamLeistAusgl', 'ESt', 'AGS']

        tablepath_landesfaktor = self.folders.get_base_table("FGDB_Einnahmen_Tool.gdb", "FLA_Landesfaktoren")
        fields2 = ['AGS_Land', 'FLA_Faktor']

        cursor = arcpy.da.UpdateCursor(tablepath_bilanz, fields)
        for gemeinde in cursor:
            ags2 = gemeinde[2][0:2]
            where = '"AGS_Land"' + "='" + ags2 + "'"
            cursor2 = arcpy.da.SearchCursor(tablepath_landesfaktor, fields2, where)
            for land in cursor2:
                landesfaktor = land[1]
            FLA_Gemeindebilanz = gemeinde[1] * landesfaktor
            gemeinde[0] = FLA_Gemeindebilanz
            cursor.updateRow(gemeinde)

        c.set_chronicle("Familienleistungsausgleich", self.folders.get_table(tablename='Chronik_Nutzung',workspace="FGDB_Einnahmen.gdb",project=projektname))
Example #2
0
    def run(self):
        """run FLA Tool"""

        params = self.par
        projektname = self.projectname

        tablepath_bilanz = self.folders.get_table('Gemeindebilanzen',
                                                  "FGDB_Einnahmen.gdb")
        fields = ['FamLeistAusgl', 'ESt', 'AGS']

        tablepath_landesfaktor = self.folders.get_base_table(
            "FGDB_Einnahmen_Tool.gdb", "FLA_Landesfaktoren")
        fields2 = ['AGS_Land', 'FLA_Faktor']

        cursor = arcpy.da.UpdateCursor(tablepath_bilanz, fields)
        for gemeinde in cursor:
            ags2 = gemeinde[2][0:2]
            where = '"AGS_Land"' + "='" + ags2 + "'"
            cursor2 = arcpy.da.SearchCursor(tablepath_landesfaktor, fields2,
                                            where)
            for land in cursor2:
                landesfaktor = land[1]
            FLA_Gemeindebilanz = gemeinde[1] * landesfaktor
            gemeinde[0] = FLA_Gemeindebilanz
            cursor.updateRow(gemeinde)

        c.set_chronicle(
            "Familienleistungsausgleich",
            self.folders.get_table(tablename='Chronik_Nutzung',
                                   workspace="FGDB_Einnahmen.gdb",
                                   project=projektname))
    def run(self):
        """run Gesamtsumme Tool"""

        params = self.par
        projektname = self.projectname

        tablepath_bilanz = self.folders.get_table('Gemeindebilanzen', "FGDB_Einnahmen.gdb")
        fields = self.parent_tbx.spalten
        arcpy.AddMessage(fields)
        cursor_bilanz = arcpy.da.UpdateCursor(tablepath_bilanz, fields)
        for gemeinde in cursor_bilanz:
            gemeinde[0] = 0
            for spalte in range (1, len(fields)):
                #arcpy.AddMessage(gemeinde[spalte])
                gemeinde[0] += gemeinde[spalte]
            cursor_bilanz.updateRow(gemeinde)

        c.set_chronicle("Gesamtbilanz", self.folders.get_table(tablename='Chronik_Nutzung',workspace="FGDB_Einnahmen.gdb",project=projektname))
    def run(self):
        """run Umsatzsteuer Tool"""

        params = self.par
        projektname = self.projectname


        tablepath_bilanz = self.folders.get_table('Gemeindebilanzen', "FGDB_Einnahmen.gdb")
        fields = ['USt', 'GewSt', 'SvB_Saldo']

        tablepath_kennwerte = self.folders.get_base_table("FGDB_Einnahmen_Tool.gdb", "USt_Kennwerte")
        fields2 = ['GemAnt_USt_EUR_pro_EUR_GewSt', 'GemAnt_USt_EUR_pro_SvB']

        cursor_kennwerte = arcpy.da.SearchCursor(tablepath_kennwerte, fields2)
        for row in cursor_kennwerte:
            GemAnt_GewSt = row[0]
            GemAnt_SvB = row[1]

        cursor_bilanz = arcpy.da.UpdateCursor(tablepath_bilanz, fields)
        for gemeinde in cursor_bilanz:
            gemeinde[0] = GemAnt_GewSt * gemeinde[1] + GemAnt_SvB * gemeinde[2]
            cursor_bilanz.updateRow(gemeinde)

        c.set_chronicle("Umsatzsteuer", self.folders.get_table(tablename='Chronik_Nutzung',workspace="FGDB_Einnahmen.gdb",project=projektname))
Example #5
0
    def run(self):
        """run Steuersalden Tool"""

        params = self.par
        projektname = self.projectname

        Gewerbesteuermessbetrag_Projekt = 0

        gewerbe_vorhanden = False
        gewerbe_messbetrag = 0
        einzelhandel_vorhanden = False
        einzelhandel_messbetrag = 0

        fields1 = ['Nutzungsart', 'id_teilflaeche', 'ags_bkg']
        table_teilflaechen = self.folders.get_table(
            'Teilflaechen_Plangebiet', "FGDB_Definition_Projekt.gdb")
        cursor1 = arcpy.da.SearchCursor(table_teilflaechen, fields1)
        for row1 in cursor1:
            ags = row1[2]
            ags2 = ags[0:2]
            if row1[0] == Nutzungsart.GEWERBE and not gewerbe_vorhanden:
                gewerbe_vorhanden = True
                Summe_Arbeitsplatzschaetzungen = 0
                fields2 = ['anzahl_jobs_schaetzung']
                table_gewerbeanteile = self.folders.get_table(
                    'Gewerbe_Anteile', "FGDB_Definition_Projekt.gdb")
                cursor2 = arcpy.da.SearchCursor(table_gewerbeanteile, fields2)
                for row2 in cursor2:
                    Summe_Arbeitsplatzschaetzungen += row2[0]
                #arcpy.AddMessage("Summe_Arbeitsplatzschaetzungen: " + str(Summe_Arbeitsplatzschaetzungen))

                Reale_Summe_AP = 0
                fields3 = ['Arbeitsplaetze']
                table_arbeitsplaetze = self.folders.get_table(
                    'Gewerbe_Arbeitsplaetze', "FGDB_Definition_Projekt.gdb")
                cursor3 = arcpy.da.SearchCursor(table_arbeitsplaetze, fields3)
                for row3 in cursor3:
                    Reale_Summe_AP += row3[0]

                Korrekturfaktor_AP = Reale_Summe_AP / Summe_Arbeitsplatzschaetzungen
                #arcpy.AddMessage("Korrekturfaktor_AP: " + str(Korrekturfaktor_AP))

                fields4 = ['anzahl_jobs_schaetzung', 'IDBranche']
                cursor4 = arcpy.da.SearchCursor(table_gewerbeanteile, fields4)
                for row4 in cursor4:
                    Messbetrag = 0
                    fields5 = [
                        'AGS2', 'IDBranche', 'GewStMessbetrag_pro_Arbeitsplatz'
                    ]
                    where1 = '"AGS2"' + "='" + ags2 + "'" + " AND " + '"IDBranche"' + "=" + str(
                        row4[1])
                    table_messbetrag_pro_ap = self.folders.get_base_table(
                        "FGDB_Einnahmen_Tool.gdb",
                        "GewSt_Messbetrag_pro_Arbeitsplatz")
                    cursor5 = arcpy.da.SearchCursor(table_messbetrag_pro_ap,
                                                    fields5, where1)
                    for branche in cursor5:
                        Messbetrag_pro_Arbeitsplatz = branche[2]

                    Messbetrag = cursor4[
                        0] * Korrekturfaktor_AP * Messbetrag_pro_Arbeitsplatz
                    gewerbe_messbetrag += Messbetrag
                    #arcpy.AddMessage("Messbetrag row4: " + str(Messbetrag))

            if row1[0] == Nutzungsart.EINZELHANDEL:
                einzelhandel_vorhanden = True
                fields6 = [
                    'Verkaufsflaeche_qm', 'IDTeilflaeche', 'IDSortiment'
                ]
                where2 = '"IDTeilflaeche"' + "=" + str(row1[1])
                table_verkaufsflaechen = self.folders.get_table(
                    'Einzelhandel_Verkaufsflaechen',
                    "FGDB_Definition_Projekt.gdb")
                cursor6 = arcpy.da.SearchCursor(table_verkaufsflaechen,
                                                fields6, where2)
                for row6 in cursor6:
                    Messbetrag = 0
                    verkaufsflaeche = row6[0]

                    fields7 = [
                        'GewStMessbetrag_pro_qm_Verkaufsflaeche',
                        'ID_Sortiment'
                    ]
                    where3 = '"ID_Sortiment"' + "=" + str(row6[2])
                    table_messbetrag_pro_qm = self.folders.get_base_table(
                        "FGDB_Einnahmen_Tool.gdb",
                        "GewSt_Messbetrag_und_SvB_pro_qm_Verkaufsflaeche")
                    cursor7 = arcpy.da.SearchCursor(table_messbetrag_pro_qm,
                                                    fields7, where3)
                    for row7 in cursor7:
                        messbetrag_pro_qm = row7[0]

                    Messbetrag = verkaufsflaeche * messbetrag_pro_qm
                    einzelhandel_messbetrag += Messbetrag

        Gewerbesteuermessbetrag_Projekt = gewerbe_messbetrag + einzelhandel_messbetrag
        #arcpy.AddMessage("Gewerbesteuermessbetrag_Projekt: " + str(Gewerbesteuermessbetrag_Projekt))

        SvB_Branchen = 0
        if gewerbe_vorhanden:
            fields = ['Arbeitsplaetze']
            table_arbeitsplaetze = self.folders.get_table(
                'Gewerbe_Arbeitsplaetze', "FGDB_Definition_Projekt.gdb")
            cursor = arcpy.da.SearchCursor(table_arbeitsplaetze, fields)
            for gewerbe in cursor:
                SvB_Branchen += gewerbe[0]
        #arcpy.AddMessage("SvB_Branchen: " + str(SvB_Branchen))

        SvB_Verkaufsflaechen = 0
        if einzelhandel_vorhanden:
            fields = ['Verkaufsflaeche_qm', 'IDSortiment']
            cursor = arcpy.da.SearchCursor(table_verkaufsflaechen, fields)
            for verkaufsflaeche in cursor:
                fields2 = ['SvB_pro_qm_Verkaufsflaeche', 'ID_Sortiment']
                where2 = '"ID_Sortiment"' + "=" + str(verkaufsflaeche[1])
                cursor2 = arcpy.da.SearchCursor(table_messbetrag_pro_qm,
                                                fields2, where2)
                for row in cursor2:
                    SvB_Verkaufsflaechen += verkaufsflaeche[0] * row[0]
            #arcpy.AddMessage("SvB_Verkaufsflaechen: " + str(SvB_Verkaufsflaechen))

        Gewerbesteuermessbetrag_pro_SvB_Projekt = Gewerbesteuermessbetrag_Projekt / (
            SvB_Branchen + SvB_Verkaufsflaechen)
        #arcpy.AddMessage("Gewerbesteuermessbetrag_pro_SvB_Projekt: " + str(Gewerbesteuermessbetrag_pro_SvB_Projekt))

        table_bilanzen = self.folders.get_table("Gemeindebilanzen",
                                                "FGDB_Einnahmen.gdb")
        fields = ["AGS", "GewSt", "Hebesatz_GewSt", "SvB_Saldo"]
        cursor = arcpy.da.UpdateCursor(table_bilanzen, fields)
        table_umlage = self.folders.get_base_table(
            "FGDB_Einnahmen_Tool.gdb", "GewSt_Umlage_Vervielfaeltiger")
        fields8 = ['Summe_BVV_LVV_EHZ']

        for row in cursor:
            agsGem = row[0]
            agsLand = agsGem[0:2]
            where8 = '"AGS_Land"' + "='" + agsLand + "'"
            cursor8 = arcpy.da.SearchCursor(table_umlage, fields8, where8)
            for row8 in cursor8:
                bvv_plus_lvv_plus_ehz = row8[0]
            #arcpy.AddMessage("Summe Bundes- und Landesvervielfältiger plus Erhöhungszahl: " + str(bvv_plus_lvv_plus_ehz))
            umlagesatz = bvv_plus_lvv_plus_ehz / row[2]
            #arcpy.AddMessage("Umlagesatz Gewerbesteuerumlage: " + str(umlagesatz))

            if row[0] == ags:
                row[1] = (Gewerbesteuermessbetrag_pro_SvB_Projekt *
                          (row[2] / 100.0) *
                          (row[3] + SvB_Verkaufsflaechen)) * (1 - umlagesatz)
            else:
                row[1] = (Gewerbesteuermessbetrag_pro_SvB_Projekt *
                          (row[2] / 100.0) * row[3]) * (1 - umlagesatz)
            cursor.updateRow(row)

        c.set_chronicle(
            "Gewerbesteuer",
            self.folders.get_table(tablename='Chronik_Nutzung',
                                   workspace="FGDB_Einnahmen.gdb",
                                   project=projektname))
Example #6
0
    def run(self):
        parameters = self.par
        projektname = self.par.name.value
        saldo = self.par.saldo.value
        target_gemeinde = self.par.gemeinde.value
        target_gemeinde_kurz = target_gemeinde.split(" ||")[0]

        workspace_projekt_einnahmen = self.folders.get_db(
            'FGDB_Einnahmen.gdb', projektname)
        wanderungssalden = os.path.join(workspace_projekt_einnahmen,
                                        'Gemeindebilanzen')

        fields = ["GEN", "Einw_Saldo"]
        cursor = arcpy.da.UpdateCursor(wanderungssalden, fields)
        for gemeinde in cursor:
            if gemeinde[0] == target_gemeinde.split(" ||")[0]:
                gemeinde[1] = saldo
                cursor.updateRow(gemeinde)

        # Bestimme AGS der Projektgemeinde
        pfad_rahmendaten = self.folders.get_table(
            tablename='Projektrahmendaten',
            workspace="FGDB_Definition_Projekt.gdb",
            project=projektname)
        cursor = arcpy.da.SearchCursor(pfad_rahmendaten, ["AGS"])
        for projekt in cursor:
            ags_projekt = projekt[0]

        if self.par.kontrolle.value == True:
            fields = ['AGS', 'Gemeindename']
            tablepath_rahmendaten = self.folders.get_table(
                'Projektrahmendaten', "FGDB_Definition_Projekt.gdb")
            cursor = arcpy.da.SearchCursor(tablepath_rahmendaten, fields)
            for row in cursor:
                ags = row[0]
                gemeinde_plangebiet = row[1]

            fields = ['AGS', "Einw_Saldo", "Wanderungsanteil_Ew"]
            cursor = arcpy.da.UpdateCursor(wanderungssalden, fields)

            for x in range(0, 3):
                saldo_summe = 0
                fields_saldo = ["Einw_Saldo"]
                cursor_saldo = arcpy.da.SearchCursor(wanderungssalden,
                                                     fields_saldo)
                for gemeinde in cursor_saldo:
                    saldo_summe += gemeinde[0]
                if saldo_summe == 0:
                    break
                arcpy.AddMessage("Saldo_Summe: " + str(saldo_summe))

                if saldo_summe < 0:
                    arcpy.AddMessage(gemeinde_plangebiet)
                    arcpy.AddMessage(target_gemeinde_kurz)
                    if gemeinde_plangebiet == target_gemeinde_kurz:
                        arcpy.AddMessage("Step 1")
                        for gemeinde in cursor:
                            if gemeinde[0] != ags:
                                gemeinde[1] -= round(saldo_summe * gemeinde[2])
                            cursor.updateRow(gemeinde)
                    else:
                        arcpy.AddMessage("Step 2")
                        for gemeinde in cursor:
                            if gemeinde[0] == ags:
                                gemeinde[1] -= saldo_summe
                            cursor.updateRow(gemeinde)
                elif saldo_summe > 0:
                    if gemeinde_plangebiet == target_gemeinde_kurz:
                        arcpy.AddMessage("Step 3")
                        for gemeinde in cursor:
                            if gemeinde[0] != ags:
                                gemeinde[1] -= round(saldo_summe * gemeinde[2])
                            cursor.updateRow(gemeinde)
                    else:
                        arcpy.AddMessage("Step 4")
                        for gemeinde in cursor:
                            if gemeinde[0] == ags:
                                gemeinde[1] -= saldo_summe
                            cursor.updateRow(gemeinde)

            #Übrige Personen von größter Gemeinde (nicht Projekt-Gemeinde) abziehen
            saldo_summe = 0
            cursor_saldo = arcpy.da.SearchCursor(wanderungssalden,
                                                 fields_saldo)
            for gemeinde in cursor_saldo:
                saldo_summe += gemeinde[0]
            if saldo_summe != 0:
                fields = ["Einw_Saldo", "AGS"]
                cursor = arcpy.da.UpdateCursor(
                    in_table=wanderungssalden,
                    field_names=fields,
                    sql_clause=(None, 'ORDER BY Einw_Saldo DESC'))
                for gemeinde in cursor:
                    if gemeinde[1] != ags_projekt:
                        gemeinde[0] -= saldo_summe
                        cursor.updateRow(gemeinde)
                        break

        arcpy.RefreshActiveView()
        arcpy.RefreshTOC()

        c.set_chronicle(
            "Wanderung Einwohner",
            self.folders.get_table(tablename='Chronik_Nutzung',
                                   workspace="FGDB_Einnahmen.gdb",
                                   project=projektname))
def Wanderungssalden_schaetzen(self):

    parameters = self.par
    projektname = self.projectname

    cursor = self.parent_tbx.query_table(table_name = 'Chronik_Nutzung',
                            columns = ['Arbeitsschritt', 'Letzte_Nutzung'],
                            workspace='FGDB_Einnahmen.gdb')
    salden_berechnet = True
    for row in cursor:
        if row[0] == "Wanderung Einwohner" and row[1] is None:
            salden_berechnet = False

    if self.par.aktualisieren.value == True or salden_berechnet == False:
        lib_einnahmen.create_gemeindebilanzen(self, projektname)

        workspace_projekt_definition = self.folders.get_db('FGDB_Definition_Projekt.gdb', projektname)
        workspace_projekt_einnahmen = self.folders.get_db('FGDB_Einnahmen.gdb', projektname)
        wanderungssalden = os.path.join(workspace_projekt_einnahmen, "Gemeindebilanzen")

        projektflaechen = join(workspace_projekt_definition, 'Teilflaechen_Plangebiet')
        if  arcpy.Exists("projektflaechen_lyr"):
            arcpy.Delete_management("projektflaechen_lyr")
        arcpy.MakeFeatureLayer_management(projektflaechen, "projektflaechen_lyr")

        fields = ["Einw_Zuzug", "Einw_Fortzug", "Einw_Saldo", "Wanderungsanteil_Ew", "Gewichtete_Ew", "SvB_Zuzug", "SvB_Fortzug", "SvB_Saldo"]
        cursor = arcpy.da.UpdateCursor(wanderungssalden, fields)
        for gemeinde in cursor:
            gemeinde[0] = 0
            gemeinde[1] = 0
            gemeinde[2] = 0
            gemeinde[3] = 0
            gemeinde[4] = 0
            gemeinde[5] = 0
            gemeinde[6] = 0
            gemeinde[7] = 0
            cursor.updateRow(gemeinde)


        #Wichtungsfaktoren auslesen
        Wichtungen_Gewerbe = {}
        Wichtungen_Wohnen = {}

        path_distanzen = self.folders.get_base_table("FGDB_Einnahmen_Tool.gdb", "Wanderung_Entfernungswichtung")
        cursor = arcpy.da.SearchCursor(path_distanzen, ["Distance", "Wichtung_Wohnen", "Wichtung_Gewerbe"])
        for distanz in cursor:
            Wichtungen_Wohnen[str(int(distanz[0]))] = distanz[1]
            Wichtungen_Gewerbe[str(int(distanz[0]))] = distanz[2]
        #arcpy.AddMessage(Wichtungen_Wohnen)


        #Randsummen Wanderung auslesen (Anteile innerhalb/außerhalb 25km und Neugründungen [nur Gewerbe])
        Randsummen_Gewerbe = {}
        Randsummen_Wohnen = {}
        path_randsummen = self.folders.get_base_table("FGDB_Einnahmen_Tool.gdb", "Wanderung_Randsummen")
        cursor = arcpy.da.SearchCursor(path_randsummen, ["IDWanderungstyp", "Anteil_Wohnen", "Anteil_Gewerbe"])
        for randsumme in cursor:
            Randsummen_Wohnen[randsumme[0]] = randsumme[1]
            Randsummen_Gewerbe[randsumme[0]] = randsumme[2]
        #arcpy.AddMessage(Randsummen_Wohnen)


        #Anteile der Herkunftsgemeinden an Einwohner bestimmen
        pfad_buffer = os.path.join(workspace_projekt_einnahmen, "buffer_25km")
        if arcpy.Exists(pfad_buffer):
            arcpy.Delete_management(pfad_buffer)

        pfad_Rasterausschnitt = os.path.join(workspace_projekt_einnahmen, "Rasterausschnitt")
        if arcpy.Exists(pfad_Rasterausschnitt):
            arcpy.Delete_management(pfad_Rasterausschnitt)

        pfad_Rasterausschnitt_25km = os.path.join(workspace_projekt_einnahmen, "Rasterausschnitt_25km")
        if arcpy.Exists(pfad_Rasterausschnitt_25km):
            arcpy.Delete_management(pfad_Rasterausschnitt_25km)

        pfad_Punktlayer_25km_posWerte = os.path.join(workspace_projekt_einnahmen, "Punktlayer_25km_posWerte")
        if arcpy.Exists(pfad_Punktlayer_25km_posWerte):
            arcpy.Delete_management(pfad_Punktlayer_25km_posWerte)

        pfad_Entfernungsringe = os.path.join(workspace_projekt_einnahmen, "Entfernungsringe")
        if arcpy.Exists(pfad_Entfernungsringe):
            arcpy.Delete_management(pfad_Entfernungsringe)

        pfad_Herkunftsraeume = os.path.join(workspace_projekt_einnahmen, "Herkunftsgebiete")
        if arcpy.Exists(pfad_Herkunftsraeume):
            arcpy.Delete_management(pfad_Herkunftsraeume)

        pfad_Herkunftsraeume_mit_Ew = os.path.join(workspace_projekt_einnahmen, "Herkunftsgebiete_mit_Ew")
        if arcpy.Exists(pfad_Herkunftsraeume_mit_Ew):
            arcpy.Delete_management(pfad_Herkunftsraeume_mit_Ew)

        pfad_zensusgrid = self.folders.ZENSUS_RASTER_FILE
        pfad_bkggemeinden = self.folders.get_base_table("FGDB_Basisdaten_deutschland.gdb", "bkg_gemeinden")


        #25km Buffer um Projektflaeche
        arcpy.Buffer_analysis(projektflaechen, pfad_buffer, "25000 Meters", "FULL", "ROUND", "ALL", "", "PLANAR")

        #Extent des Buffers auslesen
        desc = arcpy.Describe(pfad_buffer)
        xmin = desc.extent.XMin
        xmax = desc.extent.XMax
        ymin = desc.extent.YMin
        ymax = desc.extent.YMax

        #Verschneidung mit Zensusraster
        arcpy.Clip_management(pfad_zensusgrid, "%s %s %s %s" % (xmin, ymin, xmax, ymax), pfad_Rasterausschnitt, pfad_buffer, "2147483647", "ClippingGeometry", "NO_MAINTAIN_EXTENT")

        #Raterausschnitt in Punktlayer konvertieren
        arcpy.RasterToPoint_conversion(pfad_Rasterausschnitt, pfad_Rasterausschnitt_25km, "Value")

        #LeereSiedlungszellen entfernen
        arcpy.Select_analysis(pfad_Rasterausschnitt_25km, pfad_Punktlayer_25km_posWerte, '"grid_code" > 0')

        #Mehrere Buffer um Projektflaeche erzeugen
        arcpy.MultipleRingBuffer_analysis(projektflaechen, pfad_Entfernungsringe, "1500;2500;3500;4500;6500;8500;11500;14500;18500;25000", "Meters", "distance", "ALL", "FULL")

        #Buffer mit Gemeinden verschneiden
        arcpy.Intersect_analysis([pfad_bkggemeinden, pfad_Entfernungsringe], pfad_Herkunftsraeume, "NO_FID", "", "INPUT")

        #Verschneiden der Herkunftsraume mit den Summen der jeweiligen Punktfeatures

        fieldmappings = arcpy.FieldMappings()
        fieldmappings.addTable(pfad_Herkunftsraeume)
        fieldmappings.addTable(pfad_Punktlayer_25km_posWerte)

        gridcode_FieldIndex = fieldmappings.findFieldMapIndex("grid_code")
        fieldmap = fieldmappings.getFieldMap(gridcode_FieldIndex)
        field = fieldmap.outputField
        field.name = "Summe_Ew"
        field.aliasName = "Summe_Ew"
        fieldmap.outputField = field
        fieldmap.mergeRule = "sum"
        fieldmappings.replaceFieldMap(gridcode_FieldIndex, fieldmap)

        arcpy.SpatialJoin_analysis(pfad_Herkunftsraeume, pfad_Punktlayer_25km_posWerte, pfad_Herkunftsraeume_mit_Ew, "JOIN_ONE_TO_ONE", "KEEP_ALL", fieldmappings)


        #SvB_je_EW

        Summe_Wichtungsfaktoren_Gesamtraum_Wohnen = 0
        Summe_Wichtungsfaktoren_Gesamtraum_Gewerbe = 0
        Summe_Wichtungsfaktoren_Gemeinde_Wohnen = 0
        Summe_Wichtungsfaktoren_Gemeinde_Gewerbe = 0
        SvB_je_EW = 0
        herkunftsraeume = []

        cursor_gemeindebilanz = arcpy.da.SearchCursor(wanderungssalden, ["AGS", "SvB_pro_Ew"])
        for gemeinde in cursor_gemeindebilanz:
            where = '"AGS"' + "='" + gemeinde[0] +"'"
            cursor_Summe_Ew = arcpy.da.SearchCursor(pfad_Herkunftsraeume_mit_Ew, ["AGS", "Summe_Ew", "distance", "Shape_Area"], where)
            for gemeindeteil in cursor_Summe_Ew:
                if gemeindeteil[1] >= 1:
                    Wichtungsfaktor_Wohnen = gemeindeteil[1] * gemeindeteil[3] * Wichtungen_Wohnen[str(int(gemeindeteil[2]))]
                    Wichtungsfaktor_Gewerbe = gemeindeteil[1] * gemeinde[1] * gemeindeteil[3] * Wichtungen_Gewerbe[str(int(gemeindeteil[2]))]
                    herkunftsraeume.append([gemeindeteil[0], Wichtungsfaktor_Wohnen, Wichtungsfaktor_Gewerbe])
                    Summe_Wichtungsfaktoren_Gesamtraum_Wohnen += Wichtungsfaktor_Wohnen
                    Summe_Wichtungsfaktoren_Gesamtraum_Gewerbe += Wichtungsfaktor_Gewerbe

        ap = 0
        bewohner = 0
        teilflaechen = self.folders.get_table("Teilflaechen_Plangebiet", "FGDB_Definition_Projekt.gdb")
        rahmendaten = self.folders.get_table("Projektrahmendaten", "FGDB_Definition_Projekt.gdb")
        cursor = arcpy.da.SearchCursor(rahmendaten,["AGS"])
        for row in cursor:
            ags_projekt = row[0]
        cursor = arcpy.da.SearchCursor(teilflaechen, ["ew", "AP_gesamt"])
        for flaeche in cursor:
            ap += flaeche[1]
            bewohner += flaeche[0]

        #Aufteilung Fortzug (und Zuzug [nur Projektgemeinde])
        cursor_gemeindebilanz = arcpy.da.UpdateCursor(wanderungssalden, ["AGS", "SvB_pro_Ew", "Einw_Fortzug", "SvB_Fortzug", "Einw_Zuzug", "SvB_Zuzug", "SvB_Saldo", "Einw_Saldo", "Wanderungsanteil_Ew", "Wanderungsanteil_SvB"])
        for gemeinde in cursor_gemeindebilanz:
            Summe_Wichtungsfaktoren_Gemeinde_Wohnen = 0
            Summe_Wichtungsfaktoren_Gemeinde_Gewerbe = 0
            for raum in herkunftsraeume:
                if raum[0] == gemeinde[0]:
                    Summe_Wichtungsfaktoren_Gemeinde_Wohnen += raum[1]
                    Summe_Wichtungsfaktoren_Gemeinde_Gewerbe += raum[2]
            Einw_Fortzug_neu = -1 * (bewohner * Randsummen_Wohnen[1] * Summe_Wichtungsfaktoren_Gemeinde_Wohnen / Summe_Wichtungsfaktoren_Gesamtraum_Wohnen)
            if Einw_Fortzug_neu != 0:
                gemeinde[2] = Einw_Fortzug_neu# - 0.5
            else:
                gemeinde[2] = Einw_Fortzug_neu
            SvB_Fortzug_neu = -1 * (ap * Randsummen_Gewerbe[1] * Summe_Wichtungsfaktoren_Gemeinde_Gewerbe / Summe_Wichtungsfaktoren_Gesamtraum_Gewerbe)
            if SvB_Fortzug_neu != 0:
                gemeinde[3] = SvB_Fortzug_neu# - 0.5
            else:
                gemeinde[3] = SvB_Fortzug_neu
            if gemeinde[0] == ags_projekt:
                gemeinde[4] = bewohner
                gemeinde[5] = ap
            else:
                gemeinde[8] = Summe_Wichtungsfaktoren_Gemeinde_Wohnen / Summe_Wichtungsfaktoren_Gesamtraum_Wohnen
                gemeinde[9] = Summe_Wichtungsfaktoren_Gemeinde_Gewerbe / Summe_Wichtungsfaktoren_Gesamtraum_Gewerbe
            gemeinde[6] = gemeinde[3] + gemeinde[5]
            gemeinde[7] = gemeinde[4] + gemeinde[2]
            cursor_gemeindebilanz.updateRow(gemeinde)

        #Summe der zugeordneten Fortzüge (innerhalb 25 km) und Zuzüge [jeweils inkl. Rundungseffekte]
        Summe_Zugeordneter_Fortzug_Ew = 0.0
        Summe_Zugeordneter_Zuzug_Ew = 0.0
        Summe_Zugeordneter_Fortzug_AP = 0.0
        Summe_Zugeordneter_Zuzug_AP = 0.0
        cursor_summe = arcpy.da.SearchCursor(wanderungssalden, ["AGS", "SvB_pro_Ew", "Einw_Fortzug", "SvB_Fortzug", "Einw_Zuzug", "SvB_Zuzug", "SvB_Saldo", "Einw_Saldo"])
        for gemeinde in cursor_summe:
            Summe_Zugeordneter_Fortzug_Ew += gemeinde[2]
            Summe_Zugeordneter_Zuzug_Ew += gemeinde[4]
            Summe_Zugeordneter_Fortzug_AP += gemeinde[3]
            Summe_Zugeordneter_Zuzug_AP += gemeinde[5]
        Differenz_Ew = Summe_Zugeordneter_Zuzug_Ew + Summe_Zugeordneter_Fortzug_Ew
        Differenz_AP = Summe_Zugeordneter_Zuzug_AP + Summe_Zugeordneter_Fortzug_AP

        #Neugruendungen (nur Gewerbe)
        Neugruendungen_AP = ap * Randsummen_Gewerbe[3] + 0.5

        #Fortzüge aus dem restlichen Bundesgebiet/Welt (hier werden auch die Rundungsverluste ungebracht)
        Fortzuege_restliches_Bundesgebiet_und_Welt_Ew = -1 * Differenz_Ew
        Fortzuege_restliches_Bundesgebiet_und_Welt_AP = -1 * (Differenz_AP - Neugruendungen_AP)
        #arcpy.AddMessage("Wohnen: Fortzüge restliches Bundesgebiet = {0}".format(Fortzuege_restliches_Bundesgebiet_und_Welt_Ew))
        #arcpy.AddMessage("Gewerbe: Fortzüge restliches Bundesgebiet = {0}".format(Fortzuege_restliches_Bundesgebiet_und_Welt_AP))
        #arcpy.AddMessage("Gewerbe: Neugründungen = {0}".format(Neugruendungen_AP))

        self.parent_tbx.delete_rows_in_table("Zuzugsstatistik_Ew")
        column_values = {"Kategorie": [u"Projektgemeinde/Region", u"Restliches Bundesgebiet/Ausland"],
                            "Anzahl": [int(round(Summe_Zugeordneter_Fortzug_Ew * -1)), int(round(Differenz_Ew))]}
        self.parent_tbx.insert_rows_in_table("Zuzugsstatistik_Ew", column_values)

        self.parent_tbx.delete_rows_in_table("Zuzugsstatistik_SvB")
        column_values = {"Kategorie": [u"Projektgemeinde/Region", u"Restliches Bundesgebiet/Ausland", u"Neugründungen"],
                         "Anzahl": [int(round(Summe_Zugeordneter_Fortzug_AP * -1)), int(round((Differenz_AP - Neugruendungen_AP))), int(round(Neugruendungen_AP))]}
        self.parent_tbx.insert_rows_in_table("Zuzugsstatistik_SvB", column_values)

        c.set_chronicle("Wanderung Einwohner", self.folders.get_table(tablename='Chronik_Nutzung',workspace="FGDB_Einnahmen.gdb",project=projektname))
        c.set_chronicle("Wanderung Beschaeftigte", self.folders.get_table(tablename='Chronik_Nutzung',workspace="FGDB_Einnahmen.gdb",project=projektname))
    def run(self):

        parameters = self.par
        projektname = self.par.name.value
        saldo = self.par.saldo.value
        target_gemeinde = self.par.gemeinde.value
        target_gemeinde_kurz = target_gemeinde.split(" ||")[0]
        workspace_projekt_einnahmen = self.folders.get_db('FGDB_Einnahmen.gdb', projektname)
        wanderungssalden = os.path.join(workspace_projekt_einnahmen, 'Gemeindebilanzen')

        fields = ["GEN", self.parent_tbx._saldo_field]
        for key in self.parent_tbx.gemeinden_dict:
            where_clause = '"GEN"' + "='" + key + "'"
            cursor = arcpy.da.UpdateCursor(wanderungssalden, fields, where_clause)
            for gemeinde in cursor:
                    gemeinde[1] = self.parent_tbx.gemeinden_dict[key]
                    cursor.updateRow(gemeinde)

        if self.parent_tbx._saldo_field == "SvB_Saldo":
            zuzugsstatistik = "Zuzugsstatistik_SvB"
        else:
            zuzugsstatistik = "Zuzugsstatistik_Ew"
        table_zuzugsstatistik = self.folders.get_table(zuzugsstatistik, 'FGDB_Einnahmen.gdb')
        where_zuzug = 'NOT "Kategorie"' + "='" + 'Projektgemeinde/Region' + "'"
        fields_zuzug = ["Kategorie", "Anzahl"]
        cursor = arcpy.da.UpdateCursor(table_zuzugsstatistik, fields_zuzug, where_zuzug)
        for row in cursor:
            row[1] = abs(self.parent_tbx.gemeinden_dict[row[0]])
            cursor.updateRow(row)

        # Bestimme AGS der Projektgemeinde
        if self.par.kontrolle.value == True:
            fields = ['AGS', 'Gemeindename']
            tablepath_rahmendaten = self.folders.get_table('Projektrahmendaten', "FGDB_Definition_Projekt.gdb")
            cursor = arcpy.da.SearchCursor(tablepath_rahmendaten, fields)
            for row in cursor:
                ags = row[0]
                gemeinde_plangebiet = row[1]

            if self.parent_tbx.gemeinden_dict[gemeinde_plangebiet] == self.parent_tbx.gemeinden_dict_initial[gemeinde_plangebiet]:
                plangebiet_saldo_changed = False
            else:
                plangebiet_saldo_changed = True

            if self.parent_tbx._saldo_field == "SvB_Saldo":
                wanderungsanteil = "Wanderungsanteil_SvB"
            else:
                wanderungsanteil = "Wanderungsanteil_Ew"
            fields = ['AGS', self.parent_tbx._saldo_field, wanderungsanteil]
            cursor = arcpy.da.UpdateCursor(wanderungssalden, fields)

            for x in range(0,2):
                saldo_summe = 0.0

                fields_saldo = [self.parent_tbx._saldo_field]
                cursor_saldo = arcpy.da.SearchCursor(wanderungssalden, fields_saldo)
                for gemeinde in cursor_saldo:
                    saldo_summe += gemeinde[0]
                cursor_zuzug = arcpy.da.SearchCursor(table_zuzugsstatistik, fields_zuzug, where_zuzug)
                for row in cursor_zuzug:
                    saldo_summe -= row[1]

                arcpy.AddMessage("Saldo_Summe: " + str(saldo_summe))
                if saldo_summe  == 0:
                    break

                if saldo_summe < 0:
                    if plangebiet_saldo_changed == True:
                        for gemeinde in cursor:
                            if gemeinde[0] != ags:
                                gemeinde[1] -= saldo_summe * gemeinde[2]
                            cursor.updateRow(gemeinde)
                    else:
                        for gemeinde in cursor:
                            if gemeinde[0] == ags:
                                gemeinde[1] -= saldo_summe
                            cursor.updateRow(gemeinde)
                elif saldo_summe > 0:
                    if plangebiet_saldo_changed == True:
                        for gemeinde in cursor:
                            if gemeinde[0] != ags:
                                gemeinde[1] -= saldo_summe * gemeinde[2]
                            cursor.updateRow(gemeinde)
                    else:
                        for gemeinde in cursor:
                            if gemeinde[0] == ags:
                                gemeinde[1] -= saldo_summe
                            cursor.updateRow(gemeinde)

            #Restsumme verteilen
            saldo_summe = 0.0
            cursor_saldo = arcpy.da.SearchCursor(wanderungssalden, fields_saldo)
            for gemeinde in cursor_saldo:
                saldo_summe += gemeinde[0]
            cursor_zuzug = arcpy.da.SearchCursor(table_zuzugsstatistik, fields_zuzug, where_zuzug)
            for row in cursor_zuzug:
                saldo_summe -= row[1]
            if saldo_summe != 0:
                fields = [self.parent_tbx._saldo_field, "AGS"]
                cursor = arcpy.da.UpdateCursor(in_table = wanderungssalden, field_names = fields, sql_clause=(None, 'ORDER BY {} ASC'.format(self.parent_tbx._saldo_field)))
                for gemeinde in cursor:
                    if gemeinde[1] != ags:
                        gemeinde[0] -= saldo_summe
                        cursor.updateRow(gemeinde)
                        break

            del cursor, cursor_saldo, cursor_zuzug

        arcpy.RefreshActiveView()
        arcpy.RefreshTOC()

        if self.parent_tbx._saldo_field == "SvB_Saldo":
            c.set_chronicle(u"Wanderung Beschäftigte", self.folders.get_table(tablename='Chronik_Nutzung',workspace="FGDB_Einnahmen.gdb",project=projektname))
        else:
            c.set_chronicle(u"Wanderung Einwohner", self.folders.get_table(tablename='Chronik_Nutzung',workspace="FGDB_Einnahmen.gdb",project=projektname))
def Wanderungssalden_schaetzen(self):

    parameters = self.par
    projektname = self.projectname

    cursor = self.parent_tbx.query_table(
        table_name='Chronik_Nutzung',
        columns=['Arbeitsschritt', 'Letzte_Nutzung'],
        workspace='FGDB_Einnahmen.gdb')
    salden_berechnet = True
    for row in cursor:
        if row[0] == "Wanderung Einwohner" and row[1] is None:
            salden_berechnet = False

    if self.par.aktualisieren.value == True or salden_berechnet == False:
        lib_einnahmen.create_gemeindebilanzen(self, projektname)

        workspace_projekt_definition = self.folders.get_db(
            'FGDB_Definition_Projekt.gdb', projektname)
        workspace_projekt_einnahmen = self.folders.get_db(
            'FGDB_Einnahmen.gdb', projektname)
        wanderungssalden = os.path.join(workspace_projekt_einnahmen,
                                        "Gemeindebilanzen")

        projektflaechen = join(workspace_projekt_definition,
                               'Teilflaechen_Plangebiet')
        if arcpy.Exists("projektflaechen_lyr"):
            arcpy.Delete_management("projektflaechen_lyr")
        arcpy.MakeFeatureLayer_management(projektflaechen,
                                          "projektflaechen_lyr")

        fields = [
            "Einw_Zuzug", "Einw_Fortzug", "Einw_Saldo", "Wanderungsanteil_Ew",
            "Gewichtete_Ew", "SvB_Zuzug", "SvB_Fortzug", "SvB_Saldo"
        ]
        cursor = arcpy.da.UpdateCursor(wanderungssalden, fields)
        for gemeinde in cursor:
            gemeinde[0] = 0
            gemeinde[1] = 0
            gemeinde[2] = 0
            gemeinde[3] = 0
            gemeinde[4] = 0
            gemeinde[5] = 0
            gemeinde[6] = 0
            gemeinde[7] = 0
            cursor.updateRow(gemeinde)

        #Wichtungsfaktoren auslesen
        Wichtungen_Gewerbe = {}
        Wichtungen_Wohnen = {}

        path_distanzen = self.folders.get_base_table(
            "FGDB_Einnahmen_Tool.gdb", "Wanderung_Entfernungswichtung")
        cursor = arcpy.da.SearchCursor(
            path_distanzen,
            ["Distance", "Wichtung_Wohnen", "Wichtung_Gewerbe"])
        for distanz in cursor:
            Wichtungen_Wohnen[str(int(distanz[0]))] = distanz[1]
            Wichtungen_Gewerbe[str(int(distanz[0]))] = distanz[2]
        #arcpy.AddMessage(Wichtungen_Wohnen)

        #Randsummen Wanderung auslesen (Anteile innerhalb/außerhalb 25km und Neugründungen [nur Gewerbe])
        Randsummen_Gewerbe = {}
        Randsummen_Wohnen = {}
        path_randsummen = self.folders.get_base_table(
            "FGDB_Einnahmen_Tool.gdb", "Wanderung_Randsummen")
        cursor = arcpy.da.SearchCursor(
            path_randsummen,
            ["IDWanderungstyp", "Anteil_Wohnen", "Anteil_Gewerbe"])
        for randsumme in cursor:
            Randsummen_Wohnen[randsumme[0]] = randsumme[1]
            Randsummen_Gewerbe[randsumme[0]] = randsumme[2]
        #arcpy.AddMessage(Randsummen_Wohnen)

        #Anteile der Herkunftsgemeinden an Einwohner bestimmen
        pfad_buffer = os.path.join(workspace_projekt_einnahmen, "buffer_25km")
        if arcpy.Exists(pfad_buffer):
            arcpy.Delete_management(pfad_buffer)

        pfad_Rasterausschnitt = os.path.join(workspace_projekt_einnahmen,
                                             "Rasterausschnitt")
        if arcpy.Exists(pfad_Rasterausschnitt):
            arcpy.Delete_management(pfad_Rasterausschnitt)

        pfad_Rasterausschnitt_25km = os.path.join(workspace_projekt_einnahmen,
                                                  "Rasterausschnitt_25km")
        if arcpy.Exists(pfad_Rasterausschnitt_25km):
            arcpy.Delete_management(pfad_Rasterausschnitt_25km)

        pfad_Punktlayer_25km_posWerte = os.path.join(
            workspace_projekt_einnahmen, "Punktlayer_25km_posWerte")
        if arcpy.Exists(pfad_Punktlayer_25km_posWerte):
            arcpy.Delete_management(pfad_Punktlayer_25km_posWerte)

        pfad_Entfernungsringe = os.path.join(workspace_projekt_einnahmen,
                                             "Entfernungsringe")
        if arcpy.Exists(pfad_Entfernungsringe):
            arcpy.Delete_management(pfad_Entfernungsringe)

        pfad_Herkunftsraeume = os.path.join(workspace_projekt_einnahmen,
                                            "Herkunftsgebiete")
        if arcpy.Exists(pfad_Herkunftsraeume):
            arcpy.Delete_management(pfad_Herkunftsraeume)

        pfad_Herkunftsraeume_mit_Ew = os.path.join(workspace_projekt_einnahmen,
                                                   "Herkunftsgebiete_mit_Ew")
        if arcpy.Exists(pfad_Herkunftsraeume_mit_Ew):
            arcpy.Delete_management(pfad_Herkunftsraeume_mit_Ew)

        pfad_zensusgrid = self.folders.ZENSUS_RASTER_FILE
        pfad_bkggemeinden = self.folders.get_base_table(
            "FGDB_Basisdaten_deutschland.gdb", "bkg_gemeinden")

        #25km Buffer um Projektflaeche
        arcpy.Buffer_analysis(projektflaechen, pfad_buffer, "25000 Meters",
                              "FULL", "ROUND", "ALL", "", "PLANAR")

        #Extent des Buffers auslesen
        desc = arcpy.Describe(pfad_buffer)
        xmin = desc.extent.XMin
        xmax = desc.extent.XMax
        ymin = desc.extent.YMin
        ymax = desc.extent.YMax

        #Verschneidung mit Zensusraster
        arcpy.Clip_management(pfad_zensusgrid,
                              "%s %s %s %s" % (xmin, ymin, xmax, ymax),
                              pfad_Rasterausschnitt, pfad_buffer, "2147483647",
                              "ClippingGeometry", "NO_MAINTAIN_EXTENT")

        #Raterausschnitt in Punktlayer konvertieren
        arcpy.RasterToPoint_conversion(pfad_Rasterausschnitt,
                                       pfad_Rasterausschnitt_25km, "Value")

        #LeereSiedlungszellen entfernen
        arcpy.Select_analysis(pfad_Rasterausschnitt_25km,
                              pfad_Punktlayer_25km_posWerte, '"grid_code" > 0')

        #Mehrere Buffer um Projektflaeche erzeugen
        arcpy.MultipleRingBuffer_analysis(
            projektflaechen, pfad_Entfernungsringe,
            "1500;2500;3500;4500;6500;8500;11500;14500;18500;25000", "Meters",
            "distance", "ALL", "FULL")

        #Buffer mit Gemeinden verschneiden
        arcpy.Intersect_analysis([pfad_bkggemeinden, pfad_Entfernungsringe],
                                 pfad_Herkunftsraeume, "NO_FID", "", "INPUT")

        #Verschneiden der Herkunftsraume mit den Summen der jeweiligen Punktfeatures

        fieldmappings = arcpy.FieldMappings()
        fieldmappings.addTable(pfad_Herkunftsraeume)
        fieldmappings.addTable(pfad_Punktlayer_25km_posWerte)

        gridcode_FieldIndex = fieldmappings.findFieldMapIndex("grid_code")
        fieldmap = fieldmappings.getFieldMap(gridcode_FieldIndex)
        field = fieldmap.outputField
        field.name = "Summe_Ew"
        field.aliasName = "Summe_Ew"
        fieldmap.outputField = field
        fieldmap.mergeRule = "sum"
        fieldmappings.replaceFieldMap(gridcode_FieldIndex, fieldmap)

        arcpy.SpatialJoin_analysis(pfad_Herkunftsraeume,
                                   pfad_Punktlayer_25km_posWerte,
                                   pfad_Herkunftsraeume_mit_Ew,
                                   "JOIN_ONE_TO_ONE", "KEEP_ALL",
                                   fieldmappings)

        #SvB_je_EW

        Summe_Wichtungsfaktoren_Gesamtraum_Wohnen = 0
        Summe_Wichtungsfaktoren_Gesamtraum_Gewerbe = 0
        Summe_Wichtungsfaktoren_Gemeinde_Wohnen = 0
        Summe_Wichtungsfaktoren_Gemeinde_Gewerbe = 0
        SvB_je_EW = 0
        herkunftsraeume = []

        cursor_gemeindebilanz = arcpy.da.SearchCursor(wanderungssalden,
                                                      ["AGS", "SvB_pro_Ew"])
        for gemeinde in cursor_gemeindebilanz:
            where = '"AGS"' + "='" + gemeinde[0] + "'"
            cursor_Summe_Ew = arcpy.da.SearchCursor(
                pfad_Herkunftsraeume_mit_Ew,
                ["AGS", "Summe_Ew", "distance", "Shape_Area"], where)
            for gemeindeteil in cursor_Summe_Ew:
                if gemeindeteil[1] >= 1:
                    Wichtungsfaktor_Wohnen = gemeindeteil[1] * gemeindeteil[
                        3] * Wichtungen_Wohnen[str(int(gemeindeteil[2]))]
                    Wichtungsfaktor_Gewerbe = gemeindeteil[1] * gemeinde[
                        1] * gemeindeteil[3] * Wichtungen_Gewerbe[str(
                            int(gemeindeteil[2]))]
                    herkunftsraeume.append([
                        gemeindeteil[0], Wichtungsfaktor_Wohnen,
                        Wichtungsfaktor_Gewerbe
                    ])
                    Summe_Wichtungsfaktoren_Gesamtraum_Wohnen += Wichtungsfaktor_Wohnen
                    Summe_Wichtungsfaktoren_Gesamtraum_Gewerbe += Wichtungsfaktor_Gewerbe

        ap = 0
        bewohner = 0
        teilflaechen = self.folders.get_table("Teilflaechen_Plangebiet",
                                              "FGDB_Definition_Projekt.gdb")
        rahmendaten = self.folders.get_table("Projektrahmendaten",
                                             "FGDB_Definition_Projekt.gdb")
        cursor = arcpy.da.SearchCursor(rahmendaten, ["AGS"])
        for row in cursor:
            ags_projekt = row[0]
        cursor = arcpy.da.SearchCursor(teilflaechen, ["ew", "AP_gesamt"])
        for flaeche in cursor:
            ap += flaeche[1]
            bewohner += flaeche[0]

        #Aufteilung Fortzug (und Zuzug [nur Projektgemeinde])
        cursor_gemeindebilanz = arcpy.da.UpdateCursor(wanderungssalden, [
            "AGS", "SvB_pro_Ew", "Einw_Fortzug", "SvB_Fortzug", "Einw_Zuzug",
            "SvB_Zuzug", "SvB_Saldo", "Einw_Saldo", "Wanderungsanteil_Ew",
            "Wanderungsanteil_SvB"
        ])
        for gemeinde in cursor_gemeindebilanz:
            Summe_Wichtungsfaktoren_Gemeinde_Wohnen = 0
            Summe_Wichtungsfaktoren_Gemeinde_Gewerbe = 0
            for raum in herkunftsraeume:
                if raum[0] == gemeinde[0]:
                    Summe_Wichtungsfaktoren_Gemeinde_Wohnen += raum[1]
                    Summe_Wichtungsfaktoren_Gemeinde_Gewerbe += raum[2]
            Einw_Fortzug_neu = -1 * (bewohner * Randsummen_Wohnen[1] *
                                     Summe_Wichtungsfaktoren_Gemeinde_Wohnen /
                                     Summe_Wichtungsfaktoren_Gesamtraum_Wohnen)
            if Einw_Fortzug_neu != 0:
                gemeinde[2] = Einw_Fortzug_neu  # - 0.5
            else:
                gemeinde[2] = Einw_Fortzug_neu
            SvB_Fortzug_neu = -1 * (ap * Randsummen_Gewerbe[1] *
                                    Summe_Wichtungsfaktoren_Gemeinde_Gewerbe /
                                    Summe_Wichtungsfaktoren_Gesamtraum_Gewerbe)
            if SvB_Fortzug_neu != 0:
                gemeinde[3] = SvB_Fortzug_neu  # - 0.5
            else:
                gemeinde[3] = SvB_Fortzug_neu
            if gemeinde[0] == ags_projekt:
                gemeinde[4] = bewohner
                gemeinde[5] = ap
            else:
                gemeinde[
                    8] = Summe_Wichtungsfaktoren_Gemeinde_Wohnen / Summe_Wichtungsfaktoren_Gesamtraum_Wohnen
                gemeinde[
                    9] = Summe_Wichtungsfaktoren_Gemeinde_Gewerbe / Summe_Wichtungsfaktoren_Gesamtraum_Gewerbe
            gemeinde[6] = gemeinde[3] + gemeinde[5]
            gemeinde[7] = gemeinde[4] + gemeinde[2]
            cursor_gemeindebilanz.updateRow(gemeinde)

        #Summe der zugeordneten Fortzüge (innerhalb 25 km) und Zuzüge [jeweils inkl. Rundungseffekte]
        Summe_Zugeordneter_Fortzug_Ew = 0.0
        Summe_Zugeordneter_Zuzug_Ew = 0.0
        Summe_Zugeordneter_Fortzug_AP = 0.0
        Summe_Zugeordneter_Zuzug_AP = 0.0
        cursor_summe = arcpy.da.SearchCursor(wanderungssalden, [
            "AGS", "SvB_pro_Ew", "Einw_Fortzug", "SvB_Fortzug", "Einw_Zuzug",
            "SvB_Zuzug", "SvB_Saldo", "Einw_Saldo"
        ])
        for gemeinde in cursor_summe:
            Summe_Zugeordneter_Fortzug_Ew += gemeinde[2]
            Summe_Zugeordneter_Zuzug_Ew += gemeinde[4]
            Summe_Zugeordneter_Fortzug_AP += gemeinde[3]
            Summe_Zugeordneter_Zuzug_AP += gemeinde[5]
        Differenz_Ew = Summe_Zugeordneter_Zuzug_Ew + Summe_Zugeordneter_Fortzug_Ew
        Differenz_AP = Summe_Zugeordneter_Zuzug_AP + Summe_Zugeordneter_Fortzug_AP

        #Neugruendungen (nur Gewerbe)
        Neugruendungen_AP = ap * Randsummen_Gewerbe[3] + 0.5

        #Fortzüge aus dem restlichen Bundesgebiet/Welt (hier werden auch die Rundungsverluste ungebracht)
        Fortzuege_restliches_Bundesgebiet_und_Welt_Ew = -1 * Differenz_Ew
        Fortzuege_restliches_Bundesgebiet_und_Welt_AP = -1 * (
            Differenz_AP - Neugruendungen_AP)
        #arcpy.AddMessage("Wohnen: Fortzüge restliches Bundesgebiet = {0}".format(Fortzuege_restliches_Bundesgebiet_und_Welt_Ew))
        #arcpy.AddMessage("Gewerbe: Fortzüge restliches Bundesgebiet = {0}".format(Fortzuege_restliches_Bundesgebiet_und_Welt_AP))
        #arcpy.AddMessage("Gewerbe: Neugründungen = {0}".format(Neugruendungen_AP))

        self.parent_tbx.delete_rows_in_table("Zuzugsstatistik_Ew")
        column_values = {
            "Kategorie":
            [u"Projektgemeinde/Region", u"Restliches Bundesgebiet/Ausland"],
            "Anzahl": [
                int(round(Summe_Zugeordneter_Fortzug_Ew * -1)),
                int(round(Differenz_Ew))
            ]
        }
        self.parent_tbx.insert_rows_in_table("Zuzugsstatistik_Ew",
                                             column_values)

        self.parent_tbx.delete_rows_in_table("Zuzugsstatistik_SvB")
        column_values = {
            "Kategorie": [
                u"Projektgemeinde/Region", u"Restliches Bundesgebiet/Ausland",
                u"Neugründungen"
            ],
            "Anzahl": [
                int(round(Summe_Zugeordneter_Fortzug_AP * -1)),
                int(round((Differenz_AP - Neugruendungen_AP))),
                int(round(Neugruendungen_AP))
            ]
        }
        self.parent_tbx.insert_rows_in_table("Zuzugsstatistik_SvB",
                                             column_values)

        c.set_chronicle(
            "Wanderung Einwohner",
            self.folders.get_table(tablename='Chronik_Nutzung',
                                   workspace="FGDB_Einnahmen.gdb",
                                   project=projektname))
        c.set_chronicle(
            "Wanderung Beschaeftigte",
            self.folders.get_table(tablename='Chronik_Nutzung',
                                   workspace="FGDB_Einnahmen.gdb",
                                   project=projektname))
Example #10
0
    def run(self):
        """run Einkommensteuer Tool"""

        params = self.par
        projektname = self.projectname

        we_efh = 0
        we_dh = 0
        we_rh = 0
        we_mfh = 0

        fields = ['IDGebaeudetyp', 'WE']
        tablepath_wohnen = self.folders.get_table('Wohnen_WE_in_Gebaeudetypen', "FGDB_Definition_Projekt.gdb")
        cursor = arcpy.da.SearchCursor(tablepath_wohnen, fields)
        for row in cursor:
            if row[0] == 1:
                we_efh += row[1]
            if row[0] == 2:
                we_dh += row[1]
            if row[0] == 3:
                we_rh += row[1]
            if row[0] == 4:
                we_mfh += row[1]

        fields = ['AGS', 'Gemeindetyp']
        tablepath_rahmendaten = self.folders.get_table('Projektrahmendaten', "FGDB_Definition_Projekt.gdb")
        cursor = arcpy.da.SearchCursor(tablepath_rahmendaten, fields)
        for row in cursor:
            ags = row[0]
            gemeindetyp = row[1]

        ags2 = ags[0:2]

        table_ESt_pro_WE = self.folders.get_base_table("FGDB_Einnahmen_Tool.gdb", "ESt_Einnahmen_pro_WE")
        fields = ["AGS2", "Gemeindetyp", "IDGebaeudetyp", "ESt_pro_WE"]
        where_clause = '"AGS2"' + "='" + ags2 + "'" + " AND " + '"Gemeindetyp"' + " = " + str(gemeindetyp)
        cursor = arcpy.da.SearchCursor(table_ESt_pro_WE, fields, where_clause)
        for row in cursor:
            if row[2] == 1:
                ESt_pro_WE_efh = row[3]
            if row[2] == 2:
                ESt_pro_WE_dh = row[3]
            if row[2] == 3:
                ESt_pro_WE_rh = row[3]
            if row[2] == 4:
                ESt_pro_WE_mfh = row[3]


        Einkommensteuer_gesamt = we_efh * ESt_pro_WE_efh + we_dh * ESt_pro_WE_dh + we_rh * ESt_pro_WE_rh + we_mfh * ESt_pro_WE_mfh
        Gesamtzahl_Bewohner = 0
        fields = ['ew']
        tablepath_teilflaechen = self.folders.get_table('Teilflaechen_Plangebiet', "FGDB_Definition_Projekt.gdb")
        cursor = arcpy.da.SearchCursor(tablepath_teilflaechen, fields)
        for teilflaeche in cursor:
            Gesamtzahl_Bewohner += teilflaeche[0]
        ESt_pro_Bewohner = Einkommensteuer_gesamt / Gesamtzahl_Bewohner

        tablepath_bilanz = self.folders.get_table('Gemeindebilanzen', "FGDB_Einnahmen.gdb")
        fields = ['ESt', 'Einw_Saldo']
        cursor = arcpy.da.UpdateCursor(tablepath_bilanz, fields)
        for gemeinde in cursor:
            Est_Gemeindebilanz = ESt_pro_Bewohner * gemeinde[1]
            gemeinde[0] = Est_Gemeindebilanz
            cursor.updateRow(gemeinde)

        c.set_chronicle("Einkommensteuer", self.folders.get_table(tablename='Chronik_Nutzung',workspace="FGDB_Einnahmen.gdb",project=projektname))
Example #11
0
    def run(self):

        parameters = self.par
        projektname = self.par.name.value
        saldo = self.par.saldo.value
        target_gemeinde = self.par.gemeinde.value
        target_gemeinde_kurz = target_gemeinde.split(" ||")[0]
        workspace_projekt_einnahmen = self.folders.get_db(
            'FGDB_Einnahmen.gdb', projektname)
        wanderungssalden = os.path.join(workspace_projekt_einnahmen,
                                        'Gemeindebilanzen')

        fields = ["GEN", self.parent_tbx._saldo_field]
        for key in self.parent_tbx.gemeinden_dict:
            where_clause = '"GEN"' + "='" + key + "'"
            cursor = arcpy.da.UpdateCursor(wanderungssalden, fields,
                                           where_clause)
            for gemeinde in cursor:
                gemeinde[1] = self.parent_tbx.gemeinden_dict[key]
                cursor.updateRow(gemeinde)

        if self.parent_tbx._saldo_field == "SvB_Saldo":
            zuzugsstatistik = "Zuzugsstatistik_SvB"
        else:
            zuzugsstatistik = "Zuzugsstatistik_Ew"
        table_zuzugsstatistik = self.folders.get_table(zuzugsstatistik,
                                                       'FGDB_Einnahmen.gdb')
        where_zuzug = 'NOT "Kategorie"' + "='" + 'Projektgemeinde/Region' + "'"
        fields_zuzug = ["Kategorie", "Anzahl"]
        cursor = arcpy.da.UpdateCursor(table_zuzugsstatistik, fields_zuzug,
                                       where_zuzug)
        for row in cursor:
            row[1] = abs(self.parent_tbx.gemeinden_dict[row[0]])
            cursor.updateRow(row)

        # Bestimme AGS der Projektgemeinde
        if self.par.kontrolle.value == True:
            fields = ['AGS', 'Gemeindename']
            tablepath_rahmendaten = self.folders.get_table(
                'Projektrahmendaten', "FGDB_Definition_Projekt.gdb")
            cursor = arcpy.da.SearchCursor(tablepath_rahmendaten, fields)
            for row in cursor:
                ags = row[0]
                gemeinde_plangebiet = row[1]

            if self.parent_tbx.gemeinden_dict[
                    gemeinde_plangebiet] == self.parent_tbx.gemeinden_dict_initial[
                        gemeinde_plangebiet]:
                plangebiet_saldo_changed = False
            else:
                plangebiet_saldo_changed = True

            if self.parent_tbx._saldo_field == "SvB_Saldo":
                wanderungsanteil = "Wanderungsanteil_SvB"
            else:
                wanderungsanteil = "Wanderungsanteil_Ew"
            fields = ['AGS', self.parent_tbx._saldo_field, wanderungsanteil]
            cursor = arcpy.da.UpdateCursor(wanderungssalden, fields)

            for x in range(0, 2):
                saldo_summe = 0.0

                fields_saldo = [self.parent_tbx._saldo_field]
                cursor_saldo = arcpy.da.SearchCursor(wanderungssalden,
                                                     fields_saldo)
                for gemeinde in cursor_saldo:
                    saldo_summe += gemeinde[0]
                cursor_zuzug = arcpy.da.SearchCursor(table_zuzugsstatistik,
                                                     fields_zuzug, where_zuzug)
                for row in cursor_zuzug:
                    saldo_summe -= row[1]

                arcpy.AddMessage("Saldo_Summe: " + str(saldo_summe))
                if saldo_summe == 0:
                    break

                if saldo_summe < 0:
                    if plangebiet_saldo_changed == True:
                        for gemeinde in cursor:
                            if gemeinde[0] != ags:
                                gemeinde[1] -= saldo_summe * gemeinde[2]
                            cursor.updateRow(gemeinde)
                    else:
                        for gemeinde in cursor:
                            if gemeinde[0] == ags:
                                gemeinde[1] -= saldo_summe
                            cursor.updateRow(gemeinde)
                elif saldo_summe > 0:
                    if plangebiet_saldo_changed == True:
                        for gemeinde in cursor:
                            if gemeinde[0] != ags:
                                gemeinde[1] -= saldo_summe * gemeinde[2]
                            cursor.updateRow(gemeinde)
                    else:
                        for gemeinde in cursor:
                            if gemeinde[0] == ags:
                                gemeinde[1] -= saldo_summe
                            cursor.updateRow(gemeinde)

            #Restsumme verteilen
            saldo_summe = 0.0
            cursor_saldo = arcpy.da.SearchCursor(wanderungssalden,
                                                 fields_saldo)
            for gemeinde in cursor_saldo:
                saldo_summe += gemeinde[0]
            cursor_zuzug = arcpy.da.SearchCursor(table_zuzugsstatistik,
                                                 fields_zuzug, where_zuzug)
            for row in cursor_zuzug:
                saldo_summe -= row[1]
            if saldo_summe != 0:
                fields = [self.parent_tbx._saldo_field, "AGS"]
                cursor = arcpy.da.UpdateCursor(
                    in_table=wanderungssalden,
                    field_names=fields,
                    sql_clause=(None, 'ORDER BY {} ASC'.format(
                        self.parent_tbx._saldo_field)))
                for gemeinde in cursor:
                    if gemeinde[1] != ags:
                        gemeinde[0] -= saldo_summe
                        cursor.updateRow(gemeinde)
                        break

            del cursor, cursor_saldo, cursor_zuzug

        arcpy.RefreshActiveView()
        arcpy.RefreshTOC()

        if self.parent_tbx._saldo_field == "SvB_Saldo":
            c.set_chronicle(
                u"Wanderung Beschäftigte",
                self.folders.get_table(tablename='Chronik_Nutzung',
                                       workspace="FGDB_Einnahmen.gdb",
                                       project=projektname))
        else:
            c.set_chronicle(
                u"Wanderung Einwohner",
                self.folders.get_table(tablename='Chronik_Nutzung',
                                       workspace="FGDB_Einnahmen.gdb",
                                       project=projektname))
    def run(self):

        params = self.par
        projektname = self.projectname

        lib_einnahmen.create_gemeindebilanzen(self, projektname)

        fields = ['AGS', 'Gemeindetyp']
        tablepath_rahmendaten = self.folders.get_table(
            'Projektrahmendaten', "FGDB_Definition_Projekt.gdb")
        cursor = arcpy.da.SearchCursor(tablepath_rahmendaten, fields)
        for row in cursor:
            ags = row[0]
            gemeindetyp = row[1]

        tablepath_gemeinden = self.folders.get_base_table(
            "FGDB_Basisdaten_deutschland.gdb", "bkg_gemeinden")
        tablepath_einkommen = self.folders.get_db("FGDB_Einnahmen.gdb",
                                                  params.name.value)
        tablepath_hebesteuer = os.path.join(tablepath_einkommen,
                                            "GrSt_Hebesatz_B")
        fields = ["Hebesatz_GrStB"]
        if arcpy.Exists(tablepath_hebesteuer):
            cursor = arcpy.da.UpdateCursor(tablepath_hebesteuer, fields)
            for row in cursor:
                row[0] = params.slider1.value
                cursor.updateRow(row)
        else:
            arcpy.CreateTable_management(
                self.folders.get_db("FGDB_Einnahmen.gdb", params.name.value),
                "GrSt_Hebesatz_B")
            arcpy.AddField_management(tablepath_hebesteuer, "Hebesatz_GrStB",
                                      "LONG")
            cursor = arcpy.da.InsertCursor(tablepath_hebesteuer, fields)
            cursor.insertRow([params.slider1.value])

        fields = [
            "EFH_Rohmiete", 'DHH_Rohmiete', 'RHW_Rohmiete', 'MFH_Rohmiete',
            'Bodenwert_Sachwertverfahren', 'qm_Grundstueck_pro_WE_EFH',
            'BGF_Buero', 'BGF_Halle'
        ]
        tablepath_basisdaten = self.folders.get_table('GrSt_Basisdaten',
                                                      "FGDB_Einnahmen.gdb")
        cursor = arcpy.da.UpdateCursor(tablepath_basisdaten, fields)
        for row in cursor:
            cursor.deleteRow()
        cursor = arcpy.da.InsertCursor(tablepath_basisdaten, fields)
        cursor.insertRow([
            params.slider2.value, params.slider3.value, params.slider4.value,
            params.slider5.value, params.slider6.value, params.slider7.value,
            params.slider8.value, params.slider9.value
        ])

        einheitswert_efh = 0
        einheitswert_dh = 0
        einheitswert_rh = 0
        einheitswert_mfh = 0

        wohnflaeche_efh = 0
        wohnflaeche_dh = 0
        wohnflaeche_rh = 0
        wohnflaeche_mfh = 0

        rohmiete_efh = 0
        rohmiete_dh = 0
        rohmiete_rh = 0
        rohmiete_mfh = 0

        garagen_efh = 0
        garagen_dh = 0
        garagen_rh = 0
        garagen_mfh = 0

        multiplikator_efh = 0
        multiplikator_dh = 0
        multiplikator_rh = 0
        multiplikator_mfh = 0

        table_wohnflaeche = self.folders.get_base_table(
            "FGDB_Einnahmen_Tool.gdb", "GrSt_Wohnflaeche_und_Steuermesszahlen")
        fields = [
            "IDGebaeudetyp", "Mittlere_Wohnflaeche",
            "Aufschlag_Garagen_Carport"
        ]
        cursor = arcpy.da.SearchCursor(table_wohnflaeche, fields)
        for row in cursor:
            if row[0] == 1:
                wohnflaeche_efh = row[1]
                garagen_efh = row[2]
            if row[0] == 2:
                wohnflaeche_dh = row[1]
                garagen_dh = row[2]
            if row[0] == 3:
                wohnflaeche_rh = row[1]
                garagen_rh = row[2]
            if row[0] == 4:
                wohnflaeche_mfh = row[1]
                garagen_mfh = row[2]

        if int(ags) <= 10999999:
            rohmiete_efh = params.slider2.value / 100.0
            rohmiete_dh = params.slider3.value / 100.0
            rohmiete_rh = params.slider4.value / 100.0
            rohmiete_mfh = params.slider5.value / 100.0
        else:
            rohmiete_efh, rohmiete_dh, rohmiete_rh, rohmiete_mfh = 0.46

        fields = ["AGS", "GemGroessKlass64"]
        where_clause = '"AGS"' + "='" + ags + "'"
        cursor = arcpy.da.SearchCursor(tablepath_gemeinden, fields,
                                       where_clause)
        for row in cursor:
            gemeinde_klasse = row[1]

        table_wohnflaeche = self.folders.get_base_table(
            "FGDB_Einnahmen_Tool.gdb", "GrSt_Vervielfaeltiger")
        where_clause = '"Gemeindegroessenklasse64"' + "='" + gemeinde_klasse + "'"
        fields = [
            "Gemeindegroessenklasse64", "IDGebaeudetyp", "Vervielfaeltiger"
        ]
        cursor = arcpy.da.SearchCursor(table_wohnflaeche, fields, where_clause)
        for row in cursor:
            if row[1] == 1:
                multiplikator_efh = row[2]
            if row[1] == 2:
                multiplikator_dh = row[2]
            if row[1] == 3:
                multiplikator_rh = row[2]
            if row[1] == 4:
                multiplikator_mfh = row[2]

        einheitswert_efh = (12 * rohmiete_efh * wohnflaeche_efh +
                            garagen_efh) * multiplikator_efh
        einheitswert_dh = (12 * rohmiete_dh * wohnflaeche_dh +
                           garagen_dh) * multiplikator_dh
        einheitswert_rh = (12 * rohmiete_rh * wohnflaeche_rh +
                           garagen_rh) * multiplikator_rh
        einheitswert_mfh = (12 * rohmiete_mfh * wohnflaeche_mfh +
                            garagen_mfh) * multiplikator_mfh

        if int(ags) >= 11000000:
            table_wohnflaeche = self.folders.get_base_table(
                "FGDB_Einnahmen_Tool.gdb",
                "GrSt_Wohnflaeche_und_Steuermesszahlen")
            where_clause = '"IDGebaeudetyp"' + "='" + 1 + "'"
            fields = ["IDGebaeudetyp", "Umbauter_Raum_m3"]
            cursor = arcpy.da.SearchCursor(table_wohnflaeche, fields,
                                           where_clause)
            for row in cursor:
                umbauter_raum_m3 = row[1]

            einheitswert_efh = 24 / 1.95583 * umbauter_raum_m3 + 550 + params.slider7.value * (
                params.slider6.value / 100.0)

        if params.slider8.value != 0 or params.slider9.value != 0:
            einheitswert_gewerbe = (1685 * params.slider8.value +
                                    800 * params.slider9.value) * 0.1554
        else:
            einheitswert_gewerbe = 0

        we_efh = 0
        we_dh = 0
        we_rh = 0
        we_mfh = 0

        fields = ['IDGebaeudetyp', 'WE']
        tablepath_wohnen = self.folders.get_table(
            'Wohnen_WE_in_Gebaeudetypen', "FGDB_Definition_Projekt.gdb")
        cursor = arcpy.da.SearchCursor(tablepath_wohnen, fields)
        for row in cursor:
            if row[0] == 1:
                we_efh += row[1]
            if row[0] == 2:
                we_dh += row[1]
            if row[0] == 3:
                we_rh += row[1]
            if row[0] == 4:
                we_mfh += row[1]

        arcpy.AddMessage("Einheitswert EFH = {}".format(einheitswert_efh))

        if einheitswert_efh <= 38346:
            einheitswert_bis_38346_EUR_efh = einheitswert_efh
            einheitswert_ab_38346_EUR_efh = 0
        else:
            einheitswert_bis_38346_EUR_efh = 38346
            einheitswert_ab_38346_EUR_efh = einheitswert_efh - 38346

        if einheitswert_dh <= 38346:
            einheitswert_bis_38346_EUR_dh = einheitswert_dh
            einheitswert_ab_38346_EUR_dh = 0
        else:
            einheitswert_bis_38346_EUR_dh = 38346
            einheitswert_ab_38346_EUR_dh = einheitswert_dh - 38346

        if einheitswert_rh <= 38346:
            einheitswert_bis_38346_EUR_rh = einheitswert_rh
            einheitswert_ab_38346_EUR_rh = 0
        else:
            einheitswert_bis_38346_EUR_rh = 38346
            einheitswert_ab_38346_EUR_rh = einheitswert_rh - 38346

        if einheitswert_mfh <= 38346:
            einheitswert_bis_38346_EUR_mfh = einheitswert_mfh
            einheitswert_ab_38346_EUR_mfh = 0
        else:
            einheitswert_bis_38346_EUR_mfh = 38346
            einheitswert_ab_38346_EUR_mfh = einheitswert_mfh - 38346

        table_wohnflaeche = self.folders.get_base_table(
            "FGDB_Einnahmen_Tool.gdb", "GrSt_Wohnflaeche_und_Steuermesszahlen")
        fields = [
            "IDGebaeudetyp", "Steuermesszahl_bis_38346_EUR",
            "Steuermesszahl_ab_38346_EUR"
        ]
        cursor = arcpy.da.SearchCursor(table_wohnflaeche, fields)
        for row in cursor:
            if row[0] == 1:
                steuermesszahl_bis_38346_EUR_efh = row[1]
                steuermesszahl_ab_38346_EUR_efh = row[2]
            if row[0] == 2:
                steuermesszahl_bis_38346_EUR_dh = row[1]
                steuermesszahl_ab_38346_EUR_dh = row[2]
            if row[0] == 3:
                steuermesszahl_bis_38346_EUR_rh = row[1]
                steuermesszahl_ab_38346_EUR_rh = row[2]
            if row[0] == 4:
                steuermesszahl_bis_38346_EUR_mfh = row[1]
                steuermesszahl_ab_38346_EUR_mfh = row[2]

        messbetrag_efh = we_efh * (
            einheitswert_bis_38346_EUR_efh * steuermesszahl_bis_38346_EUR_efh +
            einheitswert_ab_38346_EUR_efh * steuermesszahl_ab_38346_EUR_efh)
        messbetrag_dh = we_dh * (
            einheitswert_bis_38346_EUR_dh * steuermesszahl_bis_38346_EUR_dh +
            einheitswert_ab_38346_EUR_dh * steuermesszahl_ab_38346_EUR_dh)
        messbetrag_rh = we_rh * (
            einheitswert_bis_38346_EUR_rh * steuermesszahl_bis_38346_EUR_rh +
            einheitswert_ab_38346_EUR_rh * steuermesszahl_ab_38346_EUR_rh)
        messbetrag_mfh = we_mfh * (
            einheitswert_bis_38346_EUR_mfh * steuermesszahl_bis_38346_EUR_mfh +
            einheitswert_ab_38346_EUR_mfh * steuermesszahl_ab_38346_EUR_mfh)

        messbetrag_gewerbe = einheitswert_gewerbe * 0.0035

        def roundup(number, multiple):
            num = number + (multiple - 1)
            return num - (num % multiple)

        GRUNDSTEUERAUFKOMMEN = (
            messbetrag_efh + messbetrag_dh + messbetrag_rh + messbetrag_mfh +
            messbetrag_gewerbe) * params.slider1.value / 100.0

        table_bilanzen = self.folders.get_table("Gemeindebilanzen",
                                                "FGDB_Einnahmen.gdb")
        fields = ["AGS", "GrSt"]
        cursor = arcpy.da.UpdateCursor(table_bilanzen, fields)
        for row in cursor:
            if row[0] == ags:
                row[1] = GRUNDSTEUERAUFKOMMEN
            else:
                row[1] = 0
            cursor.updateRow(row)

        c.set_chronicle(
            "Grundsteuer",
            self.folders.get_table(tablename='Chronik_Nutzung',
                                   workspace="FGDB_Einnahmen.gdb",
                                   project=projektname))
    def run(self):
        """run Steuersalden Tool"""

        params = self.par
        projektname = self.projectname

        Gewerbesteuermessbetrag_Projekt = 0

        gewerbe_vorhanden = False
        gewerbe_messbetrag = 0
        einzelhandel_vorhanden = False
        einzelhandel_messbetrag = 0

        fields1 = ['Nutzungsart', 'id_teilflaeche', 'ags_bkg']
        table_teilflaechen = self.folders.get_table('Teilflaechen_Plangebiet', "FGDB_Definition_Projekt.gdb")
        cursor1 = arcpy.da.SearchCursor(table_teilflaechen, fields1)
        for row1 in cursor1:
            ags = row1[2]
            ags2 = ags[0:2]
            if row1[0] == Nutzungsart.GEWERBE and not gewerbe_vorhanden:
                gewerbe_vorhanden = True
                Summe_Arbeitsplatzschaetzungen = 0
                fields2 = ['anzahl_jobs_schaetzung']
                table_gewerbeanteile = self.folders.get_table('Gewerbe_Anteile', "FGDB_Definition_Projekt.gdb")
                cursor2 = arcpy.da.SearchCursor(table_gewerbeanteile, fields2)
                for row2 in cursor2:
                    Summe_Arbeitsplatzschaetzungen += row2[0]
                #arcpy.AddMessage("Summe_Arbeitsplatzschaetzungen: " + str(Summe_Arbeitsplatzschaetzungen))

                Reale_Summe_AP = 0
                fields3 = ['Arbeitsplaetze']
                table_arbeitsplaetze = self.folders.get_table('Gewerbe_Arbeitsplaetze', "FGDB_Definition_Projekt.gdb")
                cursor3 = arcpy.da.SearchCursor(table_arbeitsplaetze, fields3)
                for row3 in cursor3:
                    Reale_Summe_AP += row3[0]

                Korrekturfaktor_AP = Reale_Summe_AP / Summe_Arbeitsplatzschaetzungen
                #arcpy.AddMessage("Korrekturfaktor_AP: " + str(Korrekturfaktor_AP))

                fields4 = ['anzahl_jobs_schaetzung', 'IDBranche']
                cursor4 = arcpy.da.SearchCursor(table_gewerbeanteile, fields4)
                for row4 in cursor4:
                    Messbetrag = 0
                    fields5 = ['AGS2', 'IDBranche', 'GewStMessbetrag_pro_Arbeitsplatz']
                    where1 = '"AGS2"' + "='" + ags2 + "'" + " AND " + '"IDBranche"' + "=" + str(row4[1])
                    table_messbetrag_pro_ap = self.folders.get_base_table("FGDB_Einnahmen_Tool.gdb", "GewSt_Messbetrag_pro_Arbeitsplatz")
                    cursor5 = arcpy.da.SearchCursor(table_messbetrag_pro_ap, fields5, where1)
                    for branche in cursor5:
                        Messbetrag_pro_Arbeitsplatz = branche[2]

                    Messbetrag = cursor4[0] * Korrekturfaktor_AP * Messbetrag_pro_Arbeitsplatz
                    gewerbe_messbetrag += Messbetrag
                    #arcpy.AddMessage("Messbetrag row4: " + str(Messbetrag))

            if row1[0] == Nutzungsart.EINZELHANDEL:
                einzelhandel_vorhanden = True
                fields6 = ['Verkaufsflaeche_qm', 'IDTeilflaeche', 'IDSortiment']
                where2 = '"IDTeilflaeche"' + "=" + str(row1[1])
                table_verkaufsflaechen = self.folders.get_table('Einzelhandel_Verkaufsflaechen', "FGDB_Definition_Projekt.gdb")
                cursor6 = arcpy.da.SearchCursor(table_verkaufsflaechen, fields6, where2)
                for row6 in cursor6:
                    Messbetrag = 0
                    verkaufsflaeche = row6[0]

                    fields7 = ['GewStMessbetrag_pro_qm_Verkaufsflaeche', 'ID_Sortiment']
                    where3 = '"ID_Sortiment"' + "=" + str(row6[2])
                    table_messbetrag_pro_qm = self.folders.get_base_table("FGDB_Einnahmen_Tool.gdb", "GewSt_Messbetrag_und_SvB_pro_qm_Verkaufsflaeche")
                    cursor7 = arcpy.da.SearchCursor(table_messbetrag_pro_qm, fields7, where3)
                    for row7 in cursor7:
                        messbetrag_pro_qm =row7[0]

                    Messbetrag = verkaufsflaeche * messbetrag_pro_qm
                    einzelhandel_messbetrag += Messbetrag

        Gewerbesteuermessbetrag_Projekt = gewerbe_messbetrag + einzelhandel_messbetrag
        #arcpy.AddMessage("Gewerbesteuermessbetrag_Projekt: " + str(Gewerbesteuermessbetrag_Projekt))

        SvB_Branchen = 0
        if gewerbe_vorhanden:
            fields = ['Arbeitsplaetze']
            table_arbeitsplaetze = self.folders.get_table('Gewerbe_Arbeitsplaetze', "FGDB_Definition_Projekt.gdb")
            cursor = arcpy.da.SearchCursor(table_arbeitsplaetze, fields)
            for gewerbe in cursor:
                SvB_Branchen += gewerbe[0]
        #arcpy.AddMessage("SvB_Branchen: " + str(SvB_Branchen))

        SvB_Verkaufsflaechen = 0
        if einzelhandel_vorhanden:
            fields = ['Verkaufsflaeche_qm', 'IDSortiment']
            cursor = arcpy.da.SearchCursor(table_verkaufsflaechen, fields)
            for verkaufsflaeche in cursor:
                fields2 = ['SvB_pro_qm_Verkaufsflaeche', 'ID_Sortiment']
                where2 = '"ID_Sortiment"' + "=" + str(verkaufsflaeche[1])
                cursor2 = arcpy.da.SearchCursor(table_messbetrag_pro_qm, fields2, where2)
                for row in cursor2:
                    SvB_Verkaufsflaechen += verkaufsflaeche[0] * row[0]
            #arcpy.AddMessage("SvB_Verkaufsflaechen: " + str(SvB_Verkaufsflaechen))

        Gewerbesteuermessbetrag_pro_SvB_Projekt = Gewerbesteuermessbetrag_Projekt / (SvB_Branchen + SvB_Verkaufsflaechen)
        #arcpy.AddMessage("Gewerbesteuermessbetrag_pro_SvB_Projekt: " + str(Gewerbesteuermessbetrag_pro_SvB_Projekt))

        table_bilanzen = self.folders.get_table("Gemeindebilanzen", "FGDB_Einnahmen.gdb")
        fields = ["AGS", "GewSt", "Hebesatz_GewSt", "SvB_Saldo"]
        cursor = arcpy.da.UpdateCursor(table_bilanzen, fields)
        table_umlage = self.folders.get_base_table("FGDB_Einnahmen_Tool.gdb", "GewSt_Umlage_Vervielfaeltiger")
        fields8 = ['Summe_BVV_LVV_EHZ']

        for row in cursor:
            agsGem = row[0]
            agsLand = agsGem[0:2]
            where8 = '"AGS_Land"' + "='" + agsLand + "'"
            cursor8 = arcpy.da.SearchCursor(table_umlage, fields8, where8)
            for row8 in cursor8:
                bvv_plus_lvv_plus_ehz = row8[0]
            #arcpy.AddMessage("Summe Bundes- und Landesvervielfältiger plus Erhöhungszahl: " + str(bvv_plus_lvv_plus_ehz))
            umlagesatz = bvv_plus_lvv_plus_ehz / row[2]
            #arcpy.AddMessage("Umlagesatz Gewerbesteuerumlage: " + str(umlagesatz))

            if row[0] == ags:
                row[1] = (Gewerbesteuermessbetrag_pro_SvB_Projekt * (row[2] / 100.0) * (row[3] + SvB_Verkaufsflaechen)) * (1 - umlagesatz)
            else:
                row[1] = (Gewerbesteuermessbetrag_pro_SvB_Projekt * (row[2] / 100.0) * row[3]) * (1 - umlagesatz)
            cursor.updateRow(row)

        c.set_chronicle("Gewerbesteuer", self.folders.get_table(tablename='Chronik_Nutzung',workspace="FGDB_Einnahmen.gdb",project=projektname))
    def run(self):

        parameters = self.par
        projektname = self.par.name.value
        saldo = self.par.saldo.value
        target_gemeinde = self.par.gemeinde.value
        target_gemeinde_kurz = target_gemeinde.split(" ||")[0]

        workspace_projekt_einnahmen = self.folders.get_db('FGDB_Einnahmen.gdb', projektname)
        wanderungssalden = os.path.join(workspace_projekt_einnahmen, 'Gemeindebilanzen')

        fields = ["GEN", "SvB_Saldo"]
        where_clause = '"GEN"' + "='" + target_gemeinde_kurz + "'"
        cursor = arcpy.da.UpdateCursor(wanderungssalden, fields, where_clause)
        for gemeinde in cursor:
            gemeinde[1] = saldo
            cursor.updateRow(gemeinde)

        # Bestimme AGS der Projektgemeinde
        pfad_rahmendaten = self.folders.get_table(
            tablename='Projektrahmendaten',
            workspace="FGDB_Definition_Projekt.gdb",
            project=projektname)
        cursor = arcpy.da.SearchCursor(pfad_rahmendaten, ["AGS"])
        for projekt in cursor:
            ags_projekt = projekt[0]

        if self.par.kontrolle.value == True:
            fields = ['AGS', 'Gemeindename']
            tablepath_rahmendaten = self.folders.get_table('Projektrahmendaten', "FGDB_Definition_Projekt.gdb")
            cursor = arcpy.da.SearchCursor(tablepath_rahmendaten, fields)
            for row in cursor:
                ags = row[0]
                gemeinde_plangebiet = row[1]

            fields = ['AGS', "SvB_Saldo", "Wanderungsanteil_SvB"]
            cursor = arcpy.da.UpdateCursor(wanderungssalden, fields)

            for x in range(0,3):
                saldo_summe = 0
                fields_saldo = ["SvB_Saldo"]
                cursor_saldo = arcpy.da.SearchCursor(wanderungssalden, fields_saldo)
                for gemeinde in cursor_saldo:
                    saldo_summe += gemeinde[0]
                if saldo_summe  == 0:
                    break
                arcpy.AddMessage("Saldo_Summe: " + str(saldo_summe))

                if saldo_summe < 0:
                    if gemeinde_plangebiet == target_gemeinde_kurz:
                        arcpy.AddMessage("Step 1")
                        for gemeinde in cursor:
                            if gemeinde[0] != ags:
                                gemeinde[1] -= round(saldo_summe * gemeinde[2])
                            cursor.updateRow(gemeinde)
                    else:
                        arcpy.AddMessage("Step 2")
                        for gemeinde in cursor:
                            if gemeinde[0] == ags:
                                gemeinde[1] -= saldo_summe
                            cursor.updateRow(gemeinde)
                elif saldo_summe > 0:
                    if gemeinde_plangebiet == target_gemeinde_kurz:
                        arcpy.AddMessage("Step 3")
                        for gemeinde in cursor:
                            if gemeinde[0] != ags:
                                gemeinde[1] -= round(saldo_summe * gemeinde[2])
                            cursor.updateRow(gemeinde)
                    else:
                        arcpy.AddMessage("Step 4")
                        for gemeinde in cursor:
                            if gemeinde[0] == ags:
                                gemeinde[1] -= saldo_summe
                            cursor.updateRow(gemeinde)

            #Gesamtsumme der Salden auf 0 setzen
            saldo_summe = 0
            cursor_saldo = arcpy.da.SearchCursor(wanderungssalden, fields_saldo)
            for gemeinde in cursor_saldo:
                saldo_summe += gemeinde[0]
            if saldo_summe != 0:
                fields = ["SvB_Saldo", "AGS"]
                cursor = arcpy.da.UpdateCursor(wanderungssalden, fields)
                for gemeinde in cursor:
                    if gemeinde[1] != ags_projekt:
                        gemeinde[0] -= saldo_summe
                        cursor.updateRow(gemeinde)
                        break


        arcpy.RefreshActiveView()
        arcpy.RefreshTOC()

        c.set_chronicle(u"Wanderung Beschäftigte", self.folders.get_table(tablename='Chronik_Nutzung',workspace="FGDB_Einnahmen.gdb",project=projektname))
    def run(self):

        params = self.par
        projektname = self.projectname

        lib_einnahmen.create_gemeindebilanzen(self, projektname)

        fields = ['AGS', 'Gemeindetyp']
        tablepath_rahmendaten = self.folders.get_table('Projektrahmendaten', "FGDB_Definition_Projekt.gdb")
        cursor = arcpy.da.SearchCursor(tablepath_rahmendaten, fields)
        for row in cursor:
            ags = row[0]
            gemeindetyp = row[1]

        tablepath_gemeinden = self.folders.get_base_table("FGDB_Basisdaten_deutschland.gdb", "bkg_gemeinden")
        tablepath_einkommen = self.folders.get_db("FGDB_Einnahmen.gdb", params.name.value)
        tablepath_hebesteuer = os.path.join(tablepath_einkommen, "GrSt_Hebesatz_B")
        fields = ["Hebesatz_GrStB"]
        if arcpy.Exists(tablepath_hebesteuer):
            cursor = arcpy.da.UpdateCursor(tablepath_hebesteuer, fields)
            for row in cursor:
                row[0] = params.slider1.value
                cursor.updateRow(row)
        else:
            arcpy.CreateTable_management(self.folders.get_db("FGDB_Einnahmen.gdb", params.name.value), "GrSt_Hebesatz_B")
            arcpy.AddField_management(tablepath_hebesteuer, "Hebesatz_GrStB", "LONG")
            cursor = arcpy.da.InsertCursor(tablepath_hebesteuer, fields)
            cursor.insertRow([params.slider1.value])

        fields = ["EFH_Rohmiete", 'DHH_Rohmiete', 'RHW_Rohmiete', 'MFH_Rohmiete', 'Bodenwert_Sachwertverfahren', 'qm_Grundstueck_pro_WE_EFH', 'BGF_Buero', 'BGF_Halle']
        tablepath_basisdaten = self.folders.get_table('GrSt_Basisdaten', "FGDB_Einnahmen.gdb")
        cursor = arcpy.da.UpdateCursor(tablepath_basisdaten, fields)
        for row in cursor:
                cursor.deleteRow()
        cursor = arcpy.da.InsertCursor(tablepath_basisdaten, fields)
        cursor.insertRow(   [params.slider2.value,
                            params.slider3.value,
                            params.slider4.value,
                            params.slider5.value,
                            params.slider6.value,
                            params.slider7.value,
                            params.slider8.value,
                            params.slider9.value]
                            )

        einheitswert_efh = 0
        einheitswert_dh = 0
        einheitswert_rh = 0
        einheitswert_mfh = 0

        wohnflaeche_efh = 0
        wohnflaeche_dh = 0
        wohnflaeche_rh = 0
        wohnflaeche_mfh = 0

        rohmiete_efh = 0
        rohmiete_dh = 0
        rohmiete_rh = 0
        rohmiete_mfh = 0

        garagen_efh = 0
        garagen_dh = 0
        garagen_rh = 0
        garagen_mfh = 0

        multiplikator_efh = 0
        multiplikator_dh = 0
        multiplikator_rh = 0
        multiplikator_mfh = 0

        table_wohnflaeche = self.folders.get_base_table("FGDB_Einnahmen_Tool.gdb", "GrSt_Wohnflaeche_und_Steuermesszahlen")
        fields = ["IDGebaeudetyp", "Mittlere_Wohnflaeche", "Aufschlag_Garagen_Carport"]
        cursor = arcpy.da.SearchCursor(table_wohnflaeche, fields)
        for row in cursor:
            if row[0] == 1:
                wohnflaeche_efh = row[1]
                garagen_efh = row[2]
            if row[0] == 2:
                wohnflaeche_dh = row[1]
                garagen_dh = row[2]
            if row[0] == 3:
                wohnflaeche_rh = row[1]
                garagen_rh = row[2]
            if row[0] == 4:
                wohnflaeche_mfh = row[1]
                garagen_mfh = row[2]

        if int(ags) <= 10999999:
            rohmiete_efh = params.slider2.value / 100.0
            rohmiete_dh = params.slider3.value / 100.0
            rohmiete_rh = params.slider4.value / 100.0
            rohmiete_mfh = params.slider5.value / 100.0
        else:
            rohmiete_efh, rohmiete_dh, rohmiete_rh, rohmiete_mfh = 0.46


        fields = ["AGS", "GemGroessKlass64"]
        where_clause = '"AGS"' + "='" + ags + "'"
        cursor = arcpy.da.SearchCursor(tablepath_gemeinden, fields, where_clause)
        for row in cursor:
            gemeinde_klasse = row[1]

        table_wohnflaeche = self.folders.get_base_table("FGDB_Einnahmen_Tool.gdb", "GrSt_Vervielfaeltiger")
        where_clause = '"Gemeindegroessenklasse64"' + "='" + gemeinde_klasse + "'"
        fields = ["Gemeindegroessenklasse64", "IDGebaeudetyp", "Vervielfaeltiger"]
        cursor = arcpy.da.SearchCursor(table_wohnflaeche, fields, where_clause)
        for row in cursor:
            if row[1] == 1:
                multiplikator_efh = row[2]
            if row[1] == 2:
                multiplikator_dh = row[2]
            if row[1] == 3:
                multiplikator_rh = row[2]
            if row[1] == 4:
                multiplikator_mfh = row[2]

        einheitswert_efh = (12 * rohmiete_efh * wohnflaeche_efh + garagen_efh) * multiplikator_efh
        einheitswert_dh = (12 * rohmiete_dh * wohnflaeche_dh + garagen_dh) * multiplikator_dh
        einheitswert_rh = (12 * rohmiete_rh * wohnflaeche_rh + garagen_rh) * multiplikator_rh
        einheitswert_mfh = (12 * rohmiete_mfh * wohnflaeche_mfh + garagen_mfh) * multiplikator_mfh


        if int(ags) >= 11000000:
            table_wohnflaeche = self.folders.get_base_table("FGDB_Einnahmen_Tool.gdb", "GrSt_Wohnflaeche_und_Steuermesszahlen")
            where_clause = '"IDGebaeudetyp"' + "='" + 1 + "'"
            fields = ["IDGebaeudetyp", "Umbauter_Raum_m3"]
            cursor = arcpy.da.SearchCursor(table_wohnflaeche, fields, where_clause)
            for row in cursor:
                    umbauter_raum_m3 = row[1]

            einheitswert_efh = 24/1.95583 * umbauter_raum_m3 + 550 + params.slider7.value * (params.slider6.value / 100.0)

        if params.slider8.value != 0 or params.slider9.value != 0:
            einheitswert_gewerbe = (1685 * params.slider8.value + 800 * params.slider9.value) * 0.1554
        else:
            einheitswert_gewerbe = 0

        we_efh = 0
        we_dh = 0
        we_rh = 0
        we_mfh = 0

        fields = ['IDGebaeudetyp', 'WE']
        tablepath_wohnen = self.folders.get_table('Wohnen_WE_in_Gebaeudetypen', "FGDB_Definition_Projekt.gdb")
        cursor = arcpy.da.SearchCursor(tablepath_wohnen, fields)
        for row in cursor:
            if row[0] == 1:
                we_efh += row[1]
            if row[0] == 2:
                we_dh += row[1]
            if row[0] == 3:
                we_rh += row[1]
            if row[0] == 4:
                we_mfh += row[1]

        arcpy.AddMessage("Einheitswert EFH = {}".format(einheitswert_efh))


        if einheitswert_efh <= 38346:
            einheitswert_bis_38346_EUR_efh = einheitswert_efh
            einheitswert_ab_38346_EUR_efh = 0
        else:
            einheitswert_bis_38346_EUR_efh = 38346
            einheitswert_ab_38346_EUR_efh = einheitswert_efh - 38346

        if einheitswert_dh <= 38346:
            einheitswert_bis_38346_EUR_dh = einheitswert_dh
            einheitswert_ab_38346_EUR_dh = 0
        else:
            einheitswert_bis_38346_EUR_dh = 38346
            einheitswert_ab_38346_EUR_dh = einheitswert_dh - 38346

        if einheitswert_rh <= 38346:
            einheitswert_bis_38346_EUR_rh = einheitswert_rh
            einheitswert_ab_38346_EUR_rh = 0
        else:
            einheitswert_bis_38346_EUR_rh = 38346
            einheitswert_ab_38346_EUR_rh = einheitswert_rh - 38346

        if einheitswert_mfh <= 38346:
            einheitswert_bis_38346_EUR_mfh = einheitswert_mfh
            einheitswert_ab_38346_EUR_mfh = 0
        else:
            einheitswert_bis_38346_EUR_mfh = 38346
            einheitswert_ab_38346_EUR_mfh = einheitswert_mfh - 38346

        table_wohnflaeche = self.folders.get_base_table("FGDB_Einnahmen_Tool.gdb", "GrSt_Wohnflaeche_und_Steuermesszahlen")
        fields = ["IDGebaeudetyp", "Steuermesszahl_bis_38346_EUR", "Steuermesszahl_ab_38346_EUR"]
        cursor = arcpy.da.SearchCursor(table_wohnflaeche, fields)
        for row in cursor:
            if row[0] == 1:
                steuermesszahl_bis_38346_EUR_efh = row[1]
                steuermesszahl_ab_38346_EUR_efh = row[2]
            if row[0] == 2:
                steuermesszahl_bis_38346_EUR_dh =row[1]
                steuermesszahl_ab_38346_EUR_dh = row[2]
            if row[0] == 3:
                steuermesszahl_bis_38346_EUR_rh =row[1]
                steuermesszahl_ab_38346_EUR_rh = row[2]
            if row[0] == 4:
                steuermesszahl_bis_38346_EUR_mfh = row[1]
                steuermesszahl_ab_38346_EUR_mfh = row[2]

        messbetrag_efh = we_efh * (einheitswert_bis_38346_EUR_efh * steuermesszahl_bis_38346_EUR_efh + einheitswert_ab_38346_EUR_efh * steuermesszahl_ab_38346_EUR_efh)
        messbetrag_dh = we_dh * (einheitswert_bis_38346_EUR_dh * steuermesszahl_bis_38346_EUR_dh + einheitswert_ab_38346_EUR_dh * steuermesszahl_ab_38346_EUR_dh)
        messbetrag_rh = we_rh * (einheitswert_bis_38346_EUR_rh * steuermesszahl_bis_38346_EUR_rh + einheitswert_ab_38346_EUR_rh * steuermesszahl_ab_38346_EUR_rh)
        messbetrag_mfh = we_mfh * (einheitswert_bis_38346_EUR_mfh * steuermesszahl_bis_38346_EUR_mfh + einheitswert_ab_38346_EUR_mfh * steuermesszahl_ab_38346_EUR_mfh)

        messbetrag_gewerbe = einheitswert_gewerbe * 0.0035


        def roundup(number, multiple):
            num = number + (multiple - 1)
            return num - (num % multiple)

        GRUNDSTEUERAUFKOMMEN = (messbetrag_efh + messbetrag_dh + messbetrag_rh + messbetrag_mfh + messbetrag_gewerbe) * params.slider1.value / 100.0

        table_bilanzen = self.folders.get_table("Gemeindebilanzen", "FGDB_Einnahmen.gdb")
        fields = ["AGS", "GrSt"]
        cursor = arcpy.da.UpdateCursor(table_bilanzen, fields)
        for row in cursor:
            if row[0] == ags:
                row[1] = GRUNDSTEUERAUFKOMMEN
            else:
                row[1] = 0
            cursor.updateRow(row)

        c.set_chronicle("Grundsteuer", self.folders.get_table(tablename='Chronik_Nutzung',workspace="FGDB_Einnahmen.gdb",project=projektname))