public static List <MovimentosDeAprovação> GetAllFHAssignedToUserFilteredByStatus(string NoFH, string userId, int status, int level)
        {
            try
            {
                using (var ctx = new SuchDBContext())
                {
                    List <MovimentosDeAprovação> MOV   = new List <MovimentosDeAprovação>();
                    MovimentosDeAprovação        MOVFH = ctx.MovimentosDeAprovação.Where(x => x.Número == NoFH && x.Tipo == 3 && x.Estado == 2 && x.Nivel == level).FirstOrDefault();

                    MOV = ctx.UtilizadoresMovimentosDeAprovação.Where(x => x.Utilizador.ToLower() == userId.ToLower()).Select(x => x.NºMovimentoNavigation).Where(x => x.Número != NoFH && x.Estado == status && x.Tipo == 3 && x.Nivel == level).OrderBy(x => x.NºMovimento).ToList();

                    if (MOV != null && MOV.Count > 0)
                    {
                        MOV.RemoveAll(x => x.NºMovimento < MOVFH.NºMovimento);
                    }

                    if (MOV != null && MOV.Count == 0)
                    {
                        MOV = ctx.UtilizadoresMovimentosDeAprovação.Where(x => x.Utilizador.ToLower() == userId.ToLower()).Select(x => x.NºMovimentoNavigation).Where(x => x.Número != NoFH && x.Estado == status && x.Tipo == 3 && x.Nivel == level).OrderByDescending(x => x.NºMovimento).ToList();
                    }

                    if (MOV != null && MOV.Count > 0)
                    {
                        foreach (MovimentosDeAprovação item in MOV)
                        {
                            FolhasDeHoras FH = DBFolhasDeHoras.GetById(item.Número);
                            if (FH != null)
                            {
                                if (level == 1) //para validar
                                {
                                    if (FH.Estado.HasValue && (FH.Estado == 1 || FH.Estado == 2))
                                    {
                                        item.Estado = 99;
                                    }
                                }
                                if (level == 2) //para integrar
                                {
                                    if (FH.Estado.HasValue && (FH.Estado == 0 || FH.Estado == 2))
                                    {
                                        item.Estado = 99;
                                    }
                                }
                            }
                            else
                            {
                                item.Estado = 99;
                            }
                        }

                        MOV.RemoveAll(x => x.Estado == 99);
                    }

                    return(MOV);
                }
            }
            catch (Exception ex)
            {
                return(null);
            }
        }
        public static bool Delete(MovimentosDeAprovação ObjectToDelete)
        {
            try
            {
                using (var ctx = new SuchDBContext())
                {
                    ctx.MovimentosDeAprovação.Remove(ObjectToDelete);
                    ctx.SaveChanges();
                }

                return(true);
            }
            catch (Exception e)
            {
                return(false);
            }
        }
        public static MovimentosDeAprovação Update(MovimentosDeAprovação ObjectToUpdate)
        {
            try
            {
                using (var ctx = new SuchDBContext())
                {
                    ObjectToUpdate.DataHoraModificação = DateTime.Now;
                    ctx.MovimentosDeAprovação.Update(ObjectToUpdate);
                    ctx.SaveChanges();
                }

                return(ObjectToUpdate);
            }
            catch (Exception ex)
            {
                return(null);
            }
        }
        public static MovimentosDeAprovação Create(MovimentosDeAprovação ObjectToCreate)
        {
            try
            {
                using (var ctx = new SuchDBContext())
                {
                    ObjectToCreate.NºMovimento     = new Int32();
                    ObjectToCreate.DataHoraCriação = DateTime.Now;
                    ctx.MovimentosDeAprovação.Add(ObjectToCreate);
                    ctx.SaveChanges();
                }

                return(ObjectToCreate);
            }
            catch (Exception ex)
            {
                return(null);
            }
        }
 public static ApprovalMovementsViewModel ParseToViewModel(MovimentosDeAprovação x)
 {
     return(new ApprovalMovementsViewModel()
     {
         MovementNo = x.NºMovimento,
         Type = x.Tipo,
         Area = x.Área,
         FunctionalArea = x.CódigoÁreaFuncional,
         ResponsabilityCenter = x.CódigoCentroResponsabilidade,
         Region = x.CódigoRegião,
         Number = x.Número,
         RequestUser = x.UtilizadorSolicitou,
         Value = x.Valor,
         DateTimeApprove = x.DataHoraAprovação,
         DateTimeCreate = x.DataHoraCriação,
         UserCreate = x.UtilizadorCriação,
         UserUpdate = x.UtilizadorModificação,
         DateTimeUpdate = x.DataHoraModificação,
         Status = x.Estado,
         ReproveReason = x.MotivoDeRecusa,
         Level = x.Nivel
     });
 }