forked from CGM_Public/pretix_original
Allow to set a custom payment date for manual payments
This commit is contained in:
@@ -1172,7 +1172,8 @@ class OrderPayment(models.Model):
|
|||||||
self.order.log_action('pretix.event.order.overpaid', {}, user=user, auth=auth)
|
self.order.log_action('pretix.event.order.overpaid', {}, user=user, auth=auth)
|
||||||
order_paid.send(self.order.event, order=self.order)
|
order_paid.send(self.order.event, order=self.order)
|
||||||
|
|
||||||
def confirm(self, count_waitinglist=True, send_mail=True, force=False, user=None, auth=None, mail_text='', ignore_date=False, lock=True):
|
def confirm(self, count_waitinglist=True, send_mail=True, force=False, user=None, auth=None, mail_text='',
|
||||||
|
ignore_date=False, lock=True, payment_date=None):
|
||||||
"""
|
"""
|
||||||
Marks the payment as complete. If possible, this also marks the order as paid if no further
|
Marks the payment as complete. If possible, this also marks the order as paid if no further
|
||||||
payment is required
|
payment is required
|
||||||
@@ -1203,7 +1204,7 @@ class OrderPayment(models.Model):
|
|||||||
return
|
return
|
||||||
|
|
||||||
locked_instance.state = self.PAYMENT_STATE_CONFIRMED
|
locked_instance.state = self.PAYMENT_STATE_CONFIRMED
|
||||||
locked_instance.payment_date = now()
|
locked_instance.payment_date = payment_date or now()
|
||||||
locked_instance.info = self.info # required for backwards compatibility
|
locked_instance.info = self.info # required for backwards compatibility
|
||||||
locked_instance.save(update_fields=['state', 'payment_date', 'info'])
|
locked_instance.save(update_fields=['state', 'payment_date', 'info'])
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ from django.utils.timezone import now
|
|||||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
||||||
|
|
||||||
from pretix.base.forms import I18nModelForm, PlaceholderValidator
|
from pretix.base.forms import I18nModelForm, PlaceholderValidator
|
||||||
|
from pretix.base.forms.widgets import DatePickerWidget
|
||||||
from pretix.base.models import InvoiceAddress, ItemAddOn, Order, OrderPosition
|
from pretix.base.models import InvoiceAddress, ItemAddOn, Order, OrderPosition
|
||||||
from pretix.base.models.event import SubEvent
|
from pretix.base.models.event import SubEvent
|
||||||
from pretix.base.services.pricing import get_price
|
from pretix.base.services.pricing import get_price
|
||||||
@@ -116,6 +117,12 @@ class MarkPaidForm(ConfirmPaymentForm):
|
|||||||
localize=True,
|
localize=True,
|
||||||
label=_('Payment amount'),
|
label=_('Payment amount'),
|
||||||
)
|
)
|
||||||
|
payment_date = forms.DateField(
|
||||||
|
required=True,
|
||||||
|
label=_('Payment date'),
|
||||||
|
widget=DatePickerWidget(),
|
||||||
|
initial=now
|
||||||
|
)
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
<input type="hidden" name="status" value="p" />
|
<input type="hidden" name="status" value="p" />
|
||||||
{% bootstrap_form_errors form %}
|
{% bootstrap_form_errors form %}
|
||||||
{% bootstrap_field form.amount layout='horizontal' %}
|
{% bootstrap_field form.amount layout='horizontal' %}
|
||||||
|
{% bootstrap_field form.payment_date layout='horizontal' %}
|
||||||
{% if form.force %}
|
{% if form.force %}
|
||||||
{% bootstrap_field form.force layout='horizontal' horizontal_label_class='sr-only' horizontal_field_class='col-md-12' %}
|
{% bootstrap_field form.force layout='horizontal' horizontal_label_class='sr-only' horizontal_field_class='col-md-12' %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import logging
|
|||||||
import mimetypes
|
import mimetypes
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
from datetime import timedelta
|
from datetime import datetime, time, timedelta
|
||||||
from decimal import Decimal, DecimalException
|
from decimal import Decimal, DecimalException
|
||||||
|
|
||||||
import pytz
|
import pytz
|
||||||
@@ -24,7 +24,7 @@ from django.utils import formats
|
|||||||
from django.utils.formats import date_format
|
from django.utils.formats import date_format
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.utils.http import is_safe_url
|
from django.utils.http import is_safe_url
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import make_aware, now
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django.views.generic import (
|
from django.views.generic import (
|
||||||
DetailView, FormView, ListView, TemplateView, View,
|
DetailView, FormView, ListView, TemplateView, View,
|
||||||
@@ -862,8 +862,15 @@ class OrderTransition(OrderView):
|
|||||||
fee=None
|
fee=None
|
||||||
)
|
)
|
||||||
|
|
||||||
|
payment_date = None
|
||||||
|
if self.mark_paid_form.cleaned_data['payment_date'] != now().date():
|
||||||
|
payment_date = make_aware(datetime.combine(
|
||||||
|
self.mark_paid_form.cleaned_data['payment_date'],
|
||||||
|
time(hour=0, minute=0, second=0)
|
||||||
|
), self.order.event.timezone)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
p.confirm(user=self.request.user, count_waitinglist=False,
|
p.confirm(user=self.request.user, count_waitinglist=False, payment_date=payment_date,
|
||||||
force=self.mark_paid_form.cleaned_data.get('force', False))
|
force=self.mark_paid_form.cleaned_data.get('force', False))
|
||||||
except Quota.QuotaExceededException as e:
|
except Quota.QuotaExceededException as e:
|
||||||
p.state = OrderPayment.PAYMENT_STATE_FAILED
|
p.state = OrderPayment.PAYMENT_STATE_FAILED
|
||||||
|
|||||||
Reference in New Issue
Block a user