/// <summary>
        /// Метод добавляет нового или обновляет существующего агента
        /// </summary>
        public Agent AddOrUpdateAgent(Guid agentGuid, Agent agent)
        {
            if (agentGuid == Guid.Empty)
            {
                throw new InvalidDataException(string.Format("Invalid agentGuid {0}", agentGuid));
            }
            if (agent == null)
            {
                throw new InvalidDataException("Agent is null");
            }
            if (string.IsNullOrEmpty(agent.Name))
            {
                throw new InvalidDataException(string.Format("Invalid agent.Name   {0}", agent.Name));
            }
            var operations = _rightRepository.GetRights(agentGuid, EntityType.Agent);

            if (!operations.Contains(OperationType.AddOrUpdate) && !operations.Contains(OperationType.Admin))
            {
                throw new InvalidDataException(string.Format("Agent {0} cannot access to add or update {1} {2}", agentGuid, EntityType.Agent, agent.Guid));
            }
            Agent result;
            var   dt         = DateTime.UtcNow;
            var   updateList = new List <Agent>();
            var   addList    = new List <Agent>();
            var   existAgent = _dataContext.Agents.Find(agent.Id);

            if (existAgent == null)
            {
                agent.Guid       = Guid.NewGuid();
                agent.UpdateTime = dt;
                agent.CreateTime = dt;
                _dataContext.Agents.Add(agent);
                _entityRepository.AddEntity(agentGuid, agent.Guid, EntityType.Agent);
                addList.Add(agent);
                _logger.Info(string.Format("Add new agent {0}. Owner {1}", agent.Guid, agentGuid));
                result = agent;
            }
            else
            {
                if (agent.Guid == Guid.Empty)
                {
                    throw new InvalidDataException(string.Format("Invalid agent.Guid   {0}", agent.Guid));
                }
                if (!_entityRepository.Exist(agentGuid, agent.Guid, EntityType.Agent))
                {
                    throw new InvalidDataException(string.Format("Agent {0} cannot access to object {1} {2}", agentGuid, EntityType.Agent, agent.Guid));
                }
                existAgent.Name        = agent.Name;
                existAgent.Description = agent.Description;
                existAgent.UpdateTime  = dt;
                updateList.Add(existAgent);
                _logger.Info(string.Format("Update agent {0}. Owner {1}", agent.Guid, agentGuid));
                result = agent;
            }
            _dataContext.SaveChanges();
            UpdateCache(addList, updateList, new List <Agent>());
            return(result);
        }
        /// <summary>
        /// Функция добавляет новую арену и возвращает ее
        /// </summary>
        /// <param name="owner">пользователь добавляющий аренду</param>
        /// <param name="carGuid">идентификтор автомобиля</param>
        /// <param name="driverGuid">идентификатор машины</param>
        /// <returns></returns>
        public CarRental AddRental(Guid owner, Guid carGuid, Guid driverGuid)
        {
            if (owner == Guid.Empty)
            {
                throw new InvalidDataException(string.Format("Invalid owner {0}", owner));
            }
            if (carGuid == Guid.Empty)
            {
                throw new InvalidDataException(string.Format("Invalid carGuid {0}", carGuid));
            }
            if (driverGuid == Guid.Empty)
            {
                throw new InvalidDataException(string.Format("Invalid driverGuid {0}", driverGuid));
            }
            var operations = _rightRepository.GetRights(owner, EntityType.CarRental);

            if (!operations.Contains(OperationType.AddOrUpdate) && !operations.Contains(OperationType.Admin))
            {
                throw new InvalidDataException(string.Format("Agent {0} cannot access to add or update rental from car {1} by driver {2}", owner, carGuid, driverGuid));
            }
            var carsGuid = _entityRepository.GetEntitys(owner, EntityType.Car);

            if (!carsGuid.Contains(carGuid))
            {
                throw new InvalidDataException(string.Format("Agent {0} cannot access to car {1} ", owner, carGuid));
            }
            var driversGuid = _entityRepository.GetEntitys(owner, EntityType.Driver);

            if (!driversGuid.Contains(driverGuid))
            {
                throw new InvalidDataException(string.Format("Agent {0} cannot access to driver {1} ", owner, driverGuid));
            }
            var rental = new CarRental
            {
                CarGuid         = carGuid,
                DriverGuid      = driverGuid,
                StartRentalDate = DateTime.UtcNow
            };

            _dataContext.CarRentals.Add(rental);
            _dataContext.SaveChanges();
            UpdateCache(new List <CarRental> {
                rental
            }, new List <CarRental>(), new List <CarRental>());
            _logger.Info(string.Format("Agent {0} add rental to car {1} and driver {2}", owner, carGuid, driverGuid));
            return(rental);
        }
