예제 #1
0
        public async Task <string> Submit(IDynamicsClient dynamicsClient, ILogger logger, User user, ScreeningType screeningType, string programAreaId)
        {
            var candidate = await ObtainCandidate(dynamicsClient, logger);

            var submitter = await ObtainSubmitter(dynamicsClient, logger, user, programAreaId);

            var contact = await ObtainContact(dynamicsClient, logger);

            try
            {
                var screeningRequest = await DynamicsUtility.CreateScreeningRequestAsync(
                    dynamicsClient,
                    this,
                    candidate.Contactid,
                    submitter.SpiceMinistryemployeeid,
                    contact.SpiceMinistryemployeeid,
                    screeningType.ApplicantType,
                    screeningType.CannabisApplicantType
                    );

                logger.LogInformation("Successfully created screening request {ScreeningId} from view model {@ScreeningRequest}", screeningRequest.Incidentid, this);

                return(screeningRequest.Incidentid);
            }
            catch (OdataerrorException ex)
            {
                logger.LogError(ex, string.Join(Environment.NewLine, "Failed to create screening request incident", "{@ErrorBody}"), ex.Body);
                throw;
            }
        }
예제 #2
0
        private async Task <MicrosoftDynamicsCRMspiceMinistryemployee> ObtainContact(IDynamicsClient dynamicsClient, ILogger logger)
        {
            var contact = await DynamicsUtility.GetContactAsync(dynamicsClient, Contact);

            if (contact == null)
            {
                try
                {
                    contact = await DynamicsUtility.CreateContactAsync(dynamicsClient, Contact, ProgramArea);

                    logger.LogInformation("Successfully created contact {ContactId} from view model {@Contact}", contact.SpiceMinistryemployeeid, Contact);
                }
                catch (OdataerrorException ex)
                {
                    logger.LogError(ex, string.Join(Environment.NewLine, "Failed to create contact from view model {@Contact}", "{@ErrorBody}"), Contact, ex.Body);
                    throw;
                }
            }
            else
            {
                logger.LogInformation("Successfully retrieved existing contact {ContactId} from view model {@Contact}", contact.SpiceMinistryemployeeid, Contact);
            }

            return(contact);
        }
예제 #3
0
        private async Task <MicrosoftDynamicsCRMcontact> ObtainCandidate(IDynamicsClient dynamicsClient, ILogger logger)
        {
            var candidate = await DynamicsUtility.GetCandidateAsync(dynamicsClient, Candidate);

            if (candidate == null)
            {
                try
                {
                    candidate = await DynamicsUtility.CreateCandidateAsync(dynamicsClient, Candidate);

                    logger.LogInformation("Successfully created candidate {CandidateId} from view model {@Candidate}", candidate.Contactid, Candidate);
                }
                catch (OdataerrorException ex)
                {
                    logger.LogError(ex, string.Join(Environment.NewLine, "Failed to create candidate from view model {@Candidate}", "{@ErrorBody}"), Candidate, ex.Body);
                    throw;
                }
            }
            else
            {
                logger.LogInformation("Successfully retrieved existing candidate {CandidateId} from view model {@Candidate}", candidate.Contactid, Candidate);
            }

            return(candidate);
        }
예제 #4
0
        private async Task <MicrosoftDynamicsCRMspiceMinistryemployee> ObtainSubmitter(IDynamicsClient dynamicsClient, ILogger logger, User user, string programAreaId)
        {
            // Submitter is now a ministry employee
            Contact contact = new Contact()
            {
                Email = user.Email, FirstName = user.GivenName, LastName = user.Surname
            };

            var submitter = await DynamicsUtility.GetContactAsync(dynamicsClient, contact);

            if (submitter == null)
            {
                try
                {
                    submitter = await DynamicsUtility.CreateContactAsync(dynamicsClient, contact, programAreaId);

                    logger.LogInformation("Successfully created contact {ContactId} from view model {@Contact}", submitter.SpiceMinistryemployeeid, contact);
                }
                catch (OdataerrorException ex)
                {
                    logger.LogError(ex, string.Join(Environment.NewLine, "Failed to create contact from view model {@Contact}", "{@ErrorBody}"), contact, ex.Body);
                    throw;
                }
            }
            else
            {
                logger.LogInformation("Successfully retrieved existing contact {ContactId} from view model {@Contact}", submitter.SpiceMinistryemployeeid, contact);
            }

            return(submitter);
        }
        private async Task <MicrosoftDynamicsCRMcontact> ObtainSubmitter(IDynamicsClient dynamicsClient, ILogger logger, User user)
        {
            var submitter = await DynamicsUtility.GetSubmitterAsync(dynamicsClient, user);

            if (submitter == null)
            {
                try
                {
                    submitter = await DynamicsUtility.CreateSubmitterAsync(dynamicsClient, user);

                    logger.LogInformation("Successfully created submitter {SubmitterId} from view model {@Submitter}", submitter.Contactid, user);
                }
                catch (OdataerrorException ex)
                {
                    logger.LogError(ex, string.Join(Environment.NewLine, "Failed to create submitter from view model {@Submitter}", "{@ErrorBody}"), user, ex.Body);
                    throw;
                }
            }
            else
            {
                logger.LogInformation("Successfully retrieved existing submitter {SubmitterId} from view model {@Submitter}", submitter.Contactid, user);
            }

            return(submitter);
        }
