Exemple #1
0
        private TEMPO_MEDIO_DA_FASE Acerta_Tempo_da_Fase(TEMPO_MEDIO_DA_FASE tempo)
        {
            TEMPO_MEDIO_DA_FASE retorno = tempo;

            if (retorno.MINUTOS > 60)
            {
                double horas = retorno.MINUTOS.Value / 60;
                double dias  = 0;

                if (horas > 24)
                {
                    dias  = horas / 24;
                    horas = (dias - Convert.ToInt32(dias)) * 24;
                }

                retorno.DIAS    = Convert.ToInt32(dias);
                retorno.HORAS   = Convert.ToInt32(horas);
                retorno.MINUTOS = Convert.ToInt32((horas - Convert.ToInt32(horas)) * 60);
            }
            else
            {
                retorno.DIAS  = 0;
                retorno.HORAS = 0;
            }

            return(retorno);
        }
Exemple #2
0
        private TEMPO_MEDIO_DA_FASE Calcula_Tempo_Medio(decimal ID_STATUS)
        {
            var por_produto = (from linha in ctx.TB_MUDANCA_STATUS_PEDIDOs
                               where linha.ID_PRODUTO == ID_PRODUTO &&
                               linha.ID_STATUS_ANTERIOR == ID_STATUS &&
                               linha.DATA_MUDANCA < DateTime.Today.AddMinutes(-1)

                               select new TEMPO_DE_FASES()
            {
                DATA_STATUS_ANTERIOR = linha.DATA_STATUS_ANTERIOR,
                DATA_MUDANCA = linha.DATA_MUDANCA,
                MINUTOS = SqlMethods.DateDiffMinute(linha.DATA_STATUS_ANTERIOR, linha.DATA_MUDANCA.Value),
                QTDE = linha.TB_PEDIDO_VENDA.QTDE_PRODUTO_ITEM_PEDIDO
            }).Take(5).ToList();

            List <TEMPO_DE_FASES> tempo = Desconta_Minutos_Feriado_Fim_de_Semana_fora_do_Expediente(por_produto);

            double? minutos    = tempo.Average(d => d.MINUTOS);
            decimal?QTDE_TOTAL = tempo.Sum(s => s.QTDE);

            if (!minutos.HasValue || minutos < 0.00)
            {
                var media = (from linha in ctx.TB_MUDANCA_STATUS_PEDIDOs
                             where linha.ID_STATUS_ANTERIOR == ID_STATUS &&
                             linha.DATA_MUDANCA < DateTime.Today.AddMinutes(-1)

                             select new TEMPO_DE_FASES()
                {
                    DATA_STATUS_ANTERIOR = linha.DATA_STATUS_ANTERIOR,
                    DATA_MUDANCA = linha.DATA_MUDANCA,
                    MINUTOS = SqlMethods.DateDiffMinute(linha.DATA_STATUS_ANTERIOR, linha.DATA_MUDANCA.Value),
                    QTDE = linha.TB_PEDIDO_VENDA.QTDE_PRODUTO_ITEM_PEDIDO
                }).Take(5).ToList();

                tempo = Desconta_Minutos_Feriado_Fim_de_Semana_fora_do_Expediente(media);

                minutos    = tempo.Average(d => d.MINUTOS);
                QTDE_TOTAL = tempo.Sum(s => s.QTDE);
            }

            var STATUS_INICIO = (from linha in ctx.TB_STATUS_PEDIDOs
                                 where linha.CODIGO_STATUS_PEDIDO == ID_STATUS
                                 select linha.INICIO_FIM_DE_FASE).First();

            if (STATUS_INICIO == 4) // início de separação
            {
                if (QTDE_TOTAL.HasValue && minutos.HasValue)
                {
                    if (QTDE_TOTAL > (decimal)0.00 && minutos > (double)0.00)
                    {
                        decimal tempo_de_separacao_da_unidade = Convert.ToDecimal(minutos) / QTDE_TOTAL.Value;
                        minutos = (Convert.ToDouble(tempo_de_separacao_da_unidade) * Convert.ToDouble(QTDE_PEDIDO));
                    }
                }
            }

            TEMPO_MEDIO_DA_FASE retorno = new TEMPO_MEDIO_DA_FASE();

            retorno.MINUTOS = Convert.ToInt32(minutos);
            _MINUTOS       += Convert.ToInt32(minutos);

            retorno = Acerta_Tempo_da_Fase(retorno);

            preenche_tempo_fase(ID_STATUS, minutos);

            return(retorno);
        }