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);
                }
            }
        }
Example #2
0
        /// <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));
        }
Example #3
0
        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)));
            }
        }
Example #4
0
        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());
        }
Example #5
0
        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));
                }
            }
        }
Example #6
0
        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));
            }
        }
Example #7
0
 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" : ""));
     }
 }
Example #8
0
        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>");
        }
Example #9
0
        private string GetErrorResponse(Exception ex)
        {
            bool debug = false;

            string html = debug ? ex.ToString().Replace("\n", "<br>").Replace("\r", "").Replace(" ", "&nbsp;") : @"
            <script type='text/javascript'>
                alert('" + MensagemAlerta.FormatErrorMsg("", ex) + @"');
                window.history.go(-1);
            </script>";

            return(@"
            <html>
                <body>
                    " + html + @"
                </body>
            </html>");
        }
Example #10
0
        /// <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);
            }
        }
Example #11
0
        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));
                }
            }
        }
Example #12
0
        /// <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)));
            }
        }
Example #14
0
        /// <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));
                }
            }
        }
Example #15
0
        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) }");
            }
        }
Example #16
0
        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)));
            }
        }
Example #17
0
        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);
                    }
                }
            }
        }
Example #19
0
        /// <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);
            }
        }
Example #20
0
        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));
            }
        }
Example #21
0
        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));
            }
        }
Example #22
0
        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));
            }
        }
Example #23
0
        /// <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));
            }
        }
Example #24
0
        /// <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();
            }
        }
Example #25
0
        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) }");
            }
        }
Example #26
0
        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();
            }
        }
Example #27
0
        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);
            }
        }
Example #28
0
        /// <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;
                }
            }
        }
Example #29
0
        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));
            }
        }