public async Task TransferDocuments(List <Document> documents, TaskTicket taskTicket) { await FvpWebAppUtils.ChangeTicketStatus(_dbContext, taskTicket.TaskTicketId, TicketStatus.Pending); try { var dividedDocuments = FvpWebAppUtils.DividedDataList(documents, 100); foreach (var documentPart in dividedDocuments) { await _dbContext.AddRangeAsync(documentPart).ConfigureAwait(false); await _dbContext.SaveChangesAsync().ConfigureAwait(false); } await FvpWebAppUtils.ChangeTicketStatus(_dbContext, taskTicket.TaskTicketId, TicketStatus.Done).ConfigureAwait(false); _logger.LogInformation($"Documents count: {documents.Count}"); } catch (Exception ex) { await FvpWebAppUtils.ChangeTicketStatus(_dbContext, taskTicket.TaskTicketId, TicketStatus.Failed).ConfigureAwait(false); _logger.LogError(ex.Message); } }
public async Task CheckContractors(int taskTicketId) { await FvpWebAppUtils.ChangeTicketStatus(_dbContext, taskTicketId, TicketStatus.Pending).ConfigureAwait(false); try { var token = await _apiService.ApiLogin().ConfigureAwait(false); var ueCountries = (await _dbContext.Countries.ToListAsync().ConfigureAwait(false)).Where(u => u.UE).Select(c => c.Symbol).ToList(); var allCountries = (await _apiService.GetCountriesAsync(token)).Select(c => c.Symbol); ContractorService contractorService = new ContractorService(_dbContext); var documentsContractors = await _dbContext.Contractors.Where(s => s.ContractorStatus == ContractorStatus.NotChecked).ToListAsync().ConfigureAwait(false); _logger.LogInformation($"Kontrahenci do sprawdzenia: {documentsContractors.Count}"); foreach (var documentContractor in documentsContractors) { if (documentContractor.CountryCode == "PL" || documentContractor.Firm == Firm.FirmaPolska) { var response = await CheckContractorByGusApi(FvpWebAppUtils.GetDigitsFromString(documentContractor.VatId)); await ClassificateContractor(documentContractor, response); } else if (ueCountries.Contains(documentContractor.CountryCode)) { var response = await CheckContractorByViesApi(documentContractor); await ClassificateContractor(documentContractor, response); } else if (allCountries.Contains(documentContractor.CountryCode)) { var response = new ApiResponseContractor { ApiStatus = ApiStatus.NotSupportedByApi, Contractors = new List <Contractor>() }; await ClassificateContractor(documentContractor, response); } else { var response = new ApiResponseContractor { ApiStatus = ApiStatus.NotValid, Contractors = new List <Contractor>() }; await ClassificateContractor(documentContractor, response); } } await UpdateStatusAndContractorOnDocuments(); await FvpWebAppUtils.ChangeTicketStatus(_dbContext, taskTicketId, TicketStatus.Done).ConfigureAwait(false); } catch (Exception ex) { await FvpWebAppUtils.ChangeTicketStatus(_dbContext, taskTicketId, TicketStatus.Failed).ConfigureAwait(false); _logger.LogError(ex.Message); } }
private ViesSimpleRequest ContractorViesRequest(Contractor contractor) { var suffix = FvpWebAppUtils.GetDigitsFromString(contractor.VatId); var prefix = contractor.CountryCode; return(new ViesSimpleRequest { ContractorPrefix = prefix, ContractorSuffix = suffix }); }
protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { using (IServiceScope scope = _provider.CreateScope()) { try { using (var _dbContext = scope.ServiceProvider.GetRequiredService <WorkerAppDbContext>()) { var taskTicket = await _dbContext.TaskTickets.FirstOrDefaultAsync(s => s.TicketStatus == TicketStatus.Added).ConfigureAwait(false); if (taskTicket != null) { SystemDataService systemDataService = new SystemDataService(_logger, _dbContext); var source = await _dbContext.Sources.FirstOrDefaultAsync(i => i.SourceId == taskTicket.SourceId).ConfigureAwait(false); switch (taskTicket.TicketType) { case TicketType.ImportDocuments: List <Document> documents = new List <Document>(); if (source != null) { try { switch (source.Type) { case "oracle_sben_dp": documents = await ProceedSbenOracleDpDocuments(source, taskTicket, systemDataService); break; case "bp_flat_file": await FvpWebAppUtils.ChangeTicketStatus(_dbContext, taskTicket.TaskTicketId, TicketStatus.Pending).ConfigureAwait(false); documents = await _dbContext.Documents.Where(d => d.TaskTicketId == taskTicket.TaskTicketId).ToListAsync().ConfigureAwait(false); await FvpWebAppUtils.ChangeTicketStatus(_dbContext, taskTicket.TaskTicketId, TicketStatus.Done).ConfigureAwait(false); break; default: await FvpWebAppUtils.ChangeTicketStatus(_dbContext, taskTicket.TaskTicketId, TicketStatus.Failed).ConfigureAwait(false); break; } } catch (Exception ex) { await FvpWebAppUtils.ChangeTicketStatus(_dbContext, taskTicket.TaskTicketId, TicketStatus.Failed).ConfigureAwait(false); _logger.LogError(ex.InnerException != null ? ex.InnerException.Message : ex.Message); } } else { await FvpWebAppUtils.ChangeTicketStatus(_dbContext, taskTicket.TaskTicketId, TicketStatus.Failed).ConfigureAwait(false); } _logger.LogInformation($"Documents: {documents.Count}"); try { await ProceedContractors(documents, systemDataService).ConfigureAwait(false); } catch (Exception ex) { _logger.LogError(ex.InnerException != null ? ex.InnerException.Message : ex.Message); } break; case TicketType.ImportContractors: await FvpWebAppUtils.ChangeTicketStatus(_dbContext, taskTicket.TaskTicketId, TicketStatus.Done).ConfigureAwait(false); break; case TicketType.CheckContractors: try { await systemDataService.CheckContractors(taskTicket.TaskTicketId); } catch (Exception ex) { _logger.LogError(ex.InnerException != null ? ex.InnerException.Message : ex.Message); } break; case TicketType.MatchContractors: try { var target = await _dbContext.Targets.FirstOrDefaultAsync(t => t.TargetId == source.TargetId); await systemDataService.MatchContractors(taskTicket, target); await FvpWebAppUtils.ChangeTicketStatus(_dbContext, taskTicket.TaskTicketId, TicketStatus.Done).ConfigureAwait(false); } catch (Exception ex) { await FvpWebAppUtils.ChangeTicketStatus(_dbContext, taskTicket.TaskTicketId, TicketStatus.Failed).ConfigureAwait(false); _logger.LogError(ex.InnerException != null ? ex.InnerException.Message : ex.Message); } break; case TicketType.ExportContractorsToErp: try { var target = await _dbContext.Targets.FirstOrDefaultAsync(t => t.TargetId == source.TargetId); TargetDataService targetDataService = new TargetDataService(_logger, _dbContext, _procOutput); await targetDataService.ExportContractorsToErp(taskTicket, target); await FvpWebAppUtils.ChangeTicketStatus(_dbContext, taskTicket.TaskTicketId, TicketStatus.Done).ConfigureAwait(false); } catch (Exception ex) { await FvpWebAppUtils.ChangeTicketStatus(_dbContext, taskTicket.TaskTicketId, TicketStatus.Failed).ConfigureAwait(false); _logger.LogError(ex.InnerException != null ? ex.InnerException.Message : ex.Message); } break; case TicketType.ExportDocumentsToErp: try { var target = await _dbContext.Targets.FirstOrDefaultAsync(t => t.TargetId == source.TargetId); TargetDataService targetDataService = new TargetDataService(_logger, _dbContext, _procOutput); await targetDataService.InsertDocumentsToTarget(taskTicket, target); await FvpWebAppUtils.ChangeTicketStatus(_dbContext, taskTicket.TaskTicketId, TicketStatus.Done).ConfigureAwait(false); } catch (Exception ex) { await FvpWebAppUtils.ChangeTicketStatus(_dbContext, taskTicket.TaskTicketId, TicketStatus.Failed).ConfigureAwait(false); _logger.LogError(ex.InnerException != null ? ex.InnerException.Message : ex.Message); } break; default: break; } } }; } catch (Exception ex) { _logger.LogError(ex.Message); } } await Task.Delay(5000).ConfigureAwait(false); } }
public async Task InsertDocumentsToTarget(TaskTicket taskTicket, Target target) { await FvpWebAppUtils.ChangeTicketStatus(_dbContext, taskTicket.TaskTicketId, TicketStatus.Pending).ConfigureAwait(false); C21DocumentService c21DocumentService = new C21DocumentService(GetDbSettings(target), _procOutput); //List<C21DocumentAggregate> c21DocumentAggregates = new List<C21DocumentAggregate>(); var documentsToSend = await _dbContext.Documents .Where(d => (d.DocumentStatus == DocumentStatus.Valid || d.DocumentStatus == DocumentStatus.ManyContractors || d.DocumentStatus == DocumentStatus.Accepted) && d.DocumentDate.Month == taskTicket.DateFrom.Month && d.DocumentDate.Year == taskTicket.DateFrom.Year && d.SourceId == taskTicket.SourceId).ToListAsync(); if (documentsToSend != null) { documentsToSend = documentsToSend.OrderBy(d => d.DocumentDate).ToList(); var allDocumentVats = await _dbContext.DocumentVats.Where(v => documentsToSend.Select(i => (int?)i.DocumentId).Contains(v.DocumentId)).ToListAsync(); var contractors = await _dbContext.Contractors.Where(c => c.SourceId == taskTicket.SourceId).ToListAsync(); var targetDocumentSettings = await _dbContext.TargetDocumentsSettings.FirstOrDefaultAsync(t => t.SourceId == taskTicket.SourceId); var accountingRecords = await _dbContext.AccountingRecords.Where(a => a.SourceId == taskTicket.SourceId).ToListAsync(); var source = await _dbContext.Sources.FirstOrDefaultAsync(s => s.SourceId == taskTicket.SourceId); var vatRegisters = await _dbContext.VatRegisters.Where(v => v.TargetDocumentSettingsId == targetDocumentSettings.TargetDocumentSettingsId).ToListAsync(); Console.WriteLine($"Source: {source.Description} Start prep.: {DateTime.Now}"); int docCounter = 0; int insertCounter = 0; foreach (var document in documentsToSend) { var documentAggregate = await PrepareDocumentAggregate(accountingRecords, targetDocumentSettings, contractors, allDocumentVats, vatRegisters, c21DocumentService, document, source); if (documentAggregate.IsPrepared) { //c21DocumentAggregates.Add(documentAggregate); try { await c21DocumentService.AddDocumentAggregate(documentAggregate).ConfigureAwait(false); document.DocumentStatus = DocumentStatus.SentToC2FK; _dbContext.Update(document); await _dbContext.SaveChangesAsync(); insertCounter++; } catch (Exception ex) { _logger.LogError(ex.Message); } } else { foreach (var msg in documentAggregate.Messages) { _logger.LogError($"{msg.Key}: {msg.Value}"); } } docCounter++; if (insertCounter >= 300 || docCounter == documentsToSend.Count) { c21DocumentService.ProceedDocumentsAsync(docCounter, taskTicket.TaskTicketId); Console.WriteLine($"Added documents: {insertCounter} End: {DateTime.Now}"); insertCounter = 0; } } Console.WriteLine($"Source: {source.Description} End prep.: {DateTime.Now} Documents: {docCounter}"); } }
public async Task ExportContractorsToErp(TaskTicket taskTicket, Target target) { var countries = await _dbContext.Countries.ToListAsync().ConfigureAwait(false); await FvpWebAppUtils.ChangeTicketStatus(_dbContext, taskTicket.TaskTicketId, TicketStatus.Pending); var allSourcesFromTarget = await _dbContext.Sources.Where(s => s.TargetId == target.TargetId).Select(i => i.SourceId).ToListAsync(); var notMatchedContractors = await _dbContext.Contractors.Where( c => c.ContractorErpId == null && c.ContractorErpPosition == null && //c.GusContractorEntriesCount == 1 && (c.ContractorStatus == ContractorStatus.Valid || c.ContractorStatus == ContractorStatus.Accepted) && c.SourceId == taskTicket.SourceId).ToListAsync().ConfigureAwait(false); var c21Contractors = notMatchedContractors.GroupBy(c => new { ContractorId = c.ContractorId, VatId = string.IsNullOrEmpty(c.VatId) || c.VatId.ToUpper() == "BRAK" ? "" : c.VatId, Regon = string.IsNullOrEmpty(c.Regon) ? "" : c.Regon, Name = string.IsNullOrEmpty(c.Name) ? "" : c.Name, Street = string.IsNullOrEmpty(c.Street) ? "" : c.Street, EstateNumber = string.IsNullOrEmpty(c.EstateNumber) ? "" : c.EstateNumber, QuartersNumber = string.IsNullOrEmpty(c.QuartersNumber) ? "" : c.QuartersNumber, City = string.IsNullOrEmpty(c.City) ? "" : c.City, CountryCode = string.IsNullOrEmpty(c.CountryCode) ? "" : c.CountryCode, PostalCode = string.IsNullOrEmpty(c.PostalCode) ? "" : c.PostalCode, Province = string.IsNullOrEmpty(c.Province) ? "" : c.Province, Phone = string.IsNullOrEmpty(c.Phone) ? "" : c.Phone, Email = string.IsNullOrEmpty(c.Email) ? "" : c.Email, }).Select(c => new C21Contractor { nip = c.Key.VatId, Regon = c.Key.Regon, nazwa = FvpWebAppUtils.TruncateToLength(c.Key.Name, 100), ulica = FvpWebAppUtils.TruncateToLength(c.Key.Street.Replace("ul. ", "").Replace("UL. ", ""), 35), numerDomu = c.Key.EstateNumber, numerMieszk = c.Key.QuartersNumber, Miejscowosc = FvpWebAppUtils.TruncateToLength(c.Key.City, 40), rejon = c.Key.Province.ToLower(), Kraj = c.Key.CountryCode, kod = FvpWebAppUtils.TruncateToLength(c.Key.PostalCode, 10), Telefon1 = c.Key.Phone, email = c.Key.Email, aktywny = true, skrot = $"FVP-{taskTicket.SourceId}-{c.Key.ContractorId}", statusUE = FvpWebAppUtils.CheckUeCountry(countries, c.Key.CountryCode), }).ToList(); C21ContractorService c21ContractorService = new C21ContractorService(GetDbSettings(target)); await c21ContractorService.AddContractorsAsync(c21Contractors); var output = await c21ContractorService.ProceedContractorsAsync(); string outputData = ""; foreach (var item in output) { outputData += "; " + item; } Console.WriteLine(outputData); SystemDataService systemDataService = new SystemDataService(_logger, _dbContext); await systemDataService.MatchContractors(taskTicket, target); }
public async Task <C21DocumentAggregate> PrepareDocumentAggregate( List <AccountingRecord> accountingRecords, TargetDocumentSettings targetDocumentSettings, List <Contractor> contractors, List <DocumentVat> allDocumentVats, List <VatRegister> vatRegisters, C21DocumentService c21DocumentService, Document document, Source source) { C21DocumentAggregate c21DocumentAggregate = new C21DocumentAggregate(); var documentVats = allDocumentVats.Where(v => v.DocumentId == document.DocumentId).ToList(); if (accountingRecords == null) { c21DocumentAggregate.IsPrepared = false; c21DocumentAggregate.Messages.Add(new KeyValuePair <string, string>("Zapisy księgowe", "Brak konfiguracji zapisów księgowych")); return(c21DocumentAggregate); } if (targetDocumentSettings == null) { c21DocumentAggregate.IsPrepared = false; c21DocumentAggregate.Messages.Add(new KeyValuePair <string, string>("Konfiguracja dokumentu", $"Nie skonfigurowano typu dokumentu dla tego źródła danych: {source.Description}")); return(c21DocumentAggregate); } var c21documentId = 1000;//await c21DocumentService.GetNextDocumentId(1000); var year = await c21DocumentService.GetYearId(document.SaleDate); if (year == null) { Console.WriteLine($"Brak roku w FK dla dokumentu z tego okresu."); } var docTypDef = await c21DocumentService.GetDocumentDefinition(targetDocumentSettings.DocumentShortcut, year.rokId); if (docTypDef == null) { Console.WriteLine($"Brak definicji dokumentu w FK dla dokumentu z tego okresu. ({document.DocumentNumber})"); } var vatRegisterDef = await c21DocumentService.GetVatRegistersDefs(docTypDef.rejestr); var contractor = contractors.FirstOrDefault(c => c.ContractorId == document.ContractorId); if (year != null && contractor != null && vatRegisterDef != null) { var street = !string.IsNullOrEmpty(contractor.Street) ? contractor.Street.Replace("UL. ", "").Replace("ul. ", "") : ""; c21DocumentAggregate.Document = new C21Document { id = c21documentId, rokId = year.rokId, skrot = targetDocumentSettings.DocumentShortcut, kontrahent = contractor.ContractorErpPosition, nazwa = document.DocumentNumber, tresc = document.DocumentNumber, datawpr = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day), datadok = document.DocumentDate, dataOper = document.SaleDate, kwota = Convert.ToDouble(document.Gross), sygnatura = string.Empty, kontoplatnosci = string.Empty, atrJpkV7 = document.JpkV7, DaneKh = 0, //contractor.ContractorErpPosition == null ? 1 : 0, kh_nazwa = string.IsNullOrEmpty(contractor.Name) ? "" : contractor.Name.Length <= 150 ? contractor.Name : contractor.Name.Substring(0, 150), kh_ulica = string.IsNullOrEmpty(street) ? "" : street.Length <= 50 ? street : street.Substring(0, 50), kh_dom = contractor.EstateNumber, kh_lokal = contractor.QuartersNumber, kh_nip = contractor.VatId, kh_kodPocztowy = FvpWebAppUtils.TruncateToLength(contractor.PostalCode, 10), kh_miejscowosc = string.IsNullOrEmpty(contractor.City) ? "" : contractor.City.Length <= 50 ? contractor.City : contractor.City.Substring(0, 50), kh_kraj = contractor.CountryCode }; var nextAccountingRecordId = 1000; foreach (var accountingRecord in accountingRecords) { if (GetRecordAmmount(document, accountingRecord) != 0) { c21DocumentAggregate.AccountingRecords.Add(new C21AccountingRecord { id = nextAccountingRecordId, dokId = c21documentId, pozycja = 0, rozbicie = (short)(accountingRecord.RecordOrder - 1), strona = !string.IsNullOrEmpty(accountingRecord.Debit) ? (short)0 : (short)1, kwota = GetRecordAmmount(document, accountingRecord), opis = document.DocumentNumber, synt = GetAccountPart(accountingRecord.Account, 0), poz1 = GetAccountPart(accountingRecord.Account, 1), poz2 = GetAccountPart(accountingRecord.Account, 2), poz3 = GetAccountPart(accountingRecord.Account, 3), poz4 = GetAccountPart(accountingRecord.Account, 4), poz5 = GetAccountPart(accountingRecord.Account, 5), }); } nextAccountingRecordId++; } var nextVatRegisterId = 1000; foreach (var documentVat in documentVats) { var vatRegister = GetVatRegisterIdForVat(GetVatValue(documentVat), vatRegisters); c21DocumentAggregate.VatRegisters.Add(new C21VatRegister { id = nextVatRegisterId, dokId = c21documentId, rejId = vatRegister > 0 ? vatRegister : vatRegisterDef.id, okres = document.SaleDate, Oczek = 0, abc = vatRegisterDef.defAbc, nienaliczany = 0, stawka = GetVatValue(documentVat), netto = Convert.ToDouble(documentVat.NetAmount), brutto = Convert.ToDouble(documentVat.GrossAmount), vat = Convert.ToDouble(documentVat.VatAmount), atrJpkV7 = documentVat.VatTags }); nextVatRegisterId++; } } c21DocumentAggregate.IsPrepared = true; return(c21DocumentAggregate); }
public async Task MatchContractors(TaskTicket taskTicket, Target target) { await FvpWebAppUtils.ChangeTicketStatus(_dbContext, taskTicket.TaskTicketId, TicketStatus.Pending); var c21ConnectionSettings = new DbConnectionSettings( target.DatabaseAddress, target.DatabaseUsername, target.DatabasePassword, target.DatabaseName); C21ContractorService contractorService = new C21ContractorService(c21ConnectionSettings); var erpContractors = await contractorService.GetC21FvpContractorsAsync(false).ConfigureAwait(false); erpContractors.Where(c => (c.Country == "PL" || string.IsNullOrEmpty(c.Country)) && c.VatId.ToUpper() != "BRAK").ToList().ForEach(c => c.VatId = FvpWebAppUtils.GetDigitsFromString(c.VatId)); var allSourcesFromTarget = await _dbContext.Sources.Where(s => s.TargetId == target.TargetId).Select(i => i.SourceId).ToListAsync(); var contractors = await _dbContext.Contractors.Where( c => //c.ContractorErpId == null && c.SourceId == taskTicket.SourceId //&& //only contractors from specific source //(c.ContractorStatus == ContractorStatus.Valid || c.ContractorStatus == ContractorStatus.Accepted) //all ).ToListAsync().ConfigureAwait(false); contractors.ForEach(c => { c.ContractorErpId = null; c.ContractorErpPosition = null; }); // remove all previous agreements if (contractors != null && contractors.Count > 0) { Console.WriteLine("Matching contractors..."); foreach (var contractor in contractors) { string vatId = contractor.VatId; if (vatId.ToUpper() != "BRAK") { if (contractor.CountryCode == "PL") { vatId = FvpWebAppUtils.GetDigitsFromString(contractor.VatId); } var erpcontractor = erpContractors.FirstOrDefault(c => c.VatId == vatId && c.Active && c.Name == contractor.Name); if (erpcontractor == null) { erpcontractor = erpContractors.FirstOrDefault(c => c.VatId == vatId && c.Active); } if (erpcontractor == null) { erpcontractor = erpContractors.FirstOrDefault(c => c.VatId == vatId && !c.Active && c.Name == contractor.Name); } if (erpcontractor == null) { erpcontractor = erpContractors.FirstOrDefault(c => c.VatId == vatId && !c.Active); } if (erpcontractor != null) { contractor.ContractorErpId = erpcontractor.Id; contractor.ContractorErpPosition = erpcontractor.FkId; } } else { var shortcut = $"FVP-{taskTicket.SourceId}-{contractor.ContractorId}"; var erpcontractor = erpContractors.FirstOrDefault(c => c.Shortcut == shortcut); if (erpcontractor != null) { contractor.ContractorErpId = erpcontractor.Id; contractor.ContractorErpPosition = erpcontractor.FkId; } if (erpcontractor == null) { erpcontractor = erpContractors.FirstOrDefault(c => c.Active && c.Name.ToUpper() == contractor.Name.ToUpper()); } if (erpcontractor != null) { contractor.ContractorErpId = erpcontractor.Id; contractor.ContractorErpPosition = erpcontractor.FkId; } } } try { _dbContext.UpdateRange(contractors); await _dbContext.SaveChangesAsync(); Console.WriteLine("Contactors matched!"); } catch (Exception ex) { await FvpWebAppUtils.ChangeTicketStatus(_dbContext, taskTicket.TaskTicketId, TicketStatus.Failed); _logger.LogError(ex.Message); } } }
private async Task UpdateStatusAndContractorOnDocuments() { var contractors = await _dbContext.Contractors.ToListAsync().ConfigureAwait(false); if (contractors != null && contractors.Count > 0) { try { var documents = await _dbContext.Documents.Where(c => c.ContractorId == null || c.ContractorId == 0).ToListAsync().ConfigureAwait(false); if (documents != null && documents.Count > 0) { foreach (var document in documents) { //If digits present if (FvpWebAppUtils.GetDigitsFromString(document.DocContractorVatId).Length > 3) { //Find by name var matchedContractors = contractors.Where(c => c.Name == document.DocContractorName && FvpWebAppUtils.GetDigitsFromString(c.VatId) == FvpWebAppUtils.GetDigitsFromString(document.DocContractorVatId) && c.SourceId == document.SourceId).ToList(); //If not found by name - find by DocContractorId if (matchedContractors == null || matchedContractors.Count == 0) { matchedContractors = contractors.Where(c => c.ContractorSourceId == document.DocContractorId && c.SourceId == document.SourceId).ToList(); } if (matchedContractors != null && matchedContractors.Count > 0) { document.ContractorId = matchedContractors[0].ContractorId; //set contractor } //Update document status depending on the contractor status if (matchedContractors != null && matchedContractors.Count == 1 && (matchedContractors[0].ContractorStatus == ContractorStatus.Valid || matchedContractors[0].ContractorStatus == ContractorStatus.Accepted)) { document.DocumentStatus = DocumentStatus.Valid; } else if (matchedContractors != null && matchedContractors.Count == 1 && matchedContractors[0].ContractorStatus == ContractorStatus.Invalid) { document.DocumentStatus = DocumentStatus.Invalid; } else if (matchedContractors != null && matchedContractors.Count > 1) { document.DocumentStatus = DocumentStatus.ManyContractors; } } else { //If digits not present find by name only var matchedContractors = contractors.Where(c => c.Name.ToUpper() == document.DocContractorName.ToUpper() && c.SourceId == document.SourceId).ToList(); if (matchedContractors != null && matchedContractors.Count > 0) { document.ContractorId = matchedContractors[0].ContractorId; //set contractor } //Update document status depending on the contractor status if (matchedContractors != null && matchedContractors.Count == 1 && (matchedContractors[0].ContractorStatus == ContractorStatus.Valid || matchedContractors[0].ContractorStatus == ContractorStatus.Accepted)) { document.DocumentStatus = DocumentStatus.Valid; } else if (matchedContractors != null && matchedContractors.Count == 1 && matchedContractors[0].ContractorStatus == ContractorStatus.Invalid) { document.DocumentStatus = DocumentStatus.Invalid; } else if (matchedContractors != null && matchedContractors.Count > 1) { document.DocumentStatus = DocumentStatus.ManyContractors; } if (matchedContractors != null && matchedContractors.Count == 0) { matchedContractors = contractors.Where(c => c.ContractorSourceId == document.DocContractorId && c.SourceId == document.SourceId).ToList(); if (matchedContractors != null && matchedContractors.Count > 0) { document.ContractorId = matchedContractors[0].ContractorId; //set contractor } //Update document status depending on the contractor status if (matchedContractors != null && matchedContractors.Count == 1 && (matchedContractors[0].ContractorStatus == ContractorStatus.Valid || matchedContractors[0].ContractorStatus == ContractorStatus.Accepted)) { document.DocumentStatus = DocumentStatus.Valid; } else if (matchedContractors != null && matchedContractors.Count == 1 && matchedContractors[0].ContractorStatus == ContractorStatus.Invalid) { document.DocumentStatus = DocumentStatus.Invalid; } else if (matchedContractors != null && matchedContractors.Count > 1) { document.DocumentStatus = DocumentStatus.ManyContractors; } } } } _dbContext.UpdateRange(documents); await _dbContext.SaveChangesAsync(); } } catch (Exception ex) { _logger.LogError(ex.Message); Console.WriteLine("Błąd aktualiazcji statusu i kontrahentów na dokumentach"); } } }