예제 #1
0
        public async Task <IActionResult> Edit(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }
            CaseItemTemplate templ = await _context.CaseItemTemplates.SingleOrDefaultAsync(ci => ci.Id == id);

            templ.Options = await _context.CaseItemOptions.Where(o => o.CaseItemTemplateId == id).OrderBy(o => o.SerialNum).ToListAsync();

            if (templ == null)
            {
                return(NotFound());
            }

            CaseItemTemplateEditVM vm = new CaseItemTemplateEditVM()
            {
                ItemTemplate = templ
            };

            var resTypes = Enum.GetValues(typeof(ResponseType)).Cast <ResponseType>().Select(v => v.ToString());

            ViewData["ResponseTypeId"] = new SelectList(resTypes, templ.ResponseType.ToString());
            return(View(vm));
        }
예제 #2
0
        public async Task <IActionResult> Delete(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }
            CaseItemTemplate templ = await _context.CaseItemTemplates.SingleOrDefaultAsync(ci => ci.Id == id);

            if (templ == null)
            {
                return(NotFound());
            }
            return(View(templ));
        }
예제 #3
0
        public async Task <IActionResult> Create()
        {
            CaseItemTemplate vm = new CaseItemTemplate();
            // get the largest serial number
            int serNum = 1;

            if (_context.CaseItemTemplates.Count() > 0)
            {
                serNum = await _context.CaseItemTemplates.MaxAsync(ci => ci.SerialNum) + 1;
            }
            vm.SerialNum = serNum;
            var resTypes = Enum.GetValues(typeof(ResponseType)).Cast <ResponseType>().Select(v => v.ToString());

            ViewData["ResponseTypeId"] = new SelectList(resTypes, ResponseType.ShortText.ToString());
            return(View(vm));
        }
예제 #4
0
        public async Task <IActionResult> DeleteConfirmed(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }
            CaseItemTemplate templ = await _context.CaseItemTemplates.SingleOrDefaultAsync(ci => ci.Id == id);

            if (templ == null)
            {
                return(NotFound());
            }
            _context.CaseItemTemplates.Remove(templ);
            await _context.SaveChangesAsync();

            return(RedirectToAction(nameof(Index)).WithSuccess("Case Item Deletion done"));
        }
예제 #5
0
        public async Task <IActionResult> Create(CaseItemTemplate vm)
        {
            if (ModelState.IsValid)
            {
                _context.Add(vm);
                int numInserted = await _context.SaveChangesAsync();

                if (numInserted == 1)
                {
                    _logger.LogInformation("New Case Item Template created");

                    return(RedirectToAction(nameof(Index)).WithSuccess("New Case Item Template created"));
                }
                else
                {
                    string msg = $"New Case Item Template not created as db returned num insertions as {numInserted}";
                    _logger.LogInformation(msg);
                    //todo create custom exception
                    throw new Exception(msg);
                }
            }
            // If we got this far, something failed, redisplay form
            return(View(vm));
        }
