public async Task <JsonResult> GetPedido(int codPedido)
        {
            var result = new ServiceResultViewModel(true, new List <string>(), null);

            try
            {
                var peds = await _rep.GetPedidosAbertos(codPedido);

                var ped = peds.FirstOrDefault();
                ped.DescricaoFormaPagamento = Util.GetDescricaoFormaPagamentoPedido(ped.FormaPagamento);

                result.data = ped;

                result.Succeeded = true;
            }
            catch (Exception ex)
            {
                result.Succeeded = false;
                result.Errors.Add(ex.Message);
            }

            return(new JsonNetResult {
                Data = result
            });
        }
Пример #2
0
        public ServiceResultViewModel GetClassesFromTron()
        {
            ServiceResultViewModel result = new ServiceResultViewModel {
                Succeeded = true, Errors = new List <string>(), data = null
            };

            try
            {
                TronSolutionData.Context.TronSolutionConnection tron = new TronSolutionConnection();

                var query = from classe in tron.CLASSE_ITEMCARDAPIO
                            where tron.ITEM_CARDAPIO.Any(i => (i.CD_CLASSEITEMCARDAPIO == classe.CD_CLASSEITEMCARDAPIO))
                            orderby classe.CD_CLASSEITEMCARDAPIO
                            select new ClasseItemCardapioViewModel {
                    CodClasse = classe.CD_CLASSEITEMCARDAPIO, DescricaoClasse = classe.DS_CLASSEITEMCARDAPIO
                };

                result.data = query.ToList();

                tron.Dispose();
                tron = null;
            }
            catch (Exception ex)
            {
                result.Succeeded = false;
                result.Errors.Add(ex.Message);
            }

            return(result);
        }
        public async Task <JsonResult> GetPedido(DateTime?dataInicio, DateTime?dataFim)
        {
            var result = new ServiceResultViewModel(true, new List <string>(), null);

            try
            {
                var peds = await _rep.GetPedidosConsulta(dataInicio, dataFim);

                foreach (var ped in peds)
                {
                    ped.DescricaoFormaPagamento = Util.GetDescricaoFormaPagamentoPedido(ped.FormaPagamento);
                }

                result.data = peds;

                result.Succeeded = true;
            }
            catch (Exception ex)
            {
                result.Succeeded = false;
                result.Errors.Add(ex.Message);
            }

            return(new JsonNetResult {
                Data = result
            });
        }
Пример #4
0
        public ServiceResultViewModel GetItensFromTron()
        {
            ServiceResultViewModel result = new ServiceResultViewModel {
                Succeeded = true, Errors = new List <string>(), data = null
            };

            try
            {
                TronSolutionData.Context.TronSolutionConnection tron = new TronSolutionConnection();

                var query = from item in tron.ITEM_CARDAPIO
                            join emp in tron.ITEM_CARDAPIOXEMPRESA on item.CD_ITEMCARDAPIO equals emp.CD_ITEMCARDAPIO
                            where item.CD_CLASSEITEMCARDAPIO != null && emp.VALOR_VENDA != null && (item.PODE_TELE_ENTREGA != null && item.PODE_TELE_ENTREGA.Value == 1)
                            orderby item.CD_ITEMCARDAPIO
                            select new ItemCardapioViewModel {
                    CodItemCardapio = item.CD_ITEMCARDAPIO, Ativo = (emp.ATIVO == null || emp.ATIVO.Value == 0 ? false : true), CodClasse = item.CD_CLASSEITEMCARDAPIO.Value, Nome = item.DS_ITEMCARDAPIO, Preco = (Double)emp.VALOR_VENDA.Value
                };

                result.data = query.ToList();

                tron.Dispose();
                tron = null;
            }
            catch (Exception ex)
            {
                result.Succeeded = false;
                result.Errors.Add(ex.Message);
            }

            return(result);
        }
        public async Task <JsonResult> GetPedidosAbertos()
        {
            var result = new ServiceResultViewModel(true, new List <string>(), null);

            try
            {
                result.data = await _rep.GetPedidosAbertos(null);

                foreach (var ped in result.data)
                {
                    ped.DescricaoFormaPagamento = Util.GetDescricaoFormaPagamentoPedido(ped.FormaPagamento);
                }

                result.Succeeded = true;
            }
            catch (Exception ex)
            {
                result.Succeeded = false;
                result.Errors.Add(ex.Message);
            }

            return(new JsonNetResult {
                Data = result
            });
        }
Пример #6
0
        public ServiceResultViewModel GetDadosTron()
        {
            ServiceResultViewModel retorno = new ServiceResultViewModel(true, null, null);
            ServiceResultViewModel retornoClasses;
            ServiceResultViewModel retornoItens = bo.GetItensFromTron();

            if (retornoItens.Succeeded)
            {
                retornoClasses = bo.GetClassesFromTron();

                if (retornoClasses.Succeeded)
                {
                    retorno.Succeeded = true;
                    retorno.data      = new { Classes = retornoClasses.data, Itens = retornoItens.data };
                }
                else
                {
                    return(retornoClasses);
                }
            }
            else
            {
                return(retornoItens);
            }


            return(retorno);
        }
        public async Task <JsonResult> AplicaDesconto(PedidoViewModel pedido)
        {
            var result = new ServiceResultViewModel(true, new List <string>(), null);

            try
            {
                await _rep.AplicaDescontoPedido(pedido);

                result.Succeeded = true;
            }
            catch (Exception ex)
            {
                result.Succeeded = false;
                result.Errors.Add(ex.Message);
            }

            return(new JsonNetResult {
                Data = result
            });
        }
        public async Task <JsonResult> GetPedidoAberto(string loginUsuario)
        {
            var result = new ServiceResultViewModel(true, new List <string>(), null);

            try
            {
                result.data = await _rep.GetPedidoAberto(loginUsuario, "");

                result.Succeeded = true;
            }
            catch (Exception ex)
            {
                result.Succeeded = false;
                result.Errors.Add(ex.Message);
            }

            return(new JsonNetResult {
                Data = result
            });
        }
