Module OD

    Dim T As String = "설정치"

    Public Sub Setup_Zone9()
        '//존정보설정
        DSET1.tbl_zone.Rows.Clear()
        If DSET1.tbl_zone.Select("code='0'").GetUpperBound(0) = -1 Then DSET1.tbl_zone.Rows.Add(New String() {"0", "(없음)"})

        ''1번쨰데이터 (- 9개의 존은 실내존, 북측존, 북동측존, 북서측존, 동측존, 서측존, 남서측존, 남동측존, 남측존, 간접존으로 생성한다)
        Dim DR1 As DS.tbl_zoneRow = DSET1.tbl_zone.Newtbl_zoneRow   '//실내존
        DR1.code = "0001"
        DR1.설명 = "실내존"
        DR1.침기율 = "0"
        DR1.프로필 = ""
        DSET1.tbl_zone.Addtbl_zoneRow(DR1)


        Dim 층고 As Decimal
        Try
            층고 = DSET1.tbl_Desc.Rows(0)("층고")
        Catch ex As Exception
            층고 = 0
        End Try

        Dim 층수 As Decimal
        Try
            층수 = DSET1.tbl_Desc.Rows(0)("builds2")
        Catch ex As Exception
            층수 = 0
        End Try
        Dim 연면적 As Decimal
        Try
            연면적 = DSET1.tbl_Desc.Rows(0)("buildm23")
        Catch ex As Exception
            연면적 = 0
        End Try
        Dim 천장고 As Decimal
        Try
            천장고 = DSET1.tbl_Desc.Rows(0)("천장고")
        Catch ex As Exception
            천장고 = 0
        End Try

        'Dim 조명밀도 As Decimal
        'Try
        '    조명밀도 = 25 'DSET1.tbl_elect.Rows(0)("조명밀도")
        'Catch ex As Exception
        '    조명밀도 = 0
        'End Try

        Dim 면적의총합 As Decimal = 0

        For Each Drz As DS.tbl_zoneRow In DSET1.tbl_zone.Rows   '//모든존에 같은 값들은 이곳에다가.
            Drz.열교가산치 = "내단열"
            Drz.열저장능력 = "90"


            '' 실내단말기가 있을경우, 냉난방방식은 냉난방, 공조기기 있으면 냉난방공조는 환기, 외기부하처리여부는 예  //공조기기 없으면 냉난방공조는 기능없음, 외기부하처리여부는 아니오
            '' 실내단말기가 없고 공조기기가 있을 경우는 냉난방방식은 기능없음, 냉난방공조는 냉난방, 외기부하처리여부는 아니오
            If DSET1.tbl_danmal.Select("code <> '0'").Length > 0 Then
                Drz.냉난방방식 = "냉난방"
                If DSET1.tbl_kongjo.Select("code <> '0'").Length > 0 Then
                    Drz.냉난방공조 = "환기"
                    Drz.외기부하처리여부 = "예"
                Else
                    Drz.냉난방공조 = "기능없음" '//쓰폐이쓰 21102
                    Drz.외기부하처리여부 = "아니오"
                End If
            Else
                If DSET1.tbl_kongjo.Select("code <> '0'").Length > 0 Then
                    Drz.냉난방방식 = "기능없음"
                    Drz.냉난방공조 = "냉난방"
                    Drz.외기부하처리여부 = "아니오"
                Else
                    Drz.냉난방방식 = "냉난방"
                    Drz.냉난방공조 = "기능없음"  '//쓰폐이쓰 211023
                    Drz.외기부하처리여부 = "아니오"
                End If
            End If

            Drz.조명부하산출방법 = "입력치"
            Drz.조명방식 = "없음"
            Drz.인공광원 = "없음"
            Drz.프로필 = "0002"


            '' 면적이 가장 큰 대표 용도가 공동주택, 숙박시설, 의료시설은 야간 및 주말운전방식은 정상가동, 기타 시설은 가동정지
            Drz.야간운전방식 = "가동정지"
            Drz.주말운전방식 = "가동정지"

            '//시설용도로 그룹을 내서 면접의 합산을 구한다.
            Dim Grp시설용도 As New Dictionary(Of String, Single)
            Dim TotalArea As Single = 0
            For Each dr As DS.tbl_typeRow In DSET1.tbl_type.Rows

                If Program = EProgram.총량평가 Then
                    TotalArea += dr.면적
                Else
                    TotalArea += dr.세대면적 * dr.세대수
                End If


                If Grp시설용도.ContainsKey(dr.시설용도) Then
                    Dim 기존값 As Single = Grp시설용도.Item(dr.시설용도)
                    If Program = EProgram.총량평가 Then
                        Grp시설용도.Item(dr.시설용도) = 기존값 + dr.면적
                    Else
                        Grp시설용도.Item(dr.시설용도) = 기존값 + dr.세대면적 * dr.세대수
                    End If

                Else
                    If Program = EProgram.총량평가 Then
                        Grp시설용도.Add(dr.시설용도, dr.면적)
                    Else
                        Grp시설용도.Add(dr.시설용도, dr.세대면적 * dr.세대수)
                    End If

                End If
            Next

            '//empty data (code = 0)
            Dim drprof As DS.tbl_profile_odRow = DSET1.tbl_profile_od.Select("code = '0'")(0)

            If Program = EProgram.총량평가 Then
                '//가장큰 용도찾기
                Dim 큰용도 As String = ""
                Dim 큰용도면적 As Single = 0
                For Each grpRow As System.Collections.Generic.KeyValuePair(Of String, Single) In Grp시설용도
                    If grpRow.Value > 큰용도면적 Then
                        큰용도면적 = grpRow.Value
                        큰용도 = grpRow.Key
                    End If
                Next

                If Not String.IsNullOrEmpty(큰용도) Then
                    Dim mxprof As DS.tbl_profile_odRow = DSET1.tbl_profile_od.Select("code = '" + 큰용도 + "'")(0)
                    drprof.사용시작시간 = mxprof.사용시작시간
                    drprof.사용종료시간 = mxprof.사용종료시간
                    drprof.운전시작시간 = mxprof.운전시작시간
                    drprof.운전종료시간 = mxprof.운전종료시간

                    drprof.난방설정온도 = mxprof.난방설정온도
                    drprof.냉방설정온도 = mxprof.냉방설정온도
                    drprof.야간최저허용온도 = mxprof.야간최저허용온도
                    drprof.주말최저허용온도 = mxprof.주말최저허용온도

                    drprof.일일사용시간 = 0
                    drprof.일일운전시간 = 0
                    drprof.일일급탕요구량 = 0
                    drprof.최소도입외기량 = 0
                    drprof.사람 = 0
                    drprof.작업보조기기 = 0
                    drprof.운전시간난방 = 0
                    drprof.day01 = 0
                    drprof.day02 = 0
                    drprof.day03 = 0
                    drprof.day04 = 0
                    drprof.day05 = 0
                    drprof.day06 = 0
                    drprof.day07 = 0
                    drprof.day08 = 0
                    drprof.day09 = 0
                    drprof.day10 = 0
                    drprof.day11 = 0
                    drprof.day12 = 0

                    For Each grpRow As System.Collections.Generic.KeyValuePair(Of String, Single) In Grp시설용도
                        Dim multirate As Single = grpRow.Value / TotalArea

                        Dim oneprof As DS.tbl_profile_odRow = DSET1.tbl_profile_od.Select("code = '" + grpRow.Key + "'")(0)

                        drprof.일일사용시간 += TOSG(T, oneprof.일일사용시간) * multirate
                        drprof.일일운전시간 += TOSG(T, oneprof.일일운전시간) * multirate
                        drprof.일일급탕요구량 += TOSG(T, oneprof.일일급탕요구량) * multirate
                        drprof.최소도입외기량 += TOSG(T, oneprof.최소도입외기량) * multirate
                        drprof.사람 += TOSG(T, oneprof.사람) * multirate
                        drprof.작업보조기기 += TOSG(T, oneprof.작업보조기기) * multirate
                        drprof.운전시간난방 += TOSG(T, oneprof.운전시간난방) * multirate

                        drprof.day01 += TOSG(T, oneprof.day01) * multirate
                        drprof.day02 += TOSG(T, oneprof.day02) * multirate
                        drprof.day03 += TOSG(T, oneprof.day03) * multirate
                        drprof.day04 += TOSG(T, oneprof.day04) * multirate
                        drprof.day05 += TOSG(T, oneprof.day05) * multirate
                        drprof.day06 += TOSG(T, oneprof.day06) * multirate
                        drprof.day07 += TOSG(T, oneprof.day07) * multirate
                        drprof.day08 += TOSG(T, oneprof.day08) * multirate
                        drprof.day09 += TOSG(T, oneprof.day09) * multirate
                        drprof.day10 += TOSG(T, oneprof.day10) * multirate
                        drprof.day11 += TOSG(T, oneprof.day11) * multirate
                        drprof.day12 += TOSG(T, oneprof.day12) * multirate
                    Next

                Else
                    MsgBox("해당 용도를 입력하세요")
                End If
            Else
                '//친환경 프로파일은 5000번 사용함 1706280040
                Dim dr5000() As DS.tbl_profile_odRow = DSET1.tbl_profile_od.Select("code = '5000'")
                If dr5000.Length > 0 Then
                    For Each Col As System.Data.DataColumn In DSET1.tbl_profile_od.Columns
                        If Col.ColumnName.ToUpper() = "CODE" Then Continue For
                        drprof(Col.ColumnName) = dr5000(0)(Col.ColumnName)
                    Next
                Else
                    MsgBox("프로필(친환경) 자료없음")
                End If

            End If

            
            drprof.AcceptChanges()



            Dim 입력면면적 As Decimal = 0
            Select Case Drz.설명
                Case "실내존"
                    For Each Dr면 As DS.tbl_myounRow In DSET1.tbl_myoun.Select("(건축부위방식 = '외벽' or 건축부위방식='외부창') and (방위='수평' or 방위='일사없음')")
                        Dr면.존분류 = Drz.code
                    Next
                    입력면면적 = 0
                Case "북측존"
                    For Each Dr면 As DS.tbl_myounRow In DSET1.tbl_myoun.Select("(건축부위방식 = '외벽' or 건축부위방식='외부창') and 방위='북'")
                        If IsNumeric(Dr면.건축부위면적) Then 입력면면적 += Dr면.건축부위면적
                        Dr면.존분류 = Drz.code
                    Next
                Case "북동측존"
                    For Each Dr면 As DS.tbl_myounRow In DSET1.tbl_myoun.Select("(건축부위방식 = '외벽' or 건축부위방식='외부창') and 방위='북동'")
                        If IsNumeric(Dr면.건축부위면적) Then 입력면면적 += Dr면.건축부위면적
                        Dr면.존분류 = Drz.code
                    Next
                Case "북서측존"
                    For Each Dr면 As DS.tbl_myounRow In DSET1.tbl_myoun.Select("(건축부위방식 = '외벽' or 건축부위방식='외부창') and 방위='북서'")
                        If IsNumeric(Dr면.건축부위면적) Then 입력면면적 += Dr면.건축부위면적
                        Dr면.존분류 = Drz.code
                    Next
                Case "동측존"
                    For Each Dr면 As DS.tbl_myounRow In DSET1.tbl_myoun.Select("(건축부위방식 = '외벽' or 건축부위방식='외부창') and 방위='동'")
                        If IsNumeric(Dr면.건축부위면적) Then 입력면면적 += Dr면.건축부위면적
                        Dr면.존분류 = Drz.code
                    Next
                Case "서측존"
                    For Each Dr면 As DS.tbl_myounRow In DSET1.tbl_myoun.Select("(건축부위방식 = '외벽' or 건축부위방식='외부창') and 방위='서'")
                        If IsNumeric(Dr면.건축부위면적) Then 입력면면적 += Dr면.건축부위면적
                        Dr면.존분류 = Drz.code
                    Next
                Case "남동측존"
                    For Each Dr면 As DS.tbl_myounRow In DSET1.tbl_myoun.Select("(건축부위방식 = '외벽' or 건축부위방식='외부창') and 방위='남동'")
                        If IsNumeric(Dr면.건축부위면적) Then 입력면면적 += Dr면.건축부위면적
                        Dr면.존분류 = Drz.code
                    Next
                Case "남서측존"
                    For Each Dr면 As DS.tbl_myounRow In DSET1.tbl_myoun.Select("(건축부위방식 = '외벽' or 건축부위방식='외부창') and 방위='남서'")
                        If IsNumeric(Dr면.건축부위면적) Then 입력면면적 += Dr면.건축부위면적
                        Dr면.존분류 = Drz.code
                    Next
                Case "남측존"
                    For Each Dr면 As DS.tbl_myounRow In DSET1.tbl_myoun.Select("(건축부위방식 = '외벽' or 건축부위방식='외부창') and 방위='남'")
                        If IsNumeric(Dr면.건축부위면적) Then 입력면면적 += Dr면.건축부위면적
                        Dr면.존분류 = Drz.code
                    Next
                Case "간접존"
                    For Each Dr면 As DS.tbl_myounRow In DSET1.tbl_myoun.Select("건축부위방식 = '내벽' or 건축부위방식='내부창'")
                        If IsNumeric(Dr면.건축부위면적) Then 입력면면적 += Dr면.건축부위면적
                        Dr면.존분류 = Drz.code
                    Next

            End Select
            If 층수 <> 0 AndAlso 층고 <> 0 Then
                If (입력면면적 / (층고 * 층수)) - 5 >= 0 Then
                    Drz.면적 = ((입력면면적 / (층고 * 층수)) - 2.5) * 5 * 층수
                Else
                    Drz.면적 = (입력면면적 / (층고 * 층수)) / 2 * 5 * 층수
                End If
            Else
                Drz.면적 = 0
            End If

            If Drz.설명 <> "실내존" Then
                면적의총합 += Drz.면적
                Drz.순실체적 = Drz.면적 * 천장고
            End If
            ' Drz.조명에너지부하율입력치 = 조명밀도
        Next
        If 연면적 - 면적의총합 > 0 Then
            DSET1.tbl_zone.Rows(1)("면적") = 연면적 - 면적의총합  '//실내존의면적
            DSET1.tbl_zone.Rows(1)("순실체적") = (연면적 - 면적의총합) * 천장고
        Else
            DSET1.tbl_zone.Rows(1)("면적") = 0
            DSET1.tbl_zone.Rows(1)("순실체적") = 0
        End If


        '///////////////////////////////////////////////////////////////////////////
        ' 2017. 05.14 수정
        '///////////////////////////////////////////////////////////////////////////

        Dim dr존0 As DS.tbl_zoneRow = DSET1.tbl_zone.Select("code<>'0'", "code")(0)
        Dim drDesc As DS.tbl_DescRow = DSET1.tbl_Desc.Rows(0)
        dr존0.면적 = 0

        '//층별개요(신규추가됨)
        For Each DRType As DS.tbl_typeRow In DSET1.tbl_type.Select("code<>'0'", "code") ' DSET1.tbl_zone.Rows.Count '(3)
            If Program = EProgram.총량평가 Then
                dr존0.면적 = TOSG(T, dr존0.면적) + DRType.면적
                dr존0.침기율 = 1.5
            Else
                dr존0.면적 = TOSG(T, dr존0.면적) + DRType.세대면적 * DRType.세대수
                dr존0.침기율 = 3.5  '// 20250625 침기율을 6에서 3.5로 수정
            End If
        Next

        '//천장고
        Dim 순실체적 As Double = TOSG(T, dr존0.면적) * TOSG(T, drDesc.천장고)
        dr존0.순실체적 = 순실체적
        dr존0.열교가산치 = "내단열"
        dr존0.열저장능력 = "90"
        If Program = EProgram.총량평가 Then
            dr존0.야간운전방식 = "가동정지"  '숙박, 의료, 주택이 주용도인 경우 정상가동
            dr존0.주말운전방식 = "가동정지"  '숙박, 의료, 주택이 주용도인 경우 정상가동
            dr존0.냉난방방식 = "기능없음"
            dr존0.냉난방공조 = "냉난방"
            dr존0.외기부하처리여부 = "아니오"      '=============2017.12.25  추가
        Else
            dr존0.야간운전방식 = "정상가동"  '숙박, 의료, 주택이 주용도인 경우 정상가동
            dr존0.주말운전방식 = "정상가동"  '숙박, 의료, 주택이 주용도인 경우 정상가동
            dr존0.냉난방방식 = "냉난방"
            dr존0.냉난방공조 = "환기"
            dr존0.외기부하처리여부 = "아니오"          '=============2017.12.25  추가
        End If


        '//조명전력합
        Dim 조명면적합 As Double = 0
        Dim 조명전력합 As Double = 0
        For Each dr As DS.tbl_typeRow In DSET1.tbl_type.Select("code<>'0'", "code")
            If Program = EProgram.총량평가 Then
                조명면적합 += TOSG(T, dr.면적)
            Else
                조명면적합 += TOSG(T, dr.세대면적 * dr.세대수)
            End If
        Next

        For Each dr조명 As DS.tbl_lightRow In DSET1.tbl_light.Select("code<>'0'", "code")
            '조명면적합 += TOSG(T, dr조명.조명면적)
            조명전력합 = 조명전력합 + (TOSG(T, dr조명.조명전력) * TOSG(T, dr조명.대수))
        Next

        If 조명면적합 = 0 Then
            Log.AppendLine("조명면적합 = 0")
            dr존0.조명에너지부하율입력치 = 0
        Else
            dr존0.조명에너지부하율입력치 = 조명전력합 / 조명면적합
        End If

        dr존0.EndEdit()

        DSET1.AcceptChanges()  '//

    End Sub
End Module