예제 #6
0
        public async Task <IActionResult> Edit(int id, CaseItemTemplateEditVM vm)
        {
            if (ModelState.IsValid)
            {
                CaseItemTemplate templ = await _context.CaseItemTemplates.FindAsync(id);

                if (templ == null)
                {
                    return(NotFound());
                }

                // update object as per user changes
                templ.Question           = vm.ItemTemplate.Question;
                templ.ResponseType       = vm.ItemTemplate.ResponseType;
                templ.SerialNum          = vm.ItemTemplate.SerialNum;
                templ.IsResponseRequired = vm.ItemTemplate.IsResponseRequired;
                //templ.Options = vm.ItemTemplate.Options;
                try
                {
                    _context.Update(templ);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    // check if the we are trying to edit was already deleted due to concurrency
                    if (!_context.CaseItemTemplates.Any(ci => ci.Id == id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }

                // create new option if not null or blank
                string newOpt = (vm.NewOptionText ?? "").Trim();
                if (!string.IsNullOrEmpty(newOpt))
                {
                    // find the biggest serial number for this CaseItemTemplate - https://stackoverflow.com/questions/7542021/how-to-get-max-value-of-a-column-using-entity-framework
                    int maxSerNum = 1;
                    if (_context.CaseItemOptions.Count() > 0)
                    {
                        maxSerNum = _context.CaseItemOptions.Select(o => o.SerialNum).Max() + 1;
                    }
                    CaseItemOption opt = new CaseItemOption()
                    {
                        CaseItemTemplateId = id,
                        OptionText         = newOpt,
                        SerialNum          = maxSerNum
                    };

                    _context.Add(opt);
                    int numInserted = await _context.SaveChangesAsync();

                    if (numInserted == 1)
                    {
                        _logger.LogInformation("New Case Item Template Option created");
                        //return RedirectToAction(nameof(Index));
                    }
                    else
                    {
                        string msg = $"New Case Item Template Option not created as db returned num insertions as {numInserted}";
                        _logger.LogInformation(msg);
                        //todo create custom exception
                        throw new Exception(msg);
                    }
                }
                return(RedirectToAction(nameof(Index)).WithSuccess("Case Item Editing done"));
            }
            var resTypes = Enum.GetValues(typeof(ResponseType)).Cast <ResponseType>().Select(v => v.ToString());

            ViewData["ResponseTypeId"] = new SelectList(resTypes, vm.ItemTemplate.ResponseType.ToString());
            // If we got this far, something failed, redisplay form
            return(View(vm));
        }
        public async Task <IActionResult> Create(ReportingCaseCreateVM vm)
        {
            if (ModelState.IsValid)
            {
                // create a new case object
                ReportingCase newCase = new ReportingCase()
                {
                    DownTime = vm.DownTime
                };

                // add issue created by Information
                newCase.CreatedById = _userManager.GetUserId(User);
                // add case items from vm
                List <ReportingCaseItem> caseItems = new List <ReportingCaseItem>();
                for (int caseTemplIter = 0; caseTemplIter < vm.CaseItems.Count; caseTemplIter++)
                {
                    CaseItemTemplate caseItemTemplate = vm.CaseItems[caseTemplIter];
                    string           resp             = vm.Responses[caseTemplIter];
                    if (caseItemTemplate.ResponseType == ResponseType.ChoicesWithText)
                    {
                        resp = vm.ChoiceTexts[caseTemplIter] ?? resp;
                    }
                    ReportingCaseItem caseItem = new ReportingCaseItem()
                    {
                        SerialNum    = caseItemTemplate.SerialNum,
                        Question     = caseItemTemplate.Question,
                        ResponseType = caseItemTemplate.ResponseType,
                        Response     = resp
                    };
                    caseItems.Add(caseItem);
                }
                newCase.CaseItems = caseItems;

                // Getting Attachment
                IFormFile attachment = vm.Attachment;
                // Saving attachment on Server
                if (attachment != null && attachment.Length > 0)
                {
                    // create a new filename with timestamp
                    string attachmentPath = $"{DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")}_{Guid.NewGuid()}{Path.GetExtension(attachment.FileName)}";
                    string filePath       = Path.Combine(_folderPaths.AttachmentsFolder, attachmentPath);
                    using (var fileStream = new FileStream(filePath, FileMode.Create))
                    {
                        attachment.CopyTo(fileStream);
                        newCase.AttachmentName = attachment.FileName;
                        newCase.AttachmentPath = attachmentPath;
                    }
                }
                _context.Add(newCase);
                int numInserted = await _context.SaveChangesAsync();

                if (numInserted >= 1)
                {
                    _logger.LogInformation("New Case created");
                    // insert each concerned agency
                    if (!string.IsNullOrWhiteSpace(vm.ConcernedAgencyId))
                    {
                        string caseDetail = String.Join("<br>", newCase.CaseItems.Select(ci => $"{ci.Question} - {ci.Response}").ToArray());
                        foreach (string concAgId in vm.ConcernedAgencyId.Split(","))
                        {
                            IdentityUser user = await _context.Users.FindAsync(concAgId);

                            ReportingCaseConcerned concerned = new ReportingCaseConcerned()
                            {
                                ReportingCaseId = newCase.Id,
                                UserId          = user.Id
                            };
                            _context.Add(concerned);
                            numInserted = await _context.SaveChangesAsync();

                            if (numInserted == 1)
                            {
                                _logger.LogInformation("New Case Concerned agency created");
                                await _emailSender.SendEmailAsync($"{user.Email}",
                                                                  "New Issue alert",
                                                                  $"Sir/Madam,<br>You are being associated with a new issue with id <b>{newCase.Id}</b> in WRLDC issues portal." +
                                                                  "<br><br><b>Issue Details</b>" +
                                                                  $"<br>{caseDetail}" +
                                                                  "<br><br>For kind information please<br><br>Regards<br>IT WRLDC");
                            }
                            else
                            {
                                string msg = $"New Case Concerned agency not created as db returned num insertions as {numInserted}";
                                _logger.LogInformation(msg);
                                //todo create custom exception
                                throw new Exception(msg);
                            }
                        }
                        return(RedirectToAction(nameof(Index)).WithSuccess("New Issue created"));
                    }
                }
                else
                {
                    string msg = $"New Case not created as db returned num insertions as {numInserted}";
                    _logger.LogInformation(msg);
                    //todo create custom exception
                    throw new Exception(msg);
                }
            }
            return(View(vm));
        }