diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -5221,25 +5221,28 @@ 'PhortuneAccount' => 'applications/phortune/storage/PhortuneAccount.php', 'PhortuneAccountAddManagerController' => 'applications/phortune/controller/account/PhortuneAccountAddManagerController.php', 'PhortuneAccountBillingAddressTransaction' => 'applications/phortune/xaction/PhortuneAccountBillingAddressTransaction.php', - 'PhortuneAccountBillingController' => 'applications/phortune/controller/account/PhortuneAccountBillingController.php', 'PhortuneAccountBillingNameTransaction' => 'applications/phortune/xaction/PhortuneAccountBillingNameTransaction.php', 'PhortuneAccountChargeListController' => 'applications/phortune/controller/account/PhortuneAccountChargeListController.php', + 'PhortuneAccountChargesController' => 'applications/phortune/controller/account/PhortuneAccountChargesController.php', 'PhortuneAccountController' => 'applications/phortune/controller/account/PhortuneAccountController.php', + 'PhortuneAccountDetailsController' => 'applications/phortune/controller/account/PhortuneAccountDetailsController.php', 'PhortuneAccountEditController' => 'applications/phortune/controller/account/PhortuneAccountEditController.php', 'PhortuneAccountEditEngine' => 'applications/phortune/editor/PhortuneAccountEditEngine.php', 'PhortuneAccountEditor' => 'applications/phortune/editor/PhortuneAccountEditor.php', 'PhortuneAccountHasMemberEdgeType' => 'applications/phortune/edge/PhortuneAccountHasMemberEdgeType.php', 'PhortuneAccountListController' => 'applications/phortune/controller/account/PhortuneAccountListController.php', - 'PhortuneAccountManagerController' => 'applications/phortune/controller/account/PhortuneAccountManagerController.php', + 'PhortuneAccountManagersController' => 'applications/phortune/controller/account/PhortuneAccountManagersController.php', 'PhortuneAccountNameTransaction' => 'applications/phortune/xaction/PhortuneAccountNameTransaction.php', + 'PhortuneAccountOrdersController' => 'applications/phortune/controller/account/PhortuneAccountOrdersController.php', + 'PhortuneAccountOverviewController' => 'applications/phortune/controller/account/PhortuneAccountOverviewController.php', 'PhortuneAccountPHIDType' => 'applications/phortune/phid/PhortuneAccountPHIDType.php', + 'PhortuneAccountPaymentMethodsController' => 'applications/phortune/controller/account/PhortuneAccountPaymentMethodsController.php', 'PhortuneAccountProfileController' => 'applications/phortune/controller/account/PhortuneAccountProfileController.php', 'PhortuneAccountQuery' => 'applications/phortune/query/PhortuneAccountQuery.php', 'PhortuneAccountSubscriptionController' => 'applications/phortune/controller/account/PhortuneAccountSubscriptionController.php', 'PhortuneAccountTransaction' => 'applications/phortune/storage/PhortuneAccountTransaction.php', 'PhortuneAccountTransactionQuery' => 'applications/phortune/query/PhortuneAccountTransactionQuery.php', 'PhortuneAccountTransactionType' => 'applications/phortune/xaction/PhortuneAccountTransactionType.php', - 'PhortuneAccountViewController' => 'applications/phortune/controller/account/PhortuneAccountViewController.php', 'PhortuneAdHocCart' => 'applications/phortune/cart/PhortuneAdHocCart.php', 'PhortuneAdHocProduct' => 'applications/phortune/product/PhortuneAdHocProduct.php', 'PhortuneAddPaymentMethodAction' => 'applications/phortune/action/PhortuneAddPaymentMethodAction.php', @@ -11753,25 +11756,28 @@ ), 'PhortuneAccountAddManagerController' => 'PhortuneController', 'PhortuneAccountBillingAddressTransaction' => 'PhortuneAccountTransactionType', - 'PhortuneAccountBillingController' => 'PhortuneAccountProfileController', 'PhortuneAccountBillingNameTransaction' => 'PhortuneAccountTransactionType', 'PhortuneAccountChargeListController' => 'PhortuneController', + 'PhortuneAccountChargesController' => 'PhortuneAccountProfileController', 'PhortuneAccountController' => 'PhortuneController', + 'PhortuneAccountDetailsController' => 'PhortuneAccountProfileController', 'PhortuneAccountEditController' => 'PhortuneController', 'PhortuneAccountEditEngine' => 'PhabricatorEditEngine', 'PhortuneAccountEditor' => 'PhabricatorApplicationTransactionEditor', 'PhortuneAccountHasMemberEdgeType' => 'PhabricatorEdgeType', 'PhortuneAccountListController' => 'PhortuneController', - 'PhortuneAccountManagerController' => 'PhortuneAccountProfileController', + 'PhortuneAccountManagersController' => 'PhortuneAccountProfileController', 'PhortuneAccountNameTransaction' => 'PhortuneAccountTransactionType', + 'PhortuneAccountOrdersController' => 'PhortuneAccountProfileController', + 'PhortuneAccountOverviewController' => 'PhortuneAccountProfileController', 'PhortuneAccountPHIDType' => 'PhabricatorPHIDType', + 'PhortuneAccountPaymentMethodsController' => 'PhortuneAccountProfileController', 'PhortuneAccountProfileController' => 'PhortuneAccountController', 'PhortuneAccountQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'PhortuneAccountSubscriptionController' => 'PhortuneAccountProfileController', 'PhortuneAccountTransaction' => 'PhabricatorModularTransaction', 'PhortuneAccountTransactionQuery' => 'PhabricatorApplicationTransactionQuery', 'PhortuneAccountTransactionType' => 'PhabricatorModularTransactionType', - 'PhortuneAccountViewController' => 'PhortuneAccountProfileController', 'PhortuneAdHocCart' => 'PhortuneCartImplementation', 'PhortuneAdHocProduct' => 'PhortuneProductImplementation', 'PhortuneAddPaymentMethodAction' => 'PhabricatorSystemAction', diff --git a/src/applications/phortune/application/PhabricatorPhortuneApplication.php b/src/applications/phortune/application/PhabricatorPhortuneApplication.php --- a/src/applications/phortune/application/PhabricatorPhortuneApplication.php +++ b/src/applications/phortune/application/PhabricatorPhortuneApplication.php @@ -35,7 +35,7 @@ '/phortune/' => array( '' => 'PhortuneLandingController', '(?P\d+)/' => array( - '' => 'PhortuneAccountViewController', + '' => 'PhortuneAccountOverviewController', 'card/' => array( 'new/' => 'PhortunePaymentMethodCreateController', ), @@ -69,15 +69,17 @@ '' => 'PhortuneAccountListController', $this->getEditRoutePattern('edit/') => 'PhortuneAccountEditController', - 'edit/(?:(?P\d+)/)?' => 'PhortuneAccountEditController', - 'add/manager/(?:(?P\d+)/)?' - => 'PhortuneAccountAddManagerController', - 'billing/(?:(?P\d+)/)?' => 'PhortuneAccountBillingController', - 'subscription/(?:(?P\d+)/)?' - => 'PhortuneAccountSubscriptionController', - 'manager/' => array( - '(?:(?P\d+)/)?' => 'PhortuneAccountManagerController', - 'add/(?:(?P\d+)/)?' => 'PhortuneAccountAddManagerController', + + '(?P\d+)/' => array( + 'details/' => 'PhortuneAccountDetailsController', + 'methods/' => 'PhortuneAccountPaymentMethodsController', + 'orders/' => 'PhortuneAccountOrdersController', + 'charges/' => 'PhortuneAccountChargesController', + 'subscriptions/' => 'PhortuneAccountSubscriptionController', + 'managers/' => array( + '' => 'PhortuneAccountManagersController', + 'add/' => 'PhortuneAccountAddManagerController', + ), ), ), 'product/' => array( diff --git a/src/applications/phortune/controller/account/PhortuneAccountAddManagerController.php b/src/applications/phortune/controller/account/PhortuneAccountAddManagerController.php --- a/src/applications/phortune/controller/account/PhortuneAccountAddManagerController.php +++ b/src/applications/phortune/controller/account/PhortuneAccountAddManagerController.php @@ -4,7 +4,7 @@ public function handleRequest(AphrontRequest $request) { $viewer = $request->getViewer(); - $id = $request->getURIData('id'); + $id = $request->getURIData('accountID'); $account = id(new PhortuneAccountQuery()) ->setViewer($viewer) @@ -21,7 +21,7 @@ $v_managers = array(); $e_managers = null; - $account_uri = $this->getApplicationURI("/account/manager/{$id}/"); + $account_uri = $this->getApplicationURI("/account/{$id}/managers/"); if ($request->isFormPost()) { $xactions = array(); @@ -64,11 +64,11 @@ ->setError($e_managers)); return $this->newDialog() - ->setTitle(pht('Add New Manager')) + ->setTitle(pht('Add New Managers')) ->appendForm($form) ->setWidth(AphrontDialogView::WIDTH_FORM) ->addCancelButton($account_uri) - ->addSubmitButton(pht('Add Manager')); + ->addSubmitButton(pht('Add Managers')); } diff --git a/src/applications/phortune/controller/account/PhortuneAccountChargesController.php b/src/applications/phortune/controller/account/PhortuneAccountChargesController.php new file mode 100644 --- /dev/null +++ b/src/applications/phortune/controller/account/PhortuneAccountChargesController.php @@ -0,0 +1,79 @@ +loadAccount(); + if ($response) { + return $response; + } + + $account = $this->getAccount(); + $title = $account->getName(); + + $crumbs = $this->buildApplicationCrumbs(); + $crumbs->addTextCrumb(pht('Order History')); + + $header = $this->buildHeaderView(); + $charge_history = $this->buildChargeHistorySection($account); + + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setFooter( + array( + $charge_history, + )); + + $navigation = $this->buildSideNavView('charges'); + + return $this->newPage() + ->setTitle($title) + ->setCrumbs($crumbs) + ->setNavigation($navigation) + ->appendChild($view); + } + + private function buildChargeHistorySection(PhortuneAccount $account) { + $viewer = $this->getViewer(); + + $charges = id(new PhortuneChargeQuery()) + ->setViewer($viewer) + ->withAccountPHIDs(array($account->getPHID())) + ->needCarts(true) + ->setLimit(100) + ->execute(); + + $phids = array(); + foreach ($charges as $charge) { + $phids[] = $charge->getProviderPHID(); + $phids[] = $charge->getCartPHID(); + $phids[] = $charge->getMerchantPHID(); + $phids[] = $charge->getPaymentMethodPHID(); + } + + $handles = $this->loadViewerHandles($phids); + + $charges_uri = $this->getApplicationURI($account->getID().'/charge/'); + + $table = id(new PhortuneChargeTableView()) + ->setUser($viewer) + ->setCharges($charges) + ->setHandles($handles); + + $header = id(new PHUIHeaderView()) + ->setHeader(pht('Recent Charges')) + ->addActionLink( + id(new PHUIButtonView()) + ->setTag('a') + ->setIcon('fa-list') + ->setHref($charges_uri) + ->setText(pht('View All Charges'))); + + return id(new PHUIObjectBoxView()) + ->setHeader($header) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) + ->setTable($table); + } + +} diff --git a/src/applications/phortune/controller/account/PhortuneAccountDetailsController.php b/src/applications/phortune/controller/account/PhortuneAccountDetailsController.php new file mode 100644 --- /dev/null +++ b/src/applications/phortune/controller/account/PhortuneAccountDetailsController.php @@ -0,0 +1,132 @@ +loadAccount(); + if ($response) { + return $response; + } + + $account = $this->getAccount(); + $title = $account->getName(); + + $viewer = $this->getViewer(); + + $invoices = id(new PhortuneCartQuery()) + ->setViewer($viewer) + ->withAccountPHIDs(array($account->getPHID())) + ->needPurchases(true) + ->withInvoices(true) + ->execute(); + + $crumbs = $this->buildApplicationCrumbs(); + $crumbs->setBorder(true); + + $header = $this->buildHeaderView(); + + $details = $this->newDetailsView($account); + + $curtain = $this->buildCurtainView($account); + + $timeline = $this->buildTransactionTimeline( + $account, + new PhortuneAccountTransactionQuery()); + $timeline->setShouldTerminate(true); + + + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setCurtain($curtain) + ->setMainColumn( + array( + $details, + $timeline, + )); + + $navigation = $this->buildSideNavView('details'); + + return $this->newPage() + ->setTitle($title) + ->setCrumbs($crumbs) + ->setNavigation($navigation) + ->appendChild($view); + + } + + private function buildCurtainView(PhortuneAccount $account) { + $viewer = $this->getViewer(); + + $can_edit = PhabricatorPolicyFilter::hasCapability( + $viewer, + $account, + PhabricatorPolicyCapability::CAN_EDIT); + + $edit_uri = $this->getApplicationURI('account/edit/'.$account->getID().'/'); + + $curtain = $this->newCurtainView($account); + $curtain->addAction( + id(new PhabricatorActionView()) + ->setName(pht('Edit Account')) + ->setIcon('fa-pencil') + ->setHref($edit_uri) + ->setDisabled(!$can_edit) + ->setWorkflow(!$can_edit)); + + $member_phids = $account->getMemberPHIDs(); + $handles = $viewer->loadHandles($member_phids); + + $member_list = id(new PHUIObjectItemListView()) + ->setSimple(true); + + foreach ($member_phids as $member_phid) { + $image_uri = $handles[$member_phid]->getImageURI(); + $image_href = $handles[$member_phid]->getURI(); + $person = $handles[$member_phid]; + + $member = id(new PHUIObjectItemView()) + ->setImageURI($image_uri) + ->setHref($image_href) + ->setHeader($person->getFullName()); + + $member_list->addItem($member); + } + + $curtain->newPanel() + ->setHeaderText(pht('Managers')) + ->appendChild($member_list); + + return $curtain; + } + + private function newDetailsView(PhortuneAccount $account) { + $viewer = $this->getViewer(); + + $view = id(new PHUIPropertyListView()) + ->setUser($viewer); + + $view->addProperty(pht('Account Name'), $account->getName()); + + $display_name = $account->getBillingName(); + if (!strlen($display_name)) { + $display_name = phutil_tag('em', array(), pht('None')); + } + + $display_address = $account->getBillingAddress(); + if (!strlen($display_address)) { + $display_address = phutil_tag('em', array(), pht('None')); + } else { + $display_address = phutil_escape_html_newlines($display_address); + } + + $view->addProperty(pht('Billing Name'), $display_name); + $view->addProperty(pht('Billing Address'), $display_address); + + return id(new PHUIObjectBoxView()) + ->setHeaderText(pht('Account Details')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) + ->addPropertyList($view); + } + +} diff --git a/src/applications/phortune/controller/account/PhortuneAccountManagerController.php b/src/applications/phortune/controller/account/PhortuneAccountManagersController.php rename from src/applications/phortune/controller/account/PhortuneAccountManagerController.php rename to src/applications/phortune/controller/account/PhortuneAccountManagersController.php --- a/src/applications/phortune/controller/account/PhortuneAccountManagerController.php +++ b/src/applications/phortune/controller/account/PhortuneAccountManagersController.php @@ -1,6 +1,6 @@ setTag('a') - ->setText(pht('New Manager')) + ->setText(pht('Add Managers')) ->setIcon('fa-plus') ->setWorkflow(true) ->setDisabled(!$can_edit) - ->setHref("/phortune/account/manager/add/{$id}/"); + ->setHref("/phortune/account/{$id}/managers/add/"); $header = id(new PHUIHeaderView()) ->setHeader(pht('Account Managers')) diff --git a/src/applications/phortune/controller/account/PhortuneAccountOrdersController.php b/src/applications/phortune/controller/account/PhortuneAccountOrdersController.php new file mode 100644 --- /dev/null +++ b/src/applications/phortune/controller/account/PhortuneAccountOrdersController.php @@ -0,0 +1,37 @@ +loadAccount(); + if ($response) { + return $response; + } + + $account = $this->getAccount(); + $title = $account->getName(); + + $crumbs = $this->buildApplicationCrumbs(); + $crumbs->addTextCrumb(pht('Order History')); + + $header = $this->buildHeaderView(); + $order_history = $this->newRecentOrdersView($account, 100); + + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setFooter( + array( + $order_history, + )); + + $navigation = $this->buildSideNavView('orders'); + + return $this->newPage() + ->setTitle($title) + ->setCrumbs($crumbs) + ->setNavigation($navigation) + ->appendChild($view); + } + +} diff --git a/src/applications/phortune/controller/account/PhortuneAccountViewController.php b/src/applications/phortune/controller/account/PhortuneAccountOverviewController.php rename from src/applications/phortune/controller/account/PhortuneAccountViewController.php rename to src/applications/phortune/controller/account/PhortuneAccountOverviewController.php --- a/src/applications/phortune/controller/account/PhortuneAccountViewController.php +++ b/src/applications/phortune/controller/account/PhortuneAccountOverviewController.php @@ -1,6 +1,6 @@ buildHeaderView(); - $curtain = $this->buildCurtainView($account); $status = $this->buildStatusView($account, $invoices); $invoices = $this->buildInvoicesSection($account, $invoices); - $purchase_history = $this->buildPurchaseHistorySection($account); - - $timeline = $this->buildTransactionTimeline( - $account, - new PhortuneAccountTransactionQuery()); - $timeline->setShouldTerminate(true); + $purchase_history = $this->newRecentOrdersView($account, 10); $view = id(new PHUITwoColumnView()) ->setHeader($header) - ->setCurtain($curtain) - ->setMainColumn(array( - $status, - $invoices, - $purchase_history, - $timeline, - )); + ->setFooter( + array( + $status, + $invoices, + $purchase_history, + )); $navigation = $this->buildSideNavView('overview'); @@ -53,7 +46,6 @@ ->setCrumbs($crumbs) ->setNavigation($navigation) ->appendChild($view); - } private function buildStatusView(PhortuneAccount $account, $invoices) { @@ -67,51 +59,6 @@ return $view; } - private function buildCurtainView(PhortuneAccount $account) { - $viewer = $this->getViewer(); - - $can_edit = PhabricatorPolicyFilter::hasCapability( - $viewer, - $account, - PhabricatorPolicyCapability::CAN_EDIT); - - $edit_uri = $this->getApplicationURI('account/edit/'.$account->getID().'/'); - - $curtain = $this->newCurtainView($account); - $curtain->addAction( - id(new PhabricatorActionView()) - ->setName(pht('Edit Account')) - ->setIcon('fa-pencil') - ->setHref($edit_uri) - ->setDisabled(!$can_edit) - ->setWorkflow(!$can_edit)); - - $member_phids = $account->getMemberPHIDs(); - $handles = $viewer->loadHandles($member_phids); - - $member_list = id(new PHUIObjectItemListView()) - ->setSimple(true); - - foreach ($member_phids as $member_phid) { - $image_uri = $handles[$member_phid]->getImageURI(); - $image_href = $handles[$member_phid]->getURI(); - $person = $handles[$member_phid]; - - $member = id(new PHUIObjectItemView()) - ->setImageURI($image_uri) - ->setHref($image_href) - ->setHeader($person->getFullName()); - - $member_list->addItem($member); - } - - $curtain->newPanel() - ->setHeaderText(pht('Managers')) - ->appendChild($member_list); - - return $curtain; - } - private function buildInvoicesSection( PhortuneAccount $account, array $carts) { @@ -144,55 +91,6 @@ ->setTable($table); } - private function buildPurchaseHistorySection(PhortuneAccount $account) { - $viewer = $this->getViewer(); - - $carts = id(new PhortuneCartQuery()) - ->setViewer($viewer) - ->withAccountPHIDs(array($account->getPHID())) - ->needPurchases(true) - ->withStatuses( - array( - PhortuneCart::STATUS_PURCHASING, - PhortuneCart::STATUS_CHARGED, - PhortuneCart::STATUS_HOLD, - PhortuneCart::STATUS_REVIEW, - PhortuneCart::STATUS_PURCHASED, - )) - ->setLimit(10) - ->execute(); - - $phids = array(); - foreach ($carts as $cart) { - $phids[] = $cart->getPHID(); - foreach ($cart->getPurchases() as $purchase) { - $phids[] = $purchase->getPHID(); - } - } - $handles = $this->loadViewerHandles($phids); - - $orders_uri = $this->getApplicationURI($account->getID().'/order/'); - - $table = id(new PhortuneOrderTableView()) - ->setUser($viewer) - ->setCarts($carts) - ->setHandles($handles); - - $header = id(new PHUIHeaderView()) - ->setHeader(pht('Recent Orders')) - ->addActionLink( - id(new PHUIButtonView()) - ->setTag('a') - ->setIcon('fa-list') - ->setHref($orders_uri) - ->setText(pht('View All Orders'))); - - return id(new PHUIObjectBoxView()) - ->setHeader($header) - ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) - ->setTable($table); - } - protected function buildApplicationCrumbs() { $crumbs = parent::buildApplicationCrumbs(); diff --git a/src/applications/phortune/controller/account/PhortuneAccountBillingController.php b/src/applications/phortune/controller/account/PhortuneAccountPaymentMethodsController.php rename from src/applications/phortune/controller/account/PhortuneAccountBillingController.php rename to src/applications/phortune/controller/account/PhortuneAccountPaymentMethodsController.php --- a/src/applications/phortune/controller/account/PhortuneAccountBillingController.php +++ b/src/applications/phortune/controller/account/PhortuneAccountPaymentMethodsController.php @@ -1,6 +1,6 @@ getName(); $crumbs = $this->buildApplicationCrumbs(); - $crumbs->addTextCrumb(pht('Billing')); + $crumbs->addTextCrumb(pht('Payment Methods')); $header = $this->buildHeaderView(); $methods = $this->buildPaymentMethodsSection($account); - $charge_history = $this->buildChargeHistorySection($account); $view = id(new PHUITwoColumnView()) ->setHeader($header) - ->setFooter(array( - $methods, - $charge_history, - )); + ->setFooter( + array( + $methods, + )); - $navigation = $this->buildSideNavView('billing'); + $navigation = $this->buildSideNavView('methods'); return $this->newPage() ->setTitle($title) @@ -60,7 +59,7 @@ ->setUser($viewer) ->setFlush(true) ->setNoDataString( - pht('No payment methods associated with this account.')); + pht('There are no payment methods associated with this account.')); $methods = id(new PhortunePaymentMethodQuery()) ->setViewer($viewer) @@ -116,46 +115,4 @@ ->setObjectList($list); } - private function buildChargeHistorySection(PhortuneAccount $account) { - $viewer = $this->getViewer(); - - $charges = id(new PhortuneChargeQuery()) - ->setViewer($viewer) - ->withAccountPHIDs(array($account->getPHID())) - ->needCarts(true) - ->setLimit(10) - ->execute(); - - $phids = array(); - foreach ($charges as $charge) { - $phids[] = $charge->getProviderPHID(); - $phids[] = $charge->getCartPHID(); - $phids[] = $charge->getMerchantPHID(); - $phids[] = $charge->getPaymentMethodPHID(); - } - - $handles = $this->loadViewerHandles($phids); - - $charges_uri = $this->getApplicationURI($account->getID().'/charge/'); - - $table = id(new PhortuneChargeTableView()) - ->setUser($viewer) - ->setCharges($charges) - ->setHandles($handles); - - $header = id(new PHUIHeaderView()) - ->setHeader(pht('Charge History')) - ->addActionLink( - id(new PHUIButtonView()) - ->setTag('a') - ->setIcon('fa-list') - ->setHref($charges_uri) - ->setText(pht('View All Charges'))); - - return id(new PHUIObjectBoxView()) - ->setHeader($header) - ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) - ->setTable($table); - } - } diff --git a/src/applications/phortune/controller/account/PhortuneAccountProfileController.php b/src/applications/phortune/controller/account/PhortuneAccountProfileController.php --- a/src/applications/phortune/controller/account/PhortuneAccountProfileController.php +++ b/src/applications/phortune/controller/account/PhortuneAccountProfileController.php @@ -42,22 +42,44 @@ $this->getApplicationURI("/{$id}/"), 'fa-user-circle'); + $nav->addFilter( + 'details', + pht('Account Details'), + $this->getApplicationURI("/account/{$id}/details/"), + 'fa-address-card-o'); + + $nav->addLabel(pht('Payments')); + + $nav->addFilter( + 'methods', + pht('Payment Methods'), + $this->getApplicationURI("/account/{$id}/methods/"), + 'fa-credit-card'); + $nav->addFilter( 'subscriptions', pht('Subscriptions'), - $this->getApplicationURI("/account/subscription/{$id}/"), + $this->getApplicationURI("/account/{$id}/subscriptions/"), 'fa-retweet'); $nav->addFilter( - 'billing', - pht('Billing / History'), - $this->getApplicationURI("/account/billing/{$id}/"), - 'fa-credit-card'); + 'orders', + pht('Order History'), + $this->getApplicationURI("/account/{$id}/orders/"), + 'fa-shopping-bag'); + + $nav->addFilter( + 'charges', + pht('Charge History'), + $this->getApplicationURI("/account/{$id}/charges/"), + 'fa-calculator'); + + $nav->addLabel(pht('Personnel')); $nav->addFilter( 'managers', - pht('Managers'), - $this->getApplicationURI("/account/manager/{$id}/"), + pht('Account Managers'), + $this->getApplicationURI("/account/{$id}/managers/"), 'fa-group'); $nav->selectFilter($filter); @@ -65,4 +87,57 @@ return $nav; } + final protected function newRecentOrdersView( + PhortuneAccount $account, + $limit) { + + $viewer = $this->getViewer(); + + $carts = id(new PhortuneCartQuery()) + ->setViewer($viewer) + ->withAccountPHIDs(array($account->getPHID())) + ->needPurchases(true) + ->withStatuses( + array( + PhortuneCart::STATUS_PURCHASING, + PhortuneCart::STATUS_CHARGED, + PhortuneCart::STATUS_HOLD, + PhortuneCart::STATUS_REVIEW, + PhortuneCart::STATUS_PURCHASED, + )) + ->setLimit($limit) + ->execute(); + + $phids = array(); + foreach ($carts as $cart) { + $phids[] = $cart->getPHID(); + foreach ($cart->getPurchases() as $purchase) { + $phids[] = $purchase->getPHID(); + } + } + $handles = $this->loadViewerHandles($phids); + + $orders_uri = $this->getApplicationURI($account->getID().'/order/'); + + $table = id(new PhortuneOrderTableView()) + ->setUser($viewer) + ->setCarts($carts) + ->setHandles($handles); + + $header = id(new PHUIHeaderView()) + ->setHeader(pht('Recent Orders')) + ->addActionLink( + id(new PHUIButtonView()) + ->setTag('a') + ->setIcon('fa-list') + ->setHref($orders_uri) + ->setText(pht('View All Orders'))); + + return id(new PHUIObjectBoxView()) + ->setHeader($header) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) + ->setTable($table); + } + + } diff --git a/src/applications/phortune/editor/PhortuneAccountEditEngine.php b/src/applications/phortune/editor/PhortuneAccountEditEngine.php --- a/src/applications/phortune/editor/PhortuneAccountEditEngine.php +++ b/src/applications/phortune/editor/PhortuneAccountEditEngine.php @@ -62,7 +62,11 @@ } protected function getObjectViewURI($object) { - return $object->getURI(); + if ($this->getIsCreate()) { + return $object->getURI(); + } else { + return $object->getDetailsURI(); + } } protected function buildCustomEditFields($object) { diff --git a/src/applications/phortune/storage/PhortuneAccount.php b/src/applications/phortune/storage/PhortuneAccount.php --- a/src/applications/phortune/storage/PhortuneAccount.php +++ b/src/applications/phortune/storage/PhortuneAccount.php @@ -103,6 +103,12 @@ return '/phortune/'.$this->getID().'/'; } + public function getDetailsURI() { + return urisprintf( + '/phortune/account/%d/details/', + $this->getID()); + } + /* -( PhabricatorApplicationTransactionInterface )------------------------- */