summaryrefslogtreecommitdiff
path: root/postgresqleu/confreg/invoicehandler.py
AgeCommit message (Collapse)Author
2024-11-06Include invoice num in log of invoice created/canceled for regsMagnus Hagander
2023-12-22s/registraiton/registration/Andreas Scherbaum
2023-11-27Don't attempt to return users to non-existant transferMagnus Hagander
When a registration transfer invoice is completed, if they payment confirmation notification hits before the user clicks onwards, we can't find the transfer record because it's been removed. In this case, just redirect the user back to the invoice so they get something other than a crash.
2023-11-01Implement pending registration transfers with invoicesMagnus Hagander
Instead of requiring registration transfer invoicing to be full manual, create a new object that represents a pending transfer. So instead of transfering, the admin will create a pending transfer and have it auto-generate an invoice. That's left as pending until the invoice is paid, at which point the transfer is automatically completed.
2023-04-16Fix the fix for unlinking prepaid vouchers on invoice cancellationMagnus Hagander
fec92794 fixed so that we tried to properly unlik prepaid vouchers when invoices expired on regular invoices as well, and not just on bulk invoices. But this also exposed another bug whereby it could fail on registrations with discount codes and not prepaid vouchers (this bug existed for bulk payments as well, but seems to have slipped under the radar, but once we had the same code for regular registrations it happened more often)
2023-03-25Avoid saving unnecessary registration fields in invoice processingMagnus Hagander
ConferenceRegistration is a table with many fields, so avoid saving all of it during invoice procesisng, when only 2-3 fields are actually modified.
2023-03-25Properly unlink prepaid voucher on invoice cancellationMagnus Hagander
Normally an invoice with a prepaid voucher is never generated, but if the user *also* adds an additional option, it can be. And if this invoice was then canceled (or expired), the voucher field would be cleared from the registration, but not actually unlinked from the user and therefor listed as used if viewed from the voucher list, and not reusable. It was correctly unlinked if a bulk payment was used, but not for an individual registration. So copy the method from the bulk invoice processor.
2022-09-19Re-implement the additional options removal for canceled invoicesMagnus Hagander
This was previously built to use the generic function for expiring additional options. But since the cancelation of the invoice itself would update the lastmodified field on the registration, this would never work -- the expiry would be based on the current time instead, mening it would never trigger. Instead do the expiry directly in the invoice cancelation handler. As a bonus, this means the attendee doesn't get multiple emails saying they were canceled, just one.
2022-03-18Send notification when invoice expires for waitlisted registrationMagnus Hagander
The effect is the same as when the waitlist entry expires, which does send a notification, so make sure we send a notification in both cases.
2020-03-23Fix typosMagnus Hagander
2020-03-17Add basic registration activity logMagnus Hagander
This adds a basic log to each registration of activity that happens on it, from creation until possible canceling. More details can be added as we go, but tihs is a good start. One big improvement needed is to track exactly *which* fields changed and to/from what when making changes to a registration (that would help with support cases).
2020-03-17Track canceled registrationsMagnus Hagander
Instead of deleting a registration when it's canceled, track when it was canceled in a new field, canceledat. This makes it possible to keep track of who the speakers are and potentially email them in the future. There are two main things that need to get done that are not included in this commit: 1. Reports need to be adjused. Some are, but all need to be summarized. In particular, time reports need to be properly taught about it and probably given the option to actually graph it. 2. Cross-conference email need to be given the option to include or not include canceled registrations.
2020-03-12Replace datetime.now() with timezone.now()Magnus Hagander
As a step on the way to better timezone support, use the django function timezone.now() instead of datetime.now(). As long as we haven't enabled timezones globally this becomes a no-op and does exactly what it did before, but once timezones are enabled it will generate datetimes that are aware of this. No functionality change but gets a lot of boiler-plate out of the way making the verification of the rest of the timezone work easier.
2020-02-26Make bulk payments paidat and createdat be datetimeMagnus Hagander
Previously they were just date, whereas both the invoices and individual registrations tracked by datetime. Fix this inconsistency. For old entries they will show up as time 00:00:00. These fields were almost unused in the code -- they are only used to show the status of a bulk payment, and not actually used in any processing.
2019-06-29Fix cancellation of invoices that had discount codesMagnus Hagander
The code previously removed the code linking which dealt with the number of codes available, but missed to remove the code from the reg itself. That resultet in the later step failing to find that discount voucher.
2019-05-04Centralize subject prefixing for conference emailsMagnus Hagander
Instead of doing the [Conference] prefix at every sending point (and getting it inconsistent), do so in the new send_conference_mail() function which takes care of almost every case of sending.
2019-05-03Move conference mail templates to jinjaMagnus Hagander
Moving these templates, which are mostly simple textfile, into jinja makes it possible to override the contents of these emails on a per-conference basis, just like any other templates.
2019-03-29Fix copy/paste errorMagnus Hagander
Caused exception on cancelled bulk payment invoices (which was luckily very uncommon).
2019-03-28Add backend view for multiregs/bulk paymentsMagnus Hagander
Add a list of the created multiregs for a conference to the dashboard. Also update the invoice system to properly link back to this page when going back (makes it much easier to find)
2019-02-09Remove old style bulk paymentsMagnus Hagander
This is replaced with the new style multi-registrations that have turned out to be a lot closer to what the people using them actually wanted. Internally the concept of bulk payments still exist, and the data models remain unchanged. The user visible interface for "bulk payment" is simply removed, and all references to it in user-facing messages are replaced with "multi-registration".
2019-01-04Fix sibling importsMagnus Hagander
Sibling imports should be prefixed with a period. Good idea in py2, will eventually become required in py3, so another small step.
2018-12-28Configurable notifications for conferencesMagnus Hagander
Create a special notification address that is used for all admin notifications, instead of contactaddr (defaults to the same one for old conferences). This also updates all existing calling points that sent from contacddr->contactaddr to instead use the notificatino address, but the old contact address is still used as the sending one when sending *to* attendees. Make it configurable on a per conference basis to get registration notifications. If enabled, the notify address will get an email whenever somebody registers or cancels a registration (on cancel including the reason). In passing, re-order and re-group some of the fields on the conference configuration page to make it more readable as it's growing.
2018-12-28pep8 fixes for previous commits....Magnus Hagander
2018-12-28Re-think how refunds are handledMagnus Hagander
Basically reverse the flow - instead of having the invoice system refund an invoice and trigger an action in the attached systems (such as confreg or membership) to remove something, have the actual end systems like confreg handle the cancelation and just tell the invoice system what the refund is. This makes the system a lot more flexible and makes it possible to handle things like multi-attendee invoices that get partially refunded more than once. Other than the order-reversal: 1. Each invoice can now have multiple refund notes. In doing this, the view of "refunded invoices" has also been retired, as it makes less sense now. 2. Refund notices now include a "previously refunded" section if they are anything except the first refund note, to track across multiple refunds. This creates a breaking change in the API for PDF generation, but recent other updates to the skinning broke them all anyway. 3. For confreg, implement "refund patterns". This is a set of rules with "refund x% minus fees of y" rules that can be applied when canceling a registration. They are applied to the individual costs being refunded. They can also be given a start/end date during which they should be used, which is used as a hint in the UI.
2018-12-14Fix blankline related warningsMagnus Hagander
2018-12-14Fix spacing around parameter namesMagnus Hagander
Surprisingly many of these were pure copy/paste errors from the same source...
2018-12-14Fix spacing around operatorsMagnus Hagander
2018-12-14Replace tabs with spacesMagnus Hagander
In an effort to close up with PEP8, we should use spaces for indent rather than tabs... Time to update your editor config!
2018-09-07Fix refunding of additional options invoicesMagnus Hagander
When there is no way to automatically remove something because of a refund, don't block the refund completely. Instead allow it to go through and leave it up to the operator to manually verify.
2018-04-13Fix typoMagnus Hagander
2018-03-08Add basic ability to cancel registrations without invoices/refundsMagnus Hagander
For registrations that have a single invoice *and* are eligible for a refund, we already had working cancelation. But it did not work for bulk invoices or non-refundable cancelations, which both required manual work through /admin/ to cancel them. This still does not automate bulk invoice refunding, but at least provides the ability to perform such refunds as two-step operations, and it fully supports canceling without refund. This also adds sending of email on all cancelations, both those that are done without refund, and those that are done with a refund like before. Previously, attendees of those would only receive an invoice refund notice. We now also send an explicit "your registration has been canceled" email, if welcome emails have been enabled for the conference.
2018-02-19Properly flag vouchercodes as unused on canceled bulk invoicesMagnus Hagander
This was very uncommon before, but now that we use bulk invoices for multi-reg processing it becomes more common, and this case shows up more often. We need to mark the vouchercodes as unused in the system, otherwise we will fail to generate a new invoice for the same registration once one has been canceled.
2018-02-01Change ConferenceRegistration.payconfirmedat to timestamptzVik Fearing
2018-01-29Implement new workflow for registering multiple attendeesMagnus Hagander
In yet another attempt to make it easier for the cases where either somebody wants to register for multiple colleagues, or just for a single colleague who cannot register themselves. This separates out the registrator role from the attendee role in the database. Regular registrations still work the same way, and sets registrator and attendee to the same. But it's now also possible to, using a separate form for each one, make multiple registrations for other people, by filling out all their details (including email). These registrations will then automatically generate a bulk invoice. When the bulk invoice is paid, the registrations attached to it will get marked as confirmed by the system. They will then also be attached to the community account of the attendee, if one exists. If one does not exist, and email is sent to the attendee with a link using the secret registration token, that makes it possible to attach this registration to a different account. This means that the user can sign up for an account (especially easy now that we have oauth logins available) after the registration has been created, or they can attach it to a different account if they already have one but it has a different email address than used on the registration.
2017-12-27The Great URL Rename (TM) projectMagnus Hagander
This commit changes almost every confreg URL in the system, from using the pattern /events/action/conference to using /events/conference/action. E.g. /events/register/someconf/ to /events/someconf/register/. The reason for this is that all pages that belong to one event now live under /events/eventname/, making it more predictable and enablinge some easier changes in the future as well. Redirects are implemented for all the older URLs (except there is of course likely something missed somewhere...).
2017-10-28Fix formatting of "bulk invoice refunded" messageMagnus Hagander
2017-10-22Fix another silly typoMagnus Hagander
2017-10-22Fix missing importMagnus Hagander
2017-10-19Don't cancel all registration on a bulk payment at refundMagnus Hagander
If we do a partial refund on a bulk payment, we don't want to cancel all registrations. Instead, just generate a notification email, and handle the actual cancellation of the registrations manually.
2017-04-17Introduce send_template_mailStephen Frost
This introduces the function of the same name from the pgweb code base (though it isn't identical, to be clear). This function is to be used when rendering a text file into an email. There is a helper function template_to_string() which is also added and can be used if a string result is needed. The primary different here is that the variables set in util/context_processor:settings_context are included in the hash automatically, so those settings do not need to be explicitly set by the callers and the templates can expect them to be available. Using that, this change also includes changes to move away from hard-coded values like 'PostgreSQL Europe' in favor of using the variables set in settings.py/local_settings.py in the text templates. This will allow others to re-use the exisitng templates and not have to develop and maintain their own going forward.
2017-01-31Remove registrations after an invoice is refundedMagnus Hagander
Previously we just unconfirmed them, which made sense before we had reminders. But now that we have reminders, somebody who canceled their attendance and had the invoice refunded would end up getting reminders to complete their registration.
2016-07-13Clear out discount and voucher codes when an invoice is cancelledMagnus Hagander
Previously if somebodys early bird invoice was canceled, it would still eat up a "slot" for the discount codes.
2016-01-21Send email to attendees involved in bulk pay operationsMagnus Hagander
1. When a registration gets added to a bulk payment invoice, send an email to the attendee about this, including information about who did it, and that they can no longer modify their registration. 2. When a bulk payment invoice is canceled (manually or automatically), notify all the attendants on in that it happened and that they are NOT confirmed for the conference, and whom to contact. 3. Same for refunded invoices when their registration is also canceled.
2016-01-16Remove all support for mixed content (http/https)Magnus Hagander
Instead, as of now we run all content over https always. The enforcment of this is placed in the webserver, which makes it impossible to miss it on some feature. This retires the setting SITEBASE_SSL, and changes SITEBASE to be https. It also retires DISABLE_HTTPS_REDIRECTS, which has no use anymore. And finally, SESSION_COOKIE_SECURE is now set by default, and needs to be turned off in local development environments.
2015-09-05Automatically remove additional options from old unconfirmed registrationsMagnus Hagander
Registrations that don't have invoices or bulk paymens still "lock" additional options from others. And some attendees never complete their registrations at all. With this new cronjob enabled, those will also respect the "invoice autocancel hours" parameter from the additional options, and be removed after that time. As there is no actual registration, the only thing that happens is that the current registration is edited and the additional option removed, the rest of it remains. And as long as nobody else manages to register in between, the attendee can go back and re-register for it as long as it's still available. Expiry also happens automatically when an invoice is cancelled, as it makes more sense to do that right away rather than waiting for the next cronjob to run, for consistency. This adds a "lastmodified" field to all conference registrations, which is used to track this and other changes. So we only track the changes on the level of the whole registration, and thus won't catch people who go in and edit their address for example, without modifying the options. But the target with these removals are those that have completely abandoned their registration, which will be properly handled.
2015-08-14Add basic waitlist managementMagnus Hagander
This allows a maximum number of attendees before waitlist to be specified on the conference record. Once this number is reached, people trying to register will automatically be given the option to sign up on the waitlist instead. They can then be approved one by one off the waitlist with a limited time offer to finish the signup. If the time expires, they get moved back to the bottom of the waitlist, and then we repeat the process. The limit should normally be set a bit below the actual limit of the venue, so that we can control who gets the last signups. For example, we might need to reserve some for a speaker or a sponsor.
2015-07-08Add ability to post-order additional optionsMagnus Hagander
Also update the registration dashboard to show some interesting details about the registration, instead of just a placeholder. This makes it possible to order things like training even if the main registration has completed, to help people who change their mind. This will also automatically upgrade the reservation to one that is required by the options, if necessary. If the upgraded registration type is more expensive than the current one, automatically add the cost difference to the invoice. To control this, implement the option "upsellable" for each additional option, without which an option cannot be added, and an option "upsell_target" on a registration type, without which a registration cannot be changed to that type.
2015-01-02Add support for sending an email upon registration completionMagnus Hagander
For each conference it's now possible to define a message text that will be sent out to all attendees once their registration is confirmed (either by invoice payment, bulk invoice payment, no invoice needed, or manual processing). This should help with the complaints from people who are used to getting this (the status was already visible on the website), as well as give a chance to include some extra information. With this we can now replace the mailman integration with builtin emails whenever needed.
2014-01-01Remove unused code and fix bugs uncovered by explicit importingMagnus Hagander
2013-09-28Add funcitonality to flag an invoice as refundedMagnus Hagander
This will for example remove a conference registration automatically, but most importantly it let's us keep track of our actual invoice payments properly.