Skip to content

Commit 9b4eb68

Browse files
authored
Merge pull request #338 from bcgov/applicationscore-poc
Letter of Support
2 parents d4a41f4 + a31305f commit 9b4eb68

File tree

4 files changed

+39
-11
lines changed

4 files changed

+39
-11
lines changed

OFM.Infrastructure.Plugins/ApplicationScore/ApplicationScoreKeyValidation.cs

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,41 @@ protected override void ExecuteDataversePlugin(ILocalPluginContext localPluginCo
3333

3434
localPluginContext.Trace("Start ApplicationScoreKeyValidation Plug-in");
3535

36-
// Check if the target entity is new_ApplicationScoringParameters
36+
// Check if the target entity is ApplicationScoringParameters
3737
if (localPluginContext.PluginExecutionContext.InputParameters.Contains("Target") && localPluginContext.PluginExecutionContext.InputParameters["Target"] is Entity entity)
3838
{
39-
40-
if (entity.LogicalName != "ofm_application_score_parameter") return;
41-
var entity2 = localPluginContext.PluginUserService.Retrieve("ofm_application_score_parameter", entity.Id, new ColumnSet("ofm_comparison_operator","ofm_score", "ofm_key"));
4239
localPluginContext.Trace("ofm_application_score_parameter entity is passed");
40+
if (entity.LogicalName != "ofm_application_score_parameter") return;
41+
var entity2 = localPluginContext.PluginUserService.Retrieve("ofm_application_score_parameter", entity.Id, new ColumnSet("ofm_comparison_operator", "ofm_score", "ofm_key", "ofm_application_score_calculator"));
42+
QueryByAttribute queryIntake = new QueryByAttribute("ofm_intake");
43+
queryIntake.ColumnSet = new ColumnSet("ofm_start_date","ofm_end_date");
44+
queryIntake.AddAttributeValue("ofm_application_score_calculator", entity2.GetAttributeValue<EntityReference>("ofm_application_score_calculator")?.Id);
45+
var intakes = localPluginContext.PluginUserService.RetrieveMultiple(queryIntake);
46+
localPluginContext.Trace($"total inakes are related to application score calculator: {intakes.Entities.Count}");
47+
if (intakes.Entities.Count > 0)
48+
{
49+
50+
foreach (var intake in intakes.Entities)
51+
{
52+
if (intake.GetAttributeValue<DateTime>("ofm_start_date") == DateTime.MinValue)
53+
continue;
54+
55+
56+
if (((DateTime)intake["ofm_start_date"]) < DateTime.UtcNow && (!intake.Contains("ofm_end_date") || intake.GetAttributeValue<DateTime>("ofm_end_date") == DateTime.MinValue))
57+
{
58+
throw new InvalidPluginExecutionException("Intake for the Application Score Calculator is in progress and Application Score Parameters cannot be modified");
59+
}
60+
if (((DateTime)intake["ofm_start_date"]) < DateTime.UtcNow && intake.Contains("ofm_end_date") && intake.GetAttributeValue<DateTime>("ofm_end_date") > DateTime.UtcNow)
61+
{
62+
63+
throw new InvalidPluginExecutionException("Intake for the Application Score Calculator is in progress and Application Score Parameters cannot be modified");
64+
65+
}
66+
}
67+
}
68+
69+
70+
4371
// Extract ofm_key and ofm_comparisonoperator values
4472
string key = entity2.Contains("ofm_key") ? entity2["ofm_key"]?.ToString() : null;
4573
int? comparisonOperator = entity2.Contains("ofm_comparison_operator")

OFM.Infrastructure.WebAPI/Models/ApplicationScore/AppicationScore.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public static class DataverseQueries
1515
/// Retrieves application ID, facility, modification date, processing status, and provider type.
1616
/// </summary>
1717

18-
public const string FundingApplicationQuery = "ofm_applications({0})?$select=ofm_applicationid,_ofm_facility_value,modifiedon,ofm_score_lastprocessed,ofm_summary_submittedon,ofm_provider_type,ofm_costs_lease_start_date,ofm_costs_lease_end_date,ofm_month_to_month,ofm_costs_facility_type&$expand=ofm_document_application($select=ofm_category)";
18+
public const string FundingApplicationQuery = "ofm_applications({0})?$select=ofm_applicationid,_ofm_facility_value,modifiedon,ofm_score_lastprocessed,ofm_summary_submittedon,ofm_provider_type,ofm_costs_lease_start_date,ofm_costs_lease_end_date,ofm_month_to_month,ofm_costs_facility_type";
1919

2020
/// <summary>
2121
/// Query to fetch unprocessed submitted applications based on modification date.
@@ -70,7 +70,7 @@ public static class DataverseQueries
7070
/// Retrieves facility location, organization details, and licensing information.
7171
/// </summary>
7272

73-
public const string facilityQuery = "accounts({0})?$select=address1_city,accountid,name,address1_postalcode&$expand=ofm_facility_licence($select=ofm_acility_id_historical),parentaccountid($select=ofm_indigenous_led,accountid,accountnumber,name,ofm_business_type,ccof_typeoforganization,ofm_provider_type,ofm_is_public_sector,ofm_date_of_incorporation,ofm_open_membership,ofm_board_members_elected_unpaid,ofm_board_members_selected_membership,ofm_board_members_residents_of_bc),ccof_facility_feeregion($expand=ccof_region($expand=ccof_region_period_start,ccof_region_period_end))";
73+
public const string facilityQuery = "accounts?$select=address1_city,accountid,name,address1_postalcode&$expand=ofm_facility_licence($select=ofm_acility_id_historical),parentaccountid($select=ofm_indigenous_led,accountid,accountnumber,name,ofm_business_type,ccof_typeoforganization,ofm_provider_type,ofm_is_public_sector,ofm_date_of_incorporation,ofm_open_membership,ofm_board_members_elected_unpaid,ofm_board_members_selected_membership,ofm_board_members_residents_of_bc;$expand=ofm_document_account($select=ofm_category)),ccof_facility_feeregion($expand=ccof_region($expand=ccof_region_period_start,ccof_region_period_end))&$filter=(accountid eq {0})";
7474
/// <summary>
7575
/// Query to fetch license data for a facility.
7676
/// Retrieves ofm_licence_details such as start and end dates, facility ID, and operational spaces.
@@ -332,7 +332,7 @@ public OFMApplication(JsonObject data)
332332

333333
public DateTime? SubmittedOn => _data.GetPropertyValue<DateTime>("ofm_summary_submittedon");
334334

335-
public bool? LetterOfSupportExists => _data.GetPropertyValue<JsonArray>("ofm_document_application")?.AsArray()?.Where(x => x.AsObject().GetPropertyValue<string>("ofm_category") == "Community Support Letter")?.Any();
335+
336336
public bool? GetProcessingStatus(string defaultValue = null) => _data.GetPropertyValue<bool>("ofm_score_processing_status");
337337
}
338338
/// <summary>
@@ -384,7 +384,7 @@ public Facility(JsonObject data)
384384
public string? OrganizationLegalName => _data.GetPropertyValue<JsonObject>("parentaccountid")?.AsObject()?.GetPropertyValue<string>("name");
385385
public string? OrganizationPublicSector => _data.GetPropertyValue<JsonObject>("parentaccountid")?.AsObject()?.GetFormattedValue("ofm_is_public_sector");
386386

387-
387+
public bool? LetterOfSupportExists => _data.GetPropertyValue<JsonObject>("parentaccountid")?.GetPropertyValue<JsonArray>("ofm_document_account")?.AsArray()?.Where(x => x.AsObject().GetPropertyValue<string>("ofm_category") == "Community Support Letter")?.Any();
388388

389389
public DateTime? OrganizationDateOfIncorporation => _data.GetPropertyValue<JsonObject>("parentaccountid")?.AsObject()?.GetPropertyValue<DateTime>("ofm_date_of_incorporation");
390390
public string? OrganizationOpenMembership => _data.GetPropertyValue<JsonObject>("parentaccountid")?.AsObject()?.GetFormattedValue("ofm_open_membership");

OFM.Infrastructure.WebAPI/Services/Processes/ApplicationScore/DataverseRepository.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ public async Task<Facility> GetFacilityDataAsync(Guid facilityId)
179179
throw new Exception($"GetFacilityDataAsync(Guid {facilityId}): HTTP Failure: {responseBody}");
180180
}
181181
var json = await response.Content.ReadFromJsonAsync<JsonObject>();
182-
return new Facility(json);
182+
return new Facility(json["value"]?.AsArray()?.First()?.AsObject());
183183
}
184184