Esempio n. 3
0
        /// <summary>
        /// Метод возвращает список водителей по идентификаторам
        /// </summary>
        /// <returns></returns>
        public Driver AddOrUpdateDriver(Guid agentGuid, Driver driver)
        {
            if (agentGuid == Guid.Empty)
            {
                throw new InvalidDataException(string.Format("Invalid agentGuid {0}", agentGuid));
            }
            if (driver == null)
            {
                throw new InvalidDataException("driver is null");
            }
            if (string.IsNullOrEmpty(driver.Surname))
            {
                throw new InvalidDataException(string.Format("Invalid driver.Surname   {0}", driver.Surname));
            }
            if (string.IsNullOrEmpty(driver.Name))
            {
                throw new InvalidDataException(string.Format("Invalid driver.Name   {0}", driver.Surname));
            }
            if (driver.Birthday == DateTime.MinValue)
            {
                throw new InvalidDataException(string.Format("Invalid driver.Birthday   {0}", driver.Birthday));
            }
            var operations = _rightRepository.GetRights(agentGuid, EntityType.Driver);

            if (!operations.Contains(OperationType.AddOrUpdate) && !operations.Contains(OperationType.Admin))
            {
                throw new InvalidDataException(string.Format("Agent {0} cannot access to add or update {1} {2}", agentGuid, EntityType.Driver, driver.Guid));
            }
            Driver result;
            var    dt          = DateTime.UtcNow;
            var    updateList  = new List <Driver>();
            var    addList     = new List <Driver>();
            var    existDriver = _dataContext.Drivers.Find(driver.Id);

            if (existDriver == null)
            {
                driver.Guid       = Guid.NewGuid();
                driver.UpdateTime = dt;
                driver.CreateTime = dt;
                _dataContext.Drivers.Add(driver);
                _entityRepository.AddEntity(agentGuid, driver.Guid, EntityType.Driver);
                addList.Add(driver);
                _logger.Info(string.Format("Add new driver {0}. Owner {1}", driver.Guid, agentGuid));
                result = driver;
            }
            else
            {
                if (driver.Guid == Guid.Empty)
                {
                    throw new InvalidDataException(string.Format("Invalid driver.Guid   {0}", driver.Guid));
                }
                if (!_entityRepository.Exist(agentGuid, driver.Guid, EntityType.Driver))
                {
                    throw new InvalidDataException(string.Format("Agent {0} cannot access to object {1} {2}", agentGuid, EntityType.Driver, driver.Guid));
                }

                existDriver.Birthday             = driver.Birthday;
                existDriver.CarLicenseNumberCode = driver.CarLicenseNumberCode;
                existDriver.CarLicenseSerialCode = driver.CarLicenseSerialCode;
                existDriver.Name       = driver.Name;
                existDriver.Patronymic = driver.Patronymic;
                existDriver.Surname    = driver.Surname;
                existDriver.UpdateTime = dt;
                updateList.Add(existDriver);
                _logger.Info(string.Format("Update driver {0}. Owner {1}", driver.Guid, agentGuid));
                result = driver;
            }
            _dataContext.SaveChanges();
            UpdateCache(addList, updateList, new List <Driver>());
            return(result);
        }
        /// <summary>
        /// Метод добавляет новый или обновляет существующий автомобиль
        /// </summary>
        public Car AddOrUpdateCar(Guid agentGuid, Car car)
        {
            if (agentGuid == Guid.Empty)
            {
                throw new InvalidDataException(string.Format("Invalid agentGuid {0}", agentGuid));
            }
            if (car == null)
            {
                throw new InvalidDataException("Car is null");
            }
            if (string.IsNullOrEmpty(car.Number))
            {
                throw new InvalidDataException(string.Format("Invalid car.Number   {0}", car.Number));
            }
            var operations = _rightRepository.GetRights(agentGuid, EntityType.Car);

            if (!operations.Contains(OperationType.AddOrUpdate) && !operations.Contains(OperationType.Admin))
            {
                throw new InvalidDataException(string.Format("Agent {0} cannot access to add or update {1} {2}", agentGuid, EntityType.Car, car.Guid));
            }
            Car result;
            var dt         = DateTime.UtcNow;
            var updateList = new List <Car>();
            var addList    = new List <Car>();
            var existCar   = _dataContext.Cars.Find(car.Id);

            if (existCar == null)
            {
                car.Guid       = Guid.NewGuid();
                car.UpdateTime = dt;
                car.CreateTime = dt;
                _dataContext.Cars.Add(car);
                _entityRepository.AddEntity(agentGuid, car.Guid, EntityType.Car);
                addList.Add(car);
                _logger.Info(string.Format("Add new car {0}. Owner {1}", car.Guid, agentGuid));
                result = car;
            }
            else
            {
                if (car.Guid == Guid.Empty)
                {
                    throw new InvalidDataException(string.Format("Invalid car.Guid   {0}", car.Guid));
                }
                if (!_entityRepository.Exist(agentGuid, car.Guid, EntityType.Car))
                {
                    throw new InvalidDataException(string.Format("Agent {0} cannot access to object {1} {2}", agentGuid, EntityType.Car, car.Guid));
                }
                existCar.Number     = car.Number;
                existCar.Distance   = car.Distance;
                existCar.Make       = car.Make;
                existCar.Model      = car.Model;
                existCar.NumberCode = car.NumberCode;
                existCar.SerialCode = car.SerialCode;
                existCar.VinCode    = car.VinCode;
                existCar.UpdateTime = dt;
                updateList.Add(existCar);
                _logger.Info(string.Format("Update car {0}. Owner {1}", car.Guid, agentGuid));
                result = car;
            }
            _dataContext.SaveChanges();
            UpdateCache(addList, updateList, new List <Car>());
            return(result);
        }