Change ConferenceRegistration.payconfirmedat to timestamptz
authorVik Fearing <vikreykja@gmail.com>
Tue, 30 Jan 2018 12:12:47 +0000 (13:12 +0100)
committerMagnus Hagander <magnus@hagander.net>
Thu, 1 Feb 2018 15:36:05 +0000 (16:36 +0100)
postgresqleu/confreg/admin.py
postgresqleu/confreg/invoicehandler.py
postgresqleu/confreg/migrations/0017_payconfirmedat_timestamp.py [new file with mode: 0644]
postgresqleu/confreg/models.py
postgresqleu/confreg/reporting.py
postgresqleu/confreg/views.py

index 70cab5692524830e42eb12f9efea74810be698a7..58008455b6752d619d8f127b905ce2223240b9ea 100644 (file)
@@ -170,7 +170,7 @@ class ConferenceRegistrationAdmin(admin.ModelAdmin):
                # anyway...
                num = 0
                for reg in queryset.filter(payconfirmedat__isnull=True):
-                       reg.payconfirmedat = datetime.today()
+                       reg.payconfirmedat = datetime.now()
                        reg.payconfirmedby = request.user.username
                        reg.save()
                        notify_reg_confirmed(reg)
index d4c0ecd30310f0f48fee68899504127e374ac932..627c2fe74f34c0859343d7d10e4d5f0104c55899 100644 (file)
@@ -27,7 +27,7 @@ class InvoiceProcessor(object):
                if reg.payconfirmedat:
                        raise Exception("Registration already paid")
 
-               reg.payconfirmedat = datetime.today()
+               reg.payconfirmedat = datetime.now()
                reg.payconfirmedby = "Invoice paid"
                reg.save()
                notify_reg_confirmed(reg)
@@ -137,7 +137,7 @@ class BulkInvoiceProcessor(object):
 
                # Confirm all related ones
                for r in bp.conferenceregistration_set.all():
-                       r.payconfirmedat = datetime.today()
+                       r.payconfirmedat = datetime.now()
                        r.payconfirmedby = "Bulk paid"
                        r.save()
                        notify_reg_confirmed(r)
@@ -247,7 +247,7 @@ class AddonInvoiceProcessor(object):
                if order.payconfirmedat:
                        raise Exception("Additional options already paid")
 
-               order.payconfirmedat = datetime.today()
+               order.payconfirmedat = datetime.now()
                if order.newregtype:
                        order.reg.regtype = order.newregtype
 
diff --git a/postgresqleu/confreg/migrations/0017_payconfirmedat_timestamp.py b/postgresqleu/confreg/migrations/0017_payconfirmedat_timestamp.py
new file mode 100644 (file)
index 0000000..1c89c9f
--- /dev/null
@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('confreg', '0016_separate_registrator'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='conferenceregistration',
+            name='payconfirmedat',
+            field=models.DateTimeField(null=True, verbose_name=b'Payment confirmed', blank=True),
+        ),
+    ]
index 7d10003a8a57b54736ecb673b63a434155ef8837..c5ea4ed540dd975bf49dbe482bc05fa64392d06b 100644 (file)
@@ -379,7 +379,7 @@ class ConferenceRegistration(models.Model):
        shareemail = models.BooleanField(null=False, blank=False, default=False, verbose_name="Share e-mail address with sponsors")
 
        # Admin fields!
-       payconfirmedat = models.DateField(null=True, blank=True, verbose_name="Payment confirmed")
+       payconfirmedat = models.DateTimeField(null=True, blank=True, verbose_name="Payment confirmed")
        payconfirmedby = models.CharField(max_length=16, null=True, blank=True, verbose_name="Payment confirmed by")
        created = models.DateTimeField(null=False, blank=False, verbose_name="Registration created")
        lastmodified = models.DateTimeField(null=False, blank=False, auto_now=True)
index 897f07c2c07ff417601ae4c42727388aadf32610..5ca3dc74c1f66315b640b757543d5722f827f1f0 100644 (file)
@@ -95,7 +95,7 @@ class SingleConferenceReport(object):
                self.curs = connection.cursor()
 
        def run(self):
