protected void btnEmitir_Click(object sender, EventArgs e) { try { var retornoEmissao = ManifestoEletronicoDAO.Instance.EmitirMDFe(idMDFe.GetValueOrDefault(), false); if (retornoEmissao != "Arquivo recebido com sucesso") { // Se houver falha de emissão do MDFe por erro de conexão, verifica se o usuário deseja emitir em contingencia offline if (retornoEmissao.Contains("Impossível conectar-se ao servidor remoto")) { Response.Redirect("~/Listas/LstManifestoEletronico.aspx?FalhaEmitirMDFe=true&IdMDFe=" + idMDFe.GetValueOrDefault()); } // Redireciona para a lista com a mensagem de retorno Response.Redirect("~/Listas/LstManifestoEletronico.aspx?Retorno=" + retornoEmissao); } // Consulta a situação var retorno = ConsultaSituacao.ConsultaSitLoteMDFe(idMDFe.GetValueOrDefault()); Response.Redirect("~/Listas/LstManifestoEletronico.aspx?Retorno=" + retorno); } catch (Exception ex) { // Se for erro na validação do arquivo XML, abre popup para mostrar erros if (ex.Message.Contains("XML inconsistente.")) { string msg = MensagemAlerta.FormatErrorMsg("", ex).Replace("XML inconsistente.", "").Replace("Linha:", "%bl%%bl%Linha:"); ClientScript.RegisterClientScriptBlock(typeof(string), "msg", "openWindow(410, 540, '../Utils/ShowMsg.aspx?title=Falha na validação do arquivo do MDF-e&msg=" + msg + "')", true); } else { MensagemAlerta.ErrorMsg("Falha ao emitir o MDFe.", ex, Page); } } }
/// <summary> /// Insere um novo cartão não identificado /// </summary> public Colosoft.Business.SaveResult InserirCartaoNaoIdentificado(Negocios.Entidades.CartaoNaoIdentificado cni) { var resultado = _fluxoCNI.SalvarCartaoNaoIdentificado(cni); if (!resultado) { return(resultado); } using (var transaction = new GDATransaction()) { try { transaction.BeginTransaction(); InserirParcelas(transaction, cni); transaction.Commit(); transaction.Close(); } catch (Exception ex) { transaction.Rollback(); transaction.Close(); _fluxoCNI.ApagarCartaoNaoIdentificado(cni); ErroDAO.Instance.InserirFromException("Falha ao inserir cartão não identificado.", ex); throw new Exception(MensagemAlerta.FormatErrorMsg("Falha ao receber valor cartão não identificado", ex)); } } return(new Colosoft.Business.SaveResult(true, null)); }
public static string Recalcular(string idOrcamentoStr, string tipoEntregaNovoStr, string idClienteNovoStr) { try { var idOrcamento = idOrcamentoStr.StrParaInt(); var tipoEntregaNovo = tipoEntregaNovoStr.StrParaIntNullable(); var idClienteNovo = idClienteNovoStr.StrParaIntNullable(); int tipoDesconto; decimal desconto; int tipoAcrescimo; decimal acrescimo; int? idComissionado; float percComissao; Dictionary <uint, KeyValuePair <KeyValuePair <int, decimal>, KeyValuePair <int, decimal> > > dadosProd; OrcamentoDAO.Instance.RecalcularOrcamentoComTransacao(idOrcamento, tipoEntregaNovo, idClienteNovo, out tipoDesconto, out desconto, out tipoAcrescimo, out acrescimo, out idComissionado, out percComissao, out dadosProd); return(OrcamentoDAO.Instance.ObterDadosOrcamentoRecalcular(tipoDesconto, desconto, tipoAcrescimo, acrescimo, idComissionado, percComissao, dadosProd)); } catch (Exception ex) { return(string.Format("Erro;{0}", MensagemAlerta.FormatErrorMsg("Falha ao recalcular orçamento.", ex))); } }
public Imagem[] GetProjetosModelo(string codigo, string descricao, uint idGrupoProjModelo, int situacao) { List <ProjetoModelo> lstProjModelos = ProjetoModeloDAO.Instance.GetList(codigo, descricao, idGrupoProjModelo, situacao); string criterio = (idGrupoProjModelo > 0 ? " Grupo: " + GrupoModeloDAO.Instance.ObtemDescricao(idGrupoProjModelo) : " ") + (String.IsNullOrEmpty(codigo) ? " " : " Código: " + codigo + " ") + (String.IsNullOrEmpty(descricao) ? " " : " Descrição: " + descricao + " "); List <Imagem> retorno = new List <Imagem>(); foreach (ProjetoModelo pm in lstProjModelos) { try { string path = Utils.GetModelosProjetoPath + pm.NomeFigura; if (File.Exists(path)) { byte[] imagem = Utils.GetImageFromFile(path); imagem = ManipulacaoImagem.Redimensionar(imagem, 300, 300, (float)0.75); if (imagem.Length == 0) { continue; } if (retorno.Count > 0 && retorno[retorno.Count - 1].Imagem2 == null) { retorno[retorno.Count - 1].Imagem2 = imagem; retorno[retorno.Count - 1].CodImagem2 = pm.Codigo; retorno[retorno.Count - 1].DescImagem2 = pm.Descricao; } else if (retorno.Count > 0 && retorno[retorno.Count - 1].Imagem3 == null) { retorno[retorno.Count - 1].Imagem3 = imagem; retorno[retorno.Count - 1].CodImagem3 = pm.Codigo; retorno[retorno.Count - 1].DescImagem3 = pm.Descricao; } else { Imagem nova = new Imagem(); nova.Chave = pm.IdProjetoModelo; nova.Imagem1 = imagem; nova.CodImagem1 = pm.Codigo; nova.DescImagem1 = pm.Descricao; nova.Criterio = criterio; retorno.Add(nova); } } } catch (Exception ex) { throw new Exception(MensagemAlerta.FormatErrorMsg("Falha ao carregar imagens do projeto " + pm.Codigo + ".", ex)); } } return(retorno.ToArray()); }
public IHttpActionResult ConfirmarGerandoConferencia(int id, bool finalizarConferencia) { using (var sessao = new GDATransaction()) { var validacao = this.ValidarExistenciaIdPedido(sessao, id); if (validacao != null) { return(validacao); } try { sessao.BeginTransaction(); PedidoDAO.Instance.FinalizarPedido(sessao, (uint)id, false); if (PedidoDAO.Instance.ObtemSituacao(sessao, (uint)id) != Data.Model.Pedido.SituacaoPedido.ConfirmadoLiberacao) { var idsPedidoOk = new List <int>(); var idsPedidoErro = new List <int>(); PedidoDAO.Instance.ConfirmarLiberacaoPedido(sessao, new List <int> { id }, out idsPedidoOk, out idsPedidoErro, false, false); } if (PedidoDAO.Instance.GetTipoPedido(sessao, (uint)id) != Data.Model.Pedido.TipoPedidoEnum.Revenda) { PedidoEspelhoDAO.Instance.GeraEspelho(sessao, (uint)id); } if (finalizarConferencia && PedidoConfig.TelaCadastro.FinalizarConferenciaAoGerarEspelho && PedidoEspelhoDAO.Instance.ExisteEspelho((uint)id)) { PedidoEspelhoDAO.Instance.FinalizarPedido(sessao, (uint)id); } sessao.Commit(); return(this.Aceito($"Pedido {id} finalizado e gerado conferência.")); } catch (ValidacaoPedidoFinanceiroException f) { return(this.MultiplaEscolha(MensagemAlerta.FormatErrorMsg(string.Empty, f))); } catch (Exception ex) { sessao.Rollback(); return(this.ErroValidacao(ex.Message, ex)); } } }
public string GetDadosFuncionario(string idFuncStr) { try { var idFunc = idFuncStr.StrParaUint(); var debito = MovFuncDAO.Instance.GetSaldo(idFunc); return("Ok;" + Math.Abs(debito).ToString(CultureInfo.InvariantCulture)); } catch (Exception ex) { return("Erro;" + MensagemAlerta.FormatErrorMsg("Falha ao recuperar os dados do débito.", ex)); } }
protected void odsTroca_Inserted(object sender, Colosoft.WebControls.VirtualObjectDataSourceStatusEventArgs e) { if (e.Exception != null) { e.ExceptionHandled = true; var msgErro = MensagemAlerta.FormatErrorMsg("Falha ao inserir troca/devolução.", e.Exception); Page.ClientScript.RegisterClientScriptBlock(typeof(string), "err", string.Format("alert('{0}'); window.location.href = window.location.href;", msgErro), true); } else { Response.Redirect("~/Cadastros/CadTrocaDev.aspx?idTrocaDev=" + e.ReturnValue.ToString() + (!String.IsNullOrEmpty(Request["popup"]) ? "&popup=1" : "")); } }
private string GetErrorResponse(Exception ex) { string html = @" <script type='text/javascript'> alert('" + MensagemAlerta.FormatErrorMsg("", ex) + @"'); window.history.go(-1); </script>"; return(@" <html> <body> " + html + @" </body> </html>"); }
private string GetErrorResponse(Exception ex) { bool debug = false; string html = debug ? ex.ToString().Replace("\n", "<br>").Replace("\r", "").Replace(" ", " ") : @" <script type='text/javascript'> alert('" + MensagemAlerta.FormatErrorMsg("", ex) + @"'); window.history.go(-1); </script>"; return(@" <html> <body> " + html + @" </body> </html>"); }
/// <summary> /// Retorna "true" caso a medição informada seja a medição definitiva de algum orçamento e "false" caso não seja. /// </summary> public string VerificarMedicaoDefinitivaOrcamento(string idMedicao) { try { if (idMedicao.StrParaIntNullable().GetValueOrDefault() == 0) { return("Ok;false"); } var medicao = MedicaoDAO.Instance.GetMedicao(idMedicao.StrParaUint()); return((medicao.MedicaoDefinitiva && medicao.IdOrcamento > 0) ? "Ok;true" : "Ok;false"); } catch (Exception ex) { string erro = ex is ApplicationException ? ex.Message : MensagemAlerta.FormatErrorMsg("Erro ao verificar medição definitiva do orçamento.", ex); return("Erro;" + erro); } }
public IHttpActionResult FinalizarPedido(int id) { using (var sessao = new GDATransaction()) { var validacao = this.ValidarExistenciaIdPedido(sessao, id); if (validacao != null) { return(validacao); } try { sessao.BeginTransaction(); PedidoDAO.Instance.FinalizarPedido(sessao, (uint)id, false); // caso a empresa use liberação e seja LITE confirma o pedido automaticamente if (PedidoConfig.LiberarPedido && Geral.SistemaLite && !Geral.ControlePCP) { string script; WebGlass.Business.Pedido.Fluxo.ConfirmarPedido.Instance.ConfirmarPedidoLiberacao(new List <int> { id }, false, null, false, out script); } sessao.Commit(); return(this.Aceito($"Pedido {id} finalizado.")); } catch (ValidacaoPedidoFinanceiroException f) { return(this.MultiplaEscolha(MensagemAlerta.FormatErrorMsg(string.Empty, f))); } catch (Exception ex) { sessao.Rollback(); return(this.ErroValidacao(ex.Message, ex)); } } }
/// <summary> /// Cancela o acerto de cheques. /// </summary> public void CancelarAcertoCheque(uint idAcertoCheque, string motivo, DateTime dataEstornoBanco, bool cancelamentoErroTef, bool gerarCredito) { lock (_cancelarAcertoChequeLock) { using (var transaction = new GDATransaction()) { try { transaction.BeginTransaction(); AcertoCheque acertoCheque = null; acertoCheque = GetElement(transaction, idAcertoCheque); if (ExecuteScalar <bool>(transaction, "Select Count(*)>0 From cheques c Where c.IdAcertoCheque=" + idAcertoCheque + " And ((Tipo = 1 AND situacao > 1) OR (Tipo = 2 AND situacao > 2))")) { throw new Exception(@"Um ou mais cheques recebidos já foram utilizados em outras transações, cancele ou retifique as transações dos cheques antes de cancelar este acerto de cheque."); } UtilsFinanceiro.CancelaRecebimento(transaction, !acertoCheque.ChequesProprios ? UtilsFinanceiro.TipoReceb.ChequeDevolvido : UtilsFinanceiro.TipoReceb.ChequeProprioDevolvido, null, null, null, null, null, idAcertoCheque, null, null, null, null, dataEstornoBanco, cancelamentoErroTef, gerarCredito); // Altera a situação do acerto objPersistence.ExecuteCommand(transaction, "update acerto_cheque set situacao=" + (int)AcertoCheque.SituacaoEnum.Cancelado + " where idAcertoCheque=" + idAcertoCheque); LogCancelamentoDAO.Instance.LogAcertoCheque(acertoCheque, motivo, true); transaction.Commit(); transaction.Close(); } catch (Exception ex) { transaction.Rollback(); transaction.Close(); throw new Exception(MensagemAlerta.FormatErrorMsg("Falha ao cancelar acerto de cheques.", ex)); } } } }
public string ObterDadosFerragem(string nomeFerragem) { try { // Recupera o fluxo de ferragem. var ferragemFluxo = Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance <Glass.Projeto.Negocios.IFerragemFluxo>(); // Obtém a ferragem pelo nome. var ferragem = ferragemFluxo.ObterFerragem(nomeFerragem); // Verifica se a ferragem foi encontrada. if (ferragem == null || ferragem.IdFerragem <= 0) { throw new Exception("Erro;Ferragem não encontrada."); } return(string.Format("Ok;{0};{1};{2};{3};{4}", ferragem.IdFerragem, ferragem.Nome, ferragem.Fabricante.Nome, ferragem.Situacao, ferragem.DataAlteracao)); } catch (Exception ex) { return(string.Format("Erro;{0}", MensagemAlerta.FormatErrorMsg("Falha ao recuperar os dados da ferragem.", ex))); } }
/// <summary> /// Cancela uma medição. /// </summary> public void CancelarMedicao(int idMedicao, string motivo) { using (var transaction = new GDATransaction()) { try { transaction.BeginTransaction(); if (idMedicao <= 0) { throw new Exception("Não foi possível recuperar o código da medição. Tente novamente, caso a mensagem persista, entre em contato com o suporte do software WebGlass."); } var medicao = GetElementByPrimaryKey(transaction, (uint)idMedicao); var obsMedicao = medicao.ObsMedicao; obsMedicao = !string.IsNullOrEmpty(obsMedicao) ? string.Format("{0} {1}", obsMedicao, motivo) : motivo; // Se o tamanho do campo ObsMedicao exceder 500 caracteres, salva apenas os 500 primeiros, descartando o restante. obsMedicao = obsMedicao.Length > 500 ? obsMedicao.Substring(0, 500) : obsMedicao; objPersistence.ExecuteCommand(transaction, string.Format("UPDATE medicao SET ObsMedicao=?obs, Situacao={0} WHERE IdMedicao={1}", (int)Medicao.SituacaoMedicao.Cancelada, idMedicao), new GDAParameter("?obs", obsMedicao)); LogCancelamentoDAO.Instance.LogMedicao(transaction, medicao, string.Format("Motivo do Cancelamento: {0}", motivo), true); transaction.Commit(); transaction.Close(); } catch (Exception ex) { transaction.Rollback(); transaction.Close(); throw new Exception(MensagemAlerta.FormatErrorMsg(string.Format("Falha ao cancelar a medição de código {0}.", idMedicao), ex)); } } }
private static string ConsultaLoteNFe(NotaFiscal nf) { #region Monta XML de requisição de situação do lote if (string.IsNullOrEmpty(nf.NumRecibo)) { throw new Exception("A NFe não foi emitida. Não há número de recibo."); } var strXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<consReciNFe xmlns=\"http://www.portalfiscal.inf.br/nfe\" " + "versao=\"" + ConfigNFe.VersaoRetAutorizacao + "\">" + "<tpAmb>" + (int)ConfigNFe.TipoAmbiente + "</tpAmb>" + "<nRec>" + nf.NumRecibo.PadLeft(15, '0') + "</nRec></consReciNFe>"; XmlDocument xmlRetRecep = new XmlDocument(); xmlRetRecep.LoadXml(strXml); try { ValidaXML.Validar(xmlRetRecep, ValidaXML.TipoArquivoXml.RetRecepcao); } catch (Exception ex) { throw ex; } #endregion var status = string.Empty; XmlNode xmlRetorno = null; System.Net.Security.RemoteCertificateValidationCallback callback = System.Net.ServicePointManager.ServerCertificateValidationCallback; try { // Altera o callback de validação do WebService System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate(object sender, System.Security.Cryptography.X509Certificates.X509Certificate cert, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors error) { // Verifica se a data do certificado é válida DateTime beginDate = DateTime.Parse(cert.GetEffectiveDateString()); DateTime endDate = DateTime.Parse(cert.GetExpirationDateString()); bool isDateValid = (DateTime.Now >= beginDate) && (DateTime.Now <= endDate); // Retorna o resultado da função return(isDateValid); }; // Envia o arquivo e recebe o retorno xmlRetorno = EnviaXML.ObterXmlRetornoAutorizacaoNFe(nf, xmlRetRecep); } catch (Exception ex) { LogNfDAO.Instance.NewLog(nf.IdNf, "Instaciar Webservice", 3, MensagemAlerta.FormatErrorMsg("Falha ao instanciar webservice.", ex)); throw new Exception(Glass.MensagemAlerta.FormatErrorMsg("Falha ao chamar WebService.", ex)); } finally { // Restaura o callback padrão para o WebService System.Net.ServicePointManager.ServerCertificateValidationCallback = callback; } // Se o lote já tiver sido processado, sai do loop if (xmlRetorno != null) // Lote processado { status = xmlRetorno?["cStat"]?.InnerXml; } if (status == "104") // Lote processado { XmlNodeList protNFeList = ((XmlElement)xmlRetorno).GetElementsByTagName("protNFe"); // Para cada protocolo de autorização de uso (inicialmente será só um, pois cada nota está sendo enviada em um lote distinto) foreach (XmlNode protNFeNode in protNFeList) { NotaFiscalDAO.Instance.RetornoEmissaoNFe(protNFeNode?["infProt"]?["chNFe"]?.InnerXml, protNFeNode); var statusNFe = protNFeNode?["infProt"]?["cStat"]?.InnerXml; if (statusNFe == "100" || statusNFe == "150") // Autorizada para uso { return("NFe está autorizada para uso."); } else { return($"NFe rejeitada. Motivo: { protNFeNode?["infProt"]?["xMotivo"]?.InnerXml }"); } } return("Lote processado"); } else if (status == "105") // Lote em processamento { NotaFiscalDAO.Instance.AlteraSituacao(nf.IdNf, NotaFiscal.SituacaoEnum.ProcessoEmissao); return("Esta NFe ainda está sendo processada pela SEFAZ, aguarde para realizar uma nova consulta."); } else if (status == "106") // Lote não encontrado { NotaFiscalDAO.Instance.AlteraSituacao(nf.IdNf, NotaFiscal.SituacaoEnum.FalhaEmitir); LogNfDAO.Instance.NewLog(nf.IdNf, "Consulta", 106, "Falha na emissão da NFe. Não foi encontrado o lote de envio."); return("Falha na consulta. Não foi encontrado o lote de envio."); } else // Lote rejeitado { NotaFiscalDAO.Instance.AlteraSituacao(nf.IdNf, NotaFiscal.SituacaoEnum.FalhaEmitir); LogNfDAO.Instance.NewLog(nf.IdNf, "Consulta", (xmlRetorno?["cStat"]?.InnerXml?.StrParaInt()).GetValueOrDefault(), xmlRetorno?["xMotivo"]?.InnerXml); var msgErro = "Falha na consulta. "; if (status == "215" || status == "516" || status == "517" || status == "545") { msgErro += "Mensagem de consulta inválida. "; } else if (status == "225" || status == "565" || status == "567" || status == "568") { msgErro += "Lote da NFe é inválido. "; } return($"{ msgErro }{ xmlRetorno?["cStat"]?.InnerXml } - { CustomizaMensagemRejeicao(nf.IdNf, xmlRetorno?["xMotivo"]?.InnerXml) }"); } }
public string ConfirmarAVista(string idCliente, string idsPedido, string idsProdutosPedido, string idsProdutosProducao, string qtdeProdutosLiberar, string fPagtos, string tpCartoes, string totalASerPagoStr, string valores, string contas, string depositoNaoIdentificado, string cartaoNaoIdentificado, string gerarCredito, string utilizarCredito, string creditoUtilizado, string numAutConstrucard, string cxDiario, string parcCredito, string descontarComissao, string chequesPagto, string tipoDescontoStr, string descontoStr, string tipoAcrescimoStr, string acrescimoStr, string valorUtilizadoObraStr, string numAutCartao, string usarCappta) { try { // Verifica se o cliente está ativo. if (ClienteDAO.Instance.GetSituacao(idCliente.StrParaUint()) == 2) { return(string.Format("Erro\tCliente inativo. Motivo: {0}", ClienteDAO.Instance.ObtemObs(idCliente.StrParaUint()).Replace("'", string.Empty).Replace("\n", string.Empty).Replace("\r", string.Empty))); } string[] sFormasPagto = fPagtos.Split(';'); string[] sValoresPagos = valores.Split(';'); string[] sIdContasBanco = contas.Split(';'); string[] sTiposCartao = tpCartoes.Split(';'); string[] sParcCartoes = parcCredito.Split(';'); string[] sDepositoNaoIdentificado = depositoNaoIdentificado.Split(';'); string[] sCartaoNaoIdentificado = cartaoNaoIdentificado.Split(';'); string[] sNumAutCartao = numAutCartao.Split(';'); uint[] formasPagto = new uint[sFormasPagto.Length]; decimal[] valoresPagos = new decimal[sValoresPagos.Length]; uint[] idContasBanco = new uint[sIdContasBanco.Length]; uint[] tiposCartao = new uint[sTiposCartao.Length]; uint[] parcCartoes = new uint[sParcCartoes.Length]; uint[] depNaoIdentificado = new uint[sDepositoNaoIdentificado.Length]; uint[] cartNaoIdentificado = new uint[sCartaoNaoIdentificado.Length]; for (var i = 0; i < sFormasPagto.Length; i++) { formasPagto[i] = !string.IsNullOrEmpty(sFormasPagto[i]) ? sFormasPagto[i].StrParaUint() : 0; valoresPagos[i] = !string.IsNullOrEmpty(sValoresPagos[i]) ? sValoresPagos[i].Replace('.', ',').StrParaDecimal() : 0; idContasBanco[i] = !string.IsNullOrEmpty(sIdContasBanco[i]) ? sIdContasBanco[i].StrParaUint() : 0; tiposCartao[i] = !string.IsNullOrEmpty(sTiposCartao[i]) ? sTiposCartao[i].StrParaUint() : 0; parcCartoes[i] = !string.IsNullOrEmpty(sParcCartoes[i]) ? sParcCartoes[i].StrParaUint() : 0; depNaoIdentificado[i] = !string.IsNullOrEmpty(sDepositoNaoIdentificado[i]) ? sDepositoNaoIdentificado[i].StrParaUint() : 0; } for (var i = 0; i < sCartaoNaoIdentificado.Length; i++) { cartNaoIdentificado[i] = !string.IsNullOrEmpty(sCartaoNaoIdentificado[i]) ? sCartaoNaoIdentificado[i].StrParaUint() : 0; } var totalASerPago = totalASerPagoStr.StrParaDecimal(); var creditoUtil = creditoUtilizado.StrParaDecimal(); var tipoDesconto = tipoDescontoStr.StrParaInt(); var desconto = !string.IsNullOrEmpty(descontoStr) && descontoStr != "NaN" ? descontoStr.StrParaDecimal() : 0; var tipoAcrescimo = tipoAcrescimoStr.StrParaInt(); var acrescimo = !string.IsNullOrEmpty(acrescimoStr) && acrescimoStr != "NaN" ? acrescimoStr.StrParaDecimal() : 0; string[] sProdutosLiberar = idsProdutosPedido.Split(';'); string[] sQtdeLiberar = qtdeProdutosLiberar.Split(';'); string[] sProdutosProducao = idsProdutosProducao.Split(';'); uint[] produtosLiberar = new uint[sProdutosLiberar.Length]; float[] qtdeLiberar = new float[sQtdeLiberar.Length]; uint?[] produtosProducaoLiberar = new uint?[sProdutosProducao.Length]; for (var i = 0; i < sProdutosLiberar.Length; i++) { produtosLiberar[i] = sProdutosLiberar[i].StrParaUint(); qtdeLiberar[i] = sQtdeLiberar[i].StrParaFloat(); produtosProducaoLiberar[i] = sProdutosProducao[i].StrParaUintNullable(); } foreach (var idPedido in idsPedido.Split(',')) { if (string.IsNullOrEmpty(idPedido)) { continue; } var retorno = Pedido.Fluxo.BuscarEValidar.Ajax.ValidaPedido(idPedido, null, null, cxDiario, null, string.Empty).Split('|'); if (retorno[0] != "true") { return(string.Format("Erro\tPedido {0}: {1}", idPedido, retorno[1])); } } var valorUtilizadoObra = valorUtilizadoObraStr.StrParaDecimal(); var idLiberarPedido = 0; // Cria liberação de pedido. if (usarCappta == "true") { idLiberarPedido = LiberarPedidoDAO.Instance.CriarPreLiberacaoAVistaComTransacao(acrescimo, cxDiario == "1", creditoUtil, chequesPagto?.Split('|').ToList() ?? new List <string>(), descontarComissao == "true", desconto, gerarCredito == "true", idCliente.StrParaIntNullable().GetValueOrDefault(), cartNaoIdentificado.Select(f => ((int?)f).GetValueOrDefault()), idContasBanco.Select(f => ((int?)f).GetValueOrDefault()), depNaoIdentificado.Select(f => ((int?)f).GetValueOrDefault()), formasPagto.Select(f => ((int?)f).GetValueOrDefault()), string.IsNullOrEmpty(idsPedido) ? new List <int>() : idsPedido.Split(',').Select(f => f.StrParaIntNullable().GetValueOrDefault()), produtosLiberar.Select(f => ((int?)f).GetValueOrDefault()), produtosProducaoLiberar.Select(f => ((int?)f).GetValueOrDefault()), tiposCartao.Select(f => ((int?)f).GetValueOrDefault()), sNumAutCartao.Select(f => string.IsNullOrEmpty(f) ? string.Empty : f), numAutConstrucard, qtdeLiberar.Select(f => ((float?)f).GetValueOrDefault()), parcCartoes.Select(f => ((int?)f).GetValueOrDefault()), tipoAcrescimo, tipoDesconto, totalASerPago, utilizarCredito == "true", valoresPagos.Select(f => ((decimal?)f).GetValueOrDefault()), valorUtilizadoObra); } else { idLiberarPedido = LiberarPedidoDAO.Instance.CriarLiberacaoAVista(acrescimo, cxDiario == "1", creditoUtil, chequesPagto?.Split('|'), descontarComissao == "true", desconto, gerarCredito == "true", idCliente.StrParaInt(), cartNaoIdentificado.Select(f => ((int?)f).GetValueOrDefault()), idContasBanco.Select(f => ((int?)f).GetValueOrDefault()), depNaoIdentificado.Select(f => ((int?)f).GetValueOrDefault()), formasPagto.Select(f => ((int?)f).GetValueOrDefault()), string.IsNullOrEmpty(idsPedido) ? new List <int>() : idsPedido.Split(',').Select(f => f.StrParaIntNullable().GetValueOrDefault()), produtosLiberar.Select(f => ((int?)f).GetValueOrDefault()), produtosProducaoLiberar.Select(f => ((int?)f).GetValueOrDefault()), tiposCartao.Select(f => ((int?)f).GetValueOrDefault()), sNumAutCartao.Select(f => string.IsNullOrEmpty(f) ? string.Empty : f), numAutConstrucard, qtdeLiberar.Select(f => ((float?)f).GetValueOrDefault()), parcCartoes.Select(f => ((int?)f).GetValueOrDefault()), tipoAcrescimo, tipoDesconto, totalASerPago, utilizarCredito == "true", valoresPagos.Select(f => ((decimal?)f).GetValueOrDefault()), valorUtilizadoObra); } return(string.Format("ok\tPedidos liberados.\t{0}\t{1}", LiberarPedidoDAO.Instance.ExibirNotaPromissoria((uint)idLiberarPedido).ToString().ToLower(), idLiberarPedido)); } catch (Exception ex) { return(string.Format("Erro\t{0}", MensagemAlerta.FormatErrorMsg(null, ex))); } }
public static byte[] GetBytesRelatorio(HttpContext context, uint idNf, bool preVisualizar, out Warning[] warnings, out string[] streamids, out string mimeType, out string encoding, out string extension) { var report = new LocalReport(); var lstParam = new List <ReportParameter>(); var nf = NotaFiscalDAO.Instance.GetElement(idNf); var danfe = NFeDAO.Instance.GetForDanfe(context, nf.ChaveAcesso); var produtosNFe = ProdutosNFeDAO.Instance.GetForDanfe(context, nf.ChaveAcesso); var idLoja = nf.IdLoja.Value; report.DataSources.Add(new ReportDataSource("NFe", new NFe[] { danfe })); report.DataSources.Add(new ReportDataSource("ProdutosNFe", produtosNFe)); #region NFC-e if (nf.Consumidor) { var loja = LojaDAO.Instance.GetElement(NotaFiscalDAO.Instance.ObtemIdLoja(idNf)); var uf = loja.Uf; #region Report Path report.ReportPath = Utils.CaminhoRelatorio("Relatorios/NFe/rptDanfeNFCe{0}.rdlc"); #endregion #region Pagamentos var pagamentos = PagtoNotaFiscalDAO.Instance.ObtemPagamentos(null, (int)idNf); report.DataSources.Add(new ReportDataSource("PagtoNotaFiscal", pagamentos)); #endregion #region Parametros // Parâmetros para o relatório lstParam.Add(new ReportParameter("QtdItens", produtosNFe.Length.ToString())); // Verifica apenas se a nota não é cancelada, pois a nota só muda para autorizada depois de enviar o email, // fazendo com que os clientes recebesse o DANFE dizendo que a nota "não é um documento fiscal válido" lstParam.Add(new ReportParameter("Producao", (danfe.TipoAmbiente == (int)ConfigNFe.TipoAmbienteNfe.Producao && nf.Situacao != (int)NotaFiscal.SituacaoEnum.Cancelada && !preVisualizar).ToString().ToLower())); #region Total de tributos decimal valorTotalTributos = 0; var cfop = CfopDAO.Instance.GetElementByPrimaryKey(nf.IdCfop.Value); var cliente = ClienteDAO.Instance.GetElement(nf.IdCliente.Value); var lstProdNf = ProdutosNfDAO.Instance.GetByNfExtended(idNf); // CFOP's de simples faturamento/venda futura não devem destacar os impostos var exibirImpostoCfop = cfop.CodInterno != "5922" && cfop.CodInterno != "6922"; try { if (nf.TipoDocumento == (int)NotaFiscal.TipoDoc.Saída && exibirImpostoCfop && cliente != null) { var retorno = ImpostoNcmUFDAO.Instance.ObtemDadosImpostos(lstProdNf); valorTotalTributos = retorno.ValorImpostoNacional + retorno.ValorImpostoEstadual; } } catch (Exception ex) { ErroDAO.Instance.InserirFromException("BuscarTributos", ex); throw new Exception(MensagemAlerta.FormatErrorMsg("Falha ao buscar tributos aproximados.", ex)); } if (valorTotalTributos == 0 && nf.ValorTotalTrib > 0) { valorTotalTributos = nf.ValorTotalTrib; } lstParam.Add(new ReportParameter("ValorTotalTributos", valorTotalTributos.ToString())); #endregion //Url para consultar a NFC-e por chave de acesso lstParam.Add(new ReportParameter("UrlConsulta", danfe.UrlChave)); // Define se a NFC-e foi emitida em contingência lstParam.Add(new ReportParameter("Contingencia", (nf.FormaEmissao != (int)NotaFiscal.TipoEmissao.Normal).ToString().ToLower())); #endregion #region QR Code /* Chamado 44291. */ if (FiscalConfig.CorrecaoGeracaoCodigoBarrasDanfe) { var url = Utils.GetFullUrl(context, "/Handlers/Danfe.ashx?idNf=" + idNf + "&isQrCode=true"); var uri = new Uri(url); lstParam.Add(new ReportParameter("QrCode", string.Format("{0}://localhost:{1}{2}", uri.Scheme, uri.Port, uri.PathAndQuery))); } else { lstParam.Add(new ReportParameter("QrCode", Utils.GetUrlSite(context) + "/Handlers/Danfe.ashx?idNf=" + idNf + "&isQrCode=true")); } #endregion } #endregion #region NF-e else { #region Report Path report.ReportPath = Utils.CaminhoRelatorio("Relatorios/NFe/rptDanfeRetrato{0}.rdlc"); #endregion #region Email if (nf.IdLoja > 0) { danfe.EnderecoEmit += " " + LojaDAO.Instance.GetElementByPrimaryKey(nf.IdLoja.Value).EmailFiscal; } danfe.EmailFiscal += " " + LojaDAO.Instance.GetElementByPrimaryKey(nf.IdLoja.Value).EmailFiscal; #endregion #region Parametros if (nf.FormaEmissao == (int)NotaFiscal.TipoEmissao.ContingenciaFSDA) { report.ReportPath = Utils.CaminhoRelatorio("Relatorios/NFe/rptDanfeRetratoFS{0}.rdlc"); lstParam.Add(new ReportParameter("Cabecalho_DadosAdicionaisNfe", danfe.DadosAdicionaisFs)); lstParam.Add(new ReportParameter("Cabecalho_CodigoBarrasAdicionais", Utils.GetUrlSite(context) + "/Handlers/Danfe.ashx?idNf=" + idNf + "&isCodigoBarras=true&dadosAdicionais=true")); } // Verifica apenas se a nota não é cancelada, pois a nota só muda para autorizada depois de enviar o email, // fazendo com que os clientes recebesse o DANFE dizendo que a nota "não é um documento fiscal válido" lstParam.Add(new ReportParameter("Producao", (danfe.TipoAmbiente == (int)ConfigNFe.TipoAmbienteNfe.Producao && nf.Situacao != (int)NotaFiscal.SituacaoEnum.Cancelada && !preVisualizar).ToString().ToLower())); lstParam.Add(new ReportParameter("ExibirNFCancelada", (!preVisualizar && danfe.TipoAmbiente == (int)ConfigNFe.TipoAmbienteNfe.Producao && nf.Situacao == (int)NotaFiscal.SituacaoEnum.Cancelada).ToString().ToLower())); // Parâmetros para o cabeçalho/rodapé do relatório lstParam.Add(new ReportParameter("Cabecalho_NumeroNfe", danfe.NumeroNfe)); lstParam.Add(new ReportParameter("Cabecalho_SerieNfe", danfe.SerieNfe)); lstParam.Add(new ReportParameter("Cabecalho_RazaoSocialEmit", danfe.RazaoSocialEmit)); lstParam.Add(new ReportParameter("Cabecalho_EnderecoEmit", danfe.EnderecoEmit)); lstParam.Add(new ReportParameter("Cabecalho_TipoNfe", danfe.TipoNfe)); lstParam.Add(new ReportParameter("Cabecalho_ChaveAcesso", danfe.ChaveAcesso)); lstParam.Add(new ReportParameter("Cabecalho_NatOperacao", danfe.NatOperacao)); lstParam.Add(new ReportParameter("Cabecalho_ProtAutorizacao", String.IsNullOrEmpty(danfe.ProtAutorizacao) ? "." : danfe.ProtAutorizacao)); lstParam.Add(new ReportParameter("Cabecalho_InscEstEmit", danfe.InscEstEmit)); lstParam.Add(new ReportParameter("Cabecalho_InscEstStEmit", danfe.InscEstStEmit)); lstParam.Add(new ReportParameter("Cabecalho_CnpjEmit", danfe.CnpjEmit)); lstParam.Add(new ReportParameter("TextoDadosRecebimento", string.Format("RECEBEMOS DE {0} CNPJ {1} OS PRODUTOS E/OU SERVIÇOS CONSTANTES DA NOTA FISCAL ELETRÔNICA INDICADA AO LADO." + "\nDESTINATÁRIO: {2} {3} Emissão: {4}. VALOR TOTAL: {5}.", danfe.RazaoSocialEmit, danfe.CnpjEmit, danfe.RazaoSocialRemet, danfe.EnderecoRemet, danfe.DataEmissao, danfe.VlrTotalNota.StrParaDecimal().ToString("C")))); if (!report.ReportPath.Contains("rptDanfeSemLogo")) { lstParam.Add(new ReportParameter("Cabecalho_DestacarNFe", "false")); } lstParam.Add(new ReportParameter("Rodape_InformacoesCompl", danfe.InformacoesCompl)); #endregion #region Código de barras /* Chamado 18187. */ if (FiscalConfig.CorrecaoGeracaoCodigoBarrasDanfe) { var url = Utils.GetFullUrl(context, "/Handlers/Danfe.ashx?idNf=" + idNf + "&isCodigoBarras=true"); var uri = new Uri(url); lstParam.Add(new ReportParameter("Cabecalho_CodigoBarras", string.Format("{0}://localhost:{1}{2}", uri.Scheme, uri.Port, uri.PathAndQuery))); } else { lstParam.Add(new ReportParameter("Cabecalho_CodigoBarras", Utils.GetUrlSite(context) + "/Handlers/Danfe.ashx?idNf=" + idNf + "&isCodigoBarras=true")); } #endregion } #endregion #region LogoTipo var logotipo = Logotipo.GetReportLogoNF(context.Request, idLoja); if (FiscalConfig.NotaFiscalConfig.EsconderLogotipoDANFEComLogo) { logotipo = "."; } report.EnableExternalImages = true; lstParam.Add(new ReportParameter("Logotipo", logotipo)); #endregion //Ajusta o caminho do report report.ReportPath = context.Server.MapPath("~/" + report.ReportPath); // Atribui parâmetros ao relatório report.SetParameters(lstParam); return(report.Render("PDF", null, out mimeType, out encoding, out extension, out streamids, out warnings)); }
protected void grdManifestoEletronico_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "ConsultaSitLoteMDFe") { try { // Consulta a situação do lote e da MDFe, caso o lote tenha sido processado string msg = ConsultaSituacao.ConsultaSitLoteMDFe(Glass.Conversoes.StrParaInt(e.CommandArgument.ToString())); MensagemAlerta.ShowMsg(msg, Page); grdManifestoEletronico.DataBind(); } catch (Exception ex) { MensagemAlerta.ErrorMsg("Falha ao consultar situação.", ex, Page); } } else if (e.CommandName == "ConsultaSitMDFe") { try { // Consulta a situação do lote e do MDFe, caso o lote tenha sido processado string msg = ConsultaSituacao.ConsultaSitMDFe(Glass.Conversoes.StrParaInt(e.CommandArgument.ToString())); MensagemAlerta.ShowMsg(msg, Page); grdManifestoEletronico.DataBind(); } catch (Exception ex) { MensagemAlerta.ErrorMsg("Falha ao consultar situação.", ex, Page); } } else if (e.CommandName == "EmitirMDFeOffline") { try { var idManifestoEletronico = Glass.Conversoes.StrParaInt(e.CommandArgument.ToString()); var retorno = ManifestoEletronicoDAO.Instance.EmitirMDFeOffline(idManifestoEletronico); // Consulta a situação se o arquivo tiver sido enviado corretamente. if (retorno == "Arquivo recebido com sucesso") { retorno = ConsultaSituacao.ConsultaSitLoteMDFe(idManifestoEletronico); } Response.Redirect("~/Listas/LstManifestoEletronico.aspx?Retorno=" + retorno); } catch (Exception ex) { // Se for erro na validação do arquivo XML, abre popup para mostrar erros if (ex.Message.Contains("XML inconsistente.")) { string msg = MensagemAlerta.FormatErrorMsg("", ex).Replace("XML inconsistente.", "").Replace("Linha:", "%bl%%bl%Linha:"); ClientScript.RegisterClientScriptBlock(typeof(string), "msg", "openWindow(410, 540, '../Utils/ShowMsg.aspx?title=Falha na validação do arquivo do MDF-e&msg=" + msg + "')", true); } else { MensagemAlerta.ErrorMsg("Falha ao emitir o MDFe.", ex, Page); } } } }
/// <summary> /// Salva os arquivos no diretório informado /// </summary> /// <param name="diretorio"></param> public void SalvarArquivos(string diretorio) { var buffer = new byte[1024]; var read = 0; var errosGeracaoMarcacao = string.Empty; for (var i = 0; i < _arquivos.Count; i++) { // Verifica se o arquivo é um zip ou seja um arquivo GLO if (Glass.Arquivos.VerificarArquivoZip(_arquivos[i])) { // Descompacta o arquivo zip using (var ms = new System.IO.MemoryStream(_arquivos[i])) { var zip2 = new CalcEngine.Compression.ZipArchive(ms, System.IO.FileAccess.Read); foreach (var file in zip2.Files) { using (var stream2 = file.OpenRead()) { var fileName = System.IO.Path.GetFileNameWithoutExtension(_nomes[i]); var ms2 = System.IO.File.Create(System.IO.Path.Combine(diretorio, fileName + System.IO.Path.GetExtension(file.Name))); while ((read = stream2.Read(buffer, 0, buffer.Length)) > 0) { ms2.Write(buffer, 0, read); } if (!System.IO.File.Exists(System.IO.Path.Combine(diretorio, (fileName + System.IO.Path.GetExtension(file.Name)).Replace(" ", "").Replace(" ", "")))) { throw new Exception($"Falha ao salvar o arquivo : {_nomes[i]} na pasta {diretorio}."); } } } } } else { System.IO.File.WriteAllBytes(System.IO.Path.Combine(diretorio, _nomes[i].Replace(" ", "").Replace(" ", "")), _arquivos[i]); if (!System.IO.File.Exists(System.IO.Path.Combine(diretorio, _nomes[i].Replace(" ", "").Replace(" ", "")))) { throw new Exception($"Falha ao salvar o arquivo : {_nomes[i]} na pasta {diretorio}."); } } } // Verifica se existe algum erro tratado no momento da geração do arquivo. if (_erros != null && _erros.Any(f => f.Value != null)) { // Monta um texto com todos os problemas ocorridos ao gerar o arquivo de mesa, ao final do método, o texto é salvo em um arquivo separado e é zipado junto com o ASC. errosGeracaoMarcacao = string.Format("Situações com arquivos de mesa: </br></br>{0}", string.Join("</br>", _erros.Where(f => f.Value != null).Select(f => string.Format("Etiqueta: {0} Erro: {1}.", f.Key, MensagemAlerta.FormatErrorMsg(null, f.Value))))); System.IO.File.WriteAllText(System.IO.Path.Combine(diretorio, "Situações com arquivos de mesa.error"), errosGeracaoMarcacao); } }
public string Finalizar(string idTrocaDevStr, string valoresRecebStr, string formasPagtoStr, string contasBancoStr, string depositoNaoIdentificado, string cartaoNaoIdentificado, string tiposCartaoStr, string tiposBoletoStr, string txAntecipStr, string jurosStr, string recebParcial, string gerarCredito, string creditoUtilizado, string numAutConstrucard, string numParcCartoesStr, string chequesPagto, string numAutCartao) { try { uint idTrocaDevolucao = Glass.Conversoes.StrParaUint(idTrocaDevStr); string[] valores = valoresRecebStr.Split(';'); string[] fPagtos = formasPagtoStr.Split(';'); string[] cBancos = contasBancoStr.Split(';'); string[] tCartoes = tiposCartaoStr.Split(';'); string[] tBoletos = tiposBoletoStr.Split(';'); string[] tAntecip = txAntecipStr.Split(';'); string[] parcCartoes = numParcCartoesStr.Split(';'); string[] sDepositoNaoIdentificado = depositoNaoIdentificado.Split(';'); string[] sCartaoNaoIdentificado = cartaoNaoIdentificado.Split(';'); string[] sNumAutCartao = numAutCartao.Split(';'); decimal[] valoresReceb = new decimal[valores.Length]; uint[] formasPagto = new uint[fPagtos.Length]; uint[] contasBanco = new uint[cBancos.Length]; uint[] tiposCartao = new uint[tCartoes.Length]; uint[] tiposBoleto = new uint[tBoletos.Length]; decimal[] txAntecip = new decimal[tAntecip.Length]; uint[] numParcCartoes = new uint[parcCartoes.Length]; uint[] depNaoIdentificado = new uint[sDepositoNaoIdentificado.Length]; uint[] cartNaoIdentificado = new uint[sCartaoNaoIdentificado.Length]; for (int i = 0; i < valores.Length; i++) { valoresReceb[i] = !string.IsNullOrEmpty(valores[i]) ? decimal.Parse(valores[i].Replace(".", ",")) : 0; formasPagto[i] = !string.IsNullOrEmpty(fPagtos[i]) ? Conversoes.StrParaUint(fPagtos[i]) : 0; contasBanco[i] = !string.IsNullOrEmpty(cBancos[i]) ? Conversoes.StrParaUint(cBancos[i]) : 0; tiposCartao[i] = !string.IsNullOrEmpty(tCartoes[i]) ? Conversoes.StrParaUint(tCartoes[i]) : 0; tiposBoleto[i] = !string.IsNullOrEmpty(tBoletos[i]) ? Conversoes.StrParaUint(tBoletos[i]) : 0; txAntecip[i] = !string.IsNullOrEmpty(tAntecip[i]) ? decimal.Parse(tAntecip[i].Replace(".", ",")) : 0; numParcCartoes[i] = !string.IsNullOrEmpty(parcCartoes[i]) ? Conversoes.StrParaUint(parcCartoes[i]) : 0; depNaoIdentificado[i] = !string.IsNullOrEmpty(sDepositoNaoIdentificado[i]) ? Convert.ToUInt32(sDepositoNaoIdentificado[i]) : 0; } for (int i = 0; i < sCartaoNaoIdentificado.Length; i++) { cartNaoIdentificado[i] = !string.IsNullOrEmpty(sCartaoNaoIdentificado[i]) ? Convert.ToUInt32(sCartaoNaoIdentificado[i]) : 0; } decimal juros = Conversoes.StrParaDecimal(jurosStr); decimal creditoUtil = Conversoes.StrParaDecimal(creditoUtilizado); var retorno = TrocaDevolucaoDAO.Instance.Finalizar(idTrocaDevolucao, valoresReceb, formasPagto, contasBanco, depNaoIdentificado, cartNaoIdentificado, tiposCartao, tiposBoleto, txAntecip, juros, recebParcial == "true", gerarCredito == "true", creditoUtil, numAutConstrucard, false, numParcCartoes, chequesPagto, sNumAutCartao); var urlRedirect = "../Listas/LstTrocaDev.aspx"; return("Ok;" + retorno + ";" + urlRedirect); } catch (Exception ex) { return("Erro;" + MensagemAlerta.FormatErrorMsg("Falha ao finalizar troca/devolução.", ex)); } }
public string ValidarExpressao(string idProjetoModelo, string idFormulaExpreCalc, string expressao) { try { if (idProjetoModelo.StrParaIntNullable().GetValueOrDefault() == 0 && idFormulaExpreCalc.StrParaIntNullable().GetValueOrDefault() == 0) { return("Erro|Não foi possível recuperar o projeto, ou a fórmula de expressão e validar a expressão de cálculo."); } if (string.IsNullOrEmpty(expressao)) { return("Erro|Expressão de cálculo não informada."); } var expressaoValida = Data.Helper.UtilsProjeto.ValidarExpressao(idProjetoModelo.StrParaInt(), expressao); return(expressaoValida ? "Ok|" : "Erro|Expressão de cálculo inválida. Verifique o nome dos parâmetros e a expressão de cálculo."); } catch (Exception ex) { return("Erro|Expressão de cálculo inválida. Verifique o nome dos parâmetros e a expressão de cálculo. " + MensagemAlerta.FormatErrorMsg("", ex)); } }
public string GetProduto(string codInterno, string idCli, string idOrca, string tipoEntrega, string revenda, string percDescontoQtdeStr, string orcamentoRapido) { try { Produto prod = ProdutoDAO.Instance.GetByCodInterno(codInterno, null, UserInfo.GetUserInfo.IdLoja, Glass.Conversoes.StrParaUintNullable(idCli), null, true); if (prod == null) { return("Erro;Não existe produto com o código informado."); } var subGrupo = SubgrupoProdDAO.Instance.GetElementByPrimaryKey(prod.IdSubgrupoProd.GetValueOrDefault()) ?? new Glass.Data.Model.SubgrupoProd(); int?tipoOrcamento = String.IsNullOrEmpty(idOrca) ? null : OrcamentoDAO.Instance.ObterTipoOrcamento(null, Glass.Conversoes.StrParaInt(idOrca)); if (prod.Situacao == Glass.Situacao.Inativo) { return("Erro;Produto inativo." + (!String.IsNullOrEmpty(prod.Obs) ? " Obs: " + prod.Obs : "")); } else if (prod.Compra) { return("Erro;Produto apenas para compra."); } string retorno = "Prod;" + prod.IdProd + ";" + prod.Descricao; // Recupera o valor de tabela do produto int? tipoEntr = !String.IsNullOrEmpty(tipoEntrega) ? (int?)Glass.Conversoes.StrParaInt(tipoEntrega) : null; uint? idCliente = !String.IsNullOrEmpty(idCli) ? (uint?)Glass.Conversoes.StrParaUint(idCli) : null; float percDescontoQtde = !String.IsNullOrEmpty(percDescontoQtdeStr) ? float.Parse(percDescontoQtdeStr.Replace(".", ",")) : 0; retorno += ";" + ProdutoDAO.Instance.GetValorTabela(prod.IdProd, tipoEntr, idCliente, revenda.ToLower() == "true", false, percDescontoQtde, null, null, idOrca.StrParaIntNullable()).ToString("F2"); // Verifica qual tipo de entrega será utilizado if (revenda.ToLower() == "true" || ClienteDAO.Instance.IsRevenda(null, idCliente)) // Se for cliente revenda, valor de atacado { retorno += ";1"; } else { switch (tipoEntrega) { case "1": case "4": retorno += ";2"; break; case "2": case "3": case "5": case "6": retorno += ";3"; break; default: retorno += ";1"; break; } } // Espessura do vidro retorno += ";" + prod.Espessura; // Verifica se produto é vidro retorno += ";" + (Glass.Data.DAL.GrupoProdDAO.Instance.IsVidro(prod.IdGrupoProd)).ToString().ToLower(); // Verifica se produto é alumínio int tipoCalc = Glass.Data.DAL.GrupoProdDAO.Instance.TipoCalculo(prod.IdGrupoProd, prod.IdSubgrupoProd); retorno += ";" + (Glass.Data.DAL.GrupoProdDAO.Instance.IsAluminio(prod.IdGrupoProd) || tipoCalc == (int)Glass.Data.Model.TipoCalculoGrupoProd.MLAL0 || tipoCalc == (int)Glass.Data.Model.TipoCalculoGrupoProd.MLAL05 || tipoCalc == (int)Glass.Data.Model.TipoCalculoGrupoProd.MLAL1 || tipoCalc == (int)Glass.Data.Model.TipoCalculoGrupoProd.MLAL6).ToString().ToLower(); // M² mínima para o cálculo do valor do produto retorno += ";" + (prod.AtivarAreaMinima ? prod.AreaMinima.ToString().Replace(',', '.') : "0"); // Verifica se o produto é vidro temperado retorno += ";" + (Glass.Data.DAL.GrupoProdDAO.Instance.IsVidroTemperado(null, prod.IdGrupoProd, prod.IdSubgrupoProd)).ToString().ToLower(); // Verifica o tipo de cálculo que será feito no produto retorno += ";" + Glass.Data.DAL.GrupoProdDAO.Instance.TipoCalculo(prod.IdGrupoProd, prod.IdSubgrupoProd); // Custo do produto retorno += ";" + prod.CustoCompra.ToString().Replace(',', '.'); // Alíquota do ICMS retorno += ";" + prod.AliqICMSInterna.ToString().Replace(',', '.'); bool bloquearEstoque = GrupoProdDAO.Instance.BloquearEstoque(prod.IdGrupoProd, prod.IdSubgrupoProd); retorno += ";" + (bloquearEstoque ? ProdutoLojaDAO.Instance.GetEstoque(null, UserInfo.GetUserInfo.IdLoja, (uint)prod.IdProd).ToString() : "100000"); retorno += ";" + ProdutoDAO.Instance.ExibirMensagemEstoque(prod.IdProd).ToString().ToLower(); retorno += ";" + ProdutoLojaDAO.Instance.GetEstoque(null, UserInfo.GetUserInfo.IdLoja, (uint)prod.IdProd); // Altura/Largura padrão if (prod.Altura != null && prod.Largura != null) { retorno += ";" + prod.Altura.Value + ";" + prod.Largura.Value; } else { retorno += ";;"; } retorno += ";" + prod.IdProcesso + ";" + (prod.IdProcesso > 0 ? EtiquetaProcessoDAO.Instance.ObtemCodInterno((uint)prod.IdProcesso.Value) : "") + ";" + prod.IdAplicacao + ";" + (prod.IdAplicacao > 0 ? EtiquetaAplicacaoDAO.Instance.ObtemCodInterno((uint)prod.IdAplicacao.Value) : ""); return(retorno); } catch (Exception ex) { return("Erro;" + MensagemAlerta.FormatErrorMsg("Falha ao buscar produto.", ex)); } }
/// <summary> /// Envia a MDFe para a SEFAZ via Webservice /// </summary> /// <param name="xmlMDFe"></param> /// <param name="idManifestoEletronico"></param> public static string EnviaMDFe(XmlDocument xmlMDFe, int idManifestoEletronico) { try { // Monta o lote XmlDocument xmlLote = CriaLote(xmlMDFe, idManifestoEletronico); // Busca dados do Manifesto Eletronico var mdfe = ManifestoEletronicoDAO.Instance.ObterManifestoEletronicoPeloId(idManifestoEletronico); #region Envia XML // Instancia xml de retorno XmlNode xmlRetorno = null; // Salva o callback padrão do WebService System.Net.Security.RemoteCertificateValidationCallback callback = System.Net.ServicePointManager.ServerCertificateValidationCallback; // Realiza 3 tentativas de envio, se não funcionar, gera mensagem de erro for (int i = 0; i < 3; i++) { try { // Altera o callback de validação do WebService System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate(object sender, System.Security.Cryptography.X509Certificates.X509Certificate cert, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors error) { // Verifica se a data do certificado é válida DateTime beginDate = DateTime.Parse(cert.GetEffectiveDateString()); DateTime endDate = DateTime.Parse(cert.GetExpirationDateString()); bool isDateValid = (DateTime.Now >= beginDate) && (DateTime.Now <= endDate); // Retorna o resultado da função return(isDateValid); }; #region Envia o arquivo e recebe o retorno if (mdfe.TipoEmissao == Glass.Data.Model.TipoEmissao.Normal) { if (ConfigMDFe.TipoAmbiente == ConfigMDFe.TipoAmbienteMDFe.Producao) { xmlRetorno = GetWebService.PSVRSMDFeRecepcao(mdfe, null).mdfeRecepcaoLote(xmlLote); } // TipoAmbienteMDFe.Homologacao else { xmlRetorno = GetWebService.HSVRSMDFeRecepcao(mdfe, null).mdfeRecepcaoLote(xmlLote); } } // TipoEmissao.Contingencia else { if (ConfigMDFe.TipoAmbiente == ConfigMDFe.TipoAmbienteMDFe.Producao) { xmlRetorno = GetWebService.PSVRSMDFeRecepcao(mdfe, null).mdfeRecepcaoLote(xmlLote); } // TipoAmbienteMDFe.Homologacao else { xmlRetorno = GetWebService.HSVRSMDFeRecepcao(mdfe, null).mdfeRecepcaoLote(xmlLote); } } #endregion break; } catch (Exception ex) { if (i == 3) { LogMDFeDAO.Instance.NewLog(idManifestoEletronico, "Emissão", 1, "Falha ao enviar lote. " + ex.Message); if (mdfe.Situacao != SituacaoEnum.ContingenciaOffline) { ManifestoEletronicoDAO.Instance.AlteraSituacao(idManifestoEletronico, Glass.Data.Model.SituacaoEnum.FalhaEmitir); } return("Falha ao enviar lote. " + ex.Message); } } finally { // Restaura o callback padrão para o WebService System.Net.ServicePointManager.ServerCertificateValidationCallback = callback; } } #endregion #region Lê Xml de retorno do envio do lote // Verifica se o Xml de Retorno é válido if (xmlRetorno == null) { LogMDFeDAO.Instance.NewLog(idManifestoEletronico, "Emissão", 2, "Falha ao enviar lote. Retorno de envio do lote inválido."); if (mdfe.Situacao != SituacaoEnum.ContingenciaOffline) { ManifestoEletronicoDAO.Instance.AlteraSituacao(idManifestoEletronico, Glass.Data.Model.SituacaoEnum.FalhaEmitir); } return("Falha ao enviar lote. Retorno de envio do lote inválido."); } // Lê Xml de retorno do envio do lote var cStat = Conversoes.StrParaInt(xmlRetorno["cStat"].InnerXml); var xMotivo = xmlRetorno["xMotivo"].InnerXml; if (cStat == 103) // Lote recebido com sucesso { LogMDFeDAO.Instance.NewLog(idManifestoEletronico, "Emissão", cStat, xMotivo); // Pega o número do recibo do lote string numReciboLote = xmlRetorno["infRec"]["nRec"].InnerXml; // Salva no MDFe o número do recibo do lote ManifestoEletronicoDAO.Instance.SalvaReciboProtocoloAutorizacao(idManifestoEletronico, numReciboLote); return(xMotivo); } else if (cStat > 200) // Lote foi rejeitado pela SEFAZ { LogMDFeDAO.Instance.NewLog(idManifestoEletronico, "Emissão", cStat, xMotivo); if (mdfe.Situacao != SituacaoEnum.ContingenciaOffline) { ManifestoEletronicoDAO.Instance.AlteraSituacao(idManifestoEletronico, Glass.Data.Model.SituacaoEnum.FalhaEmitir); } return(xMotivo); } else { LogMDFeDAO.Instance.NewLog(idManifestoEletronico, "Emissão", cStat, xMotivo); return(xMotivo); } #endregion } catch (Exception ex) { LogMDFeDAO.Instance.NewLog(idManifestoEletronico, "Emissão", 1, MensagemAlerta.FormatErrorMsg("Falha ao enviar lote.", ex)); return(MensagemAlerta.FormatErrorMsg("Falha ao enviar lote.", ex)); } }
/// <summary> /// Compacta os arquivos gerados. /// </summary> /// <param name="outputStream"></param> public void Compactar(System.IO.Stream outputStream) { // Adiciona os arquivos FML using (var zip = new Ionic.Utils.Zip.ZipFile(outputStream)) { var errosGeracaoMarcacao = string.Empty; var buffer = new byte[1024]; var read = 0; for (var i = 0; i < _arquivos.Count; i++) { // Verifica se o arquivo é um zip ou seja um arquivo GLO if (Glass.Arquivos.VerificarArquivoZip(_arquivos[i])) { // Descompacta o arquivo zip using (var ms = new System.IO.MemoryStream(_arquivos[i])) { var zip2 = new CalcEngine.Compression.ZipArchive(ms, System.IO.FileAccess.Read); foreach (var file in zip2.Files) { using (var stream2 = file.OpenRead()) { var ms2 = new System.IO.MemoryStream((int)file.Length); while ((read = stream2.Read(buffer, 0, buffer.Length)) > 0) { ms2.Write(buffer, 0, read); } var fileName = System.IO.Path.GetFileNameWithoutExtension(_nomes[i]); var directory = System.IO.Path.GetDirectoryName(file.Name); zip.AddFileStream(fileName + System.IO.Path.GetExtension(file.Name), directory, ms2); } } } } else { zip.AddFileStream(_nomes[i].Replace(" ", "").Replace(" ", ""), "", new System.IO.MemoryStream(_arquivos[i])); } } // Verifica se existe algum erro tratado no momento da geração do arquivo. if (_erros != null && _erros.Any(f => f.Value != null)) { // Monta um texto com todos os problemas ocorridos ao gerar o arquivo de mesa, ao final do método, o texto é salvo em um arquivo separado e é zipado junto com o ASC. errosGeracaoMarcacao = string.Format("Situações com arquivos de mesa: </br></br>{0}", string.Join("</br>", _erros.Where(f => f.Value != null).Select(f => string.Format("Etiqueta: {0} Erro: {1}.", f.Key, MensagemAlerta.FormatErrorMsg(null, f.Value))))); zip.AddStringAsFile(errosGeracaoMarcacao, "Situações com arquivos de mesa.error", string.Empty); } zip.Save(); } }
private static string ConsultaSitNFCe(NotaFiscal nf) { #region Monta XML XmlDocument xmlConsSitNFe = new XmlDocument(); XmlNode declarationNode = xmlConsSitNFe.CreateXmlDeclaration("1.0", "UTF-8", null); xmlConsSitNFe.AppendChild(declarationNode); XmlElement consSitNFe = xmlConsSitNFe.CreateElement("consSitNFe"); consSitNFe.SetAttribute("xmlns", "http://www.portalfiscal.inf.br/nfe"); consSitNFe.SetAttribute("versao", ConfigNFe.VersaoConsulta); xmlConsSitNFe.AppendChild(consSitNFe); ManipulacaoXml.SetNode(xmlConsSitNFe, consSitNFe, "tpAmb", ((int)ConfigNFe.TipoAmbiente).ToString()); ManipulacaoXml.SetNode(xmlConsSitNFe, consSitNFe, "xServ", "CONSULTAR"); ManipulacaoXml.SetNode(xmlConsSitNFe, consSitNFe, "chNFe", nf.ChaveAcesso); #endregion // Salva o callback padrão do WebService System.Net.Security.RemoteCertificateValidationCallback callback = System.Net.ServicePointManager.ServerCertificateValidationCallback; XmlNode xmlRetorno = null; try { // Altera o callback de validação do WebService System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate(object sender, System.Security.Cryptography.X509Certificates.X509Certificate cert, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors error) { // Verifica se a data do certificado é válida DateTime beginDate = DateTime.Parse(cert.GetEffectiveDateString()); DateTime endDate = DateTime.Parse(cert.GetExpirationDateString()); bool isDateValid = (DateTime.Now >= beginDate) && (DateTime.Now <= endDate); // Retorna o resultado da função return(isDateValid); }; // Envia o arquivo e recebe o retorno. xmlRetorno = EnviaXML.ObterXmlConsultaProtocoloNFCe(nf, xmlConsSitNFe); } catch (Exception ex) { LogNfDAO.Instance.NewLog(nf.IdNf, "Instaciar Webservice", 3, MensagemAlerta.FormatErrorMsg("Falha ao instanciar webservice.", ex)); throw new Exception(Glass.MensagemAlerta.FormatErrorMsg("Falha ao chamar WebService.", ex)); } finally { // Restaura o callback padrão para o WebService System.Net.ServicePointManager.ServerCertificateValidationCallback = callback; } if (xmlRetorno == null) { throw new Exception("Falha ao comunicar com webservice da SEFAZ."); } var codStatus = xmlRetorno?["cStat"]?.InnerXml; // Executa ações de acordo com o retorno dado NotaFiscalDAO.Instance.RetornoConsSitNFe(nf.IdNf, xmlRetorno); if (codStatus == "100" || codStatus == "150") // NFe Autorizada { return("NFe está autorizada para uso."); } else // NFe rejeitada { var msgErro = "Falha na consulta. "; if (codStatus == "215" || codStatus == "516" || codStatus == "517" || codStatus == "545") { msgErro += "Mensagem de consulta inválida. "; } return($"{ msgErro }{ xmlRetorno?["cStat"]?.InnerXml } - { CustomizaMensagemRejeicao(nf.IdNf, xmlRetorno?["xMotivo"]?.InnerXml) }"); } }
public string Confirmar(string idsPedidos, string dataRecebimento, string fPagtos, string valores, string contas, string depositoNaoIdentificado, string cartaoNaoIdentificado, string tpCartoes, string gerarCredito, string creditoUtilizado, string cxDiario, string numAutConstrucard, string parcCredito, string chequesPagto, string descontarComissao, string obs, string isSinalStr, string numAutCartao, string receberCappta) { try { FilaOperacoes.ReceberSinal.AguardarVez(); string[] sFormasPagto = fPagtos.Split(';'); string[] sValoresReceb = valores.Split(';'); string[] sIdContasBanco = contas.Split(';'); string[] sTiposCartao = tpCartoes.Split(';'); string[] sParcCartoes = parcCredito.Split(';'); string[] sDepositoNaoIdentificado = depositoNaoIdentificado.Split(';'); string[] sCartaoNaoIdentificado = cartaoNaoIdentificado.Split(';'); string[] sNumAutCartao = numAutCartao.Split(';'); uint[] formasPagto = new uint[sFormasPagto.Length]; decimal[] valoresReceb = new decimal[sValoresReceb.Length]; uint[] idContasBanco = new uint[sIdContasBanco.Length]; uint[] tiposCartao = new uint[sTiposCartao.Length]; uint[] parcCartoes = new uint[sParcCartoes.Length]; uint[] depNaoIdentificado = new uint[sDepositoNaoIdentificado.Length]; var cartNaoIdentificado = new uint[sCartaoNaoIdentificado.Length]; for (var i = 0; i < sFormasPagto.Length; i++) { formasPagto[i] = sFormasPagto[i].StrParaUint(); valoresReceb[i] = sValoresReceb[i].StrParaDecimal(); idContasBanco[i] = sIdContasBanco[i].StrParaUint(); tiposCartao[i] = sTiposCartao[i].StrParaUint(); parcCartoes[i] = sParcCartoes[i].StrParaUint(); depNaoIdentificado[i] = !string.IsNullOrEmpty(sDepositoNaoIdentificado[i]) ? sDepositoNaoIdentificado[i].StrParaUint() : 0; } for (var i = 0; i < sCartaoNaoIdentificado.Length; i++) { cartNaoIdentificado[i] = !string.IsNullOrEmpty(sCartaoNaoIdentificado[i]) ? sCartaoNaoIdentificado[i].StrParaUint() : 0; } var creditoUtil = creditoUtilizado.StrParaDecimal(); var isSinal = isSinalStr == "true"; if (receberCappta == "true") { var idSinal = SinalDAO.Instance.CriarPreRecebimentoSinalPagamentoAntecipadoComTransacao(cxDiario == "1", creditoUtil, chequesPagto?.Split('|').ToList() ?? new List <string>(), dataRecebimento.StrParaDate().GetValueOrDefault(DateTime.Now), descontarComissao == "true", gerarCredito == "true", cartNaoIdentificado.Select(f => (int)f), idContasBanco.Select(f => (int)f), depNaoIdentificado.Select(f => (int)f), formasPagto.Select(f => (int)f), idsPedidos.Split(',').Select(f => f.StrParaIntNullable().GetValueOrDefault()), tiposCartao.Select(f => (int)f), isSinal, numAutConstrucard, sNumAutCartao, obs, parcCartoes.Select(f => (int)f), valoresReceb); return(string.Format("ok\t{0}", idSinal)); } // Recebe Sinal/Confirma pedido string msg = SinalDAO.Instance.ReceberSinalPagamentoAntecipado(cxDiario == "1", creditoUtil, chequesPagto?.Split('|').ToList() ?? new List <string>(), dataRecebimento.StrParaDate().GetValueOrDefault(DateTime.Now), descontarComissao == "true", gerarCredito == "true", cartNaoIdentificado.Select(f => (int)f), idContasBanco.Select(f => (int)f), depNaoIdentificado.Select(f => (int)f), formasPagto.Select(f => (int)f), idsPedidos.Split(',').Select(f => f.StrParaIntNullable().GetValueOrDefault()), tiposCartao.Select(f => (int)f), isSinal, numAutConstrucard, sNumAutCartao, obs, parcCartoes.Select(f => (int)f), valoresReceb); return(string.Format("ok\t{0}", msg)); } catch (Exception ex) { return(string.Format("Erro\t{0}", MensagemAlerta.FormatErrorMsg(null, ex))); } finally { FilaOperacoes.ReceberSinal.ProximoFila(); } }
protected void btnConfirmar_Click(object sender, EventArgs e) { try { if (chkAlterarDataEntrega.Checked && string.IsNullOrWhiteSpace(((TextBox)ctrlDataEntrega.FindControl("txtData")).Text)) { throw new Exception("Informe a data de entrega dos pedidos."); } var idsPedido = new List <int>(); for (var i = 0; i < grdPedido.Rows.Count; i++) { var chkMarcar = grdPedido.Rows[i].Cells[0].FindControl("chkMarcar") as CheckBox; var hdfIdPedido = grdPedido.Rows[i].Cells[0].FindControl("hdfIdPedido") as HiddenField; if (chkMarcar != null && chkMarcar.Checked) { if (hdfIdPedido != null) { idsPedido.Add(hdfIdPedido.Value.StrParaInt()); } } } if (idsPedido.Count == 0) { throw new Exception("Informe os pedidos que serão confirmados."); } var data = ((TextBox)ctrlDataEntrega.FindControl("txtData")).Text; string script; if (chkGerarEspelho.Checked) { // Verifica se o usuário possui permissão para gerar espelho de pedido if (Data.Helper.UserInfo.GetUserInfo.IdCliente == null || Data.Helper.UserInfo.GetUserInfo.IdCliente == 0) { foreach (var idPedido in idsPedido) { var isMaoDeObra = PedidoDAO.Instance.IsMaoDeObra(null, (uint)idPedido); if (!Data.Helper.Config.PossuiPermissao(Data.Helper.Config.FuncaoMenuPCP.GerarConferenciaPedido)) { if (Data.Helper.Config.PossuiPermissao(Data.Helper.Config.FuncaoMenuPCP.ImprimirEtiquetasMaoDeObra) && !isMaoDeObra) { throw new Exception("Você pode gerar conferência apenas de pedidos mão de obra."); } else { throw new Exception("Você não possui permissão para gerar Conferências de Pedidos."); } } } } } WebGlass.Business.Pedido.Fluxo.ConfirmarPedido.Instance.ConfirmarPedidoLiberacao(idsPedido, chkAlterarDataEntrega.Checked, !string.IsNullOrEmpty(data) ? (DateTime?)DateTime.Parse(data) : null, chkGerarEspelho.Checked, out script); grdPedido.DataBind(); if (!string.IsNullOrEmpty(script)) { ClientScript.RegisterStartupScript(typeof(string), "ok", script, true); } } catch (ValidacaoPedidoFinanceiroException f) { var mensagem = MensagemAlerta.FormatErrorMsg(string.Empty, f); var script = $@"var resposta = CadConfirmarPedidoLiberacao.EnviarConfirmarFinanceiro('{ string.Join(",", f.IdsPedido) }', '{ mensagem }').value.split('|'); if (resposta[0] == 'Ok') redirectUrl(window.location.href); else alert(resposta[1]);"; if (FinanceiroConfig.PerguntarVendedorConfirmacaoFinanceiro) { var incluirS = f.IdsPedido.Count > 1 ? "s" : string.Empty; script = $"if (confirm('Não foi possível confirmar o{ incluirS } pedido{ incluirS } { string.Join(", ", f.IdsPedido) }. Erro: { mensagem.TrimEnd(' ', '.') }." + $"\\nDeseja enviar esse pedido para confirmar pelo Financeiro?')) { "{" }{ script }{ "}" }"; } else { var incluirS = f.IdsPedido.Count > 1 ? "s" : string.Empty; script = $"alert('Houve um erro ao confirmar o{ incluirS } pedido{ incluirS } { string.Join(", ", f.IdsPedido) }. " + $"Eles foram disponibilizados para confirmação pelo Financeiro.'); { "{" }{ script }{ "}" }"; } Page.ClientScript.RegisterStartupScript(GetType(), "btnFinalizar", script, true); } catch (Exception ex) { MensagemAlerta.ErrorMsg("Falha ao confirmar pedido.", ex, Page); } }
/// <summary> /// Dá baixa no estoque no produto da loja passados /// </summary> private void MovimentaEstoqueFiscal(GDASession sessao, uint idProd, uint idLoja, uint?idNaturezaOperacao, MovEstoque.TipoMovEnum tipoMov, uint?idNf, uint?idProdNf, bool lancManual, decimal qtdeMov, decimal total, DateTime dataMov, string obs, bool estorno) { var usarValorProdNf = Configuracoes.EstoqueConfig.ConsiderarTotalProdNfMovEstoqueFiscal; try { ProdutoBaixaEstoqueFiscal[] prodBaixEstFisc; if (!lancManual) { prodBaixEstFisc = ProdutoBaixaEstoqueFiscalDAO.Instance.GetByProd(idProd); } else { prodBaixEstFisc = new ProdutoBaixaEstoqueFiscal[] { new ProdutoBaixaEstoqueFiscal() { IdProd = (int)idProd, IdProdBaixa = (int)idProd, Qtde = 1 } } }; if (AlteraEstoqueFiscal(idProd, idNaturezaOperacao) || lancManual) { foreach (var pbef in prodBaixEstFisc) { var qtde = qtdeMov * (decimal)pbef.Qtde; var totalMov = total * (decimal)pbef.Qtde; if (pbef.IdProdBaixa != idProd) { if (estorno || usarValorProdNf) { /* Chamado 38441. */ if (Configuracoes.EstoqueConfig.AbaterICMSDoTotalProdNfMovEstoqueFiscal && idProdNf > 0) { var valorIcms = ProdutosNfDAO.Instance.ObterValorIcms(sessao, (int)idProdNf.GetValueOrDefault()); totalMov -= valorIcms; } } } // Recupera os dados da movimentação anterior decimal saldoQtdeAnterior = ObtemSaldoQtdeMov(sessao, null, (uint)pbef.IdProdBaixa, idLoja, dataMov, true); decimal saldoValorAnterior = ObtemSaldoValorMov(sessao, null, (uint)pbef.IdProdBaixa, idLoja, dataMov, true); /* Chamado 16616. * O saldo do ficou negativo após a emissão de uma nota fiscal. * Esta verificação irá impedir que isto ocorra novamente. */ // Verifica se, ao registrar a movimentação, o saldo em estoque do produto ficará negativo. if ((saldoQtdeAnterior - qtde) < 0 && tipoMov == MovEstoque.TipoMovEnum.Saida) { var validarEstoqueDisponivel = true; /* Chamado 53204. */ if (idNf > 0) { validarEstoqueDisponivel = NotaFiscalDAO.Instance.GetTipoDocumento(sessao, idNf.Value) == (int)NotaFiscal.TipoDoc.EntradaTerceiros; } if (validarEstoqueDisponivel) { var idGrupoProdBaixa = ProdutoDAO.Instance.ObtemIdGrupoProd(pbef.IdProdBaixa); var idSubgrupoProdBaixa = ProdutoDAO.Instance.ObtemValorCampo <int?>("IdSubGrupoProd", "IdProd=" + pbef.IdProdBaixa); // Verifica se o subgrupo ou o grupo do produto estão marcados para bloquear estoque. if (GrupoProdDAO.Instance.BloquearEstoque((int)idGrupoProdBaixa, idSubgrupoProdBaixa)) { throw new Exception ( "O grupo/subgrupo do produto está marcado para bloquear estoque, portanto, o estoque não pode ser negativo." ); } } } // Registra a alteração do estoque MovEstoqueFiscal movEstoque = new MovEstoqueFiscal(); movEstoque.IdProd = (uint)pbef.IdProdBaixa; movEstoque.IdLoja = idLoja; movEstoque.IdFunc = UserInfo.GetUserInfo.CodUser; movEstoque.IdNf = idNf; movEstoque.IdProdNf = idProdNf; movEstoque.LancManual = lancManual; movEstoque.TipoMov = (int)tipoMov; movEstoque.DataMov = dataMov; movEstoque.Obs = obs; if (dataMov.Date != DateTime.Now.Date) { movEstoque.DataCad = DateTime.Now; } movEstoque.QtdeMov = qtde; movEstoque.SaldoQtdeMov = Math.Round(saldoQtdeAnterior + (tipoMov == MovEstoque.TipoMovEnum.Entrada ? qtde : -qtde), 2); if (movEstoque.SaldoQtdeMov < 0) { movEstoque.ValorMov = 0; movEstoque.SaldoValorMov = 0; } // Caso o tipo da nota fiscal seja "Saída" o tipo da movimentação será entrada somente no caso de um estorno, // e o estorno da nota fiscal de saída deve calcular o valor e a quantidade da movimentação da mesma forma que é // calculado na movimentação de saída da nota. Por isso, neste momento, deve ser verificado se a nota é de saída. else if (tipoMov == MovEstoque.TipoMovEnum.Entrada && (idNf.GetValueOrDefault() > 0 ? NotaFiscalDAO.Instance.ObtemValorCampo <int>(sessao, "tipoDocumento", "IdNf=" + idNf.Value) != (int)NotaFiscal.TipoDoc.Saída : true)) { decimal perc = qtde > movEstoque.SaldoQtdeMov ? qtde / (movEstoque.SaldoQtdeMov > 0 ? movEstoque.SaldoQtdeMov : 1) : 1; movEstoque.ValorMov = Math.Abs(totalMov); movEstoque.SaldoValorMov = saldoValorAnterior + (movEstoque.ValorMov * perc); } else { decimal valorUnit = saldoValorAnterior / (saldoQtdeAnterior > 0 ? saldoQtdeAnterior : 1); movEstoque.ValorMov = Math.Abs(valorUnit * qtde); movEstoque.SaldoValorMov = saldoValorAnterior - (valorUnit * qtde); } movEstoque.IdMovEstoqueFiscal = Insert(sessao, movEstoque); // Chamado 15184: Sempre atualiza o saldo, para resolver o erro de não recalcular o saldo var idMovAnterior = ObtemIdMovAnterior(sessao, movEstoque.IdMovEstoqueFiscal, movEstoque.IdProd, movEstoque.IdLoja, movEstoque.DataMov); if (idMovAnterior != null) { AtualizaSaldo(sessao, idMovAnterior.Value); } else { AtualizaSaldo(sessao, movEstoque.IdMovEstoqueFiscal); } // Atualiza a tabela produto_loja AtualizaProdutoLoja(sessao, movEstoque.IdProd, movEstoque.IdLoja); } } if (!lancManual && idNaturezaOperacao > 0 && CfopDAO.Instance.AlterarEstoqueTerceiros(sessao, NaturezaOperacaoDAO.Instance.ObtemIdCfop(sessao, idNaturezaOperacao.Value))) { if (prodBaixEstFisc != null && prodBaixEstFisc.Length > 0 && prodBaixEstFisc[0].IdProdBaixa > 0) { foreach (var pbef in prodBaixEstFisc) { AtualizaProdutoLojaQtdeTerceiros(sessao, tipoMov, idLoja, (uint)pbef.IdProdBaixa, qtdeMov); } } else { AtualizaProdutoLojaQtdeTerceiros(sessao, tipoMov, idLoja, idProd, qtdeMov); } } } catch (Exception ex) { if (idNf > 0) { LogNfDAO.Instance.NewLog(idNf.Value, "Estoque", 2, MensagemAlerta.FormatErrorMsg("Falha ao movimentar estoque.", ex)); ErroDAO.Instance.InserirFromException("MovEstoqueFiscal", ex); } // Chamado 26887, não estava lançando exception if (lancManual) { throw ex; } } }
public string GetProdByPedido( string idPedidoStr, string idLojaStr, string idProcessoStr, string idAplicacaoStr, string idsProdPedAmbiente, string idCorVidroStr, string espessuraStr, string idSubgrupoProdStr, string alturaMinStr, string alturaMaxStr, string larguraMinStr, string larguraMaxStr, string noCache) { try { var idPedido = idPedidoStr.StrParaUint(); // Verifica se já foi gerado um espelho para este pedido. if (!PedidoEspelhoDAO.Instance.ExisteEspelho(null, idPedido)) { return("Erro\tAinda não foi gerada uma conferência para este pedido."); } var situacaoPedidoEspelho = PedidoEspelhoDAO.Instance.ObtemSituacao(null, idPedido); // Verifica se o espelho não está em aberto. if (situacaoPedidoEspelho == PedidoEspelho.SituacaoPedido.Processando || situacaoPedidoEspelho == PedidoEspelho.SituacaoPedido.Aberto) { return("Erro\tEsta conferência do pedido " + idPedido + " ainda não foi finalizada."); } var idLoja = idLojaStr.StrParaIntNullable(); var idProcesso = idProcessoStr.StrParaUint(); var idAplicacao = idAplicacaoStr.StrParaUint(); var idCorVidro = idCorVidroStr.StrParaUint(); var espessura = espessuraStr.StrParaFloat(); var idSubgrupoProd = idSubgrupoProdStr.StrParaUint(); var alturaMin = alturaMinStr.StrParaFloat(); var alturaMax = alturaMaxStr.StrParaFloat(); var larguraMin = larguraMinStr.StrParaInt(); var larguraMax = larguraMaxStr.StrParaInt(); var permissaoImpEtiq = Config.PossuiPermissao(Config.FuncaoMenuPCP.ImprimirEtiquetas); var permissaoImpMaoDeObra = Config.PossuiPermissao(Config.FuncaoMenuPCP.ImprimirEtiquetasMaoDeObra); var pedidoMaoDeObra = PedidoDAO.Instance.IsMaoDeObra(null, idPedido); if (!permissaoImpEtiq && !permissaoImpMaoDeObra) { return("Erro\tVocê não tem permissão para imprimir etiquetas."); } var produtosImprimir = new List <string>(); if (!pedidoMaoDeObra) { // Verifica se o funcionário pode imprimir qualquer tipo de etiquetas. if (!permissaoImpEtiq) { if (permissaoImpMaoDeObra) { return("Erro\tVocê pode imprimir etiquetas apenas de pedidos de mão de obra."); } else { return("Erro\tVocê não tem permissão para imprimir etiquetas."); } } var produtosPedidoEspelho = ProdutosPedidoEspelhoDAO.Instance.GetProdToEtiq( idPedido, idProcesso, idAplicacao, idCorVidro, espessura, idSubgrupoProd, alturaMin, alturaMax, larguraMin, larguraMax, idLoja); // Filtra pelos produtos desejados. if (!string.IsNullOrWhiteSpace(idsProdPedAmbiente)) { var ids = idsProdPedAmbiente.Split(',').Select(x => x.StrParaUint()).ToList(); produtosPedidoEspelho = produtosPedidoEspelho.Where(x => ids.Contains(x.IdProdPed)).ToList(); } // Verifica se há produtos a serem adicionados. if (string.IsNullOrWhiteSpace(idsProdPedAmbiente) && produtosPedidoEspelho.Count == 0) { var idsImpressoes = ImpressaoEtiquetaDAO.Instance.GetIdsByPedido(null, idPedido); var producao = PedidoDAO.Instance.IsProducao(null, idPedido) ? ", que não seja para estoque," : string.Empty; var mensagem = $"Erro\tNão há nenhum produto{producao} que atende aos filtros selecionados neste Pedido que não tenha sido impresso."; if (!string.IsNullOrWhiteSpace(idsImpressoes)) { mensagem += $"\nImpressões: {idsImpressoes}."; } return(mensagem); } var idsProdPedQuantidadeEtiquetasExportadas = ProdutosPedidoEspelhoDAO.Instance.ObterQuantidadeEtiquetasExportadas( null, produtosPedidoEspelho.Select(f => (int)f.IdProdPed).ToList()); foreach (var produtoPedidoEspelho in produtosPedidoEspelho) { if (produtoPedidoEspelho.PecaReposta && produtoPedidoEspelho.NumEtiqueta == null) { throw new Exception($"A etiqueta da peça repostas está nula. IdProdPed: {produtoPedidoEspelho.IdProdPed}."); } var qtde = produtoPedidoEspelho.Qtde; if (produtoPedidoEspelho.PecaReposta) { qtde = 1; } else if (produtoPedidoEspelho.IsProdutoLaminadoComposicao) { qtde = (int)produtoPedidoEspelho.QtdeImpressaoProdLamComposicao; } else if (produtoPedidoEspelho.IsProdFilhoLamComposicao) { qtde = ProdutosPedidoEspelhoDAO.Instance.ObtemQtde(null, produtoPedidoEspelho.IdProdPedParent.Value) * produtoPedidoEspelho.Qtde; var idProdPedParentPai = ProdutosPedidoEspelhoDAO.Instance.ObterIdProdPedParent(null, produtoPedidoEspelho.IdProdPedParent.Value); if (idProdPedParentPai > 0) { qtde *= ProdutosPedidoEspelhoDAO.Instance.ObtemQtde(null, idProdPedParentPai.Value); } } var descricaoProduto = produtoPedidoEspelho.DescricaoProdutoComBenef.Replace("|", string.Empty).Replace(";", string.Empty) + (produtoPedidoEspelho.PecaReposta ? " (Reposta)" : string.Empty); var codigoProcesso = produtoPedidoEspelho?.CodProcesso?.Replace("|", string.Empty).Replace(";", string.Empty) ?? string.Empty; var codigoAplicacao = produtoPedidoEspelho?.CodAplicacao?.Replace("|", string.Empty).Replace(";", string.Empty) ?? string.Empty; var observacaoGrid = !string.IsNullOrWhiteSpace(produtoPedidoEspelho.Obs) && !PCPConfig.Etiqueta.NaoExibirObsPecaAoImprimirEtiqueta ? produtoPedidoEspelho.Obs.Replace("|", string.Empty).Replace(";", string.Empty) : string.Empty; var numEtiquetaPecaReposta = produtoPedidoEspelho.PecaReposta && !string.IsNullOrWhiteSpace(produtoPedidoEspelho.NumEtiqueta) ? produtoPedidoEspelho.NumEtiqueta.ToLower() : string.Empty; var larguraProducao = produtoPedidoEspelho.Redondo ? 0 : produtoPedidoEspelho.LarguraProducao; var quantidadeImpressa = produtoPedidoEspelho.PecaReposta ? 1 : produtoPedidoEspelho.QtdImpresso; var quantidadeEtiquetasExportadas = idsProdPedQuantidadeEtiquetasExportadas?.Where(f => f.IdProdPed == produtoPedidoEspelho.IdProdPed)?.Sum(f => f.QuantidadeExportada) ?? 0; var qtdeCalcular = qtde > 0 ? qtde : produtoPedidoEspelho.Qtde; var totM2 = produtoPedidoEspelho.PecaReposta ? produtoPedidoEspelho.TotM / produtoPedidoEspelho.Qtde : produtoPedidoEspelho.TotM / produtoPedidoEspelho.Qtde * (qtdeCalcular - produtoPedidoEspelho.QtdImpresso); var totM2Calc = produtoPedidoEspelho.PecaReposta ? produtoPedidoEspelho.TotM2Calc / produtoPedidoEspelho.Qtde : produtoPedidoEspelho.TotM2Calc / produtoPedidoEspelho.Qtde * (qtdeCalcular - produtoPedidoEspelho.QtdImpresso); produtosImprimir.Add(string.Format( "{0};{1};{2};{3};{4};{5};{6};{7};{8};{9};{10};{11};{12};{13};{14}", produtoPedidoEspelho.IdProdPed, string.Empty, produtoPedidoEspelho.IdPedido, descricaoProduto, codigoProcesso, codigoAplicacao, qtde, quantidadeImpressa, produtoPedidoEspelho.AlturaProducao, larguraProducao, observacaoGrid, totM2.ToString("0.##"), numEtiquetaPecaReposta, totM2Calc.ToString("0.##"), quantidadeEtiquetasExportadas)); } } else { var ambientes = AmbientePedidoEspelhoDAO.Instance.GetForEtiquetas( idPedido, idProcesso, idAplicacao, idCorVidro, espessura, idSubgrupoProd, alturaMin, alturaMax, larguraMin, larguraMax); // Filtra pelos produtos desejados. if (!string.IsNullOrWhiteSpace(idsProdPedAmbiente)) { var ids = idsProdPedAmbiente.Split(',').Select(x => x.Replace("A", string.Empty).StrParaUint()).ToList(); ambientes = ambientes.Where(x => ids.Contains(x.IdAmbientePedido)).ToList(); } // Verifica se há produtos a serem adicionados. if (string.IsNullOrEmpty(idsProdPedAmbiente) && ambientes.Count == 0) { var msg = "Erro\tNão há nenhum produto que atende aos filtros selecionados neste Pedido que não tenha sido impresso."; var idsImpressoes = ImpressaoEtiquetaDAO.Instance.GetIdsByPedido(null, idPedido); if (!string.IsNullOrWhiteSpace(idsImpressoes)) { msg += $"\nImpressões: {idsImpressoes}"; } return(msg); } foreach (var ambiente in ambientes) { var totM2 = ambiente.TotM / ambiente.Qtde.Value * (ambiente.Qtde.Value - ambiente.QtdeImpresso.Value); var descricaoAmbiente = ambiente.Ambiente.Replace("|", string.Empty).Replace(";", string.Empty) + (ambiente.Redondo ? " REDONDO" : string.Empty); var codigoProcesso = ambiente?.CodProcesso?.Replace("|", string.Empty).Replace(";", string.Empty) ?? string.Empty; var codigoAplicacao = ambiente?.CodAplicacao?.Replace("|", string.Empty).Replace(";", string.Empty); var larguraAmbiente = ambiente.Redondo ? 0 : ambiente.Largura.Value; produtosImprimir.Add(string.Format( "{0};{1};{2};{3};{4};{5};{6};{7};{8};{9};{10};{11};{12};{13};{14}", string.Empty, ambiente.IdAmbientePedido, ambiente.IdPedido, descricaoAmbiente, codigoProcesso, codigoAplicacao, ambiente.Qtde, ambiente.QtdeImpresso, ambiente.Altura, larguraAmbiente, string.Empty, totM2.ToString("0.##"), string.Empty, string.Empty, string.Empty)); } } return($"ok\t{string.Join("|", produtosImprimir.Select(f => f.Replace('\t', ' ')))}"); } catch (Exception ex) { return(MensagemAlerta.FormatErrorMsg("Erro\t", ex)); } }