def survey_retry(self, survey_token, answer_token, **post): """ This route is called whenever the user has attempts left and hits the 'Retry' button after failing the survey.""" access_data = self._get_access_data(survey_token, answer_token, ensure_token=True) if access_data['validity_code'] is not True: return self._redirect_with_error(access_data, access_data['validity_code']) survey_sudo, answer_sudo = access_data['survey_sudo'], access_data[ 'answer_sudo'] if not answer_sudo: # attempts to 'retry' without having tried first return request.redirect("/") try: retry_answer_sudo = survey_sudo._create_answer( user=request.env.user, partner=answer_sudo.partner_id, email=answer_sudo.email, invite_token=answer_sudo.invite_token, test_entry=answer_sudo.test_entry, **self._prepare_retry_additional_values(answer_sudo)) except: return request.redirect("/") return request.redirect( '/survey/start/%s?%s' % (survey_sudo.access_token, keep_query('*', answer_token=retry_answer_sudo.access_token)))
def survey_retry(self, survey_token, answer_token, **post): """ This route is called whenever the user has attempts left and hits the 'Retry' button after failing the survey.""" access_data = self._get_access_data(survey_token, answer_token, ensure_token=True) if access_data['validity_code'] is not True and access_data[ 'validity_code'] != 'answer_done': return self._redirect_with_error(access_data, access_data['validity_code']) survey_sudo, answer_sudo = access_data['survey_sudo'], access_data[ 'answer_sudo'] if not answer_sudo: # attempts to 'retry' without having tried first return werkzeug.utils.redirect("/") try: retry_answer_sudo = survey_sudo._create_answer( user=request.env.user, partner=answer_sudo.partner_id, email=answer_sudo.email, invite_token=answer_sudo.invite_token, **{ 'input_type': answer_sudo.input_type, 'deadline': answer_sudo.deadline, }) except: return werkzeug.utils.redirect("/") return request.redirect( '/survey/start/%s?%s' % (survey_sudo.access_token, keep_query('*', answer_token=retry_answer_sudo.token)))
def survey_test(self, survey_token, **kwargs): """ Test mode for surveys: create a test answer, only for managers or officers testing their surveys """ survey_sudo, dummy = self._fetch_from_access_token(survey_token, False) try: answer_sudo = survey_sudo._create_answer(user=request.env.user, test_entry=True) except: return werkzeug.utils.redirect('/') return request.redirect('/survey/start/%s?%s' % (survey_sudo.access_token, keep_query('*', answer_token=answer_sudo.access_token)))
def survey_test(self, survey_token, **kwargs): """ Test mode for surveys: create a test answer, only for managers or officers testing their surveys """ survey_sudo, dummy = self._fetch_from_access_token(survey_token, False) try: answer_sudo = survey_sudo._create_answer(user=request.env.user, test_entry=True) except: return werkzeug.utils.redirect('/') return request.redirect('/survey/start/%s?%s' % (survey_sudo.access_token, keep_query('*', answer_token=answer_sudo.token)))
def survey_test(self, survey_id, token=None, **kwargs): """ Test mode for surveys: create a test answer, only for managers or officers testing their surveys """ survey_sudo = request.env['survey.survey'].sudo().browse(survey_id) try: answer_sudo = survey_sudo._create_answer(user=request.env.user, test_entry=True) except: return werkzeug.utils.redirect('/') return request.redirect('/survey/start/%s?%s' % (survey_sudo.id, keep_query('*', token=answer_sudo.token)))
def survey_test(self, survey_id, token=None, **kwargs): """ Test mode for surveys: create a test answer, only for managers or officers testing their surveys """ survey_sudo = request.env['survey.survey'].sudo().browse(survey_id) try: answer_sudo = survey_sudo._create_answer(user=request.env.user, test_entry=True) except: return werkzeug.utils.redirect('/') return request.redirect( '/survey/start/%s?%s' % (survey_sudo.id, keep_query('*', token=answer_sudo.token)))
def survey_retry(self, survey_token, answer_token, **post): """ This route is called whenever the user has attempts left and hits the 'Retry' button after failing the survey.""" access_data = self._get_access_data(survey_token, answer_token, ensure_token=True) if access_data['validity_code'] is not True and access_data['validity_code'] != 'answer_done': return self._redirect_with_error(access_data, access_data['validity_code']) survey_sudo, answer_sudo = access_data['survey_sudo'], access_data['answer_sudo'] if not answer_sudo: # attempts to 'retry' without having tried first return werkzeug.utils.redirect("/") try: retry_answer_sudo = survey_sudo._create_answer(user=request.env.user, partner=answer_sudo.partner_id, email=answer_sudo.email, invite_token=answer_sudo.invite_token, **{ 'input_type': answer_sudo.input_type, 'deadline': answer_sudo.deadline, }) except: return werkzeug.utils.redirect("/") return request.redirect('/survey/start/%s?%s' % (survey_sudo.access_token, keep_query('*', answer_token=retry_answer_sudo.token)))
def _get_action_download(self): if not self.zip_file: return {} url_base = "web/content" url_data = { 'model': self._name, 'id': self.id, 'filename_field': 'zip_name', 'field': 'zip_file', 'download': 'true', 'filename': self.zip_name, } action = { 'name': 'Download attachment ZIP', 'type': 'ir.actions.act_url', 'url': "%s/?%s" % (url_base, keep_query(**url_data)), 'target': 'self', 'data': url_data, } return action
def _get_action_download(self): if not self.csv_file: return {} url_base = "web/content" url_data = { 'model': self._name, 'id': self.id, 'filename_field': 'csv_filename', 'field': 'csv_file', 'download': 'true', 'filename': self.csv_filename, } action = { 'name': 'Download csv report for stock valuation layer', 'type': 'ir.actions.act_url', 'url': "%s/?%s" % (url_base, keep_query(**url_data)), 'target': 'self', 'data': url_data, } return action
def pager(self, total, page=1, step=10, scope=5, base_url='', url_getter=None): """Custom pager implementation.""" # Compute Pager page_count = int(math.ceil(float(total) / step)) page = max(1, min(int(page if str(page).isdigit() else 1), page_count)) scope -= 1 pmin = max(page - int(math.floor(scope / 2)), 1) pmax = min(pmin + scope, page_count) if pmax - pmin < scope: pmin = pmax - scope if pmax - scope > 0 else 1 if not base_url: # default to current page url, and drop /listing path if any base_url = request.httprequest.path.split('/page')[0] qstring = keep_query() def get_url(page_nr): if page_nr <= 1: _url = base_url else: _url = "{}/page/{}".format(base_url, page_nr) if qstring: _url += '?' + qstring return _url if url_getter is None: url_getter = get_url page_prev = max(pmin, page - 1) page_next = min(pmax, page + 1) prev_url = url_getter(page_prev) next_url = url_getter(page_next) last_url = url_getter(pmax) paginated = AttrDict({ "items_count": total, "need_nav": page_count > 1, "page_count": page_count, "has_prev": page > pmin, "has_next": page < pmax, "current": AttrDict({ 'url': url_getter(page), 'num': page, }), "page_prev": AttrDict({ 'url': prev_url, 'num': page_prev, }), "page_next": AttrDict({ 'url': next_url, 'num': page_next, }), "page_last": AttrDict({ 'url': last_url, 'num': pmax, }), "pages": [ AttrDict({ 'url': url_getter(i), 'num': i }) for i in xrange(pmin, pmax + 1) ] }) return paginated