public async void Submit_New_Invalid_InitiationForm_MissingItems(FormDetailModel form)
        {
            var mockFormService = new Mock <IFormService>();

            mockFormService.Setup(x => x.SubmitCustomerForm(It.IsAny <CustomerForm>())).ReturnsAsync(1);

            IMapper     mapper  = TestUtilities.GetMapper(new CustomerProfile(), new FormProfile(), new InstitutionProfile());
            FormManager manager = new FormManager(_logger, mapper, mockFormService.Object, Mock.Of <IItemService>(), Mock.Of <IIsotopeOrderingAuthorizationService>(), Mock.Of <ICustomerService>(), _eventService, Mock.Of <INotificationManager>());

            List <FormInitiationItemModel> items = new List <FormInitiationItemModel>();

            AddressDetailModel address = new Fixture().Create <AddressDetailModel>();

            address.State        = "MO";
            address.ZipCode      = "12345";
            form.InitiationModel = new FormInitiationDetailModel()
            {
                Institution = new InstitutionDetailModel()
                {
                    Id = 1
                },
                ShippingAddress = address,
                Items           = items
            };

            ApplicationResult result = await manager.SubmitInitiationForm(form);

            _output.WriteLine(result.Message);
            CustomAssertions.AssertValidationErrorsExist(result);
        }
        public async Task <ApplicationResult> SubmitInitiationForm(FormDetailModel form)
        {
            var validator           = new FormDetailModelValidator();
            ValidationResult result = await validator.ValidateAsync(form);

            if (result.IsValid)
            {
                if (form.Action == CustomerFormStatus.Approved)
                {
                    return(await ApproveInitiationForm(form.CustomerDetailFormId, form.InitiationModel !.AdminSignature));
                }
                if (form.Action == CustomerFormStatus.Denied)
                {
                    return(await DenyInitiationForm(form.Customer.Id, form.CustomerDetailFormId));
                }
                if (form.Action == CustomerFormStatus.AwaitingCustomerSupervisorApproval)
                {
                    CustomerForm customerForm   = _mapper.Map <CustomerForm>(form);
                    int          customerFormId = await _service.SubmitCustomerForm(customerForm);

                    await _eventService.CreateEvent(EntityEventType.Customer, form.Customer.Id, Events.Customer.SubmittedInitiationForm);
                    await UpdateFormStatus(form.Customer.Id, customerFormId, form.Action);

                    await _notificationManager.ProcessExternalMtaNotification(form);
                }
                return(ApplicationResult.Success("Form submitted", form.CustomerDetailFormId));
            }
            return(ApplicationResult.Error(result));
        }
Beispiel #3
0
        public async Task <bool> ProcessExternalMtaNotification(FormDetailModel form)
        {
            NotificationConfiguration notificationConfiguration = await _service.GetExternalMtaNotificationConfiguration();

            NotificationDto notificationDto = new NotificationDto(notificationConfiguration.Title);
            RecipientDto    recipientDto    = new RecipientDto()
            {
                EmailAddress = form.InitiationModel !.CustomerAdminSignature.Email,
                Name         = form.InitiationModel !.CustomerAdminSignature.PrintedName
            };

            notificationDto.AddRecipient(recipientDto);
            try {
                ExternalMtaNotification notificationModel = new ExternalMtaNotification(_settings.CurrentValue.BaseUrl, form);
                notificationDto.Body = _templateManager.GetContent(notificationConfiguration.Target, notificationConfiguration.TemplatePath, notificationModel).Result;
                int processedCount = await _service.CreateNotifications(notificationDto.ToNotifications());

                if (processedCount > 0)
                {
                    await _service.UpdateLastProcessedDate(notificationConfiguration.Id);

                    return(true);
                }
            }
            catch (Exception ex) {
                _logger.LogError(ex, "Failed to process notification configuration {notificationConfiguration}", notificationConfiguration);
            }
            return(false);
        }
        public async Task <FormDetailModel> GetInitiationForm(CustomerItemModel customer)
        {
            FormDetailModel formDetailModel = await _service.Get <FormDetailModel>(FormType.Initiation);

            formDetailModel.InitiationModel       = new FormInitiationDetailModel();
            formDetailModel.InitiationModel.Items = await _itemService.GetList <FormInitiationItemModel>();

            formDetailModel.Customer = customer;
            return(formDetailModel);
        }
        public async Task <IActionResult> InitiationForm(FormDetailModel model)
        {
            if (ModelState.IsValid)
            {
                ApplicationResult result = await _formManager.SubmitInitiationForm(model);

                SetApplicationResult(result);
                return(RedirectToAction(nameof(HomeController.Index), "Home"));
            }
            return(View(model));
        }
