''' <summary>
''' 전체존의 사용면적을 계산및 확인(냉,난,조,급,환)
''' </summary>
''' <remarks>전체존의 사용면적을 계산및 확인(냉,난,조,급,환)</remarks>
Public Class C사용면적

    ''' <summary>
    ''' 난방
    ''' </summary>
    ''' <remarks>난방</remarks>
    Property H() As Decimal
        Get
            If DSETR.사용면적.Rows.Count = 0 Then
                LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다")
                Return 0
            Else
                Return TOSG(DSETR.사용면적(0)("H"))
            End If
        End Get
        Set(ByVal value As Decimal)
            If DSETR.사용면적.Rows.Count = 0 Then
                LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다")
            Else
                DSETR.사용면적(0)("H") = value
            End If
        End Set
    End Property
    ''' <summary>
    ''' 냉방
    ''' </summary>
    ''' <remarks>냉방</remarks>
    Property C() As Decimal
        Get
            If DSETR.사용면적.Rows.Count = 0 Then
                LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다")
                Return 0
            Else
                Return TOSG(DSETR.사용면적(0)("C"))
            End If
        End Get
        Set(ByVal value As Decimal)
            If DSETR.사용면적.Rows.Count = 0 Then
                LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다")
            Else
                DSETR.사용면적(0)("C") = value
            End If
        End Set
    End Property
    ''' <summary>
    ''' 조명
    ''' </summary>
    ''' <remarks>조명</remarks>
    Property L() As Decimal
        Get
            If DSETR.사용면적.Rows.Count = 0 Then
                LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다")
                Return 0
            Else
                Return TOSG(DSETR.사용면적(0)("L"))
            End If
        End Get
        Set(ByVal value As Decimal)
            If DSETR.사용면적.Rows.Count = 0 Then
                LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다")
            Else
                DSETR.사용면적(0)("L") = value
            End If
        End Set
    End Property
    ''' <summary>
    ''' 급탕
    ''' </summary>
    ''' <remarks>급탕</remarks>
    Property W() As Decimal
        Get
            If DSETR.사용면적.Rows.Count = 0 Then
                LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다")
                Return 0
            Else
                Return TOSG(DSETR.사용면적(0)("W"))
            End If
        End Get
        Set(ByVal value As Decimal)
            If DSETR.사용면적.Rows.Count = 0 Then
                LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다")
            Else
                DSETR.사용면적(0)("W") = value
            End If
        End Set
    End Property
    ''' <summary>
    ''' 환기
    ''' </summary>
    ''' <remarks>환기</remarks>
    Property V() As Decimal
        Get
            If DSETR.사용면적.Rows.Count = 0 Then
                LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다")
                Return 0
            Else
                Return TOSG(DSETR.사용면적(0)("V"))
            End If
        End Get
        Set(ByVal value As Decimal)
            If DSETR.사용면적.Rows.Count = 0 Then
                LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다")
            Else
                DSETR.사용면적(0)("V") = value
            End If
        End Set
    End Property


    ''' <summary>
    ''' 난방_WF
    ''' </summary>
    ''' <remarks>난방</remarks>
    Property H_WF() As Decimal
        Get
            If DSETR.사용면적.Rows.Count = 0 Then
                LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다")
                Return 0
            Else
                Return TOSG(DSETR.사용면적(0)("H_WF"))
            End If
        End Get
        Set(ByVal value As Decimal)
            If DSETR.사용면적.Rows.Count = 0 Then
                LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다")
            Else
                DSETR.사용면적(0)("H_WF") = value
            End If
        End Set
    End Property
    ''' <summary>
    ''' 냉방_WF
    ''' </summary>
    ''' <remarks>냉방</remarks>
    Property C_WF() As Decimal
        Get
            If DSETR.사용면적.Rows.Count = 0 Then
                LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다")
                Return 0
            Else
                Return TOSG(DSETR.사용면적(0)("C_WF"))
            End If
        End Get
        Set(ByVal value As Decimal)
            If DSETR.사용면적.Rows.Count = 0 Then
                LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다")
            Else
                DSETR.사용면적(0)("C_WF") = value
            End If
        End Set
    End Property
    ''' <summary>
    ''' 조명_WF
    ''' </summary>
    ''' <remarks>조명</remarks>
    Property L_WF() As Decimal
        Get
            If DSETR.사용면적.Rows.Count = 0 Then
                LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다")
                Return 0
            Else
                Return TOSG(DSETR.사용면적(0)("L_WF"))
            End If
        End Get
        Set(ByVal value As Decimal)
            If DSETR.사용면적.Rows.Count = 0 Then
                LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다")
            Else
                DSETR.사용면적(0)("L_WF") = value
            End If
        End Set
    End Property
    ''' <summary>
    ''' 급탕_WF
    ''' </summary>
    ''' <remarks>급탕</remarks>
    Property W_WF() As Decimal
        Get
            If DSETR.사용면적.Rows.Count = 0 Then
                LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다")
                Return 0
            Else
                Return TOSG(DSETR.사용면적(0)("W_WF"))
            End If
        End Get
        Set(ByVal value As Decimal)
            If DSETR.사용면적.Rows.Count = 0 Then
                LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다")
            Else
                DSETR.사용면적(0)("W_WF") = value
            End If
        End Set
    End Property
    ''' <summary>
    ''' 환기_WF
    ''' </summary>
    ''' <remarks>환기</remarks>
    Property V_WF() As Decimal
        Get
            If DSETR.사용면적.Rows.Count = 0 Then
                LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다")
                Return 0
            Else
                Return TOSG(DSETR.사용면적(0)("V_WF"))
            End If
        End Get
        Set(ByVal value As Decimal)
            If DSETR.사용면적.Rows.Count = 0 Then
                LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다")
            Else
                DSETR.사용면적(0)("V_WF") = value
            End If
        End Set
    End Property

    Public Overridable Sub Calc()

        pLog.Add(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
        pLog.Add(">> C사용면적.Calc")
        pLog.Add(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>")

        Dim A_H As Decimal = 0
        Dim A_C As Decimal = 0
        Dim A_L As Decimal = 0
        Dim A_W As Decimal = 0
        Dim A_V As Decimal = 0
        '//용도별 면적가중치(wf) 추가 '2012.07.01
        Dim A_H_wf As Decimal = 0
        Dim A_C_wf As Decimal = 0
        Dim A_L_wf As Decimal = 0
        Dim A_W_wf As Decimal = 0
        Dim A_V_wf As Decimal = 0
        Dim day_year As Decimal
        '//'2012.07.01

        If DSETR.사용면적.Rows.Count = 0 Then   '//데결과가 없으면 신규줄을 기록한다.
            Dim Dr As DSR.사용면적Row = DSETR.사용면적.New사용면적Row
            Dr.H = 0 : Dr.C = 0 : Dr.L = 0 : Dr.W = 0 : Dr.V = 0
            DSETR.사용면적.Add사용면적Row(Dr)
            DSETR.AcceptChanges()
        End If

        '//건물용도
        Dim 건물용도 As Integer = CInt(DSET.tbl_Desc.Rows(0)("isjugo"))

        '//A_H,C,W,L,V 의 누적값을 계산(사용면적)  '//모든존을 대상으로

        For Each Dr존 As DS.tbl_zoneRow In DSET.tbl_zone.Select("code<>'0'", "code")

            Dim Dr프로필 As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & Dr존.프로필 & "'")(0), DS.tbl_profileRow)

            Dim offset As Integer = 1
            If Dr프로필.code = "0016" Then
                If Dr존.조명부하산출방법 = "입력치" Then
                    If Dr존.조명에너지부하율입력치 > 10 Then
                        offset = ((Dr존.조명에너지부하율입력치 - 10) * 0.4 + 10) / Dr존.조명에너지부하율입력치
                    End If
                ElseIf Dr존.조명부하산출방법 = "계산치" Then
                    If Dr존.조명에너지부하율계산치 > 10 Then
                        offset = ((Dr존.조명에너지부하율계산치 - 10) * 0.4 + 10) / Dr존.조명에너지부하율계산치
                    End If
                End If
            End If

            pLog.Add(String.Format(">> Zone({0})Row Offset={1}", Dr존.code, offset))

            '//냉난방(HC) 이거나 난방(H)일경우 난방면적 누적
            If Dr존.냉난방방식.IndexOf("난") <> -1 OrElse Dr존.냉난방공조.IndexOf("난") <> -1 Then
                A_H += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수)
                If 건물용도 < 10 Then '//주거일경우에

                    '//연

                    A_H_wf = A_H

                Else
                    day_year = TOSG(Dr프로필.day01) + TOSG(Dr프로필.day02) + TOSG(Dr프로필.day03) + TOSG(Dr프로필.day04) + TOSG(Dr프로필.day05) + TOSG(Dr프로필.day06) + TOSG(Dr프로필.day07) + TOSG(Dr프로필.day08) + TOSG(Dr프로필.day09) + TOSG(Dr프로필.day10) + TOSG(Dr프로필.day11) + TOSG(Dr프로필.day12)
                    'A_H_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * (TOSG(Dr프로필.일일운전시간) * Math.Round(day_year / (11 * 250), 3))

                    A_H_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)), 3)

                    'If Dr프로필.code <> "0010" Then
                    '    A_H_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)), 3)
                    'Else
                    '    A_H_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)) / (0.503 / 0.314), 3)  '//전산실 용도에 따른 난방 가중치 적용
                    'End If

                End If

                pLog.Add(String.Format(">> Zone({0})Row A_H_wf={1}", Dr존.code, A_H_wf))
            End If



            '//냉난방(hC) 이거나 냉방(C)일경우 냉방면적 누적
            If Dr존.냉난방방식.IndexOf("냉") <> -1 OrElse Dr존.냉난방공조.IndexOf("냉") <> -1 Then
                A_C += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수)

                If 건물용도 < 10 Then
                    A_C_wf = A_C
                Else
                    day_year = TOSG(Dr프로필.day01) + TOSG(Dr프로필.day02) + TOSG(Dr프로필.day03) + TOSG(Dr프로필.day04) + TOSG(Dr프로필.day05) + TOSG(Dr프로필.day06) + TOSG(Dr프로필.day07) + TOSG(Dr프로필.day08) + TOSG(Dr프로필.day09) + TOSG(Dr프로필.day10) + TOSG(Dr프로필.day11) + TOSG(Dr프로필.day12)
                    'A_C_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * (TOSG(Dr프로필.일일운전시간) * Math.Round(day_year / (11 * 250), 3))

                    A_C_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)), 3)

                    'If Dr프로필.code <> "0010" Then
                    '    A_C_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)), 3)
                    'Else
                    '    A_C_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)) / (0.196 / 0.314), 3)  '//전산실 용도에 따른 냉방 가중치 적용
                    'End If

                End If

                pLog.Add(String.Format(">> Zone({0})Row A_C={1},A_C_wf={2}", Dr존.code, A_C, A_C_wf))
            End If



            '//급탕요구량이 있다면 급탕면적 누적
            If TOSG(Dr프로필.일일급탕요구량) > 0 Then

                A_W += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수)


                If 건물용도 < 10 Then
                    A_W_wf = A_W
                Else
                    day_year = TOSG(Dr프로필.day01) + TOSG(Dr프로필.day02) + TOSG(Dr프로필.day03) + TOSG(Dr프로필.day04) + TOSG(Dr프로필.day05) + TOSG(Dr프로필.day06) + TOSG(Dr프로필.day07) + TOSG(Dr프로필.day08) + TOSG(Dr프로필.day09) + TOSG(Dr프로필.day10) + TOSG(Dr프로필.day11) + TOSG(Dr프로필.day12)
                    'A_W_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * (TOSG(Dr프로필.일일급탕요구량) * Math.Round(day_year / (30 * 250), 3))  160211 소수점오류인한 수정
                    A_W_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일급탕요구량) * (day_year / (30 * 250)), 3)
                End If

                pLog.Add(String.Format(">> Zone({0})Row A_W={1},A_W_wf={2}", Dr존.code, A_W, A_W_wf))

            End If

            '//조명의 에너지부하율값이 있으면 조명면적 누적
            If Dr존.조명에너지부하율계산치 <> "0" OrElse Dr존.조명에너지부하율입력치 <> "0" Then
                A_L += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수)

                If 건물용도 < 10 Then
                    '//가스를쓰는 난방 급탕은 계가 발생
                    A_L_wf = A_L
                Else
                    day_year = TOSG(Dr프로필.day01) + TOSG(Dr프로필.day02) + TOSG(Dr프로필.day03) + TOSG(Dr프로필.day04) + TOSG(Dr프로필.day05) + TOSG(Dr프로필.day06) + TOSG(Dr프로필.day07) + TOSG(Dr프로필.day08) + TOSG(Dr프로필.day09) + TOSG(Dr프로필.day10) + TOSG(Dr프로필.day11) + TOSG(Dr프로필.day12)
                    'A_L_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * (TOSG(Dr프로필.일일사용시간) * Math.Round(day_year / (9 * 250), 3) * offset)
                    A_L_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일사용시간) * (day_year / (9 * 250)), 3) * offset
                End If

                pLog.Add(String.Format(">> Zone({0})Row A_L={1},A_L_wf={2}", Dr존.code, A_L, A_L_wf))
            End If

            '//냉난방공조를 사용하고있다면 환기면적 누적(ZZ:기능없음)
            If (Dr존.냉난방공조 <> "기능없음") Then
                A_V += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수)

                If 건물용도 < 10 Then
                    A_V_wf = A_V
                Else
                    day_year = TOSG(Dr프로필.day01) + TOSG(Dr프로필.day02) + TOSG(Dr프로필.day03) + TOSG(Dr프로필.day04) + TOSG(Dr프로필.day05) + TOSG(Dr프로필.day06) + TOSG(Dr프로필.day07) + TOSG(Dr프로필.day08) + TOSG(Dr프로필.day09) + TOSG(Dr프로필.day10) + TOSG(Dr프로필.day11) + TOSG(Dr프로필.day12)
                    'A_V_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * (TOSG(Dr프로필.일일운전시간) * Math.Round(day_year / (11 * 250), 3))
                    A_V_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)), 3)
                End If

                pLog.Add(String.Format(">> Zone({0})Row A_V={1},A_V_wf={2}", Dr존.code, A_V, A_V_wf))

            End If

        Next

        '//저장소에 보관한다.
        '//가중치 없는 사용면적
        Result.사용면적.H = A_H
        Result.사용면적.C = A_C
        Result.사용면적.L = A_L
        Result.사용면적.W = A_W
        Result.사용면적.V = A_V

        pLog.Add("C사용면적.CALC 결과 : 가중치없음")
        pLog.Add(String.Format("H={0},C={1},L={2},W={3},V={4}", A_H, A_C, A_L, A_W, A_V))


        '// 가중치 있는 사용면적 '2013.07.01
        Result.사용면적.H_WF = A_H_wf
        Result.사용면적.C_WF = A_C_wf
        Result.사용면적.L_WF = A_L_wf
        Result.사용면적.W_WF = A_W_wf
        Result.사용면적.V_WF = A_V_wf

        pLog.Add("C사용면적.CALC 결과 : 가중치적용")
        pLog.Add(String.Format("H_wf={0},C_wf={1},L_wf={2},W_wf={3},V_wf={4}", A_H_wf, A_C_wf, A_L_wf, A_W_wf, A_V_wf))
    End Sub

    Private DSETR As DSR
    Private Result As CResult
    Private DSET As DS
    Public Sub New(ByRef pds As DS, ByRef pdsetr As DSR, ByRef presult As CResult)

        If Not pLog Is Nothing Then
            pLog.Add("New C사용면적", True)
        End If

        DSET = pds
        DSETR = pdsetr
        Result = presult
    End Sub
End Class