public JsonResult MealRegistryLineRegister([FromBody] List <CoffeeShopDiaryViewModel> data)
        {
            try
            {
                if (data != null)
                {
                    int?id = data.Find(x => x.User == User.Identity.Name).CoffeShopCode;
                    CafetariasRefeitórios CoffeeShop = DBCoffeeShops.GetByCode((int)id);

                    foreach (var linesToRegist in data)
                    {
                        MovimentosCafetariaRefeitório MovementsToCreate = new MovimentosCafetariaRefeitório();
                        MovementsToCreate.CódigoCafetariaRefeitório = linesToRegist.CoffeShopCode;
                        MovementsToCreate.NºUnidadeProdutiva        = linesToRegist.ProdutiveUnityNo;
                        MovementsToCreate.DataRegisto = linesToRegist.RegistryDate != "" ? DateTime.Parse(linesToRegist.RegistryDate) : (DateTime?)null;
                        MovementsToCreate.NºRecurso   = linesToRegist.ResourceNo;
                        MovementsToCreate.Descrição   = linesToRegist.Description;
                        MovementsToCreate.Tipo        = CoffeeShop.Tipo;
                        if (linesToRegist.MovementType == 2 || linesToRegist.MovementType == 3)
                        {
                            MovementsToCreate.Valor = linesToRegist.Value * (-1);
                        }
                        else
                        {
                            MovementsToCreate.Valor = linesToRegist.Value;
                        }

                        MovementsToCreate.TipoMovimento                = linesToRegist.MovementType;
                        MovementsToCreate.Quantidade                   = linesToRegist.Quantity;
                        MovementsToCreate.TipoRefeição                 = linesToRegist.MealType;
                        MovementsToCreate.DescriçãoTipoRefeição        = linesToRegist.DescriptionTypeMeal;
                        MovementsToCreate.CódigoRegião                 = CoffeeShop.CódigoRegião ?? "";
                        MovementsToCreate.CódigoÁreaFuncional          = CoffeeShop.CódigoÁreaFuncional ?? "";
                        MovementsToCreate.CódigoCentroResponsabilidade = CoffeeShop.CódigoCentroResponsabilidade ?? "";
                        MovementsToCreate.Utilizador                   = User.Identity.Name;
                        MovementsToCreate.DataHoraSistemaRegisto       = DateTime.Now;
                        MovementsToCreate.DataHoraCriação              = DateTime.Now;
                        MovementsToCreate.UtilizadorCriação            = User.Identity.Name;

                        DBCoffeeShopMovements.Create(MovementsToCreate);
                        if (MovementsToCreate.NºMovimento > 0)
                        {
                            DiárioCafetariaRefeitório lineToRemove = new DiárioCafetariaRefeitório();
                            lineToRemove = DBCoffeeShopsDiary.GetById(linesToRegist.LineNo);
                            DBCoffeeShopsDiary.Delete(lineToRemove);
                        }
                    }

                    return(Json(true));
                }
                else
                {
                    return(Json(false));
                }
            }
            catch (Exception ex)
            {
                return(Json(false));
            }
        }
        public JsonResult GetCoffeeShop([FromBody] Newtonsoft.Json.Linq.JObject requestParams)
        {
            CoffeeShopViewModel item;

            if (requestParams != null)
            {
                int    productivityUnitNo = int.Parse(requestParams["productivityUnitNo"].ToString());
                int    type = int.Parse(requestParams["type"].ToString());
                int    code = int.Parse(requestParams["code"].ToString());
                string explorationStartDate = requestParams["explorationStartDate"].ToString();

                DateTime date;
                if (DateTime.TryParse(explorationStartDate, out date))
                {
                    var coffeeShop = DBCoffeeShops.GetById(productivityUnitNo, type, code, date);
                    item = DBCoffeeShops.ParseToViewModel(coffeeShop, config.NAVDatabaseName, config.NAVCompanyName);
                }
                else
                {
                    item = new CoffeeShopViewModel();
                    item.ProductivityUnitNo = productivityUnitNo;
                }
            }
            else
            {
                item = new CoffeeShopViewModel();
            }
            return(Json(item));
        }
        public JsonResult DeleteCoffeeShop([FromBody] CoffeeShopViewModel item)
        {
            ErrorHandler errorHandler = new ErrorHandler()
            {
                eReasonCode = 2,
                eMessage    = "Ocorreu um erro ao eliminar o registo."
            };

            try
            {
                if (item != null)
                {
                    bool sucess = DBCoffeeShops.Delete(DBCoffeeShops.ParseToDB(item));
                    if (sucess)
                    {
                        item.eReasonCode = 1;
                        item.eMessage    = "Registo eliminado com sucesso.";
                    }
                }
                else
                {
                    item = new CoffeeShopViewModel();
                }
            }
            catch
            {
                item.eReasonCode = errorHandler.eReasonCode;
                item.eMessage    = errorHandler.eMessage;
            }
            return(Json(item));
        }
        public JsonResult UpdateCoffeeShop([FromBody] CoffeeShopViewModel item)
        {
            if (item != null)
            {
                item.UpdateUser = User.Identity.Name;
                CafetariasRefeitórios updatedItem = DBCoffeeShops.ParseToDB(item);
                updatedItem = DBCoffeeShops.Update(updatedItem);

                if (updatedItem != null)
                {
                    item             = DBCoffeeShops.ParseToViewModel(updatedItem, config.NAVDatabaseName, config.NAVCompanyName);
                    item.eReasonCode = 1;
                    item.eMessage    = "Cafetaria / refeitório atualizado com sucesso.";
                }
                else
                {
                    item.eReasonCode = 2;
                    item.eMessage    = "Ocorreu um erro ao atualizar a cafetaria / refeitório.";
                }
            }
            else
            {
                item = new CoffeeShopViewModel()
                {
                    eReasonCode = 3,
                    eMessage    = "Ocorreu um erro ao atualizar. A cafetaria / refeitório não pode ser nulo."
                };
            }
            return(Json(item));
        }
        public JsonResult CreateCoffeeShop([FromBody] CoffeeShopViewModel data)
        {
            try
            {
                if (data != null)
                {
                    data.CreateUser = User.Identity.Name;
                    CafetariasRefeitórios itemToCreate = DBCoffeeShops.ParseToDB(data);

                    itemToCreate = DBCoffeeShops.Create(itemToCreate);

                    if (itemToCreate != null)
                    {
                        data             = DBCoffeeShops.ParseToViewModel(itemToCreate, config.NAVDatabaseName, config.NAVCompanyName);
                        data.eReasonCode = 1;
                        data.eMessage    = "Registo criado com sucesso.";
                    }
                    else
                    {
                        data.eReasonCode = 3;
                        data.eMessage    = "Ocorreu um erro ao inserir os dados na base de dados.";
                    }
                }
            }
            catch (Exception)
            {
                data.eReasonCode = 2;
                data.eMessage    = "Ocorreu um erro ao criar a cafetaria / refeitório.";
            }
            return(Json(data));
        }
        public IActionResult DetalhesCafetariasRefeitorios(int code)
        {
            UserAccessesViewModel userPermissions = DBUserAccesses.GetByUserAreaFunctionality(User.Identity.Name, Enumerations.Features.Cafetarias_Refeitórios);
            CafetariasRefeitórios coffeeShop      = DBCoffeeShops.GetByCode(code);

            if (userPermissions != null && userPermissions.Read.Value)
            {
                ViewBag.UPermissions = userPermissions;
                ViewBag.Code         = code;

                return(Redirect(Url.Content("/CafetariasRefeitorios/Detalhes/" + "?productivityUnitNo=" + coffeeShop.NºUnidadeProdutiva + "&type=" + coffeeShop.Tipo + "&code=" + coffeeShop.Código + "&explorationStartDate=" + coffeeShop.DataInícioExploração)));
            }
            else
            {
                return(Redirect(Url.Content("~/Error/AccessDenied")));
            }
        }
        public JsonResult GetProductivityUnitData([FromBody] int ProductivityUnitNo)
        {
            UnidadesProdutivas        ProductivityUnitDB = DBProductivityUnits.GetById(ProductivityUnitNo);
            ProductivityUnitViewModel result             = new ProductivityUnitViewModel();

            if (ProductivityUnitDB != null)
            {
                result = DBProductivityUnits.ParseToViewModel(ProductivityUnitDB);

                result.BillingProjects = DBProjectBilling.ParseListToViewModel(DBProjectBilling.GetByNUnidadeProdutiva(result.ProductivityUnitNo));
                result.CoffeeShops     = DBCoffeeShops.ParseListToViewModel(DBCoffeeShops.GetByNUnidadeProdutiva(result.ProductivityUnitNo), _config.NAVDatabaseName, _config.NAVCompanyName);
            }
            else
            {
                result.ProductivityUnitNo = new int();
                result.BillingProjects    = new List <DBProjectBillingViewModel>();
                result.CoffeeShops        = new List <CoffeeShopViewModel>();
            }

            //Get Project Movements Values

            if (String.IsNullOrEmpty(result.ProjectKitchen))
            {
                List <MovimentosDeProjeto> KMovements = DBProjectMovements.GetByProjectNo(result.ProjectKitchen);
                result.ProjectKitchenTotalMovs = KMovements.Where(x => x.PreçoTotal.HasValue).Sum(x => x.PreçoTotal.Value);
            }

            if (String.IsNullOrEmpty(result.ProjectSubsidiaries))
            {
                List <MovimentosDeProjeto> SMovements = DBProjectMovements.GetByProjectNo(result.ProjectSubsidiaries);
                result.ProjectSubsidiariesTotalMovs = SMovements.Where(x => x.PreçoTotal.HasValue).Sum(x => x.PreçoTotal.Value);
            }

            if (String.IsNullOrEmpty(result.ProjectWasteFeedstock))
            {
                List <MovimentosDeProjeto> WMovements = DBProjectMovements.GetByProjectNo(result.ProjectWasteFeedstock);
                result.ProjectWasteFeedstockTotalMovs = WMovements.Where(x => x.PreçoTotal.HasValue).Sum(x => x.PreçoTotal.Value);
            }

            return(Json(result));
        }
        public JsonResult GetCoffeeShops()
        {
            var items = DBCoffeeShops.GetAll().ParseToViewModel(config.NAVDatabaseName, config.NAVCompanyName);

            if (items != null)
            {
                //Apply User Dimensions Validations
                List <AcessosDimensões> userDimensions = DBUserDimensions.GetByUserId(User.Identity.Name);
                if (userDimensions.Where(y => y.Dimensão == (int)Dimensions.Region).Count() > 0)
                {
                    items.RemoveAll(x => !userDimensions.Any(y => y.Dimensão == (int)Dimensions.Region && (y.ValorDimensão == x.CodeRegion || string.IsNullOrEmpty(x.CodeRegion))));
                }
                if (userDimensions.Where(y => y.Dimensão == (int)Dimensions.FunctionalArea).Count() > 0)
                {
                    items.RemoveAll(x => !userDimensions.Any(y => y.Dimensão == (int)Dimensions.FunctionalArea && (y.ValorDimensão == x.CodeFunctionalArea || string.IsNullOrEmpty(x.CodeFunctionalArea))));
                }
                if (userDimensions.Where(y => y.Dimensão == (int)Dimensions.ResponsabilityCenter).Count() > 0)
                {
                    items.RemoveAll(x => !userDimensions.Any(y => y.Dimensão == (int)Dimensions.ResponsabilityCenter && (y.ValorDimensão == x.CodeResponsabilityCenter || string.IsNullOrEmpty(x.CodeResponsabilityCenter))));
                }
            }
            return(Json(items));
        }