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" }));
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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;
        }
Beispiel #4
0
        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);
        }