예제 #6
0
    public BallisticProjectileControlHandler(
        ProjectileController projectileController,
        BallisticTrajectorySettings ballisticTrajectorySettings,
        Vector3?maxVelocity)
        : base(projectileController)
    {
        _ballisticTrajectorySettings = ballisticTrajectorySettings;

        _velocity = DynamicsUtility.GetBallisticVelocity(
            _projectileController.gameObject.transform.position + new Vector3(ballisticTrajectorySettings.EndPosition.x, ballisticTrajectorySettings.EndPosition.y, _projectileController.gameObject.transform.position.z),
            _projectileController.gameObject.transform.position,
            ballisticTrajectorySettings.Angle,
            ballisticTrajectorySettings.ProjectileGravity);

        if (maxVelocity.HasValue)
        {
            if (Mathf.Abs(_velocity.x) > maxVelocity.Value.x)
            {
                _velocity.x = maxVelocity.Value.x * Mathf.Sign(_velocity.x);
            }

            if (Mathf.Abs(_velocity.y) > maxVelocity.Value.y)
            {
                _velocity.y = maxVelocity.Value.y * Mathf.Sign(_velocity.y);
            }
        }
    }
예제 #7
0
        public async Task <bool> Validate(IDynamicsClient dynamicsClient, Ministry siteMinderMinistry, ProgramArea siteMinderProgramArea)
        {
            // validate nested data exists
            if (Candidate == null || Contact == null)
            {
                return(false);
            }

            // validate required properties
            var requiredProperties = new string[]
            {
                ClientMinistry,
                ProgramArea,
                ScreeningType,
                Reason,
                Candidate.FirstName,
                Candidate.LastName,
                Candidate.Email,
                Candidate.Position,
                Contact.FirstName,
                Contact.LastName,
                Contact.Email,
            };

            if (requiredProperties.Any(string.IsNullOrWhiteSpace))
            {
                return(false);
            }

            // validate range for candidate date of birth
            if (Candidate.DateOfBirth < DateTime.Today.AddYears(-100) || Candidate.DateOfBirth > DateTime.Today.AddYears(-10))
            {
                return(false);
            }

            // validate ministry and program area match the values from siteminder
            if (ClientMinistry != siteMinderMinistry.Value || ProgramArea != siteMinderProgramArea.Value)
            {
                return(false);
            }

            // validate screening type matches one of the screening types for the program area
            if (!siteMinderProgramArea.ScreeningTypes.Any(t => t.Value == ScreeningType))
            {
                return(false);
            }

            // validate screening reason matches one of the possible screening reasons
            var screeningReason = await DynamicsUtility.GetScreeningReasonAsync(dynamicsClient, Reason);

            if (screeningReason == null)
            {
                return(false);
            }

            return(true);
        }
예제 #8
0
        public async Task <bool> Validate(IDynamicsClient dynamicsClient, Ministry dynamicsMinistry, ProgramArea dynamicsProgramArea, ScreeningType dynamicsScreeningType)
        {
            // validate nested data exists
            if (Candidate == null || Contact == null)
            {
                return(false);
            }

            // validate required properties
            var requiredProperties = new string[]
            {
                ClientMinistry,
                ProgramArea,
                ScreeningType,
                Reason,
                Candidate.FirstName,
                Candidate.LastName,
                Candidate.Email,
                Candidate.Position,
                Contact.FirstName,
                Contact.LastName,
                Contact.Email,
            };

            if (requiredProperties.Any(string.IsNullOrWhiteSpace))
            {
                return(false);
            }

            // validate range for candidate date of birth
            if (Candidate.DateOfBirth < DateTime.Today.AddYears(-100) || Candidate.DateOfBirth > DateTime.Today.AddYears(-10))
            {
                return(false);
            }

            // validate submitted screening type matches an existing screening type in Dynamics which is valid for the user's org code
            if (dynamicsMinistry == null || dynamicsProgramArea == null || dynamicsScreeningType == null)
            {
                return(false);
            }

            // validate submitted ministry and program area match the associated entities in Dynamics for the submitted screening type
            if (ClientMinistry != dynamicsMinistry.Value || ProgramArea != dynamicsProgramArea.Value)
            {
                return(false);
            }

            // validate screening reason matches one of the possible screening reasons
            var screeningReason = await DynamicsUtility.GetScreeningReasonAsync(dynamicsClient, Reason);

            if (screeningReason == null)
            {
                return(false);
            }

            return(true);
        }
