Beispiel #1
0
        /// <summary>
        /// Recupera uma lista de pedidos que podem gerar ordem de carga (Venda / Transferência)
        /// </summary>
        /// <param name="tipoOC"></param>
        /// <param name="idCliente"></param>
        /// <param name="idRota"></param>
        /// <param name="idLoja"></param>
        /// <param name="dtEntPedidoIni"></param>
        /// <param name="dtEntPedidoFin"></param>
        /// <param name="pedidosObs"></param>
        /// <param name="codRotasExternas"></param>
        /// <param name="idClienteExterno"></param>
        /// <param name="nomeClienteExterno"></param>
        /// <returns></returns>
        public Glass.Data.Model.Pedido[] GetPedidosForItensOC(Glass.Data.Model.OrdemCarga.TipoOCEnum tipoOC, uint idCliente, uint idRota,
                                                              uint idLoja, string dtEntPedidoIni, string dtEntPedidoFin, bool pedidosObs, string codRotasExternas,
                                                              uint idClienteExterno, string nomeClienteExterno, bool fastDelivery, string obsLiberacao)
        {
            var idsPedidos = PedidoDAO.Instance.GetIdsPedidosForOC(tipoOC, idCliente, null, idRota, null, idLoja,
                                                                   dtEntPedidoIni, dtEntPedidoFin, false, pedidosObs, codRotasExternas, idClienteExterno, nomeClienteExterno, fastDelivery, obsLiberacao);

            if (idsPedidos == null || idsPedidos.Count == 0)
            {
                return(null);
            }

            var dados = PedidoDAO.Instance.GetPedidosForOC(idsPedidos[0].Split(';')[2], 0, true)
                        .OrderBy(p => p.TipoPedido).ThenByDescending(p => p.IdPedido).ToArray();

            return(dados);
        }
Beispiel #2
0
        internal ListagemOrdemCarga(KeyValuePair<uint, KeyValuePair<uint, string>> pedidos, uint idLoja,
            string dtEntPedIni, string dtEntPedFin, Glass.Data.Model.OrdemCarga.TipoOCEnum tipoOC, bool pedidosObs, 
            string codRotasExternas, uint idCliExterno, string nomeCliExterno, bool fastDelivery, string obsLiberacao)
        {
            _idCliente = pedidos.Key;
            _idsPedidos = pedidos.Value.Value;
            _idRota = pedidos.Value.Key;
            _idLoja = idLoja;
            _dtEntPedIni = dtEntPedIni;
            _dtEntPedFin = dtEntPedFin;
            _tipoOC = tipoOC;
            _pedidosObs = pedidosObs;
            _codRotasExternas = codRotasExternas;
            _idCliExterno = idCliExterno;
            _nomeCliExterno = nomeCliExterno;
            _fastDelivery = fastDelivery;
            _obsLiberacao = obsLiberacao;

            CarregarDados();
        }
Beispiel #3
0
        /// <summary>
        /// Gera as ocs automatticamente
        /// </summary>
        /// <param name="idsRotas"></param>
        /// <param name="idCli"></param>
        /// <param name="nomeCli"></param>
        /// <param name="dtEntPedIni"></param>
        /// <param name="dtEntPedFin"></param>
        /// <param name="idLoja"></param>
        /// <param name="tipoOC"></param>
        /// <param name="idsCliIgnorarBloqueio"></param>
        /// <param name="pedidosObs"></param>
        /// <returns></returns>
        public string GerarOCs(string idsRotas, string idCli, string nomeCli, string dtEntPedIni, string dtEntPedFin, string idLoja, string tipoOC,
                               string idsCliIgnorarBloqueio, string pedidosObs, string idPedido, string codRotasExternas, string idCliExterno, string nomeCliExterno, string fastDelivery, string obsLiberacao)
        {
            try
            {
                dtEntPedIni = dtEntPedIni.Replace("-", "/");
                dtEntPedFin = dtEntPedFin.Replace("-", "/");
                uint loja = Glass.Conversoes.StrParaUint(idLoja);
                Glass.Data.Model.OrdemCarga.TipoOCEnum tpOC = (Glass.Data.Model.OrdemCarga.TipoOCEnum)Glass.Conversoes.StrParaInt(tipoOC);
                uint idCliente = Glass.Conversoes.StrParaUint(idCli);
                uint idPed     = Glass.Conversoes.StrParaUint(idPedido);

                var idsCliIgnBloq = idsCliIgnorarBloqueio.Split(';').Select(f => Glass.Conversoes.StrParaUint(f)).ToList();

                WebGlass.Business.OrdemCarga.Fluxo.OrdemCargaFluxo.Instance.GerarOCs(idsRotas, idCliente, nomeCli, dtEntPedIni, dtEntPedFin,
                                                                                     loja, tpOC, idsCliIgnBloq, pedidosObs.ToLower() == "true", idPed, codRotasExternas, idCliExterno.StrParaUint(), nomeCliExterno, fastDelivery.ToLower() == "true", obsLiberacao);

                return("Ok;");
            }
            catch (Exception ex)
            {
                return("Erro;" + ex.Message);
            }
        }
