コード例 #1
0
        public Contractor GetOwner(Wagon wagon)
        {
            Operation lastSale = GetLastSaleOperation(wagon);

            if (lastSale == null)
            {
                return(null);
            }
            return(GetContractorById(lastSale.ReceiverContractorID));
        }
コード例 #2
0
        public DateTime GetAvailableStartRentWithUnlimitedEnd(Wagon wagon)
        {
            DateTime today = DateTime.Today;

            //дата вступления во владение
            DateTime takePossessionDate = GetLastSaleOperation(wagon).StartDate;

            //дата когда истекает срок аренды
            DateTime?latestRentDate = GetLatestDateRentExpiresOn(wagon);

            //если срок аренды вагона уже истек или по вагону не было операций аренды, то сдать в аренду можно в день втупления во владение
            if (latestRentDate < today || !latestRentDate.HasValue)
            {
                return(takePossessionDate < today ? today : takePossessionDate);
            }

            //если срок аренды еще не истек - сдать в аренду без ограничения конечной даты можно только начиная с даты когда вагон возвращается в управление владельца
            return(latestRentDate > takePossessionDate?latestRentDate.Value.AddDays(1) : takePossessionDate);
        }
コード例 #3
0
        //получение операции, которая определяет управляющего вагоном в указанную дату
        public Operation GetActiveOperationByDate(Wagon wagon, DateTime date)
        {
            //все операции по вагону срок действия которых включает указанную дату
            List <Operation> list = _dbContext.Operations.Where(x => x.WagonID == wagon.WagonID &&
                                                                x.StartDate <= date &&
                                                                (x.EndDate == null || x.EndDate >= date))
                                    .ToList();
            //.Where(x => x.EndDate == null || x.EndDate >= date)
            //.ToList();
            //оставляем только последнюю операцию продажи
            DateTime latestSaleDate = list.Where(x => x.RentLevel == 0).Max(x => x.StartDate);

            list.RemoveAll(x => x.RentLevel == 0 && x.StartDate != latestSaleDate);

            if (list.Count == 0)
            {
                return(null);
            }
            //выбираем операцию с максимальным уровнем
            int       maxLevel        = list.Max(x => x.RentLevel);
            Operation activeOperation = list.First(x => x.RentLevel == maxLevel);

            return(activeOperation);
        }
コード例 #4
0
 public List <Operation> GetAllOperationsByWagon(Wagon wagon)
 {
     _dbContext.Operations.Where(x => x.WagonID == wagon.WagonID).Load();
     return(_dbContext.Operations.Local.Where(x => x.WagonID == wagon.WagonID).ToList());
 }
コード例 #5
0
        public List <Operation> GetNotExpiredOwnerRentsOut(Wagon wagon)
        {
            Contractor owner = GetOwner(wagon);

            return(_dbContext.Operations.Where(x => x.WagonID == wagon.WagonID && x.TransmitterContractorID == owner.ContractorID && x.EndDate >= DateTime.Today).ToList());
        }
コード例 #6
0
 public List <Operation> GetNotExpiredRents(Wagon wagon)
 {
     return(_dbContext.Operations.Where(x => x.WagonID == wagon.WagonID && x.EndDate >= DateTime.Today).ToList());
 }
コード例 #7
0
        public DateTime?GetLatestDateRentExpiresOn(Wagon wagon)
        {
            Operation rentOperation = GetListOfOperations(wagon).Where(x => GetTypeById(x.TypeID).Attribute == (int)OperationTypesAttributes.Rent).OrderByDescending(x => x.EndDate).FirstOrDefault();

            return(rentOperation?.EndDate);
        }
コード例 #8
0
 //получение операции, которая определяет последнего владельца
 public Operation GetLastSaleOperation(Wagon wagon)
 {
     return(GetListOfOperations(wagon).Where(x => x.WagonID == wagon.WagonID && x.RentLevel == 0).OrderByDescending(x => x.StartDate).FirstOrDefault());
 }
コード例 #9
0
 public List <Operation> GetListOfOperations(Wagon wagon)
 {
     return(_dbContext.Operations.Where(x => x.WagonID == wagon.WagonID).ToList());
 }