Example #1
0
        public virtual CircuitStatistics GetCircuitStatistics(Circuit circuit)
        {
            var races = _raceRepository.GetRacesAllAtCircuit(circuit);

            var lastRace = races.OrderBy(x => x.StartDate).LastOrDefault(x => x.Entries.Count() > 0);
            var previousWinner = new DriverContract { Driver = new Driver() { AtomicName = "* None *", Name = "* None *" } };
            if (lastRace != null) {
                var previousWinningResult = lastRace.GetRaceResults().FirstOrDefault(x => x.Position == 1);
                if (previousWinningResult != null) {
                    previousWinner = previousWinningResult.Entrant;
                }
            }

            // Qualifying Record
            var record = decimal.MaxValue;
            var qualifyingRecordHolder = new DriverContract { Driver = new Driver() { AtomicName = "* None *", Name = "* None *" } };
            foreach (var race in races) {
                var polePosition = race.GetQualificationResults().Where(x => x.LapTime > 0).OrderBy(x => x.LapTime).FirstOrDefault();
                if (polePosition != null) {
                    if (polePosition.LapTime < record) {
                        record = polePosition.LapTime;
                        qualifyingRecordHolder = polePosition.Entrant;
                    }
                }
            }

            return new CircuitStatistics(circuit, previousWinner, record, qualifyingRecordHolder);
        }
Example #2
0
        public void ActiveContracts_does_not_contain_terminated_contracts()
        {
            var driver = FakesFactory.Driver("Driver 1");
            var driver2 = FakesFactory.Driver("Driver 2");
            var contract = new DriverContract { Id = 1, Driver = driver, SignedDate = DateTime.Parse("2010-05-01"), TerminatedDate = DateTime.Parse("2011-05-01") };
            var contract2 = new DriverContract { Id = 2, Driver = driver2, SignedDate = DateTime.Parse("2010-05-01") };
            var team = FakesFactory.Team(new List<DriverContract> { contract, contract2 });

            Assert.AreEqual(1, team.ActiveContracts.Count());
        }
        public QualifiyingStatistic(DriverContract entrant)
        {
            _totalPositions = 0;
            _totalQualifyingSessions = 0;
            _totalQualifyingSessionsWithTime = 0;
            _totalTime = 0;
            _bestLap = Decimal.MaxValue;

            Entrant = entrant;
        }
Example #4
0
        public void Drivers_contains_only_active_drivers()
        {
            var driver = FakesFactory.Driver("Driver 1");
            var driver2 = FakesFactory.Driver("Driver 2");
            var contract = new DriverContract { Id = 1, Driver = driver, SignedDate = DateTime.Parse("2010-05-01"), TerminatedDate = DateTime.Parse("2011-05-01") };
            var contract2 = new DriverContract { Id = 2, Driver = driver2, SignedDate = DateTime.Parse("2010-05-01") };
            var team = FakesFactory.Team(new List<DriverContract> { contract, contract2 });

            Assert.AreEqual(1, team.Drivers.Count());
            Assert.AreEqual(driver2.Id, team.Drivers.First().Id);
        }
Example #5
0
        public void Fire_driver_terminates_contract()
        {
            var driver = FakesFactory.Driver();
            var contract = new DriverContract { Id = 1, Driver = driver, SignedDate = DateTime.Parse("2010-05-01")};
            var team = FakesFactory.Team(new List<DriverContract> {contract});

            Assert.AreEqual(1, team.Drivers.Count());

            team.FireDriver(driver);
            //contract = team.Contracts.Single(c => c.Id == 1);

            Assert.AreEqual(0, team.Drivers.Count());
            Assert.IsNull(driver.CurrentTeam);
            Assert.IsTrue(contract.TerminatedDate.HasValue);
            Assert.IsFalse(contract.IsActive);
        }
