private async Task UpdateVehicleAsync(CreateOrUpdateVehicleInput input)
        {
            var vehicleDto = input.Vehicle;

            var vehicle = await _vehicleRepository.GetAsync(vehicleDto.Id.Value);

            if (vehicle.IsNullOrDeleted())
            {
                throw new AbpException("VehicleNotFound");
            }

            var valueObjects      = CreateVehicleValueObjects(input.Vehicle);
            var manufacturingInfo = valueObjects.Item1;
            var location          = valueObjects.Item2;
            var purchaseInfo      = valueObjects.Item3;
            var specs             = valueObjects.Item4;

            vehicle.SetBasicData(vehicleDto.BranchId, vehicleDto.FuelId);
            //set value objects
            vehicle.SetLocationInfo(location);
            vehicle.SetPurchaseInfo(purchaseInfo);
            vehicle.SetSpecs(specs);

            await vehicle.SetManufacturingInfo(manufacturingInfo);

            vehicle.LastModificationTime = Clock.Now;
        }
 public async Task CreateOrUpdateVehicle(CreateOrUpdateVehicleInput input)
 {
     if (!input.Vehicle.Id.HasValue)
     {
         await CreateVehicleAsync(input);
     }
     else
     {
         await UpdateVehicleAsync(input);
     }
 }
        private async Task CreateVehicleAsync(CreateOrUpdateVehicleInput input)
        {
            var vehicleDto   = input.Vehicle;
            var valueObjects = CreateVehicleValueObjects(input.Vehicle);

            var manufacturingInfo = valueObjects.Item1;
            var location          = valueObjects.Item2;
            var purchaseInfo      = valueObjects.Item3;
            var specs             = valueObjects.Item4;
            var vehicle           = await Vehicle.CreateVehicle(vehicleDto.BranchId, vehicleDto.FuelId, vehicleDto.Odometer, manufacturingInfo, purchaseInfo, location, specs);

            await _vehicleRepository.InsertAsync(vehicle);
        }