private void ResolveForParties() { var documents = Application.Documents; var existingHandledDocs = new List <long>(); foreach (var request in Application.ArrangementRequests) { if (request.ProductSnapshot?.RequiredDocumentation == null) { continue; } var partyDocuments = request.ProductSnapshot.RequiredDocumentation.Where(d => d.DocumentContextKind.Equals(DocumentContextKind.PartyEnum) && Application.InvolvedParties.Count() > 0).ToList(); foreach (var document in partyDocuments) { foreach (var party in Application.InvolvedParties) { var appDocument = ApplicationDocument.FromProductDocument(document); appDocument.ApplicationId = Application.ApplicationId; appDocument.PartyId = party.PartyId; appDocument.Context = "offer/" + Application.ApplicationNumber + "/involved-parties/" + party.PartyId; if (PartyCorespondsToDocumentPartyRole(party, document)) { if (documents.Contains(appDocument)) { var existingDoc = documents.FirstOrDefault(d => d.Equals(appDocument)); existingHandledDocs.Add(existingDoc.DocumentId); } else { documents.Add(appDocument); } } } } } var deleted = documents.Where(d => d.DocumentId != 0 && !existingHandledDocs.Contains(d.DocumentId) && d.DocumentContextKind.Equals(DocumentContextKind.PartyEnum) && d.Origin.Equals(DocumentOrigin.Product)) .Select(d => d.DocumentId).ToList(); _logger.LogInformation("There are {DeletedNumber} unused documents being deleted with party document context kind", deleted.Count()); documents.RemoveAll(d => deleted.Contains(d.DocumentId)); Existing.AddRange(existingHandledDocs); Deleted.AddRange(deleted); }
private void ResolveForCollaterals() { var documents = Application.Documents; var existingHandledDocs = new List <long>(); var collateralCodes = _configurationService.GetEffective <ClassificationSchema>("collateral/classification-schemes/collateral-code").Result; foreach (var request in Application.ArrangementRequests) { if (request is FinanceServiceArrangementRequest financeRequest) { if (request.ProductSnapshot?.RequiredDocumentation == null) { _logger.LogInformation("Required documentation on product snapshot is null. Passing to the next request..."); continue; } var collateralDocuments = request.ProductSnapshot.RequiredDocumentation.Where(d => d.DocumentContextKind.Equals(DocumentContextKind.CollateralEnum) && financeRequest.CollateralRequirements != null).ToList(); _logger.LogInformation("Found {NumberOfDocuments} documents related to collaterals", collateralDocuments.Count()); foreach (var document in collateralDocuments) { foreach (var collateralRequirement in financeRequest.CollateralRequirements) { var hasCollateralKind = collateralCodes.Values .Exists(v => v.AdditionalFields.GetValueOrDefault("collateral-arrangement-code", "").Equals(collateralRequirement.CollateralArrangementCode) && v.AdditionalFields.GetValueOrDefault("collateral-kind", "").Equals(document.CollateralKind)); if (hasCollateralKind) { collateralRequirement.SecuredDealLinks = collateralRequirement.SecuredDealLinks ?? new List <SecuredDealLink>(); foreach (var deal in collateralRequirement.SecuredDealLinks) { var appDocument = ApplicationDocument.FromProductDocument(document); appDocument.ApplicationId = Application.ApplicationId; appDocument.ArrangementRequestId = request.ArrangementRequestId; appDocument.CollateralId = "" + collateralRequirement.CollateralRequirementId + "-" + deal.ArrangementNumber; appDocument.Context = "offer/" + Application.ApplicationNumber + "/arrangement-requests/" + request.ArrangementRequestId + "/collateral-arrangements/" + deal.ArrangementNumber; if (documents.Contains(appDocument)) { _logger.LogDebug("Found existing application document related to collateral."); var existingDoc = documents.FirstOrDefault(d => d.Equals(appDocument)); existingHandledDocs.Add(existingDoc.DocumentId); } else { _logger.LogDebug("Adding new application document related to collateral"); documents.Add(appDocument); } } } else { _logger.LogInformation("Collateral kind {CollateralKind} not found for collateral arrangement code {CollateralArrangementCode}", document.CollateralKind, collateralRequirement.CollateralArrangementCode); } } } } } var deleted = documents.Where(d => d.DocumentId != 0 && !existingHandledDocs.Contains(d.DocumentId) && d.DocumentContextKind.Equals(DocumentContextKind.CollateralEnum) && d.Origin.Equals(DocumentOrigin.Product)) .Select(d => d.DocumentId).ToList(); _logger.LogInformation("There are {DeletedNumber} unused documents being deleted with collateral document context kind", deleted.Count()); _logger.LogInformation("There are {ExistingNumber} existing documents with collateral document context kind", existingHandledDocs.Count()); documents.RemoveAll(d => deleted.Contains(d.DocumentId)); Existing.AddRange(existingHandledDocs); Deleted.AddRange(deleted); }