Example #6
0
 public Champion(DriverContract entrant, string season)
 {
     Entrant = entrant;
     Season = season;
 }
        public async Task <IActionResult> SaveContract([FromBody] SaveContractRequest req)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            repository.SetTimeout(120);

            PortalUser user = await repository.AuthenticateUserToken(req.CurrentUser.UserId, req.CurrentUser.UserToken);

            if (user == null)
            {
                return(NotFound());
            }

            var existingContract = await repository.GetContractById(req.CurrentContract.ContractId);


            if (existingContract == null && req.CurrentContract.ContractId > 0)
            {
                return(NotFound());
            }
            else if (existingContract == null)
            {
                existingContract = new Contract()
                {
                    CreatedBy   = req.CurrentUser.UserName,
                    CreatedDate = DateTime.UtcNow,
                };
            }
            else if (existingContract.CompanyId != user.CompanyId)
            {
                return(NotFound());
            }

            existingContract.AccountingContractId = req.CurrentContract.AccountingContractId;
            existingContract.ContractName         = req.CurrentContract.ContractName;
            existingContract.ContractNumber       = req.CurrentContract.ContractNumber;
            if (req.CurrentContract.ContractStartDate > DateTime.MinValue)
            {
                existingContract.ContractStartDate = req.CurrentContract.ContractStartDate;
            }
            if (req.CurrentContract.ContractEndDate > DateTime.MinValue)
            {
                existingContract.ContractEndDate = req.CurrentContract.ContractEndDate;
            }
            existingContract.ResponsibleParty = req.CurrentContract.ResponsibleParty;
            existingContract.TIN             = req.CurrentContract.TIN;
            existingContract.PayrollId       = req.CurrentContract.PayrollId;
            existingContract.IsDirectDeposit = req.CurrentContract.IsDirectDeposit;
            existingContract.Is1099Vendor    = req.CurrentContract.Is1099Vendor;
            existingContract.InitialDeposit  = req.CurrentContract.InitialDeposit;
            existingContract.PercentRetained = req.CurrentContract.PercentRetained;
            existingContract.CompanyId       = user.CompanyId;
            existingContract.IsActive        = req.CurrentContract.IsActive;
            existingContract.ModifiedBy      = req.CurrentUser.UserName;
            existingContract.ModifiedDate    = DateTime.UtcNow;

            // Determine if it is an insert. If not it will be an update.
            if (req.CurrentContract.ContractId == 0)
            {
                repository.Insert(existingContract);
            }

            await repository.SaveChanges();

            Contract temp = new Contract();
            List <DriverContract> driverContracts = await repository.GetDriverContractsByContractId(existingContract.ContractId);

            List <ContractTruck> contractTrucks = await repository.GetContractTrucksByContractId(existingContract.ContractId);

            List <ContractFinanceAgreement> contractFinanceAgreement = await repository.GetContractFinanceAgreementsByContractId(existingContract.ContractId);

            foreach (AssignedDriverModel driver in req.CurrentContract.AssignedDrivers)
            {
                DriverContract existingDriverContract = await repository.GetDriverContractById(driver.DriverContractId);

                if (existingDriverContract == null && driver.DriverContractId > 0)
                {
                    // Skip this record. no longer exists or wrong data.
                    continue;
                }
                else if (existingDriverContract == null)
                {
                    existingDriverContract = new DriverContract();
                    repository.Insert(existingDriverContract);
                }

                existingDriverContract.DriverId   = driver.DriverId;
                existingDriverContract.ContractId = existingContract.ContractId;
                existingDriverContract.StartDate  = driver.StartDate;
                existingDriverContract.EndDate    = driver.EndDate;
                existingDriverContract.IsActive   = true;

                if (driver.DriverContractId == 0)
                {
                    existingDriverContract.CreatedBy   = req.CurrentUser.UserName;
                    existingDriverContract.CreatedDate = DateTime.UtcNow;
                }

                if (repository.IsChanged(existingDriverContract))
                {
                    existingDriverContract.ModifiedBy   = req.CurrentUser.UserName;
                    existingDriverContract.ModifiedDate = DateTime.UtcNow;
                }

                driverContracts.RemoveAll(x => x.DriverContractId == existingDriverContract.DriverContractId);

                temp.DriverContract.Add(existingDriverContract);
            }

            foreach (AssignedTruckModel truck in req.CurrentContract.AssignedTrucks)
            {
                ContractTruck exisingContractTruck = await repository.GetContractTruckById(truck.ContractTruckId);

                if (exisingContractTruck == null && truck.ContractTruckId > 0)
                {
                    // Skip this record. no longer exists or wrong data.
                    continue;
                }
                else if (exisingContractTruck == null)
                {
                    exisingContractTruck = new ContractTruck();
                    repository.Insert(exisingContractTruck);
                }

                exisingContractTruck.TruckId    = truck.TruckId;
                exisingContractTruck.ContractId = existingContract.ContractId;
                exisingContractTruck.StartDate  = truck.StartDate;
                exisingContractTruck.EndDate    = truck.EndDate;
                exisingContractTruck.IsActive   = true;

                if (truck.ContractTruckId == 0)
                {
                    exisingContractTruck.CreatedBy   = req.CurrentUser.UserName;
                    exisingContractTruck.CreatedDate = DateTime.UtcNow;
                }

                if (repository.IsChanged(exisingContractTruck))
                {
                    exisingContractTruck.ModifiedBy   = req.CurrentUser.UserName;
                    exisingContractTruck.ModifiedDate = DateTime.UtcNow;
                }

                contractTrucks.RemoveAll(x => x.ContractTruckId == exisingContractTruck.ContractTruckId);

                temp.ContractTruck.Add(exisingContractTruck);
            }

            foreach (AssignedFinanceAgreementModel financialAgreement in req.CurrentContract.AssignedFinanceAgreements)
            {
                ContractFinanceAgreement existingFinancialAgreement = await repository.GetContractFinanceAgreementById(financialAgreement.ContractFinanceAgreementId);

                if (existingFinancialAgreement == null && financialAgreement.ContractFinanceAgreementId > 0)
                {
                    // Skip this record. no longer exists or wrong data.
                    continue;
                }
                else if (existingFinancialAgreement == null)
                {
                    existingFinancialAgreement           = new ContractFinanceAgreement();
                    existingFinancialAgreement.CompanyId = user.CompanyId;
                    repository.Insert(existingFinancialAgreement);
                }

                existingFinancialAgreement.ContractId = existingContract.ContractId;
                existingFinancialAgreement.IsActive   = true;

                if (financialAgreement.ContractFinanceAgreementId == 0)
                {
                    existingFinancialAgreement.CreatedBy   = req.CurrentUser.UserName;
                    existingFinancialAgreement.CreatedDate = DateTime.UtcNow;
                }

                if (repository.IsChanged(existingFinancialAgreement))
                {
                    existingFinancialAgreement.ModifiedBy   = req.CurrentUser.UserName;
                    existingFinancialAgreement.ModifiedDate = DateTime.UtcNow;
                }

                existingFinancialAgreement.StartDate            = financialAgreement.StartDate;
                existingFinancialAgreement.EndDate              = (financialAgreement.EndDate ?? DateTime.MinValue);
                existingFinancialAgreement.PaymentAmount        = financialAgreement.PaymentAmount;
                existingFinancialAgreement.FinanceAgreementName = financialAgreement.FinanceAgreementName;
                existingFinancialAgreement.LoanAmount           = financialAgreement.LoanAmount;
                existingFinancialAgreement.RemainingBalance     = financialAgreement.RemainingBalance;
                var typeQuery = await repository.GetFinanceTypeByName(financialAgreement.FinanceTypeName);

                if (typeQuery == null)
                {
                    return(NotFound());
                }

                existingFinancialAgreement.FinanceTypeId = typeQuery.FinanceTypeId;

                contractFinanceAgreement.RemoveAll(x => x.ContractFinanceAgreementId == existingFinancialAgreement.ContractFinanceAgreementId);

                temp.ContractFinanceAgreement.Add(existingFinancialAgreement);
            }

            // Delete any unincluded elements in the collection.
            foreach (DriverContract driver in driverContracts)
            {
                repository.Delete(driver);
            }
            foreach (ContractTruck truck in contractTrucks)
            {
                repository.Delete(truck);
            }
            foreach (ContractFinanceAgreement financialAgreement in contractFinanceAgreement)
            {
                repository.Delete(financialAgreement);
            }

            existingContract.DriverContract           = temp.DriverContract;
            existingContract.ContractTruck            = temp.ContractTruck;
            existingContract.ContractFinanceAgreement = temp.ContractFinanceAgreement;

            repository.Ignore(existingContract);
            await repository.SaveChanges();

            return(Ok(LoadContract(existingContract)));
        }