コード例 #1
0
 public ProdutoPedidoProducaoRpt(ProdutoPedidoProducao prodPedProducao)
 {
     IdProdPedProducao    = prodPedProducao.IdProdPedProducao;
     SituacaoProducao     = prodPedProducao.SituacaoProducao;
     IdPedido             = prodPedProducao.IdPedido;
     DescrProduto         = prodPedProducao.DescrProduto;
     DescrBeneficiamentos = prodPedProducao.DescrBeneficiamentos;
     LarguraAltura        = prodPedProducao.LarguraAltura;
     DescrTipoPerdaLista  = prodPedProducao.DescrTipoPerdaLista;
     NumEtiquetaExibir    = prodPedProducao.NumEtiquetaExibir;
     PecaCancelada        = prodPedProducao.PecaCancelada;
     IdImpressao          = prodPedProducao.IdImpressao;
     Criterio             = prodPedProducao.Criterio;
     CorLinha             = prodPedProducao.CorLinha;
     NumEtiquetaChapa     = prodPedProducao.NumEtiquetaChapa;
     IdCliente            = prodPedProducao.IdCliente;
     NomeCliente          = prodPedProducao.NomeCliente;
     IdPedidoExibir       = prodPedProducao.IdPedidoExibir;
     SiglaTipoPedido      = prodPedProducao.SiglaTipoPedido;
     CodCliente           = prodPedProducao.CodCliente;
     IdNomeCliente        = prodPedProducao.IdNomeCliente;
     CodAplicacao         = prodPedProducao.CodAplicacao;
     CodProcesso          = prodPedProducao.CodProcesso;
     DataEntregaExibicao  = prodPedProducao.DataEntregaExibicao;
     DataLiberacaoPedido  = prodPedProducao.DataLiberacaoPedido;
     PlanoCorte           = prodPedProducao.PlanoCorte;
     TotM2          = prodPedProducao.TotM2;
     LoteChapa      = prodPedProducao.LoteChapa;
     TotM           = prodPedProducao.TotM;
     NumeroNFeChapa = prodPedProducao.NumeroNFeChapa;
 }
コード例 #2
0
        /// <summary>
        /// Retorna tipos de perda existentes no pedido
        /// </summary>
        /// <param name="idPedidoRepos"></param>
        /// <returns></returns>
        public TipoPerda[] GetListByPedido(uint idPedidoRepos)
        {
            var tipoPerdas = TipoPerdaDAO.Instance.GetOrderedList();
            var produtos   = ProdutosPedidoDAO.Instance.GetByPedido(idPedidoRepos);

            var lstRetorno = new List <TipoPerda>();

            foreach (ProdutosPedido p in produtos)
            {
                try
                {
                    ProdutoPedidoProducao ppp = ProdutoPedidoProducaoDAO.Instance.GetByEtiqueta(p.NumEtiquetaRepos);
                    if (ppp.TipoPerda == null)
                    {
                        continue;
                    }

                    foreach (TipoPerda tp in tipoPerdas)
                    {
                        if ((uint)ppp.TipoPerda.Value == tp.IdTipoPerda && !lstRetorno.Contains(tp))
                        {
                            lstRetorno.Add(tp);
                        }
                    }
                }
                catch { }
            }

            return(lstRetorno.ToArray());
        }
コード例 #3
0
        /// <summary>
        /// Retorna tipos de perda identificando qual deve ser marcado no relatório.
        /// </summary>
        /// <param name="idPedidoRepos"></param>
        /// <returns></returns>
        public TipoPerda[] GetByPedidoRepos(uint idPedidoRepos)
        {
            var tipoPerdas = TipoPerdaDAO.Instance.GetOrderedList();

            var produtos = ProdutosPedidoDAO.Instance.GetByPedido(idPedidoRepos);

            foreach (ProdutosPedido p in produtos)
            {
                try
                {
                    ProdutoPedidoProducao ppp = ProdutoPedidoProducaoDAO.Instance.GetByEtiqueta(p.NumEtiquetaRepos);
                    if (ppp.TipoPerda == null)
                    {
                        continue;
                    }

                    foreach (TipoPerda tp in tipoPerdas)
                    {
                        if ((uint)ppp.TipoPerda.Value == tp.IdTipoPerda)
                        {
                            tp.MarcarRelatorio = true;
                        }
                    }
                }
                catch { }
            }

            return(tipoPerdas);
        }
コード例 #4
0
        /// <inheritdoc/>
        public IHttpActionResult ValidarItem(int id)
        {
            this.peca = ProdutoPedidoProducaoDAO.Instance.GetElementByPrimaryKey(this.sessao, id);

            if (this.peca == null)
            {
                return(this.apiController.NaoEncontrado($"Peça de produção {id} não encontrada."));
            }

            if (this.peca.ImagemPecaUrl == null)
            {
                return(this.apiController.SemConteudo());
            }

            return(null);
        }
コード例 #5
0
ファイル: ListaDto.cs プロジェクト: ertprs/Estudo
        /// <summary>
        /// Inicia uma nova instância da classe <see cref="ListaDto"/>.
        /// </summary>
        /// <param name="produtoPedidoProducao">A model de produtos de pedido de produção preenchida.</param>
        public ListaDto(ProdutoPedidoProducao produtoPedidoProducao)
        {
            this.IdFornada = (int)produtoPedidoProducao.IdProdPedProducao;
            this.Produto   = new ProdutoDto
            {
                Codigo = produtoPedidoProducao.CodInterno,
                Nome   = produtoPedidoProducao.DescrProduto,
            };

            this.CodigoEtiqueta = produtoPedidoProducao.NumEtiqueta;
            this.Medidas        = new MedidasDto
            {
                Altura  = (decimal)produtoPedidoProducao.Altura,
                Largura = produtoPedidoProducao.Largura,
            };
        }
コード例 #6
0
        private IEnumerable <LeituraDto> ObterLeituras(ProdutoPedidoProducao peca)
        {
            var idsSetoresPeca = peca.GroupIdSetor?.Split(',')
                                 .Select(x => x.StrParaInt())
                                 .ToList();

            return(Utils.GetSetores
                   .Select(setor =>
            {
                var posicaoSetor = idsSetoresPeca.IndexOf(setor.IdSetor);
                if (posicaoSetor < 0)
                {
                    return new LeituraDto();
                }

                var dataLeitura = peca.VetDataLeitura[posicaoSetor]?.Length > 0
                        ? DateTime.Parse(peca.VetDataLeitura[posicaoSetor])
                        : (DateTime?)null;

                return new LeituraDto
                {
                    Setor = new SetorDto
                    {
                        Id = setor.IdSetor,
                        Nome = setor.Descricao,
                        Obrigatorio = peca.SetorNaoObrigatorio[posicaoSetor]?.Length == 0,
                    },
                    Data = dataLeitura,
                    Funcionario = peca.VetNomeFuncLeitura[posicaoSetor],
                    Chapa = !(dataLeitura.HasValue && peca.VetSetorCorte[posicaoSetor])
                            ? null
                            : new ChapaVidroDto
                    {
                        Lote = peca.LoteChapa,
                        NumeroEtiqueta = peca.NumEtiquetaChapa,
                        NumeroNotaFiscal = peca.NumeroNFeChapa,
                    },
                };
            })
                   .Where(leitura => leitura.Setor != null));
        }
コード例 #7
0
        public static TipoPerdaRepos GetByPedidoRepos(uint idPedidoRepos)
        {
            TipoPerdaRepos retorno = new TipoPerdaRepos();

            var produtos = ProdutosPedidoDAO.Instance.GetByPedido(idPedidoRepos);

            foreach (ProdutosPedido p in produtos)
            {
                try
                {
                    ProdutoPedidoProducao ppp = ProdutoPedidoProducaoDAO.Instance.GetByEtiqueta(p.NumEtiquetaRepos);
                    if (ppp.TipoPerda == null)
                    {
                        continue;
                    }

                    string nomeCampo = ((Utils.TipoPerda)ppp.TipoPerda.Value).ToString();
                    typeof(TipoPerdaRepos).GetProperty(nomeCampo).SetValue(retorno, true, null);
                }
                catch { }
            }

            return(retorno);
        }
