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); } }
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; }
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)); }
public bool CheckRelation(EmployeeRelation relation) { if (relation == null) { return(false); } if (Include(relation)) { return(true); } if (NextContract != null) { return(NextContract.CheckRelation(relation)); } return(false); }
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); } } } }