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, | - Subscriptions or memberships with three types of renewal: | ||||
| - manual payment using direct bank transfer, | - *Automatic*, using Braintree as payment gateway | ||||
| - subscriptions for which payment is directly managed by you, | - *Manual*, using Braintree or direct bank transfer | ||||
sybren: I think this is not the same as "subscriptions for which payment is directly managed by you". | |||||
Done Inline ActionsAddressed in updated diff. fsiddi: Addressed in updated diff. | |||||
| - multiple currencies, | - *Managed*, handled manually by an administrator on behalf ot the subscriber | ||||
| - multiple products, | - Multiple currencies | ||||
| - multiple plans/levels per product, | - Multiple products | ||||
| - multiple variations/payment schemes per plan, | - Multiple plans/levels per product | ||||
| - optional per customer pricing schemes, | - Multiple variations/payment schemes per plan | ||||
| - flexible support for group based subscriptions. | - Optional per customer pricing schemes | ||||
| - 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".