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; } }
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); }
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); }
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); }
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); } } }
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); }
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); }
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()); }
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; } }
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); }
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 + ")"); }
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 + ")"); }
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())); }
public static async Task <IEnumerable <ScreeningReason> > GetScreeningReasonsAsync(IDynamicsClient dynamicsClient) { return((await DynamicsUtility.GetScreeningReasonsAsync(dynamicsClient)).Select(a => a.ToViewModel())); }