public async Task <IActionResult> Index(MaintenanceEntry entry) { if (!ModelState.IsValid) { return(View()); } try { var result = await _service.AddEntry(entry); if (result) { return(RedirectToAction(nameof(Success))); } } catch (MaintenanceEntryExistsException ex) { return(RedirectToAction(nameof(FailureMessage), new FailureMessageEntryExistsViewModel() { Amount = ex.MaintenanceEntry.Amount, TransactionId = ex.MaintenanceEntry.TransactionId, dateTime = ex.MaintenanceEntry.EntryDateTime })); } catch (ApplicationException ex) { return(RedirectToAction(nameof(ExceptionMessage), new { message = ex.Message })); } return(RedirectToAction(nameof(ExceptionMessage), new { message = "Something went wrong please retry" })); }
public async Task <MaintenanceEntryViewModel> AddMaintenanceEntryAsync(ClaimsPrincipal user, MaintenanceEntryViewModel maintenanceEntry) { var portfolioId = await GetPortfolioIdForUserAsync(user); var applicationUser = await user.GetApplicationUserAsync(Context); var maintenanceRequest = await Context.MaintenanceRequests.Include(x => x.PropertyDetails) .SingleOrDefaultAsync(c => c.PropertyDetails.PortfolioId == portfolioId && c.Id == maintenanceEntry.MaintenanceRequestId); if (maintenanceRequest != null) { var entity = new MaintenanceEntry { Created = DateTime.Now, Description = maintenanceEntry.Description, MaintenanceRequestId = maintenanceRequest.Id, Status = maintenanceEntry.Status, UserId = applicationUser.Id }; await Context.AddAsync(entity); await Context.SaveChangesAsync(); return(new MaintenanceEntryViewModel(entity) { User = new ApplicationUserViewModel(applicationUser) }); } return(null); }
public MaintenanceEntryViewModel(MaintenanceEntry maintenanceEntry) { if (maintenanceEntry == null) { return; } Id = maintenanceEntry.Id; MaintenanceRequestId = maintenanceEntry.MaintenanceRequestId; UserId = maintenanceEntry.UserId; User = new ApplicationUserViewModel(maintenanceEntry.User); Description = maintenanceEntry.Description; Status = maintenanceEntry.Status; Created = maintenanceEntry.Created; }
public async Task <MaintenanceRequestViewModel> CreateAsync(ClaimsPrincipal user, MaintenanceRequestViewModel maintenanceRequest) { var portfolioId = await GetPortfolioIdForUserAsync(user); var propertyDetailsId = await GetPropertyDetailsIdAsync(user, maintenanceRequest); var applicationUser = await user.GetApplicationUserAsync(Context); var entity = new MaintenanceRequest { Created = DateTime.Now, Description = maintenanceRequest.Description, Severity = maintenanceRequest.Severity, Title = maintenanceRequest.Title, PropertyDetailsId = propertyDetailsId }; await Context.AddAsync(entity); await Context.SaveChangesAsync(); var maintenanceEntryEntity = new MaintenanceEntry { Created = DateTime.Now, MaintenanceRequestId = entity.Id, Status = MaintenanceStatus.Open, UserId = applicationUser.Id }; await Context.AddAsync(maintenanceEntryEntity); await Context.SaveChangesAsync(); return(new MaintenanceRequestViewModel(entity, null) { Entries = new List <MaintenanceEntryViewModel> { new MaintenanceEntryViewModel(maintenanceEntryEntity) { User = new ApplicationUserViewModel(applicationUser) } } }); }
public async Task <bool> AddEntry(MaintenanceEntry entry) { if (entriesCache.Keys.Contains(entry.TransactionId)) { throw new MaintenanceEntryExistsException(entriesCache[entry.TransactionId]); } var entity = new MaintenanceEntryEntity() { Amount = entry.Amount, Block = entry.Block.ToString(), EntryDateTime = DateTime.Now, FlatNumber = entry.FlatNumber, TransactionId = entry.TransactionId }; entity.PartitionKey = partitionKey; entity.RowKey = entry.TransactionId; // upload on azure var operation = TableOperation.InsertOrMerge(entity); var result = await _table.ExecuteAsync(operation); if (result.HttpStatusCode == 204) { if (!entriesCache.TryAdd(entry.TransactionId, result.Result as MaintenanceEntryEntity)) { entriesCache[entry.TransactionId] = result.Result as MaintenanceEntryEntity; } ; } else { Console.WriteLine(result.HttpStatusCode); throw new ApplicationException($"Something went wrong " + $"please retry"); } return(true); }