Phortune v0
Summary:
Ref T2787. This does very little so far, but makes inroads on accounts and billing. This is mostly just modeled on what Stripe looks like. The objects are:
- **Account**: Has one or more authorized users, who can make manage the account. An example might be "Phacility", and the three of us would be able to manage it. A user may be associated with more than one account (e.g., a corporate account and a personal account) but the UI tries to simplify the common case of a single account.
- **Payment Method**: Something we can get sweet sweet money from; for now, a credit card registered with Stripe. Payment methods are associated with an account.
- **Product**: A good (one time charge) or service (recurring charge). This might be "t-shirt" or "enterprise plan" or "hourly support" or whatever else.
- **Purchase**: Represents a user purchasing a Product for an Account, using a Payment Method. e.g., you bought a shirt, or started a plan, or purchased support.
- **Charge**: Actual charges against payment methods. A Purchase can create more than one charge if it's a plan, or if the first charge fails and we re-bill.
This doesn't fully account for stuff like coupons/discounts yet but they should fit into the model without any issues.
This only implements `Account`, and that only partially.
Test Plan: {F37531}
Reviewers: chad, btrahan
Reviewed By: btrahan
CC: aran
Maniphest Tasks: T2787
Differential Revision: https://secure.phabricator.com/D5435
2013-03-28 17:10:34 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
abstract class PhortuneController extends PhabricatorController {
|
|
|
|
|
2014-08-18 22:15:21 +02:00
|
|
|
protected function addAccountCrumb(
|
|
|
|
$crumbs,
|
|
|
|
PhortuneAccount $account,
|
|
|
|
$link = true) {
|
|
|
|
|
2015-01-30 20:28:49 +01:00
|
|
|
$name = $account->getName();
|
2014-08-18 22:15:21 +02:00
|
|
|
$href = null;
|
|
|
|
|
|
|
|
if ($link) {
|
|
|
|
$href = $this->getApplicationURI($account->getID().'/');
|
|
|
|
$crumbs->addTextCrumb($name, $href);
|
|
|
|
} else {
|
|
|
|
$crumbs->addTextCrumb($name);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-01-30 20:28:49 +01:00
|
|
|
protected function addMerchantCrumb(
|
|
|
|
$crumbs,
|
|
|
|
PhortuneMerchant $merchant,
|
|
|
|
$link = true) {
|
|
|
|
|
|
|
|
$name = $merchant->getName();
|
|
|
|
$href = null;
|
|
|
|
|
|
|
|
$crumbs->addTextCrumb(
|
|
|
|
pht('Merchants'),
|
|
|
|
$this->getApplicationURI('merchant/'));
|
|
|
|
|
|
|
|
if ($link) {
|
|
|
|
$href = $this->getApplicationURI('merchant/'.$merchant->getID().'/');
|
|
|
|
$crumbs->addTextCrumb($name, $href);
|
|
|
|
} else {
|
|
|
|
$crumbs->addTextCrumb($name);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-10-07 23:41:59 +02:00
|
|
|
private function loadEnabledProvidersForMerchant(PhortuneMerchant $merchant) {
|
|
|
|
$viewer = $this->getRequest()->getUser();
|
|
|
|
|
|
|
|
$provider_configs = id(new PhortunePaymentProviderConfigQuery())
|
|
|
|
->setViewer($viewer)
|
|
|
|
->withMerchantPHIDs(array($merchant->getPHID()))
|
|
|
|
->execute();
|
|
|
|
$providers = mpull($provider_configs, 'buildProvider', 'getID');
|
|
|
|
|
|
|
|
foreach ($providers as $key => $provider) {
|
|
|
|
if (!$provider->isEnabled()) {
|
|
|
|
unset($providers[$key]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $providers;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function loadCreatePaymentMethodProvidersForMerchant(
|
|
|
|
PhortuneMerchant $merchant) {
|
|
|
|
|
|
|
|
$providers = $this->loadEnabledProvidersForMerchant($merchant);
|
|
|
|
foreach ($providers as $key => $provider) {
|
|
|
|
if (!$provider->canCreatePaymentMethods()) {
|
|
|
|
unset($providers[$key]);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $providers;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function loadOneTimePaymentProvidersForMerchant(
|
|
|
|
PhortuneMerchant $merchant) {
|
|
|
|
|
|
|
|
$providers = $this->loadEnabledProvidersForMerchant($merchant);
|
|
|
|
foreach ($providers as $key => $provider) {
|
|
|
|
if (!$provider->canProcessOneTimePayments()) {
|
|
|
|
unset($providers[$key]);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $providers;
|
|
|
|
}
|
|
|
|
|
Phortune v0
Summary:
Ref T2787. This does very little so far, but makes inroads on accounts and billing. This is mostly just modeled on what Stripe looks like. The objects are:
- **Account**: Has one or more authorized users, who can make manage the account. An example might be "Phacility", and the three of us would be able to manage it. A user may be associated with more than one account (e.g., a corporate account and a personal account) but the UI tries to simplify the common case of a single account.
- **Payment Method**: Something we can get sweet sweet money from; for now, a credit card registered with Stripe. Payment methods are associated with an account.
- **Product**: A good (one time charge) or service (recurring charge). This might be "t-shirt" or "enterprise plan" or "hourly support" or whatever else.
- **Purchase**: Represents a user purchasing a Product for an Account, using a Payment Method. e.g., you bought a shirt, or started a plan, or purchased support.
- **Charge**: Actual charges against payment methods. A Purchase can create more than one charge if it's a plan, or if the first charge fails and we re-bill.
This doesn't fully account for stuff like coupons/discounts yet but they should fit into the model without any issues.
This only implements `Account`, and that only partially.
Test Plan: {F37531}
Reviewers: chad, btrahan
Reviewed By: btrahan
CC: aran
Maniphest Tasks: T2787
Differential Revision: https://secure.phabricator.com/D5435
2013-03-28 17:10:34 +01:00
|
|
|
}
|