Changeset View
Changeset View
Standalone View
Standalone View
README.md
| # What is Looper? | # What is Looper? | ||||
| Looper is the subscription and payment management system used for the Blender | Looper is the subscription and payment management system used for the Blender | ||||
| Development Fund and Blender Studio projects. It is implemented as a Django app, | Development Fund and Blender Studio projects. It is implemented as a Django app, | ||||
| and comes with the following features: | and comes with the following features: | ||||
| - automatic payment using Braintree, | - Automatic payment using Braintree | ||||
| - manual payment using direct bank transfer, | - Manual payment using direct bank transfer | ||||
| - subscriptions for which payment is directly managed by you, | - Subscriptions with automatic or manual renewal | ||||
sybren: I think this is not the same as "subscriptions for which payment is directly managed by you". | |||||
fsiddiUnsubmitted Done Inline ActionsAddressed in updated diff. fsiddi: Addressed in updated diff. | |||||
| - multiple currencies, | - Multiple currencies | ||||
| - multiple products, | - Multiple products | ||||
| - multiple plans/levels per product, | - Multiple plans/levels per product | ||||
| - multiple variations/payment schemes per plan, | - Multiple variations/payment schemes per plan | ||||
| - optional per customer pricing schemes, | - Optional per customer pricing schemes | ||||
| - flexible support for group based subscriptions. | - Flexible support for group based subscriptions | ||||
| # What makes Looper different? | # What makes Looper different? | ||||
| It aims to be relatively simple code-wise without sacrificing flexibility for | It aims to be relatively simple code-wise without sacrificing flexibility for | ||||
| the customer. This is achieved by not trying to tailor Looper to all possible | the customer. This is achieved by not trying to tailor Looper to all possible | ||||
| use-cases directly (which would make Looper necessarily very generic, and thus | use-cases directly (which would make Looper necessarily very generic, and thus | ||||
| complex). Instead, we defer all project-specific logic to the project where | complex). Instead, we defer all project-specific logic to the project where | ||||
| Looper will be integrated (allowing Looper to be specific, and thus simple). | Looper will be integrated (allowing Looper to be specific, and thus simple). | ||||
| As a result of this Looper only directly provides the functionality which is | As a result of this, Looper only directly provides the functionality which is | ||||
| hard to get right *and* project independent: | hard to get right *and* project independent: | ||||
| - charging Customers, | |||||
| - checkout pages for new subscriptions and existing orders, | - Charging Customers | ||||
| - automatic payment processing and subscription deactivation, | - Checkout pages for new subscriptions and existing orders | ||||
| - adding payment methods (e.g. credit cards). | - Automatic payment processing and subscription deactivation | ||||
| - Adding payment methods (e.g. credit cards) | |||||
| All other functionality (in particular, permissions and settings pages) are | All other functionality (in particular, permissions and settings pages) are | ||||
| considered to be too specific for Looper to implement. However, since Looper | considered to be too specific for Looper to implement. However, since Looper | ||||
| itself is relatively simple this should be simple too. | itself is relatively simple this should be simple too. | ||||
| # How does Looper work? | # How does Looper work? | ||||
| Since Looper does not provide a ready-made solution it is important to | Since Looper does not provide a ready-made solution it is important to | ||||
| ▲ Show 20 Lines • Show All 70 Lines • ▼ Show 20 Lines | |||||
| 1. The Customer is redirected (e.g. from a product page you implemented) to the | 1. The Customer is redirected (e.g. from a product page you implemented) to the | ||||
| checkout page for a specific Plan. | checkout page for a specific Plan. | ||||
| 2. The Customer submits their Address, preferred PlanVariation and | 2. The Customer submits their Address, preferred PlanVariation and | ||||
| PaymentMethod. | PaymentMethod. | ||||
| 3. Looper copies the pricing scheme of the PlanVariation into a new | 3. Looper copies the pricing scheme of the PlanVariation into a new | ||||
| Subscription. | Subscription. | ||||
| 4. Looper creates an Order for the first installment of this new Subscription. | 4. Looper creates an Order for the first installment of this new Subscription. | ||||
| 5. Looper charges the Customer for this Order, creating a Transaction. | 5. Looper charges the Customer for this Order, creating a Transaction. | ||||
| 6. If the payment was successful the Subscription is activated. | 6. If the payment was successful, the Subscription is activated. | ||||
| ### A Customer checks out an existing Order | ### A Customer checks out an existing Order | ||||
| The Customer always has the ability to pay for an Order manually. This is | The Customer always has the ability to pay for an Order manually. This is | ||||
| especially important when the Customer prefers to pay using direct bank | especially important when the Customer prefers to pay using direct bank | ||||
| transfer, which does not allow automatic payments. The manual payment process | transfer, which does not allow automatic payments. The manual payment process | ||||
| roughly looks like so: | roughly looks like so: | ||||
| ▲ Show 20 Lines • Show All 227 Lines • Show Last 20 Lines | |||||
I think this is not the same as "subscriptions for which payment is directly managed by you". These three lines describe "automatic", "manual", and "managed". In your version, they describe "automatic", "manual", and "automatic or manual".