Commit graph

390 commits

Author SHA1 Message Date
Christopher Neugebauer
9c289acadd Starts documenting the public views. 2016-04-25 10:15:13 +10:00
Christopher Neugebauer
32ffa25895 Adds util.all_arguments_optional 2016-04-25 09:57:36 +10:00
Christopher Neugebauer
b0d1f69f1a Writes the integration guide 2016-04-25 09:49:19 +10:00
Christopher Neugebauer
12e04c248f Credit notes are now generated when invoices are overpaid, or invoices are paid into void or refunded invoices. Closes #37. 2016-04-25 08:26:54 +10:00
Christopher Neugebauer
9a4574ef2c DRYs up test_invoice a bit 2016-04-25 08:25:19 +10:00
Christopher Neugebauer
9f72b67510 Uses for_id_or_404 in views.py 2016-04-25 07:20:41 +10:00
Christopher Neugebauer
ca8f67c2f3 Adds for_id, which lets you get an InvoiceController or CreditNoteController by the ID of the invoice/credit note/. Closes #38. 2016-04-25 07:20:41 +10:00
Christopher Neugebauer
3b3744578e First pass at the payments documentation. 2016-04-24 21:42:20 +10:00
Christopher Neugebauer
e9ebf5da03 Writes inventory and overview documentation, and updates docstrings on a LOT of modules. 2016-04-22 16:08:18 +10:00
Christopher Neugebauer
875f736d67 Consolidates models.py into a directory module. 2016-04-22 15:06:24 +10:00
Christopher Neugebauer
ffa1ca6783 Fixes flags admin 2016-04-12 11:43:38 +10:00
Christopher Neugebauer
87e6fa064a Merge branch 'master' into admin_models_cleanup 2016-04-12 11:39:54 +10:00
Christopher Neugebauer
d3f7431f7d Squashes migrations from rename_to_flags branch; marks as normal migration 2016-04-12 08:47:17 +10:00
Christopher Neugebauer
c24b9ee213 Makes EnablingConditionBase a minimal reification of an abstract base model FlagBase, replaces enablingconditionbase with flagbase where possible, and fixes method names and documentation 2016-04-12 08:42:22 +10:00
Christopher Neugebauer
638ec26126 Replaces the mandatory/non-mandatory concept with the enabled_if_true/disabled_if_false concept. Closes #4. 2016-04-11 20:48:18 +10:00
Christopher Neugebauer
61dbe60cfa Renames the admin-visible names for many model classes, and adds a default ordering where they’re useful too. 2016-04-11 19:23:38 +10:00
Christopher Neugebauer
c4c8a7ab82 Tidies up the admin interface for flags 2016-04-11 18:12:37 +10:00
Christopher Neugebauer
e88a287fef renames test_enabling_condition to test_flag 2016-04-11 17:59:20 +10:00
Christopher Neugebauer
7b476fd5cb s/enabling_condition/flag 2016-04-11 17:56:11 +10:00
Christopher Neugebauer
4fedc73304 Renames EnablingCondition to Flag where possible 2016-04-11 17:55:00 +10:00
Christopher Neugebauer
7e8d044a9f Adds the ability to apply or refund a credit note. 2016-04-11 13:11:57 +10:00
Christopher Neugebauer
680ce689f6 Adds initial credit note display view 2016-04-11 13:11:57 +10:00
Christopher Neugebauer
2c94e7538a Adds available_credit tag, and adds a view for refunding an invoice to generate a credit note. 2016-04-11 13:11:56 +10:00
Christopher Neugebauer
6b10a0a7e4 Adds CreditNote, CreditNoteController, related models, and tests. 2016-04-11 13:11:56 +10:00
Christopher Neugebauer
ae8f39381f Flake8 fixes 2016-04-08 19:49:18 +10:00
Christopher Neugebauer
97438624e1 Makes the guided registration stay on the front page if an incorrect voucher is added but a valid profile is filled out. Resolves #9 2016-04-08 19:43:34 +10:00
Christopher Neugebauer
01b9adbaf4 Re-writes the guided registration to individually track completed categories, and keep the form page the same until every category is finished. Resolves #14 2016-04-08 19:43:34 +10:00
Christopher Neugebauer
ea1d6f52e6 Adds payment access codes. 2016-04-08 13:20:35 +10:00
Christopher Neugebauer
3dab78ab25 Adds the access_code field to Attendee model 2016-04-08 13:20:35 +10:00
Christopher Neugebauer
94a42c100b Adds manual payment functionality 2016-04-07 19:19:19 +10:00
Christopher Neugebauer
2fbe789090 Adds validate_allowed_to_pay(), which validates whether you’re allowed to pay for an invoice 2016-04-07 18:26:31 +10:00
Christopher Neugebauer
0e80e0336c adds invoice_recipient to AttendeeProfileBase 2016-04-07 17:17:15 +10:00
Christopher Neugebauer
38cdb8aa63 Makes invoice model, controller, and test changes to match issue #15 design doc 2016-04-07 17:16:56 +10:00
Christopher Neugebauer
5633554854 Tests now use TestingInvoiceController 2016-04-07 17:16:21 +10:00
Christopher Neugebauer
ac10ea4ee8 s/cart_controller_helper/controller_helpers/ 2016-04-07 17:16:04 +10:00
Christopher Neugebauer
8e95bb7469 flake8 fixes 2016-04-07 13:26:25 +10:00
Christopher Neugebauer
0b7ccfc827 Enforces minimum quantity of 0 for quantity boxes 2016-04-06 22:59:00 +10:00
Christopher Neugebauer
dba3773636 Adds db indices 2016-04-06 22:59:00 +10:00
Christopher Neugebauer
53413388e0 Optimises queries through simplifying repeated queries and select_related use 2016-04-06 22:59:00 +10:00
Christopher Neugebauer
2f77f5bb23 Replaces .active = False; .save() pattern in tests with a test controller method 2016-04-06 17:24:25 +10:00
Christopher Neugebauer
8ad265a65a Fixes tests now that $0 invoices pay themselves 2016-04-06 17:19:09 +10:00
Christopher Neugebauer
c9a62db774 Resolves #17 - cannot generate invoice if there are no product items 2016-04-06 17:02:11 +10:00
Christopher Neugebauer
812cc0b9c8 Resolves #6 — Help text for items without a description is much much nicer 2016-04-06 16:45:54 +10:00
Christopher Neugebauer
4021aa3c8e Resolves #12 — each item category shows what items you have already purchased in each category 2016-04-06 16:33:04 +10:00
Christopher Neugebauer
cc318dfa9b Fixes tests 2016-04-06 16:09:57 +10:00
Christopher Neugebauer
40bc5985f4 Propagates the error messages up from enabling condition testing 2016-04-06 15:47:09 +10:00
Christopher Neugebauer
0340b6da20 Adds “fix_errors” query to “checkout”, which allows users to have issues fix 2016-04-06 15:46:58 +10:00
Christopher Neugebauer
39b130811c Removes superfluous test 2016-04-06 15:46:49 +10:00
Christopher Neugebauer
c8c16072ba fix_simple_errors() now removes exhausted vouchers from the voucher set. 2016-04-06 14:02:23 +10:00
Christopher Neugebauer
0d57da8d6f Makes apply_voucher() idempotent, adds _test_voucher to validate_cart, and updates tests. 2016-04-06 14:02:22 +10:00
Christopher Neugebauer
8d07518a9b Fixes an incorrect voucher test 2016-04-06 14:02:22 +10:00
Christopher Neugebauer
6f28c20b70 Factors _test_voucher() method into CartController 2016-04-06 14:02:22 +10:00
Christopher Neugebauer
7d97d2d2de Adds fix_simple_errors to cart - it zeroes out unavailable products. Adds test that it does that. 2016-04-06 14:02:22 +10:00
Christopher Neugebauer
f5d9458d1a Adds a validation based on available_products to validate_cart, and a test based on simple enabling conditions 2016-04-06 10:22:44 +10:00
Christopher Neugebauer
a4d684f444 Raises limits errors in the right parts of the form 2016-04-03 15:25:39 +10:00
Christopher Neugebauer
7609965883 flake8 compliance 2016-04-03 13:21:57 +10:00
Christopher Neugebauer
4d134e95d7 Refactors discount ceiling testing to make sure that the discount ceiling only considers items where the discount was applied in determining if the discount was reached. 2016-04-03 13:16:35 +10:00
Christopher Neugebauer
eab1deff77 Removes set_quantity and add_to_cart from CartController, and factors it into a test controller for testing 2016-04-03 10:07:59 +10:00
Christopher Neugebauer
312fffd137 Adds negative quantity tests to _test_limits, and removes _set_quantity_old. 2016-04-03 10:07:59 +10:00
Christopher Neugebauer
6c9a68dc5b Fixes #8 properly 2016-04-02 20:31:59 +11:00
Christopher Neugebauer
2cbda9172f Fixes bug in product and category, and ceiling enabling conditions 2016-04-02 20:31:59 +11:00
Christopher Neugebauer
8796670328 handle_products now uses the transactional set_quantities. 2016-04-02 20:12:27 +11:00
Christopher Neugebauer
e3ec128147 Factors limits testing in set_quantities into _test_limits() 2016-04-02 20:12:27 +11:00
Christopher Neugebauer
194f98bcc4 Refactors available_products to use test_enabling_conditions 2016-04-02 18:18:06 +11:00
Christopher Neugebauer
1e7a2abc7f Refactors testing of enabling conditions so that they are done in bulk in ConditionsController, rather than one product at a time. 2016-04-02 18:18:06 +11:00
Christopher Neugebauer
5716af0afa Replaces a bunch of len(queryset) with queryset.count() 2016-04-02 18:17:18 +11:00
Christopher Neugebauer
1c6dc12781 Replaces user_can_add_within_limit with user_quantity_remaining 2016-04-02 18:17:18 +11:00
Christopher Neugebauer
576dddcaad Adds user_quantity_remaining to CategoryController 2016-04-02 18:17:18 +11:00
Christopher Neugebauer
39021cd3dd Adds set_quantities, refactors set_quantity in terms of set_quantities 2016-04-02 18:16:29 +11:00
Christopher Neugebauer
2e0144effe flake8 2016-04-02 13:29:53 +11:00
Christopher Neugebauer
8f233c7943 available_products now refers to the user’s product limits as well as enabling conditions 2016-04-02 13:14:34 +11:00
Christopher Neugebauer
f7289c2101 Adds ‘available_categories’ as something that actually works 2016-04-02 11:56:03 +11:00
Christopher Neugebauer
bdd3714f47 flake8 style issue 2016-04-02 11:34:19 +11:00
Christopher Neugebauer
26af6e8672 Adds messages when items are updated; disables product forms when there are no products available. 2016-04-02 11:33:20 +11:00
Christopher Neugebauer
69a65ac3ed Fixes tests on Django 1.9 2016-04-02 11:02:01 +11:00
Christopher Neugebauer
3a6b4125e9 Bugfix 2016-04-01 12:34:06 +01:00
Christopher Neugebauer
12e4d0a3cb flake8 2016-04-01 12:14:39 +01:00
Christopher Neugebauer
89cba55807 Pre-fills the attendee name from a speaker profile, if there is one.
Resolves #8.
2016-04-01 21:39:54 +11:00
Christopher Neugebauer
be277c17d2 BadgeAndProfile is replaced with AttendeeProfileBase — consumer apps should subclass AttendeeProfileBase to make the registration process work :) 2016-04-01 21:21:09 +11:00
Christopher Neugebauer
660e8cb75f Removes BadgeAndProfile.get_instance 2016-04-01 16:58:55 +11:00
Christopher Neugebauer
d2d2a1b0ec Work for making invoices contain complete profile information 2016-04-01 16:54:40 +11:00
Christopher Neugebauer
aa6377f4ce Adds multiply as a template filter (for invoices) 2016-04-01 16:54:40 +11:00
Christopher Neugebauer
8324b51094 Adds new guided registration process. 2016-04-01 16:54:40 +11:00
Christopher Neugebauer
466c664b68 factor out handle_profile 2016-04-01 16:54:07 +11:00
Christopher Neugebauer
8b79670608 Fixes issue #8 2016-03-31 19:15:04 +11:00
Christopher Neugebauer
5e0c87c435 Deletes templates — moved to registrasion-demo repo 2016-03-31 19:15:03 +11:00
Christopher Neugebauer
2d5caa3299 Renames edit_profile to attendee_edit 2016-03-31 19:15:03 +11:00
Christopher Neugebauer
e0e0d4bf3b views.py renders from registrasion/ 2016-03-31 19:15:03 +11:00
Christopher Neugebauer
62d5c5b2bf Revert "Registrasion URLs now include django-nested-admin"
This reverts commit 58eed33c429c1035801e840b41aa7104c02b9b5a.
2016-03-31 19:14:43 +11:00
Christopher Neugebauer
9ec9e68ee6 Registrasion URLs now include django-nested-admin 2016-03-31 19:14:42 +11:00
Christopher Neugebauer
eebf9e81f5 Resolves #3 — start_time, end_time, and limit can now be blank. Tests already dealt with the null case. 2016-03-31 14:45:39 +11:00
Christopher Neugebauer
ba0682a5f9 Fleshes out the admin interface and adds help_text attributes to the model fields that need it 2016-03-31 14:38:48 +11:00
Christopher Neugebauer
cf85af7719 Adds refund function, adds tests, makes sure that refunds are obeyed elsewhere in the codebase 2016-03-27 21:04:10 +11:00
Christopher Neugebauer
b65223aaa1 Adds model for released carts 2016-03-27 19:13:05 +11:00
Christopher Neugebauer
3e4e52b165 Adds more constraints around payment and voiding of invoices 2016-03-27 14:41:43 +11:00
Christopher Neugebauer
8080d7851b Invoices now automatically void themselves if their cart is out of date 2016-03-27 14:04:47 +11:00
Christopher Neugebauer
0d458bea06 Allows Product.limit_per_user to be blank and null. Adds Category.limit_per_user. Adds functionality and tests to verify that this is legal. 2016-03-27 13:12:33 +11:00
Christopher Neugebauer
7c99750f3a Simplifies creation of test data in test_cart, adds an extra product category and two new products 2016-03-27 13:12:33 +11:00
Christopher Neugebauer
db332da958 flake8 2016-03-27 13:12:33 +11:00
Christopher Neugebauer
3562772c13 Adds RadioBoxProductsForm 2016-03-27 13:12:33 +11:00
Christopher Neugebauer
0ae005a5f5 Factors _QuantityBoxForm out of _ProductsForm 2016-03-27 11:30:11 +11:00
Christopher Neugebauer
834233cd72 Factors ProductsForm handling into its own function 2016-03-27 11:30:11 +11:00
Christopher Neugebauer
464684f13e Refactors the product_category view to be much simpler 2016-03-26 20:21:54 +11:00
Christopher Neugebauer
b13e6f7ce2 Factors out voucher form handling into its own function 2016-03-26 20:01:46 +11:00
Christopher Neugebauer
2d5cd622c5 Makes it invalid for a user to re-enter a voucher code they already have. 2016-03-26 19:47:01 +11:00
Christopher Neugebauer
36ecf7fd54 Adds more tags for the dashboard. 2016-03-26 15:14:28 +11:00
Christopher Neugebauer
941b057865 Shows the available discounts on the registration form 2016-03-26 14:03:25 +11:00
Christopher Neugebauer
fc279b1922 Replaces CategoryForm with ProductsForm (makes the form slightly dumber) 2016-03-26 13:37:13 +11:00
Christopher Neugebauer
45aa83f854 Adds available_products as a method on ProductController 2016-03-26 13:37:13 +11:00
Christopher Neugebauer
c41a9cadff recalculate_discounts now uses the available_discounts function from controllers.discount. 2016-03-26 13:33:23 +11:00
Christopher Neugebauer
fb3878ce2e Adds available_discounts, which allows enumeration of the discounts that are available for a given set of products and categories 2016-03-25 18:59:34 +11:00
Christopher Neugebauer
8d66ed5715 Fix flake8 warnings 2016-03-25 14:51:39 +11:00
Christopher Neugebauer
c192fef491 Adds basic template tag for available categories. Currently does not check enabling conditions. 2016-03-25 14:16:30 +11:00
Christopher Neugebauer
478b328e41 Uses the completed_registration flag on the Attendee model 2016-03-25 12:50:59 +11:00
Christopher Neugebauer
8e6364d02a Fixes bug where discount quantity applied to all users rather than specific user. Adds test case. 2016-03-25 12:50:34 +11:00
Christopher Neugebauer
83b11cd722 Fixes invoicing payment logic 2016-03-24 14:20:29 +11:00
Christopher Neugebauer
eff5686dcf Adds logic for required categories 2016-03-24 14:19:33 +11:00
Christopher Neugebauer
dcad2d5f7c Second pass at guided registration, including profile page 2016-03-24 13:43:06 +11:00
Christopher Neugebauer
05923a9a8f Profile form view now edits the relevant form 2016-03-24 12:58:23 +11:00
Christopher Neugebauer
236c61eefa Fleshes out badge model, and adds first pass at display of the badge form 2016-03-24 12:44:59 +11:00
Christopher Neugebauer
eb530bd485 Adds the first pass at a “guided” registration form 2016-03-23 19:39:07 +11:00
Christopher Neugebauer
d50d6bac48 Fixes voucher handling form to not be compulsory 2016-03-23 19:36:54 +11:00
Christopher Neugebauer
7086ea8729 Moves product disabling code into the form class 2016-03-23 19:36:22 +11:00
Christopher Neugebauer
e118a4e74c Adds dumb process for paying invoices. 2016-03-23 15:04:51 +11:00
Christopher Neugebauer
4dc150d734 Fills in quantity boxes from the quantities in the current cart, not overall 2016-03-23 15:04:51 +11:00
Christopher Neugebauer
2d6b28c5a6 Adds mechanism for entering a voucher code 2016-03-23 15:04:51 +11:00
Christopher Neugebauer
cc42490832 Applying a voucher to a cart now uses the voucher code rather than the voucher object. Adds tests for constraints on vouchers. 2016-03-23 15:04:51 +11:00
Christopher Neugebauer
745f6db444 Adds “CategoryForm” to forms.py. It’s about to replace the existing ProductItem form 2016-03-23 15:04:51 +11:00
Christopher Neugebauer
68e7e4e594 Checks enabling conditions before adding items to the list 2016-03-04 18:33:03 -08:00
Christopher Neugebauer
8400da17da Fixes error in EnablingConditionBase, adds admins for Product and Category enabling conditions 2016-03-04 18:33:03 -08:00
Christopher Neugebauer
0182a32f03 Fixes various errors in discount calculation, and adds tests for these 2016-03-04 18:32:52 -08:00
Christopher Neugebauer
99f4b8dfe0 Fixes validation error in models.py for adding discounts 2016-03-04 18:32:52 -08:00
Christopher Neugebauer
a4de15830c Adds checkout view, which generates an invoice, and then redirects to the invoice itself. 2016-03-04 18:32:52 -08:00
Christopher Neugebauer
1b7d8a60c1 Adds product_category form, which allows users to add products from a specific category to their cart. 2016-03-04 14:07:03 -08:00
Christopher Neugebauer
c51be4d30a Adds set_quantity as a method on CartController.
Refactors add_to_cart to be in terms of set_quantity
2016-03-04 14:07:02 -08:00
Christopher Neugebauer
c13a986f2d Updates migration 2016-01-22 22:07:59 +11:00
Christopher Neugebauer
2e89bc4887 Adds validation code to make sure that only one discount condition is applicable per product 2016-01-22 21:53:30 +11:00
Christopher Neugebauer
224878a10c Fixes flake8 errors 2016-01-22 17:21:29 +11:00
Christopher Neugebauer
c2400c4695 Moves the controller modules into their own subpackage. There's going to be a lot of stuff in there. 2016-01-22 16:29:41 +11:00
Christopher Neugebauer
d9e433659d Imports code from old Symposion repo 2016-01-22 16:19:11 +11:00