Пример #9
0
        public async Task <JsonResult> AbreFechaLoja(bool aberta)
        {
            var result = new ServiceResultViewModel(true, new List <string>(), null);

            try
            {
                await ParametroRepository.AbreFechaCasa(aberta);

                result.Succeeded = true;
            }
            catch (Exception ex)
            {
                result.Succeeded = false;
                result.Errors.Add(ex.Message);
            }

            return(new JsonNetResult {
                Data = result
            });
        }
        public async Task <JsonResult> AvancarPedido(PedidoViewModel pedido)
        {
            var result = new ServiceResultViewModel(true, new List <string>(), null);

            try
            {
                await _rep.AlteraSituacaoPedido(pedido.CodPedido, pedido.Situacao, pedido.MotivoCancelamento, pedido.FeedbackCliente);

                result.Succeeded = true;
            }
            catch (Exception ex)
            {
                result.Succeeded = false;
                result.Errors.Add(ex.Message);
            }

            return(new JsonNetResult {
                Data = result
            });
        }
        public async Task <JsonResult> AlteraTempoMedioEspera(int tempo)
        {
            var result = new ServiceResultViewModel(true, new List <string>(), null);

            try
            {
                await ParametroRepository.AlteraTempoMedioEspera(tempo);

                result.Succeeded = true;
            }
            catch (Exception ex)
            {
                result.Succeeded = false;
                result.Errors.Add(ex.Message);
            }

            return(new JsonNetResult {
                Data = result
            });
        }
        public JsonResult GetCardapio()
        {
            var result = new ServiceResultViewModel(true, new List <string>(), null);

            try
            {
                result.data = _rep.GetCardapio();

                result.Succeeded = true;
            }
            catch (Exception ex)
            {
                result.Succeeded = false;
                result.Errors.Add(ex.Message);
            }

            return(new JsonNetResult {
                Data = result
            });
        }
        public async Task <JsonResult> SolicitarSincronismoTronSolution(List <ItemCardapioViewModel> itensTron, List <ClasseItemCardapioViewModel> classesTron)
        {
            var result = new ServiceResultViewModel(true, new List <string>(), null);

            try
            {
                //result.data = await _rep.GetPedidosAbertos(null);
                result.data = await _rep.ExecutaIntegracaoTronSolution(itensTron, classesTron);

                result.Succeeded = true;
            }
            catch (Exception ex)
            {
                result.Succeeded = false;
                result.Errors.Add(ex.Message);
            }

            return(new JsonNetResult {
                Data = result
            });
        }
Пример #14
0
        public async Task <JsonResult> GravarObservacao(ObservacaoProducaoViewModel obs, String modoCadastro)
        {
            var result = new ServiceResultViewModel(true, new List <string>(), null);

            try
            {
                var observacao = await _rep.GravarObservacao(obs, modoCadastro);

                result.Succeeded = true;
                result.data      = observacao;
            }
            catch (Exception ex)
            {
                result.Succeeded = false;
                result.Errors.Add(ex.Message);
            }

            return(new JsonNetResult {
                Data = result
            });
        }
Пример #15
0
        public async Task <JsonNetResult> GetUsuarioByPhone(string telefone)
        {
            var result = new ServiceResultViewModel(true, new List <string>(), null);

            if (telefone.Length < 14)
            {
                result.Succeeded = false;
                result.Errors.Add("O telefone não está preenchido corretamente");
                return(new JsonNetResult {
                    Data = result
                });
            }

            ApplicationDbContext contexto = new ApplicationDbContext();
            var user = contexto.DadosUsuarios.Where(u => u.Telefone == telefone).FirstOrDefault();
            UsuarioViewModel usuario = new UsuarioViewModel();

            if (user != null)
            {
                if (!String.IsNullOrEmpty(user.DataNascimento))
                {
                    user.DataNascimento = user.DataNascimento.Substring(0, 2) + "/" + user.DataNascimento.Substring(2, 2) + "/" + user.DataNascimento.Substring(4);
                }

                UsuarioCopy.DBToViewModel(user, usuario);
            }
            else
            {
                usuario.ClienteNovo = true;
                usuario.Telefone    = telefone;
                usuario.Estado      = "MG";
                usuario.Cidade      = "Cataguases";
            }

            result.data = usuario;

            return(new JsonNetResult {
                Data = result
            });
        }