コード例 #8
0
        /// <summary>
        /// Inicia uma nova instância da classe <see cref="ListaDto"/>.
        /// </summary>
        /// <param name="sessao">A sessão atual com o banco de dados.</param>
        /// <param name="peca">A peça que será representada pelo DTO.</param>
        public ListaDto(GDASession sessao, ProdutoPedidoProducao peca)
        {
            this.Id     = (int)peca.IdProdPedProducao;
            this.Pedido = new PedidoDto
            {
                Id                  = (int)peca.IdPedido,
                IdExibir            = peca.IdPedidoExibir,
                SiglaTipoPedido     = peca.SiglaTipoPedido,
                Cancelado           = peca.PedidoCancelado,
                CodigoPedidoCliente = peca.CodCliente,
                DataLiberacao       = peca.DataLiberacaoPedido,
                Cliente             = new IdNomeDto
                {
                    Id   = (int?)peca.IdCliente,
                    Nome = peca.NomeCliente,
                },
            };

            this.ProdutoPedido = new ProdutoPedidoDto
            {
                Id        = (int?)peca.IdProdPed,
                Composto  = peca.IsProdutoLaminadoComposicao,
                Descricao = peca.DescrProduto,
                DescricaoBeneficiamentos = peca.DescrBeneficiamentos,
                DescricaoCompleta        = ProdutoPedidoProducaoDAO.Instance.ObterDescrProdEtiqueta(sessao, peca.IdProdPedProducao),
            };

            this.PossuiImagemSvg  = peca.TemSvgAssociado;
            this.SituacaoProducao = new SituacaoProducaoDto
            {
                PecaParada  = peca.PecaParadaProducao,
                PecaReposta = peca.PecaReposta,
                PossuiLeituraSetorOculto = peca.TemLeituraSetorOculto,
                Perda = !peca.DataPerda.HasValue
                    ? null
                    : new PerdaDto
                {
                    Tipo = peca.DescrTipoPerdaLista,
                    Data = peca.DataPerda.Value,
                },
            };

            this.Altura          = (decimal)peca.Altura;
            this.Largura         = (int)peca.Largura;
            this.CodigoAplicacao = peca.CodAplicacao;
            this.CodigoProcesso  = peca.CodProcesso;
            this.DataEntrega     = new DataEntregaDto
            {
                Fabrica  = peca.DataEntregaFabrica,
                Exibicao = peca.DataEntregaExibicao,
            };

            this.PlanoCorte     = peca.PlanoCorte;
            this.NumeroEtiqueta = peca.NumEtiqueta;
            this.NumeroCavalete = peca.NumCavalete;
            this.IdImpressao    = (int?)peca.IdImpressao;
            this.Cancelada      = peca.PecaCancelada;
            this.Leituras       = this.ObterLeituras(peca);
            this.Permissoes     = new PermissoesDto
            {
                LogAlteracoes          = LogAlteracaoDAO.Instance.TemRegistro(LogAlteracao.TabelaAlteracao.ProdPedProducao, peca.IdProdPedProducao, null),
                DesfazerLeitura        = peca.RemoverSituacaoVisible,
                RelatorioPedido        = peca.ExibirRelatorioPedido,
                PararPecaProducao      = peca.ExibirPararPecaProducao,
                LogEstornoCarregamento = peca.EstornoCarregamentoVisible,
            };

            this.CorLinha = peca.CorLinha;
        }
