using Ease.Core.Model;


using System;
using System.Collections.Generic;
using System.Data;

namespace HRM.BO
{
    public class PMPProcess : BasicBaseObject   
    {

        #region Constructor

        public PMPProcess()
        {
            PmpYear = DateTime.MinValue;
            Description = string.Empty;
            TargetSettingFrom = DateTime.MinValue;
            TargetSettingTo = DateTime.MinValue;
            MedianAppraisalFrom = DateTime.MinValue;
            MedianAppraisalTo = DateTime.MinValue;
            FinalApprovalFrom = DateTime.MinValue;
            FinalApprovalTo = DateTime.MinValue;
            IsFinalize = false;
            PmpStatus = EnumPMPStatus.NotYetInitiate;
            //DevelopmentFrom = DateTime.MinValue;
            //DevelopmentTo = DateTime.MinValue;
        }

        #endregion

        #region Properties

        #region PmpStatus

        private EnumPMPStatus _pmpStatus;

        public EnumPMPStatus PmpStatus
        {
            get { return _pmpStatus; }
            set { _pmpStatus = value; }
        }

        #endregion

        #region PMPYear : DateTime
        private DateTime _pmpYear;
        public DateTime PmpYear
        {
            get { return _pmpYear; }
            set { _pmpYear = value; }
        }
        #endregion

        #region CutOffDate: DateTime

        private DateTime? _cutOffDate;

        public DateTime? CutOffDate
        {
            get { return _cutOffDate; }
            set { _cutOffDate = value; }
        }

        #endregion

        #region IsPublish : bool

        private bool _isPublish;

        public bool IsPublish
        {
            get { return _isPublish; }
            set { _isPublish = value; }
        }

        #endregion

        #region Description : string

        private string _description;

        public string Description
        {
            get { return _description; }
            set { _description = value; }
        } 


        #endregion

        #region TargetSettingFrom : DateTime


        private DateTime _targetSettingFrom;

        public DateTime TargetSettingFrom
        {
            get { return _targetSettingFrom; }
            set { _targetSettingFrom = value; }
        }


        #endregion

        #region TargetSettingTo : DateTime

        private DateTime _targetSettingTo;

        public DateTime TargetSettingTo
        {
            get { return _targetSettingTo; }
            set { _targetSettingTo = value; }
        }
        #endregion

        #region MedianAppraisalFrom : DateTime

        private DateTime _medianAppraisalFrom;

        public DateTime MedianAppraisalFrom
        {
            get { return _medianAppraisalFrom; }
            set { _medianAppraisalFrom = value; }
        }
        #endregion

        #region MedianAppraisalTo: DateTime

        private DateTime _medianAppraisalTo;

        public DateTime MedianAppraisalTo
        {
            get { return _medianAppraisalTo; }
            set { _medianAppraisalTo = value; }
        }

        #endregion

        #region FinalApprovalFrom : DateTime

        private DateTime _finalApprovalFrom;

        public DateTime FinalApprovalFrom
        {
            get { return _finalApprovalFrom; }
            set { _finalApprovalFrom = value; }
        }

        #endregion

        #region FinalApprovalTo : DateTime

        private DateTime _finalApprovalTo;

        public DateTime FinalApprovalTo
        {
            get { return _finalApprovalTo; }
            set { _finalApprovalTo = value; }
        }

        #endregion

        #region IsFinalize : bool

        private bool _isFinalize;

        public bool IsFinalize
        {
            get { return _isFinalize; }
            set { _isFinalize = value; }
        }

        #endregion

        #region DevelopmentFrom : DateTime

        private DateTime? _DevelopmentFrom;

        public DateTime? DevelopmentFrom
        {
            get { return _DevelopmentFrom; }
            set { _DevelopmentFrom = value; }
        }

        #endregion
        #region DevelopmentTo : DateTime

        private DateTime? _DevelopmentTo;

        public DateTime? DevelopmentTo
        {
            get { return _DevelopmentTo; }
            set { _DevelopmentTo = value; }
        }

        #endregion

        #endregion
        
    }
    #region IPMPProcessService Service

    public interface IPMPProcessService
    {

        List<PMPEmployeeRating> GetEmployeeRating(int processID);
        PMPEmployeeRating GetEmployeeRating(int employeeID, int processID);
        List<PMPEmployeeRating> GetEmployeeRatingForNotInitiate(int pmpProcessId, EnumPMPStatus pmpStatus);
        List < PMPEmployeeRating > GetEmployeeRating(int pmpProcessId, EnumPMPStatus pmpStatus, PMPWFStatus status);
        List<PMPEmployeeRating> GetEmployeeRatingForDraft(int pmpProcessId);
        PMPEmployeeRating GetPMPEmployeeRatingByPMPProcessID(int id); // will not return correct value
        PMPTargetSetting GetPmpTargetSettingByPmpTargetSettingId(int Id);
        PMPValueBehaviorRating GetPmpValueBehaviorRatingById(int Id);
        List<PMPTargetSetting> GetPMPTargetSettingsByEmployeeIdAndPMPProcessID(int id, int pmpProcessID);
        PMPEmployeeRating GetPmpEmployeeRatingByEmployeeIdAndPmpProcessId(int empId, int pmpProcessId);
        PMPEmployeeRating GetPmpEmployeeRatingByRatingId(int ratingId);
        List<PMPValueBehaviorRating> GetValueBehaviorRatingsByEmployeeIdAndPmpProcessId(int empId, int pmpProcessId);

        List<PMPProcess> Get(EnumStatus status); // remove 
        List<PMPTargetSetting> GetAllPMPTargetSettings();  //remove
        PMPProcess GetPmpProcessByPmpProcesId(int id);
        PMPProcess GetByPMPProcessID(int id);
        PMPProcess Get(DateTime pmpYear);
        List<PMPProcess> GetCurrentPMPYearWithPmpStatus(EnumPMPStatus pmpStatus, bool IsFinalize);
        PMPProcess GetCurrentPMPYear(bool isFinalize);
        PMPProcess GetByYear(int pmpYear);
        int Save(PMPProcess item);

        void Update(PMPProcess item);
        void Delete(int id);
        void SaveSinglePMPEmployeeRatingObject(PMPEmployeeRating obPmpempRating);
        int SavePMPEmployeeRating(PMPEmployeeRating item);
        int SavePMPTargetSetting(PMPTargetSetting item);

        int SavePMPValueBehaviorRating(PMPValueBehaviorRating item);
        void DeletePMPTargetSettingById(int id);
        void SaveAllPMPTargetSettings(List<PMPTargetSetting> allSettings);
        void DeleteAllPmpTargetSettings(List<PMPTargetSetting> allSettings);
        void SavePMPEmployeeRatingObject(PMPEmployeeRating obPmpempRating);
        void SaveAllPMPValueBehaviorRaings(List<PMPValueBehaviorRating> allValueBehaviorRatings);

        void SavePMPValueBehaviorRatingItem(PMPValueBehaviorRating item);

        PMPProcess Get(EnumPMPStatus status);
        DataSet GetReportData(EnumPMPReports selectedReport, int PMPYearID, int locationID, string levelIDs, string designationIDs, int orgaBasicID, int programmeID, int projectID);

        DataSet GetReportData(int PmpYearYear, int EmployeeID);
    }
   
    #endregion

}