public async Task <ApiResponse <AppVariablesGetDto> > CreateVariables(AppVariablesCreateDto dto)
        {
            AppVariablesGetDto resultDto = new AppVariablesGetDto();

            Metadata metadata = new Metadata
            {
                IsValid = true,
                Message = ""
            };

            ApiResponse <AppVariablesGetDto> response = new ApiResponse <AppVariablesGetDto>(resultDto);

            try
            {
                AppRecipes recipes = await _unitOfWork.AppRecipesRepository.GetRecipesByVariableCode(dto.Code);

                if (recipes != null)
                {
                    metadata.IsValid = false;

                    metadata.Message = "El Codigo de Variable ya existe en la formulacion!!!";

                    response.Meta = metadata;
                    response.Data = resultDto;

                    return(response);
                }


                AppVariables appVariables = _mapper.Map <AppVariables>(dto);

                appVariables.TipoVariable = 1;
                appVariables.UserCreate   = dto.UsuarioConectado;
                appVariables.CreatedAt    = DateTime.Now;
                AppVariables appVariablesInserted = await Insert(appVariables);

                resultDto        = _mapper.Map <AppVariablesGetDto>(appVariablesInserted);
                metadata.IsValid = true;
                metadata.Message = $"Variable Creada Satisfactoriamente!";

                response.Meta = metadata;
                response.Data = resultDto;

                return(response);
            }
            catch (Exception ex)
            {
                metadata.IsValid = false;

                metadata.Message = ex.InnerException.Message;

                response.Meta = metadata;
                response.Data = resultDto;

                return(response);
            }
        }
        public async Task <List <AppRecipesGetDto> > GetRecipesGetDtoByProductId(AppRecipesQueryFilter filter)
        {
            List <AppRecipesGetDto> resultDto = new List <AppRecipesGetDto>();

            var recipes = await GetAllRecipesByProductId(filter.AppproductsId);

            if (recipes != null)
            {
                if (filter.SearchText != "" && filter.SearchText != null)
                {
                    recipes = recipes.Where(x => x.Description.Trim().ToLower().Contains(filter.SearchText.Trim().ToLower()) || x.Code.Trim().ToLower().Contains(filter.SearchText.Trim().ToLower()) || x.Formula.Trim().ToLower().Contains(filter.SearchText.Trim().ToLower())).ToList();
                }


                List <AppRecipesGetDto> recipesDto = _mapper.Map <List <AppRecipesGetDto> >(recipes);

                foreach (var item in recipesDto)
                {
                    AppProducts appProductsFind = await _appProductsService.GetById((int)item.AppproductsId);

                    if (appProductsFind != null)
                    {
                        AppProductsGetDto appProductsGetDto = _mapper.Map <AppProductsGetDto>(appProductsFind);
                        item.AppProductsGetDto = appProductsGetDto;
                    }
                    AppVariables appVariablesFind = await _appVariablesService.GetById((int)item.AppVariableId);

                    if (appVariablesFind != null)
                    {
                        AppVariablesGetDto appVariablesGetDto = _mapper.Map <AppVariablesGetDto>(appVariablesFind);
                        item.AppVariablesGetDto = appVariablesGetDto;
                    }
                    if (item.AppIngredientsId != null)
                    {
                        AppIngredients appIngredientsFind = await _unitOfWork.AppIngredientsRepository.GetById((int)item.AppIngredientsId);

                        if (appIngredientsFind != null)
                        {
                            AppIngredientsGetDto appIngredientsGetDto = _mapper.Map <AppIngredientsGetDto>(appIngredientsFind);
                            item.AppIngredientsGetDto = appIngredientsGetDto;
                        }
                    }
                }



                resultDto = recipesDto;
            }

            return(resultDto);
        }
        public async Task <ApiResponse <AppTemplateConversionUnitGenericGetDto> > CreateAppTemplateConversionUnit(AppTemplateConversionUnitCreateDto dto)
        {
            AppTemplateConversionUnitGenericGetDto resultDto = new AppTemplateConversionUnitGenericGetDto();

            Metadata metadata = new Metadata
            {
                IsValid = true,
                Message = ""
            };

            ApiResponse <AppTemplateConversionUnitGenericGetDto> response = new ApiResponse <AppTemplateConversionUnitGenericGetDto>(resultDto);


            try
            {
                AppVariables AppVariablesFind = await _appVariablesService.GetById(dto.AppVariableId);

                if (AppVariablesFind == null)
                {
                    metadata.IsValid = false;
                    metadata.Message = "Variable no existe";
                    response.Data    = resultDto;
                    response.Meta    = metadata;
                    return(response);
                }


                AppUnits appUnitIdSinceFind = await _appUnitsService.GetById(dto.AppUnitIdSince);

                if (appUnitIdSinceFind == null)
                {
                    metadata.IsValid = false;
                    metadata.Message = "Unidad de Medida desde no existe!!";
                    response.Data    = resultDto;
                    response.Meta    = metadata;
                    return(response);
                }

                AppUnits appUnitIdUntilFind = await _appUnitsService.GetById(dto.AppUnitIdUntil);

                if (appUnitIdUntilFind == null)
                {
                    metadata.IsValid = false;
                    metadata.Message = "Unidad de Medida hasta no existe!!";
                    response.Data    = resultDto;
                    response.Meta    = metadata;
                    return(response);
                }


                AppTemplateConversionUnit template = new AppTemplateConversionUnit();

                template.AppVariableId = dto.AppVariableId;


                template.Code           = AppVariablesFind.Code;
                template.Description    = AppVariablesFind.Description;
                template.Formula        = dto.Formula;
                template.Value          = dto.Value;
                template.SumValue       = dto.SumValue;
                template.OrderCalculate = dto.OrderCalculate;
                template.AppUnitIdSince = dto.AppUnitIdSince;
                template.AppUnitIdUntil = dto.AppUnitIdUntil;



                var inserted = await Insert(template);

                resultDto = _mapper.Map <AppTemplateConversionUnitGenericGetDto>(inserted);

                if (appUnitIdSinceFind != null)
                {
                    AppUnitsGetDto appUnitsGetDto = _mapper.Map <AppUnitsGetDto>(appUnitIdSinceFind);
                    resultDto.AppUnitIdSinceGetDto = appUnitsGetDto;
                }

                if (appUnitIdUntilFind != null)
                {
                    AppUnitsGetDto appUnitsGetDto = _mapper.Map <AppUnitsGetDto>(appUnitIdUntilFind);
                    resultDto.AppUnitIdUntilGetDto = appUnitsGetDto;
                }
                if (AppVariablesFind != null)
                {
                    AppVariablesGetDto appVariablesGetDto = _mapper.Map <AppVariablesGetDto>(AppVariablesFind);
                    resultDto.AppVariablesGetDto = appVariablesGetDto;
                }


                response.Data = resultDto;
                response.Meta = metadata;
                return(response);
            }
            catch (Exception ex)
            {
                metadata.IsValid = false;
                metadata.Message = ex.InnerException.Message;
                response.Data    = null;
                response.Meta    = metadata;
                return(response);
            }
        }
        public async Task <ApiResponse <AppVariablesGetDto> > UpdateVariables(AppVariablesUpdateDto dto)
        {
            AppVariablesGetDto resultDto = new AppVariablesGetDto();

            Metadata metadata = new Metadata
            {
                IsValid = true,
                Message = ""
            };

            ApiResponse <AppVariablesGetDto> response = new ApiResponse <AppVariablesGetDto>(resultDto);

            try
            {
                AppVariables variable = await GetById(dto.Id);

                if (variable == null)
                {
                    metadata.IsValid = false;

                    metadata.Message = "Variable No existe!!!";

                    response.Meta = metadata;
                    response.Data = resultDto;

                    return(response);
                }
                if (variable.Code != dto.Code)
                {
                    AppRecipes recipes = await _unitOfWork.AppRecipesRepository.GetRecipesByVariableCode(variable.Code);

                    if (recipes != null)
                    {
                        metadata.IsValid = false;

                        metadata.Message = "Variable existe en la formulacion!!!";

                        response.Meta = metadata;
                        response.Data = resultDto;

                        return(response);
                    }
                }



                variable.Description    = dto.Description;
                variable.Code           = dto.Code;
                variable.TipoVariable   = 1;
                variable.UserUpdate     =
                    variable.UserUpdate = dto.UsuarioConectado;
                variable.UpdatedAt      = DateTime.Now;

                AppVariables appVariablesUpdated = await Update(variable);

                resultDto        = _mapper.Map <AppVariablesGetDto>(appVariablesUpdated);
                metadata.IsValid = true;
                metadata.Message = $"Variable Actualizada Satisfactoriamente!";

                response.Meta = metadata;
                response.Data = resultDto;

                return(response);
            }
            catch (Exception ex)
            {
                metadata.IsValid = false;

                metadata.Message = ex.InnerException.Message;

                response.Meta = metadata;
                response.Data = resultDto;

                return(response);
            }
        }
        public async Task <ApiResponse <List <AppTemplateConversionUnitGenericGetDto> > > GetAllTemplateByUnitsInput(AppTemplateConversionUnitQueryFilter filter)
        {
            Metadata metadata = new Metadata
            {
                IsValid = true,
                Message = ""
            };

            List <AppTemplateConversionUnitGenericGetDto> resultDto = new List <AppTemplateConversionUnitGenericGetDto>();
            ApiResponse <List <AppTemplateConversionUnitGenericGetDto> > response = new ApiResponse <List <AppTemplateConversionUnitGenericGetDto> >(resultDto);

            try
            {
                var template = await _unitOfWork.AppTemplateConversionUnitRepository.GetAllTemplateByUnitsInput(filter.AppUnitIdSince, filter.AppUnitIdUntil);

                template  = template.OrderBy(x => x.OrderCalculate).ToList();
                resultDto = _mapper.Map <List <AppTemplateConversionUnitGenericGetDto> >(template);



                foreach (var item in resultDto)
                {
                    AppUnits AppUnitsFind = await _appUnitsService.GetById(item.AppUnitIdSince);

                    if (AppUnitsFind != null)
                    {
                        AppUnitsGetDto appUnitsGetDto = _mapper.Map <AppUnitsGetDto>(AppUnitsFind);
                        item.AppUnitIdSinceGetDto = appUnitsGetDto;
                    }
                    AppUnitsFind = await _appUnitsService.GetById(item.AppUnitIdUntil);

                    if (AppUnitsFind != null)
                    {
                        AppUnitsGetDto appUnitsGetDto = _mapper.Map <AppUnitsGetDto>(AppUnitsFind);
                        item.AppUnitIdUntilGetDto = appUnitsGetDto;
                    }


                    AppVariables AppVariablesFind = await _appVariablesService.GetById(item.AppVariableId);

                    if (AppVariablesFind != null)
                    {
                        AppVariablesGetDto appVariablesGetDto = _mapper.Map <AppVariablesGetDto>(AppVariablesFind);
                        item.AppVariablesGetDto = appVariablesGetDto;
                    }
                }



                response.Meta = metadata;
                response.Data = resultDto;
                return(response);
            }
            catch (Exception ex)
            {
                metadata.IsValid = false;
                metadata.Message = ex.InnerException.Message;
                response.Meta    = metadata;
                response.Data    = null;
                return(response);
            }
        }