using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Ease.Core;
using Ease.CoreV35;
using Ease.Core.Utility;



namespace HRM.BO
{
    #region GL
    [Serializable]
    public class GL : BasicBaseObject
    {
        

        #region Constructor
        public GL()
        {
            GLCode = string.Empty;
            GLCodeAndDescription = string.Empty;
            GLDescription = string.Empty;
            GLType = EnumGLType.Asset;
            GLHeadType=EnumGLHeadType.None;
            OwnerID = 0;
            TierNo=0;
            PositionNo = 0;
            LegacyCode=string.Empty;
            IsActive=true;
           // GLUserObjects = null;
            CreatedBy = 0;
            CreateDate=DateTime.MinValue;
            Modifiedby = 0;
            ModifiedDate = DateTime.MinValue;
            Owner = null;
        }
        #endregion

        #region Properties



        public string GLCode { get; set; }       

        #region GLCodeAndDescription
        public string GLCodeAndDescription { get; set; }
        #endregion

        #region GLDescription
        public string GLDescription { get; set; }
        
        #endregion

        #region GLType
        public EnumGLType GLType { get; set; }
        #endregion

        #region GLHeadType
        public EnumGLHeadType GLHeadType { get; set; }
        #endregion

        #region OwnerID
        public int OwnerID { get; set; }
        #endregion

        #region TierNo
        public int TierNo { get; set; }
        #endregion

        #region PositionNo
        public int PositionNo { get; set; }
        #endregion

        #region LegacyCode
        public string LegacyCode { get; set; }
        #endregion

        #region IsActive
        public bool IsActive { get; set; }
        #endregion

        #region CreatedBy
        public int CreatedBy { get; set; }
        #endregion

        #region CreateDate
        public DateTime CreateDate { get; set; }
        #endregion

        #region Modifiedby
        public int Modifiedby { get; set; }
        #endregion

        #region ModifiedDate
        public DateTime ModifiedDate { get; set; }
        #endregion

        #region Owner
        public GL Owner { get; set; }
        #endregion

        #region Children
        public GL Children { get; set; }
        #endregion

        #region Property ChildKeys : string
        public string ChildKeys { get; set; }

        #endregion


        #region GLUserObjects
        //public GLUserObjects GLUserObjects { get; set; }
        #endregion

        #endregion Properties

    }
    #endregion

    #region Service Factory
    //internal static IGLervice Service
    //    {
    //        get{return (IGLervice)LocalServices.Factory.CreateService(typeof(IGLervice)); }
    //    }
        #endregion
    
   

    

    #region IGL Service
    public interface IGLervice
    {
        int Save(GL oGL);
        void Delete(int id);

        bool IsTranExist(int id);
        GL Get(int id);
        GL Get(string code, int tierNo);
        GL Get(string code);
        GL GetOwner(int nOwnerID);

        List<GL> Get();        
        List<GL> GetByTier(int tierNo);
        List<GL> GetRoot();
        List<GL> GetByOwnerID(int nOwnerID);
        List<GL> Get(EnumGLType glType, int tierNo);
        List<GL> Get(EnumGLHeadType gLHeadType, int tierNo);
                
        void UpdatePositionNo(GL firstGL, GL secondGL);
        void UpdateHeadType(GL GL);
        List<GL> GetBySearch(string sSearch);

        DataSet GetCOA();

        List<GL> GetOrdrByDesc();
        List<GL> GetBySearchOrdrByDesc(string sSearch);
        List<GL> GetOrdrByDesc(EnumGLType glType, int tierNo);
        List<GL> GetOrdrByDesc(EnumGLHeadType gLHeadType, int tierNo);
        List<GL> GetByGLHeadType(EnumGLHeadType gLHeadType);
        List<GL> GetOrdrByDesc(int tierNo);
        List<GL> GetPostingLevelGL(int nGLID);
        
    }
    #endregion    
}