The rounding mode sum_by_net_keep_gross is supposed to be the
consumer-friendly algorithm. However, some consumer-friendly prices are still
impossible, such as 15.00 incl. 19%. Previously, the system would round
to 15.01, because it's the gross price derived from the closest net
price. With this PR, it rounds to 14.99 instead, because consumers like
paying less more than they like paying more.
* Allow to round taxes on order-level
* Rename get_cart_total
* Persist rounding mode with order
* Add general docs
* Order creation API
* Update fee algorithm
* Rounding on payment method change
* Round when splitting order
* Fix failing tests
* Add settings page
* Add tests
* Replace algorithm
* Add test case for currency rounding
* Improve order change
* Update flowchart
* Update discount logic (more hypothetical, we don't store rounding on cart positions atm)
* Rename internal method
* Fix typo
* Update help text
* Apply suggestions from code review
Co-authored-by: luelista <weller@rami.io>
* Order rounding refactor (#5571)
* Add RoundingCorrectionMixin providing before-rounding-values as properties
* Use gross_price_before_rounding in more places
* Update doc/development/algorithms/pricing.rst
Co-authored-by: Martin Gross <gross@rami.io>
* Allow to override on perform_order
* Rebase migration
* Fix event cancellation
---------
Co-authored-by: luelista <weller@rami.io>
Co-authored-by: Martin Gross <gross@rami.io>
* Add event date fields, add preliminary range check
* Remove function, use filtered queryset for subevent id limit
* Improve and fix date range check
* Add formfields
* Add tests
* Improve tests
* Add new fields to API and documentation
* Add migration
* Change description according to suggestion
* Change discount apply signature, remove unnecessary query
* Rename new fields, simplify range check
* Rename fields in template
* Apply suggestions from code review
Co-authored-by: Raphael Michel <michel@rami.io>
---------
Co-authored-by: Raphael Michel <michel@rami.io>
Product categories can now be marked as "cross-selling categories", causing them to
appear in the add-on checkout step as additional recommendations, depending on
their cross-selling visibility (always, only if certain products are already in the cart, or
only if they qualify for a discount according to discount rules).
---------
Co-authored-by: Raphael Michel <michel@rami.io>
Co-authored-by: Richard Schreiber <schreiber@rami.io>
Allows organizers to test their shop as if it were a different date and time.
Implemented using a time_machine_now() function which is used instead of regular now(), which can overlay the real date time with a value from a ContextVar, assigned from a session value in EventMiddleware.
For more information, see doc/development/implementation/timemachine.rst
---------
Co-authored-by: Richard Schreiber <schreiber@rami.io>
Co-authored-by: Raphael Michel <michel@rami.io>
* Data model changes
* Fix test failures
* Adjustments
* Some tests and API support
* Check when extending orders
* Make things more deterministic, fix style
* Do not apply negative discounts
* Update price_before_voucher on item/subevent changes
* Add tests for price_before_voucher in combination with free price
* Fix InvoiceAddress.DoesNotExist
* Data model + Editor
* Cart and order management
* Rebase migrations
* Fix typos, add tests on cart handling
* Add tests for checkout and quotas
* Add API endpoints
* Validation of settings
* Front page tax display
* Voucher handling
* Widget foo
* Show correct net pricing
* Front page tests
* reverse charge foo
* Allow to require bundling
* Fix test failure on postgres
* Refs #99 -- Fix stripe support for zero-decimal currencies
* Add new money formatting method
* Force decimal places in many places
* Locale-aware currency rendering
* Fix currencies in more places
* More currency fixes
* Data model
* little crud
* SubEventItemForm etc
* Drop SubEventItem.active, quota editor
* Fix failing tests
* First frontend stuff
* Addons form stuff
* Quota calculation
* net price display on EventIndex
* Add tests, solve some bugs
* Correct quota selection in more places, consolidate pricing logic
* Fix failing quota tests
* Fix TypeError
* Add tests for checkout
* Fixed a bug in QuotaForm
* Prevent immutable cart if a quota was removed from an item
* Add tests for pricing
* Handle waiting list
* Filter in check-in list
* Fixed import lost in rebase
* Fix waiting list widget
* Voucher management
* Voucher redemption
* Fix broken tests
* Add subevents to OrderChangeManager
* Create a subevent during event creation
* Fix bulk voucher creation
* Introduce subevent.active
* Copy from for subevents
* Show active in list
* ICal download for subevents
* Check start and end of presale
* Failing tests / show cart logic
* Test
* Rebase migrations
* REST API integration of sub-events
* Integrate quota calculation into the traditional quota form
* Make subevent argument to add_position optional
* Log-display foo
* pretixdroid and subevents
* Filter by subevent
* Add more tests
* Some mor tests
* Rebase fixes
* More tests
* Relative dates
* Restrict selection in relative datetime widgets
* Filter subevent list
* Re-label has_subevents
* Rebase fixes, subevents in calendar view
* Performance and caching issues
* Refactor calendar templates
* Permission tests
* Calendar fixes and month selection
* subevent selection
* Rename subevents to dates
* Add tests for calendar views