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); }
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); }