/// <summary>
        /// Edits the given Generic Report object.
        /// </summary>
        /// <param name="obj">Generic Report object</param>
        /// <returns></returns>
        public ResponseDTO Edit(GenericReportDTO obj)
        {
            try
            {
                if (obj.RecordStatusId == 1)
                {
                    obj.ModifiedDate = DateTime.Now;
                }
                else
                {
                    obj.DeletedDate = DateTime.Now;
                }

                _uow.GenericReportUsers.Delete(x => x.GenericReportId == obj.GenericReportId);

                _uow.GenericReportParameters.Delete(x => x.GenericReportId == obj.GenericReportId);

                if (obj.UserList != null && !obj.IsDefaultReport)
                {
                    foreach (var item in obj.UserList)
                    {
                        _uow.GenericReportUsers.Add(new GenericReportUser
                        {
                            GenericReportId = obj.GenericReportId,
                            UserId          = item
                        });
                    }
                }

                if (obj.GenericReportParameterList != null && obj.GenericReportParameterList.Count > 0)
                {
                    foreach (var item in obj.GenericReportParameterList)
                    {
                        if (!string.IsNullOrEmpty(item.GenericReportParameterName) && !string.IsNullOrEmpty(item.ParameterLabel))
                        {
                            _uow.GenericReportParameters.Add(new GenericReportParameter
                            {
                                GenericReportId            = obj.GenericReportId,
                                GenericReportParameterName = item.GenericReportParameterName,
                                ParameterLabel             = item.ParameterLabel,
                                ParameterType = item.ParameterType,
                            });
                        }
                    }
                }

                var entity = Mapper.MapSingle <GenericReportDTO, GenericReport>(obj);

                var result = _uow.GenericReports.Update(entity);

                bool saveResult = _uow.Commit();

                return(Success(result.GenericReportId));
            }
            catch (Exception ex)
            {
                return(Error(ex));
            }
        }
        public IActionResult GetResultSet([FromBody] GenericReportDTO obj)
        {
            var result = _service.GetResultSet(obj.GenericReportId, obj.UserId, obj.GenericReportParameterList);

            switch (result.ResultMessage)
            {
            case Enums.ResponseMessage.OK: return(StatusCode(StatusCodes.Status200OK, result));

            case Enums.ResponseMessage.WARNING: return(StatusCode(StatusCodes.Status200OK, result));

            default: return(StatusCode(StatusCodes.Status500InternalServerError, result));
            }
        }
        /// <summary>
        /// Add a new Generic Report.
        /// </summary>
        /// <param name="obj">Generic Report object</param>
        /// <returns>ResponseDTO</returns>
        public ResponseDTO Add(GenericReportDTO obj)
        {
            try
            {
                obj.RecordStatusId = 1;
                obj.CreatedDate    = DateTime.Now;
                var entity = Mapper.MapSingle <GenericReportDTO, GenericReport>(obj);

                entity.GenericReportUser = new List <GenericReportUser>();

                if (obj.UserList != null && !obj.IsDefaultReport)
                {
                    foreach (var item in obj.UserList)
                    {
                        entity.GenericReportUser.Add(new GenericReportUser
                        {
                            UserId = item
                        });
                    }
                }

                if (obj.GenericReportParameterList != null && obj.GenericReportParameterList.Count > 0)
                {
                    entity.GenericReportParameter = new List <GenericReportParameter>();

                    foreach (var item in obj.GenericReportParameterList)
                    {
                        entity.GenericReportParameter.Add(new GenericReportParameter
                        {
                            GenericReportParameterName = item.GenericReportParameterName,
                            ParameterLabel             = item.ParameterLabel,
                            ParameterType = item.ParameterType,
                        });
                    }
                }

                var result = _uow.GenericReports.Add(entity);

                bool saveResult = _uow.Commit();

                return(Success(result.GenericReportId));
            }
            catch (Exception ex)
            {
                return(Error(ex));
            }
        }
        public IActionResult Edit([FromBody] GenericReportDTO request)
        {
            var result = _service.Edit(request);

            switch (result.ResultMessage)
            {
            case Enums.ResponseMessage.OK:
                return(StatusCode(StatusCodes.Status200OK, result.Result));

            case Enums.ResponseMessage.ERROR:
                return(StatusCode(StatusCodes.Status500InternalServerError, result.Exception));

            case Enums.ResponseMessage.NOTFOUND:
                return(StatusCode(StatusCodes.Status404NotFound));

            case Enums.ResponseMessage.UNAUTHORIZED:
                return(StatusCode(StatusCodes.Status401Unauthorized));

            default:
                return(StatusCode(StatusCodes.Status404NotFound));
            }
        }
        /// <summary>
        /// Lists the user allowed Generic Reports.
        /// </summary>
        /// <param name="id">UserId</param>
        /// <returns>ResponseDTO</returns>
        public ResponseDTO List(int id)
        {
            try
            {
                var entities = _uow.GenericReports.Set()
                               .Include(x => x.RecordStatus)
                               .Where(x => x.GenericReportUser.Any(y => y.UserId == id) || x.IsDefaultReport)
                               .ToList();

                if (entities.Count == 0)
                {
                    return(NotFound());
                }

                var target = new List <GenericReportDTO>();

                foreach (var item in entities)
                {
                    var obj = new GenericReportDTO
                    {
                        GenericReportId   = item.GenericReportId,
                        GenericReportName = item.GenericReportName,
                        RecordStatusName  = item.RecordStatus.RecordStatusName,
                        CreatedDate       = item.CreatedDate,
                        IsDefaultReport   = item.IsDefaultReport,
                    };

                    target.Add(obj);
                }

                return(Success(target));
            }
            catch (Exception ex)
            {
                return(Error(ex));
            }
        }