/// <summary> /// Save NRT /// </summary> /// <param name="nrtVehicle"></param> /// <returns></returns> public long SaveNrt(NrtVehicle nrtVehicle) { NrtMain nrtMainDbVersion = nrtMainRepository.Find(nrtVehicle.NrtMainId); RaStatus raStatus; if (nrtVehicle.NrtMain.NrtStatusId == 2) { raStatus = raStatusRepository.FindByStatusKey(2); } else { raStatus = raStatusRepository.FindByStatusKey(1); } if (nrtMainDbVersion == null) { //NRT Main nrtVehicle.NrtMain.IsActive = true; nrtVehicle.NrtMain.IsDeleted = nrtVehicle.NrtMain.IsPrivate = nrtVehicle.NrtMain.IsReadOnly = false; nrtVehicle.NrtMain.RecLastUpdatedBy = nrtVehicle.NrtMain.RecCreatedBy = nrtMainRepository.LoggedInUserIdentity; nrtVehicle.NrtMain.RecCreatedDt = nrtVehicle.NrtMain.RecLastUpdatedDt = DateTime.Now; nrtVehicle.NrtMain.RowVersion = 0; nrtVehicle.NrtMain.UserDomainKey = nrtMainRepository.UserDomainKey; nrtVehicle.NrtMain.NrtStatusId = raStatus != null ? raStatus.RaStatusId : raStatus.RaStatusId; nrtMainRepository.Add(nrtVehicle.NrtMain); nrtMainRepository.SaveChanges(); //Vehicle Reservation VehicleReservation vehicleReservation = new VehicleReservation(); vehicleReservation.IsActive = true; vehicleReservation.IsDeleted = vehicleReservation.IsPrivate = vehicleReservation.IsReadOnly = false; vehicleReservation.RecLastUpdatedBy = vehicleReservation.RecCreatedBy = nrtMainRepository.LoggedInUserIdentity; vehicleReservation.RecCreatedDt = vehicleReservation.RecLastUpdatedDt = DateTime.Now; vehicleReservation.RowVersion = 0; vehicleReservation.UserDomainKey = nrtMainRepository.UserDomainKey; vehicleReservation.VehicleId = nrtVehicle.VehicleId; vehicleReservation.StartDtTime = nrtVehicle.NrtMain.StartDtTime; vehicleReservation.EndDtTime = nrtVehicle.NrtMain.EndDtTime; vehicleReservation.NrtMainId = nrtVehicle.NrtMain.NrtMainId; vehicleReservationRepository.Add(vehicleReservation); vehicleReservationRepository.SaveChanges(); //NRT vehicle nrtVehicle.IsActive = true; nrtVehicle.IsDeleted = nrtVehicle.IsPrivate = nrtVehicle.IsReadOnly = false; nrtVehicle.RecLastUpdatedBy = nrtVehicle.RecCreatedBy = nrtMainRepository.LoggedInUserIdentity; nrtVehicle.RecCreatedDt = nrtVehicle.RecLastUpdatedDt = DateTime.Now; nrtVehicle.RowVersion = 0; nrtVehicle.UserDomainKey = nrtMainRepository.UserDomainKey; nrtVehicle.NrtVehicleId = nrtVehicle.VehicleId; nrtVehicle.NrtMainId = nrtVehicle.NrtMain.NrtMainId; //NRT Drivers if (nrtVehicle.NrtDrivers != null) { foreach (var item in nrtVehicle.NrtDrivers) { item.IsActive = true; item.IsDeleted = item.IsPrivate = item.IsReadOnly = false; item.RecLastUpdatedBy = item.RecCreatedBy = nrtMainRepository.LoggedInUserIdentity; item.RecCreatedDt = item.RecLastUpdatedDt = DateTime.Now; item.RowVersion = 0; item.UserDomainKey = nrtMainRepository.UserDomainKey; item.NrtVehicleId = nrtVehicle.NrtVehicleId; //Chauffer Reservation ChaufferReservation chaufferReservation = new ChaufferReservation(); chaufferReservation.IsActive = true; chaufferReservation.IsDeleted = chaufferReservation.IsPrivate = chaufferReservation.IsReadOnly = false; chaufferReservation.RecLastUpdatedBy = chaufferReservation.RecCreatedBy = nrtMainRepository.LoggedInUserIdentity; chaufferReservation.RecCreatedDt = chaufferReservation.RecLastUpdatedDt = DateTime.Now; chaufferReservation.RowVersion = 0; chaufferReservation.UserDomainKey = nrtMainRepository.UserDomainKey; chaufferReservation.ChaufferId = (item.ChaufferId ?? 0); chaufferReservation.StartDtTime = nrtVehicle.NrtMain.StartDtTime; chaufferReservation.EndDtTime = nrtVehicle.NrtMain.EndDtTime; chaufferReservation.NrtMainId = nrtVehicle.NrtMain.NrtMainId; chaufferReservationRepository.Add(chaufferReservation); chaufferReservationRepository.SaveChanges(); } } //NRT Vehicle movements if (nrtVehicle.NrtVehicleMovements != null) { foreach (var item in nrtVehicle.NrtVehicleMovements) { item.IsActive = true; item.IsDeleted = item.IsPrivate = item.IsReadOnly = false; item.RecLastUpdatedBy = item.RecCreatedBy = nrtMainRepository.LoggedInUserIdentity; item.RecCreatedDt = item.RecLastUpdatedDt = DateTime.Now; item.RowVersion = 0; item.UserDomainKey = nrtMainRepository.UserDomainKey; item.NrtVehicleId = nrtVehicle.NrtVehicleId; item.VehicleCondition = "0011111"; } } //NRT Charges if (nrtVehicle.NrtCharges != null) { foreach (var item in nrtVehicle.NrtCharges) { item.IsActive = true; item.IsDeleted = item.IsPrivate = item.IsReadOnly = false; item.RecLastUpdatedBy = item.RecCreatedBy = nrtMainRepository.LoggedInUserIdentity; item.RecCreatedDt = item.RecLastUpdatedDt = DateTime.Now; item.RowVersion = 0; item.UserDomainKey = nrtMainRepository.UserDomainKey; item.NrtVehicleId = nrtVehicle.NrtVehicleId; } } nrtVehicleRepository.Add(nrtVehicle); nrtVehicleRepository.SaveChanges(); } else { //NrtVehicle nrtVehicleDbVersion = nrtVehicleRepository.Find(nrtMainDbVersion.NrtMainId); nrtMainDbVersion.CloseLocationId = nrtVehicle.NrtMain.CloseLocationId; nrtMainDbVersion.EndDtTime = nrtVehicle.NrtMain.EndDtTime; nrtMainDbVersion.NrtStatusId = raStatus.RaStatusId; //Vehicle Reservation if (nrtMainDbVersion.VehicleReservations != null) { foreach (var item in nrtMainDbVersion.VehicleReservations) { item.EndDtTime = nrtVehicle.NrtMain.EndDtTime; } } if (nrtMainDbVersion.NrtVehicles != null) { foreach (var nrtVehicleDbVersion in nrtMainDbVersion.NrtVehicles) { #region NRT Drivers if (nrtVehicle.NrtDrivers != null) { foreach (var item in nrtVehicle.NrtDrivers) { if ( nrtVehicleDbVersion.NrtDrivers.All( x => x.NrtDriverId != item.NrtDriverId || item.NrtDriverId == 0)) { item.IsActive = true; item.IsDeleted = item.IsPrivate = item.IsReadOnly = false; item.RecLastUpdatedBy = item.RecCreatedBy = nrtMainRepository.LoggedInUserIdentity; item.RecCreatedDt = item.RecLastUpdatedDt = DateTime.Now; item.RowVersion = 0; item.UserDomainKey = nrtMainRepository.UserDomainKey; item.NrtVehicleId = nrtVehicle.NrtVehicleId; nrtVehicleDbVersion.NrtDrivers.Add(item); //Chauffer Reservation ChaufferReservation chaufferReservation = new ChaufferReservation(); chaufferReservation.IsActive = true; chaufferReservation.IsDeleted = chaufferReservation.IsPrivate = chaufferReservation.IsReadOnly = false; chaufferReservation.RecLastUpdatedBy = chaufferReservation.RecCreatedBy = nrtMainRepository.LoggedInUserIdentity; chaufferReservation.RecCreatedDt = chaufferReservation.RecLastUpdatedDt = DateTime.Now; chaufferReservation.RowVersion = 0; chaufferReservation.UserDomainKey = nrtMainRepository.UserDomainKey; chaufferReservation.ChaufferId = (item.ChaufferId ?? 0); chaufferReservation.StartDtTime = nrtVehicle.NrtMain.StartDtTime; chaufferReservation.EndDtTime = nrtVehicle.NrtMain.EndDtTime; chaufferReservation.NrtMainId = nrtVehicle.NrtMain.NrtMainId; chaufferReservationRepository.Add(chaufferReservation); chaufferReservationRepository.SaveChanges(); } } } //find missing items List <NrtDriver> missingNrtDriverItems = new List <NrtDriver>(); foreach (NrtDriver dbversionNrtDriverItem in nrtVehicleDbVersion.NrtDrivers) { if (nrtVehicle.NrtDrivers != null && nrtVehicle.NrtDrivers.All(x => x.NrtDriverId != dbversionNrtDriverItem.NrtDriverId)) { missingNrtDriverItems.Add(dbversionNrtDriverItem); } if (nrtVehicle.NrtDrivers == null) { missingNrtDriverItems.Add(dbversionNrtDriverItem); } } //remove missing items foreach (NrtDriver missingNrtDriverItem in missingNrtDriverItems) { NrtDriver dbVersionMissingItem = nrtVehicleDbVersion.NrtDrivers.First(x => x.NrtDriverId == missingNrtDriverItem.NrtDriverId); if (dbVersionMissingItem.NrtDriverId > 0) { nrtVehicleDbVersion.NrtDrivers.Remove(dbVersionMissingItem); nrtDriverRepository.Delete(dbVersionMissingItem); nrtDriverRepository.SaveChanges(); } } #endregion #region NRT Charges if (nrtVehicle.NrtCharges != null) { foreach (var item in nrtVehicle.NrtCharges) { if ( nrtVehicleDbVersion.NrtCharges.All( x => x.NrtChargeId != item.NrtChargeId || item.NrtChargeId == 0)) { item.IsActive = true; item.IsDeleted = item.IsPrivate = item.IsReadOnly = false; item.RecLastUpdatedBy = item.RecCreatedBy = nrtMainRepository.LoggedInUserIdentity; item.RecCreatedDt = item.RecLastUpdatedDt = DateTime.Now; item.RowVersion = 0; item.UserDomainKey = nrtMainRepository.UserDomainKey; item.NrtVehicleId = nrtVehicle.NrtVehicleId; nrtVehicleDbVersion.NrtCharges.Add(item); } } } //find missing items List <NrtCharge> missingNrtChargeItems = new List <NrtCharge>(); foreach (NrtCharge dbversionNrtChargeItem in nrtVehicleDbVersion.NrtCharges) { if (nrtVehicle.NrtCharges != null && nrtVehicle.NrtCharges.All(x => x.NrtChargeId != dbversionNrtChargeItem.NrtChargeId)) { missingNrtChargeItems.Add(dbversionNrtChargeItem); } if (nrtVehicle.NrtCharges == null) { missingNrtChargeItems.Add(dbversionNrtChargeItem); } } //remove missing items foreach (NrtCharge missingNrtChargeItem in missingNrtChargeItems) { NrtCharge dbVersionMissingItem = nrtVehicleDbVersion.NrtCharges.First(x => x.NrtChargeId == missingNrtChargeItem.NrtChargeId); if (dbVersionMissingItem.NrtChargeId > 0) { nrtVehicleDbVersion.NrtCharges.Remove(dbVersionMissingItem); nrtChargeRepository.Delete(dbVersionMissingItem); nrtChargeRepository.SaveChanges(); } } #endregion //NRT Vehicle movements if (nrtVehicleDbVersion.NrtVehicleMovements != null) { foreach (var vMovement in nrtVehicle.NrtVehicleMovements) { if (vMovement.MovementStatus) { bool flag = false; foreach (var item in nrtVehicleDbVersion.NrtVehicleMovements) { if (item.MovementStatus) { flag = true; item.DtTime = vMovement.DtTime; item.FuelLevel = vMovement.FuelLevel; item.Odometer = vMovement.Odometer; item.OperationsWorkPlaceId = vMovement.OperationsWorkPlaceId; item.VehicleStatusId = vMovement.VehicleStatusId; item.VehicleCondition = "0011111"; } } //in case return vehicle new add if (!flag) { vMovement.IsActive = true; vMovement.IsDeleted = vMovement.IsPrivate = vMovement.IsReadOnly = false; vMovement.RecLastUpdatedBy = vMovement.RecCreatedBy = nrtMainRepository.LoggedInUserIdentity; vMovement.RecCreatedDt = vMovement.RecLastUpdatedDt = DateTime.Now; vMovement.RowVersion = 0; vMovement.UserDomainKey = nrtMainRepository.UserDomainKey; vMovement.NrtVehicleId = nrtVehicle.NrtVehicleId; vMovement.VehicleCondition = "0011111"; nrtVehicleDbVersion.NrtVehicleMovements.Add(vMovement); } } } } } nrtMainRepository.SaveChanges(); } nrtVehicleRepository.SaveChanges(); } return(nrtVehicle.NrtMain.NrtMainId); }