mirror of
https://github.com/pretix/pretix.git
synced 2026-01-10 22:22:26 +00:00
Compare commits
30 Commits
mail-place
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5af7e1b6d6 | ||
|
|
9222ce0ecd | ||
|
|
8afb0e43e0 | ||
|
|
c65fecf45e | ||
|
|
1c684d62d4 | ||
|
|
48809dc477 | ||
|
|
71df116079 | ||
|
|
ad64f6e88b | ||
|
|
891ba9d99c | ||
|
|
5cd1476a07 | ||
|
|
cb393a0b31 | ||
|
|
af59a89ecb | ||
|
|
1eb0008da9 | ||
|
|
d6489c6dd8 | ||
|
|
abe6acc9d8 | ||
|
|
2dcbb791f0 | ||
|
|
2efc40e20b | ||
|
|
0693681473 | ||
|
|
3aabc8a163 | ||
|
|
062f8fa409 | ||
|
|
106339c928 | ||
|
|
222ea08dd0 | ||
|
|
62bc16f963 | ||
|
|
3332fc818a | ||
|
|
d87dbaf9e5 | ||
|
|
67580c4ca5 | ||
|
|
c5b32484b1 | ||
|
|
b5560509ad | ||
|
|
c78365ce43 | ||
|
|
8cc12fa1c7 |
4
.github/workflows/docs.yml
vendored
4
.github/workflows/docs.yml
vendored
@@ -26,10 +26,10 @@ jobs:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python 3.11
|
||||
- name: Set up Python 3.13
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: 3.11
|
||||
python-version: 3.13
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
|
||||
6
.github/workflows/tests.yml
vendored
6
.github/workflows/tests.yml
vendored
@@ -23,13 +23,13 @@ jobs:
|
||||
name: Tests
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: ["3.9", "3.10", "3.11"]
|
||||
python-version: ["3.10", "3.11", "3.13"]
|
||||
database: [sqlite, postgres]
|
||||
exclude:
|
||||
- database: sqlite
|
||||
python-version: "3.9"
|
||||
- database: sqlite
|
||||
python-version: "3.10"
|
||||
- database: sqlite
|
||||
python-version: "3.11"
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:15
|
||||
|
||||
174
doc/_themes/pretix_theme/layout.html
vendored
174
doc/_themes/pretix_theme/layout.html
vendored
@@ -6,10 +6,14 @@
|
||||
{%- else %}
|
||||
{%- set titlesuffix = "" %}
|
||||
{%- endif %}
|
||||
{%- set lang_attr = 'en' if language == None else (language | replace('_', '-')) %}
|
||||
|
||||
{# Build sphinx_version_info tuple from sphinx_version string in pure Jinja #}
|
||||
{%- set (_ver_major, _ver_minor) = (sphinx_version.split('.') | list)[:2] | map('int') -%}
|
||||
{%- set sphinx_version_info = (_ver_major, _ver_minor, -1) -%}
|
||||
|
||||
<!DOCTYPE html>
|
||||
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||
<html class="writer-html5" lang="{{ lang_attr }}"{% if sphinx_version_info >= (7, 2) %} data-content_root="{{ content_root }}"{% endif %}>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
{{ metatags }}
|
||||
@@ -18,59 +22,50 @@
|
||||
<title>{{ title|striptags|e }}{{ titlesuffix }}</title>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{#- CSS #}
|
||||
{%- for css in css_files %}
|
||||
{%- if css|attr("rel") %}
|
||||
<link rel="{{ css.rel }}" href="{{ pathto(css.filename, 1) }}" type="text/css"{% if css.title is not none %} title="{{ css.title }}"{% endif %} />
|
||||
{#- CSS #}
|
||||
{%- for css_file in css_files %}
|
||||
{%- if css_file|attr("filename") %}
|
||||
{{ css_tag(css_file) }}
|
||||
{%- else %}
|
||||
<link rel="stylesheet" href="{{ pathto(css, 1) }}" type="text/css" />
|
||||
<link rel="stylesheet" href="{{ pathto(css_file, 1)|escape }}" type="text/css" />
|
||||
{%- endif %}
|
||||
{%- endfor %}
|
||||
{%- endfor %}
|
||||
|
||||
{%- for cssfile in extra_css_files %}
|
||||
<link rel="stylesheet" href="{{ pathto(cssfile, 1) }}" type="text/css" />
|
||||
{%- endfor -%}
|
||||
{#- FAVICON #}
|
||||
{%- if favicon_url %}
|
||||
<link rel="shortcut icon" href="{{ favicon_url }}"/>
|
||||
{%- endif %}
|
||||
|
||||
{#- FAVICON
|
||||
favicon_url is the only context var necessary since Sphinx 4.
|
||||
In Sphinx<4, we use favicon but need to prepend path info.
|
||||
#}
|
||||
{%- set _favicon_url = favicon_url | default(pathto('_static/' + (favicon or ""), 1)) %}
|
||||
{%- if favicon_url or favicon %}
|
||||
<link rel="shortcut icon" href="{{ _favicon_url }}"/>
|
||||
{%- endif %}
|
||||
|
||||
{#- CANONICAL URL (deprecated) #}
|
||||
{%- if theme_canonical_url and not pageurl %}
|
||||
{#- CANONICAL URL (deprecated) #}
|
||||
{%- if theme_canonical_url and not pageurl %}
|
||||
<link rel="canonical" href="{{ theme_canonical_url }}{{ pagename }}.html"/>
|
||||
{%- endif -%}
|
||||
{%- endif -%}
|
||||
|
||||
{#- CANONICAL URL #}
|
||||
{%- if pageurl %}
|
||||
{#- CANONICAL URL #}
|
||||
{%- if pageurl %}
|
||||
<link rel="canonical" href="{{ pageurl|e }}" />
|
||||
{%- endif -%}
|
||||
{%- endif -%}
|
||||
|
||||
{#- JAVASCRIPTS #}
|
||||
{%- block scripts %}
|
||||
<!--[if lt IE 9]>
|
||||
<script src="{{ pathto('_static/js/html5shiv.min.js', 1) }}"></script>
|
||||
<![endif]-->
|
||||
{%- if not embedded %}
|
||||
{# XXX Sphinx 1.8.0 made this an external js-file, quick fix until we refactor the template to inherert more blocks directly from sphinx #}
|
||||
{%- for scriptfile in script_files %}
|
||||
{{ js_tag(scriptfile) }}
|
||||
{%- endfor %}
|
||||
{#- JAVASCRIPTS #}
|
||||
{%- block scripts %}
|
||||
{%- if not embedded %}
|
||||
{%- for scriptfile in script_files %}
|
||||
{{ js_tag(scriptfile) }}
|
||||
{%- endfor %}
|
||||
<script src="{{ pathto('_static/js/theme.js', 1) }}"></script>
|
||||
|
||||
{%- if READTHEDOCS or DEBUG %}
|
||||
<script src="{{ pathto('_static/js/versions.js', 1) }}"></script>
|
||||
{%- endif %}
|
||||
|
||||
{#- OPENSEARCH #}
|
||||
{%- if use_opensearch %}
|
||||
<link rel="search" type="application/opensearchdescription+xml"
|
||||
title="{% trans docstitle=docstitle|e %}Search within {{ docstitle }}{% endtrans %}"
|
||||
href="{{ pathto('_static/opensearch.xml', 1) }}"/>
|
||||
{%- endif %}
|
||||
{%- endif %}
|
||||
{%- endblock %}
|
||||
{%- endif %}
|
||||
{%- endblock %}
|
||||
|
||||
{%- block linktags %}
|
||||
{%- if hasdoc('about') %}
|
||||
@@ -123,23 +118,23 @@
|
||||
{% endblock %}
|
||||
</div>
|
||||
|
||||
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||
{% block menu %}
|
||||
{#
|
||||
The singlehtml builder doesn't handle this toctree call when the
|
||||
toctree is empty. Skip building this for now.
|
||||
#}
|
||||
{% if 'singlehtml' not in builder %}
|
||||
{% set global_toc = toctree(maxdepth=theme_navigation_depth|int, collapse=theme_collapse_navigation, includehidden=True) %}
|
||||
{% endif %}
|
||||
{% if global_toc %}
|
||||
{{ global_toc }}
|
||||
{% else %}
|
||||
{%- block navigation %}
|
||||
{#- Translators: This is an ARIA section label for the main navigation menu -#}
|
||||
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="{{ _('Navigation menu') }}">
|
||||
{%- block menu %}
|
||||
{%- set toctree = toctree(maxdepth=theme_navigation_depth|int,
|
||||
collapse=theme_collapse_navigation|tobool,
|
||||
includehidden=theme_includehidden|tobool,
|
||||
titles_only=theme_titles_only|tobool) %}
|
||||
{%- if toctree %}
|
||||
{{ toctree }}
|
||||
{%- else %}
|
||||
<!-- Local TOC -->
|
||||
<div class="local-toc">{{ toc }}</div>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
{%- endif %}
|
||||
{%- endblock %}
|
||||
</div>
|
||||
{%- endblock %}
|
||||
|
||||
{% if theme_display_version %}
|
||||
{%- set nav_version = version %}
|
||||
@@ -158,53 +153,42 @@
|
||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||
|
||||
{# MOBILE NAV, TRIGGLES SIDE NAV ON TOGGLE #}
|
||||
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
|
||||
{% block mobile_nav %}
|
||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||
<a href="{{ pathto('index') }}">{{ project }}</a>
|
||||
{% endblock %}
|
||||
</nav>
|
||||
<nav class="wy-nav-top" aria-label="{{ _('Mobile navigation menu') }}" {% if theme_style_nav_header_background %} style="background: {{theme_style_nav_header_background}}" {% endif %}>
|
||||
{%- block mobile_nav %}
|
||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||
<a href="{{ pathto(master_doc) }}">{{ project }}</a>
|
||||
{%- endblock %}
|
||||
</nav>
|
||||
|
||||
|
||||
{# PAGE CONTENT #}
|
||||
<div class="wy-nav-content">
|
||||
<div class="rst-content">
|
||||
{% include "breadcrumbs.html" %}
|
||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||
<div itemprop="articleBody" class="section">
|
||||
{% block body %}{% endblock %}
|
||||
</div>
|
||||
<div class="articleComments">
|
||||
{% block comments %}{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
{% include "footer.html" %}
|
||||
<div class="wy-nav-content">
|
||||
{%- block content %}
|
||||
{%- if theme_style_external_links|tobool %}
|
||||
<div class="rst-content style-external-links">
|
||||
{%- else %}
|
||||
<div class="rst-content">
|
||||
{%- endif %}
|
||||
{% include "breadcrumbs.html" %}
|
||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||
{%- block document %}
|
||||
<div itemprop="articleBody">
|
||||
{% block body %}{% endblock %}
|
||||
</div>
|
||||
{%- if self.comments()|trim %}
|
||||
<div class="articleComments">
|
||||
{%- block comments %}{% endblock %}
|
||||
</div>
|
||||
{%- endif%}
|
||||
</div>
|
||||
{%- endblock %}
|
||||
{% include "footer.html" %}
|
||||
</div>
|
||||
{%- endblock %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
|
||||
</div>
|
||||
{% include "versions.html" %}
|
||||
|
||||
{% if not embedded %}
|
||||
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT:'{{ url_root }}',
|
||||
VERSION:'{{ release|e }}',
|
||||
COLLAPSE_INDEX:false,
|
||||
FILE_SUFFIX:'{{ '' if no_search_suffix else file_suffix }}',
|
||||
HAS_SOURCE: {{ has_source|lower }},
|
||||
SOURCELINK_SUFFIX: '{{ sourcelink_suffix }}'
|
||||
};
|
||||
</script>
|
||||
{%- for scriptfile in script_files %}
|
||||
<script type="text/javascript" src="{{ pathto(scriptfile, 1) }}"></script>
|
||||
{%- endfor %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
{# RTD hosts this file, so just load on non RTD builds #}
|
||||
{% if not READTHEDOCS %}
|
||||
<script type="text/javascript" src="{{ pathto('_static/js/theme.js', 1) }}"></script>
|
||||
@@ -214,7 +198,7 @@
|
||||
{% if theme_sticky_navigation %}
|
||||
<script type="text/javascript">
|
||||
jQuery(function () {
|
||||
SphinxRtdTheme.StickyNav.enable();
|
||||
SphinxRtdTheme.Navigation.enable({{ 'true' if theme_sticky_navigation|tobool else 'false' }});
|
||||
});
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
350
doc/_themes/pretix_theme/layout_old.html
vendored
350
doc/_themes/pretix_theme/layout_old.html
vendored
@@ -1,136 +1,86 @@
|
||||
{#
|
||||
basic/layout.html
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
Master layout template for Sphinx themes.
|
||||
|
||||
:copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS.
|
||||
:license: BSD, see LICENSE for details.
|
||||
#}
|
||||
{%- block doctype -%}
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
{%- endblock %}
|
||||
{%- set reldelim1 = reldelim1 is not defined and ' »' or reldelim1 %}
|
||||
{%- set reldelim2 = reldelim2 is not defined and ' |' or reldelim2 %}
|
||||
{%- set render_sidebar = (not embedded) and (not theme_nosidebar|tobool) and
|
||||
(sidebars != []) %}
|
||||
{# TEMPLATE VAR SETTINGS #}
|
||||
{%- set url_root = pathto('', 1) %}
|
||||
{# XXX necessary? #}
|
||||
{%- if url_root == '#' %}{% set url_root = '' %}{% endif %}
|
||||
{%- if not embedded and docstitle %}
|
||||
{%- set titlesuffix = " — "|safe + docstitle|e %}
|
||||
{%- else %}
|
||||
{%- set titlesuffix = "" %}
|
||||
{%- endif %}
|
||||
{%- set lang_attr = 'en' if language == None else (language | replace('_', '-')) %}
|
||||
|
||||
{%- macro relbar() %}
|
||||
<div class="related">
|
||||
<h3>{{ _('Navigation') }}</h3>
|
||||
<ul>
|
||||
{%- for rellink in rellinks %}
|
||||
<li class="right" {% if loop.first %}style="margin-right: 10px"{% endif %}>
|
||||
<a href="{{ pathto(rellink[0]) }}" title="{{ rellink[1]|striptags|e }}"
|
||||
{{ accesskey(rellink[2]) }}>{{ rellink[3] }}</a>
|
||||
{%- if not loop.first %}{{ reldelim2 }}{% endif %}</li>
|
||||
{%- endfor %}
|
||||
{%- block rootrellink %}
|
||||
<li><a href="{{ pathto(master_doc) }}">{{ shorttitle|e }}</a>{{ reldelim1 }}</li>
|
||||
{%- endblock %}
|
||||
{%- for parent in parents %}
|
||||
<li><a href="{{ parent.link|e }}" {% if loop.last %}{{ accesskey("U") }}{% endif %}>{{ parent.title }}</a>{{ reldelim1 }}</li>
|
||||
{%- endfor %}
|
||||
{%- block relbaritems %} {% endblock %}
|
||||
</ul>
|
||||
</div>
|
||||
{%- endmacro %}
|
||||
{# Build sphinx_version_info tuple from sphinx_version string in pure Jinja #}
|
||||
{%- set (_ver_major, _ver_minor) = (sphinx_version.split('.') | list)[:2] | map('int') -%}
|
||||
{%- set sphinx_version_info = (_ver_major, _ver_minor, -1) -%}
|
||||
|
||||
{%- macro sidebar() %}
|
||||
{%- if render_sidebar %}
|
||||
<div class="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
{%- block sidebarlogo %}
|
||||
{%- if logo %}
|
||||
<p class="logo"><a href="{{ pathto(master_doc) }}">
|
||||
<img class="logo" src="{{ pathto('_static/' + logo, 1) }}" alt="Logo"/>
|
||||
</a></p>
|
||||
{%- endif %}
|
||||
{%- endblock %}
|
||||
{%- if sidebars != None %}
|
||||
{#- new style sidebar: explicitly include/exclude templates #}
|
||||
{%- for sidebartemplate in sidebars %}
|
||||
{%- include sidebartemplate %}
|
||||
{%- endfor %}
|
||||
{%- else %}
|
||||
{#- old style sidebars: using blocks -- should be deprecated #}
|
||||
{%- block sidebartoc %}
|
||||
{%- include "localtoc.html" %}
|
||||
{%- endblock %}
|
||||
{%- block sidebarrel %}
|
||||
{%- include "relations.html" %}
|
||||
{%- endblock %}
|
||||
{%- block sidebarsourcelink %}
|
||||
{%- include "sourcelink.html" %}
|
||||
{%- endblock %}
|
||||
{%- if customsidebar %}
|
||||
{%- include customsidebar %}
|
||||
{%- endif %}
|
||||
{%- block sidebarsearch %}
|
||||
{%- include "searchbox.html" %}
|
||||
{%- endblock %}
|
||||
{%- endif %}
|
||||
</div>
|
||||
</div>
|
||||
{%- endif %}
|
||||
{%- endmacro %}
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="{{ lang_attr }}"{% if sphinx_version_info >= (7, 2) %} data-content_root="{{ content_root }}"{% endif %}>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
{%- if READTHEDOCS and not embedded %}
|
||||
<meta name="readthedocs-addons-api-version" content="1">
|
||||
{%- endif %}
|
||||
{{- metatags }}
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
{%- block htmltitle %}
|
||||
<title>{{ title|striptags|e }}{{ titlesuffix }}</title>
|
||||
{%- endblock -%}
|
||||
|
||||
{%- macro script() %}
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '{{ url_root }}',
|
||||
VERSION: '{{ release|e }}',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '{{ '' if no_search_suffix else file_suffix }}',
|
||||
HAS_SOURCE: {{ has_source|lower }},
|
||||
SOURCELINK_SUFFIX: '{{ sourcelink_suffix }}'
|
||||
};
|
||||
</script>
|
||||
{#- CSS #}
|
||||
{%- for css_file in css_files %}
|
||||
{%- if css_file|attr("filename") %}
|
||||
{{ css_tag(css_file) }}
|
||||
{%- else %}
|
||||
<link rel="stylesheet" href="{{ pathto(css_file, 1)|escape }}" type="text/css" />
|
||||
{%- endif %}
|
||||
{%- endfor %}
|
||||
|
||||
{#
|
||||
"extra_css_files" is an undocumented Read the Docs theme specific option.
|
||||
There is no need to check for ``|attr("filename")`` here because it's always a string.
|
||||
Note that this option should be removed in favor of regular ``html_css_files``:
|
||||
https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-html_css_files
|
||||
#}
|
||||
{%- for css_file in extra_css_files %}
|
||||
<link rel="stylesheet" href="{{ pathto(css_file, 1)|escape }}" type="text/css" />
|
||||
{%- endfor -%}
|
||||
|
||||
{#- FAVICON #}
|
||||
{%- if favicon_url %}
|
||||
<link rel="shortcut icon" href="{{ favicon_url }}"/>
|
||||
{%- endif %}
|
||||
|
||||
{#- CANONICAL URL (deprecated) #}
|
||||
{%- if theme_canonical_url and not pageurl %}
|
||||
<link rel="canonical" href="{{ theme_canonical_url }}{{ pagename }}.html"/>
|
||||
{%- endif -%}
|
||||
|
||||
{#- CANONICAL URL #}
|
||||
{%- if pageurl %}
|
||||
<link rel="canonical" href="{{ pageurl|e }}" />
|
||||
{%- endif -%}
|
||||
|
||||
{#- JAVASCRIPTS #}
|
||||
{%- block scripts %}
|
||||
{%- if not embedded %}
|
||||
{%- for scriptfile in script_files %}
|
||||
<script type="text/javascript" src="{{ pathto(scriptfile, 1) }}"></script>
|
||||
{{ js_tag(scriptfile) }}
|
||||
{%- endfor %}
|
||||
{%- endmacro %}
|
||||
<script src="{{ pathto('_static/js/theme.js', 1) }}"></script>
|
||||
|
||||
{%- macro css() %}
|
||||
<link rel="stylesheet" href="{{ pathto('_static/' + style, 1) }}" type="text/css" />
|
||||
<link rel="stylesheet" href="{{ pathto('_static/pygments.css', 1) }}" type="text/css" />
|
||||
{%- for cssfile in css_files %}
|
||||
<link rel="stylesheet" href="{{ pathto(cssfile, 1) }}" type="text/css" />
|
||||
{%- endfor %}
|
||||
{%- endmacro %}
|
||||
{%- if READTHEDOCS or DEBUG %}
|
||||
<script src="{{ pathto('_static/js/versions.js', 1) }}"></script>
|
||||
{%- endif %}
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset={{ encoding }}" />
|
||||
{{ metatags }}
|
||||
{%- block htmltitle %}
|
||||
<title>{{ title|striptags|e }}{{ titlesuffix }}</title>
|
||||
{%- endblock %}
|
||||
{{ css() }}
|
||||
{%- if not embedded %}
|
||||
{{ script() }}
|
||||
{#- OPENSEARCH #}
|
||||
{%- if use_opensearch %}
|
||||
<link rel="search" type="application/opensearchdescription+xml"
|
||||
title="{% trans docstitle=docstitle|e %}Search within {{ docstitle }}{% endtrans %}"
|
||||
href="{{ pathto('_static/opensearch.xml', 1) }}"/>
|
||||
{%- endif %}
|
||||
{%- if favicon %}
|
||||
<link rel="shortcut icon" href="{{ pathto('_static/' + favicon, 1) }}"/>
|
||||
{%- endif %}
|
||||
{%- if theme_canonical_url %}
|
||||
<link rel="canonical" href="{{ theme_canonical_url }}{{ pagename }}.html"/>
|
||||
{%- endif %}
|
||||
{%- endif %}
|
||||
{%- block linktags %}
|
||||
{%- endif %}
|
||||
{%- endblock %}
|
||||
|
||||
{%- block linktags %}
|
||||
{%- if hasdoc('about') %}
|
||||
<link rel="author" title="{{ _('About these documents') }}" href="{{ pathto('about') }}" />
|
||||
{%- endif %}
|
||||
@@ -143,67 +93,135 @@
|
||||
{%- if hasdoc('copyright') %}
|
||||
<link rel="copyright" title="{{ _('Copyright') }}" href="{{ pathto('copyright') }}" />
|
||||
{%- endif %}
|
||||
<link rel="top" title="{{ docstitle|e }}" href="{{ pathto('index') }}" />
|
||||
{%- if parents %}
|
||||
<link rel="up" title="{{ parents[-1].title|striptags|e }}" href="{{ parents[-1].link|e }}" />
|
||||
{%- endif %}
|
||||
{%- if next %}
|
||||
<link rel="next" title="{{ next.title|striptags|e }}" href="{{ next.link|e }}" />
|
||||
{%- endif %}
|
||||
{%- if prev %}
|
||||
<link rel="prev" title="{{ prev.title|striptags|e }}" href="{{ prev.link|e }}" />
|
||||
{%- endif %}
|
||||
{%- endblock %}
|
||||
{%- block extrahead %} {% endblock %}
|
||||
</head>
|
||||
<body>
|
||||
{%- block header %}{% endblock %}
|
||||
|
||||
{%- block relbar1 %}{{ relbar() }}{% endblock %}
|
||||
|
||||
{%- block content %}
|
||||
{%- block sidebar1 %} {# possible location for sidebar #} {% endblock %}
|
||||
|
||||
<div class="document">
|
||||
{%- block document %}
|
||||
<div class="documentwrapper">
|
||||
{%- if render_sidebar %}
|
||||
<div class="bodywrapper">
|
||||
{%- endif %}
|
||||
<div class="body">
|
||||
{% block body %} {% endblock %}
|
||||
</div>
|
||||
{%- if render_sidebar %}
|
||||
</div>
|
||||
{%- endif %}
|
||||
</div>
|
||||
{%- endblock %}
|
||||
{%- block extrahead %} {% endblock %}
|
||||
</head>
|
||||
|
||||
{%- block sidebar2 %}{{ sidebar() }}{% endblock %}
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
{%- endblock %}
|
||||
<body class="wy-body-for-nav">
|
||||
|
||||
{%- block relbar2 %}{{ relbar() }}{% endblock %}
|
||||
{%- block extrabody %} {% endblock %}
|
||||
<div class="wy-grid-for-nav">
|
||||
{#- SIDE NAV, TOGGLES ON MOBILE #}
|
||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||
<div class="wy-side-scroll">
|
||||
<div class="wy-side-nav-search" {% if theme_style_nav_header_background %} style="background: {{theme_style_nav_header_background}}" {% endif %}>
|
||||
{%- block sidebartitle %}
|
||||
|
||||
{# the logo helper function was removed in Sphinx 6 and deprecated since Sphinx 4 #}
|
||||
{# the master_doc variable was renamed to root_doc in Sphinx 4 (master_doc still exists in later Sphinx versions) #}
|
||||
{%- set _logo_url = logo_url|default(pathto('_static/' + (logo or ""), 1)) %}
|
||||
{%- set _root_doc = root_doc|default(master_doc) %}
|
||||
<a href="{{ pathto(_root_doc) }}"{% if not theme_logo_only %} class="icon icon-home"{% endif %}>
|
||||
{% if not theme_logo_only %}{{ project }}{% endif %}
|
||||
{%- if logo or logo_url %}
|
||||
<img src="{{ _logo_url }}" class="logo" alt="{{ _('Logo') }}"/>
|
||||
{%- endif %}
|
||||
</a>
|
||||
|
||||
{%- if READTHEDOCS or DEBUG %}
|
||||
{%- if theme_version_selector or theme_language_selector %}
|
||||
<div class="switch-menus">
|
||||
<div class="version-switch"></div>
|
||||
<div class="language-switch"></div>
|
||||
</div>
|
||||
{%- endif %}
|
||||
{%- endif %}
|
||||
|
||||
{%- include "searchbox.html" %}
|
||||
|
||||
{%- endblock %}
|
||||
</div>
|
||||
|
||||
{%- block navigation %}
|
||||
{#- Translators: This is an ARIA section label for the main navigation menu -#}
|
||||
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="{{ _('Navigation menu') }}">
|
||||
{%- block menu %}
|
||||
{%- set toctree = toctree(maxdepth=theme_navigation_depth|int,
|
||||
collapse=theme_collapse_navigation|tobool,
|
||||
includehidden=theme_includehidden|tobool,
|
||||
titles_only=theme_titles_only|tobool) %}
|
||||
{%- if toctree %}
|
||||
{{ toctree }}
|
||||
{%- else %}
|
||||
<!-- Local TOC -->
|
||||
<div class="local-toc">{{ toc }}</div>
|
||||
{%- endif %}
|
||||
{%- endblock %}
|
||||
</div>
|
||||
{%- endblock %}
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||
|
||||
{#- MOBILE NAV, TRIGGLES SIDE NAV ON TOGGLE #}
|
||||
{#- Translators: This is an ARIA section label for the navigation menu that is visible when viewing the page on mobile devices -#}
|
||||
<nav class="wy-nav-top" aria-label="{{ _('Mobile navigation menu') }}" {% if theme_style_nav_header_background %} style="background: {{theme_style_nav_header_background}}" {% endif %}>
|
||||
{%- block mobile_nav %}
|
||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||
<a href="{{ pathto(master_doc) }}">{{ project }}</a>
|
||||
{%- endblock %}
|
||||
</nav>
|
||||
|
||||
<div class="wy-nav-content">
|
||||
{%- block content %}
|
||||
{%- if theme_style_external_links|tobool %}
|
||||
<div class="rst-content style-external-links">
|
||||
{%- else %}
|
||||
<div class="rst-content">
|
||||
{%- endif %}
|
||||
{% include "breadcrumbs.html" %}
|
||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||
{%- block document %}
|
||||
<div itemprop="articleBody">
|
||||
{% block body %}{% endblock %}
|
||||
</div>
|
||||
{%- if self.comments()|trim %}
|
||||
<div class="articleComments">
|
||||
{%- block comments %}{% endblock %}
|
||||
</div>
|
||||
{%- endif%}
|
||||
</div>
|
||||
{%- endblock %}
|
||||
{% include "footer.html" %}
|
||||
</div>
|
||||
{%- endblock %}
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
{% include "versions.html" -%}
|
||||
|
||||
<script>
|
||||
jQuery(function () {
|
||||
SphinxRtdTheme.Navigation.enable({{ 'true' if theme_sticky_navigation|tobool else 'false' }});
|
||||
});
|
||||
</script>
|
||||
|
||||
{#- Do not conflict with RTD insertion of analytics script #}
|
||||
{%- if not READTHEDOCS %}
|
||||
{%- if theme_analytics_id %}
|
||||
<!-- Theme Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id={{ theme_analytics_id }}"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', '{{ theme_analytics_id }}', {
|
||||
'anonymize_ip': {{ 'true' if theme_analytics_anonymize_ip|tobool else 'false' }},
|
||||
});
|
||||
</script>
|
||||
|
||||
{%- block footer %}
|
||||
<div class="footer">
|
||||
{%- if show_copyright %}
|
||||
{%- if hasdoc('copyright') %}
|
||||
{% trans path=pathto('copyright'), copyright=copyright|e %}© <a href="{{ path }}">Copyright</a> {{ copyright }}.{% endtrans %}
|
||||
{%- else %}
|
||||
{% trans copyright=copyright|e %}© Copyright {{ copyright }}.{% endtrans %}
|
||||
{%- endif %}
|
||||
{%- endif %}
|
||||
{%- if last_updated %}
|
||||
{% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %}
|
||||
{%- endif %}
|
||||
{%- if show_sphinx %}
|
||||
{% trans sphinx_version=sphinx_version|e %}Created using <a href="http://sphinx-doc.org/">Sphinx</a> {{ sphinx_version }}.{% endtrans %}
|
||||
{%- endif %}
|
||||
</div>
|
||||
<p>asdf asdf asdf asdf 22</p>
|
||||
{%- endblock %}
|
||||
</body>
|
||||
</html>
|
||||
{%- endif %}
|
||||
|
||||
{%- block footer %} {% endblock %}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -39,7 +39,7 @@ as well as the type of underlying hardware. Example:
|
||||
"rsa_pubkey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqh…nswIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
|
||||
The ``rsa_pubkey`` is optional any only required for certain fatures such as working with reusable
|
||||
The ``rsa_pubkey`` is optional any only required for certain features such as working with reusable
|
||||
media and NFC cryptography.
|
||||
|
||||
Every initialization token can only be used once. On success, you will receive a response containing
|
||||
|
||||
@@ -46,28 +46,28 @@ Endpoints
|
||||
Vary: Accept
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"count": 3,
|
||||
"next": null,
|
||||
"previous": null,
|
||||
"results": [
|
||||
{
|
||||
"id": 2,
|
||||
"start": "2025-08-14T22:00:00Z",
|
||||
"end": "2025-08-15T00:00:00Z"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"start": "2025-08-12T22:00:00Z",
|
||||
"end": "2025-08-13T22:00:00Z"
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"start": "2025-08-15T22:00:00Z",
|
||||
"end": "2025-08-17T22:00:00Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
{
|
||||
"count": 3,
|
||||
"next": null,
|
||||
"previous": null,
|
||||
"results": [
|
||||
{
|
||||
"id": 2,
|
||||
"start": "2025-08-14T22:00:00Z",
|
||||
"end": "2025-08-15T00:00:00Z"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"start": "2025-08-12T22:00:00Z",
|
||||
"end": "2025-08-13T22:00:00Z"
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"start": "2025-08-15T22:00:00Z",
|
||||
"end": "2025-08-17T22:00:00Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
:param organizer: The ``slug`` field of the organizer to fetch
|
||||
:param event: The ``slug`` field of the event to fetch
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
sphinx==7.4.*
|
||||
jinja2==3.1.*
|
||||
sphinx-rtd-theme
|
||||
sphinxcontrib-httpdomain
|
||||
sphinxcontrib-images
|
||||
sphinxcontrib-jquery
|
||||
sphinxcontrib-spelling==8.*
|
||||
sphinxemoji
|
||||
sphinx==9.1.*
|
||||
sphinx-rtd-theme~=3.1.0rc2
|
||||
sphinxcontrib-httpdomain~=1.8.1
|
||||
sphinxcontrib-images~=1.0.1
|
||||
sphinxcontrib-jquery~=4.1
|
||||
sphinxcontrib-spelling~=8.0.2
|
||||
sphinxemoji~=0.3.2
|
||||
pyenchant==3.3.*
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
-e ../
|
||||
sphinx==7.4.*
|
||||
jinja2==3.1.*
|
||||
sphinx-rtd-theme
|
||||
sphinxcontrib-httpdomain
|
||||
sphinxcontrib-images
|
||||
sphinxcontrib-jquery
|
||||
sphinxcontrib-spelling==8.*
|
||||
sphinxemoji
|
||||
sphinx==9.1.*
|
||||
sphinx-rtd-theme~=3.1.0rc2
|
||||
sphinxcontrib-httpdomain~=1.8.1
|
||||
sphinxcontrib-images~=1.0.1
|
||||
sphinxcontrib-jquery~=4.1
|
||||
sphinxcontrib-spelling~=8.0.2
|
||||
sphinxemoji~=0.3.2
|
||||
pyenchant==3.3.*
|
||||
|
||||
@@ -3,7 +3,7 @@ name = "pretix"
|
||||
dynamic = ["version"]
|
||||
description = "Reinventing presales, one ticket at a time"
|
||||
readme = "README.rst"
|
||||
requires-python = ">=3.9"
|
||||
requires-python = ">=3.10"
|
||||
license = {file = "LICENSE"}
|
||||
keywords = ["tickets", "web", "shop", "ecommerce"]
|
||||
authors = [
|
||||
@@ -29,7 +29,7 @@ dependencies = [
|
||||
"arabic-reshaper==3.0.0", # Support for Arabic in reportlab
|
||||
"babel",
|
||||
"BeautifulSoup4==4.14.*",
|
||||
"bleach==6.2.*",
|
||||
"bleach==6.3.*",
|
||||
"celery==5.6.*",
|
||||
"chardet==5.2.*",
|
||||
"cryptography>=44.0.0",
|
||||
@@ -37,8 +37,8 @@ dependencies = [
|
||||
"defusedcsv>=1.1.0",
|
||||
"dnspython==2.*",
|
||||
"Django[argon2]==4.2.*,>=4.2.26",
|
||||
"django-bootstrap3==25.2",
|
||||
"django-compressor==4.5.1",
|
||||
"django-bootstrap3==26.1",
|
||||
"django-compressor==4.6.0",
|
||||
"django-countries==8.2.*",
|
||||
"django-filter==25.1",
|
||||
"django-formset-js-improved==0.5.0.4",
|
||||
@@ -50,13 +50,13 @@ dependencies = [
|
||||
"django-localflavor==5.0",
|
||||
"django-markup",
|
||||
"django-oauth-toolkit==2.3.*",
|
||||
"django-otp==1.6.*",
|
||||
"django-phonenumber-field==8.3.*",
|
||||
"django-otp==1.7.*",
|
||||
"django-phonenumber-field==8.4.*",
|
||||
"django-redis==6.0.*",
|
||||
"django-scopes==2.0.*",
|
||||
"django-statici18n==2.6.*",
|
||||
"djangorestframework==3.16.*",
|
||||
"dnspython==2.7.*",
|
||||
"dnspython==2.8.*",
|
||||
"drf_ujson2==1.7.*",
|
||||
"geoip2==5.*",
|
||||
"importlib_metadata==8.*", # Polyfill, we can probably drop this once we require Python 3.10+
|
||||
@@ -65,7 +65,7 @@ dependencies = [
|
||||
"kombu==5.6.*",
|
||||
"libsass==0.23.*",
|
||||
"lxml",
|
||||
"markdown==3.9", # 3.3.5 requires importlib-metadata>=4.4, but django-bootstrap3 requires importlib-metadata<3.
|
||||
"markdown==3.10", # 3.3.5 requires importlib-metadata>=4.4, but django-bootstrap3 requires importlib-metadata<3.
|
||||
# We can upgrade markdown again once django-bootstrap3 upgrades or once we drop Python 3.6 and 3.7
|
||||
"mt-940==4.30.*",
|
||||
"oauthlib==3.3.*",
|
||||
@@ -75,7 +75,7 @@ dependencies = [
|
||||
"paypal-checkout-serversdk==1.0.*",
|
||||
"PyJWT==2.10.*",
|
||||
"phonenumberslite==9.0.*",
|
||||
"Pillow==11.3.*",
|
||||
"Pillow==12.1.*",
|
||||
"pretix-plugin-build",
|
||||
"protobuf==6.33.*",
|
||||
"psycopg2-binary",
|
||||
@@ -89,10 +89,10 @@ dependencies = [
|
||||
"pytz-deprecation-shim==0.1.*",
|
||||
"pyuca",
|
||||
"qrcode==8.2",
|
||||
"redis==7.0.*",
|
||||
"redis==7.1.*",
|
||||
"reportlab==4.4.*",
|
||||
"requests==2.32.*",
|
||||
"sentry-sdk==2.48.*",
|
||||
"sentry-sdk==2.49.*",
|
||||
"sepaxml==2.7.*",
|
||||
"stripe==7.9.*",
|
||||
"text-unidecode==1.*",
|
||||
@@ -113,7 +113,7 @@ dev = [
|
||||
"fakeredis==2.33.*",
|
||||
"flake8==7.3.*",
|
||||
"freezegun",
|
||||
"isort==6.1.*",
|
||||
"isort==7.0.*",
|
||||
"pep8-naming==0.15.*",
|
||||
"potypo",
|
||||
"pytest-asyncio>=0.24",
|
||||
@@ -123,7 +123,7 @@ dev = [
|
||||
"pytest-mock==3.15.*",
|
||||
"pytest-sugar",
|
||||
"pytest-xdist==3.8.*",
|
||||
"pytest==8.4.*",
|
||||
"pytest==9.0.*",
|
||||
"responses",
|
||||
]
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ from pretix.api.serializers.order import (
|
||||
OrderFeeCreateSerializer, OrderPositionCreateSerializer,
|
||||
)
|
||||
from pretix.base.models import ItemVariation, Order, OrderFee, OrderPosition
|
||||
from pretix.base.services.orders import OrderError
|
||||
from pretix.base.services.orders import OrderChangeManager, OrderError
|
||||
from pretix.base.settings import COUNTRIES_WITH_STATE_IN_ADDRESS
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -82,11 +82,11 @@ class OrderPositionCreateForExistingOrderSerializer(OrderPositionCreateSerialize
|
||||
return data
|
||||
|
||||
def create(self, validated_data):
|
||||
ocm = self.context['ocm']
|
||||
ocm: OrderChangeManager = self.context['ocm']
|
||||
check_quotas = self.context.get('check_quotas', True)
|
||||
|
||||
try:
|
||||
ocm.add_position(
|
||||
new_position = ocm.add_position(
|
||||
item=validated_data['item'],
|
||||
variation=validated_data.get('variation'),
|
||||
price=validated_data.get('price'),
|
||||
@@ -98,7 +98,7 @@ class OrderPositionCreateForExistingOrderSerializer(OrderPositionCreateSerialize
|
||||
)
|
||||
if self.context.get('commit', True):
|
||||
ocm.commit(check_quotas=check_quotas)
|
||||
return validated_data['order'].positions.order_by('-positionid').first()
|
||||
return new_position.position
|
||||
else:
|
||||
return OrderPosition() # fake to appease DRF
|
||||
except OrderError as e:
|
||||
@@ -131,7 +131,7 @@ class OrderFeeCreateForExistingOrderSerializer(OrderFeeCreateSerializer):
|
||||
return data
|
||||
|
||||
def create(self, validated_data):
|
||||
ocm = self.context['ocm']
|
||||
ocm: OrderChangeManager = self.context['ocm']
|
||||
|
||||
try:
|
||||
f = OrderFee(
|
||||
@@ -146,7 +146,7 @@ class OrderFeeCreateForExistingOrderSerializer(OrderFeeCreateSerializer):
|
||||
ocm.add_fee(f)
|
||||
if self.context.get('commit', True):
|
||||
ocm.commit()
|
||||
return validated_data['order'].fees.order_by('-pk').first()
|
||||
return f
|
||||
else:
|
||||
return OrderFee() # fake to appease DRF
|
||||
except OrderError as e:
|
||||
@@ -310,7 +310,7 @@ class OrderPositionChangeSerializer(serializers.ModelSerializer):
|
||||
return data
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
ocm = self.context['ocm']
|
||||
ocm: OrderChangeManager = self.context['ocm']
|
||||
check_quotas = self.context.get('check_quotas', True)
|
||||
current_seat = {'seat_guid': instance.seat.seat_guid} if instance.seat else None
|
||||
item = validated_data.get('item', instance.item)
|
||||
@@ -399,7 +399,7 @@ class OrderFeeChangeSerializer(serializers.ModelSerializer):
|
||||
)
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
ocm = self.context['ocm']
|
||||
ocm: OrderChangeManager = self.context['ocm']
|
||||
value = validated_data.get('value', instance.value)
|
||||
|
||||
try:
|
||||
|
||||
@@ -73,6 +73,9 @@ class PeppolIdValidator:
|
||||
"0205": "[A-Z0-9]+",
|
||||
"0221": "T[0-9]{13}",
|
||||
"0230": ".*",
|
||||
"0244": "[0-9]{13}",
|
||||
"0245": "[0-9]{10}",
|
||||
"0246": "DE[0-9]{9}(-[0-9]{5})?(\\.[0-9A-Z]{1,8})?",
|
||||
"9901": ".*",
|
||||
"9902": "[1-9][0-9]{7}",
|
||||
"9904": "DK[0-9]{8}",
|
||||
@@ -120,7 +123,6 @@ class PeppolIdValidator:
|
||||
"9951": ".*",
|
||||
"9952": ".*",
|
||||
"9953": ".*",
|
||||
"9954": ".*",
|
||||
"9956": "0[0-9]{9}",
|
||||
"9957": ".*",
|
||||
"9959": ".*",
|
||||
|
||||
@@ -1630,7 +1630,7 @@ class OrderChangeManager:
|
||||
MembershipOperation = namedtuple('MembershipOperation', ('position', 'membership'))
|
||||
CancelOperation = namedtuple('CancelOperation', ('position', 'price_diff'))
|
||||
AddOperation = namedtuple('AddOperation', ('item', 'variation', 'price', 'addon_to', 'subevent', 'seat', 'membership',
|
||||
'valid_from', 'valid_until', 'is_bundled'))
|
||||
'valid_from', 'valid_until', 'is_bundled', 'result'))
|
||||
SplitOperation = namedtuple('SplitOperation', ('position',))
|
||||
FeeValueOperation = namedtuple('FeeValueOperation', ('fee', 'value', 'price_diff'))
|
||||
AddFeeOperation = namedtuple('AddFeeOperation', ('fee', 'price_diff'))
|
||||
@@ -1642,6 +1642,18 @@ class OrderChangeManager:
|
||||
AddBlockOperation = namedtuple('AddBlockOperation', ('position', 'block_name', 'ignore_from_quota_while_blocked'))
|
||||
RemoveBlockOperation = namedtuple('RemoveBlockOperation', ('position', 'block_name', 'ignore_from_quota_while_blocked'))
|
||||
|
||||
class AddPositionResult:
|
||||
_position: Optional[OrderPosition]
|
||||
|
||||
def __init__(self):
|
||||
self._position = None
|
||||
|
||||
@property
|
||||
def position(self) -> OrderPosition:
|
||||
if self._position is None:
|
||||
raise RuntimeError("Order position has not been created yet. Call commit() first on OrderChangeManager.")
|
||||
return self._position
|
||||
|
||||
def __init__(self, order: Order, user=None, auth=None, notify=True, reissue_invoice=True, allow_blocked_seats=False):
|
||||
self.order = order
|
||||
self.user = user
|
||||
@@ -1846,7 +1858,7 @@ class OrderChangeManager:
|
||||
|
||||
def add_position(self, item: Item, variation: ItemVariation, price: Decimal, addon_to: OrderPosition = None,
|
||||
subevent: SubEvent = None, seat: Seat = None, membership: Membership = None,
|
||||
valid_from: datetime = None, valid_until: datetime = None):
|
||||
valid_from: datetime = None, valid_until: datetime = None) -> 'OrderChangeManager.AddPositionResult':
|
||||
if isinstance(seat, str):
|
||||
if not seat:
|
||||
seat = None
|
||||
@@ -1905,8 +1917,11 @@ class OrderChangeManager:
|
||||
self._quotadiff.update(new_quotas)
|
||||
if seat:
|
||||
self._seatdiff.update([seat])
|
||||
|
||||
result = self.AddPositionResult()
|
||||
self._operations.append(self.AddOperation(item, variation, price, addon_to, subevent, seat, membership,
|
||||
valid_from, valid_until, is_bundled))
|
||||
valid_from, valid_until, is_bundled, result))
|
||||
return result
|
||||
|
||||
def split(self, position: OrderPosition):
|
||||
if self.order.event.settings.invoice_include_free or position.price != Decimal('0.00'):
|
||||
@@ -2525,6 +2540,7 @@ class OrderChangeManager:
|
||||
'valid_from': op.valid_from.isoformat() if op.valid_from else None,
|
||||
'valid_until': op.valid_until.isoformat() if op.valid_until else None,
|
||||
})
|
||||
op.result._position = pos
|
||||
elif isinstance(op, self.SplitOperation):
|
||||
position = position_cache.setdefault(op.position.pk, op.position)
|
||||
split_positions.append(position)
|
||||
|
||||
@@ -32,13 +32,14 @@
|
||||
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations under the License.
|
||||
|
||||
import html
|
||||
import re
|
||||
import urllib.parse
|
||||
|
||||
import bleach
|
||||
import markdown
|
||||
from bleach import DEFAULT_CALLBACKS
|
||||
from bleach.linkifier import build_email_re, build_url_re
|
||||
from bleach import DEFAULT_CALLBACKS, html5lib_shim
|
||||
from bleach.linkifier import build_email_re
|
||||
from django import template
|
||||
from django.conf import settings
|
||||
from django.core import signing
|
||||
@@ -124,6 +125,23 @@ ALLOWED_ATTRIBUTES = {
|
||||
|
||||
ALLOWED_PROTOCOLS = {'http', 'https', 'mailto', 'tel'}
|
||||
|
||||
|
||||
def build_url_re(tlds=tld_set, protocols=html5lib_shim.allowed_protocols):
|
||||
# Differs from bleach regex by allowing { and } in URL to allow placeholders in URL parameters
|
||||
return re.compile(
|
||||
r"""\(* # Match any opening parentheses.
|
||||
\b(?<![@.])(?:(?:{0}):/{{0,3}}(?:(?:\w+:)?\w+@)?)? # http://
|
||||
([\w-]+\.)+(?:{1})(?:\:[0-9]+)?(?!\.\w)\b # xx.yy.tld(:##)?
|
||||
(?:[/?][^\s\|\\\^`<>"]*)?
|
||||
# /path/zz (excluding "unsafe" chars from RFC 3986,
|
||||
# except for # and ~, which happen in practice)
|
||||
""".format(
|
||||
"|".join(sorted(protocols)), "|".join(sorted(tlds))
|
||||
),
|
||||
re.IGNORECASE | re.VERBOSE | re.UNICODE,
|
||||
)
|
||||
|
||||
|
||||
URL_RE = SimpleLazyObject(lambda: build_url_re(tlds=sorted(tld_set, key=len, reverse=True)))
|
||||
|
||||
EMAIL_RE = SimpleLazyObject(lambda: build_email_re(tlds=sorted(tld_set, key=len, reverse=True)))
|
||||
@@ -333,8 +351,14 @@ def markdown_compile_email(source, allowed_tags=None, allowed_attributes=ALLOWED
|
||||
# This is a workaround to fix placeholders in URL targets
|
||||
def context_callback(attrs, new=False):
|
||||
if (None, "href") in attrs and "{" in attrs[None, "href"]:
|
||||
# Do not use MODE_RICH_TO_HTML to avoid recursive linkification
|
||||
attrs[None, "href"] = escape(format_map(attrs[None, "href"], context=context, mode=SafeFormatter.MODE_RICH_TO_PLAIN))
|
||||
# Do not use MODE_RICH_TO_HTML to avoid recursive linkification.
|
||||
# We want to esacpe the end result, however, we need to unescape the input to prevent & being turned
|
||||
# to &amp; because the input is already escaped by the markdown parser.
|
||||
attrs[None, "href"] = escape(format_map(
|
||||
html.unescape(attrs[None, "href"]),
|
||||
context=context,
|
||||
mode=SafeFormatter.MODE_RICH_TO_PLAIN
|
||||
))
|
||||
return attrs
|
||||
|
||||
context_callbacks.append(context_callback)
|
||||
|
||||
@@ -814,7 +814,7 @@ class OrganizerPluginStateLogEntryType(LogEntryType):
|
||||
if app and hasattr(app, 'PretixPluginMeta'):
|
||||
return {
|
||||
'href': reverse('control:organizer.settings.plugins', kwargs={
|
||||
'organizer': logentry.event.organizer.slug,
|
||||
'organizer': logentry.organizer.slug,
|
||||
}) + '#plugin_' + logentry.parsed_data['plugin'],
|
||||
'val': app.PretixPluginMeta.name
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
<div class="col-md-2">
|
||||
{% bootstrap_field formset.empty_form.overwrite layout='inline' form_group_class="" %}
|
||||
</div>
|
||||
{{ f.value_map.as_hidden }}
|
||||
{{ formset.empty_form.value_map.as_hidden }}
|
||||
<div class="col-md-2 text-right flip">
|
||||
<i class="fa fa-warning hidden" data-toggle="tooltip" title=""></i>
|
||||
<button type="button" class="btn btn-default hidden" data-edit-value-map data-toggle="modal"
|
||||
|
||||
@@ -229,7 +229,8 @@ def get_language_score(locale):
|
||||
if not catalog:
|
||||
score = 1
|
||||
else:
|
||||
score = len(list(catalog.items())) or 1
|
||||
source_strings = [k[1] if isinstance(k, tuple) else k for k in catalog.keys()]
|
||||
score = len(set(source_strings)) or 1
|
||||
return score
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-01-05 12:12+0000\n"
|
||||
"PO-Revision-Date: 2026-01-05 14:52+0000\n"
|
||||
"PO-Revision-Date: 2026-01-08 04:00+0000\n"
|
||||
"Last-Translator: Jiří Pastrňák <jiri@pastrnak.email>\n"
|
||||
"Language-Team: Czech <https://translate.pretix.eu/projects/pretix/pretix/cs/>"
|
||||
"\n"
|
||||
@@ -1881,7 +1881,7 @@ msgstr "IČO"
|
||||
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:99
|
||||
#: pretix/presale/templates/pretixpresale/event/order.html:327
|
||||
msgid "VAT ID"
|
||||
msgstr "DPH"
|
||||
msgstr "DIČ"
|
||||
|
||||
#: pretix/base/exporters/invoices.py:216 pretix/base/exporters/invoices.py:217
|
||||
#: pretix/base/exporters/invoices.py:218 pretix/base/exporters/invoices.py:219
|
||||
@@ -1926,7 +1926,7 @@ msgstr "Příjemce"
|
||||
#: pretix/control/templates/pretixcontrol/order/index.html:1064
|
||||
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:111
|
||||
msgid "Internal reference"
|
||||
msgstr "Interní číslo"
|
||||
msgstr "Interní označení"
|
||||
|
||||
#: pretix/base/exporters/invoices.py:226 pretix/base/models/tax.py:161
|
||||
#: pretix/control/forms/event.py:1628
|
||||
@@ -2594,7 +2594,7 @@ msgstr "Kód vstupenky"
|
||||
#: pretix/base/modelimport_vouchers.py:272
|
||||
#: pretix/plugins/checkinlists/exporters.py:527
|
||||
msgid "Seat ID"
|
||||
msgstr "ID sedadla"
|
||||
msgstr "ID místa"
|
||||
|
||||
#: pretix/base/exporters/orderlist.py:623
|
||||
#: pretix/plugins/checkinlists/exporters.py:528
|
||||
@@ -2614,7 +2614,7 @@ msgstr "Řada"
|
||||
#: pretix/base/exporters/orderlist.py:626
|
||||
#: pretix/plugins/checkinlists/exporters.py:531
|
||||
msgid "Seat number"
|
||||
msgstr "Číslo sedadla"
|
||||
msgstr "Číslo místa"
|
||||
|
||||
#: pretix/base/exporters/orderlist.py:627
|
||||
#: pretix/control/templates/pretixcontrol/order/change.html:224
|
||||
@@ -3345,7 +3345,7 @@ msgstr "Prosím uveďte kratší jméno."
|
||||
#: pretix/base/forms/questions.py:314
|
||||
msgctxt "phonenumber"
|
||||
msgid "International area code"
|
||||
msgstr "PSČ"
|
||||
msgstr "Mezinárodní předvolba"
|
||||
|
||||
#: pretix/base/forms/questions.py:340
|
||||
msgctxt "phonenumber"
|
||||
@@ -3561,7 +3561,7 @@ msgstr "Firma nebo instituce"
|
||||
|
||||
#: pretix/base/forms/widgets.py:238
|
||||
msgid "Individual customer"
|
||||
msgstr "Zákazník"
|
||||
msgstr "Fyzická osoba"
|
||||
|
||||
#: pretix/base/invoicing/email.py:50
|
||||
msgid "Email invoice directly to accounting department"
|
||||
@@ -3571,19 +3571,15 @@ msgstr "Zaslat fakturu přímo účetnímu oddělení"
|
||||
msgid ""
|
||||
"If not selected, the invoice will be sent to you using the email address "
|
||||
"listed above."
|
||||
msgstr ""
|
||||
msgstr "Pokud tuto možnost nezvolíte, zašleme fakturu na e-mail uvedený výše."
|
||||
|
||||
#: pretix/base/invoicing/email.py:55
|
||||
#, fuzzy
|
||||
#| msgid "Email address verified"
|
||||
msgid "Email address for invoice"
|
||||
msgstr "E-mailová adresa ověřena"
|
||||
msgstr "E-mail pro zaslání faktury"
|
||||
|
||||
#: pretix/base/invoicing/email.py:91
|
||||
#, fuzzy
|
||||
#| msgid "Preview email"
|
||||
msgid "PDF via email"
|
||||
msgstr "Náhled e-mailu"
|
||||
msgstr "PDF do e-mailu"
|
||||
|
||||
#: pretix/base/invoicing/national.py:37
|
||||
msgctxt "italian_invoice"
|
||||
@@ -3642,7 +3638,7 @@ msgstr "Faktura od"
|
||||
#: pretix/base/invoicing/pdf.py:433
|
||||
msgctxt "invoice"
|
||||
msgid "Invoice to"
|
||||
msgstr "Faktura na"
|
||||
msgstr "Fakturováno"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:470 pretix/base/invoicing/pdf.py:1221
|
||||
msgctxt "invoice"
|
||||
@@ -3672,12 +3668,12 @@ msgstr "Datum zrušení"
|
||||
#: pretix/base/invoicing/pdf.py:504
|
||||
msgctxt "invoice"
|
||||
msgid "Original invoice date"
|
||||
msgstr "Původní datum faktury"
|
||||
msgstr "Datum originální faktury"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:511 pretix/base/invoicing/pdf.py:1258
|
||||
msgctxt "invoice"
|
||||
msgid "Invoice date"
|
||||
msgstr "Datum faktury"
|
||||
msgstr "Datum vystavení"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:527
|
||||
msgctxt "invoice"
|
||||
@@ -3704,7 +3700,7 @@ msgstr "Faktura č. {num}"
|
||||
#, python-brace-format
|
||||
msgctxt "invoice"
|
||||
msgid "Customer reference: {reference}"
|
||||
msgstr "Referenční číslo zákazníka: {reference}"
|
||||
msgstr "Interní označení: {reference}"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:668
|
||||
msgctxt "invoice"
|
||||
@@ -3732,7 +3728,7 @@ msgstr "Faktura"
|
||||
#: pretix/presale/templates/pretixpresale/event/order.html:244
|
||||
msgctxt "invoice"
|
||||
msgid "Cancellation"
|
||||
msgstr "Zrušení"
|
||||
msgstr "Storno"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:732 pretix/base/invoicing/pdf.py:740
|
||||
msgctxt "invoice"
|
||||
@@ -3768,13 +3764,13 @@ msgstr "Suma"
|
||||
#, python-brace-format
|
||||
msgctxt "invoice"
|
||||
msgid "Single price: {net_price} net / {gross_price} gross"
|
||||
msgstr "Jednotlivá cena: {net_price} netto / {gross_price} brutto"
|
||||
msgstr "Jednotková cena: {net_price} netto / {gross_price} brutto"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:900
|
||||
#, python-brace-format
|
||||
msgctxt "invoice"
|
||||
msgid "Single price: {price}"
|
||||
msgstr "Jednotná cena: {price}"
|
||||
msgstr "Jednotková cena: {price}"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:943 pretix/base/invoicing/pdf.py:948
|
||||
msgctxt "invoice"
|
||||
@@ -3802,12 +3798,10 @@ msgid "Remaining amount"
|
||||
msgstr "Zbývající částka"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:1008
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgctxt "invoice"
|
||||
#| msgid "Event date: {date_range}"
|
||||
#, python-brace-format
|
||||
msgctxt "invoice"
|
||||
msgid "Invoice period: {daterange}"
|
||||
msgstr "Datum akce: {date_range}"
|
||||
msgstr "Fakturované období: {daterange}"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:1039
|
||||
msgctxt "invoice"
|
||||
@@ -4175,7 +4169,7 @@ msgstr "Bylo nalezeno více shodných míst."
|
||||
#: pretix/base/modelimport_orders.py:628
|
||||
#: pretix/base/modelimport_vouchers.py:293
|
||||
msgid "No matching seat was found."
|
||||
msgstr "Nebylo nalezeno žádné odpovídající sedadlo."
|
||||
msgstr "Nebylo nalezeno žádné odpovídající místo."
|
||||
|
||||
#: pretix/base/modelimport_orders.py:631
|
||||
#: pretix/base/modelimport_vouchers.py:296 pretix/base/services/cart.py:220
|
||||
@@ -4280,7 +4274,7 @@ msgstr "Pokud si vyberete místo, musíte si vybrat datum."
|
||||
|
||||
#: pretix/base/modelimport_vouchers.py:299 pretix/base/models/vouchers.py:516
|
||||
msgid "You need to choose a specific product if you select a seat."
|
||||
msgstr "Pokud si vyberete sedadlo, musíte si vybrat konkrétní produkt."
|
||||
msgstr "Pokud si vyberete místo, musíte zvolit konkrétní produkt."
|
||||
|
||||
#: pretix/base/modelimport_vouchers.py:302 pretix/base/models/vouchers.py:519
|
||||
msgid "Seat-specific vouchers can only be used once."
|
||||
@@ -4289,7 +4283,7 @@ msgstr "Poukazy na konkrétní místo lze použít pouze jednou."
|
||||
#: pretix/base/modelimport_vouchers.py:306 pretix/base/models/vouchers.py:522
|
||||
#, python-brace-format
|
||||
msgid "You need to choose the product \"{prod}\" for this seat."
|
||||
msgstr "Pro toto sedadlo je třeba vybrat produkt \"{prod}\"."
|
||||
msgstr "Pro toto místo je třeba vybrat produkt \"{prod}\"."
|
||||
|
||||
#: pretix/base/modelimport_vouchers.py:318 pretix/base/models/vouchers.py:288
|
||||
#: pretix/control/templates/pretixcontrol/vouchers/index.html:129
|
||||
@@ -5237,13 +5231,13 @@ msgstr ""
|
||||
#, python-format
|
||||
msgctxt "invoice"
|
||||
msgid "Tax ID: %s"
|
||||
msgstr "DIČ: %s"
|
||||
msgstr "IČO: %s"
|
||||
|
||||
#: pretix/base/models/invoices.py:240 pretix/base/services/invoices.py:155
|
||||
#, python-format
|
||||
msgctxt "invoice"
|
||||
msgid "VAT-ID: %s"
|
||||
msgstr "IČO: %s"
|
||||
msgstr "DIČ: %s"
|
||||
|
||||
#: pretix/base/models/items.py:93
|
||||
msgid "Category name"
|
||||
@@ -6446,7 +6440,7 @@ msgstr "Objednaný produkt \"{item}\" již není k dispozici."
|
||||
#: pretix/base/models/orders.py:1066
|
||||
#, python-brace-format
|
||||
msgid "The seat \"{seat}\" is no longer available."
|
||||
msgstr "Sedadlo \"{seat}\" již není k dispozici.."
|
||||
msgstr "Místo \"{seat}\" již není k dispozici."
|
||||
|
||||
#: pretix/base/models/orders.py:1067
|
||||
#, python-brace-format
|
||||
@@ -6635,7 +6629,7 @@ msgstr "Obchodní zákazník"
|
||||
|
||||
#: pretix/base/models/orders.py:3407
|
||||
msgid "This reference will be printed on your invoice for your convenience."
|
||||
msgstr "Tento odkaz bude pro vaše potřeby vytištěn na faktuře."
|
||||
msgstr "Tato informace bude uvedena na faktuře pro vaše potřeby."
|
||||
|
||||
#: pretix/base/models/orders.py:3534
|
||||
msgid "Transmission type"
|
||||
@@ -6831,7 +6825,7 @@ msgstr "Řada {number}"
|
||||
#: pretix/base/models/seating.py:205
|
||||
#, python-brace-format
|
||||
msgid "Seat {number}"
|
||||
msgstr "Sedadlo {number}"
|
||||
msgstr "Místo {number}"
|
||||
|
||||
#: pretix/base/models/tax.py:143
|
||||
msgid "Standard rates"
|
||||
@@ -7273,7 +7267,7 @@ msgstr ""
|
||||
#: pretix/base/models/vouchers.py:507
|
||||
#, python-brace-format
|
||||
msgid "The specified seat ID \"{id}\" does not exist for this event."
|
||||
msgstr "Zadané ID sedadla \"{id}\" pro tuto událost neexistuje."
|
||||
msgstr "Zadané ID místa \"{id}\" pro tuto událost neexistuje."
|
||||
|
||||
#: pretix/base/models/vouchers.py:511
|
||||
#, python-brace-format
|
||||
@@ -7314,7 +7308,7 @@ msgstr "Tento produkt není v současné době k dispozici."
|
||||
|
||||
#: pretix/base/models/waitinglist.py:186
|
||||
msgid "No seat with this product is currently available."
|
||||
msgstr "K tomuto produktu není v současné době k dispozici žádné sedadlo."
|
||||
msgstr "K tomuto produktu nejsou v současné době k dispozici žádná místa."
|
||||
|
||||
#: pretix/base/models/waitinglist.py:189
|
||||
msgid "A voucher has already been sent to this person."
|
||||
@@ -8133,11 +8127,11 @@ msgstr ""
|
||||
|
||||
#: pretix/base/pdf.py:505
|
||||
msgid "Seat: Full name"
|
||||
msgstr "Sedadlo: Celé jméno"
|
||||
msgstr "Místo: Celé jméno"
|
||||
|
||||
#: pretix/base/pdf.py:506
|
||||
msgid "Ground floor, Row 3, Seat 4"
|
||||
msgstr "Přízemí, řada 3, sedadlo 4"
|
||||
msgstr "Přízemí, řada 3, místo 4"
|
||||
|
||||
#: pretix/base/pdf.py:508 pretix/base/pdf.py:514
|
||||
#: pretix/control/forms/orders.py:344
|
||||
@@ -8146,7 +8140,7 @@ msgstr "včetně všech daní"
|
||||
|
||||
#: pretix/base/pdf.py:511
|
||||
msgid "Seat: zone"
|
||||
msgstr "Sedadlo: zóna"
|
||||
msgstr "Místo: zóna"
|
||||
|
||||
#: pretix/base/pdf.py:512
|
||||
msgid "Ground floor"
|
||||
@@ -8154,11 +8148,11 @@ msgstr "parket"
|
||||
|
||||
#: pretix/base/pdf.py:517
|
||||
msgid "Seat: row"
|
||||
msgstr "sedadlo: řada"
|
||||
msgstr "Místo: řada"
|
||||
|
||||
#: pretix/base/pdf.py:522
|
||||
msgid "Seat: seat number"
|
||||
msgstr "sedadlo: číslo"
|
||||
msgstr "Místo: číslo"
|
||||
|
||||
#: pretix/base/pdf.py:527
|
||||
msgid "Date and time of first scan"
|
||||
@@ -8554,7 +8548,7 @@ msgstr "Tento poukaz není platný pro tento produkt."
|
||||
|
||||
#: pretix/base/services/cart.py:191
|
||||
msgid "This voucher is not valid for this seat."
|
||||
msgstr "Tento poukaz není platný pro toto sedadlo."
|
||||
msgstr "Tento poukaz není platný pro toto místo."
|
||||
|
||||
#: pretix/base/services/cart.py:193
|
||||
msgid ""
|
||||
@@ -10354,11 +10348,8 @@ msgid "Automatic, but prefer invoice date over event date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/settings.py:1169 pretix/base/settings.py:1180
|
||||
#, fuzzy
|
||||
#| msgctxt "invoice"
|
||||
#| msgid "Invoice date"
|
||||
msgid "Invoice date"
|
||||
msgstr "Datum faktury"
|
||||
msgstr "Datum vystavení"
|
||||
|
||||
#: pretix/base/settings.py:1173
|
||||
#, fuzzy
|
||||
@@ -10411,11 +10402,11 @@ msgstr "ulice Alberta-Einstein 52"
|
||||
|
||||
#: pretix/base/settings.py:1299
|
||||
msgid "Domestic tax ID"
|
||||
msgstr "Domácí daňové identifikační číslo"
|
||||
msgstr "Lokální identifikační číslo"
|
||||
|
||||
#: pretix/base/settings.py:1300
|
||||
msgid "e.g. tax number in Germany, ABN in Australia, …"
|
||||
msgstr "např. daňové číslo v Německu, číslo ABN v Austrálii, …"
|
||||
msgstr "např. IČO v Česku, daňové číslo v Německu, číslo ABN v Austrálii, …"
|
||||
|
||||
#: pretix/base/settings.py:1310
|
||||
msgid "EU VAT ID"
|
||||
@@ -12707,7 +12698,7 @@ msgstr "Pan"
|
||||
#: pretix/base/settings.py:3873
|
||||
msgctxt "person_name"
|
||||
msgid "Degree (after name)"
|
||||
msgstr "titul (za jménem)"
|
||||
msgstr "Titul (za jménem)"
|
||||
|
||||
#: pretix/base/settings.py:3895
|
||||
msgctxt "person_name_sample"
|
||||
@@ -12922,7 +12913,7 @@ msgstr "Očekávaný název hostitele podle konfigurace"
|
||||
|
||||
#: pretix/base/templates/400_hostname.html:26
|
||||
msgid "Received headers"
|
||||
msgstr "Přijaté titulky"
|
||||
msgstr "Přijaté hlavičky"
|
||||
|
||||
#: pretix/base/templates/400_hostname.html:32
|
||||
msgid "ignored"
|
||||
@@ -15751,7 +15742,7 @@ msgstr "Doplňkový produkt k"
|
||||
#: pretix/presale/templates/pretixpresale/event/checkout_membership.html:23
|
||||
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:101
|
||||
msgid "Seat"
|
||||
msgstr "Sedadlo"
|
||||
msgstr "Místo"
|
||||
|
||||
#: pretix/control/forms/orders.py:348
|
||||
#: pretix/control/templates/pretixcontrol/order/change.html:182
|
||||
@@ -16557,7 +16548,7 @@ msgstr "Pozice #{posid}: Použité členství bylo změněno."
|
||||
#: pretix/control/logdisplay.py:117
|
||||
#, python-brace-format
|
||||
msgid "Position #{posid}: Seat \"{old_seat}\" changed to \"{new_seat}\"."
|
||||
msgstr "Pozice #{posid}: Sedadlo \" {old_seat}\" se změnilo na \"{new_seat}\"."
|
||||
msgstr "Pozice #{posid}: Místo \" {old_seat}\" se změnilo na \"{new_seat}\"."
|
||||
|
||||
#: pretix/control/logdisplay.py:127
|
||||
#, python-brace-format
|
||||
@@ -18641,7 +18632,7 @@ msgstr "běží v režimu vývoje"
|
||||
#: pretix/presale/templates/pretixpresale/postmessage.html:27
|
||||
#: pretix/presale/templates/pretixpresale/waiting.html:42
|
||||
msgid "If this takes longer than a few minutes, please contact us."
|
||||
msgstr "Pokud to trvá déle než několik minut, kontaktujte nás."
|
||||
msgstr "Pokud akce trvá déle než několik minut, kontaktujte nás."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:4
|
||||
#: pretix/control/templates/pretixcontrol/organizers/devices.html:71
|
||||
@@ -20238,10 +20229,8 @@ msgid "Invoice customization"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/event/invoicing.html:79
|
||||
#, fuzzy
|
||||
#| msgid "Invoice information"
|
||||
msgid "Invoice transmission"
|
||||
msgstr "Informace o faktuře"
|
||||
msgstr "Způsob doručení faktury"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/event/invoicing.html:81
|
||||
msgid ""
|
||||
@@ -21589,9 +21578,8 @@ msgid "August"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/global_sysreport.html:24
|
||||
#, fuzzy
|
||||
msgid "September"
|
||||
msgstr "Číslo sedadla"
|
||||
msgstr "Září"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/global_sysreport.html:25
|
||||
msgid "October"
|
||||
@@ -22969,7 +22957,7 @@ msgstr ""
|
||||
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:35
|
||||
#: pretix/presale/templates/pretixpresale/event/order_modify.html:29
|
||||
msgid "Invoice information"
|
||||
msgstr "Informace o faktuře"
|
||||
msgstr "Fakturační údaje"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/order/change_questions.html:26
|
||||
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:36
|
||||
@@ -23311,12 +23299,12 @@ msgstr "Celkem"
|
||||
#: pretix/control/templates/pretixcontrol/order/index.html:789
|
||||
#: pretix/presale/templates/pretixpresale/event/order.html:210
|
||||
msgid "Successful payments"
|
||||
msgstr ""
|
||||
msgstr "Úspěšné platby"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/order/index.html:798
|
||||
#: pretix/presale/templates/pretixpresale/event/order.html:219
|
||||
msgid "Pending total"
|
||||
msgstr ""
|
||||
msgstr "Čeká na platbu"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/order/index.html:824
|
||||
#: pretix/control/templates/pretixcontrol/search/payments.html:88
|
||||
@@ -28358,7 +28346,7 @@ msgstr ""
|
||||
#: pretix/control/views/organizer.py:3483
|
||||
#: pretix/control/views/organizer.py:3527
|
||||
msgid "Your changes could not be saved."
|
||||
msgstr ""
|
||||
msgstr "Vaše změny nebyly uloženy."
|
||||
|
||||
#: pretix/control/views/organizer.py:982
|
||||
msgid "The selected team cannot be deleted."
|
||||
@@ -29843,15 +29831,12 @@ msgstr "Částka:"
|
||||
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:34
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:30
|
||||
msgid "There is no further action required on this website."
|
||||
msgstr ""
|
||||
msgstr "Na této stránce není nutné provádět další kroky."
|
||||
|
||||
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:35
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:31
|
||||
#, fuzzy
|
||||
msgid "We will send you an email as soon as we received your payment."
|
||||
msgstr ""
|
||||
"Jakmile organizátor vaši objednávku schválí nebo zamítne, budeme vás "
|
||||
"informovat e-mailem."
|
||||
msgstr "Zašleme vám e-mail, jakmile platbu obdržíme."
|
||||
|
||||
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:5
|
||||
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:7
|
||||
@@ -30858,7 +30843,7 @@ msgstr "Stránka %d z %d"
|
||||
#: pretix/plugins/reports/exporters.py:210
|
||||
#, python-format
|
||||
msgid "Page %d"
|
||||
msgstr "Strana %dd"
|
||||
msgstr "Stránka %dd"
|
||||
|
||||
#: pretix/plugins/reports/exporters.py:212
|
||||
#, python-format
|
||||
@@ -32713,7 +32698,7 @@ msgstr "Zadávejte prosím pouze čísla."
|
||||
#: pretix/presale/checkoutflow.py:758
|
||||
msgctxt "checkoutflow"
|
||||
msgid "Your information"
|
||||
msgstr "Informace pro vás"
|
||||
msgstr "Osobní údaje"
|
||||
|
||||
#: pretix/presale/checkoutflow.py:992
|
||||
msgid ""
|
||||
@@ -33204,7 +33189,7 @@ msgstr "Váš košík"
|
||||
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:27
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart_box.html:18
|
||||
msgid "Cart expired"
|
||||
msgstr "Nákupní košík vypršel"
|
||||
msgstr "Rezervace košíku vypršela"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/checkout_base.html:36
|
||||
msgid "Show full cart"
|
||||
@@ -33244,7 +33229,7 @@ msgstr "Upravit"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:75
|
||||
msgid "Modify invoice information"
|
||||
msgstr "Upravit informace na faktuře"
|
||||
msgstr "Upravit fakturační údaje"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:127
|
||||
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:19
|
||||
@@ -33435,7 +33420,7 @@ msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:9
|
||||
msgid "Before we continue, we need you to answer some questions."
|
||||
msgstr "Před provedením objednávky prosím odpovězte na níže uvedené otázky."
|
||||
msgstr "Pro dokončení objednávky potřebujeme následující údaje."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:49
|
||||
msgid "Auto-fill with address"
|
||||
@@ -33449,7 +33434,7 @@ msgstr "Vyplnit formulář"
|
||||
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:93
|
||||
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:170
|
||||
msgid "Copy answers from above"
|
||||
msgstr "Zkopírujte odpovědi z výše uvedených položek"
|
||||
msgstr "Zkopírujte odpovědi z předchozího"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:150
|
||||
msgid "Auto-fill with profile"
|
||||
@@ -33574,7 +33559,7 @@ msgstr "Zobrazit varianty"
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:147
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:304
|
||||
msgid "Original price:"
|
||||
msgstr "Originální cena:"
|
||||
msgstr "Původní cena:"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:136
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:278
|
||||
@@ -33722,7 +33707,7 @@ msgstr "Celková cena"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:46
|
||||
msgid "Seat:"
|
||||
msgstr "Sedadlo:"
|
||||
msgstr "Místo:"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:61
|
||||
msgctxt "subevent"
|
||||
@@ -33867,16 +33852,12 @@ msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:514
|
||||
#: pretix/presale/templates/pretixpresale/fragment_modals.html:48
|
||||
#, fuzzy
|
||||
#| msgid "Event description"
|
||||
msgid "Renew reservation"
|
||||
msgstr "Popis akce"
|
||||
msgstr "Obnovit rezervaci"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:526
|
||||
#, fuzzy
|
||||
#| msgid "Reservation period"
|
||||
msgid "Reservation renewed"
|
||||
msgstr "Doba rezervace"
|
||||
msgstr "Rezervace obnovena"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:532
|
||||
msgid "Overview of your ordered products."
|
||||
@@ -34181,14 +34162,12 @@ msgstr "Zobrazit obraz %(item)s v celé velikosti"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:131
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:288
|
||||
#, fuzzy, python-format
|
||||
#| msgid "%(count)s event"
|
||||
#| msgid_plural "%(count)s events"
|
||||
#, python-format
|
||||
msgid "%(amount)s× in your cart"
|
||||
msgid_plural "%(amount)s× in your cart"
|
||||
msgstr[0] "%(count)s akce"
|
||||
msgstr[1] "%(count)s akce"
|
||||
msgstr[2] "%(count)s akcí"
|
||||
msgstr[0] "%(amount)s× ve vašem košíku"
|
||||
msgstr[1] "%(amount)s× ve vašem košíku"
|
||||
msgstr[2] "%(amount)s× ve vašem košíku"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:209
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:374
|
||||
@@ -34564,7 +34543,7 @@ msgstr "Požádat o fakturu"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/order.html:287
|
||||
msgid "Your information"
|
||||
msgstr "Informace pro vás"
|
||||
msgstr "Fakturační údaje"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/order.html:290
|
||||
msgid "Change your information"
|
||||
@@ -34572,7 +34551,7 @@ msgstr "Změňte své údaje"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/order.html:335
|
||||
msgid "Internal Reference"
|
||||
msgstr "Interní reference"
|
||||
msgstr "Interní označení"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/order.html:354
|
||||
msgctxt "action"
|
||||
@@ -35636,12 +35615,12 @@ msgid ""
|
||||
"Your cart timeout was extended. Please note that some of the prices in your "
|
||||
"cart changed."
|
||||
msgstr ""
|
||||
"Platnost vašeho košíku byla prodloužena. Berte prosím na vědomí, že ceny "
|
||||
"některých položek ve vašem košíku se změnily."
|
||||
|
||||
#: pretix/presale/views/cart.py:573
|
||||
#, fuzzy
|
||||
#| msgid "Your cart has been updated."
|
||||
msgid "Your cart timeout was extended."
|
||||
msgstr "Váš košík byl aktualizován."
|
||||
msgstr "Platnost vašeho košíku byla prodloužena."
|
||||
|
||||
#: pretix/presale/views/cart.py:588
|
||||
msgid "The products have been successfully added to your cart."
|
||||
|
||||
@@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-01-05 12:13+0000\n"
|
||||
"PO-Revision-Date: 2025-09-08 18:57+0000\n"
|
||||
"Last-Translator: Alois Pospíšil <alois.pospisil@gmail.com>\n"
|
||||
"PO-Revision-Date: 2026-01-08 04:00+0000\n"
|
||||
"Last-Translator: Jiří Pastrňák <jiri@pastrnak.email>\n"
|
||||
"Language-Team: Czech <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||
"cs/>\n"
|
||||
"Language: cs\n"
|
||||
@@ -17,7 +17,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 5.13\n"
|
||||
"X-Generator: Weblate 5.15.1\n"
|
||||
|
||||
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
|
||||
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
|
||||
@@ -416,7 +416,7 @@ msgstr ""
|
||||
|
||||
#: pretix/static/pretixbase/js/asynctask.js:276
|
||||
msgid "If this takes longer than a few minutes, please contact us."
|
||||
msgstr ""
|
||||
msgstr "Pokud akce trvá déle než několik minut, kontaktujte nás."
|
||||
|
||||
#: pretix/static/pretixbase/js/asynctask.js:331
|
||||
msgid "Close message"
|
||||
@@ -734,7 +734,7 @@ msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:49
|
||||
msgid "Cart expired"
|
||||
msgstr "Nákupní košík vypršel"
|
||||
msgstr "Rezervace košíku vypršela"
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:58
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:84
|
||||
@@ -753,27 +753,23 @@ msgstr[2] ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:83
|
||||
msgid "Your cart has expired."
|
||||
msgstr "Nákupní košík vypršel."
|
||||
msgstr "Platnost rezervace vašeho košíku vypršela."
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:86
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "The items in your cart are no longer reserved for you. You can still "
|
||||
#| "complete your order as long as they’re available."
|
||||
msgid ""
|
||||
"The items in your cart are no longer reserved for you. You can still "
|
||||
"complete your order as long as they're available."
|
||||
msgstr ""
|
||||
"Produkty v nákupním košíku již nejsou pro vás rezervovány. Pokud je lístek "
|
||||
"stále dostupný, můžete objednávku dokončit."
|
||||
"Produkty v nákupním košíku již nejsou rezervovány. Svou objednávku se přesto "
|
||||
"můžete pokusit dokončit, některé položky však už nemusí být dostupné."
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:87
|
||||
msgid "Do you want to renew the reservation period?"
|
||||
msgstr ""
|
||||
msgstr "Chcete obnovit rezervaci košíku?"
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:90
|
||||
msgid "Renew reservation"
|
||||
msgstr ""
|
||||
msgstr "Obnovit rezervaci"
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:194
|
||||
msgid "The organizer keeps %(currency)s %(amount)s"
|
||||
|
||||
@@ -5,8 +5,8 @@ msgstr ""
|
||||
"Project-Id-Version: 1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-01-05 12:12+0000\n"
|
||||
"PO-Revision-Date: 2026-01-05 14:44+0000\n"
|
||||
"Last-Translator: Raphael Michel <michel@rami.io>\n"
|
||||
"PO-Revision-Date: 2026-01-06 14:46+0000\n"
|
||||
"Last-Translator: et15 <e.t.tst@live.de>\n"
|
||||
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix/"
|
||||
"de/>\n"
|
||||
"Language: de\n"
|
||||
@@ -1521,8 +1521,8 @@ msgid ""
|
||||
"Only include invoices issued in this time frame. Note that the invoice date "
|
||||
"does not always correspond to the order or payment date."
|
||||
msgstr ""
|
||||
"Nur Rechnungen, die in diesem Zeitraum wurden. Achtung: Das Rechnungsdatum "
|
||||
"korrespondiert nicht zwingend zum Bestell- oder Zahlungsdatum."
|
||||
"Nur Rechnungen, die in diesem Zeitraum ausgestellt wurden. Achtung: Das "
|
||||
"Rechnungsdatum korrespondiert nicht zwingend zum Bestell- oder Zahlungsdatum."
|
||||
|
||||
#: pretix/base/exporters/events.py:47
|
||||
msgid "Event data"
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-01-05 12:12+0000\n"
|
||||
"PO-Revision-Date: 2025-11-22 23:00+0000\n"
|
||||
"PO-Revision-Date: 2026-01-06 23:00+0000\n"
|
||||
"Last-Translator: CVZ-es <damien.bremont@casadevelazquez.org>\n"
|
||||
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix/"
|
||||
"es/>\n"
|
||||
@@ -17,7 +17,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.14.3\n"
|
||||
"X-Generator: Weblate 5.15.1\n"
|
||||
|
||||
#: pretix/_base_settings.py:87
|
||||
msgid "English"
|
||||
@@ -3870,7 +3870,7 @@ msgstr ""
|
||||
|
||||
#: pretix/base/invoicing/peppol.py:164
|
||||
msgid "The Peppol participant ID is not registered on the Peppol network."
|
||||
msgstr ""
|
||||
msgstr "El ID de participante de Peppol no está registrado en la red Peppol."
|
||||
|
||||
#: pretix/base/invoicing/peppol.py:184
|
||||
msgid "Peppol participant ID"
|
||||
@@ -8445,6 +8445,8 @@ msgid ""
|
||||
"Some products can no longer be purchased and have been removed from your "
|
||||
"cart for the following reason: %s"
|
||||
msgstr ""
|
||||
"Algunos productos ya no se pueden comprar y se han eliminado de su carrito "
|
||||
"por el siguiente motivo: %s"
|
||||
|
||||
#: pretix/base/services/cart.py:117
|
||||
msgid ""
|
||||
@@ -9626,21 +9628,15 @@ msgid "Uncategorized"
|
||||
msgstr "Sin categorías"
|
||||
|
||||
#: pretix/base/services/tax.py:43
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Your VAT ID could not be checked, as the VAT checking service of your "
|
||||
#| "country is currently not available. We will therefore need to charge VAT "
|
||||
#| "on your invoice. You can get the tax amount back via the VAT "
|
||||
#| "reimbursement process."
|
||||
msgid ""
|
||||
"Your VAT ID could not be checked, as the VAT checking service of your "
|
||||
"country is currently not available. We will therefore need to charge you the "
|
||||
"same tax rate as if you did not enter a VAT ID."
|
||||
msgstr ""
|
||||
"Tu Identificador IVA no puede ser chequeado, porque el verificador para tu "
|
||||
"país no está disponible actualmente. Nosotros deberemos de cargar el IVA en "
|
||||
"tu compra. Puedes obtener el total del impuesto mediante el proceso de "
|
||||
"reembolso de IVA."
|
||||
"No se ha podido verificar su número de identificación fiscal, ya que el "
|
||||
"servicio de verificación del IVA de su país no está disponible en este "
|
||||
"momento. Por lo tanto, tendremos que cobrarle el mismo tipo impositivo que "
|
||||
"si no hubiera introducido ningún número de identificación fiscal."
|
||||
|
||||
#: pretix/base/services/tax.py:47 pretix/base/services/tax.py:366
|
||||
#: pretix/base/services/tax.py:393
|
||||
@@ -10081,24 +10077,18 @@ msgid "Ask for VAT ID"
|
||||
msgstr "Solicitar ID de IVA"
|
||||
|
||||
#: pretix/base/settings.py:632
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid ""
|
||||
#| "Only works if an invoice address is asked for. VAT ID is never required "
|
||||
#| "and only requested from business customers in the following countries: "
|
||||
#| "{countries}"
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"Only works if an invoice address is asked for. VAT ID is only requested from "
|
||||
"business customers in the following countries: {countries}."
|
||||
msgstr ""
|
||||
"Solo funciona si se solicita una dirección de factura. El ID de IVA nunca es "
|
||||
"obligatorio y solo se solicita a clientes comerciales en los siguientes "
|
||||
"países: {countries}"
|
||||
"Solo funciona si se solicita una dirección de facturación. El número de "
|
||||
"identificación fiscal solo se solicita a los clientes empresariales de los "
|
||||
"siguientes países: {countries}."
|
||||
|
||||
#: pretix/base/settings.py:651
|
||||
#, fuzzy
|
||||
#| msgid "Require name"
|
||||
msgid "Require VAT ID in"
|
||||
msgstr "Requerir nombre"
|
||||
msgstr "Solicitar número de identificación fiscal en"
|
||||
|
||||
#: pretix/base/settings.py:657
|
||||
msgid ""
|
||||
@@ -10106,6 +10096,10 @@ msgid ""
|
||||
"ID in all countries. VAT ID will be required for all business addresses in "
|
||||
"the selected countries."
|
||||
msgstr ""
|
||||
"El número de identificación fiscal es opcional por defecto, ya que no todas "
|
||||
"las empresas tienen asignado un número de identificación fiscal en todos los "
|
||||
"países. El número de identificación fiscal será obligatorio para todas las "
|
||||
"direcciones comerciales en los países seleccionados."
|
||||
|
||||
#: pretix/base/settings.py:672
|
||||
msgid "Invoice address explanation"
|
||||
@@ -13838,11 +13832,9 @@ msgstr ""
|
||||
"mismo origen\"."
|
||||
|
||||
#: pretix/base/views/js_helpers.py:41
|
||||
#, fuzzy
|
||||
#| msgid "ID"
|
||||
msgctxt "tax_id_swiss"
|
||||
msgid "UID"
|
||||
msgstr "ID"
|
||||
msgstr "UID"
|
||||
|
||||
#. Translators: Only translate to French (IDE) and Italien (IDI), otherwise keep the same
|
||||
#. Awareness around VAT IDs differes by EU country. For example, in Germany the VAT ID is assigned
|
||||
@@ -13852,35 +13844,27 @@ msgstr "ID"
|
||||
#. number (Partita IVA) and also used on domestic transactions. So someone who never purchased something international
|
||||
#. for their company, might still know the value, if we call it the right way and not just "VAT ID".
|
||||
#: pretix/base/views/js_helpers.py:49
|
||||
#, fuzzy
|
||||
#| msgid "VAT ID"
|
||||
msgctxt "tax_id_italy"
|
||||
msgid "VAT ID / P.IVA"
|
||||
msgstr "Identificador IVA"
|
||||
msgstr "Número de identificación fiscal / P.IVA"
|
||||
|
||||
#. Translators: Translate to only "P.IVA" in Italian, keep second part as-is in other languages
|
||||
#: pretix/base/views/js_helpers.py:50
|
||||
#, fuzzy
|
||||
#| msgid "VAT ID"
|
||||
msgctxt "tax_id_greece"
|
||||
msgid "VAT ID / TIN"
|
||||
msgstr "Identificador IVA"
|
||||
msgstr "Número de identificación fiscal / TIN"
|
||||
|
||||
#. Translators: Translate to only "ΑΦΜ" in Greek
|
||||
#: pretix/base/views/js_helpers.py:51
|
||||
#, fuzzy
|
||||
#| msgid "VAT ID"
|
||||
msgctxt "tax_id_spain"
|
||||
msgid "VAT ID / NIF"
|
||||
msgstr "Identificador IVA"
|
||||
msgstr "Número de identificación fiscal / NIF"
|
||||
|
||||
#. Translators: Translate to only "NIF" in Spanish
|
||||
#: pretix/base/views/js_helpers.py:52
|
||||
#, fuzzy
|
||||
#| msgid "VAT ID"
|
||||
msgctxt "tax_id_portugal"
|
||||
msgid "VAT ID / NIF"
|
||||
msgstr "Identificador IVA"
|
||||
msgstr "NIF"
|
||||
|
||||
#: pretix/base/views/tasks.py:185
|
||||
msgid "An unexpected error has occurred, please try again later."
|
||||
@@ -14436,6 +14420,9 @@ msgid ""
|
||||
"Formatting is not supported, as some accounting departments process mail "
|
||||
"automatically and do not handle formatted emails properly."
|
||||
msgstr ""
|
||||
"No se admite el formato, ya que algunos departamentos de contabilidad "
|
||||
"procesan el correo automáticamente y no gestionan correctamente los correos "
|
||||
"electrónicos con formato."
|
||||
|
||||
#: pretix/control/forms/event.py:1356
|
||||
msgid ""
|
||||
@@ -14889,7 +14876,7 @@ msgstr "Pagado"
|
||||
#: pretix/control/forms/filter.py:1304
|
||||
msgctxt "subevent"
|
||||
msgid "Date doesn't start in selected date range."
|
||||
msgstr ""
|
||||
msgstr "La fecha no comienza en el intervalo de fechas seleccionado."
|
||||
|
||||
#: pretix/control/forms/filter.py:1360 pretix/control/forms/filter.py:1827
|
||||
msgid "Shop live and presale running"
|
||||
@@ -28812,6 +28799,9 @@ msgid ""
|
||||
"automatically. We recommend that you rename these in your source file to "
|
||||
"avoid problems during import."
|
||||
msgstr ""
|
||||
"Varias columnas del archivo CSV tienen el mismo nombre y se han renombrado "
|
||||
"automáticamente. Le recomendamos que cambie el nombre de estas columnas en "
|
||||
"su archivo de origen para evitar problemas durante la importación."
|
||||
|
||||
#: pretix/control/views/modelimport.py:188
|
||||
msgid "The import was successful."
|
||||
@@ -30483,7 +30473,7 @@ msgstr ""
|
||||
|
||||
#: pretix/plugins/banktransfer/camtimport.py:33
|
||||
msgid "Empty file or unknown format."
|
||||
msgstr ""
|
||||
msgstr "Archivo vacío o formato desconocido."
|
||||
|
||||
#: pretix/plugins/banktransfer/payment.py:69
|
||||
msgid ""
|
||||
@@ -33053,16 +33043,17 @@ msgid "Przelewy24"
|
||||
msgstr "Przelewy24"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:417 pretix/plugins/stripe/payment.py:1836
|
||||
#, fuzzy
|
||||
#| msgid "Payment by bank transfer"
|
||||
msgid "Pay by bank"
|
||||
msgstr "Pago por transferencia bancaria"
|
||||
msgstr "Pagar por transferencia bancaria"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:422
|
||||
msgid ""
|
||||
"Currently only available for charges in GBP and customers with UK bank "
|
||||
"accounts, and in private preview for France and Germany."
|
||||
msgstr ""
|
||||
"Actualmente solo disponible para cargos en libra esterlina y clientes con "
|
||||
"cuentas bancarias en el Reino Unido, y en vista previa privada para Francia "
|
||||
"y Alemania."
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:429 pretix/plugins/stripe/payment.py:1789
|
||||
msgid "WeChat Pay"
|
||||
@@ -33374,16 +33365,17 @@ msgstr ""
|
||||
"favor, tenga a mano su información de acceso."
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1835
|
||||
#, fuzzy
|
||||
#| msgid "PayPal via Stripe"
|
||||
msgid "Pay by bank via Stripe"
|
||||
msgstr "PayPal via Stripe"
|
||||
msgstr "Pagar por transferencia bancaria a través de Stripe"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1841
|
||||
msgid ""
|
||||
"Pay by bank allows you to authorize a secure Open Banking payment from your "
|
||||
"banking app. Currently available only with a UK bank account."
|
||||
msgstr ""
|
||||
"El pago por banco te permite autorizar un pago seguro de banca abierta desde "
|
||||
"tu aplicación bancaria. Actualmente solo disponible con una cuenta bancaria "
|
||||
"del Reino Unido."
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1861
|
||||
msgid "PayPal via Stripe"
|
||||
@@ -33402,22 +33394,16 @@ msgstr ""
|
||||
"suecas Swish y BankID. Por favor, ten tu app preparada."
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1893
|
||||
#, fuzzy
|
||||
#| msgid "giropay via Stripe"
|
||||
msgid "PromptPay via Stripe"
|
||||
msgstr "giropay via Stripe"
|
||||
msgstr "PromptPay a través de Stripe"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1898
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "This payment method is available to MobilePay app users in Denmark and "
|
||||
#| "Finland. Please have your app ready."
|
||||
msgid ""
|
||||
"This payment method is available to PromptPay users in Thailand. Please have "
|
||||
"your app ready."
|
||||
msgstr ""
|
||||
"Este modo de pago está disponible para los usuarios de la aplicación "
|
||||
"MobilePay en Dinamarca y Finlandia. Por favor, tenga su app preparada."
|
||||
"Este método de pago está disponible para los usuarios de PromptPay en "
|
||||
"Tailandia. Por favor, tenga su aplicación lista."
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1917
|
||||
msgid "TWINT via Stripe"
|
||||
@@ -33728,22 +33714,16 @@ msgid "Confirm payment: %(code)s"
|
||||
msgstr "Confirmar pago: %(code)s"
|
||||
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:32
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Please scan the barcode below to complete your WeChat payment. Once you "
|
||||
#| "have completed your payment, you can refresh this page."
|
||||
msgid ""
|
||||
"Please scan the QR code below to complete your PromptPay payment. Once you "
|
||||
"have completed your payment, you can refresh this page."
|
||||
msgstr ""
|
||||
"Escanee el código de barras a continuación para completar su pago de WeChat. "
|
||||
"Una vez que haya completado su pago, puede actualizar esta página."
|
||||
"Escanee el código QR que aparece a continuación para completar su pago con "
|
||||
"PromptPay. Una vez que haya completado el pago, puede actualizar esta página."
|
||||
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:37
|
||||
#, fuzzy
|
||||
#| msgid "Create QR code"
|
||||
msgid "PromptPay QR code"
|
||||
msgstr "Crear código QR"
|
||||
msgstr "Código QR de PromptPay"
|
||||
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:20
|
||||
msgid "Confirming your payment…"
|
||||
@@ -34790,14 +34770,11 @@ msgstr[0] "Necesitas elegir exactamente una opción para esta categoría."
|
||||
msgstr[1] "Necesitas elegir %(min_count)s opciones para esta categoría."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:26
|
||||
#, fuzzy, python-format
|
||||
#| msgid "You can choose at most one option from this category."
|
||||
#| msgid_plural ""
|
||||
#| "You can choose up to %(max_count)s options from this category."
|
||||
#, python-format
|
||||
msgid "You can choose one option from this category."
|
||||
msgid_plural "You can choose up to %(max_count)s options from this category."
|
||||
msgstr[0] "Puedes elegir como máximo una opción en esta categoría."
|
||||
msgstr[1] "Puedes elegir como máximo %(max_count)s opciones en esta categoría."
|
||||
msgstr[0] "Puede elegir una opción de esta categoría."
|
||||
msgstr[1] "Puede elegir hasta %(max_count)s opciones de esta categoría."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:34
|
||||
#, python-format
|
||||
@@ -36885,6 +36862,8 @@ msgid ""
|
||||
"Your cart timeout was extended. Please note that some of the prices in your "
|
||||
"cart changed."
|
||||
msgstr ""
|
||||
"Se ha ampliado el tiempo de espera de su carrito. Tenga en cuenta que "
|
||||
"algunos de los precios de su carrito han cambiado."
|
||||
|
||||
#: pretix/presale/views/cart.py:573
|
||||
msgid "Your cart timeout was extended."
|
||||
|
||||
@@ -4,16 +4,16 @@ msgstr ""
|
||||
"Project-Id-Version: 1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-01-05 12:12+0000\n"
|
||||
"PO-Revision-Date: 2025-11-22 23:00+0000\n"
|
||||
"PO-Revision-Date: 2026-01-06 23:00+0000\n"
|
||||
"Last-Translator: CVZ-es <damien.bremont@casadevelazquez.org>\n"
|
||||
"Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix/fr/"
|
||||
">\n"
|
||||
"Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix/"
|
||||
"fr/>\n"
|
||||
"Language: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 5.14.3\n"
|
||||
"X-Generator: Weblate 5.15.1\n"
|
||||
|
||||
#: pretix/_base_settings.py:87
|
||||
msgid "English"
|
||||
@@ -3874,6 +3874,8 @@ msgstr ""
|
||||
#: pretix/base/invoicing/peppol.py:164
|
||||
msgid "The Peppol participant ID is not registered on the Peppol network."
|
||||
msgstr ""
|
||||
"L'identifiant Peppol du participant n'est pas enregistré sur le réseau "
|
||||
"Peppol."
|
||||
|
||||
#: pretix/base/invoicing/peppol.py:184
|
||||
msgid "Peppol participant ID"
|
||||
@@ -8495,6 +8497,8 @@ msgid ""
|
||||
"Some products can no longer be purchased and have been removed from your "
|
||||
"cart for the following reason: %s"
|
||||
msgstr ""
|
||||
"Certains produits ne peuvent plus être achetés et ont été retirés de votre "
|
||||
"panier pour la raison suivante : %s"
|
||||
|
||||
#: pretix/base/services/cart.py:117
|
||||
msgid ""
|
||||
@@ -9690,21 +9694,15 @@ msgid "Uncategorized"
|
||||
msgstr "Non catégorisé"
|
||||
|
||||
#: pretix/base/services/tax.py:43
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Your VAT ID could not be checked, as the VAT checking service of your "
|
||||
#| "country is currently not available. We will therefore need to charge VAT "
|
||||
#| "on your invoice. You can get the tax amount back via the VAT "
|
||||
#| "reimbursement process."
|
||||
msgid ""
|
||||
"Your VAT ID could not be checked, as the VAT checking service of your "
|
||||
"country is currently not available. We will therefore need to charge you the "
|
||||
"same tax rate as if you did not enter a VAT ID."
|
||||
msgstr ""
|
||||
"Votre numéro de TVA n' a pas pu être vérifié, car le service de contrôle de "
|
||||
"la TVA de votre pays n'est actuellement pas disponible. Nous devons donc "
|
||||
"facturer la TVA sur votre facture. Vous pouvez récupérer le montant de la "
|
||||
"taxe via le processus de remboursement de la TVA."
|
||||
"Votre numéro d'identification TVA n'a pas pu être vérifié, car le service de "
|
||||
"vérification de la TVA de votre pays n'est actuellement pas disponible. Nous "
|
||||
"devrons donc vous facturer le même taux de taxe que si vous n'aviez pas "
|
||||
"saisi de numéro d'identification TVA."
|
||||
|
||||
#: pretix/base/services/tax.py:47 pretix/base/services/tax.py:366
|
||||
#: pretix/base/services/tax.py:393
|
||||
@@ -10144,24 +10142,18 @@ msgid "Ask for VAT ID"
|
||||
msgstr "Demander l'identification TVA"
|
||||
|
||||
#: pretix/base/settings.py:632
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid ""
|
||||
#| "Only works if an invoice address is asked for. VAT ID is never required "
|
||||
#| "and only requested from business customers in the following countries: "
|
||||
#| "{countries}"
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"Only works if an invoice address is asked for. VAT ID is only requested from "
|
||||
"business customers in the following countries: {countries}."
|
||||
msgstr ""
|
||||
"Ne fonctionne que si une adresse de facturation est demandée. Le numéro de "
|
||||
"TVA n’est jamais requis et n’est demandé qu’aux clients professionnels des "
|
||||
"pays suivants : {countries}"
|
||||
"Fonctionne uniquement si une adresse de facturation est demandée. Le numéro "
|
||||
"d'identification TVA n'est demandé qu'aux clients professionnels dans les "
|
||||
"pays suivants : {countries}."
|
||||
|
||||
#: pretix/base/settings.py:651
|
||||
#, fuzzy
|
||||
#| msgid "Require name"
|
||||
msgid "Require VAT ID in"
|
||||
msgstr "Nom requis"
|
||||
msgstr "Exiger un numéro d'identification TVA dans"
|
||||
|
||||
#: pretix/base/settings.py:657
|
||||
msgid ""
|
||||
@@ -10169,6 +10161,10 @@ msgid ""
|
||||
"ID in all countries. VAT ID will be required for all business addresses in "
|
||||
"the selected countries."
|
||||
msgstr ""
|
||||
"Le numéro d'identification TVA est facultatif par défaut, car toutes les "
|
||||
"entreprises ne se voient pas attribuer un numéro d'identification TVA dans "
|
||||
"tous les pays. Le numéro d'identification TVA sera obligatoire pour toutes "
|
||||
"les adresses professionnelles dans les pays sélectionnés."
|
||||
|
||||
#: pretix/base/settings.py:672
|
||||
msgid "Invoice address explanation"
|
||||
@@ -13964,11 +13960,9 @@ msgstr ""
|
||||
"origine."
|
||||
|
||||
#: pretix/base/views/js_helpers.py:41
|
||||
#, fuzzy
|
||||
#| msgid "ID"
|
||||
msgctxt "tax_id_swiss"
|
||||
msgid "UID"
|
||||
msgstr "ID"
|
||||
msgstr "UID"
|
||||
|
||||
#. Translators: Only translate to French (IDE) and Italien (IDI), otherwise keep the same
|
||||
#. Awareness around VAT IDs differes by EU country. For example, in Germany the VAT ID is assigned
|
||||
@@ -13978,35 +13972,27 @@ msgstr "ID"
|
||||
#. number (Partita IVA) and also used on domestic transactions. So someone who never purchased something international
|
||||
#. for their company, might still know the value, if we call it the right way and not just "VAT ID".
|
||||
#: pretix/base/views/js_helpers.py:49
|
||||
#, fuzzy
|
||||
#| msgid "VAT ID"
|
||||
msgctxt "tax_id_italy"
|
||||
msgid "VAT ID / P.IVA"
|
||||
msgstr "Identifiant de TVA"
|
||||
msgstr "Numéro de TVA intracommunautaire"
|
||||
|
||||
#. Translators: Translate to only "P.IVA" in Italian, keep second part as-is in other languages
|
||||
#: pretix/base/views/js_helpers.py:50
|
||||
#, fuzzy
|
||||
#| msgid "VAT ID"
|
||||
msgctxt "tax_id_greece"
|
||||
msgid "VAT ID / TIN"
|
||||
msgstr "Identifiant de TVA"
|
||||
msgstr "Numéro de TVA intracommunautaire / TIN"
|
||||
|
||||
#. Translators: Translate to only "ΑΦΜ" in Greek
|
||||
#: pretix/base/views/js_helpers.py:51
|
||||
#, fuzzy
|
||||
#| msgid "VAT ID"
|
||||
msgctxt "tax_id_spain"
|
||||
msgid "VAT ID / NIF"
|
||||
msgstr "Identifiant de TVA"
|
||||
msgstr "Numéro de TVA intracommunautaire"
|
||||
|
||||
#. Translators: Translate to only "NIF" in Spanish
|
||||
#: pretix/base/views/js_helpers.py:52
|
||||
#, fuzzy
|
||||
#| msgid "VAT ID"
|
||||
msgctxt "tax_id_portugal"
|
||||
msgid "VAT ID / NIF"
|
||||
msgstr "Identifiant de TVA"
|
||||
msgstr "Numéro de TVA intracommunautaire / NIF"
|
||||
|
||||
#: pretix/base/views/tasks.py:185
|
||||
msgid "An unexpected error has occurred, please try again later."
|
||||
@@ -14566,6 +14552,9 @@ msgid ""
|
||||
"Formatting is not supported, as some accounting departments process mail "
|
||||
"automatically and do not handle formatted emails properly."
|
||||
msgstr ""
|
||||
"Le formatage n'est pas pris en charge, car certains services comptables "
|
||||
"traitent automatiquement le courrier et ne gèrent pas correctement les e-"
|
||||
"mails formatés."
|
||||
|
||||
#: pretix/control/forms/event.py:1356
|
||||
msgid ""
|
||||
@@ -15017,7 +15006,7 @@ msgstr "Payé"
|
||||
#: pretix/control/forms/filter.py:1304
|
||||
msgctxt "subevent"
|
||||
msgid "Date doesn't start in selected date range."
|
||||
msgstr ""
|
||||
msgstr "La date ne commence pas dans la plage de dates sélectionnée."
|
||||
|
||||
#: pretix/control/forms/filter.py:1360 pretix/control/forms/filter.py:1827
|
||||
msgid "Shop live and presale running"
|
||||
@@ -29026,6 +29015,9 @@ msgid ""
|
||||
"automatically. We recommend that you rename these in your source file to "
|
||||
"avoid problems during import."
|
||||
msgstr ""
|
||||
"Plusieurs colonnes du fichier CSV portent le même nom et ont été renommées "
|
||||
"automatiquement. Nous vous recommandons de les renommer dans votre fichier "
|
||||
"source afin d'éviter tout problème lors de l'importation."
|
||||
|
||||
#: pretix/control/views/modelimport.py:188
|
||||
msgid "The import was successful."
|
||||
@@ -30716,7 +30708,7 @@ msgstr ""
|
||||
|
||||
#: pretix/plugins/banktransfer/camtimport.py:33
|
||||
msgid "Empty file or unknown format."
|
||||
msgstr ""
|
||||
msgstr "Fichier vide ou format inconnu."
|
||||
|
||||
#: pretix/plugins/banktransfer/payment.py:69
|
||||
msgid ""
|
||||
@@ -33311,16 +33303,17 @@ msgid "Przelewy24"
|
||||
msgstr "Przelewy24"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:417 pretix/plugins/stripe/payment.py:1836
|
||||
#, fuzzy
|
||||
#| msgid "Payment by bank transfer"
|
||||
msgid "Pay by bank"
|
||||
msgstr "Paiement par virement bancaire"
|
||||
msgstr "Payer par virement bancaire"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:422
|
||||
msgid ""
|
||||
"Currently only available for charges in GBP and customers with UK bank "
|
||||
"accounts, and in private preview for France and Germany."
|
||||
msgstr ""
|
||||
"Actuellement disponible uniquement pour les frais en livre sterling et les "
|
||||
"clients disposant d'un compte bancaire au Royaume-Uni, et pour les clients "
|
||||
"en test restreint pour la France et l'Allemagne."
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:429 pretix/plugins/stripe/payment.py:1789
|
||||
msgid "WeChat Pay"
|
||||
@@ -33637,16 +33630,17 @@ msgstr ""
|
||||
"connexion à porter de main."
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1835
|
||||
#, fuzzy
|
||||
#| msgid "PayPal via Stripe"
|
||||
msgid "Pay by bank via Stripe"
|
||||
msgstr "PayPal via Stripe"
|
||||
msgstr "Payer par virement bancaire via Stripe"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1841
|
||||
msgid ""
|
||||
"Pay by bank allows you to authorize a secure Open Banking payment from your "
|
||||
"banking app. Currently available only with a UK bank account."
|
||||
msgstr ""
|
||||
"Le paiement par virement bancaire vous permet d'autoriser un paiement "
|
||||
"sécurisé via Open Banking depuis votre application bancaire. Actuellement "
|
||||
"disponible uniquement avec un compte bancaire britannique."
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1861
|
||||
msgid "PayPal via Stripe"
|
||||
@@ -33665,22 +33659,16 @@ msgstr ""
|
||||
"suédoises Swish et BankID. Veuillez préparer votre application."
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1893
|
||||
#, fuzzy
|
||||
#| msgid "giropay via Stripe"
|
||||
msgid "PromptPay via Stripe"
|
||||
msgstr "giropay via Stripe"
|
||||
msgstr "PromptPay via Stripe"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1898
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "This payment method is available to MobilePay app users in Denmark and "
|
||||
#| "Finland. Please have your app ready."
|
||||
msgid ""
|
||||
"This payment method is available to PromptPay users in Thailand. Please have "
|
||||
"your app ready."
|
||||
msgstr ""
|
||||
"Ce mode de paiement est disponible pour les utilisateurs de l'application "
|
||||
"MobilePay au Danemark et en Finlande. Veuillez préparer votre application."
|
||||
"Ce mode de paiement est disponible pour les utilisateurs de PromptPay en "
|
||||
"Thaïlande. Veuillez préparer votre application."
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1917
|
||||
msgid "TWINT via Stripe"
|
||||
@@ -33995,23 +33983,17 @@ msgid "Confirm payment: %(code)s"
|
||||
msgstr "Confirmer le paiement : %(code)s"
|
||||
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:32
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Please scan the barcode below to complete your WeChat payment. Once you "
|
||||
#| "have completed your payment, you can refresh this page."
|
||||
msgid ""
|
||||
"Please scan the QR code below to complete your PromptPay payment. Once you "
|
||||
"have completed your payment, you can refresh this page."
|
||||
msgstr ""
|
||||
"Veuillez scanner le code-barres ci-dessous pour effectuer votre paiement "
|
||||
"WeChat. Une fois que vous avez effectué votre paiement, vous pouvez "
|
||||
"actualiser cette page."
|
||||
"Veuillez scanner le code QR ci-dessous pour effectuer votre paiement "
|
||||
"PromptPay. Une fois votre paiement effectué, vous pouvez actualiser cette "
|
||||
"page."
|
||||
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:37
|
||||
#, fuzzy
|
||||
#| msgid "Create QR code"
|
||||
msgid "PromptPay QR code"
|
||||
msgstr "Créer un code QR"
|
||||
msgstr "Code QR PromptPay"
|
||||
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:20
|
||||
msgid "Confirming your payment…"
|
||||
@@ -35068,14 +35050,11 @@ msgstr[0] "Vous devez choisir exactement une option de cette catégorie."
|
||||
msgstr[1] "Vous devez choisir les options %(min_count)s de cette catégorie."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:26
|
||||
#, fuzzy, python-format
|
||||
#| msgid "You can choose at most one option from this category."
|
||||
#| msgid_plural ""
|
||||
#| "You can choose up to %(max_count)s options from this category."
|
||||
#, python-format
|
||||
msgid "You can choose one option from this category."
|
||||
msgid_plural "You can choose up to %(max_count)s options from this category."
|
||||
msgstr[0] "Vous pouvez choisir au plus une option de cette catégorie."
|
||||
msgstr[1] "Vous pouvez choisir jusqu' à %(max_count)s dans cette catégorie."
|
||||
msgstr[0] "Vous pouvez choisir une option dans cette catégorie."
|
||||
msgstr[1] "Vous pouvez choisir jusqu'à %(max_count)s options dans cette catégorie."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:34
|
||||
#, python-format
|
||||
@@ -37206,6 +37185,8 @@ msgid ""
|
||||
"Your cart timeout was extended. Please note that some of the prices in your "
|
||||
"cart changed."
|
||||
msgstr ""
|
||||
"Le délai d'expiration de votre panier a été prolongé. Veuillez noter que "
|
||||
"certains prix dans votre panier ont changé."
|
||||
|
||||
#: pretix/presale/views/cart.py:573
|
||||
msgid "Your cart timeout was extended."
|
||||
|
||||
@@ -656,6 +656,11 @@ LOGGING = {
|
||||
'handlers': ['null'],
|
||||
'propagate': False,
|
||||
},
|
||||
'celery.utils.functional': {
|
||||
'handlers': ['file', 'console'],
|
||||
'level': 'INFO', # Do not output all the queries
|
||||
'propagate': False,
|
||||
},
|
||||
'django.db.backends': {
|
||||
'handlers': ['file', 'console'],
|
||||
'level': 'INFO', # Do not output all the queries
|
||||
|
||||
@@ -227,7 +227,9 @@ def test_placeholder_html_rendering_from_string(env):
|
||||
"Event website: [{event}](https://example.org/{event_slug})\n\n"
|
||||
"Other website: [{event}]({meta_Website})\n\n"
|
||||
"URL: {url}\n\n"
|
||||
"URL with text: <a href=\"{url}\">Test</a>"
|
||||
"URL with text: <a href=\"{url}\">Test</a>\n\n"
|
||||
"URL with params: https://example.com/form?action=foo&eventid={event_slug}\n\n"
|
||||
"URL with params and text: [Link & Text](https://example.com/form?action=foo&eventid={event_slug})\n\n"
|
||||
})
|
||||
djmail.outbox = []
|
||||
event, user, organizer = env
|
||||
@@ -249,6 +251,8 @@ def test_placeholder_html_rendering_from_string(env):
|
||||
assert '**Meta**: *Beep*' in djmail.outbox[0].body
|
||||
assert 'URL: https://google.com' in djmail.outbox[0].body
|
||||
assert 'URL with text: <a href="https://google.com">Test</a>' in djmail.outbox[0].body
|
||||
assert 'URL with params: https://example.com/form?action=foo&eventid=dummy' in djmail.outbox[0].body
|
||||
assert 'URL with params and text: [Link & Text](https://example.com/form?action=foo&eventid=dummy)' in djmail.outbox[0].body
|
||||
assert '<' not in djmail.outbox[0].body
|
||||
assert '&' not in djmail.outbox[0].body
|
||||
html = _extract_html(djmail.outbox[0])
|
||||
@@ -272,3 +276,13 @@ def test_placeholder_html_rendering_from_string(env):
|
||||
r'URL with text: <a href="https://google.com" rel="noopener" style="[^"]+" target="_blank">Test</a>',
|
||||
html
|
||||
)
|
||||
assert re.search(
|
||||
r'URL with params: <a href="https://example.com/form\?action=foo&eventid=dummy" rel="noopener" '
|
||||
r'style="[^"]+" target="_blank">https://example.com/form\?action=foo&eventid=dummy</a>',
|
||||
html
|
||||
)
|
||||
assert re.search(
|
||||
r'URL with params and text: <a href="https://example.com/form\?action=foo&eventid=dummy" rel="noopener" '
|
||||
r'style="[^"]+" target="_blank">Link & Text</a>',
|
||||
html
|
||||
)
|
||||
|
||||
@@ -2465,6 +2465,16 @@ class OrderChangeManagerTests(TestCase):
|
||||
assert nop.price == Decimal('12.00')
|
||||
assert nop.subevent == se1
|
||||
|
||||
@classscope(attr='o')
|
||||
def test_add_item_result_value(self):
|
||||
res_shirt = self.ocm.add_position(self.shirt, None, None, None)
|
||||
res_ticket2 = self.ocm.add_position(self.ticket2, None, None, None)
|
||||
with self.assertRaises(RuntimeError):
|
||||
_ = res_ticket2.position
|
||||
self.ocm.commit()
|
||||
assert res_shirt.position.item == self.shirt
|
||||
assert res_ticket2.position.item == self.ticket2
|
||||
|
||||
@classscope(attr='o')
|
||||
def test_add_item_with_rounding(self):
|
||||
self.order.tax_rounding_mode = "sum_by_net"
|
||||
|
||||
Reference in New Issue
Block a user