using System;
using System.Collections.Generic;

using BS.Shared;

namespace BeWo.Data.Entities
{
    public class InvoiceItem : BeWoEntityBase
    {
        public static string PropertyName_AmountPerUnit = "AmountPerUnit";

        public static string PropertyName_AmountTotal = "AmountTotal";

        public static string PropertyName_CostRatePeriodList = "CostRatePeriodList";

        public static string PropertyName_GrossAmountTotal = "GrossAmountTotal";

        public static string PropertyName_ItemDescription = "ItemDescription";

        public static string PropertyName_ItemPeriodEnd = "ItemPeriodEnd";

        public static string PropertyName_ItemPeriodStart = "ItemPeriodStart";

        public static string PropertyName_RateFactor = "RateFactor";

        public static string PropertyName_ServiceRecord = "ServiceRecord";

        public static string PropertyName_SupportConceptApprovalPeriodOid = "SupportConceptApprovalPeriodOid";

        public static string PropertyName_UnitCount = "UnitCount";

        public static string PropertyName_UnitDescription = "UnitDescription";

        private decimal? _AmountPerUnit;

        private decimal? _AmountTotal;

        private IList<CostRatePeriod> _CostRatePeriodList;

        private decimal? _GrossAmountTotal;

        private string _ItemDescription;

        private DateTime? _ItemPeriodEnd;

        private DateTime? _ItemPeriodStart;

        private decimal? _RateFactor;

        private ServiceRecord _ServiceRecord;

        private long? _SupportConceptApprovalPeriodOid;

        private decimal? _UnitCount;

        private string _UnitDescription;

        public InvoiceItem()
        {
            this._Tid = TableID.InvoiceItem;
        }

        public virtual decimal? AmountPerUnit
        {
            get
            {
                return this._AmountPerUnit;
            }

            set
            {
                if (this.AreDifferent(this._AmountPerUnit, value))
                {
                    this._AmountPerUnit = value;
                }
            }
        }

        public virtual decimal? AmountTotal
        {
            get
            {
                return this._AmountTotal;
            }

            set
            {
                if (this.AreDifferent(this._AmountTotal, value))
                {
                    this._AmountTotal = value;
                }
            }
        }

        //public virtual IList<CostRatePeriod> CostRatePeriodList
        //{
        //    get
        //    {
        //        return this._CostRatePeriodList ?? (this._CostRatePeriodList = new List<CostRatePeriod>());
        //    }

        //    set
        //    {
        //        if (this.AreDifferent(this._CostRatePeriodList, value))
        //        {
        //            this._CostRatePeriodList = value;
        //        }
        //    }
        //}

        public virtual decimal? GrossAmountTotal
        {
            get
            {
                return this._GrossAmountTotal;
            }

            set
            {
                if (this.AreDifferent(this._GrossAmountTotal, value))
                {
                    this._GrossAmountTotal = value;
                }
            }
        }

        public virtual string ItemDescription
        {
            get
            {
                return this._ItemDescription;
            }

            set
            {
                if (this.AreDifferent(this._ItemDescription, value))
                {
                    this._ItemDescription = value;
                }
            }
        }

        public virtual DateTime? ItemPeriodEnd
        {
            get
            {
                return this._ItemPeriodEnd;
            }

            set
            {
                if (this.AreDifferent(this._ItemPeriodEnd, value))
                {
                    this._ItemPeriodEnd = value;
                }
            }
        }

        public virtual DateTime? ItemPeriodStart
        {
            get
            {
                return this._ItemPeriodStart;
            }

            set
            {
                if (this.AreDifferent(this._ItemPeriodStart, value))
                {
                    this._ItemPeriodStart = value;
                }
            }
        }

        public virtual decimal? RateFactor
        {
            get
            {
                return this._RateFactor;
            }

            set
            {
                if (this.AreDifferent(this._RateFactor, value))
                {
                    this._RateFactor = value;
                }
            }
        }

        public virtual ServiceRecord ServiceRecord
        {
            get
            {
                return this._ServiceRecord;
            }

            set
            {
                if (this.AreDifferent(this._ServiceRecord, value))
                {
                    this._ServiceRecord = value;
                }
            }
        }

        public virtual long? SupportConceptApprovalPeriodOid
        {
            get
            {
                return this._SupportConceptApprovalPeriodOid;
            }

            set
            {
                if (this.AreDifferent(this._SupportConceptApprovalPeriodOid, value))
                {
                    this._SupportConceptApprovalPeriodOid = value;
                }
            }
        }

        public virtual decimal? UnitCount
        {
            get
            {
                return this._UnitCount;
            }

            set
            {
                if (this.AreDifferent(this._UnitCount, value))
                {
                    this._UnitCount = value;
                }
            }
        }

        public virtual string UnitDescription
        {
            get
            {
                return this._UnitDescription;
            }

            set
            {
                if (this.AreDifferent(this._UnitDescription, value))
                {
                    this._UnitDescription = value;
                }
            }
        }

        public virtual AccountingIntervalType? AccountingInterval { get; set; }

        public virtual decimal ReceivedAmount { get; set; }

        public virtual decimal? MaxApprovedAmount { get; set; }

        public virtual decimal? MaxApprovedUnitCount { get; set; }

        public virtual decimal? ApprovedPerUnit { get; set; }

        public virtual AccountingIntervalType? ApprovalUnit { get; set; }

    }
}