示例#1
0
        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);
            }
        }
示例#2
0
        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);
            }
        }
示例#3
0
        private ViesSimpleRequest ContractorViesRequest(Contractor contractor)
        {
            var suffix = FvpWebAppUtils.GetDigitsFromString(contractor.VatId);
            var prefix = contractor.CountryCode;

            return(new ViesSimpleRequest
            {
                ContractorPrefix = prefix,
                ContractorSuffix = suffix
            });
        }
示例#4
0
        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);
            }
        }
示例#5
0
        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}");
            }
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }
示例#8
0
        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);
                }
            }
        }
示例#9
0
        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");
                }
            }
        }