Public Class C에너지소요량


    Dim Midx As Integer
    Public Mon As String
    Private ErrMsg As String = "에너지소요량 계산되지 않았습니다"
    Private DSETR As DSR
    Private Result As CResult
    Public Sub New(ByRef pdsetr As DSR, ByRef presult As CResult, Optional ByVal pmIdx As Integer = 0)
        DSETR = pdsetr
        Result = presult
        Mon = "M" & Format(pmIdx, "00")
        Me.Midx = pmIdx
    End Sub

    Public Sub Calc_Summary()
        If Midx <> 0 Then
            MsgBox("계산식은 0번 합계필드만 가능합니다.", MsgBoxStyle.Critical, "확인")
            Return
        End If
        Dim I10 As Decimal = 0
        Dim I20 As Decimal = 0
        Dim I30 As Decimal = 0
        Dim I40 As Decimal = 0
        Dim I50 As Decimal = 0
        Dim I60 As Decimal = 0

        Dim IH As Decimal = 0
        Dim IC As Decimal = 0
        Dim IL As Decimal = 0
        Dim IW As Decimal = 0
        Dim IV As Decimal = 0

        Dim I4 As Decimal = 0 '//난방
        Dim I5 As Decimal = 0 '//냉방
        Dim I6 As Decimal = 0 '//조명
        Dim I7 As Decimal = 0 '//급탕
        Dim I8 As Decimal = 0 '//환기

        For i As Integer = 1 To 12
            '//12월을 다더해서 0번열에 기록한다.
            I10 += Result.E소요량(i).난방
            I20 += Result.E소요량(i).난방보조
            I30 += Result.E소요량(i).냉방
            I40 += Result.E소요량(i).냉방보조
            I50 += Result.E소요량(i).급탕
            I60 += Result.E소요량(i).급탕보조

            IH += Result.E소요량(i).난방S
            IC += Result.E소요량(i).냉방S
            IL += Result.E소요량(i).조명S
            IW += Result.E소요량(i).급탕S
            IV += Result.E소요량(i).환기S

            I4 += Result.일차E소요량(i).난방전력
            I5 += Result.일차E소요량(i).냉방전력
            I6 += Result.일차E소요량(i).조명전력
            I7 += Result.일차E소요량(i).급탕전력
            I8 += Result.일차E소요량(i).환기전력
        Next

        Me.난방 = I10
        Me.난방보조 = I20
        Me.냉방 = I30
        Me.냉방보조 = I40
        Me.급탕 = I50
        Me.급탕보조 = I60

        If (I4 + I5 + I6 + I7 + I8 <> 0) Then
            Me.난방S = IH - (Result.생산E(0).태양광전력생산량 + Result.생산E(0).열병합전력생산량) / (I4 + I5 + I6 + I7 + I8) * I4
            Me.냉방S = IC - (Result.생산E(0).태양광전력생산량 + Result.생산E(0).열병합전력생산량) / (I4 + I5 + I6 + I7 + I8) * I5
            Me.조명S = IL - (Result.생산E(0).태양광전력생산량 + Result.생산E(0).열병합전력생산량) / (I4 + I5 + I6 + I7 + I8) * I6
            Me.급탕S = IW - (Result.생산E(0).태양광전력생산량 + Result.생산E(0).열병합전력생산량) / (I4 + I5 + I6 + I7 + I8) * I7
            Me.환기S = IV - (Result.생산E(0).태양광전력생산량 + Result.생산E(0).열병합전력생산량) / (I4 + I5 + I6 + I7 + I8) * I8
        End If
        
    End Sub


    ReadOnly Property 소요량() As Decimal
        Get
            Return 난방S + 냉방S + 조명S + 환기S + 급탕S
        End Get
    End Property

    ReadOnly Property 면적소요량() As Decimal
        Get
            Return 난방면적 + 냉방면적 + 조명면적 + 급탕면적 + 환기면적
        End Get

    End Property
    Property 난방S() As Decimal
        Get
            If Midx = 0 Then
                Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row())
                If DR.GetUpperBound(0) = -1 Then
                    MsgBox(ErrMsg)
                    Return 0
                Else
                    Return TOSG(DR(0)("난방"))
                End If
            Else
                Return 난방 + 난방보조
            End If
        End Get
        Set(ByVal value As Decimal)
            Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row())
            If DR.GetUpperBound(0) = -1 Then
                MsgBox(ErrMsg)
            Else
                DR(0)("난방") = value
            End If
        End Set
    End Property

    Property 난방() As Decimal
        Get
            Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row())
            If DR.GetUpperBound(0) = -1 Then
                MsgBox(ErrMsg)
                Return 0
            Else
                Return TOSG(DR(0)("난방에너지소요량"))
            End If
        End Get
        Set(ByVal value As Decimal)
            Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row())
            If DR.GetUpperBound(0) = -1 Then
                MsgBox(ErrMsg)
            Else
                DR(0)("난방에너지소요량") = value
            End If
        End Set
    End Property
    Property 난방보조() As Decimal
        Get
            Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row())
            If DR.GetUpperBound(0) = -1 Then
                MsgBox(ErrMsg)
                Return 0
            Else
                Return TOSG(DR(0)("난방보조에너지소요량"))
            End If
        End Get
        Set(ByVal value As Decimal)
            Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row())
            If DR.GetUpperBound(0) = -1 Then
                MsgBox(ErrMsg)
            Else
                DR(0)("난방보조에너지소요량") = value
            End If
        End Set
    End Property
    ReadOnly Property 난방면적() As Decimal
        Get
            If Result.사용면적.H = 0 Then
                Return 0
            Else
                Return Me.난방S / Result.사용면적.H
            End If
        End Get
    End Property
    Property 냉방S() As Decimal
        Get
            If Midx = 0 Then
                Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row())
                If DR.GetUpperBound(0) = -1 Then
                    MsgBox(ErrMsg)
                    Return 0
                Else
                    Return TOSG(DR(0)("냉방"))
                End If
            Else
                Return 냉방 + 냉방보조
            End If
        End Get
        Set(ByVal value As Decimal)
            Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row())
            If DR.GetUpperBound(0) = -1 Then
                MsgBox(ErrMsg)
            Else
                DR(0)("냉방") = value
            End If
        End Set
    End Property
    Property 냉방() As Decimal
        Get
            Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row())
            If DR.GetUpperBound(0) = -1 Then
                MsgBox(ErrMsg)
                Return 0
            Else
                Return TOSG(DR(0)("냉방에너지소요량"))
            End If
        End Get
        Set(ByVal value As Decimal)
            Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row())
            If DR.GetUpperBound(0) = -1 Then
                MsgBox(ErrMsg)
            Else
                DR(0)("냉방에너지소요량") = value
            End If
        End Set
    End Property
    Property 냉방보조() As Decimal
        Get
            Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row())
            If DR.GetUpperBound(0) = -1 Then
                MsgBox(ErrMsg)
                Return 0
            Else
                Return TOSG(DR(0)("냉방보조에너지소요량"))
            End If
        End Get
        Set(ByVal value As Decimal)
            Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row())
            If DR.GetUpperBound(0) = -1 Then
                MsgBox(ErrMsg)
            Else
                DR(0)("냉방보조에너지소요량") = value
            End If
        End Set
    End Property
    ReadOnly Property 냉방면적() As Decimal
        Get
            If Result.사용면적.C = 0 Then
                Return 0
            Else
                Return Me.냉방S / Result.사용면적.C
            End If
        End Get
    End Property
    Property 조명S() As Decimal
        Get
            If Midx = 0 Then
                Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row())
                If DR.GetUpperBound(0) = -1 Then
                    MsgBox(ErrMsg)
                    Return 0
                Else
                    Return TOSG(DR(0)("조명"))
                End If
            Else
                Return Result.E분석(Midx).조명에너지요구량
            End If
        End Get
        Set(ByVal value As Decimal)
            Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row())
            If DR.GetUpperBound(0) = -1 Then
                MsgBox(ErrMsg)
            Else
                DR(0)("조명") = value
            End If
        End Set
    End Property
    ReadOnly Property 조명면적() As Decimal
        Get
            If Result.사용면적.L = 0 Then
                Return 0
            Else
                Return Me.조명S / Result.사용면적.L
            End If
        End Get
    End Property

    Property 급탕S() As Decimal
        Get
            If Midx = 0 Then
                Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row())
                If DR.GetUpperBound(0) = -1 Then
                    MsgBox(ErrMsg)
                    Return 0
                Else
                    Return TOSG(DR(0)("급탕"))
                End If
            Else
                Return 급탕 + 급탕보조
            End If
        End Get
        Set(ByVal value As Decimal)
            Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row())
            If DR.GetUpperBound(0) = -1 Then
                MsgBox(ErrMsg)
            Else
                DR(0)("급탕") = value
            End If
        End Set
    End Property
    Property 급탕() As Decimal
        Get
            Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row())
            If DR.GetUpperBound(0) = -1 Then
                MsgBox(ErrMsg)
                Return 0
            Else

                '#If DEBUG Then
                '                Dim f As String = "c:\temp\1\급탕에너지소요량.txt"
                '                Dim b As New System.Text.StringBuilder
                '                If System.IO.File.Exists(f) = False Then
                '                    b.AppendLine("Mon   급탕에너지소요량")
                '                End If
                '                b.AppendLine(Mon + vbTab + DR(0)("급탕에너지소요량").ToString)
                '                My.Computer.FileSystem.WriteAllText(f, b.ToString, True)
                '#End If

                Return TOSG(DR(0)("급탕에너지소요량"))
            End If
        End Get
        Set(ByVal value As Decimal)
            Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row())
            If DR.GetUpperBound(0) = -1 Then
                MsgBox(ErrMsg)
            Else
                DR(0)("급탕에너지소요량") = value
            End If
        End Set
    End Property
    Property 급탕보조() As Decimal
        Get
            Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row())
            If DR.GetUpperBound(0) = -1 Then
                MsgBox(ErrMsg)
                Return 0
            Else