-               self.curs.execute("SELECT max(startdate-payconfirmedat), min(startdate-payconfirmedat),max(startdate) FROM confreg_conferenceregistration r INNER JOIN confreg_conference c ON r.conference_id=c.id WHERE r.conference_id=%(id)s AND r.payconfirmedat IS NOT NULL", {
+               self.curs.execute("SELECT max(startdate-payconfirmedat::date), min(startdate-payconfirmedat::date),max(startdate) FROM confreg_conferenceregistration r INNER JOIN confreg_conference c ON r.conference_id=c.id WHERE r.conference_id=%(id)s AND r.payconfirmedat IS NOT NULL", {
                        'id': self.conference.id
                })
                (max,min,startdate) = self.curs.fetchone()
@@ -122,11 +122,11 @@ class ConfirmedRegistrationsReport(MultiConferenceReport):
                super(ConfirmedRegistrationsReport, self).__init__(title,'Number of registrations',conferences)
 
        def maxmin(self):
-               self.curs.execute("SELECT max(startdate-payconfirmedat), min(startdate-payconfirmedat) FROM confreg_conference c INNER JOIN confreg_conferenceregistration r ON c.id=r.conference_id WHERE c.id=ANY(%(idlist)s) AND r.payconfirmedat IS NOT NULL", {'idlist': [c.id for c in self.conferences]})
+               self.curs.execute("SELECT max(startdate-payconfirmedat::date), min(startdate-payconfirmedat::date) FROM confreg_conference c INNER JOIN confreg_conferenceregistration r ON c.id=r.conference_id WHERE c.id=ANY(%(idlist)s) AND r.payconfirmedat IS NOT NULL", {'idlist': [c.id for c in self.conferences]})
                return self.curs.fetchone()
 
        def fetch_all_data(self, conference, min, max):
-               self.curs.execute("WITH t AS (SELECT startdate-payconfirmedat AS d, count(*) AS num FROM confreg_conferenceregistration r INNER JOIN confreg_conference c ON c.id=r.conference_id WHERE c.id=%(id)s AND r.payconfirmedat IS NOT NULL GROUP BY d), tt AS (SELECT g.g, num FROM t RIGHT JOIN generate_series (%(min)s, %(max)s) g(g) ON g.g=t.d) SELECT COALESCE(sum(num) OVER (ORDER BY g DESC),0)::integer FROM tt ORDER BY g DESC", {
+               self.curs.execute("WITH t AS (SELECT startdate-payconfirmedat::date AS d, count(*) AS num FROM confreg_conferenceregistration r INNER JOIN confreg_conference c ON c.id=r.conference_id WHERE c.id=%(id)s AND r.payconfirmedat IS NOT NULL GROUP BY d), tt AS (SELECT g.g, num FROM t RIGHT JOIN generate_series (%(min)s, %(max)s) g(g) ON g.g=t.d) SELECT COALESCE(sum(num) OVER (ORDER BY g DESC),0)::integer FROM tt ORDER BY g DESC", {
                        'id': conference.id,
                        'min': min,
                        'max': max,
@@ -174,7 +174,7 @@ class RegistrationTypesReport(SingleConferenceReport):
                        'id': self.conference.id,
                })
                for regid, regtype in self.curs.fetchall():
-                       self.curs.execute("WITH t AS (SELECT %(startdate)s-payconfirmedat AS d, count(*) AS num FROM confreg_conferenceregistration r WHERE r.conference_id=%(cid)s AND r.payconfirmedat IS NOT NULL AND r.regtype_id=%(rid)s GROUP BY d), tt AS (SELECT g.g, num FROM t RIGHT JOIN generate_series (%(min)s, %(max)s) g(g) ON g.g=t.d) SELECT COALESCE(sum(num) OVER (ORDER BY g DESC),0)::integer FROM tt ORDER BY g DESC", {
+                       self.curs.execute("WITH t AS (SELECT %(startdate)s-payconfirmedat::date AS d, count(*) AS num FROM confreg_conferenceregistration r WHERE r.conference_id=%(cid)s AND r.payconfirmedat IS NOT NULL AND r.regtype_id=%(rid)s GROUP BY d), tt AS (SELECT g.g, num FROM t RIGHT JOIN generate_series (%(min)s, %(max)s) g(g) ON g.g=t.d) SELECT COALESCE(sum(num) OVER (ORDER BY g DESC),0)::integer FROM tt ORDER BY g DESC", {
                                'cid': self.conference.id,
                                'min': min,
                                'max': max,
@@ -190,7 +190,7 @@ class CountryReport(SingleConferenceReport):
                        'id': self.conference.id,
                })
                for countryid, in self.curs.fetchall():
-                       self.curs.execute("WITH t AS (SELECT %(startdate)s-payconfirmedat AS d, count(*) AS num FROM confreg_conferenceregistration r WHERE r.conference_id=%(cid)s AND r.payconfirmedat IS NOT NULL AND r.country_id=%(country)s GROUP BY d), tt AS (SELECT g.g, num FROM t RIGHT JOIN generate_series (%(min)s, %(max)s) g(g) ON g.g=t.d) SELECT COALESCE(sum(num) OVER (ORDER BY g DESC),0)::integer FROM tt ORDER BY g DESC", {
+                       self.curs.execute("WITH t AS (SELECT %(startdate)s-payconfirmedat::date AS d, count(*) AS num FROM confreg_conferenceregistration r WHERE r.conference_id=%(cid)s AND r.payconfirmedat IS NOT NULL AND r.country_id=%(country)s GROUP BY d), tt AS (SELECT g.g, num FROM t RIGHT JOIN generate_series (%(min)s, %(max)s) g(g) ON g.g=t.d) SELECT COALESCE(sum(num) OVER (ORDER BY g DESC),0)::integer FROM tt ORDER BY g DESC", {
                                'cid': self.conference.id,
                                'min': min,
                                'max': max,
@@ -206,7 +206,7 @@ class AdditionalOptionsReport(SingleConferenceReport):
                        'id': self.conference.id,
                })
                for optionid, optionname in self.curs.fetchall():
-                       self.curs.execute("WITH t AS (SELECT startdate-payconfirmedat AS d, count(*) AS num FROM confreg_conferenceregistration r INNER JOIN confreg_conference c ON c.id=r.conference_id INNER JOIN confreg_conferenceregistration_additionaloptions rao ON rao.conferenceregistration_id=r.id WHERE c.id=%(cid)s AND r.payconfirmedat IS NOT NULL AND rao.conferenceadditionaloption_id=%(aoid)s GROUP BY d), tt AS (SELECT g.g, num FROM t RIGHT JOIN generate_series (%(min)s, %(max)s) g(g) ON g.g=t.d) SELECT COALESCE(sum(num) OVER (ORDER BY g DESC),0)::integer FROM tt ORDER BY g DESC", {
+                       self.curs.execute("WITH t AS (SELECT startdate-payconfirmedat::date AS d, count(*) AS num FROM confreg_conferenceregistration r INNER JOIN confreg_conference c ON c.id=r.conference_id INNER JOIN confreg_conferenceregistration_additionaloptions rao ON rao.conferenceregistration_id=r.id WHERE c.id=%(cid)s AND r.payconfirmedat IS NOT NULL AND rao.conferenceadditionaloption_id=%(aoid)s GROUP BY d), tt AS (SELECT g.g, num FROM t RIGHT JOIN generate_series (%(min)s, %(max)s) g(g) ON g.g=t.d) SELECT COALESCE(sum(num) OVER (ORDER BY g DESC),0)::integer FROM tt ORDER BY g DESC", {
                                'cid': self.conference.id,
                                'min': min,
                                'max': max,
index ff9f73f97bbb1fe980e4e888a6550528d0cd70cf..81bb2be0912d0e759e21d2eed692eccb462c739d 100644 (file)
@@ -1458,7 +1458,7 @@ def confirmreg(request, confname):
                                # Paid in total with vouchers, or completely free
                                # registration type. So just flag the registration
                                # as confirmed.
-                               reg.payconfirmedat = datetime.today()
+                               reg.payconfirmedat = datetime.now()
                                reg.payconfirmedby = "no payment reqd"
                                reg.save()
                                notify_reg_confirmed(reg)