Beispiel #4
0
        /// <summary>
        /// Adiciona pedidos a uma oc que já foi finalizada
        /// </summary>
        public void AdicionarPedidosOC(uint idOC, string pedidos, Glass.Data.Model.OrdemCarga.TipoOCEnum tipoOC)
        {
            using (var trans = new GDATransaction())
            {
                try
                {
                    trans.BeginTransaction();

                    OrdemCargaDAO.Instance.ForcarTransacaoOC(trans, idOC, true);

                    //valida a inclusão
                    ValidaAdicionarPedidos(trans, idOC, pedidos);

                    var idCarregamento = OrdemCargaDAO.Instance.GetIdCarregamento(trans, idOC);

                    //if (idCarregamento.GetValueOrDefault(0) == 0)
                    //    throw new Exception("Carregamento não encontrado.");

                    var idsPedidos = pedidos.Split(',').Select(p => Glass.Conversoes.StrParaInt(p)).ToList();

                    /* Chamado 32031. */
                    if (string.IsNullOrEmpty(pedidos) ||
                        idsPedidos == null ||
                        idsPedidos.Count == 0 ||
                        idsPedidos.Count(f => f == 0) > 0)
                    {
                        throw new Exception("Informe os pedidos que serão adicionados ao carregamento.");
                    }

                    //Adiciona os pedidos na OC
                    foreach (var idPedido in idsPedidos)
                    {
                        if (idPedido == 0)
                        {
                            continue;
                        }

                        // Verifica se o pedido informado ja possui uma ordem de carga que não seja parcial
                        if (PedidoOrdemCargaDAO.Instance.VerificarSePedidoPossuiOrdemCarga(trans, tipoOC, idPedido))
                        {
                            throw new Exception("O pedido " + idPedido + " já esta vinculado a uma ordem de carga");
                        }


                        //Adiciona o pedido a OC.
                        PedidoOrdemCargaDAO.Instance.Insert(trans, new Glass.Data.Model.PedidoOrdemCarga()
                        {
                            IdPedido     = (uint)idPedido,
                            IdOrdemCarga = idOC
                        });
                    }

                    if (idCarregamento.GetValueOrDefault(0) > 0)
                    {
                        ItemCarregamentoDAO.Instance.CriaItensCarregamento(trans, idCarregamento.Value, null, pedidos);
                        CarregamentoDAO.Instance.AtualizaCarregamentoCarregado(trans, idCarregamento.Value, null);
                    }

                    LogAlteracaoDAO.Instance.LogOrdemCarga(trans, (int)idOC, string.Format("Pedidos adicionados: {0}", pedidos));

                    OrdemCargaDAO.Instance.ForcarTransacaoOC(trans, idOC, false);

                    trans.Commit();
                    trans.Close();
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    trans.Close();

                    ErroDAO.Instance.InserirFromException(string.Format("Adiciona Pedidos OC - Id OC: {0} Ids Pedidos: {1}",
                                                                        idOC, pedidos), ex);

                    throw;
                }
            }
        }
