Imports System.ComponentModel
Imports DevExpress.Xpo
Imports DevExpress.Data.Filtering
Imports DevExpress.ExpressApp
Imports DevExpress.Persistent.Base
Imports DevExpress.Persistent.BaseImpl
Imports DevExpress.Persistent.Validation
Imports DevExpress.ExpressApp.ConditionalAppearance
Imports System.Linq

<DefaultClassOptions()> _
<NavigationItem(False), CreatableItem(False)> _
<Appearance("Disable all properties when InvoiceHeader.IsEditable = False", TargetItems:="InvoiceHeader;InvoiceRowtype;RowIndex;CustomsTariffs;ShortName;Description;ListPriceHUF;ListPriceDEV;DiscountPriceHUF;DiscountPriceDEV;QTT;Units;VAT;QualityOption;ContractRows", Criteria:="InvoiceHeader.IsEditable=False", Enabled:=False, Context:="DetailView")> _
<Appearance("Hide DEV when InvoiceHeader.CurrencyName.ShortName = 'HUF'", AppearanceItemType.ViewItem, "InvoiceHeader.CurrencyName.ShortName = 'HUF'", TargetItems:="ListPriceDEV;DiscountPriceDEV", visibility:=Editors.ViewItemVisibility.Hide)> _
<RuleCriteria("RuleCriteria InvoiceRows-ChartOfAccounts", DefaultContexts.Save, "ChartOfAccounts.Children.Count=0", "Csak gyermek objektum választható ki!", SkipNullOrEmptyValues:=False)> _
Public Class InvoiceRows
    Inherits BaseObject
    Private _InvoiceHeader As InvoiceHeader 'Számla fejléce
    Private _InvoiceRowtype As eInvoiceRowType 'Számla sor tipusa
    Private _InvoicePeriod As String 'Számlázási időszak string
    Private _DateExecution As Date 'Elszámolás dátuma
    Private _RowIndex As Long = 0 'Számla sorindex
    Private _CustomsTariffs As CustomsTariffs 'Vámtarifaszám
    Private _ShortName As String 'Megnevezés
    Private _Description As String 'Leírás
    Private _ListPriceHUF As Double = 0 ' Egységár HUF (nettó !)
    Private _ListPriceDEV As Double = 0 ' Egységár DEV (Nettó !)
    Private _DiscountPriceHUF As Double = 0 'Kedvezmény összege HUF
    Private _DiscountPriceDEV As Double = 0 'Kedvezmény összege DEV
    Private _QTT As Double = 0 'Mennyiség
    Private _Units As Units ' Mennyiségi egység
    Private _VAT As VAT 'ÁFA
    Private _QualityOption As QualityOption 'Minőségi kondíció
    Private _ContractRows As ContractRows ' -- Szerződés sor
    Private _Controlling As Controlling '-- Controlling szám
    Private _ChartOfAccounts As ChartOfAccounts '-- Ezt a könyvelő állítja be, ha akarja.
    Private _UniqueObjects As UniqueObjects ' -- Egyedi azonosító
    Private _CostHolder As CostHolder ' -- Költség viselő
    Private _CostPlace As CostPlace ' -- Költség viselő
    Private _JobNumberObjects As JobNumberObjects ' -- Project
    Private _InvoiceRowsAdvance As InvoiceRows ' Ez egy előleg vissza sor és mutat az előleg sorra
    Private _ReadyforBookEntryRows As Boolean '= False 'Könyvelhető-e a sor. Ha nem, akkor feladás előtti ellenőrzés nem engedi át
    Private _InvoiceRows As InvoiceRows 'Helyesbített sor
    Private _OrderInRows As OrderInRows ' A számla melyik rendelési sorról készült
    Private _OrderInRowsOther As OrderInRowsOther ' A számla melyik rendelési egyéb sorról készült
    Private _WorkflowSystemSteps As WorkflowSystemSteps
    Private _InvoiceRowCorrigendumType As eInvoiceRowCorrigendumType
    Private _Worksheet_CostRows As Worksheet_CostRows 'A kapcsolódó munkalap elszámolási sora
    Private _DeliveryNoteOutRows As DeliveryNoteOutRows 'A kapcsolódó kimenő szállítólevél sora
    Private _Products As Products 'Terméktörzsből
    Private _Services As Services 'Szolgáltatás törzsből

    Private _SumPriceHUF As Double 'Netto sor összesen HUF
    Private _SumPriceDEV As Double 'Netto sor összesen DEV
    Private _SumPriceVATHUF As Double 'ÁFA sor összesen HUF
    Private _SumPriceVATDEV As Double 'ÁFA sor összesen DEV
    Private _SumPriceBruttoHUF As Double 'Brutto sor összesen HUF
    Private _SumPriceBruttoDEV As Double 'Brutto sor összesen DEV

    Private _SumAveragePriceHUF As Double 'Átlag beszerzési ár HUF
    Private _SumAveragePriceDEV As Double 'Átlag beszerzési ár DEV

    Private _SumGrossMarginHUF As Double 'Árréstömeg
    Private _SumGrossMarginDEV As Double 'Árréstömeg

    Private _SumBallanceHUF As Double 'Mai napig kiegyenlített rész
    Private _SumBallanceDEV As Double 'Mai napig kiegyenlített rész (deviza)

    
    Private _PricefromPricingHUF As Double 'Árképzésből ár HUF
    Private _PricefromPricingDEV As Double 'Árképzésből ár DEV
    Private _LastPriceInDEV As Double 'Az utolsó beszerzési ár DEV
    Private _LastPriceInHUF As Double 'Az utolsó beszerzési ár HUF


    Private _Weight_NAV As Double 'ÁFA bevallás miatt a súly

    'NonPersistent
    Private _QTT_Will As Double 'NonPersistent jóváírandó mennyiség

    Public Sub New(ByVal session As Session)
        MyBase.New(session)
    End Sub
    Public Overrides Sub AfterConstruction()
        MyBase.AfterConstruction()
        If Me.InvoiceHeader IsNot Nothing Then
            If Me.InvoiceHeader.DateExecution = Nothing Then
            Else
                Me.DateExecution = Me.InvoiceHeader.DateExecution
            End If
        End If
        ReadyforBookEntryRows = False
    End Sub
    Protected Overrides Sub OnSaving()
        MyBase.OnSaving()
        If Me.InvoiceHeader IsNot Nothing Then
            If Me.InvoiceHeader.DateExecution = Nothing Then
                Me.DateExecution = Me.InvoiceHeader.DateExecution
            End If
        End If
        Me.CalculateSum()

        '// FIFO sorok újragenerálása
        If Me.OrderInRows IsNot Nothing Then
            If Me.InvoiceHeader IsNot Nothing Then
                If Me.InvoiceHeader.IsEditable = False And Me.InvoiceHeader.IsStorno = False Then
                    Dim _InvoiceRowsFIFO_Collection As New XPCollection(Of InvoiceRowsFIFO)(PersistentCriteriaEvaluationBehavior.InTransaction, Session, CriteriaOperator.Parse("InvoiceRows=?", Me))
                    Session.Delete(_InvoiceRowsFIFO_Collection)
                    Dim _InvoiceRowsFIFO As InvoiceRowsFIFO
                    Dim _StorageOutRowsInRows As StorageOutRowsInRows
                    For Each _StorageOutRowsInRows In OrderInRows.StorageOutRowsInRows_Collection
                        _InvoiceRowsFIFO = New InvoiceRowsFIFO(Session)
                        _InvoiceRowsFIFO.InvoiceRows = Me
                        _InvoiceRowsFIFO.StorageInRows = _StorageOutRowsInRows.StorageInRows
                        _InvoiceRowsFIFO.QTT = _StorageOutRowsInRows.QTT
                        _InvoiceRowsFIFO.Save()
                    Next
                End If
            End If
            If Me.Controlling Is Nothing Then
                '// Kontrollszám nélküli tételek ellenőrzése !!!
                If UCase(Me.ShortName) Like "*ELŐLEG*" Then
                    If Me.OrderInRows.OrderInHeader.OrderInParameters.Controlling_InvoiceAdvance_Default IsNot Nothing Then
                        Me.Controlling = Me.OrderInRows.OrderInHeader.OrderInParameters.Controlling_InvoiceAdvance_Default
                    End If
                Else
                    If Me.OrderInRows.OrderInHeader.OrderInParameters.Controlling_Rows_Default IsNot Nothing Then
                        Me.Controlling = Me.OrderInRows.OrderInHeader.OrderInParameters.Controlling_Rows_Default
                    End If
                End If
            End If
            If Me.OrderInRowsOther IsNot Nothing Then
                If Me.Controlling Is Nothing Then
                    If Me.OrderInRowsOther.OrderInHeader.OrderInParameters.Controlling_OtherRows_Default IsNot Nothing Then
                        Me.Controlling = Me.OrderInRowsOther.OrderInHeader.OrderInParameters.Controlling_OtherRows_Default
                    End If
                End If
            End If
        End If
    End Sub
    Public Sub AddRows(ByVal _p_InvoiceHeader As InvoiceHeader, Optional _p_InvoiceRows As InvoiceRows = Nothing, Optional _p_ObjectSpace As Xpo.XPObjectSpace = Nothing)
        ' Sor hozzáadása a fejléchez, valamint árkalkuláció a sor termékére
        If _p_InvoiceRows IsNot Nothing Then    'Számla sorainak módosítása
            Dim _InvoiceRows_Corr_New As InvoiceRows = _p_ObjectSpace.CreateObject(Of InvoiceRows)()

            Me.InvoiceHeader = _p_InvoiceHeader
            Me.InvoiceRows = _p_InvoiceRows
            Me.ShortName = _p_InvoiceRows.ShortName
            Me.Description = _p_InvoiceRows.Description
            Me.ListPriceHUF = _p_InvoiceRows.ListPriceHUF
            Me.ListPriceDEV = _p_InvoiceRows.ListPriceDEV
            'Me.DiscountPercent = _p_InvoiceHeader.row_DiscountPercent
            Me.DiscountPriceHUF = Me.ListPriceHUF * (_p_InvoiceRows.DiscountPercent / 100)
            Me.DiscountPriceDEV = Me.ListPriceDEV * (_p_InvoiceRows.DiscountPercent / 100)
            Me.QTT = _p_InvoiceRows.QTT * (-1)
            Me.Units = _p_InvoiceRows.Units
            Me.VAT = _p_InvoiceRows.VAT
            Me.QualityOption = _p_InvoiceRows.QualityOption
            Me.Controlling = _p_InvoiceRows.Controlling
            Me.UniqueObjects = _p_InvoiceRows.UniqueObjects
            Me.CostHolder = _p_InvoiceRows.CostHolder
            Me.CostPlace = _p_InvoiceRows.CostPlace
            Me.JobNumberObjects = _p_InvoiceRows.JobNumberObjects
            Me.InvoiceRowCorrigendumType = eInvoiceRowCorrigendumType.eOriginalMinus
            Me.InvoicePeriod = _p_InvoiceRows.InvoicePeriod
            Me.CustomsTariffs = _p_InvoiceRows.CustomsTariffs

            Me.ContractRows = _p_InvoiceRows.ContractRows
            Me.OrderInRows = _p_InvoiceRows.OrderInRows
            Me.OrderInRowsOther = _p_InvoiceRows.OrderInRowsOther

            If _p_InvoiceHeader.row_Products IsNot Nothing Then Me.Products = _p_InvoiceHeader.row_Products
            If _p_InvoiceHeader.row_Services IsNot Nothing Then Me.Services = _p_InvoiceHeader.row_Services

            If _p_InvoiceHeader.InvoiceRows.Count = 0 Then
                Me.RowIndex = 0
            Else
                Me.RowIndex = _p_InvoiceHeader.InvoiceRows.Count - 1
            End If

            Me.Save()
            _InvoiceRows_Corr_New.InvoiceHeader = _p_InvoiceHeader
            _InvoiceRows_Corr_New.InvoiceRows = _p_InvoiceRows
            _InvoiceRows_Corr_New.ShortName = _p_InvoiceRows.ShortName
            _InvoiceRows_Corr_New.Description = _p_InvoiceRows.Description
            _InvoiceRows_Corr_New.ListPriceHUF = _p_InvoiceHeader.row_ListPriceHUF
            _InvoiceRows_Corr_New.ListPriceDEV = _p_InvoiceHeader.row_ListPriceDEV
            _InvoiceRows_Corr_New.DiscountPriceHUF = _InvoiceRows_Corr_New.ListPriceHUF * (_p_InvoiceRows.DiscountPercent / 100)
            _InvoiceRows_Corr_New.DiscountPriceDEV = _InvoiceRows_Corr_New.ListPriceDEV * (_p_InvoiceRows.DiscountPercent / 100)
            _InvoiceRows_Corr_New.QTT = _p_InvoiceHeader.row_QTT
            _InvoiceRows_Corr_New.Units = _p_InvoiceRows.Units
            _InvoiceRows_Corr_New.VAT = _p_InvoiceHeader.row_VAT
            _InvoiceRows_Corr_New.QualityOption = _p_InvoiceRows.QualityOption
            _InvoiceRows_Corr_New.Controlling = _p_InvoiceRows.Controlling
            _InvoiceRows_Corr_New.UniqueObjects = _p_InvoiceRows.UniqueObjects
            _InvoiceRows_Corr_New.CostHolder = _p_InvoiceRows.CostHolder
            _InvoiceRows_Corr_New.CostPlace = _p_InvoiceRows.CostPlace
            _InvoiceRows_Corr_New.JobNumberObjects = _p_InvoiceRows.JobNumberObjects
            _InvoiceRows_Corr_New.InvoiceRowCorrigendumType = eInvoiceRowCorrigendumType.eNew
            _InvoiceRows_Corr_New.InvoicePeriod = _p_InvoiceRows.InvoicePeriod
            _InvoiceRows_Corr_New.CustomsTariffs = _p_InvoiceRows.CustomsTariffs

            _InvoiceRows_Corr_New.ContractRows = _p_InvoiceRows.ContractRows
            _InvoiceRows_Corr_New.OrderInRows = _p_InvoiceRows.OrderInRows
            _InvoiceRows_Corr_New.OrderInRowsOther = _p_InvoiceRows.OrderInRowsOther

            If _p_InvoiceHeader.InvoiceRows.Count = 0 Then
                _InvoiceRows_Corr_New.RowIndex = 0
            Else
                _InvoiceRows_Corr_New.RowIndex = _p_InvoiceHeader.InvoiceRows.Count - 1
            End If
            _InvoiceRows_Corr_New.Save()
        Else    'Normál menetrend, gyalogos számla rögzítsé
            Me.InvoiceHeader = _p_InvoiceHeader
            Me.InvoiceRows = _p_InvoiceRows
            Me.ShortName = _p_InvoiceHeader.row_ShortName
            Me.Description = _p_InvoiceHeader.row_Description
            Me.ListPriceHUF = _p_InvoiceHeader.row_ListPriceHUF
            Me.ListPriceDEV = _p_InvoiceHeader.row_ListPriceDEV
            'Me.DiscountPercent = _p_InvoiceHeader.row_DiscountPercent
            Me.DiscountPriceHUF = Me.ListPriceHUF * (_p_InvoiceHeader.row_DiscountPercent / 100)
            Me.DiscountPriceDEV = Me.ListPriceDEV * (_p_InvoiceHeader.row_DiscountPercent / 100)
            Me.QTT = _p_InvoiceHeader.row_QTT
            Me.Units = _p_InvoiceHeader.row_Units
            Me.VAT = _p_InvoiceHeader.row_VAT
            Me.QualityOption = _p_InvoiceHeader.row_QualityOption
            Me.Controlling = _p_InvoiceHeader.row_Controlling
            Me.UniqueObjects = _p_InvoiceHeader.row_UniqueObjects
            Me.CostHolder = _p_InvoiceHeader.row_CostHolder
            Me.CostPlace = _p_InvoiceHeader.row_CostPlace
            Me.JobNumberObjects = _p_InvoiceHeader.row_JobNumberObjects
            Me.InvoiceRowCorrigendumType = eInvoiceRowCorrigendumType.eNormal
            Me.InvoicePeriod = _p_InvoiceHeader.row_InvoicePeriod
            Me.CustomsTariffs = _p_InvoiceHeader.row_CustomsTariffs
            Me.Products = _p_InvoiceHeader.row_Products
            Me.Services = _p_InvoiceHeader.row_Services

            If _p_InvoiceHeader.InvoiceRows.Count = 0 Then
                Me.RowIndex = 0
            Else
                Me.RowIndex = _p_InvoiceHeader.InvoiceRows.Count - 1
            End If
            Me.Save()
        End If


    End Sub
    Public Sub RemoveRows(ByVal _p_InvoiceHeader As InvoiceHeader)
        For Each _InvoiceRows As InvoiceRows In _p_InvoiceHeader.InvoiceRows
            If _InvoiceRows.RowIndex > Me.RowIndex Then
                _InvoiceRows.RowIndex -= 1
            End If
        Next
        Me.Delete()
        Me.Save()
        Session.CommitTransaction()
    End Sub

    Property DateExecution As Date
        Get
            Return _DateExecution
        End Get
        Set(value As Date)
            SetPropertyValue("DateExecution", _DateExecution, value)
        End Set
    End Property
    Property InvoicePeriod As String
        Get
            Return _InvoicePeriod
        End Get
        Set(value As String)
            SetPropertyValue("InvoicePeriod", _InvoicePeriod, value)
        End Set
    End Property

    <Association("InvoiceHeader", GetType(InvoiceHeader))> _
    Property InvoiceHeader() As InvoiceHeader
        Get
            Return _InvoiceHeader
        End Get
        Set(ByVal value As InvoiceHeader)
            SetPropertyValue("InvoiceHeader", _InvoiceHeader, value)
            If _InvoiceHeader IsNot Nothing Then
                ' Sor indexelés mikor hozzáad a fejléchez sorokat, az első sor rögtön 0 indexről indul
                If Session.IsNewObject(Me) And Session.IsObjectsLoading = False And Session.IsObjectsSaving = False And Session.IsObjectMarkedDeleted(Me) = False Then
                    Dim i As Integer = 1
                    If i = _InvoiceHeader.InvoiceRows.Count Then
                        Me.RowIndex = 1 ' A második sor indexét 1 re állítja
                    End If
                    If _InvoiceHeader.InvoiceRows.Count > 1 Then
                        Me.RowIndex = _InvoiceHeader.InvoiceRows.Count ' a harmadik sortól növeli az indexeket
                    End If
                End If
            End If
        End Set
    End Property
    Property InvoiceRowtype() As eInvoiceRowType
        Get
            Return _InvoiceRowtype
        End Get
        Set(ByVal value As eInvoiceRowType)
            SetPropertyValue("InvoiceRowtype", _InvoiceRowtype, value)
        End Set
    End Property
    Property RowIndex() As Long
        Get
            Return _RowIndex
        End Get
        Set(ByVal value As Long)
            SetPropertyValue("RowIndex", _RowIndex, value)
        End Set
    End Property
    Property CustomsTariffs() As CustomsTariffs
        Get
            Return _CustomsTariffs
        End Get
        Set(ByVal value As CustomsTariffs)
            SetPropertyValue("CustomsTariffs", _CustomsTariffs, value)
        End Set
    End Property
    <Size(255)> _
    <RuleRequiredField("RuleRequiredField for InvoiceRows.ShortName", DefaultContexts.Save)> _
    Property ShortName() As String
        Get
            Return _ShortName
        End Get
        Set(ByVal value As String)
            SetPropertyValue("ShortName", _ShortName, value)
        End Set
    End Property
    <Size(4000)> _
    Property Description() As String
        Get
            Return _Description
        End Get
        Set(ByVal value As String)
            SetPropertyValue("Description", _Description, value)
        End Set
    End Property
    Property ListPriceHUF() As Double
        Get
            Return _ListPriceHUF
        End Get
        Set(ByVal value As Double)
            SetPropertyValue("ListPriceHUF", _ListPriceHUF, value)
            If Session.IsObjectsLoading = False AndAlso Session.IsObjectsSaving = False Then
                CalculateSum()
            End If
        End Set
    End Property
    Property ListPriceDEV() As Double
        Get
            Return _ListPriceDEV
        End Get
        Set(ByVal value As Double)
            SetPropertyValue("ListPriceDEV", _ListPriceDEV, value)
            If Session.IsObjectsLoading = False AndAlso Session.IsObjectsSaving = False Then
                CalculateSum()
            End If
        End Set
    End Property
    Property DiscountPriceHUF() As Double
        Get
            Return _DiscountPriceHUF
        End Get
        Set(ByVal value As Double)
            SetPropertyValue("DiscountPriceHUF", _DiscountPriceHUF, value)
            If Session.IsObjectsLoading = False AndAlso Session.IsObjectsSaving = False Then
                CalculateSum()
            End If
        End Set
    End Property
    Property DiscountPriceDEV() As Double
        Get
            Return _DiscountPriceDEV
        End Get
        Set(ByVal value As Double)
            SetPropertyValue("DiscountPriceDEV", _DiscountPriceDEV, value)
            If Session.IsObjectsLoading = False AndAlso Session.IsObjectsSaving = False Then
                CalculateSum()
            End If
        End Set
    End Property
    <RuleRequiredField("RuleRequiredField for InvoiceRows.QTT", DefaultContexts.Save)> _
    Property QTT() As Double
        Get
            Return _QTT
        End Get
        Set(ByVal value As Double)
            SetPropertyValue("QTT", _QTT, value)
            If Session.IsObjectsLoading = False AndAlso Session.IsObjectsSaving = False Then
                CalculateSum()
            End If
        End Set
    End Property
    Property DeliveryNoteOutRows As DeliveryNoteOutRows
        Get
            Return _DeliveryNoteOutRows
        End Get
        Set(value As DeliveryNoteOutRows)
            SetPropertyValue("DeliveryNoteOutRows", _DeliveryNoteOutRows, value)
        End Set
    End Property

    <VisibleInListView(False), VisibleInDetailView(False), VisibleInLookupListView(False)>
    Property Products As Products
        Get
            Return _Products
        End Get
        Set(value As Products)
            SetPropertyValue("Products", _Products, value)
        End Set
    End Property
    <VisibleInListView(False), VisibleInDetailView(False), VisibleInLookupListView(False)>
    Property Services As Services
        Get
            Return _Services
        End Get
        Set(value As Services)
            SetPropertyValue("Services", _Services, value)
        End Set
    End Property

    <VisibleInDetailView(False)> _
    Property SumPriceHUF() As Double
        Get
            Return _SumPriceHUF
        End Get
        Set(value As Double)
            SetPropertyValue("SumPriceHUF", _SumPriceHUF, value)
        End Set
    End Property
    <VisibleInDetailView(False)> _
    Property SumPriceDEV() As Double
        Get
            Return _SumPriceDEV
        End Get
        Set(value As Double)
            SetPropertyValue("SumPriceDEV", _SumPriceDEV, value)
        End Set
    End Property
    <VisibleInDetailView(False)> _
    Property SumPriceVATHUF As Double
        Get
            Return _SumPriceVATHUF

        End Get
        Set(value As Double)
            SetPropertyValue("SumPriceVATHUF", _SumPriceVATHUF, value)
        End Set
    End Property
    <VisibleInDetailView(False)> _
    Property SumPriceVATDEV As Double
        Get
            Return _SumPriceVATDEV
        End Get
        Set(value As Double)
            SetPropertyValue("SumPriceVATDEV", _SumPriceVATDEV, value)
        End Set
    End Property
    <VisibleInDetailView(False)> _
    Property SumPriceBruttoHUF As Double
        Get
            Return _SumPriceBruttoHUF
        End Get
        Set(value As Double)
            SetPropertyValue("SumPriceBruttoHUF", _SumPriceBruttoHUF, value)
        End Set
    End Property
    <VisibleInDetailView(False)> _
    Property SumPriceBruttoDEV As Double
        Get
            Return _SumPriceBruttoDEV
        End Get
        Set(value As Double)
            SetPropertyValue("SumPriceBruttoDEV", _SumPriceBruttoDEV, value)
        End Set
    End Property

    Property Weight_NAV As Double
        Get
            Return _Weight_NAV
        End Get
        Set(value As Double)
            SetPropertyValue("Weight_NAV", _Weight_NAV, value)
        End Set
    End Property

    <VisibleInDetailView(False), VisibleInListView(False), VisibleInLookupListView(False)> _
    Property SumAveragePriceHUF As Double
        Get
            Return _SumAveragePriceHUF
        End Get
        Set(value As Double)
            SetPropertyValue("SumAveragePriceHUF", _SumAveragePriceHUF, value)
        End Set
    End Property
    <VisibleInDetailView(False), VisibleInListView(False), VisibleInLookupListView(False)> _
    Property SumAveragePriceDEV As Double
        Get
            Return _SumAveragePriceDEV
        End Get
        Set(value As Double)
            SetPropertyValue("SumAveragePriceDEV", _SumAveragePriceDEV, value)
        End Set
    End Property
    <VisibleInDetailView(False), VisibleInListView(False), VisibleInLookupListView(False)> _
    Property SumGrossMarginHUF As Double
        Get
            Return _SumGrossMarginHUF
        End Get
        Set(value As Double)
            SetPropertyValue("SumGrossMarginHUF", _SumGrossMarginHUF, value)
        End Set
    End Property
    <VisibleInDetailView(False), VisibleInListView(False), VisibleInLookupListView(False)> _
    Property SumGrossMarginDEV As Double
        Get
            Return _SumGrossMarginDEV
        End Get
        Set(value As Double)
            SetPropertyValue("SumGrossMarginDEV", _SumGrossMarginDEV, value)
        End Set
    End Property

    Property SumBallanceHUF As Double
        Get
            Return _SumBallanceHUF
        End Get
        Set(value As Double)
            SetPropertyValue("SumBallanceHUF", _SumBallanceHUF, value)
        End Set
    End Property
    Property SumBallanceDEV As Double
        Get
            Return _SumBallanceDEV
        End Get
        Set(value As Double)
            SetPropertyValue("SumBallanceDEV", _SumBallanceDEV, value)
        End Set
    End Property

    Property PricefromPricingHUF As Double
        Get
            Return _PricefromPricingHUF
        End Get
        Set(value As Double)
            SetPropertyValue("PricefromPricingHUF", _PricefromPricingHUF, value)
        End Set
    End Property
    Property PricefromPricingDEV As Double
        Get
            Return _PricefromPricingDEV
        End Get
        Set(value As Double)
            SetPropertyValue("PricefromPricingDEV", _PricefromPricingDEV, value)
        End Set
    End Property

    Property LastPriceInDEV As Double
        Get
            Return _LastPriceInDEV
        End Get
        Set(value As Double)
            SetPropertyValue("LastPriceInDEV", _LastPriceInDEV, value)
        End Set
    End Property
    Property LastPriceInHUF As Double
        Get
            Return _LastPriceInHUF
        End Get
        Set(value As Double)
            SetPropertyValue("LastPriceInHUF", _LastPriceInHUF, value)
        End Set
    End Property

    <RuleRequiredField("RuleRequiredField for InvoiceRows.Units", DefaultContexts.Save)> _
    Property Units() As Units
        Get
            Return _Units
        End Get
        Set(ByVal value As Units)
            SetPropertyValue("Units", _Units, value)
        End Set
    End Property
    <RuleRequiredField("RuleRequiredField for InvoiceRows.VAT", DefaultContexts.Save)> _
    Property VAT() As VAT
        Get
            Return _VAT
        End Get
        Set(ByVal value As VAT)
            SetPropertyValue("VAT", _VAT, value)
            'If Session.IsObjectsLoading = False And Session.IsObjectsSaving = False Then
            '    If value.InversState = True Then
            '        If Me.InvoiceHeader IsNot Nothing Then
            '            If String.IsNullOrEmpty(Me.InvoiceHeader.Description) Then
            '                Me.InvoiceHeader.Description = value.Description
            '            Else
            '                If Not (Me.InvoiceHeader.Description.Contains(value.Description)) Then
            '                    Me.InvoiceHeader.Description = Me.InvoiceHeader.Description + vbNewLine + value.Description
            '                End If
            '            End If
            '        End If
            '    End If
            'End If
        End Set
    End Property
    Property QualityOption() As QualityOption
        Get
            Return _QualityOption
        End Get
        Set(ByVal value As QualityOption)
            SetPropertyValue("QualityOption", _QualityOption, value)
        End Set
    End Property
    Property ContractRows As ContractRows
        Get
            Return _ContractRows
        End Get
        Set(ByVal value As ContractRows)
            SetPropertyValue("ContractRows", _ContractRows, value)
        End Set
    End Property
    'Rule5DMatrix ...
    <DataSourceCriteria("IsParent=False")> _
    Property Controlling As Controlling
        Get
            Return _Controlling
        End Get
        Set(ByVal value As Controlling)
            SetPropertyValue("Controlling", _Controlling, value)
        End Set
    End Property
    <DataSourceCriteria("AccountYear=GetYear('@This.InvoiceHeader.DateExecution')")> _
    Property ChartOfAccounts As ChartOfAccounts
        Get
            Return _ChartOfAccounts
        End Get
        Set(value As ChartOfAccounts)
            SetPropertyValue("ChartOfAccounts", _ChartOfAccounts, value)
        End Set
    End Property
    <RuleRequiredField("InvoiceRows-UniqueObjects", DefaultContexts.Save, TargetCriteria:="InvoiceHeader.InvoiceType.Rule5DMatrix.RequireUniqueObjects=True")> _
    Property UniqueObjects As UniqueObjects
        Get
            Return _UniqueObjects
        End Get
        Set(ByVal value As UniqueObjects)
            SetPropertyValue("UniqueObjects", _UniqueObjects, value)
        End Set
    End Property
    <RuleRequiredField("InvoiceRows-CostHolder", DefaultContexts.Save, TargetCriteria:="InvoiceHeader.InvoiceType.Rule5DMatrix.RequireCostHolder=True")> _
    Property CostHolder As CostHolder
        Get
            Return _CostHolder
        End Get
        Set(ByVal value As CostHolder)
            SetPropertyValue("CostHolder", _CostHolder, value)
        End Set
    End Property
    Property CostPlace As CostPlace
        Get
            Return _CostPlace
        End Get
        Set(ByVal value As CostPlace)
            SetPropertyValue("CostPlace", _CostPlace, value)
        End Set
    End Property
    Property JobNumberObjects As JobNumberObjects
        Get
            Return _JobNumberObjects
        End Get
        Set(ByVal value As JobNumberObjects)
            SetPropertyValue("JobNumberObjects", _JobNumberObjects, value)
        End Set
    End Property
    Property Worksheet_CostRows As Worksheet_CostRows
        Get
            Return _Worksheet_CostRows
        End Get
        Set(value As Worksheet_CostRows)
            SetPropertyValue("Worksheet_CostRows", _Worksheet_CostRows, value)
        End Set
    End Property

    Property InvoiceRowsAdvance As InvoiceRows
        Get
            Return _InvoiceRowsAdvance
        End Get
        Set(ByVal value As InvoiceRows)
            SetPropertyValue("InvoiceRowsAdvance", _InvoiceRowsAdvance, value)
        End Set
    End Property
    Property ReadyforBookEntryRows As Boolean
        Get
            Return _ReadyforBookEntryRows
        End Get
        Set(value As Boolean)
            SetPropertyValue("ReadyforBookEntryRows", _ReadyforBookEntryRows, value)
        End Set
    End Property
    Property InvoiceRows As InvoiceRows
        Get
            Return _InvoiceRows
        End Get
        Set(value As InvoiceRows)
            SetPropertyValue("InvoiceRows", _InvoiceRows, value)
        End Set
    End Property
    Property OrderInRows As OrderInRows
        Get
            Return _OrderInRows
        End Get
        Set(value As OrderInRows)
            SetPropertyValue("OrderInRows", _OrderInRows, value)
        End Set
    End Property
    Property OrderInRowsOther As OrderInRowsOther
        Get
            Return _OrderInRowsOther
        End Get
        Set(value As OrderInRowsOther)
            SetPropertyValue("OrderInRowsOther", _OrderInRowsOther, value)
        End Set
    End Property
    Property WorkflowSystemSteps As WorkflowSystemSteps
        Get
            Return _WorkflowSystemSteps
        End Get
        Set(value As WorkflowSystemSteps)
            SetPropertyValue("WorkflowSystemSteps", _WorkflowSystemSteps, value)
        End Set
    End Property
    Property InvoiceRowCorrigendumType As eInvoiceRowCorrigendumType
        Get
            Return _InvoiceRowCorrigendumType
        End Get
        Set(value As eInvoiceRowCorrigendumType)
            SetPropertyValue("InvoiceRowCorrigendumType", _InvoiceRowCorrigendumType, value)
        End Set
    End Property

    <NonPersistent()> _
    Property QTT_Will As Double
        Get
            Return _QTT_Will
        End Get
        Set(value As Double)
            SetPropertyValue("QTT_Will", _QTT_Will, value)
        End Set
    End Property

    '// Readonly properties

    ReadOnly Property SumPriceOriginalHUF As Double
        Get
            If OrderInRows IsNot Nothing Then
                If OrderInRows.ListPriceOriginalHUF <> 0 Then
                    Return OrderInRows.ListPriceOriginalHUF * QTT
                Else
                    Return SumPriceHUF
                End If
            Else
                Return SumPriceHUF
            End If
        End Get
    End Property
    ReadOnly Property SumGrossMarginOriginalHUF As Double
        Get
            Return SumPriceOriginalHUF - SumAveragePriceHUF
        End Get
    End Property
    ReadOnly Property InvoiceRowMainType As eInvoiceRowMainType
        Get
            If Me.OrderInRows IsNot Nothing Then
                Return eInvoiceRowMainType.TurnOverMaterial
            ElseIf UCase(ShortName) Like "*ELŐLEG*" Then
                Return eInvoiceRowMainType.Advance
            ElseIf Me.OrderInRowsOther IsNot Nothing Then
                Return eInvoiceRowMainType.TurnOverServices
            ElseIf Me.Worksheet_CostRows IsNot Nothing Then
                Return eInvoiceRowMainType.TurnOverServices
            Else
                Return eInvoiceRowMainType.TurnOverServices
            End If
        End Get
    End Property
    ReadOnly Property DiscountPercent() As Double
        Get
            Return 0
        End Get
    End Property
    ReadOnly Property PriceHUF As Double
        Get
            If Session.IsObjectsLoading = False And Session.IsObjectsSaving = False Then
                Return ListPriceHUF - DiscountPriceHUF
            Else
                Return 0
            End If
        End Get
    End Property
    ReadOnly Property PriceDEV As Double
        Get
            If Session.IsObjectsLoading = False And Session.IsObjectsSaving = False Then
                Return ListPriceDEV - DiscountPriceDEV
            Else
                Return 0
            End If
        End Get
    End Property


    '//XPCollections
    <VisibleInListView(False), VisibleInLookupListView(False)> _
    ReadOnly Property InvoiceRowsFIFO As XPCollection(Of InvoiceRowsFIFO)
        Get
            If Me IsNot Nothing Then
                Return New XPCollection(Of InvoiceRowsFIFO)(Session, CriteriaOperator.Parse("InvoiceRows=? and isnull(InvoiceRows)=False", Me))
            Else
                Return New XPCollection(Of InvoiceRowsFIFO)(Session, CriteriaOperator.Parse("1=2"))
            End If
        End Get
    End Property
    <VisibleInListView(False), VisibleInDetailView(False), VisibleInLookupListView(False)> _
    ReadOnly Property StorageOutRowsInRows As XPCollection(Of StorageOutRowsInRows)
        Get
            If OrderInRows IsNot Nothing Then
                Return New XPCollection(Of StorageOutRowsInRows)(Session, CriteriaOperator.Parse("StorageOutRows.OrderInRows=?", OrderInRows))
            Else
                Return New XPCollection(Of StorageOutRowsInRows)(Session, CriteriaOperator.Parse("1=2"))
            End If
        End Get
    End Property
    <Browsable(False)> _
    ReadOnly Property QTT_CreditNote As Double
        Get
            Dim _QTT_CreditNote As Double = 0

            Dim _InvoiceCreditNoteRows_Collection As New XPCollection(Of InvoiceCreditNoteRows)(Session, CriteriaOperator.Parse("FromInvoiceRows=?", Me))
            If _InvoiceCreditNoteRows_Collection.Count > 0 Then
                For Each _InvoiceCreditNoteRows As InvoiceCreditNoteRows In _InvoiceCreditNoteRows_Collection
                    _QTT_CreditNote += _InvoiceCreditNoteRows.QTT
                Next
            End If

            Return _QTT_CreditNote
        End Get
    End Property


    '//Public functions
    '-- Számolt értékek beállítása
    Public Sub CalculateSum()
        SumPriceHUF = Math.Round(_QTT * (ListPriceHUF - DiscountPriceHUF), 2, MidpointRounding.AwayFromZero)
        SumPriceDEV = Math.Round(_QTT * (ListPriceDEV - DiscountPriceDEV), 2, MidpointRounding.AwayFromZero)
        If VAT Is Nothing Then
            SumPriceVATHUF = 0
        Else
            SumPriceVATHUF = Math.Round(SumPriceHUF * VAT.KeyValue, 2, MidpointRounding.AwayFromZero)
        End If
        If VAT Is Nothing Then
            SumPriceVATDEV = 0
        Else
            SumPriceVATDEV = Math.Round(SumPriceDEV * VAT.KeyValue, 2, MidpointRounding.AwayFromZero)
        End If
        SumPriceBruttoHUF = SumPriceHUF + SumPriceVATHUF
        SumPriceBruttoDEV = SumPriceDEV + SumPriceVATDEV
    End Sub

End Class