예제 #9
0
        public static async Task <(Ministry, ProgramArea, ScreeningType)> GetMinistryScreeningTypeAsync(
            IDynamicsClient dynamicsClient, string orgCode, string screeningTypeId)
        {
            var getMinistries     = DynamicsUtility.GetMinistriesAsync(dynamicsClient);
            var getProgramAreas   = DynamicsUtility.GetProgramAreasAsync(dynamicsClient, orgCode);
            var getScreeningTypes = DynamicsUtility.GetActiveScreeningTypesAsync(dynamicsClient);

            var screeningType = (await getScreeningTypes).SingleOrDefault(s => s.SpiceServicesid == screeningTypeId);
            var programArea   = (await getProgramAreas).SingleOrDefault(p => p.SpiceMinistryid == screeningType?._spiceMinistryserviceidValue);
            var ministry      = (await getMinistries).SingleOrDefault(m => m.SpiceGovministryid == programArea?._spiceGovministryidValue);

            return(ministry?.ToViewModel(), programArea?.ToViewModel(), screeningType?.ToViewModel());
        }
예제 #10
0
        private async Task SubmitComplaintToDynamicsAsync(Complaint complaint)
        {
            try
            {
                var result = await DynamicsUtility.CreateComplaintAsync(_dynamicsClient, complaint);

                _logger.LogInformation("Successfully created complaint {ComplaintNumber} from view model {@Complaint}", result.CsuName, complaint);
            }
            catch (OdataerrorException ex)
            {
                _logger.LogError(ex, string.Join(Environment.NewLine, "Failed to create complaint", "{@ErrorBody}"), ex.Body);
                throw;
            }
        }
예제 #11
0
    public override bool TryActivate(BaseControlHandler previousControlHandler)
    {
        var targetPosition = _enemyController.gameObject.transform.position
                             + new Vector3(
            _ballisticTrajectorySettings.EndPosition.x * _moveDirectionFactor,
            _ballisticTrajectorySettings.EndPosition.y,
            _enemyController.gameObject.transform.position.z);

        _velocity = DynamicsUtility.GetBallisticVelocity(
            targetPosition,
            _enemyController.gameObject.transform.position,
            _ballisticTrajectorySettings.Angle,
            _ballisticTrajectorySettings.ProjectileGravity);

        return(true);
    }
예제 #12
0
    public BallisticTrajectoryControlHandler(CharacterPhysicsManager characterPhysicsManager, Vector3 startPosition, Vector3 endPosition, float gravity
                                             , float angle)
        : base(characterPhysicsManager)
    {
        base.doDrawDebugBoundingBox = true;
        base.debugBoundingBoxColor  = Color.cyan;

        if (characterPhysicsManager != null)
        {
            characterPhysicsManager.onControllerBecameGrounded += (GameObject obj) =>
            {
                _keepAlive = false;
            };
        }

        _gravity  = gravity;
        _velocity = DynamicsUtility.GetBallisticVelocity(endPosition, startPosition, angle, _gravity);

        Logger.Trace("Ballistic start velocity: " + _velocity + ", (startPosition: " + startPosition + ", endPosition: " + endPosition + ", gravity: " + gravity + ", angle: " + angle + ")");
    }
예제 #13
0
    public BallisticTrajectoryControlHandler(
        CharacterPhysicsManager characterPhysicsManager,
        Vector3 startPosition,
        Vector3 endPosition,
        float gravity,
        float angle)
        : base(characterPhysicsManager)
    {
        SetDebugDraw(Color.cyan, true);

        if (characterPhysicsManager != null)
        {
            characterPhysicsManager.ControllerBecameGrounded +=
                _ => _controlHandlerUpdateStatus              = ControlHandlerAfterUpdateStatus.CanBeDisposed;
        }

        _gravity = gravity;

        _velocity = DynamicsUtility.GetBallisticVelocity(endPosition, startPosition, angle, _gravity);

        Logger.Trace("Ballistic start velocity: " + _velocity + ", (startPosition: " + startPosition + ", endPosition: " + endPosition + ", gravity: " + gravity + ", angle: " + angle + ")");
    }
예제 #14
0
        public static async Task <IEnumerable <Ministry> > GetMinistryScreeningTypesAsync(IDynamicsClient dynamicsClient)
        {
            var getMinistries     = DynamicsUtility.GetMinistriesAsync(dynamicsClient);
            var getProgramAreas   = DynamicsUtility.GetProgramAreasAsync(dynamicsClient);
            var getScreeningTypes = DynamicsUtility.GetScreeningTypesAsync(dynamicsClient);

            var screeningTypes = (await getScreeningTypes).ToList();
            var programAreas   = (await getProgramAreas).ToList();
            var ministries     = (await getMinistries).ToList();

            foreach (var programArea in programAreas)
            {
                programArea.SpiceSpiceMinistrySpiceServices =
                    screeningTypes.Where(t => t._spiceMinistryserviceidValue == programArea.SpiceMinistryid).ToList();
            }

            foreach (var ministry in ministries)
            {
                ministry.SpiceGovministrySpiceMinistry =
                    programAreas.Where(a => a._spiceGovministryidValue == ministry.SpiceGovministryid).ToList();
            }

            return(ministries.Select(m => m.ToViewModel()));
        }
예제 #15
0
 public static async Task <IEnumerable <ScreeningReason> > GetScreeningReasonsAsync(IDynamicsClient dynamicsClient)
 {
     return((await DynamicsUtility.GetScreeningReasonsAsync(dynamicsClient)).Select(a => a.ToViewModel()));
 }