public async Task ConsultarFreteTipo() { if (!Convert.ToBoolean(ConfigurationManager.AppSettings["IntegracaoSankhya_Habilitar"])) { return; } string where = "WHERE NUCAMPO IN (SELECT NUCAMPO FROM TDDCAM WHERE NOMETAB = 'TGFCAB' AND NOMECAMPO = 'CIF_FOB')"; List <FreteTipoIntegracao> freteTiposIntegracao = await IntegracaoSankhya.Instance.PreExecutarQuery <FreteTipoIntegracao>(where : where); foreach (var freteTipoInt in freteTiposIntegracao) { try { ValidarDadosIntegracao(freteTipoInt); bool freteTipoNovo = false; FreteTipo freteTipo = _uow.FreteTipoRepository.ConsultarPorSigla(freteTipoInt.Sigla); if (freteTipo == null) { freteTipoNovo = true; freteTipo = new FreteTipo(); } freteTipo.Descricao = freteTipoInt.Descricao; freteTipo.Sigla = freteTipoInt.Sigla; if (freteTipoNovo) { _uow.FreteTipoRepository.Add(freteTipo); } else { _uow.FreteTipoRepository.Update(freteTipo); } _uow.SaveChanges(); } catch (Exception ex) { _log.Error(string.Format("Erro na integração do tipo de frete: {0}.", freteTipoInt.Sigla), ex); } } }
public async Task ConsultaNotaFiscalCompra() { if (!Convert.ToBoolean(ConfigurationManager.AppSettings["IntegracaoSankhya_Habilitar"])) { return; } var where = " WHERE TGFCAB.TIPMOV = 'C' AND TGFCAB.STATUSNOTA <> 'L' AND (TGFCAB.AD_STATUSREC = 0 OR TGFCAB.AD_STATUSREC IS NULL)"; var inner = " INNER JOIN TGFITE ON TGFCAB.NUNOTA = TGFITE.NUNOTA"; List <NotaFiscalIntegracao> notasIntegracao = await IntegracaoSankhya.Instance.PreExecutarQuery <NotaFiscalIntegracao>(where, inner); List <FreteTipo> tiposFrete = _uow.FreteTipoRepository.RetornarTodos(); IQueryable <Empresa> empresas = _uow.EmpresaRepository.Tabela(); var unidadesMedida = _uow.UnidadeMedidaRepository.RetornarTodos(); Dictionary <string, List <NotaFiscalIntegracao> > notasIntegracaoGrp = notasIntegracao.GroupBy(g => g.CodigoIntegracao).ToDictionary(d => d.Key, d => d.ToList()); foreach (var notasInt in notasIntegracaoGrp) { try { var notafiscalIntegracao = notasInt.Value.First(); ValidarDadosIntegracao(notafiscalIntegracao); var codEmp = Convert.ToInt64(notafiscalIntegracao.CodigoIntegracaoEmpresa); Empresa empresa = empresas.FirstOrDefault(f => f.CodigoIntegracao == codEmp); if (empresa == null) { throw new Exception(string.Format("Código da Empresa (CODEMP: {0}) inválido", notafiscalIntegracao.CodigoIntegracaoEmpresa)); } var codParcTransp = Convert.ToInt64(notafiscalIntegracao.CodigoIntegracaoTransportadora); Transportadora transportadora = _uow.TransportadoraRepository.Todos().FirstOrDefault(f => f.CodigoIntegracao == codParcTransp); if (transportadora == null) { throw new Exception(string.Format("Código da Transportadora (CODPARCTRANSP: {0}) inválido", notafiscalIntegracao.CodigoIntegracaoTransportadora)); } var codParc = Convert.ToInt64(notafiscalIntegracao.CodigoIntegracaoFornecedor); Fornecedor fornecedor = _uow.FornecedorRepository.Todos().FirstOrDefault(f => f.CodigoIntegracao == codParc); if (fornecedor == null) { throw new Exception(string.Format("Código da Fornecedor (CODPARC: {0}) inválido", notafiscalIntegracao.CodigoIntegracaoFornecedor)); } DateTime?dataVencimento = null; try { dataVencimento = await ConsultarDataVencimento(notafiscalIntegracao.CodigoIntegracao); } catch (Exception) { throw new Exception(string.Format("Data de Vencimento inválida (NUMNOTA: {0})", notafiscalIntegracao.CodigoIntegracao)); } bool notaNova = true; var codNota = Convert.ToInt64(notafiscalIntegracao.CodigoIntegracao); NotaFiscal notafiscal = _uow.NotaFiscalRepository.ObterPorCodigoIntegracao(codNota); if (notafiscal != null) { notaNova = false; var lote = _uow.LoteRepository.PesquisarLotePorNotaFiscal(notafiscal.IdNotaFiscal); if (lote != null) { throw new Exception("Já existe um lote aberto para esta nota fiscal, portanto não é possível integrá-la novamente."); } } else { notafiscal = new NotaFiscal(); } notafiscal.Numero = Convert.ToInt32(notafiscalIntegracao.Numero); notafiscal.Serie = notafiscalIntegracao.Serie; notafiscal.CodigoIntegracao = codNota; notafiscal.ValorTotal = Convert.ToDecimal(notafiscalIntegracao.ValorTotal.Replace(".", ",")); notafiscal.ValorFrete = Convert.ToDecimal(notafiscalIntegracao.ValorFrete.Replace(".", ",")); notafiscal.NumeroConhecimento = notafiscalIntegracao.NumeroConhecimento == null ? (long?)null : Convert.ToInt64(notafiscalIntegracao.NumeroConhecimento); notafiscal.PesoBruto = notafiscalIntegracao.PesoBruto == null ? (decimal?)null : Convert.ToDecimal(notafiscalIntegracao.PesoBruto.Replace(".", ",")); notafiscal.Quantidade = Convert.ToInt32(notafiscalIntegracao.QuantidadeVolume); notafiscal.Especie = notafiscalIntegracao.Especie; notafiscal.StatusIntegracao = notafiscalIntegracao.StatusIntegracao; notafiscal.IdNotaFiscalStatus = NotaFiscalStatusEnum.ProcessandoIntegracao; notafiscal.ChaveAcesso = notafiscalIntegracao.ChaveAcesso; notafiscal.IdFornecedor = fornecedor.IdFornecedor; notafiscal.DataEmissao = notafiscalIntegracao.DataEmissao == null ? DateTime.Now : DateTime.ParseExact(notafiscalIntegracao.DataEmissao, "ddMMyyyy HH:mm:ss", CultureInfo.InvariantCulture); notafiscal.IdEmpresa = empresa.IdEmpresa; notafiscal.IdTransportadora = transportadora.IdTransportadora; notafiscal.CodigoIntegracaoVendedor = Convert.ToInt32(notafiscalIntegracao.CodigoIntegracaoVendedor); notafiscal.IdNotaFiscalTipo = NotaFiscalTipoEnum.Compra; notafiscal.NumeroFicticioNF = notafiscalIntegracao.NumeroFicticioNF; notafiscal.DataVencimento = dataVencimento; FreteTipo freteTipo = tiposFrete.FirstOrDefault(f => f.Sigla == notafiscalIntegracao.FreteTipo); if (freteTipo != null) { notafiscal.IdFreteTipo = freteTipo.IdFreteTipo; } var notafiscalItens = notasInt.Value.Select(s => new { s.CodigoIntegracao, s.CodigoIntegracaoProduto, s.UnidadeMedida, s.Quantidade, s.ValorUnitarioItem, s.ValorTotal, s.Sequencia, s.QuantidadeDevolucao }).ToList(); List <NotaFiscalItem> itemsNotaFsical = new List <NotaFiscalItem>(); foreach (var item in notafiscalItens) { var codProduto = Convert.ToInt64(item.CodigoIntegracaoProduto); var qtdNeg = Convert.ToInt32(item.Quantidade); var sequencia = Convert.ToInt32(item.Sequencia); Produto produto = _uow.ProdutoRepository.Todos().FirstOrDefault(f => f.CodigoIntegracao == codProduto); if (produto == null) { throw new Exception(string.Format("Código da Produto (CODPROD: {0}) inválido", item.CodigoIntegracaoProduto)); } var unidade = unidadesMedida.FirstOrDefault(f => f.Sigla == item.UnidadeMedida); if (unidade == null) { throw new Exception(string.Format("Código da Unidade de Medida (CODVOL: {0}) inválido", item.UnidadeMedida)); } NotaFiscalItem notaFiscalItem = new NotaFiscalItem(); notaFiscalItem.IdUnidadeMedida = unidade.IdUnidadeMedida; notaFiscalItem.IdProduto = produto.IdProduto; notaFiscalItem.Quantidade = qtdNeg; notaFiscalItem.ValorUnitario = Convert.ToDecimal(item.ValorUnitarioItem.Replace(".", ",")); notaFiscalItem.ValorTotal = Convert.ToDecimal(item.ValorTotal.Replace(".", ",")); notaFiscalItem.CodigoNotaFiscal = codNota; notaFiscalItem.Sequencia = sequencia; notaFiscalItem.QuantidadeDevolucao = item.QuantidadeDevolucao.NullOrEmpty() ? 0 : Convert.ToInt32(item.QuantidadeDevolucao); itemsNotaFsical.Add(notaFiscalItem); } int diasPrazoEntrega = _uow.ProdutoEstoqueRepository.ObterDiasPrazoEntrega(notafiscal.IdEmpresa, itemsNotaFsical.Select(s => s.IdProduto).ToList()); notafiscal.PrazoEntregaFornecedor = notafiscal.DataEmissao.AddDays(diasPrazoEntrega); try { await AtualizarNotaFiscalRecebimento(notafiscal.ChaveAcesso).ConfigureAwait(false); } catch (Exception) { throw new Exception(string.Format("Erro ao atualizar a nota fiscal de recebimento de sequinte chave de acesso: {0}.", notafiscal.ChaveAcesso)); } using (var transacao = _uow.CreateTransactionScope()) { if (!notafiscal.NotaFiscalItens.NullOrEmpty()) { _uow.NotaFiscalItemRepository.DeleteRange(notafiscal.NotaFiscalItens.ToList()); } notafiscal.NotaFiscalItens = itemsNotaFsical; if (notaNova) { _uow.NotaFiscalRepository.Add(notafiscal); } else { _uow.NotaFiscalRepository.Update(notafiscal); } _uow.SaveChanges(); transacao.Complete(); } Dictionary <string, string> campoChave = new Dictionary <string, string> { { "NUNOTA", notafiscal.CodigoIntegracao.ToString() } }; await IntegracaoSankhya.Instance.AtualizarInformacaoIntegracao("CabecalhoNota", campoChave, "AD_STATUSREC", NotaFiscalStatusEnum.AguardandoRecebimento.GetHashCode()); notafiscal.IdNotaFiscalStatus = NotaFiscalStatusEnum.AguardandoRecebimento; _uow.SaveChanges(); } catch (Exception ex) { _log.Error(string.Format("Erro na integração da seguinte nota fiscal: {0}.", notasInt.Key), ex); continue; } } }