public async Task DeleteAddress(AddressModel currentAdrress) { if (currentAdrress != null) { Address dest = new Address { Id = currentAdrress.Id }; DbTransaction transaction = null;//_unitOfWork.BeginTransaction(); if (currentAdrress.Availabilities != null) { foreach (AvailabilityEntityModel aAvailabilityModel in currentAdrress.Availabilities) { AddressAvailability aAvailability = Mapper.Map <AvailabilityEntityModel, AddressAvailability>(aAvailabilityModel); if (aAvailability != null) { await _unitOfWork.AddressAvailabilitiesRepository.DeleteAsync(aAvailability, transaction); } } } if (currentAdrress.Facilities != null) { foreach (FacilityEntityModel aFacilityModel in currentAdrress.Facilities) { AddressFacility aFacility = Mapper.Map <FacilityEntityModel, AddressFacility>(aFacilityModel); if (aFacility != null) { await _unitOfWork.AddressFacilityRepository.DeleteAsync(aFacility, transaction); } } } if (currentAdrress.Requirements != null) { foreach (RequirementEntityModel aRequirementModel in currentAdrress.Requirements) { AddressRequirement aRequirement = Mapper.Map <RequirementEntityModel, AddressRequirement>(aRequirementModel); if (aRequirement != null) { await _unitOfWork.AddressRequirementRepository.DeleteAsync(aRequirement, transaction); } } } if (currentAdrress.Trucks != null) { foreach (TruckEntityModel aTruckModel in currentAdrress.Trucks) { AddressTruck aTruck = Mapper.Map <TruckEntityModel, AddressTruck>(aTruckModel); if (aTruck != null) { await _unitOfWork.AddressTruckRepository.DeleteAsync(aTruck, transaction); } } } await _unitOfWork.AddressesRepository.DeleteAddress(dest, transaction); // _unitOfWork.Commit(transaction); } }
public async Task <int> SaveAddress(int userId, AddressModel currentAdrress) { if (currentAdrress == null) { throw new HttpResponseException(HttpStatusCode.InternalServerError, "Error on save, model is null"); } var dest = new Address { Id = currentAdrress.Id, Name = currentAdrress.Name, CustomerId = currentAdrress.CustomerId, ContactPerson = currentAdrress.ContactPerson, Email = currentAdrress.Email, Phone = currentAdrress.Phone, Remark = currentAdrress.Remark, UserIdCreated = userId, DateCreated = currentAdrress.DateCreated, UserIdModified = currentAdrress.UserIdModified, DateModified = currentAdrress.DateModified, CommonAvailability = currentAdrress.CommonAvailability, City = currentAdrress.Location.City, Country = currentAdrress.Location.Country, Latitude = currentAdrress.Location.Latitude, Longitude = currentAdrress.Location.Longitude, CityCode = currentAdrress.Location.CityCode, CountryCode = currentAdrress.Location.CountryCode, StateCode = currentAdrress.Location.StateCode, StreetNumber = currentAdrress.Location.StreetNumber, ZipCode = currentAdrress.Location.ZipCode, Street1 = currentAdrress.Location.Street, Street2 = currentAdrress.Location.Street, StateInfo = currentAdrress.State, OpeningHours = currentAdrress.OpeningHours, ZipCodeNumeric = GetNumericZipCode(currentAdrress.Location.ZipCode) }; var transaction = _unitOfWork.BeginTransaction(); await _unitOfWork.AddressesRepository.SaveAddress(userId, dest, transaction); currentAdrress.Id = dest.Id; if (currentAdrress.Availabilities != null) { //// if all passed model has no id set, then clean existing availabilities if (currentAdrress.Availabilities.All(item => item.Id == -1)) { _unitOfWork.AddressAvailabilitiesRepository.Delete("AddressId=" + currentAdrress.Id, transaction); } foreach (var aAvailabilityModel in currentAdrress.Availabilities) { var aAvailability = new AddressAvailability { Id = aAvailabilityModel.Id, AddressId = aAvailabilityModel.EntityId, Day = aAvailabilityModel.Day, IsClosed = aAvailabilityModel.IsClosed, }; if (!string.IsNullOrEmpty(aAvailabilityModel.AmStart)) { aAvailability.AmStart = TimeSpan.Parse(aAvailabilityModel.AmStart.Length == 2 ? aAvailabilityModel.AmStart + ":00" : aAvailabilityModel.AmStart); } if (!string.IsNullOrEmpty(aAvailabilityModel.AmStop)) { aAvailability.AmStop = TimeSpan.Parse(aAvailabilityModel.AmStop.Length == 2 ? aAvailabilityModel.AmStop + ":00" : aAvailabilityModel.AmStop); } if (!string.IsNullOrEmpty(aAvailabilityModel.PmStart)) { aAvailability.PmStart = TimeSpan.Parse(aAvailabilityModel.PmStart.Length == 2 ? aAvailabilityModel.PmStart + ":00" : aAvailabilityModel.PmStart); } if (!string.IsNullOrEmpty(aAvailabilityModel.PmStop)) { aAvailability.PmStop = TimeSpan.Parse(aAvailabilityModel.PmStop.Length == 2 ? aAvailabilityModel.PmStop + ":00" : aAvailabilityModel.PmStop); } aAvailability.DateModified = DateTime.Now; aAvailability.UserIdModified = userId; if (aAvailability.Id <= 0) { if (currentAdrress.CommonAvailability) { aAvailability.Day = 0; } aAvailability.DateCreated = DateTime.Now; aAvailability.UserIdCreated = userId; aAvailability.AddressId = dest.Id; aAvailabilityModel.Id = await _unitOfWork.AddressAvailabilitiesRepository.AddAsync(aAvailability, transaction); } else { await _unitOfWork.AddressAvailabilitiesRepository.UpdateAsync(aAvailability, transaction); } } } if (currentAdrress.Facilities != null) { foreach (FacilityEntityModel aFacilityModel in currentAdrress.Facilities) { AddressFacility aFacility = Mapper.Map <FacilityEntityModel, AddressFacility>(aFacilityModel); if (aFacility != null) { aFacility.DateModified = DateTime.Now; aFacility.UserIdModified = userId; if (aFacility.Id <= 0) { aFacility.DateCreated = DateTime.Now; aFacility.AddressId = dest.Id; aFacility.UserIdCreated = userId; aFacilityModel.Id = await _unitOfWork.AddressFacilityRepository.AddAsync(aFacility, transaction); } else { await _unitOfWork.AddressFacilityRepository.UpdateAsync(aFacility, transaction); } } } } if (currentAdrress.Requirements != null) { foreach (RequirementEntityModel aRequirementModel in currentAdrress.Requirements) { AddressRequirement aRequirement = Mapper.Map <RequirementEntityModel, AddressRequirement>(aRequirementModel); if (aRequirement != null) { aRequirement.DateModified = DateTime.Now; aRequirement.UserIdModified = userId; if (aRequirement.Id <= 0) { aRequirement.DateCreated = DateTime.Now; aRequirement.AddressId = dest.Id; aRequirement.UserIdCreated = userId; aRequirementModel.Id = await _unitOfWork.AddressRequirementRepository.AddAsync(aRequirement, transaction); } else { await _unitOfWork.AddressRequirementRepository.UpdateAsync(aRequirement, transaction); } } } } if (currentAdrress.Trucks != null) { foreach (TruckEntityModel aTruckModel in currentAdrress.Trucks) { AddressTruck aTruck = Mapper.Map <TruckEntityModel, AddressTruck>(aTruckModel); if (aTruck != null) { aTruck.DateModified = DateTime.Now; aTruck.UserIdModified = userId; if (aTruck.Id <= 0) { aTruck.DateCreated = DateTime.Now; aTruck.AddressId = dest.Id; aTruck.UserIdCreated = userId; aTruckModel.Id = await _unitOfWork.AddressTruckRepository.AddAsync(aTruck, transaction); } else { await _unitOfWork.AddressTruckRepository.UpdateAsync(aTruck, transaction); } } } } _unitOfWork.Commit(transaction); return(currentAdrress.Id); }