Пример #16
0
        public async Task <JsonResult> GetObservacoes()
        {
            var result = new ServiceResultViewModel(true, new List <string>(), null);

            try
            {
                var obss = await _rep.GetObservacoes();

                result.data = obss;

                result.Succeeded = true;
            }
            catch (Exception ex)
            {
                result.Succeeded = false;
                result.Errors.Add(ex.Message);
            }

            return(new JsonNetResult {
                Data = result
            });
        }
        //Este método já recebe o pedido com os itens filtrados somente para a porta desejada
        public ServiceResultViewModel ImprimeItensProducao(PedidoViewModel pedido)
        {
            //declaração da variável para retorno das funções
            int iRetorno = 0;

            List <PortaPedido> portasPedido = DividePorPorta(pedido);

            ServiceResultViewModel result = new ServiceResultViewModel {
                Succeeded = true, Errors = new List <string>(), data = null
            };

            ImpressaoBematech4200 MP2032 = new ImpressaoBematech4200();

            string comandoQuebraLinha = "\r\n";

            //imprime os pedidos nas impressoras de produção
            try
            {
                //Função para configurar o modelo da impressora
                iRetorno = ImpressaoBematech4200.ConfiguraModeloImpressora((int)ImpressaoBematech4200.ModeloImpressora.MP4200TH);

                if (iRetorno != 1)
                {
                    throw new Exception("Parâmetro de modelo de impressora inválido. ");
                }

                foreach (var portaPedido in portasPedido)
                {
                    bool sucesso = false;
                    int  count   = 0;
                    //Abrindo a porta
                    while (!sucesso && count < 3)
                    {
                        iRetorno = ImpressaoBematech4200.IniciaPorta(portaPedido.Porta);
                        if (iRetorno != 1)
                        {
                            //se falhou, aguarda 3 segundos para tentar novamente
                            System.Threading.Thread.Sleep(3000);
                        }
                        else
                        {
                            sucesso = true;
                        }
                        count++;
                    }

                    if (!sucesso)
                    {
                        throw new Exception("Falha ao abrir a porta de impressão de produção " + portaPedido.Porta + ".");
                    }

                    iRetorno = ImpressaoBematech4200.SelecionaQualidadeImpressao((int)ImpressaoBematech4200.QualidadeImpressao.Baixa);

                    switch (iRetorno)
                    {
                    case 0:
                        throw new Exception("Falha na comunicação com a impressora na porta " + portaPedido.Porta + " ao definir a qualidade da impressão.");
                        break;

                    case -4:
                        throw new Exception("Parâmetro inválido com a impressora na porta " + portaPedido.Porta + " ao definir a qualidade da impressão.");
                        break;

                    case -5:
                        throw new Exception("Modelo de impressora inválido na porta " + portaPedido.Porta + " ao definir a qualidade da impressão.");
                        break;
                    }

                    //CABECALHO
                    string texto = "================================================";
                    texto += comandoQuebraLinha;
                    texto += "            PEDIDO DELIVERY NR " + pedido.CodPedido;
                    texto += comandoQuebraLinha;
                    texto += "================================================";
                    texto += comandoQuebraLinha;
                    texto += DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                    texto += comandoQuebraLinha;
                    texto += "------------------------------------------------";
                    texto += comandoQuebraLinha;
                    texto += "Produto                                      Qtd";
                    texto += comandoQuebraLinha;
                    texto += "------------------------------------------------";
                    texto += comandoQuebraLinha;

                    //ImpressaoBematech4200.FormataTX("================================================", (int)ImpressaoBematech4200.TipoLetraImpressao.Normal, (int)ImpressaoBematech4200.ItalicoImpressao.Desativado, (int)ImpressaoBematech4200.SublinhadoImpressao.Desativado, (int)ImpressaoBematech4200.ExpandidoImpressao.Desativado, (int)ImpressaoBematech4200.NegritoImpressao.Desativado).ValidaRetornoImpressora(portaPedido.Porta);
                    //ImpressaoBematech4200.ComandoTX(comandoQuebraLinha, comandoQuebraLinha.Length).ValidaRetornoImpressora(portaPedido.Porta);
                    //ImpressaoBematech4200.FormataTX("            PEDIDO DELIVERY NR " + pedido.CodPedido, (int)ImpressaoBematech4200.TipoLetraImpressao.Normal, (int)ImpressaoBematech4200.ItalicoImpressao.Desativado, (int)ImpressaoBematech4200.SublinhadoImpressao.Desativado, (int)ImpressaoBematech4200.ExpandidoImpressao.Desativado, (int)ImpressaoBematech4200.NegritoImpressao.Desativado).ValidaRetornoImpressora(portaPedido.Porta);
                    //ImpressaoBematech4200.ComandoTX(comandoQuebraLinha, comandoQuebraLinha.Length).ValidaRetornoImpressora(portaPedido.Porta);
                    //ImpressaoBematech4200.FormataTX("================================================", (int)ImpressaoBematech4200.TipoLetraImpressao.Normal, (int)ImpressaoBematech4200.ItalicoImpressao.Desativado, (int)ImpressaoBematech4200.SublinhadoImpressao.Desativado, (int)ImpressaoBematech4200.ExpandidoImpressao.Desativado, (int)ImpressaoBematech4200.NegritoImpressao.Desativado).ValidaRetornoImpressora(portaPedido.Porta);
                    //ImpressaoBematech4200.ComandoTX(comandoQuebraLinha, comandoQuebraLinha.Length).ValidaRetornoImpressora(portaPedido.Porta);
                    ////iRetorno = ImpressaoBematech4200.FormataTX("Restaurante                  " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"), (int)ImpressaoBematech4200.TipoLetraImpressao.Normal, (int)ImpressaoBematech4200.ItalicoImpressao.Desativado, (int)ImpressaoBematech4200.SublinhadoImpressao.Desativado, (int)ImpressaoBematech4200.ExpandidoImpressao.Desativado, (int)ImpressaoBematech4200.NegritoImpressao.Desativado);
                    //ImpressaoBematech4200.FormataTX(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"), (int)ImpressaoBematech4200.TipoLetraImpressao.Normal, (int)ImpressaoBematech4200.ItalicoImpressao.Desativado, (int)ImpressaoBematech4200.SublinhadoImpressao.Desativado, (int)ImpressaoBematech4200.ExpandidoImpressao.Desativado, (int)ImpressaoBematech4200.NegritoImpressao.Desativado).ValidaRetornoImpressora(portaPedido.Porta);
                    //ImpressaoBematech4200.ComandoTX(comandoQuebraLinha, comandoQuebraLinha.Length).ValidaRetornoImpressora(portaPedido.Porta);
                    ////iRetorno = ImpressaoBematech4200.FormataTX("Comanda: XXXX", (int)ImpressaoBematech4200.TipoLetraImpressao.Normal, (int)ImpressaoBematech4200.ItalicoImpressao.Desativado, (int)ImpressaoBematech4200.SublinhadoImpressao.Desativado, (int)ImpressaoBematech4200.ExpandidoImpressao.Ativado, (int)ImpressaoBematech4200.NegritoImpressao.Desativado);
                    ////iRetorno = ImpressaoBematech4200.ComandoTX(comandoQuebraLinha, comandoQuebraLinha.Length);
                    //ImpressaoBematech4200.FormataTX("------------------------------------------------", (int)ImpressaoBematech4200.TipoLetraImpressao.Normal, (int)ImpressaoBematech4200.ItalicoImpressao.Desativado, (int)ImpressaoBematech4200.SublinhadoImpressao.Desativado, (int)ImpressaoBematech4200.ExpandidoImpressao.Desativado, (int)ImpressaoBematech4200.NegritoImpressao.Desativado).ValidaRetornoImpressora(portaPedido.Porta);
                    //ImpressaoBematech4200.ComandoTX(comandoQuebraLinha, comandoQuebraLinha.Length).ValidaRetornoImpressora(portaPedido.Porta);

                    //ImpressaoBematech4200.FormataTX("Produto                                      Qtd", (int)ImpressaoBematech4200.TipoLetraImpressao.Normal, (int)ImpressaoBematech4200.ItalicoImpressao.Desativado, (int)ImpressaoBematech4200.SublinhadoImpressao.Desativado, (int)ImpressaoBematech4200.ExpandidoImpressao.Desativado, (int)ImpressaoBematech4200.NegritoImpressao.Desativado).ValidaRetornoImpressora(portaPedido.Porta);
                    //ImpressaoBematech4200.ComandoTX(comandoQuebraLinha, comandoQuebraLinha.Length).ValidaRetornoImpressora(portaPedido.Porta);
                    //ImpressaoBematech4200.FormataTX("------------------------------------------------", (int)ImpressaoBematech4200.TipoLetraImpressao.Normal, (int)ImpressaoBematech4200.ItalicoImpressao.Desativado, (int)ImpressaoBematech4200.SublinhadoImpressao.Desativado, (int)ImpressaoBematech4200.ExpandidoImpressao.Desativado, (int)ImpressaoBematech4200.NegritoImpressao.Desativado).ValidaRetornoImpressora(portaPedido.Porta);
                    //ImpressaoBematech4200.ComandoTX(comandoQuebraLinha, comandoQuebraLinha.Length).ValidaRetornoImpressora(portaPedido.Porta);

                    int i = 0;
                    //ITENS
                    foreach (ItemPedidoViewModel item in portaPedido.Itens)
                    {
                        texto += item.DescricaoItem + RetornaEspacosCompletar(item.DescricaoItem, PedidoBusiness.QtdMaximaCaracteresLinha, 2) + item.Quantidade.ToString("00");
                        texto += comandoQuebraLinha;

                        //ImpressaoBematech4200.FormataTX(item.DescricaoItem + RetornaEspacosCompletar(item.DescricaoItem) + item.Quantidade.ToString("00"), (int)ImpressaoBematech4200.TipoLetraImpressao.Normal, (int)ImpressaoBematech4200.ItalicoImpressao.Desativado, (int)ImpressaoBematech4200.SublinhadoImpressao.Desativado, (int)ImpressaoBematech4200.ExpandidoImpressao.Desativado, (int)ImpressaoBematech4200.NegritoImpressao.Desativado).ValidaRetornoImpressora(portaPedido.Porta);
                        //ImpressaoBematech4200.ComandoTX(comandoQuebraLinha, comandoQuebraLinha.Length).ValidaRetornoImpressora(portaPedido.Porta);
                        if (item.Obs != null && item.Obs.Count > 0)
                        {
                            var obsString = RetornaStringDeObs(item.Obs);
                            //ImpressaoBematech4200.FormataTX("OBSERVACAO: ", (int)ImpressaoBematech4200.TipoLetraImpressao.Normal, (int)ImpressaoBematech4200.ItalicoImpressao.Desativado, (int)ImpressaoBematech4200.SublinhadoImpressao.Desativado, (int)ImpressaoBematech4200.ExpandidoImpressao.Desativado, (int)ImpressaoBematech4200.NegritoImpressao.Desativado).ValidaRetornoImpressora(portaPedido.Porta);
                            //ImpressaoBematech4200.FormataTX(obsString, (int)ImpressaoBematech4200.TipoLetraImpressao.Normal, (int)ImpressaoBematech4200.ItalicoImpressao.Ativado, (int)ImpressaoBematech4200.SublinhadoImpressao.Desativado, (int)ImpressaoBematech4200.ExpandidoImpressao.Desativado, (int)ImpressaoBematech4200.NegritoImpressao.Desativado).ValidaRetornoImpressora(portaPedido.Porta);
                            //ImpressaoBematech4200.ComandoTX(comandoQuebraLinha, comandoQuebraLinha.Length).ValidaRetornoImpressora(portaPedido.Porta);

                            texto += "OBSERVACAO: ";
                            texto += obsString;
                            texto += comandoQuebraLinha;
                        }
                        if (item.extras != null && item.extras.Count > 0)
                        {
                            var extrasString = RetornaStringDeExtras(item.extras, false);
                            //ImpressaoBematech4200.FormataTX("EXTRAS: ", (int)ImpressaoBematech4200.TipoLetraImpressao.Normal, (int)ImpressaoBematech4200.ItalicoImpressao.Desativado, (int)ImpressaoBematech4200.SublinhadoImpressao.Desativado, (int)ImpressaoBematech4200.ExpandidoImpressao.Desativado, (int)ImpressaoBematech4200.NegritoImpressao.Desativado).ValidaRetornoImpressora(portaPedido.Porta);
                            //ImpressaoBematech4200.FormataTX(extrasString, (int)ImpressaoBematech4200.TipoLetraImpressao.Normal, (int)ImpressaoBematech4200.ItalicoImpressao.Ativado, (int)ImpressaoBematech4200.SublinhadoImpressao.Desativado, (int)ImpressaoBematech4200.ExpandidoImpressao.Desativado, (int)ImpressaoBematech4200.NegritoImpressao.Desativado).ValidaRetornoImpressora(portaPedido.Porta);
                            //ImpressaoBematech4200.ComandoTX(comandoQuebraLinha, comandoQuebraLinha.Length).ValidaRetornoImpressora(portaPedido.Porta);

                            texto += "EXTRAS: ";
                            texto += extrasString;
                            texto += comandoQuebraLinha;
                        }

                        if (i < pedido.Itens.Count)
                        {
                            //ImpressaoBematech4200.FormataTX("------------------------------------------------", (int)ImpressaoBematech4200.TipoLetraImpressao.Normal, (int)ImpressaoBematech4200.ItalicoImpressao.Desativado, (int)ImpressaoBematech4200.SublinhadoImpressao.Desativado, (int)ImpressaoBematech4200.ExpandidoImpressao.Desativado, (int)ImpressaoBematech4200.NegritoImpressao.Desativado).ValidaRetornoImpressora(portaPedido.Porta);
                            //ImpressaoBematech4200.ComandoTX(comandoQuebraLinha, comandoQuebraLinha.Length).ValidaRetornoImpressora(portaPedido.Porta);

                            texto += "------------------------------------------------";
                            texto += comandoQuebraLinha;
                        }

                        i = i + 1;
                    }

                    ImpressaoBematech4200.BematechTX(texto).ValidaRetornoImpressora(portaPedido.Porta);

                    //Aciona a guilhotina para cortar o papel
                    iRetorno = ImpressaoBematech4200.AcionaGuilhotina(1);

                    switch (iRetorno)
                    {
                    case 0:
                        throw new Exception("Falha na comunicação com a impressora na porta " + portaPedido.Porta + " ao acionar a guilhotina.");
                        break;

                    case -2:
                        throw new Exception("Parâmetro inválido com a impressora na porta " + portaPedido.Porta + " ao acionar a guilhotina.");
                        break;
                    }

                    //Fechar a porta utilizada
                    iRetorno = ImpressaoBematech4200.FechaPorta();

                    if (iRetorno != 1)
                    {
                        throw new Exception("Falha ao fechar a porta de impressão de produção " + portaPedido.Porta + ".");
                    }
                }
            }
            catch (Exception ex)
            {
                result.Succeeded = false;
                result.Errors.Add(ex.Message);
                ImpressaoBematech4200.FechaPorta();
            }

            return(result);
        }
        //Este método recebe o pedido completo para impressão da comanda
        public ServiceResultViewModel ImprimeComandaPedido(PedidoViewModel pedido)
        {
            //declaração da variável para retorno das funções
            int iRetorno = 0;

            pedido.DescricaoFormaPagamento = BrasaoUtil.getDescricaoFormaPagamentoPedido(pedido.FormaPagamento);

            ServiceResultViewModel result = new ServiceResultViewModel {
                Succeeded = true, Errors = new List <string>(), data = null
            };

            ImpressaoBematech4200 MP2032 = new ImpressaoBematech4200();

            string comandoQuebraLinha = "\r\n";

            //imprime os pedidos nas impressoras de produção
            try
            {
                //Função para configurar o modelo da impressora
                iRetorno = ImpressaoBematech4200.ConfiguraModeloImpressora((int)ImpressaoBematech4200.ModeloImpressora.MP4200TH);

                if (iRetorno != 1)
                {
                    throw new Exception("Parâmetro de modelo de impressora inválido. ");
                }

                if (pedido.PortaImpressaoComandaEntrega != "")
                {
                    var portaComanda = pedido.PortaImpressaoComandaEntrega;

                    bool sucesso = false;
                    int  count   = 0;
                    //Abrindo a porta
                    while (!sucesso && count < 3)
                    {
                        iRetorno = ImpressaoBematech4200.IniciaPorta(portaComanda);
                        if (iRetorno != 1)
                        {
                            //se falhou, aguarda 3 segundos para tentar novamente
                            System.Threading.Thread.Sleep(3000);
                        }
                        else
                        {
                            sucesso = true;
                        }
                        count++;
                    }

                    if (!sucesso)
                    {
                        throw new Exception("Falha ao abrir a porta de impressão de produção " + portaComanda + ".");
                    }

                    iRetorno = ImpressaoBematech4200.SelecionaQualidadeImpressao((int)ImpressaoBematech4200.QualidadeImpressao.Baixa);

                    switch (iRetorno)
                    {
                    case 0:
                        throw new Exception("Falha na comunicação com a impressora na porta " + portaComanda + " ao definir a qualidade da impressão.");
                        break;

                    case -4:
                        throw new Exception("Parâmetro inválido com a impressora na porta " + portaComanda + " ao definir a qualidade da impressão.");
                        break;

                    case -5:
                        throw new Exception("Modelo de impressora inválido na porta " + portaComanda + " ao definir a qualidade da impressão.");
                        break;
                    }

                    ImpressaoBematech4200.FormataTX("   RELATORIO GERENCIAL", (int)ImpressaoBematech4200.TipoLetraImpressao.Elite, (int)ImpressaoBematech4200.ItalicoImpressao.Desativado, (int)ImpressaoBematech4200.SublinhadoImpressao.Desativado, (int)ImpressaoBematech4200.ExpandidoImpressao.Ativado, (int)ImpressaoBematech4200.NegritoImpressao.Desativado).ValidaRetornoImpressora(portaComanda);
                    ImpressaoBematech4200.ComandoTX(comandoQuebraLinha, comandoQuebraLinha.Length).ValidaRetornoImpressora(portaComanda);
                    ImpressaoBematech4200.ComandoTX(comandoQuebraLinha, comandoQuebraLinha.Length).ValidaRetornoImpressora(portaComanda);

                    //CABECALHO
                    string texto = "================================================";
                    texto += comandoQuebraLinha;
                    texto += "            PEDIDO DELIVERY NR " + pedido.CodPedido;
                    texto += comandoQuebraLinha;
                    texto += "================================================";
                    texto += comandoQuebraLinha;
                    texto += DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                    texto += comandoQuebraLinha;
                    texto += "Cliente: " + pedido.DadosCliente.Nome;
                    texto += comandoQuebraLinha;
                    texto += "             NÃO É DOCUMENTO FISCAL             ";
                    texto += comandoQuebraLinha;
                    texto += "Endereco: " + pedido.DadosCliente.Logradouro + ", " + pedido.DadosCliente.Numero;
                    texto += comandoQuebraLinha;
                    if (!String.IsNullOrEmpty(pedido.DadosCliente.Complemento))
                    {
                        texto += "Complemento: " + pedido.DadosCliente.Complemento;
                        texto += comandoQuebraLinha;
                    }
                    texto += "Bairro: " + pedido.DadosCliente.Bairro;
                    texto += comandoQuebraLinha;
                    texto += "Telefone: " + pedido.DadosCliente.Telefone;
                    texto += comandoQuebraLinha;
                    if (!String.IsNullOrEmpty(pedido.DadosCliente.Referencia))
                    {
                        texto += pedido.DadosCliente.Referencia;
                        texto += comandoQuebraLinha;
                    }
                    texto += "------------------------------------------------";
                    texto += comandoQuebraLinha;
                    texto += "QTD  DESCRICAO               P.UNIT    TOTAL    ";
                    texto += comandoQuebraLinha;
                    texto += "------------------------------------------------";
                    texto += comandoQuebraLinha;

                    int i = 0;

                    //ITENS
                    foreach (ItemPedidoViewModel item in pedido.Itens)
                    {
                        texto += FormataComEspacos(item.Quantidade.ToString("00"), 5) + FormataComEspacos(item.DescricaoItem, 24) + FormataComEspacos(item.PrecoUnitario.ToString("C"), 10) + FormataComEspacos(item.ValorTotalItem.ToString("C"), 9);
                        texto += comandoQuebraLinha;

                        //ImpressaoBematech4200.FormataTX(item.DescricaoItem + RetornaEspacosCompletar(item.DescricaoItem) + item.Quantidade.ToString("00"), (int)ImpressaoBematech4200.TipoLetraImpressao.Normal, (int)ImpressaoBematech4200.ItalicoImpressao.Desativado, (int)ImpressaoBematech4200.SublinhadoImpressao.Desativado, (int)ImpressaoBematech4200.ExpandidoImpressao.Desativado, (int)ImpressaoBematech4200.NegritoImpressao.Desativado).ValidaRetornoImpressora(portaComanda);
                        //ImpressaoBematech4200.ComandoTX(comandoQuebraLinha, comandoQuebraLinha.Length).ValidaRetornoImpressora(portaComanda);
                        if (item.Obs != null && item.Obs.Count > 0)
                        {
                            var obsString = RetornaStringDeObs(item.Obs);
                            //ImpressaoBematech4200.FormataTX("OBSERVACAO: ", (int)ImpressaoBematech4200.TipoLetraImpressao.Normal, (int)ImpressaoBematech4200.ItalicoImpressao.Desativado, (int)ImpressaoBematech4200.SublinhadoImpressao.Desativado, (int)ImpressaoBematech4200.ExpandidoImpressao.Desativado, (int)ImpressaoBematech4200.NegritoImpressao.Desativado).ValidaRetornoImpressora(portaComanda);
                            //ImpressaoBematech4200.FormataTX(obsString, (int)ImpressaoBematech4200.TipoLetraImpressao.Normal, (int)ImpressaoBematech4200.ItalicoImpressao.Ativado, (int)ImpressaoBematech4200.SublinhadoImpressao.Desativado, (int)ImpressaoBematech4200.ExpandidoImpressao.Desativado, (int)ImpressaoBematech4200.NegritoImpressao.Desativado).ValidaRetornoImpressora(portaComanda);
                            //ImpressaoBematech4200.ComandoTX(comandoQuebraLinha, comandoQuebraLinha.Length).ValidaRetornoImpressora(portaComanda);

                            texto += "     OBSERVACAO: ";
                            texto += obsString;
                            texto += comandoQuebraLinha;
                        }
                        if (item.extras != null && item.extras.Count > 0)
                        {
                            var extrasString = RetornaStringDeExtras(item.extras, true);
                            //ImpressaoBematech4200.FormataTX("EXTRAS: ", (int)ImpressaoBematech4200.TipoLetraImpressao.Normal, (int)ImpressaoBematech4200.ItalicoImpressao.Desativado, (int)ImpressaoBematech4200.SublinhadoImpressao.Desativado, (int)ImpressaoBematech4200.ExpandidoImpressao.Desativado, (int)ImpressaoBematech4200.NegritoImpressao.Desativado).ValidaRetornoImpressora(portaComanda);
                            //ImpressaoBematech4200.FormataTX(extrasString, (int)ImpressaoBematech4200.TipoLetraImpressao.Normal, (int)ImpressaoBematech4200.ItalicoImpressao.Ativado, (int)ImpressaoBematech4200.SublinhadoImpressao.Desativado, (int)ImpressaoBematech4200.ExpandidoImpressao.Desativado, (int)ImpressaoBematech4200.NegritoImpressao.Desativado).ValidaRetornoImpressora(portaComanda);
                            //ImpressaoBematech4200.ComandoTX(comandoQuebraLinha, comandoQuebraLinha.Length).ValidaRetornoImpressora(portaComanda);

                            texto += "     EXTRAS: ";
                            texto += extrasString;
                            texto += comandoQuebraLinha;
                        }

                        if (i < pedido.Itens.Count)
                        {
                            //ImpressaoBematech4200.FormataTX("------------------------------------------------", (int)ImpressaoBematech4200.TipoLetraImpressao.Normal, (int)ImpressaoBematech4200.ItalicoImpressao.Desativado, (int)ImpressaoBematech4200.SublinhadoImpressao.Desativado, (int)ImpressaoBematech4200.ExpandidoImpressao.Desativado, (int)ImpressaoBematech4200.NegritoImpressao.Desativado).ValidaRetornoImpressora(portaComanda);
                            //ImpressaoBematech4200.ComandoTX(comandoQuebraLinha, comandoQuebraLinha.Length).ValidaRetornoImpressora(portaComanda);

                            texto += "------------------------------------------------";
                            texto += comandoQuebraLinha;
                        }

                        i = i + 1;
                    }

                    if (pedido.TaxaEntrega > 0)
                    {
                        var qtdTx = 1;
                        texto += FormataComEspacos(qtdTx.ToString("00"), 5) + FormataComEspacos("Taxa entrega", 24) + FormataComEspacos(pedido.TaxaEntrega.ToString("C"), 10) + FormataComEspacos(pedido.TaxaEntrega.ToString("C"), 9);
                        texto += comandoQuebraLinha;
                        texto += "------------------------------------------------";
                        texto += comandoQuebraLinha;
                    }

                    ImpressaoBematech4200.BematechTX(texto).ValidaRetornoImpressora(portaComanda);
                    texto = "";

                    ImpressaoBematech4200.FormataTX("     TOTAL: " + pedido.ValorTotal.ToString("C"), (int)ImpressaoBematech4200.TipoLetraImpressao.Elite, (int)ImpressaoBematech4200.ItalicoImpressao.Desativado, (int)ImpressaoBematech4200.SublinhadoImpressao.Desativado, (int)ImpressaoBematech4200.ExpandidoImpressao.Ativado, (int)ImpressaoBematech4200.NegritoImpressao.Desativado).ValidaRetornoImpressora(portaComanda);
                    ImpressaoBematech4200.ComandoTX(comandoQuebraLinha, comandoQuebraLinha.Length).ValidaRetornoImpressora(portaComanda);

                    if (pedido.ValorDesconto != null && pedido.ValorDesconto > 0)
                    {
                        texto += "Desconto: " + pedido.ValorDesconto.Value.ToString("C");
                        texto += comandoQuebraLinha;
                        var valorComDesconto = pedido.ValorTotal - pedido.ValorDesconto.Value;
                        texto += "Total c/ desconto: " + valorComDesconto.ToString("C");
                        texto += comandoQuebraLinha;
                    }

                    texto += "================================================";
                    texto += comandoQuebraLinha;
                    texto += "             NÃO É DOCUMENTO FISCAL             ";
                    texto += comandoQuebraLinha;
                    texto += "================================================";
                    texto += comandoQuebraLinha;
                    texto += "               FORMA DE PAGAMENTO               ";
                    texto += comandoQuebraLinha;
                    texto += pedido.DescricaoFormaPagamento;
                    if (!String.IsNullOrEmpty(pedido.BandeiraCartao))
                    {
                        texto += " - " + pedido.BandeiraCartao;
                        texto += comandoQuebraLinha;
                    }
                    if (pedido.FormaPagamento == "D" && pedido.Troco != null)
                    {
                        texto += " - Troco: " + pedido.Troco.Value.ToString("C");
                        texto += comandoQuebraLinha;
                    }
                    texto += "================================================";
                    texto += comandoQuebraLinha;

                    ImpressaoBematech4200.BematechTX(texto).ValidaRetornoImpressora(portaComanda);

                    ImpressaoBematech4200.FormataTX("     AGUADE A EMISSAO", (int)ImpressaoBematech4200.TipoLetraImpressao.Elite, (int)ImpressaoBematech4200.ItalicoImpressao.Desativado, (int)ImpressaoBematech4200.SublinhadoImpressao.Desativado, (int)ImpressaoBematech4200.ExpandidoImpressao.Ativado, (int)ImpressaoBematech4200.NegritoImpressao.Desativado).ValidaRetornoImpressora(portaComanda);
                    ImpressaoBematech4200.ComandoTX(comandoQuebraLinha, comandoQuebraLinha.Length).ValidaRetornoImpressora(portaComanda);
                    ImpressaoBematech4200.FormataTX("      DO CUPOM FISCAL", (int)ImpressaoBematech4200.TipoLetraImpressao.Elite, (int)ImpressaoBematech4200.ItalicoImpressao.Desativado, (int)ImpressaoBematech4200.SublinhadoImpressao.Desativado, (int)ImpressaoBematech4200.ExpandidoImpressao.Ativado, (int)ImpressaoBematech4200.NegritoImpressao.Desativado).ValidaRetornoImpressora(portaComanda);
                    ImpressaoBematech4200.ComandoTX(comandoQuebraLinha, comandoQuebraLinha.Length).ValidaRetornoImpressora(portaComanda);

                    //Aciona a guilhotina para cortar o papel
                    iRetorno = ImpressaoBematech4200.AcionaGuilhotina(1);

                    switch (iRetorno)
                    {
                    case 0:
                        throw new Exception("Falha na comunicação com a impressora na porta " + portaComanda + " ao acionar a guilhotina.");
                        break;

                    case -2:
                        throw new Exception("Parâmetro inválido com a impressora na porta " + portaComanda + " ao acionar a guilhotina.");
                        break;
                    }

                    //Fechar a porta utilizada
                    iRetorno = ImpressaoBematech4200.FechaPorta();

                    if (iRetorno != 1)
                    {
                        throw new Exception("Falha ao fechar a porta de impressão de produção " + portaComanda + ".");
                    }
                }
            }
            catch (Exception ex)
            {
                result.Succeeded = false;
                result.Errors.Add(ex.Message);
                ImpressaoBematech4200.FechaPorta();
            }

            return(result);
        }
        public async Task <JsonResult> GravarPedido(PedidoViewModel pedidoViewModel)
        {
            var result = new ServiceResultViewModel(true, new List <string>(), null);

            if (pedidoViewModel.DadosCliente.Telefone.Length < 14)
            {
                result.Succeeded = false;
                result.Errors.Add("O telefone não está preenchido corretamente");
                return(new JsonNetResult {
                    Data = result
                });
            }

            if (pedidoViewModel.PedidoExterno && pedidoViewModel.CodPedido <= 0)
            {
                try
                {
                    //var ped = _rep.GetPedidoAberto("", pedidoViewModel.DadosCliente.Telefone).Result;
                    var ped = BrasaoHamburgueria.Helper.AsyncHelpers.RunSync <PedidoViewModel>(() => _rep.GetPedidoAberto("", pedidoViewModel.DadosCliente.Telefone));

                    if (ped != null)
                    {
                        result.Succeeded = false;
                        result.Errors.Add("O cliente " + pedidoViewModel.DadosCliente.Telefone + " possui o pedido " + ped.CodPedido + " em aberto. Finalize-o antes de fazer outro pedido para este cliente.");
                        return(new JsonNetResult {
                            Data = result
                        });
                    }
                }
                catch (Exception ex)
                {
                    result.Succeeded = false;
                    result.Errors.Add(ex.Message);
                }
            }

            try
            {
                //primeiro verifica se a casa está aberta para delivery
                if (!pedidoViewModel.PedidoExterno && !ParametroRepository.CasaAberta() && pedidoViewModel.CodPedido <= 0)
                {
                    var horarioFuncionamento = ParametroRepository.GetHorarioAbertura();
                    result.Succeeded = false;
                    result.Errors.Add("No momento estamos fechados. Abriremos " + horarioFuncionamento.DiaSemana + " das " + horarioFuncionamento.Abertura.ToString("HH:mm") + " às " + horarioFuncionamento.Fechamento.ToString("HH:mm") + ".");
                }
                else
                {
                    result.data = await _rep.GravaPedido(pedidoViewModel, User.Identity.GetUserName());

                    if (pedidoViewModel.DadosCliente.ClienteNovo)
                    {
                        try
                        {
                            ApplicationDbContext contexto = new ApplicationDbContext();
                            Usuario          usu          = new Usuario();
                            UsuarioViewModel usuVm        = new UsuarioViewModel();
                            PropertyCopy.Copy(pedidoViewModel.DadosCliente, usuVm);
                            UsuarioCopy.ViewModelToDB(usuVm, usu);
                            usu.UsuarioExterno = true;
                            contexto.DadosUsuarios.Add(usu);
                            contexto.SaveChanges();
                        }
                        catch (Exception ex)
                        {
                            //nao faz nada porque o pedido foi gravado e sao transacoes diferentes
                        }

                        result.Succeeded = true;
                    }
                    else if (pedidoViewModel.DadosCliente.Salvar)
                    {
                        try
                        {
                            ApplicationDbContext contexto = new ApplicationDbContext();
                            string userName = User.Identity.GetUserName();
                            var    usu      = contexto.DadosUsuarios.Where(d => d.Email == userName).FirstOrDefault();
                            if (usu != null)
                            {
                                UsuarioViewModel usuVm = new UsuarioViewModel();
                                PropertyCopy.Copy(pedidoViewModel.DadosCliente, usuVm);
                                UsuarioCopy.ViewModelToDB(usuVm, usu);
                                contexto.SaveChanges();
                            }
                        }
                        catch (Exception ex)
                        {
                            //nao faz nada porque o pedido foi gravado e sao transacoes diferentes
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                result.Succeeded = false;
                result.Errors.Add(ex.Message);
            }

            return(new JsonNetResult {
                Data = result
            });
        }