mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-26 00:32:42 +01:00
Consider "all account members are disabled" to be a permanent failure when billing a Phortune subscription
Summary: Fixes T13327. Currently, when we try to bill an account and all members are disabled, we fail temporarily and the task retries forever. At least for now, just treat this as a permanent failure. Test Plan: - Used `bin/phortune invoice` to generate a normal invoice for a regular subscription. - Disabled all the account members, then tried again. Got a helpful permanent failure: ``` $ ./bin/phortune invoice --subscription PHID-PSUB-kbedwt5cyepoc6tohjq5 --auto-range Set current time to Mon, Jun 24, 2:47 PM. Preparing to invoice subscription "localb.phacility.com" from Fri, May 31, 10:14 AM to Sun, Jun 30, 10:14 AM. WARNING Manually invoicing will double bill payment accounts if the range overlaps an existing or future invoice. This script is intended for testing and development, and should not be part of routine billing operations. If you continue, you may incorrectly overcharge customers. Really invoice this subscription? [y/N] y [2019-06-24 14:47:57] EXCEPTION: (PhabricatorWorkerPermanentFailureException) All members of the account ("PHID-ACNT-qp54y3unedoaxgkkjpj4") for this subscription ("PHID-PSUB-kbedwt5cyepoc6tohjq5") are disabled. at [<phabricator>/src/applications/phortune/worker/PhortuneSubscriptionWorker.php:88] arcanist(head=experimental, ref.master=d92fa96366c0, ref.experimental=db4cd55d4673), corgi(head=master, ref.master=6371578c9d32), instances(head=stable, ref.master=ba9e4a19df1c, ref.stable=37fb1f4917c7), libcore(), phabricator(head=master, ref.master=65bc481c91de, custom=11), phutil(head=master, ref.master=7adfe4e4f4a3), services(head=master, ref.master=5424383159ac) #0 PhortuneSubscriptionWorker::doWork() called at [<phabricator>/src/infrastructure/daemon/workers/PhabricatorWorker.php:124] #1 PhabricatorWorker::executeTask() called at [<phabricator>/src/infrastructure/daemon/workers/PhabricatorWorker.php:163] #2 PhabricatorWorker::scheduleTask(string, array, array) called at [<phabricator>/src/applications/phortune/management/PhabricatorPhortuneManagementInvoiceWorkflow.php:169] #3 PhabricatorPhortuneManagementInvoiceWorkflow::execute(PhutilArgumentParser) called at [<phutil>/src/parser/argument/PhutilArgumentParser.php:457] #4 PhutilArgumentParser::parseWorkflowsFull(array) called at [<phutil>/src/parser/argument/PhutilArgumentParser.php:349] #5 PhutilArgumentParser::parseWorkflows(array) called at [<phabricator>/scripts/setup/manage_phortune.php:21] $ ``` Reviewers: amckinley Reviewed By: amckinley Maniphest Tasks: T13327 Differential Revision: https://secure.phabricator.com/D20613
This commit is contained in:
parent
65bc481c91
commit
a3397fb876
1 changed files with 23 additions and 1 deletions
|
@ -48,12 +48,15 @@ final class PhortuneSubscriptionWorker extends PhabricatorWorker {
|
||||||
->withPHIDs($account->getMemberPHIDs())
|
->withPHIDs($account->getMemberPHIDs())
|
||||||
->execute();
|
->execute();
|
||||||
$actor = null;
|
$actor = null;
|
||||||
|
|
||||||
|
$any_disabled = false;
|
||||||
foreach ($members as $member) {
|
foreach ($members as $member) {
|
||||||
|
|
||||||
// Don't act as a disabled user. If all of the users on the account are
|
// Don't act as a disabled user. If all of the users on the account are
|
||||||
// disabled this means we won't charge the subscription, but that's
|
// disabled this means we won't charge the subscription, but that's
|
||||||
// probably correct since it means no one can cancel or pay it anyway.
|
// probably correct since it means no one can cancel or pay it anyway.
|
||||||
if ($member->getIsDisabled()) {
|
if ($member->getIsDisabled()) {
|
||||||
|
$any_disabled = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,7 +66,26 @@ final class PhortuneSubscriptionWorker extends PhabricatorWorker {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$actor) {
|
if (!$actor) {
|
||||||
throw new Exception(pht('Failed to load actor to bill subscription!'));
|
if ($any_disabled) {
|
||||||
|
$message = pht(
|
||||||
|
'All members of the account ("%s") for this subscription ("%s") '.
|
||||||
|
'are disabled.',
|
||||||
|
$account->getPHID(),
|
||||||
|
$subscription->getPHID());
|
||||||
|
} else if ($account->getMemberPHIDs()) {
|
||||||
|
$message = pht(
|
||||||
|
'Unable to load any of the members of the account ("%s") for this '.
|
||||||
|
'subscription ("%s").',
|
||||||
|
$account->getPHID(),
|
||||||
|
$subscription->getPHID());
|
||||||
|
} else {
|
||||||
|
$message = pht(
|
||||||
|
'The account ("%s") for this subscription ("%s") has no '.
|
||||||
|
'members.',
|
||||||
|
$account->getPHID(),
|
||||||
|
$subscription->getPHID());
|
||||||
|
}
|
||||||
|
throw new PhabricatorWorkerPermanentFailureException($message);
|
||||||
}
|
}
|
||||||
|
|
||||||
$cart = $account->newCart($actor, $cart_implementation, $merchant);
|
$cart = $account->newCart($actor, $cart_implementation, $merchant);
|
||||||
|
|
Loading…
Reference in a new issue