#If DEBUG Then
                'Dim f As String = "c:\temp\1\급탕보조에너지소요량.txt"
                'Dim b As New System.Text.StringBuilder
                'If System.IO.File.Exists(f) = False Then
                '    b.AppendLine("Mon   급탕보조에너지소요량")
                'End If
                'b.AppendLine(Mon + vbTab + DR(0)("급탕보조에너지소요량").ToString)
                'My.Computer.FileSystem.WriteAllText(f, b.ToString, True)
#End If

                Return TOSG(DR(0)("급탕보조에너지소요량"))
            End If
        End Get
        Set(ByVal value As Decimal)
            Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row())
            If DR.GetUpperBound(0) = -1 Then
                MsgBox(ErrMsg)
            Else
                DR(0)("급탕보조에너지소요량") = value
            End If
        End Set
    End Property
    ReadOnly Property 급탕면적() As Decimal
        Get
            If Result.사용면적.W = 0 Then
                Return 0
            Else

                '#If DEBUG Then
                '                Dim f As String = "c:\temp\1\급탕면적.txt"
                '                Dim b As New System.Text.StringBuilder
                '                If System.IO.File.Exists(f) = False Then
                '                    b.AppendLine("급탕S   사용면적")
                '                End If
                '                b.AppendLine(급탕S.ToString() + vbTab + Result.사용면적.W.ToString)
                '                My.Computer.FileSystem.WriteAllText(f, b.ToString, True)
                '#End If

                Return 급탕S / Result.사용면적.W
            End If
        End Get
    End Property
    Property 환기S() As Decimal
        Get
            If Midx = 0 Then
                Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row())
                If DR.GetUpperBound(0) = -1 Then
                    MsgBox(ErrMsg)
                    Return 0
                Else
                    Return TOSG(DR(0)("환기"))
                End If
            Else
                Return Result.E분석(Midx).환기에너지요구량
            End If
        End Get
        Set(ByVal value As Decimal)
            Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row())
            If DR.GetUpperBound(0) = -1 Then
                MsgBox(ErrMsg)
            Else
                DR(0)("환기") = value
            End If
        End Set
    End Property
    ReadOnly Property 환기면적() As Decimal
        Get
            If Result.사용면적.V = 0 Then
                Return 0
            Else
                Return 환기S / Result.사용면적.V
            End If
        End Get
    End Property
End Class
