コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }