3 final class PhortuneCartViewController
4 extends PhortuneCartController
{
6 protected function shouldRequireAccountAuthority() {
10 protected function shouldRequireMerchantAuthority() {
14 protected function handleCartRequest(AphrontRequest
$request) {
15 $viewer = $request->getViewer();
16 $order = $this->getCart();
17 $authority = $this->getMerchantAuthority();
18 $can_edit = $this->hasAccountAuthority();
20 $is_printable = ($request->getURIData('action') === 'print');
23 if ($order->getStatus() === PhortuneCart
::STATUS_PURCHASING
) {
25 $resume_uri = $order->getMetadataValue('provider.checkoutURI');
29 $header = id(new PHUIHeaderView())
31 ->setHeader($order->getName())
32 ->setHeaderIcon('fa-shopping-bag');
34 if ($order->getStatus() == PhortuneCart
::STATUS_PURCHASED
) {
35 $done_uri = $order->getDoneURI();
37 $header->addActionLink(
38 id(new PHUIButtonView())
41 ->setIcon('fa-check-square green')
42 ->setText($order->getDoneActionName()));
46 $order_view = id(new PhortuneOrderSummaryView())
49 ->setResumeURI($resume_uri)
50 ->setPrintable($is_printable);
58 require_celerity_resource('phortune-invoice-css');
61 $body_class = 'phortune-invoice-view';
63 $tail[] = $order_view;
65 $body_class = 'phortune-cart-page';
67 $curtain = $this->buildCurtainView(
73 $account = $order->getAccount();
74 $crumbs = $this->buildApplicationCrumbs()
75 ->addTextCrumb($account->getName(), $account->getURI())
76 ->addTextCrumb(pht('Orders'), $account->getOrdersURI())
77 ->addTextCrumb($order->getObjectName())
80 $timeline = $this->buildTransactionTimeline($order)
81 ->setShouldTerminate(true);
83 $main[] = $order_view;
87 $column_view = id(new PHUITwoColumnView())
88 ->setMainColumn($main)
92 $column_view->setCurtain($curtain);
95 $page = $this->newPage()
96 ->addClass($body_class)
99 $order->getObjectName(),
102 ->appendChild($column_view);
105 $page->setCrumbs($crumbs);
111 private function buildCurtainView(
117 $viewer = $this->getViewer();
118 $id = $cart->getID();
119 $curtain = $this->newCurtainView($cart);
120 $status = $cart->getStatus();
122 $is_ready = ($status === PhortuneCart
::STATUS_READY
);
124 $can_cancel = ($can_edit && $cart->canCancelOrder());
125 $can_checkout = ($can_edit && $is_ready);
126 $can_accept = ($status === PhortuneCart
::STATUS_REVIEW
);
127 $can_refund = ($authority && $cart->canRefundOrder());
128 $can_void = ($authority && $cart->canVoidOrder());
130 $cancel_uri = $this->getApplicationURI("cart/{$id}/cancel/");
131 $refund_uri = $this->getApplicationURI("cart/{$id}/refund/");
132 $update_uri = $this->getApplicationURI("cart/{$id}/update/");
133 $accept_uri = $this->getApplicationURI("cart/{$id}/accept/");
134 $print_uri = $this->getApplicationURI("cart/{$id}/print/");
135 $checkout_uri = $cart->getCheckoutURI();
136 $void_uri = $this->getApplicationURI("cart/{$id}/void/");
140 id(new PhabricatorActionView())
141 ->setName(pht('Printable Version'))
142 ->setHref($print_uri)
143 ->setOpenInNewWindow(true)
144 ->setIcon('fa-print'));
147 id(new PhabricatorActionView())
148 ->setType(PhabricatorActionView
::TYPE_DIVIDER
));
151 id(new PhabricatorActionView())
152 ->setName(pht('Pay Now'))
153 ->setIcon('fa-credit-card')
154 ->setDisabled(!$can_checkout)
155 ->setWorkflow(!$can_checkout)
156 ->setHref($checkout_uri));
159 id(new PhabricatorActionView())
160 ->setName(pht('Cancel Order'))
161 ->setIcon('fa-times')
162 ->setDisabled(!$can_cancel)
164 ->setHref($cancel_uri));
167 id(new PhabricatorActionView())
168 ->setName(pht('Update Status'))
169 ->setIcon('fa-refresh')
170 ->setHref($update_uri));
172 if ($can_edit && $resume_uri) {
174 id(new PhabricatorActionView())
175 ->setName(pht('Continue Checkout'))
176 ->setIcon('fa-shopping-bag')
177 ->setHref($resume_uri));
182 id(new PhabricatorActionView())
183 ->setType(PhabricatorActionView
::TYPE_DIVIDER
));
186 id(new PhabricatorActionView())
187 ->setName(pht('Accept Order'))
188 ->setIcon('fa-check')
190 ->setDisabled(!$can_accept)
191 ->setHref($accept_uri));
194 id(new PhabricatorActionView())
195 ->setName(pht('Refund Order'))
196 ->setIcon('fa-reply')
198 ->setDisabled(!$can_refund)
199 ->setHref($refund_uri));
202 id(new PhabricatorActionView())
203 ->setName(pht('Void Invoice'))
204 ->setIcon('fa-times')
206 ->setDisabled(!$can_void)
207 ->setHref($void_uri));