Beispiel #5
0
        /// <summary>
        /// Gera a OCs automaticamente
        /// </summary>
        public void GerarOCs(string idsRotas, uint idCli, string nomeCli, string dtEntPedIni, string dtEntPedFin, uint idLoja,
                             Glass.Data.Model.OrdemCarga.TipoOCEnum tipoOC, List <uint> idsCliIgnorarBloqueio, bool pedidosObs, uint idPedido,
                             string codRotasExternas, uint idCliExterno, string nomeCliExterno, bool fastDelivery, string obsLiberacao)
        {
            if ((string.IsNullOrEmpty(idsRotas) && idPedido == 0 && string.IsNullOrEmpty(codRotasExternas)) || idLoja == 0 || (string.IsNullOrEmpty(dtEntPedIni) && string.IsNullOrEmpty(dtEntPedFin)))
            {
                return;
            }

            if (idPedido > 0)
            {
                idCli   = PedidoDAO.Instance.ObtemIdCliente(null, idPedido);
                nomeCli = "";

                var idRotaCli = ClienteDAO.Instance.ObtemIdRota(idCli);

                if (!string.IsNullOrEmpty(idsRotas) && !("," + idsRotas + ",").Contains("" + idRotaCli + ","))
                {
                    idsRotas += "," + idRotaCli;
                }
                else if (string.IsNullOrEmpty(idsRotas))
                {
                    idsRotas = idRotaCli.ToString();
                }
            }

            //Buscar os ids dos pedidos
            var pedidos = PedidoDAO.Instance.GetIdsPedidosForOC(tipoOC, idCli, nomeCli, 0, idsRotas, idLoja,
                                                                dtEntPedIni, dtEntPedFin, false, pedidosObs, codRotasExternas, idCliExterno, nomeCliExterno, fastDelivery, obsLiberacao);

            //Cria um dicionario(idCli, pedidos) para guardar os pedidos dos cliente.
            var lstPedidos = new Dictionary <uint, KeyValuePair <uint, string> >();

            //Adiciona os pedidos ao dicionario
            if (pedidos != null && pedidos.Count > 0)
            {
                lstPedidos = pedidos.ToDictionary(p => Glass.Conversoes.StrParaUint(p.Split(';')[0]),
                                                  p => new KeyValuePair <uint, string>(Glass.Conversoes.StrParaUint(p.Split(';')[1]), p.Split(';')[2]));
            }

            //Se não houver pedidos retorna.
            if (lstPedidos.Count == 0)
            {
                return;
            }

            //Cria a listagemOrdemCarga
            var lstOC = new List <Entidade.ListagemOrdemCarga>();

            //Preenche a listagemOrdemCarga
            foreach (var item in lstPedidos)
            {
                lstOC.Add(new Entidade.ListagemOrdemCarga(item, idLoja, dtEntPedIni, dtEntPedFin, tipoOC, pedidosObs, codRotasExternas, idCliExterno, nomeCliExterno, fastDelivery, obsLiberacao));
            }

            //Lista dos erros ocorridos na geração das ocs.
            var lstErros = new List <string>();

            foreach (var oc in lstOC)
            {
                //Se for oc de transferência e o cliente estiver na lista de bloqueios
                //não verifica se o pedido tem obs
                if (!(tipoOC == Glass.Data.Model.OrdemCarga.TipoOCEnum.Transferencia &&
                      idsCliIgnorarBloqueio.Where(f => f == oc.IdCliente).Count() > 0))
                {
                    //Verifica se o pedido tem obs.
                    if (oc.Pedidos.Where(p => !string.IsNullOrEmpty(p.ObsLiberacao)).Count() > 0)
                    {
                        continue;
                    }
                }

                //Verifica se o pedido gerou todos os volumes
                if (oc.Pedidos.Where(p => !p.GerouTodosVolumes).Count() > 0)
                {
                    continue;
                }

                try
                {
                    //Gera oc dos pedidos de venda e revenda
                    FinalizarOC(oc.IdCliente, oc.IdLoja, oc.TipoOC, oc.IdRota, oc.DtEntPedIni, oc.DtEntPedFin, string.Join(",", oc.Pedidos
                                                                                                                           .Where(p => (p.TipoPedido == (int)Glass.Data.Model.Pedido.TipoPedidoEnum.Venda ||
                                                                                                                                        p.TipoPedido == (int)Glass.Data.Model.Pedido.TipoPedidoEnum.Revenda ||
                                                                                                                                        p.TipoPedido == (int)Glass.Data.Model.Pedido.TipoPedidoEnum.Producao) &&
                                                                                                                                  p.TipoVenda != (int)Glass.Data.Model.Pedido.TipoVendaPedido.Reposição &&
                                                                                                                                  p.TipoVenda != (int)Glass.Data.Model.Pedido.TipoVendaPedido.Garantia)
                                                                                                                           .Select(p => p.IdPedido.ToString()).ToArray()));
                }
                catch (Exception ex)
                {
                    lstErros.Add(ex.Message);
                }

                try
                {
                    //Gera oc dos pedidos de Reposição
                    FinalizarOC(oc.IdCliente, oc.IdLoja, oc.TipoOC, oc.IdRota, oc.DtEntPedIni, oc.DtEntPedFin, string.Join(",", oc.Pedidos
                                                                                                                           .Where(p => (p.TipoPedido == (int)Glass.Data.Model.Pedido.TipoPedidoEnum.Venda ||
                                                                                                                                        p.TipoPedido == (int)Glass.Data.Model.Pedido.TipoPedidoEnum.Revenda ||
                                                                                                                                        p.TipoPedido == (int)Glass.Data.Model.Pedido.TipoPedidoEnum.Producao) &&
                                                                                                                                  p.TipoVenda == (int)Glass.Data.Model.Pedido.TipoVendaPedido.Reposição)
                                                                                                                           .Select(p => p.IdPedido.ToString()).ToArray()));
                }
                catch (Exception ex)
                {
                    lstErros.Add(ex.Message);
                }

                try
                {
                    //Gera oc dos pedidos de Garantia
                    FinalizarOC(oc.IdCliente, oc.IdLoja, oc.TipoOC, oc.IdRota, oc.DtEntPedIni, oc.DtEntPedFin, string.Join(",", oc.Pedidos
                                                                                                                           .Where(p => (p.TipoPedido == (int)Glass.Data.Model.Pedido.TipoPedidoEnum.Venda ||
                                                                                                                                        p.TipoPedido == (int)Glass.Data.Model.Pedido.TipoPedidoEnum.Revenda ||
                                                                                                                                        p.TipoPedido == (int)Glass.Data.Model.Pedido.TipoPedidoEnum.Producao) &&
                                                                                                                                  p.TipoVenda == (int)Glass.Data.Model.Pedido.TipoVendaPedido.Garantia)
                                                                                                                           .Select(p => p.IdPedido.ToString()).ToArray()));
                }
                catch (Exception ex)
                {
                    lstErros.Add(ex.Message);
                }

                try
                {
                    //Gera oc dos pedidos de mão-de-obra
                    FinalizarOC(oc.IdCliente, oc.IdLoja, oc.TipoOC, oc.IdRota, oc.DtEntPedIni, oc.DtEntPedFin, string.Join(",", oc.Pedidos
                                                                                                                           .Where(p => p.TipoPedido == (int)Glass.Data.Model.Pedido.TipoPedidoEnum.MaoDeObra)
                                                                                                                           .Select(p => p.IdPedido.ToString()).ToArray()));
                }
                catch (Exception ex)
                {
                    lstErros.Add(ex.Message);
                }

                try
                {
                    //Gera oc dos pedidos de mão-de-obra especial
                    FinalizarOC(oc.IdCliente, oc.IdLoja, oc.TipoOC, oc.IdRota, oc.DtEntPedIni, oc.DtEntPedFin, string.Join(",", oc.Pedidos
                                                                                                                           .Where(p => p.TipoPedido == (int)Glass.Data.Model.Pedido.TipoPedidoEnum.MaoDeObraEspecial)
                                                                                                                           .Select(p => p.IdPedido.ToString()).ToArray()));
                }
                catch (Exception ex)
                {
                    lstErros.Add(ex.Message);
                }
            }

            if (lstErros.Count > 0)
            {
                throw new Exception("Alguns pedidos não foram adicionados. " + string.Join(", ", lstErros));
            }
        }