コード例 #9
0
ファイル: ProducaoContagemDAO.cs プロジェクト: ertprs/Estudo
        /// <summary>
        /// SQL que recupera a contagem da produção.
        /// </summary>
        internal string SqlProducaoContagem(int altura, string codigoEtiqueta, string codigoPedidoCliente, DateTime?dataConfirmacaoPedidoFim, DateTime?dataConfirmacaoPedidoInicio,
                                            DateTime?dataEntregaFim, DateTime?dataEntregaInicio, DateTime?dataFabricaFim, DateTime?dataFabricaInicio, DateTime?dataLeituraFim, DateTime?dataLeituraInicio, float espessura,
                                            int fastDelivery, int idCarregamento, int idCliente, int idFuncionario, int idImpressao, int idPedido, IEnumerable <int> idsAplicacao, int idSetor, IEnumerable <int> idsProcesso,
                                            IEnumerable <int> idsRota, IEnumerable <int> idsSubgrupo, int largura, string nomeCliente, IEnumerable <int> pecasProducaoCanceladas, bool setoresAnteriores, bool setoresPosteriores,
                                            int situacaoPedido, IEnumerable <int> situacoes, int tipoEntrega, ProdutoPedidoProducaoDAO.TipoRetorno tipoRetorno, IEnumerable <int> tiposPedido)
        {
            #region Declaração de variáveis

            // Define se ao filtrar pela data de entrega será filtrado também pela data de fábrica
            var filtrarDataFabrica = Configuracoes.ProducaoConfig.BuscarDataFabricaConsultaProducao;
            var buscarNomeFantasia = Configuracoes.ProducaoConfig.TelaConsulta.BuscarNomeFantasiaConsultaProducao;
            var usarJoin           = idSetor > 0 && (dataLeituraInicio > DateTime.MinValue || dataLeituraFim > DateTime.MinValue);
            var campos             = string.Empty;
            var sql      = string.Empty;
            var criterio = string.Empty;

            #endregion

            #region Consulta

            campos = string.Format(@"
                pp.IdPedido, ppp.IdSetor,
                CONCAT(CAST(ped.IdPedido AS CHAR), IF(ped.IdPedidoAnterior IS NOT NULL, CONCAT(' (', CONCAT(CAST(ped.IdPedidoAnterior AS CHAR), 'R)')), ''),
                    IF(ppp.IdPedidoExpedicao IS NOT NULL, CONCAT(' (Exp. ', CAST(ppp.IdPedidoExpedicao AS CHAR), ')'), '')) AS IdPedidoExibir,
                ROUND(IF(ped.TipoPedido={0}, ((((50 - IF(MOD(a.Altura, 50) > 0, MOD(a.Altura, 50), 50)) + a.Altura) * ((50 - IF(MOD(a.Largura, 50) > 0, MOD(a.Largura, 50), 50)) + a.Largura)) / 1000000) *
                    a.Qtde, pp.TotM2Calc) / (pp.Qtde * IF(ped.TipoPedido={0}, a.Qtde, 1)), 4) AS TotM2,
                '$$$' AS Criterio",
                                   // Posição 0.
                                   (int)Pedido.TipoPedidoEnum.MaoDeObra);

            sql = string.Format(@"SELECT {0} FROM produto_pedido_producao ppp
                    LEFT JOIN produtos_pedido_espelho pp ON (ppp.IdProdPed = pp.IdProdPed)
                    LEFT JOIN produto p ON (pp.IdProd = p.IdProd)
                    LEFT JOIN pedido ped ON (pp.IdPedido = ped.IdPedido)
                    LEFT JOIN ambiente_pedido_espelho a ON (pp.IdAmbientePedido = a.IdAmbientePedido)
                    LEFT JOIN liberarpedido lp ON (ped.IdLiberarPedido = lp.IdLiberarPedido)
                    {1}
                    {2}
                WHERE 1 ",
                                // Posição 0.
                                campos,
                                // Posição 1.
                                dataFabricaInicio > DateTime.MinValue || dataFabricaFim > DateTime.MinValue || filtrarDataFabrica ? "LEFT JOIN pedido_espelho pedEsp ON (ped.IdPedido = pedEsp.IdPedido)" : string.Empty,
                                // Posição 2.
                                usarJoin ? "LEFT JOIN leitura_producao lp1 ON (ppp.IdProdPedProducao = lp1.IdProdPedProducao)" : string.Empty);

            #endregion

            #region Filtros

            if (idCarregamento > 0)
            {
                sql      += string.Format(" AND ppp.IdProdPedProducao IN (SELECT IdProdPedProducao FROM item_carregamento WHERE IdCarregamento={0})", idCarregamento);
                criterio += string.Format("Carregamento: {0}    ", idCarregamento);
            }

            if (idCarregamento > 0)
            {
                sql      += string.Format(" AND ppp.IdProdPedProducao IN (SELECT IdProdPedProducao FROM item_carregamento WHERE IdCarregamento={0})", idCarregamento);
                criterio += string.Format("Carregamento: {0}    ", idCarregamento);
            }

            if (idPedido > 0)
            {
                sql += string.Format(" AND (ped.IdPedido={0}", idPedido);

                // Na vidrália/colpany não tem como filtrar pelo ped.idPedidoAnterior sem dar timeout, para utilizar o filtro desta maneira teria que mudar totalmente a forma de fazer o count.
                if (Configuracoes.ProducaoConfig.TipoControleReposicao == DataSources.TipoReposicaoEnum.Pedido && PedidoDAO.Instance.IsPedidoReposto(null, (uint)idPedido))
                {
                    sql += string.Format(" OR ped.IdPedidoAnterior={0}", idPedido);
                }

                if (PedidoDAO.Instance.IsPedidoExpedicaoBox(null, (uint)idPedido))
                {
                    sql += string.Format(" OR ppp.IdPedidoExpedicao={0}", idPedido);
                }

                sql      += ")";
                criterio += string.Format("Pedido: {0}    ", idPedido);
            }

            if (!string.IsNullOrEmpty(codigoEtiqueta))
            {
                var idProdPedProducaoEtiqueta = ProdutoPedidoProducaoDAO.Instance.ObtemIdProdPedProducao(codigoEtiqueta) ?? ProdutoPedidoProducaoDAO.Instance.ObtemIdProdPedProducaoCanc(null, codigoEtiqueta);

                sql      += idProdPedProducaoEtiqueta > 0 ? string.Format(" AND ppp.IdProdPedProducao={0}", idProdPedProducaoEtiqueta) : " AND 0=1";
                criterio += string.Format("Etiqueta: {0}    ", codigoEtiqueta);
            }

            if (!string.IsNullOrEmpty(codigoPedidoCliente))
            {
                sql      += " AND (ped.CodCliente LIKE ?codigoPedidoCliente OR pp.PedCli LIKE ?codigoPedidoCliente OR a.Ambiente LIKE ?codigoPedidoCliente) ";
                criterio += string.Format("Pedido Cliente/Ambiente: {0}    ", codigoPedidoCliente);
            }

            if ((idsRota?.Any(f => f > 0)).GetValueOrDefault())
            {
                sql      += string.Format(" AND ped.IdCli IN (SELECT * FROM (SELECT IdCliente FROM rota_cliente WHERE IdRota IN ({0})) AS temp1)", string.Join(",", idsRota));
                criterio += string.Format("Rota: {0}    ", RotaDAO.Instance.ObtemCodRotas(string.Join(",", idsRota)));
            }

            if (idImpressao > 0)
            {
                sql      += string.Format(@" AND IF(!COALESCE(ppp.PecaReposta, 0), ppp.IdImpressao={0}, COALESCE(ppp.NumEtiqueta, ppp.NumEtiquetaCanc) IN (SELECT * FROM (
                    SELECT CONCAT(IdPedido, '-', PosicaoProd, '.', ItemEtiqueta, '/', QtdeProd)
                    FROM produto_impressao WHERE !COALESCE(Cancelado, 0) AND IdImpressao={0}) AS temp))", idImpressao);
                criterio += string.Format("Num. Impressão: {0}    ", idImpressao);
            }

            if (idCliente > 0)
            {
                sql      += string.Format(" AND ped.IdCli={0}", idCliente);
                criterio += string.Format("Cliente: {0} - {1}    ", idCliente, ClienteDAO.Instance.GetNome((uint)idCliente));
            }
            else if (!string.IsNullOrEmpty(nomeCliente))
            {
                var idsCliente = ClienteDAO.Instance.GetIds(null, nomeCliente, null, 0, null, null, null, null, 0);

                sql      += string.Format(" AND ped.IdCli IN ({0})", idsCliente);
                criterio += string.Format("Cliente: {0}    ", nomeCliente);
            }

            if (idFuncionario > 0)
            {
                sql      += string.Format(" AND ped.IdFunc={0}", idFuncionario);
                criterio += string.Format("Funcionário: {0}    ", FuncionarioDAO.Instance.GetNome((uint)idFuncionario));
            }

            if (situacoes?.Any(f => f > 0) ?? false)
            {
                var filtroSituacoes = " AND (0=1 ";
                var produtoPedidoProducaoFiltroSituacao = new ProdutoPedidoProducao();

                foreach (var situacao in situacoes)
                {
                    switch (situacao)
                    {
                    case 1:
                    case 2:
                        filtroSituacoes += string.Format(" OR ppp.Situacao={0}", situacao);
                        produtoPedidoProducaoFiltroSituacao.Situacao = situacao;
                        criterio += string.Format("Situação: {0}    ", produtoPedidoProducaoFiltroSituacao.DescrSituacao);
                        break;

                    case 3:
                        filtroSituacoes += string.Format(" OR (ppp.SituacaoProducao={0} AND ppp.Situacao={1})", (int)SituacaoProdutoProducao.Pendente, (int)ProdutoPedidoProducao.SituacaoEnum.Producao);
                        criterio        += "Tipo: Peças pendentes    ";
                        break;

                    case 4:
                        filtroSituacoes += string.Format(" OR (ppp.SituacaoProducao={0} AND ppp.Situacao={1})", (int)SituacaoProdutoProducao.Pronto, (int)ProdutoPedidoProducao.SituacaoEnum.Producao);
                        criterio        += "Tipo: Peças prontas    ";
                        break;

                    case 5:
                        filtroSituacoes += string.Format(" OR (ppp.SituacaoProducao={0} AND ppp.Situacao={1})", (int)SituacaoProdutoProducao.Entregue, (int)ProdutoPedidoProducao.SituacaoEnum.Producao);
                        criterio        += "Tipo: Peças entregues    ";
                        break;
                    }
                }

                filtroSituacoes += ")";
                sql             += filtroSituacoes;
            }

            if (situacaoPedido > 0)
            {
                sql      += string.Format(" AND ped.Situacao={0}", situacaoPedido);
                criterio += string.Format("Situação Pedido: {0}    ", PedidoDAO.Instance.GetSituacaoPedido(situacaoPedido));
            }

            sql += string.Format(" AND pp.IdProdPedParent IS NULL");

            var descricaoSetor = idSetor > 0 ? Utils.ObtemSetor((uint)idSetor).Descricao : idSetor == -1 ? "Etiqueta não impressa" : string.Empty;

            if (dataLeituraInicio > DateTime.MinValue)
            {
                var formatoCriterioDataLeituraInicio = dataLeituraInicio.Value.ToString("HH:mm:ss") == "00:00:00" ? "dd/MM/yyyy" : "dd/MM/yyyy HH:mm:ss";

                if (situacoes?.Any(f => f == (int)ProdutoPedidoProducao.SituacaoEnum.Perda) ?? false)
                {
                    sql      += " AND ppp.DataPerda>=?dataLeituraInicio";
                    criterio += string.Format("Data perda início: {0}    ", dataLeituraInicio.Value.ToString(formatoCriterioDataLeituraInicio));
                }

                if (idSetor > 0)
                {
                    sql      += string.Format(" AND lp1.IdSetor={0} AND lp1.DataLeitura>=?dataLeituraInicio", idSetor);
                    criterio += string.Format("Data {0}: a partir de {1}    ", descricaoSetor, dataLeituraInicio.Value.ToString(formatoCriterioDataLeituraInicio));
                }
            }

            if (dataLeituraFim > DateTime.MinValue)
            {
                var formatoCriterioDataLeituraFim = dataLeituraFim.Value.ToString("HH:mm:ss") == "00:00:00" ? "dd/MM/yyyy" : "dd/MM/yyyy HH:mm:ss";

                if (situacoes?.Any(f => f == (int)ProdutoPedidoProducao.SituacaoEnum.Perda) ?? false)
                {
                    sql      += " AND ppp.DataPerda<=?dataLeituraFim";
                    criterio += string.Format("Data perda término: {0}    ", dataLeituraFim.Value.ToString(formatoCriterioDataLeituraFim));
                }

                if (idSetor > 0)
                {
                    sql      += string.Format(" AND lp1.IdSetor={0} AND lp1.DataLeitura<=?dataLeituraFim", idSetor);
                    criterio += string.Format("Data {0}: até {1}    ", descricaoSetor, dataLeituraFim.Value.ToString(formatoCriterioDataLeituraFim));
                }
            }

            if (dataEntregaInicio > DateTime.MinValue)
            {
                var formatoCriterioDataEntregaInicio = dataEntregaInicio.Value.ToString("HH:mm:ss") == "00:00:00" ? "dd/MM/yyyy" : "dd/MM/yyyy HH:mm:ss";

                sql      += " AND ped.DataEntrega>=?dataEntregaInicio";
                criterio += string.Format("Data Entrega início: {0}    ", dataEntregaInicio.Value.ToString(formatoCriterioDataEntregaInicio));
            }

            if (dataEntregaFim > DateTime.MinValue)
            {
                var formatoCriterioDataEntregaFim = dataEntregaFim.Value.ToString("HH:mm:ss") == "00:00:00" ? "dd/MM/yyyy" : "dd/MM/yyyy HH:mm:ss";

                sql      += " AND ped.DataEntrega<=?dataEntregaFim";
                criterio += string.Format("Data Entrega término: {0}    ", dataEntregaFim.Value.ToString(formatoCriterioDataEntregaFim));
            }

            if (dataFabricaInicio > DateTime.MinValue)
            {
                var formatoCriterioDataFabricaInicio = dataFabricaInicio.Value.ToString("HH:mm:ss") == "00:00:00" ? "dd/MM/yyyy" : "dd/MM/yyyy HH:mm:ss";

                sql      += " AND pedEsp.DataFabrica>=?dataFabricaInicio";
                criterio += string.Format("Data fábrica início: {0}    ", dataFabricaInicio.Value.ToString(formatoCriterioDataFabricaInicio));
            }

            if (dataFabricaFim > DateTime.MinValue)
            {
                var formatoCriterioDataFabricaFim = dataFabricaFim.Value.ToString("HH:mm:ss") == "00:00:00" ? "dd/MM/yyyy" : "dd/MM/yyyy HH:mm:ss";

                sql      += " AND pedEsp.DataFabrica<=?dataFabricaFim";
                criterio += string.Format("Data fábrica término: {0}    ", dataFabricaFim.Value.ToString(formatoCriterioDataFabricaFim));
            }

            if (dataConfirmacaoPedidoInicio > DateTime.MinValue || dataConfirmacaoPedidoFim > DateTime.MinValue)
            {
                var idsPedido = string.Empty;

                if (dataConfirmacaoPedidoInicio > DateTime.MinValue)
                {
                    var formatoCriterioConfirmacaoPedidoInicio = dataConfirmacaoPedidoInicio.Value.ToString("HH:mm:ss") == "00:00:00" ? "dd/MM/yyyy" : "dd/MM/yyyy HH:mm:ss";
                    criterio += string.Format("Data conf. ped. início: {0}    ", dataConfirmacaoPedidoInicio.Value.ToString(formatoCriterioConfirmacaoPedidoInicio));
                }

                if (dataConfirmacaoPedidoFim > DateTime.MinValue)
                {
                    var formatoCriterioDataConfirmacaoPedidoFim = dataConfirmacaoPedidoFim.Value.ToString("HH:mm:ss") == "00:00:00" ? "dd/MM/yyyy" : "dd/MM/yyyy HH:mm:ss";
                    criterio += string.Format("Data conf. ped. término: {0}    ", dataConfirmacaoPedidoFim.Value.ToString(formatoCriterioDataConfirmacaoPedidoFim));
                }

                idsPedido = PedidoDAO.Instance.ObtemIdsPelaDataConf(DateTime.Parse(dataConfirmacaoPedidoInicio.Value.ToString("dd/MM/yyy 00:00:00")),
                                                                    DateTime.Parse(dataConfirmacaoPedidoFim.Value.ToString("dd/MM/yyy 23:59:59")));

                if (!string.IsNullOrEmpty(idsPedido))
                {
                    sql += string.Format(" AND ped.IdPedido IN ({0})", idsPedido);
                }
            }

            if (idsSubgrupo != null && idsSubgrupo.Any(f => f > 0))
            {
                sql      += string.Format(" AND p.IdSubgrupoProd IN ({0})", idsSubgrupo);
                criterio += string.Format("Subgrupo(s): {0}    ", string.Join(", ", idsSubgrupo.Where(f => f > 0).Select(f => SubgrupoProdDAO.Instance.GetDescricao(f))));
            }

            if (tipoEntrega > 0)
            {
                sql += string.Format(" AND ped.TipoEntrega={0}", tipoEntrega);

                foreach (GenericModel te in DataSources.Instance.GetTipoEntrega())
                {
                    if (te.Id == tipoEntrega)
                    {
                        criterio += string.Format("Tipo Entrega: {0}    ", te.Descr);
                        break;
                    }
                }
            }

            if (tiposPedido?.Any(f => f > 0) ?? false)
            {
                var critetioTipoPedido = new List <string>();
                var filtroTiposPedido  = new List <Pedido.TipoPedidoEnum>();

                if (tiposPedido.Any(f => f == 1))
                {
                    filtroTiposPedido.Add(Pedido.TipoPedidoEnum.Venda);
                    filtroTiposPedido.Add(Pedido.TipoPedidoEnum.Revenda);
                    critetioTipoPedido.Add("Venda/Revenda");
                }

                if (tiposPedido.Any(f => f == 2))
                {
                    filtroTiposPedido.Add(Pedido.TipoPedidoEnum.Producao);
                    critetioTipoPedido.Add("Produção");
                }

                if (tiposPedido.Any(f => f == 3))
                {
                    filtroTiposPedido.Add(Pedido.TipoPedidoEnum.MaoDeObra);
                    critetioTipoPedido.Add("Mão-de-obra");
                }

                if (tiposPedido.Any(f => f == 4))
                {
                    filtroTiposPedido.Add(Pedido.TipoPedidoEnum.MaoDeObraEspecial);
                    critetioTipoPedido.Add("Mão-de-obra Especial");
                }

                sql      += string.Format(" AND ped.TipoPedido IN ({0})", string.Join(",", filtroTiposPedido.Select(f => (int)f)));
                criterio += string.Format("Tipo Pedido: {0}    ", string.Join(", ", critetioTipoPedido.ToArray()));
            }

            if (altura > 0)
            {
                sql      += string.Format(" AND IF(ped.TipoPedido={0}, a.Altura, IF(pp.AlturaReal > 0, pp.AlturaReal, pp.Altura))={1}", (int)Pedido.TipoPedidoEnum.MaoDeObra, altura);
                criterio += string.Format("Altura da peça: {0}    ", altura);
            }

            if (largura > 0)
            {
                sql += string.Format(" AND IF(ped.TipoPedido={0}, a.Largura, IF(pp.Redondo, 0, IF(pp.LarguraReal > 0, pp.LarguraReal, pp.Largura)))={1}",
                                     (int)Pedido.TipoPedidoEnum.MaoDeObra, largura);
                criterio += string.Format("Largura da peça: {0}    ", largura);
            }

            if (espessura > 0)
            {
                sql      += " AND p.Espessura=?espessura";
                criterio += string.Format("Espessura: {0}    ", espessura);
            }

            if (idsProcesso?.Any(f => f > 0) ?? false)
            {
                sql      += string.Format(" AND pp.IdProcesso IN ({0})", string.Join(",", idsProcesso));
                criterio += string.Format("Processo: {0}    ", EtiquetaProcessoDAO.Instance.GetCodInternoByIds(string.Join(",", idsProcesso)));
            }

            if (idsAplicacao?.Any(f => f > 0) ?? false)
            {
                sql      += string.Format(" AND pp.IdAplicacao IN ({0})", string.Join(",", idsAplicacao));
                criterio += string.Format("Aplicação: {0}    ", EtiquetaAplicacaoDAO.Instance.GetCodInternoByIds(string.Join(",", idsAplicacao)));
            }

            if (tipoRetorno == ProdutoPedidoProducaoDAO.TipoRetorno.EntradaEstoque)
            {
                sql += string.Format(" AND (ppp.EntrouEstoque IS NULL OR ppp.EntrouEstoque=0) AND ped.TipoPedido={0}", (int)Pedido.TipoPedidoEnum.Producao);
            }
            else if (tipoRetorno == ProdutoPedidoProducaoDAO.TipoRetorno.AguardandoExpedicao)
            {
                sql += string.Format(@" AND ped.TipoPedido<>{0} AND ped.IdPedido IN 
                    (SELECT * FROM (SELECT IdPedido FROM produtos_liberar_pedido plp 
                        LEFT JOIN liberarpedido lp ON (plp.IdLiberarPedido=lp.IdLiberarPedido) 
                    WHERE lp.Situacao<>{1}) AS temp) AND ppp.SituacaoProducao<>{2} AND ppp.Situacao={3}",
                                     (int)Pedido.TipoPedidoEnum.Producao, (int)LiberarPedido.SituacaoLiberarPedido.Cancelado, (int)SituacaoProdutoProducao.Entregue, (int)ProdutoPedidoProducao.SituacaoEnum.Producao);
            }

            if (pecasProducaoCanceladas?.Any(f => f > 0) ?? false)
            {
                var criterioPecasProducaoCanceladas = new List <string>();
                var filtroSituacoesProducao         = new List <ProdutoPedidoProducao.SituacaoEnum>();

                if (pecasProducaoCanceladas.Any(f => f == 0))
                {
                    filtroSituacoesProducao.Add(ProdutoPedidoProducao.SituacaoEnum.Producao);
                    filtroSituacoesProducao.Add(ProdutoPedidoProducao.SituacaoEnum.Perda);
                    criterioPecasProducaoCanceladas.Add("em produção");
                }

                if (pecasProducaoCanceladas.Any(f => f == 1))
                {
                    filtroSituacoesProducao.Add(ProdutoPedidoProducao.SituacaoEnum.CanceladaMaoObra);
                    criterioPecasProducaoCanceladas.Add("canceladas (mão-de-obra)");
                }

                if (pecasProducaoCanceladas.Any(f => f == 2))
                {
                    filtroSituacoesProducao.Add(ProdutoPedidoProducao.SituacaoEnum.CanceladaVenda);
                    criterioPecasProducaoCanceladas.Add("canceladas (venda)");
                }

                sql      += string.Format(" AND ppp.Situacao IN ({0})", string.Join(",", filtroSituacoesProducao.Select(f => (int)f)));
                criterio += string.Format("Peças {0}    ", string.Join(", ", criterioPecasProducaoCanceladas));
            }
            else
            {
                sql += " AND 0=1";
            }

            if (fastDelivery > 0)
            {
                sql      += string.Format(" AND {0}", fastDelivery == 1 ? "ped.Fastdelivery IS NOT NULL AND ped.Fastdelivery=1" : "(ped.Fastdelivery IS NULL OR ped.Fastdelivery=0)");
                criterio += string.Format("Pedido(s) {0} fast delivery      ", fastDelivery == 1 ? "com" : "sem");
            }

            if (idSetor > 0 || idSetor == -1)
            {
                if (!setoresPosteriores && !setoresAnteriores)
                {
                    if (idSetor > 0)
                    {
                        sql += string.Format(" AND ppp.IdSetor={0}", idSetor);

                        // Filtro para impressão de etiqueta
                        if (Utils.ObtemSetor((uint)idSetor).NumeroSequencia == 1)
                        {
                            sql += string.Format(" AND EXISTS (SELECT * FROM leitura_producao WHERE IdProdPedProducao=ppp.IdProdPedProducao AND IdSetor={0} AND DataLeitura IS NOT NULL)", idSetor);
                        }
                    }

                    // Etiqueta não impressa
                    else if (idSetor == -1)
                    {
                        sql += " AND ppp.IdSetor=1 AND NOT EXISTS (SELECT * FROM leitura_producao WHERE IdProdPedProducao=ppp.IdProdPedProducao AND DataLeitura IS NOT NULL)";
                    }
                }
                else
                {
                    if (setoresAnteriores)
                    {
                        if (idSetor == 1)
                        {
                            sql += " AND ppp.IdSetor=1 AND NOT EXISTS (SELECT * FROM leitura_producao WHERE IdProdPedProducao=ppp.IdProdPedProducao AND DataLeitura IS NOT NULL)";
                        }
                        else
                        {
                            sql += string.Format(" AND NOT EXISTS (SELECT * FROM leitura_producao WHERE IdProdPedProducao=ppp.IdProdPedProducao AND IdSetor={0})", idSetor);
                        }

                        // Retorna apenas as peças de roteiro se o setor for de roteiro
                        if (Utils.ObtemSetor((uint)idSetor).SetorPertenceARoteiro)
                        {
                            sql += string.Format(" AND EXISTS (SELECT * FROM roteiro_producao_etiqueta WHERE IdProdPedProducao=ppp.IdProdPedProducao AND IdSetor={0})", idSetor);
                        }
                    }
                    else if (setoresPosteriores)
                    {
                        if (idSetor == 1)
                        {
                            sql += " AND EXISTS (SELECT * FROM leitura_producao WHERE IdProdPedProducao=ppp.IdProdPedProducao AND DataLeitura IS NOT NULL)";
                        }

                        sql += string.Format(@" AND {0} <= ALL (SELECT NumSeq FROM setor WHERE IdSetor=ppp.IdSetor)
                            AND (SELECT COUNT(*) FROM leitura_producao WHERE IdProdPedProducao=ppp.IdProdPedProducao AND IdSetor={1}) > 0", Utils.ObtemSetor((uint)idSetor).NumeroSequencia, idSetor);
                    }
                }

                criterio += string.Format("Setor: {0}{1}    ", descricaoSetor, setoresAnteriores ? " (só produtos que ainda não passaram por este setor)" :
                                          setoresPosteriores ? " (inclui produtos que já passaram por este setor)" : string.Empty);
            }

            if (usarJoin)
            {
                sql += " GROUP BY ppp.IdProdPedProducao";
            }

            #endregion

            sql = string.Format(@"SELECT IdPedido, IdPedidoExibir, IdSetor, COUNT(*) AS NumeroPecas, SUM(TotM2) AS TotM2, Criterio
                FROM ({0}) AS producao_contagem
                GROUP BY IdPedidoExibir, IdSetor", sql.Replace("$$$", criterio.Trim()));

            return(sql);
        }
コード例 #10
0
ファイル: ProducaoDAO.cs プロジェクト: ertprs/Estudo
        /// <summary>
        /// SQL da consulta que retorna os dados de produção para o relatório de produção.
        /// </summary>
        private string SqlProducao(bool aguardandoEntradaEstoque, bool aguardandoExpedicao, int altura, string codigoEtiqueta, string codigoPedidoCliente, string codigoRota, DateTime?dataEntregaFim,
                                   DateTime?dataEntregaInicio, DateTime?dataLeituraFim, DateTime?dataLeituraInicio, int idCarregamento, int idCliente, int idCorVidro, int idFuncionario, int idImpressao,
                                   int idLiberarPedido, int idPedido, int idPedidoImportado, int idSetor, IEnumerable <int> idsSubgrupo, int largura, string nomeCliente, bool pecasCanceladas, bool selecionar,
                                   bool setoresAnteriores, bool setoresPosteriores, int tipoEntrega, IEnumerable <int> tiposPedido)
        {
            #region Declaração de variáveis

            var filtro         = string.Empty;
            var filtroInterno  = string.Empty;
            var criterio       = string.Empty;
            var descricaoSetor = string.Empty;
            var camposUnion    = string.Empty;
            var sql            = string.Empty;
            var temp           = new ProdutoPedidoProducao();

            #endregion

            #region Filtros

            if (idCarregamento > 0)
            {
                filtro        += string.Format(" AND ppp.IdProdPedProducao IN (SELECT IdProdPedProducao FROM item_carregamento where IdCarregamento={0})", idCarregamento);
                filtroInterno += string.Format(" AND ppp1.IdProdPedProducao IN (SELECT IdProdPedProducao FROM item_carregamento where IdCarregamento={0})", idCarregamento);
                criterio      += string.Format("Carregamento: {0}    ", idCarregamento);
            }

            if (idLiberarPedido > 0)
            {
                filtro        += string.Format(" AND ppp.IdProdPedProducao IN (SELECT IdProdPedProducao FROM produtos_liberar_pedido WHERE IdLiberarPedido={0})", idLiberarPedido);
                filtroInterno += string.Format(" AND ppp1.IdProdPedProducao IN (SELECT IdProdPedProducao FROM produtos_liberar_pedido WHERE IdLiberarPedido={0})", idLiberarPedido);
                criterio      += string.Format("Liberação: {0}    ", idLiberarPedido);
            }

            if (idPedido > 0)
            {
                filtro        += string.Format(" AND (ped.IdPedido={0} OR ped.IdPedidoAnterior={0} OR ppp.IdPedidoExpedicao={0})", idPedido);
                filtroInterno += string.Format(" AND (ped1.IdPedido={0} OR ped1.IdPedidoAnterior={0} OR ppp1.IdPedidoExpedicao={0})", idPedido);
                criterio      += string.Format("Pedido: {0}    ", idPedido);
            }

            if (idPedidoImportado > 0)
            {
                filtro        += " AND ped.CodCliente=?idPedidoImportado";
                filtroInterno += " AND ped1.CodCliente=?idPedidoImportado";
                criterio      += string.Format("Pedido importado: {0}    ", idPedidoImportado);
            }

            if (idImpressao > 0)
            {
                filtro        += string.Format(" AND ppe.IdProdPed IN (SELECT IdProdPed FROM produto_impressao WHERE IdImpressao={0})", idImpressao);
                filtroInterno += string.Format(" AND ppe1.IdProdPed IN (SELECT IdProdPed FROM produto_impressao WHERE IdImpressao={0})", idImpressao);
                criterio      += string.Format("Impressão: {0}    ", idImpressao);
            }

            if (!string.IsNullOrEmpty(codigoPedidoCliente))
            {
                filtro        += " AND (ped.CodCliente LIKE ?codigoPedidoCliente OR ppe.PedCli LIKE ?codigoPedidoCliente)";
                filtroInterno += " AND (ped1.CodCliente LIKE ?codigoPedidoCliente OR ppe1.PedCli LIKE ?codigoPedidoCliente)";
                criterio      += string.Format("Ped. Cli: {0}    ", codigoPedidoCliente);
            }

            if (!string.IsNullOrEmpty(codigoRota))
            {
                filtro        += " AND ped.IdCli IN (SELECT IdCliente FROM rota_cliente WHERE IdRota IN (SELECT IdRota FROM rota WHERE CodInterno LIKE ?codigoRota))";
                filtroInterno += " AND ped1.IdCli IN (SELECT IdCliente FROM rota_cliente WHERE IdRota IN (SELECT IdRota FROM rota WHERE CodInterno LIKE ?codigoRota))";
                criterio      += string.Format("Rota: {0}    ", codigoRota);
            }

            if (idCliente > 0)
            {
                filtro        += string.Format(" AND ped.IdCli={0}", idCliente);
                filtroInterno += string.Format(" AND ped1.IdCli={0}", idCliente);
                criterio      += string.Format("Cliente: {0}    ", ClienteDAO.Instance.GetNome((uint)idCliente));
            }
            else if (!string.IsNullOrEmpty(nomeCliente))
            {
                var idsCliente = ClienteDAO.Instance.GetIds(null, nomeCliente, null, 0, null, null, null, null, 0);

                filtro        += string.Format(" AND c.Id_Cli IN ({0})", idsCliente);
                filtroInterno += string.Format(" AND c1.Id_Cli IN ({0})", idsCliente);
                criterio      += string.Format("Cliente: {0}    ", nomeCliente);
            }

            if (!string.IsNullOrEmpty(codigoEtiqueta))
            {
                filtro        += " AND ppp.NumEtiqueta=?codigoEtiqueta";
                filtroInterno += " AND ppp1.NumEtiqueta=?codigoEtiqueta";
                criterio      += string.Format("Etiqueta: {0}    ", codigoEtiqueta);
            }

            if (idFuncionario > 0)
            {
                filtro        += string.Format(" AND ped.IdFunc={0}", idFuncionario);
                filtroInterno += string.Format(" AND ped1.IdFunc={0}", idFuncionario);
                criterio      += string.Format("Funcionário: {0}    ", FuncionarioDAO.Instance.GetNome((uint)idFuncionario));
            }

            // O SQL é chamado somente quando a situação filtrada for Perda.
            filtro        += string.Format(" AND ppp.Situacao={0}", (int)ProdutoPedidoProducao.SituacaoEnum.Perda);
            filtroInterno += string.Format(" AND ppp1.Situacao={0}", (int)ProdutoPedidoProducao.SituacaoEnum.Perda);
            criterio      += "Situação: Perda    ";

            descricaoSetor = idSetor > 0 ? Utils.ObtemSetor((uint)idSetor).Descricao : idSetor == -1 ? "Etiqueta não impressa" : string.Empty;

            if (idSetor > 0 || idSetor == -1)
            {
                if (!setoresPosteriores && !setoresAnteriores)
                {
                    if (idSetor > 0)
                    {
                        filtro        += string.Format(" AND ppp.IdSetor={0}", idSetor);
                        filtroInterno += string.Format(" AND ppp1.IdSetor={0}", idSetor);

                        // Filtro para impressão de etiqueta
                        if (Utils.ObtemSetor((uint)idSetor).NumeroSequencia == 1)
                        {
                            filtro        += string.Format(" AND EXISTS (SELECT * FROM leitura_producao WHERE IdProdPedProducao=ppp.IdProdPedProducao AND IdSetor={0})", idSetor);
                            filtroInterno += string.Format(" AND EXISTS (SELECT * FROM leitura_producao WHERE IdProdPedProducao=ppp1.IdProdPedProducao AND IdSetor={0})", idSetor);
                        }
                    }
                    // Etiqueta não impressa
                    else if (idSetor == -1)
                    {
                        filtro        += " AND NOT EXISTS (SELECT * FROM leitura_producao WHERE IdProdPedProducao=ppp.IdProdPedProducao)";
                        filtroInterno += " AND NOT EXISTS (SELECT * FROM leitura_producao WHERE IdProdPedProducao=ppp1.IdProdPedProducao)";
                    }
                }
                else
                {
                    if (setoresAnteriores)
                    {
                        if (idSetor == 1)
                        {
                            filtro        += " AND NOT EXISTS (SELECT * FROM leitura_producao WHERE IdProdPedProducao=ppp.IdProdPedProducao)";
                            filtroInterno += " AND NOT EXISTS (SELECT * FROM leitura_producao WHERE IdProdPedProducao=ppp1.IdProdPedProducao)";
                        }
                        else
                        {
                            filtro        += string.Format(" AND NOT EXISTS (SELECT * FROM leitura_producao WHERE IdProdPedProducao=ppp.IdProdPedProducao AND IdSetor={0})", idSetor);
                            filtroInterno += string.Format(" And not exists (select * from leitura_producao where idProdPedProducao=ppp1.idProdPedProducao and idSetor={0})", idSetor);
                        }

                        // Retorna apenas as peças de roteiro se o setor for de roteiro
                        if (Utils.ObtemSetor((uint)idSetor).SetorPertenceARoteiro)
                        {
                            filtro        += string.Format(" AND EXISTS (SELECT * FROM roteiro_producao_etiqueta WHERE IdProdPedProducao=ppp.IdProdPedProducao AND IdSetor={0})", idSetor);
                            filtroInterno += string.Format(" AND EXISTS (SELECT * FROM roteiro_producao_etiqueta WHERE IdProdPedProducao=ppp1.IdProdPedProducao AND IdSetor={0})", idSetor);
                        }
                    }
                    else if (setoresPosteriores)
                    {
                        filtro        += string.Format(" AND {0} <= ALL (SELECT NumSeq FROM setor WHERE IdSetor=ppp.IdSetor) ", Utils.ObtemSetor((uint)idSetor).NumeroSequencia);
                        filtroInterno += string.Format(" AND {0} <= ALL (SELECT NumSeq FROM setor WHERE IdSetor=ppp1.IdSetor) ", Utils.ObtemSetor((uint)idSetor).NumeroSequencia);
                    }
                }

                criterio += string.Format("Setor: {0}{1}    ", descricaoSetor, setoresAnteriores ? " (só produtos que ainda não passaram por este setor)" :
                                          setoresPosteriores ? " (inclui produtos que já passaram por este setor)" : string.Empty);
            }

            if (pecasCanceladas)
            {
                filtro        += string.Format(" AND ped.Situacao={0}", (int)Pedido.SituacaoPedido.Cancelado);
                filtroInterno += string.Format(" AND ped1.Situacao={0}", (int)Pedido.SituacaoPedido.Cancelado);
                criterio      += "Peças canceladas    ";
            }
            else
            {
                filtro        += string.Format(" AND ped.Situacao<>{0}", (int)Pedido.SituacaoPedido.Cancelado);
                filtroInterno += string.Format(" AND ped1.Situacao<>{0}", (int)Pedido.SituacaoPedido.Cancelado);
            }

            if (dataLeituraInicio > DateTime.MinValue)
            {
                var formatoCriterioDataLeituraInicio = dataLeituraInicio.Value.ToString("HH:mm:ss") == "00:00:00" ? "dd/MM/yyyy" : "dd/MM/yyyy HH:mm:ss";

                filtro        += " AND ppp.DataPerda>=?dataLeituraInicio";
                filtroInterno += " AND ppp1.DataPerda>=?dataLeituraInicio";
                criterio      += string.Format("Data perda início: {0}    ", dataLeituraInicio.Value.ToString(formatoCriterioDataLeituraInicio));
            }

            if (dataLeituraFim > DateTime.MinValue)
            {
                var formatoCriterioDataLeituraFim = dataLeituraFim.Value.ToString("HH:mm:ss") == "00:00:00" ? "dd/MM/yyyy" : "dd/MM/yyyy HH:mm:ss";

                filtro        += " AND ppp.DataPerda<=?dataLeituraFim";
                filtroInterno += " AND ppp1.DataPerda<=?dataLeituraFim";
                criterio      += string.Format("Data perda término: {0}    ", dataLeituraFim.Value.ToString(formatoCriterioDataLeituraFim));
            }

            if (dataEntregaInicio > DateTime.MinValue)
            {
                var formatoCriterioDataEntregaInicio = dataEntregaInicio.Value.ToString("HH:mm:ss") == "00:00:00" ? "dd/MM/yyyy" : "dd/MM/yyyy HH:mm:ss";

                filtro        += " AND ped.DataEntrega>=?dataEntregaInicio";
                filtroInterno += " AND ped1.DataEntrega>=?dataEntregaInicio";
                criterio      += string.Format("Data entrega início: {0}    ", dataEntregaInicio.Value.ToString(formatoCriterioDataEntregaInicio));
            }

            if (dataEntregaFim > DateTime.MinValue)
            {
                var formatoCriterioDataEntregaFim = dataEntregaFim.Value.ToString("HH:mm:ss") == "00:00:00" ? "dd/MM/yyyy" : "dd/MM/yyyy HH:mm:ss";

                filtro        += " AND ped.DataEntrega<=?dataEntregaFim";
                filtroInterno += " AND ped1.DataEntrega<=?dataEntregaFim";
                criterio      += string.Format("Data Entrega término: {0}    ", dataEntregaFim.Value.ToString(formatoCriterioDataEntregaFim));
            }

            if (idsSubgrupo?.Any(f => f > 0) ?? false)
            {
                filtro        += string.Format(" AND p.IdSubgrupoProd IN ({0})", string.Join(",", idsSubgrupo));
                filtroInterno += string.Format(" AND p1.IdSubgrupoProd IN ({0})", string.Join(",", idsSubgrupo));
                criterio      += string.Format("Subgrupo(s): {0}    ", SubgrupoProdDAO.Instance.GetDescricao(string.Join(",", idsSubgrupo)));
            }

            if (tipoEntrega > 0)
            {
                filtro        += string.Format(" AND ped.TipoEntrega={0}", tipoEntrega);
                filtroInterno += string.Format(" AND ped1.TipoEntrega={0}", tipoEntrega);

                foreach (var te in DataSources.Instance.GetTipoEntrega())
                {
                    if (te.Id == tipoEntrega)
                    {
                        criterio += string.Format("Tipo Entrega: {0}    ", te.Descr);
                        break;
                    }
                }
            }

            if (aguardandoEntradaEstoque)
            {
                filtro += string.Format(" AND (EntrouEstoque IS NULL OR EntrouEstoque=0) AND ped.TipoPedido={0}", (int)Pedido.TipoPedidoEnum.Producao);

                if (tipoEntrega > 0)
                {
                    filtroInterno += string.Format(" AND ped1.TipoEntrega={0}", tipoEntrega);
                }

                criterio += "Aguardando entrada no estoque    ";
            }
            else if (aguardandoExpedicao)
            {
                filtro += string.Format(@" AND ped.TipoPedido<>{0} AND ped.IdPedido IN
                        (SELECT * FROM (SELECT IdPedido FROM produtos_liberar_pedido plp
                            LEFT JOIN liberarpedido lp ON (plp.IdLiberarPedido=lp.IdLiberarPedido) 
                        WHERE lp.Situacao<>{1}) AS temp) AND
                    dados.SituacaoProducao<>{2} AND ppp.Situacao={3}",
                                        (int)Pedido.TipoPedidoEnum.Producao, (int)LiberarPedido.SituacaoLiberarPedido.Cancelado, (int)SituacaoProdutoProducao.Entregue, (int)ProdutoPedidoProducao.SituacaoEnum.Producao);

                filtroInterno += string.Format(@" AND ped1.TipoPedido<>{0} AND ped1.IdPedido IN
                    (SELECT * FROM (SELECT IdPedido FROM produtos_liberar_pedido plp 
                    LEFT JOIN liberarpedido lp ON (plp.IdLiberarPedido=lp.IdLiberarPedido) 
                    WHERE lp.Situacao<>{1}) AS temp1)
                    AND ppp1.SituacaoProducao<>{2} AND ppp1.Situacao={3}",
                                               (int)Pedido.TipoPedidoEnum.Producao, (int)LiberarPedido.SituacaoLiberarPedido.Cancelado, (int)SituacaoProdutoProducao.Entregue, (int)ProdutoPedidoProducao.SituacaoEnum.Producao);

                criterio += "Aguardando expedição    ";
            }

            if (tiposPedido?.Any(f => f > 0) ?? false)
            {
                var critetioTipoPedido = new List <string>();
                var tiposPedidoFiltrar = new List <Pedido.TipoPedidoEnum>();

                if (tiposPedido.Any(f => f == 1))
                {
                    tiposPedidoFiltrar.Add(Pedido.TipoPedidoEnum.Venda);
                    tiposPedidoFiltrar.Add(Pedido.TipoPedidoEnum.Revenda);
                    critetioTipoPedido.Add("Venda/Revenda");
                }

                if (tiposPedido.Any(f => f == 2))
                {
                    tiposPedidoFiltrar.Add(Pedido.TipoPedidoEnum.Producao);
                    critetioTipoPedido.Add("Produção");
                }

                if (tiposPedido.Any(f => f == 3))
                {
                    tiposPedidoFiltrar.Add(Pedido.TipoPedidoEnum.MaoDeObra);
                    critetioTipoPedido.Add("Mão-de-obra");
                }

                if (tiposPedido.Any(f => f == 4))
                {
                    tiposPedidoFiltrar.Add(Pedido.TipoPedidoEnum.MaoDeObraEspecial);
                    critetioTipoPedido.Add("Mão-de-obra Especial");
                }

                filtro        += string.Format(" AND ped.TipoPedido IN ({0})", string.Join(",", tiposPedidoFiltrar.Select(f => (int)f)));
                filtroInterno += string.Format(" AND ped1.TipoPedido IN ({0})", string.Join(",", tiposPedidoFiltrar.Select(f => (int)f)));
                criterio      += string.Format("Tipo Pedido: {0}    ", string.Join(", ", critetioTipoPedido.ToArray()));
            }

            if (idCorVidro > 0)
            {
                filtro        += string.Format(" AND p.IdCorVidro={0}", idCorVidro);
                filtroInterno += string.Format(" AND p1.IdCorVidro={0}", idCorVidro);
                criterio      += string.Format("Cor: {0}    ", CorVidroDAO.Instance.GetNome((uint)idCorVidro));
            }

            if (altura > 0)
            {
                filtro        += string.Format(" AND IF(ppe.AlturaReal > 0, ppe.AlturaReal, ppe.Altura)={0}", altura);
                filtroInterno += string.Format(" AND IF(ppe1.AlturaReal > 0, ppe1.AlturaReal, ppe1.Altura)={0}", altura);
                criterio      += string.Format("Altura da peça: {0}    ", altura);
            }

            if (largura > 0)
            {
                filtro        += string.Format(" AND IF(ppe.LarguraReal > 0, ppe.LarguraReal, ppe.Largura)={0}", largura);
                filtroInterno += string.Format(" AND IF(ppe1.LarguraReal > 0, ppe1.LarguraReal, ppe1.Largura)={0}", largura);
                criterio      += string.Format("Largura da peça: {0}    ", largura);
            }

            #endregion

            #region Consulta

            camposUnion = selecionar ? @"ppp1.IdProdPedProducao, NULL AS IdSetor, s1.Tipo AS TipoSetor, (SELECT MAX(NumSeq)+2 FROM setor) AS NumSeqSetor, 'Prev. Entrega' AS NomeSetor,
                ppp1.SituacaoProducao, CONCAT(DATE_FORMAT(ped1.DataEntrega, '%d-%m-%Y'), IF(ped1.DataEntregaOriginal IS NOT NULL AND ped1.DataEntrega<>ped1.DataEntregaOriginal,
                CONCAT(' (', DATE_FORMAT(ped1.DataEntregaOriginal, '%d-%m-%Y'), ')'), '')) AS DataSetor, ped1.IdFunc, ped1.IdPedido" : "ppp1.IdProdPedProducao, ppe.IdPedido, NULL AS IdSetor";

            sql = string.Format(@"SELECT ppp.IdProdPedProducao, ppe.IdPedido, ped.CodCliente AS PedCli, ped.TipoPedido={0} AS IsPedidoMaoDeObra, ped.TipoPedido={1} AS IsPedidoProducao,
                    ped.IdCli AS IdCliente, ppe.IdProd, ppe.IdProdPed, IF(ppe.AlturaReal > 0, ppe.AlturaReal, ppe.Altura) AS Altura, IF(ppe.LarguraReal > 0, ppe.LarguraReal, ppe.Largura) AS Largura,
                    ppp.NumEtiqueta, c.Nome AS NomeCliente, p.CodInterno AS CodInternoProduto, p.Descricao AS DescrProduto, dados.IdSetor, dados.NomeSetor, dados.DataSetor, dados.NumSeqSetor,
                    ppp.Situacao AS SituacaoProducao, s.Cor AS CorSetor, ppp.TipoPerda AS TipoPerdaProducao, ppp.Obs AS ObsPerdaProducao, ped.IdPedidoAnterior, ppp.IdPedidoExpedicao, '$$$' AS Criterio
                FROM produtos_pedido_espelho ppe
                    LEFT JOIN pedido ped ON (ppe.IdPedido=ped.IdPedido)
                    LEFT JOIN produto_pedido_producao ppp ON (ppe.IdProdPed=ppp.IdProdPed)
                    LEFT JOIN cliente c ON (ped.IdCli=c.Id_Cli)
                    LEFT JOIN produto p ON (ppe.IdProd=p.IdProd)
                    INNER JOIN (
                        {2}                                        
                        UNION ALL SELECT {3}
                        FROM produto_pedido_producao ppp1
                            LEFT JOIN produtos_pedido_espelho ppe1 ON (ppp1.IdProdPed=ppe1.IdProdPed)
                            LEFT JOIN pedido ped1 ON (ppe1.IdPedido=ped1.IdPedido)
                            LEFT JOIN cliente c1 ON (ped1.IdCli=c1.Id_Cli)
                            INNER JOIN produto p1 ON (ppe1.IdProd=p1.IdProd)
                            INNER JOIN setor s1 ON (ppp1.IdSetor=s1.IdSetor)
                        WHERE 1 {1}
                    ) AS dados ON (ppp.IdProdPedProducao=dados.IdProdPedProducao)
                    INNER JOIN setor s ON (ppp.IdSetor=s.IdSetor)
                WHERE 1 {0}",
                                // Posição 0.
                                (int)Pedido.TipoPedidoEnum.MaoDeObra,
                                // Posição 1.
                                (int)Pedido.TipoPedidoEnum.Producao,
                                // Posição 2.
                                SqlSetores(true, true, filtroInterno, ObterParametrosProducao(codigoEtiqueta, codigoPedidoCliente, codigoRota, dataEntregaFim, dataEntregaInicio, dataLeituraFim, dataLeituraInicio,
                                                                                              idPedidoImportado, nomeCliente), selecionar),
                                // Posição 3.
                                camposUnion);

            sql = string.Format(sql, filtro, filtroInterno);
            sql = !selecionar?string.Format("SELECT COUNT(*) FROM ({0}) AS temp", sql) : sql;

            #endregion

            return(sql.Replace("$$$", criterio));
        }
コード例 #11
0
ファイル: MetragemDAO.cs プロジェクト: ertprs/Estudo
        //private MetragemDAO() { }

        private string Sql(uint idPedido, uint idImpressao, uint idFunc, string codPedCli, uint idCliente, string nomeCliente, string dataIni,
                           string dataFim, string dataIniEnt, string dataFimEnt, int situacao, uint idSetor, bool setoresPosteriores, string idsRotas,
                           uint idTurno, bool selecionar)
        {
            string campoNomeCliente = "Coalesce(cli.nome,cli.nome)";

            string criterio = "";
            string sql      = @"
                select pp.idPedido, substring(ppp.numEtiqueta, instr(ppp.numEtiqueta, '-') + 1) as NumPeca, 
                    COALESCE(cv.Descricao, 'N/D') as Cor, p.Espessura, pp.Altura, pp.Largura, 
                    
                    /*Caso o pedido seja mão de obra o m2 da peça deve ser considerado*/
                    ROUND(if(ped.tipoPedido=3, (
                    (((50 - If(Mod(a.altura, 50) > 0, Mod(a.altura, 50), 50)) +
                    a.altura) * ((50 - If(Mod(a.largura, 50) > 0, Mod(a.largura, 50), 50)) + a.largura)) / 1000000)             
                    * a.qtde, pp.TotM2Calc)/(pp.qtde*if(ped.tipoPedido=3, a.qtde, 1)), 4) as TotM2,

                    pp.Obs, cli.id_Cli as idCliente, " + campoNomeCliente + @" as NomeCliente, '$$$' as Criterio
                from produto_pedido_producao ppp
                    inner Join produtos_pedido_espelho pp On (ppp.idProdPed=pp.idProdPed)" +
                              ((!String.IsNullOrEmpty(dataIni) || !String.IsNullOrEmpty(dataFim)) &&
                               situacao != (int)ProdutoPedidoProducao.SituacaoEnum.Perda && idSetor > 0 ?
                               " INNER JOIN leitura_producao lp ON (ppp.IdProdPedProducao=lp.IdProdPedProducao)" : "") +
                              @"
                    left join ambiente_pedido_espelho a On (pp.idAmbientePedido=a.idAmbientePedido) 
                    inner Join pedido ped On (pp.idPedido=ped.idPedido)
                    Inner Join cliente cli On (ped.idCli=cli.id_Cli)
                    inner Join produto p On (pp.idProd=p.idProd)
                    Left Join cor_vidro cv on (p.idCorVidro=cv.idCorVidro)
                    Left Join etiqueta_aplicacao apl On (pp.idAplicacao=apl.idAplicacao)
                    Left Join etiqueta_processo prc On (pp.idProcesso=prc.idProcesso)
                    Left Join leitura_producao lp1 On (ppp.idProdPedProducao=lp1.idProdPedProducao)
                where ped.situacao<>" + (int)Pedido.SituacaoPedido.Cancelado;

            ProdutoPedidoProducao temp = new ProdutoPedidoProducao();

            if (idPedido > 0)
            {
                sql += " And (ped.idPedido=" + idPedido;

                if (Glass.Configuracoes.ProducaoConfig.TipoControleReposicao == DataSources.TipoReposicaoEnum.Pedido && PedidoDAO.Instance.IsPedidoReposto(null, idPedido))
                {
                    sql += " Or ped.IdPedidoAnterior=" + idPedido;
                }

                if (PedidoDAO.Instance.IsPedidoExpedicaoBox(null, idPedido))
                {
                    sql += " Or ppp.idPedidoExpedicao=" + idPedido;
                }

                sql      += ")";
                criterio += "Pedido: " + idPedido + "    ";
            }

            if (!String.IsNullOrEmpty(codPedCli))
            {
                sql      += " And ped.codCliente=?codCliente";
                criterio += "Pedido Cliente: " + codPedCli + "    ";
            }

            if (idImpressao > 0)
            {
                sql      += " And ppp.idProdPed In (Select idProdPed From produto_impressao Where idImpressao=" + idImpressao + ")";
                criterio += "Num. Impressão: " + idImpressao + "    ";
            }

            if (idFunc > 0)
            {
                var idsProdPedProducao = LeituraProducaoDAO.Instance.ObterIdsProdPedProducaoPeloIdFunc(null, (int)idFunc);

                sql      += $" AND ppp.IdProdPedProducao IN ({ (idsProdPedProducao?.Any(f => f > 0) ?? false ? string.Join(",", idsProdPedProducao) : "0") })";
                criterio += "Funcionário: " + FuncionarioDAO.Instance.GetNome(idFunc) + "    ";
            }

            if (idCliente > 0)
            {
                sql      += " And ped.idCli=" + idCliente;
                criterio += "Cliente: " + idCliente + " - " + ClienteDAO.Instance.GetNome(idCliente) + "    ";
            }
            else if (!String.IsNullOrEmpty(nomeCliente))
            {
                string ids = ClienteDAO.Instance.GetIds(null, nomeCliente, null, 0, null, null, null, null, 0);
                sql      += " And cli.id_Cli in (" + ids + ")";
                criterio += "Cliente: " + nomeCliente;
            }

            if (situacao > 0)
            {
                sql          += " And ppp.Situacao=" + situacao;
                temp.Situacao = situacao;
                criterio     += "Situação: " + temp.DescrSituacao + "    ";
            }

            if (idSetor > 0)
            {
                if (!setoresPosteriores)
                {
                    sql += " And ppp.idSetor=" + idSetor;
                }
                else
                {
                    if (setoresPosteriores)
                    {
                        sql += " And " + Utils.ObtemSetor(idSetor).NumeroSequencia +
                               " <= all (Select numSeq From setor Where idSetor=ppp.idSetor) ";
                    }
                }

                criterio += "Setor: " + Utils.ObtemSetor(idSetor).Descricao + (setoresPosteriores ? " (inclui produtos que já passaram por este setor)" : "") + "    ";
            }

            if (!String.IsNullOrEmpty(dataIni))
            {
                if (situacao == (int)ProdutoPedidoProducao.SituacaoEnum.Perda)
                {
                    sql      += " And ppp.dataPerda>=?dataIni";
                    criterio += "Data perda início: " + dataIni + "    ";
                }
                else if (idSetor > 0)
                {
                    sql      += " AND lp.DataLeitura>=?dataIni AND lp.IdSetor=" + idSetor;
                    criterio += "Data " + Utils.ObtemSetor(idSetor).Descricao + " início: " + dataIni + "    ";
                }
            }

            if (!String.IsNullOrEmpty(dataFim))
            {
                if (situacao == (int)ProdutoPedidoProducao.SituacaoEnum.Perda)
                {
                    sql      += " And ppp.dataPerda<=?dataFim";
                    criterio += "Data perda término: " + dataFim + "    ";
                }
                else if (idSetor > 0)
                {
                    sql      += " AND lp.DataLeitura<=?dataFim AND lp.IdSetor=" + idSetor;
                    criterio += "Data " + Utils.ObtemSetor(idSetor).Descricao + " término: " + dataFim + "    ";
                }
            }

            if (!String.IsNullOrEmpty(dataIniEnt))
            {
                sql      += " And ped.dataEntrega>=?dataIniEnt";
                criterio += "Data Entrega início: " + dataIniEnt + "    ";
            }

            if (!String.IsNullOrEmpty(dataFimEnt))
            {
                sql      += " And ped.dataEntrega<=?dataFimEnt";
                criterio += "Data Entrega término: " + dataFimEnt + "    ";
            }

            if (!String.IsNullOrEmpty(idsRotas))
            {
                sql      += " And cli.Id_Cli in (select * from (select idCliente from rota_cliente where idRota in (" + idsRotas + ")) as temp)";
                criterio += "Rota(s): " + RotaDAO.Instance.ObtemDescrRotas(idsRotas) + "    ";
            }

            if (idTurno > 0)
            {
                string inicio    = TurnoDAO.Instance.ObtemValorCampo <string>("inicio", "idTurno=" + idTurno);
                string termino   = TurnoDAO.Instance.ObtemValorCampo <string>("termino", "idTurno=" + idTurno);
                string descricao = TurnoDAO.Instance.ObtemValorCampo <string>("descricao", "idTurno=" + idTurno);

                if (TimeSpan.Parse(inicio) <= TimeSpan.Parse(termino))
                {
                    sql += " and lp1.idSetor=ppp.idSetor and lp1.DataLeitura>=cast(concat(date_format(lp1.DataLeitura, '%Y-%m-%d'), ' " + inicio + "') as datetime) and lp1.DataLeitura<=cast(concat(date_format(lp1.DataLeitura, '%Y-%m-%d'), ' " + termino + "') as datetime)";
                }
                else
                {
                    sql += " and lp1.idSetor=ppp.idSetor and (lp1.DataLeitura>=cast(concat(date_format(lp1.DataLeitura, '%Y-%m-%d'), ' " + inicio + "') as datetime) or lp1.DataLeitura<cast(concat(date_format(lp1.DataLeitura, '%Y-%m-%d'), ' " + termino + "') as datetime))";
                }

                criterio += "Turno: " + descricao + "    ";
            }

            sql = sql.Replace("$$$", criterio.Trim());
            sql = selecionar ? sql + " group by ppp.idProdPedProducao" : "select count(*) from (" + sql + ") as temp";
            return(sql);
        }