private bool DataPointConfigurationAlreadyExists(NewDataPointConfiguration newDataPointConfiguration)
        {
            var dataPointConfiguration = Context.DataPointConfigurations.Where(x => x.OfficeId == newDataPointConfiguration.OfficeId &&
                                                                               x.ProgramId == newDataPointConfiguration.ProgramId &&
                                                                               x.ProjectId == newDataPointConfiguration.ProjectId &&
                                                                               x.DataPointCategoryPropertyId == newDataPointConfiguration.DataPointCategoryPropertyId
                                                                               ).FirstOrDefault();

            return(dataPointConfiguration != null);
        }
        private DataPointConfiguration DoCreate(NewDataPointConfiguration newDataPointConfiguration)
        {
            var dataPointConfiguration = new DataPointConfiguration
            {
                OfficeId  = newDataPointConfiguration.OfficeId,
                ProgramId = newDataPointConfiguration.ProgramId,
                ProjectId = newDataPointConfiguration.ProjectId,
                DataPointCategoryPropertyId = newDataPointConfiguration.DataPointCategoryPropertyId
            };

            this.Context.DataPointConfigurations.Add(dataPointConfiguration);
            return(dataPointConfiguration);
        }
        private bool ModelHasOneResourceId(NewDataPointConfiguration newDataPointConfiguration)
        {
            var hasOneId = false;

            if ((newDataPointConfiguration.OfficeId != null && newDataPointConfiguration.ProgramId == null && newDataPointConfiguration.ProjectId == null) ||
                (newDataPointConfiguration.OfficeId == null && newDataPointConfiguration.ProgramId != null && newDataPointConfiguration.ProjectId == null) ||
                (newDataPointConfiguration.OfficeId == null && newDataPointConfiguration.ProgramId == null && newDataPointConfiguration.ProjectId != null))
            {
                hasOneId = true;
            }

            return(hasOneId);
        }
        private async Task <bool> ResourceExists(NewDataPointConfiguration newDataPointConfiguration)
        {
            Object resource = null;

            if (newDataPointConfiguration.OfficeId != null)
            {
                resource = await Context.Organizations.FindAsync(newDataPointConfiguration.OfficeId);
            }
            else if (newDataPointConfiguration.ProgramId != null)
            {
                resource = await Context.Programs.FindAsync(newDataPointConfiguration.ProgramId);
            }
            else if (newDataPointConfiguration.ProjectId != null)
            {
                resource = await Context.Projects.FindAsync(newDataPointConfiguration.ProjectId);
            }

            return(resource != null);
        }
        /// <summary>
        /// Create a data point configuration
        /// </summary>
        /// <param name="newDataPointConfiguration">Data point configuration to create</param>
        /// <returns>Data point configuration created</returns>
        public async Task <DataPointConfiguration> CreateDataPointConfigurationAsync(NewDataPointConfiguration newDataPointConfiguration)
        {
            var modelHasOneResouceId = ModelHasOneResourceId(newDataPointConfiguration);

            if (!modelHasOneResouceId)
            {
                throw new EcaBusinessException(MODEL_HAS_LESS_THAN_OR_MORE_THAN_ONE_RESOURCE_ID_ERROR);
            }
            var dataPointConfigurationAlreadyExists = DataPointConfigurationAlreadyExists(newDataPointConfiguration);

            if (dataPointConfigurationAlreadyExists)
            {
                throw new EcaBusinessException(DATA_POINT_CONFIGURATION_ALREADY_EXISTS_ERROR);
            }
            var resourceExists = await ResourceExists(newDataPointConfiguration);

            if (!resourceExists)
            {
                throw new EcaBusinessException(RESOURCE_DOES_NOT_EXIST_ERROR);
            }
            var dataPointConfiguration = DoCreate(newDataPointConfiguration);

            return(dataPointConfiguration);
        }