Beispiel #6
0
        /// <summary>
        /// Valida a finalização de uma OC
        /// </summary>
        public void ValidaFinalizarOC(GDASession sessao, uint idCliente, uint idLoja, Glass.Data.Model.OrdemCarga.TipoOCEnum tipoOC, uint idRota,
                                      string dtEntPedidoIni, string dtEntPedidoFin, string idsPedidos)
        {
            if (idCliente == 0)
            {
                throw new Exception("Cliente não infomado.");
            }

            var sitCliente = ClienteDAO.Instance.GetSituacao(sessao, idCliente);

            if (OrdemCargaConfig.SituacoesClienteNaoGerarOC.Contains(sitCliente))
            {
                throw new Exception("O cliente " + idCliente + " esta " + Enum.GetName(typeof(Glass.Data.Model.SituacaoCliente), sitCliente) + ".");
            }

            if (idLoja == 0)
            {
                throw new Exception("Loja não infomada.");
            }

            if (idRota == 0)
            {
                throw new Exception("Rota não infomada.");
            }

            if (tipoOC == 0)
            {
                throw new Exception("Tipo da OC não infomado.");
            }

            if (string.IsNullOrEmpty(dtEntPedidoIni) && string.IsNullOrEmpty(dtEntPedidoFin))
            {
                throw new Exception("Data de Entrega dos pedidos não informada");
            }

            if (string.IsNullOrEmpty(idsPedidos))
            {
                throw new Exception("Nenhum pedido foi informado.");
            }

            foreach (var idPedido in idsPedidos.Split(','))
            {
                var tipoVenda = PedidoDAO.Instance.ObtemTipoVenda(sessao, Glass.Conversoes.StrParaUint(idPedido));

                if (tipoVenda == (int)Glass.Data.Model.Pedido.TipoVendaPedido.AVista && PCPConfig.HabilitarFaturamentoCarregamento)
                {
                    throw new Exception("Não é possível finalizar OC com pedidos a vista se a configuração de efetuar faturamento do carregamento estiver ativa.");
                }

                if (!PedidoDAO.Instance.GerouTodosVolumes(sessao, Glass.Conversoes.StrParaUint(idPedido)))
                {
                    throw new Exception("O pedido " + idPedido + " não teve todos os volumes gerados.");
                }
            }
        }
