using System;
using System.Collections.Generic;
using BS.Shared;

namespace BeWo.Data.Entities
{
    public class ServiceInvoicePeriod : BeWoEntityBase
    {
        public static string PropertyName_ApprovedAmountDefaultHourlyRate = "ApprovedAmountDefaultHourlyRate";

        public static string PropertyName_ApprovedBE = "ApprovedBE";

        public static string PropertyName_ApprovedFixedAmount = "ApprovedFixedAmount";

        public static string PropertyName_ApprovedHours = "ApprovedHours";

        public static string PropertyName_Claim = "Claim";

        public static string PropertyName_End = "End";

        public static string PropertyName_HoursNotBillableAbsence = "HoursNotBillableAbsence";

        public static string PropertyName_HoursNotBillableNotApproved = "HoursNotBillableNotApproved";

        public static string PropertyName_InvoiceItemList = "InvoiceItemList";

        public static string PropertyName_ServiceUnitName = "ServiceUnitName";

        public static string PropertyName_Start = "Start";

        public static string PropertyName_SupportConceptApprovalPeriod = "SupportConceptApprovalPeriod";

        public static string PropertyName_Customer = "Customer";
        
        private decimal? _ApprovedAmountDefaultHourlyRate;

        private decimal? _ApprovedBE;

        private decimal? _ApprovedFixedAmount;

        private decimal? _ApprovedHours;

        private decimal? _Claim;

        private DateTime? _End;

        private decimal _HoursNotBillableAbsence;

        private decimal _HoursNotBillableNotApproved;

        private IList<InvoiceItem> _InvoiceItemList;

        private string _ServiceUnitName;

        private DateTime? _Start;

        private SupportConceptApprovalPeriod _SupportConceptApprovalPeriod;

        private Customer _Customer;


        public virtual decimal? ApprovedAmountDefaultHourlyRate
        {
            get
            {
                return this._ApprovedAmountDefaultHourlyRate;
            }

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

        public virtual decimal? ApprovedBE
        {
            get
            {
                return this._ApprovedBE;
            }

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

        public virtual decimal? ApprovedFixedAmount
        {
            get
            {
                return this._ApprovedFixedAmount;
            }

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

        public virtual decimal? ApprovedHours
        {
            get
            {
                return this._ApprovedHours;
            }

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

        public virtual decimal? Claim
        {
            get
            {
                return this._Claim;
            }

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

        public virtual DateTime? End
        {
            get
            {
                return this._End;
            }

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

        public virtual decimal HoursNotBillableAbsence
        {
            get
            {
                return this._HoursNotBillableAbsence;
            }

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

        public virtual decimal HoursNotBillableNotApproved
        {
            get
            {
                return this._HoursNotBillableNotApproved;
            }

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

        public virtual IList<InvoiceItem> InvoiceItemList
        {
            get
            {
                return this._InvoiceItemList ?? (this._InvoiceItemList = new List<InvoiceItem>());
            }

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

        public virtual string ServiceUnitName
        {
            get
            {
                return this._ServiceUnitName;
            }

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

        public virtual DateTime? Start
        {
            get
            {
                return this._Start;
            }

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

        public virtual SupportConceptApprovalPeriod SupportConceptApprovalPeriod
        {
            get
            {
                return this._SupportConceptApprovalPeriod;
            }

            set
            {
                this._SupportConceptApprovalPeriod = value;
            }
        }

        public virtual Customer Customer
        {
            get
            {
                return this._Customer;
            }

            set
            {
                this._Customer = value;
            }
        }

        public virtual AccountingIntervalType? AccountingInterval { get; set; }

    }
}