Beispiel #6
0
        public async void Get_Form_From_Type(Form form)
        {
            form.Type = FormType.Initiation;
            string instanceName = Guid.NewGuid().ToString();

            using (var context = TestUtilities.GetDbContext(instanceName)) {
                context.Forms.Add(form);
                await context.SaveChangesAsync();
            }
            using (var context = TestUtilities.GetDbContext(instanceName)) {
                FormService     service = new FormService(context, TestUtilities.GetMapper());
                FormDetailModel model   = await service.Get <FormDetailModel>(FormType.Initiation);

                Assert.NotNull(model);
            }
        }
        public async void Submit_Valid_InitiationForm(FormDetailModel form)
        {
            var mockFormService = new Mock <IFormService>();

            mockFormService.Setup(x => x.SubmitCustomerForm(It.IsAny <CustomerForm>())).ReturnsAsync(1);

            IMapper     mapper  = TestUtilities.GetMapper(new CustomerProfile(), new FormProfile(), new InstitutionProfile());
            FormManager manager = new FormManager(_logger, mapper, mockFormService.Object, Mock.Of <IItemService>(), Mock.Of <IIsotopeOrderingAuthorizationService>(), Mock.Of <ICustomerService>(), _eventService, Mock.Of <INotificationManager>());

            List <FormInitiationItemModel> items = new List <FormInitiationItemModel>()
            {
                new FormInitiationItemModel()
                {
                    IsSelected = true
                }
            };
            Fixture            fixture = new Fixture();
            AddressDetailModel address = fixture.Create <AddressDetailModel>();

            address.State   = "MO";
            address.ZipCode = "12345";

            ContactDetailModel contact = fixture.Create <ContactDetailModel>();

            contact.Email        = "*****@*****.**";
            contact.PhoneNumber  = "123-123-1234";
            form.InitiationModel = new FormInitiationDetailModel()
            {
                Institution = new InstitutionDetailModel()
                {
                    Name             = "Test",
                    Address          = address,
                    FinancialContact = contact,
                    SafetyContact    = contact
                },
                ShippingAddress = address,
                Items           = items
            };
            form.CustomerDetailFormId = 1;
            form.InitiationModel.CustomerAdminSignature.Email       = "*****@*****.**";
            form.InitiationModel.CustomerAdminSignature.PhoneNumber = "123-123-1234";
            ApplicationResult result = await manager.SubmitInitiationForm(form);

            _output.WriteLine(result.Message);
            CustomAssertions.AssertValidationErrorsDoNotExist(result);
        }
        private async Task UpdateCustomerFromInitiationForm(FormDetailModel form)
        {
            CustomerDetailModel customerModel = await _customerService.Get <CustomerDetailModel>(form.Customer.Id);

            FormInitiationDetailModel initiationModel = form.InitiationModel !;

            customerModel.Institutions.Add(new CustomerInstitutionDetailModel()
            {
                Institution  = initiationModel.Institution,
                Relationship = CustomerInstitutionRelationship.Primary
            });
            customerModel.Addresses.Add(new CustomerAddressDetailModel()
            {
                Address = initiationModel.ShippingAddress,
                Type    = AddressType.Shipping
            });
            customerModel.Addresses.Add(new CustomerAddressDetailModel()
            {
                Address = initiationModel.ShippingAddress,
                Type    = AddressType.Billing
            });
            customerModel.Status = CustomerStatus.Initiated;
            foreach (FormInitiationItemModel item in initiationModel.Items.Where(x => x.IsSelected))
            {
                customerModel.ItemConfigurations.Add(new ItemConfigurationDetailModel()
                {
                    ItemId        = item.Item.Id,
                    MinimumAmount = item.Item.DefaultMinQuantity,
                    MaximumAmount = item.Item.DefaultMaxQuantity,
                    Price         = item.Item.DefaultPrice.GetValueOrDefault(0)
                });
            }
            customerModel.Contact = initiationModel.Contact;
            Customer customer = _mapper.Map <Customer>(customerModel);
            await _customerService.Update(customer);
        }
 public ExternalMtaNotification(string baseUrl, FormDetailModel form)
 {
     Form    = form;
     FormUrl = baseUrl + $"Form/InitiationForm/{form.InitiationModel!.CustomerAdminSignature.Email}/{form.FormIdentifier}";
 }
        public async Task <IActionResult> InitiationForm(string supervisorEmailAddress, Guid formIdentifier, FormDetailModel model)
        {
            if (ModelState.IsValid)
            {
                ApplicationResult result = await _formManager.SubmitInitiationFormSignature(supervisorEmailAddress, formIdentifier, model.InitiationModel !.CustomerAdminSignature);

                SetApplicationResult(result);
                return(RedirectToAction(nameof(HomeController.Confirmation), "Home"));
            }
            model.AllowSignatureFromCustomerAdmin = true;
            return(View(model));
        }