public OperationResult <PaginatedList <Complaints> > GetComplaintsList(string api_account, long timeStamp, string sign, string token, int pi, int ps)
        {
            if (string.IsNullOrWhiteSpace(token))
            {
                return(new OperationResult <PaginatedList <Complaints> >(OperationCode.Error_Param_Empty));
            }

            if (!_parameterValidateService.CheckTimestamp(timeStamp))
            {
                return(new OperationResult <PaginatedList <Complaints> >(OperationCode.Error_TimeStamp));
            }

            if (!TokenHelper.CheckToken(token))
            {
                return(new OperationResult <PaginatedList <Complaints> >(OperationCode.Error_TokenExpiration));
            }

            var apiAccount = _apiRepository.GetSingleByAccount(api_account);

            if (apiAccount == null)
            {
                return(new OperationResult <PaginatedList <Complaints> >(OperationCode.Error_ApiAccountNotExist));
            }

            if (!checkSignForGetComplaintsList(api_account, timeStamp, sign, token, pi, ps, apiAccount.Api_SecretKey))
            {
                return(new OperationResult <PaginatedList <Complaints> >(OperationCode.Error_Sign));
            }

            var theToken     = TokenHelper.GetToken(token);
            var theCompanyId = new Guid(apiAccount.CompanyId);
            var user         = _userRepository.GetSingleByKey(theToken.UserId);

            if (user == null)
            {
                return(new OperationResult <PaginatedList <Complaints> >(OperationCode.Error_UserNotExist));
            }

            IList <Complaints> complaints = null;
            int t = 0;

            if (theToken.UserTypes.Contains("customer"))
            {
                complaints = QueryForCreator(null, user.USERNAME, pi, ps, out t);
            }
            else if (theToken.UserTypes.Contains("installer"))
            {
                complaints = _repository.QueryComplaintsForInstaller(null, user.USERNAME, user.LICNO, pi, ps, out t);
            }

            if (t > 0)
            {
                foreach (var itm in complaints)
                {
                    itm.StrStatus         = GetComplaintsStatus(itm.Status);
                    itm.StrComplaintsType = GetComplaintType(itm.ComplaintsType);
                }
            }

            PaginatedList <Complaints> result = new PaginatedList <Complaints>(pi, ps, t, complaints);

            return(new OperationResult <PaginatedList <Complaints> >(OperationCode.Success, result));
        }