コード例 #1
0
        protected void TryResizeIfNeed(IEmployeeRelationService service)
        {
            EmployeeRelation firstRange = null;
            EmployeeRelation lastRange  = null;

            if (_Relations != null && _Relations.Count > 0)
            {
                _Relations.Sort();
                firstRange = _Relations[0];

                if (firstRange.BeginTime != BeginDate)
                {
                    firstRange.BeginTime = BeginDate;
                }
                lastRange = _Relations[_Relations.Count - 1];
                if (firstRange.EndTime != EndDate)
                {
                    firstRange.EndTime = EndDate;
                }

                if (_Relations.Count == 1)
                {
                    service.SaveOrUpdate(firstRange);
                }
                else
                {
                    service.SaveOrUpdate(firstRange);
                    service.SaveOrUpdate(lastRange);
                }
            }
            if (NextContract != null)
            {
                NextContract.TryResizeIfNeed(service);
            }
        }
コード例 #2
0
        public void CheckAndModify(EmployeeRelation relation, IEmployeeRelationService service)
        {
            if (CheckIfOutside(relation))
            {
                //relation.EndTime = relation.BeginTime.AddDays(-1);
                service.Delete(relation);
                return;
            }


            if (Include(relation))
            {
                Relations.Add(relation);
                return;
            }
            else if (DateTimeHelper.IsIntersectExc(relation.BeginTime, relation.EndTime, BeginDate, EndDate))
            {
                if (DateTimeHelper.Between(relation.BeginTime, BeginDate, EndDate))
                {
                    EmployeeRelation newrelation = relation.GetCopy();
                    newrelation.ID        = 0;
                    newrelation.BeginTime = NextDay;

                    relation.EndTime = EndDate;
                    Debug.Assert(relation.IsValidRelation());
                    Relations.Add(relation);
                    service.SaveOrUpdate(relation);
                    relation = newrelation;
                }
                else if (DateTimeHelper.Between(relation.EndTime, BeginDate, EndDate))
                {
                    EmployeeRelation newrelation = relation.GetCopy();
                    newrelation.ID      = 0;
                    newrelation.EndTime = PrevDay;

                    relation.BeginTime = BeginDate;
                    Debug.Assert(relation.IsValidRelation());

                    Relations.Add(relation);
                    service.SaveOrUpdate(relation);
                    relation = newrelation;
                }
                if (NextContract != null)
                {
                    NextContract.CheckAndModify(relation, service);
                }
            }
            else if (NextContract != null)
            {
                NextContract.CheckAndModify(relation, service);
            }
            return;
        }
コード例 #3
0
        public bool CheckIfOutside(EmployeeRelation relation)
        {
            if (NextContract == null)
            {
                return(true);
            }

            DateTime nextBeginDate = NextContract.BeginDate.AddDays(-1);

            if (DateTimeHelper.Include(relation.BeginTime, relation.EndTime, NextDay, nextBeginDate))
            {
                return(false);
            }

            return(NextContract.CheckIfOutside(relation));
        }
コード例 #4
0
        public bool CheckRelation(EmployeeRelation relation)
        {
            if (relation == null)
            {
                return(false);
            }

            if (Include(relation))
            {
                return(true);
            }

            if (NextContract != null)
            {
                return(NextContract.CheckRelation(relation));
            }


            return(false);
        }
コード例 #5
0
 public void AddContract(EmployeeContract contract)
 {
     if (EndDate < contract.ContractBegin)
     {
         if (NextDay == contract.ContractBegin)
         {
             EndDate = contract.ContractBegin;
             _Contracts.Add(contract);
         }
         else
         {
             if (NextContract == null)
             {
                 NextContract = new UnbreakContract(contract);
             }
             else
             {
                 NextContract.AddContract(contract);
             }
         }
     }
 }