Remove all "FileHasObject" edge reads and writes
[phabricator.git] / src / applications / phortune / controller / cart / PhortuneCartViewController.php
blob9412d1104537b8f75115f934cd13656fb6f05e2c
1 <?php
3 final class PhortuneCartViewController
4 extends PhortuneCartController {
6 protected function shouldRequireAccountAuthority() {
7 return false;
10 protected function shouldRequireMerchantAuthority() {
11 return false;
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');
22 $resume_uri = null;
23 if ($order->getStatus() === PhortuneCart::STATUS_PURCHASING) {
24 if ($can_edit) {
25 $resume_uri = $order->getMetadataValue('provider.checkoutURI');
29 $header = id(new PHUIHeaderView())
30 ->setUser($viewer)
31 ->setHeader($order->getName())
32 ->setHeaderIcon('fa-shopping-bag');
34 if ($order->getStatus() == PhortuneCart::STATUS_PURCHASED) {
35 $done_uri = $order->getDoneURI();
36 if ($done_uri) {
37 $header->addActionLink(
38 id(new PHUIButtonView())
39 ->setTag('a')
40 ->setHref($done_uri)
41 ->setIcon('fa-check-square green')
42 ->setText($order->getDoneActionName()));
46 $order_view = id(new PhortuneOrderSummaryView())
47 ->setViewer($viewer)
48 ->setOrder($order)
49 ->setResumeURI($resume_uri)
50 ->setPrintable($is_printable);
52 $crumbs = null;
53 $curtain = null;
55 $main = array();
56 $tail = array();
58 require_celerity_resource('phortune-invoice-css');
60 if ($is_printable) {
61 $body_class = 'phortune-invoice-view';
63 $tail[] = $order_view;
64 } else {
65 $body_class = 'phortune-cart-page';
67 $curtain = $this->buildCurtainView(
68 $order,
69 $can_edit,
70 $authority,
71 $resume_uri);
73 $account = $order->getAccount();
74 $crumbs = $this->buildApplicationCrumbs()
75 ->addTextCrumb($account->getName(), $account->getURI())
76 ->addTextCrumb(pht('Orders'), $account->getOrdersURI())
77 ->addTextCrumb($order->getObjectName())
78 ->setBorder(true);
80 $timeline = $this->buildTransactionTimeline($order)
81 ->setShouldTerminate(true);
83 $main[] = $order_view;
84 $main[] = $timeline;
87 $column_view = id(new PHUITwoColumnView())
88 ->setMainColumn($main)
89 ->setFooter($tail);
91 if ($curtain) {
92 $column_view->setCurtain($curtain);
95 $page = $this->newPage()
96 ->addClass($body_class)
97 ->setTitle(
98 array(
99 $order->getObjectName(),
100 $order->getName(),
102 ->appendChild($column_view);
104 if ($crumbs) {
105 $page->setCrumbs($crumbs);
108 return $page;
111 private function buildCurtainView(
112 PhortuneCart $cart,
113 $can_edit,
114 $authority,
115 $resume_uri) {
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/");
139 $curtain->addAction(
140 id(new PhabricatorActionView())
141 ->setName(pht('Printable Version'))
142 ->setHref($print_uri)
143 ->setOpenInNewWindow(true)
144 ->setIcon('fa-print'));
146 $curtain->addAction(
147 id(new PhabricatorActionView())
148 ->setType(PhabricatorActionView::TYPE_DIVIDER));
150 $curtain->addAction(
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));
158 $curtain->addAction(
159 id(new PhabricatorActionView())
160 ->setName(pht('Cancel Order'))
161 ->setIcon('fa-times')
162 ->setDisabled(!$can_cancel)
163 ->setWorkflow(true)
164 ->setHref($cancel_uri));
166 $curtain->addAction(
167 id(new PhabricatorActionView())
168 ->setName(pht('Update Status'))
169 ->setIcon('fa-refresh')
170 ->setHref($update_uri));
172 if ($can_edit && $resume_uri) {
173 $curtain->addAction(
174 id(new PhabricatorActionView())
175 ->setName(pht('Continue Checkout'))
176 ->setIcon('fa-shopping-bag')
177 ->setHref($resume_uri));
180 if ($authority) {
181 $curtain->addAction(
182 id(new PhabricatorActionView())
183 ->setType(PhabricatorActionView::TYPE_DIVIDER));
185 $curtain->addAction(
186 id(new PhabricatorActionView())
187 ->setName(pht('Accept Order'))
188 ->setIcon('fa-check')
189 ->setWorkflow(true)
190 ->setDisabled(!$can_accept)
191 ->setHref($accept_uri));
193 $curtain->addAction(
194 id(new PhabricatorActionView())
195 ->setName(pht('Refund Order'))
196 ->setIcon('fa-reply')
197 ->setWorkflow(true)
198 ->setDisabled(!$can_refund)
199 ->setHref($refund_uri));
201 $curtain->addAction(
202 id(new PhabricatorActionView())
203 ->setName(pht('Void Invoice'))
204 ->setIcon('fa-times')
205 ->setWorkflow(true)
206 ->setDisabled(!$can_void)
207 ->setHref($void_uri));
210 return $curtain;