Beispiel #7
0
        /// <summary>
        /// Recupera uma listagem para gerar OCs
        /// </summary>
        /// <param name="idsRotas"></param>
        /// <param name="idLoja"></param>
        /// <param name="idCli"></param>
        /// <param name="nomeCli"></param>
        /// <param name="dtEntPedidoIni"></param>
        /// <param name="dtEntPedidoFin"></param>
        /// <param name="situacao"></param>
        /// <param name="tipoOC"></param>
        /// <param name="pedidosObs"></param>
        /// <returns></returns>
        public Entidade.ListagemOrdemCarga[] GetListForGerarOC(string idsRotas, uint idLoja, uint idCli, string nomeCli,
                                                               string dtEntPedidoIni, string dtEntPedidoFin, string situacao, Glass.Data.Model.OrdemCarga.TipoOCEnum tipoOC, bool pedidosObs,
                                                               uint idPedido, string idsRotasExternas, uint idCliExterno, string nomeCliExterno, bool fastDelivery, string obsLiberacao)
        {
            if ((string.IsNullOrEmpty(idsRotas) && idPedido == 0 && string.IsNullOrEmpty(idsRotasExternas)) || idLoja == 0 || (string.IsNullOrEmpty(dtEntPedidoIni) && string.IsNullOrEmpty(dtEntPedidoFin)))
            {
                return(null);
            }

            if (idPedido > 0)
            {
                idCli   = PedidoDAO.Instance.ObtemIdCliente(null, idPedido);
                nomeCli = "";

                var idRotaCli = ClienteDAO.Instance.ObtemIdRota(idCli);

                if (!string.IsNullOrEmpty(idsRotas) && !("," + idsRotas + ",").Contains("" + idRotaCli + ","))
                {
                    idsRotas += "," + idRotaCli;
                }
                else if (string.IsNullOrEmpty(idsRotas))
                {
                    idsRotas = idRotaCli.ToString();
                }
            }

            //Buscar os ids dos pedidos para criar a listagemOrdemCarga
            var pedidos = PedidoDAO.Instance.GetIdsPedidosForOC(tipoOC, idCli, nomeCli, 0, idsRotas, idLoja,
                                                                dtEntPedidoIni, dtEntPedidoFin, true, pedidosObs, idsRotasExternas, idCliExterno, nomeCliExterno, fastDelivery, obsLiberacao);

            //Cria um dicionario(idCli, pedidos) para guardar os pedidos dos cliente.
            var lstPedidos = new Dictionary <uint, KeyValuePair <uint, string> >();

            //Adiciona os pedidos ao dicionario
            if (pedidos != null && pedidos.Count > 0)
            {
                lstPedidos = pedidos.ToDictionary(p => Glass.Conversoes.StrParaUint(p.Split(';')[0]),
                                                  p => new KeyValuePair <uint, string>(Glass.Conversoes.StrParaUint(p.Split(';')[1]), p.Split(';')[2]));
            }

            //Se não houver pedidos retorna nulo.
            if (lstPedidos.Count == 0)
            {
                return(null);
            }

            //Cria a listagemOrdemCarga
            var retorno = new List <Entidade.ListagemOrdemCarga>();

            //Preenche a listagemOrdemCarga
            foreach (var item in lstPedidos)
            {
                retorno.Add(new Entidade.ListagemOrdemCarga(item, idLoja, dtEntPedidoIni, dtEntPedidoFin, tipoOC, pedidosObs, idsRotasExternas, idCliExterno, nomeCliExterno, fastDelivery, obsLiberacao));
            }

            if (string.IsNullOrEmpty(situacao) || situacao.Equals("1,2"))
            {
                return(retorno.OrderBy(p => p.NomeCliente).ToArray());
            }
            else
            {
                if (("," + situacao + ",").Contains(",1,"))
                {
                    return(retorno.Where(c => c.NumPedidosParaGerar == 0).OrderBy(p => p.NomeCliente).ToArray());
                }
                else
                {
                    return(retorno.Where(c => c.NumPedidosParaGerar > 0).OrderBy(p => p.NomeCliente).ToArray());
                }
            }
        }