185185
public async Task<LicenseSpaces?> GetLicenseDataAsync(Guid facilityId, DateTime? submittedOn)

OFM.Infrastructure.WebAPI/Services/Processes/ApplicationScore/ScoreStrategy.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,10 +147,10 @@ public Task<bool> EvaluateAsync(IComparisonHandler comparisonHandler, ScoreParam
147147
if (string.IsNullOrEmpty(facilityData.OrganizationBoardMembersBCResidents)) throw new ArgumentException("BoardMembersBCResidents is not set to Yes/No on the Organization");
148148
if (string.IsNullOrEmpty(facilityData.OrganizationBoardMembersMembership)) throw new ArgumentException("BoardMembersEntireMembership is not set to Yes/No on the Organization");
149149
if (string.IsNullOrEmpty(facilityData.OrganizationBoardMembersUnpaid)) throw new ArgumentException("BoardMembersElectedUnpaid is not set to Yes/No on the Organization");
150-
if (facilityData.OrganizationDateOfIncorporation > DateTime.Now.AddYears(-4) && (application.LetterOfSupportExists == null || application.LetterOfSupportExists == false)) throw new ArgumentException("No Community Support letter provided as Date of Incorporation is not older than 4 years");
150+
if (facilityData.OrganizationDateOfIncorporation > DateTime.Now.AddYears(-4) && (facilityData.LetterOfSupportExists == null || facilityData.LetterOfSupportExists == false)) throw new ArgumentException("No Community Support letter provided as Date of Incorporation is not older than 4 years");
151151

152152

153-
if (facilityData.OrganizationDateOfIncorporation < DateTime.UtcNow.AddYears(-4) || application.LetterOfSupportExists == true)
153+
if (facilityData.OrganizationDateOfIncorporation < DateTime.UtcNow.AddYears(-4) || facilityData.LetterOfSupportExists == true)
154154
if (facilityData.OrganizationOpenMembership == "Yes" && facilityData.OrganizationBoardMembersUnpaid == "Yes" && facilityData.OrganizationBoardMembersMembership == "Yes" && facilityData.OrganizationBoardMembersBCResidents == "Yes")
155155
isNotForProfit = "Yes";
156156
}

0 commit comments

Comments
 (0)