Beispiel #8
0
        /// <summary>
        /// Finaliza uma OC
        /// </summary>
        public void FinalizarOC(uint idCliente, uint idLoja, Glass.Data.Model.OrdemCarga.TipoOCEnum tipoOC, uint idRota,
                                string dtEntPedidoIni, string dtEntPedidoFin, string pedidos)
        {
            lock (_finalizarOcLock)
            {
                var lstErros = new List <string>();

                using (var trans = new GDATransaction())
                {
                    try
                    {
                        trans.BeginTransaction();

                        if (string.IsNullOrEmpty(pedidos))
                        {
                            return;
                        }

                        //Valida a finalização
                        ValidaFinalizarOC(trans, idCliente, idLoja, tipoOC, idRota, dtEntPedidoIni, dtEntPedidoFin, pedidos);

                        var clienteExportadoPedido = new List <KeyValuePair <uint?, string> >();

                        /* Chamado 22260 e 23078.
                         * Devem ser retornados os pedidos agrupados somente se a empresa controlar os pedidos importados na ordem de carga. */
                        if (OrdemCargaConfig.ControlarPedidosImportados)
                        {
                            clienteExportadoPedido = PedidoDAO.Instance.ObtemPedidosImportadosAgrupado(trans, pedidos).ToList();
                        }
                        else
                        {
                            clienteExportadoPedido.Add(new KeyValuePair <uint?, string>(0, pedidos));
                        }

                        foreach (var cep in clienteExportadoPedido)
                        {
                            //Cria a OC
                            var idOrdemCarga = Glass.Data.DAL.OrdemCargaDAO.Instance
                                               .Insert(trans, new Glass.Data.Model.OrdemCarga(idCliente, idLoja, idRota,
                                                                                              DateTime.Parse(dtEntPedidoIni), DateTime.Parse(dtEntPedidoFin), tipoOC));

                            OrdemCargaDAO.Instance.ForcarTransacaoOC(trans, idOrdemCarga, true);

                            var idsPedidos = cep.Value.Split(',').Select(p => Glass.Conversoes.StrParaUint(p)).ToList();

                            var pedidosAdicionados = false;

                            //Adiciona os pedidos na OC
                            foreach (var idPedido in idsPedidos)
                            {
                                if (idPedido == 0)
                                {
                                    continue;
                                }

                                try
                                {
                                    //Verifica se o pedido informado ja possui uma ordem de carga que não seja parcial
                                    if (PedidoOrdemCargaDAO.Instance.VerificarSePedidoPossuiOrdemCarga(trans, tipoOC, (int)idPedido))
                                    {
                                        throw new Exception("O pedido " + idPedido + " já esta vinculado a uma ordem de carga");
                                    }

                                    //Adiciona o pedido a OC.
                                    PedidoOrdemCargaDAO.Instance.Insert(trans, new Glass.Data.Model.PedidoOrdemCarga((uint)idPedido, idOrdemCarga));

                                    pedidosAdicionados = true;
                                }
                                catch (Exception ex)
                                {
                                    lstErros.Add(ex.Message);
                                }
                            }

                            //Marca a OC como finalizada
                            if (pedidosAdicionados)
                            {
                                OrdemCargaDAO.Instance.FinalizarOC(trans, idOrdemCarga);
                                OrdemCargaDAO.Instance.ForcarTransacaoOC(trans, idOrdemCarga, false);
                            }
                            else
                            {
                                OrdemCargaDAO.Instance.DeleteByPrimaryKey(trans, idOrdemCarga);
                            }
                        }

                        trans.Commit();
                        trans.Close();
                    }
                    catch (Exception ex)
                    {
                        trans.Rollback();
                        trans.Close();

                        ErroDAO.Instance.InserirFromException(string.Format("Finaliza OC - Ids Pedidos: {0}", pedidos), ex);

                        throw;
                    }

                    if (lstErros.Count > 0)
                    {
                        throw new Exception(string.Join(", ", lstErros));
                    }
                }
            }
        }