Page MenuHomePhabricator

D16762.id40369.diff
No OneTemporary

D16762.id40369.diff

diff --git a/resources/celerity/map.php b/resources/celerity/map.php
--- a/resources/celerity/map.php
+++ b/resources/celerity/map.php
@@ -89,6 +89,7 @@
'rsrc/css/application/pholio/pholio-inline-comments.css' => '8e545e49',
'rsrc/css/application/pholio/pholio.css' => 'ca89d380',
'rsrc/css/application/phortune/phortune-credit-card-form.css' => '8391eb02',
+ 'rsrc/css/application/phortune/phortune-invoice.css' => 'aef82a45',
'rsrc/css/application/phortune/phortune.css' => '5b99dae0',
'rsrc/css/application/phrequent/phrequent.css' => 'ffc185ad',
'rsrc/css/application/phriction/phriction-document-css.css' => '4282e4ad',
@@ -840,6 +841,7 @@
'phortune-credit-card-form' => '2290aeef',
'phortune-credit-card-form-css' => '8391eb02',
'phortune-css' => '5b99dae0',
+ 'phortune-invoice-css' => 'aef82a45',
'phrequent-css' => 'ffc185ad',
'phriction-document-css' => '4282e4ad',
'phui-action-panel-css' => '91c7b835',
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
@@ -4167,6 +4167,7 @@
'PhortuneCurrencyTestCase' => 'applications/phortune/currency/__tests__/PhortuneCurrencyTestCase.php',
'PhortuneDAO' => 'applications/phortune/storage/PhortuneDAO.php',
'PhortuneErrCode' => 'applications/phortune/constants/PhortuneErrCode.php',
+ 'PhortuneInvoiceView' => 'applications/phortune/view/PhortuneInvoiceView.php',
'PhortuneLandingController' => 'applications/phortune/controller/PhortuneLandingController.php',
'PhortuneMemberHasAccountEdgeType' => 'applications/phortune/edge/PhortuneMemberHasAccountEdgeType.php',
'PhortuneMemberHasMerchantEdgeType' => 'applications/phortune/edge/PhortuneMemberHasMerchantEdgeType.php',
@@ -9404,6 +9405,7 @@
'PhortuneCurrencyTestCase' => 'PhabricatorTestCase',
'PhortuneDAO' => 'PhabricatorLiskDAO',
'PhortuneErrCode' => 'PhortuneConstants',
+ 'PhortuneInvoiceView' => 'AphrontTagView',
'PhortuneLandingController' => 'PhortuneController',
'PhortuneMemberHasAccountEdgeType' => 'PhabricatorEdgeType',
'PhortuneMemberHasMerchantEdgeType' => 'PhabricatorEdgeType',
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
@@ -61,6 +61,7 @@
'cart/(?P<id>\d+)/' => array(
'' => 'PhortuneCartViewController',
'checkout/' => 'PhortuneCartCheckoutController',
+ '(?P<action>print)/' => 'PhortuneCartViewController',
'(?P<action>cancel|refund)/' => 'PhortuneCartCancelController',
'update/' => 'PhortuneCartUpdateController',
),
diff --git a/src/applications/phortune/controller/PhortuneCartViewController.php b/src/applications/phortune/controller/PhortuneCartViewController.php
--- a/src/applications/phortune/controller/PhortuneCartViewController.php
+++ b/src/applications/phortune/controller/PhortuneCartViewController.php
@@ -6,6 +6,7 @@
public function handleRequest(AphrontRequest $request) {
$viewer = $request->getViewer();
$id = $request->getURIData('id');
+ $action = $request->getURIData('action');
$authority = $this->loadMerchantAuthority();
require_celerity_resource('phortune-css');
@@ -188,36 +189,74 @@
$crumbs->addTextCrumb(pht('Cart %d', $cart->getID()));
$crumbs->setBorder(true);
- $timeline = $this->buildTransactionTimeline(
- $cart,
- new PhortuneCartTransactionQuery());
- $timeline
- ->setShouldTerminate(true);
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setCurtain($curtain)
- ->setMainColumn(array(
- $error_view,
- $details,
- $cart_box,
- $description,
- $charges,
- $timeline,
- ));
+ if (!$action) {
+ $class = 'phortune-cart-page';
+ $timeline = $this->buildTransactionTimeline(
+ $cart,
+ new PhortuneCartTransactionQuery());
+ $timeline
+ ->setShouldTerminate(true);
+
+ $view = id(new PHUITwoColumnView())
+ ->setHeader($header)
+ ->setCurtain($curtain)
+ ->setMainColumn(array(
+ $error_view,
+ $details,
+ $cart_box,
+ $description,
+ $charges,
+ $timeline,
+ ));
+
+ } else {
+ $class = 'phortune-invoice-view';
+ $crumbs = null;
+ $merchant_phid = $cart->getMerchantPHID();
+ $buyer_phid = $cart->getAuthorPHID();
+ $merchant = id(new PhortuneMerchantQuery())
+ ->setViewer($viewer)
+ ->withPHIDs(array($merchant_phid))
+ ->needProfileImage(true)
+ ->executeOne();
+ $buyer = id(new PhabricatorPeopleQuery())
+ ->setViewer($viewer)
+ ->withPHIDs(array($buyer_phid))
+ ->needProfileImage(true)
+ ->executeOne();
+ // TODO: Add account "Contact" info
+
+ $merchant_contact = new PHUIRemarkupView(
+ $viewer, $merchant->getContactInfo());
+ $description = null;
+
+ $view = id(new PhortuneInvoiceView())
+ ->setMerchantName($merchant->getName())
+ ->setMerchantLogo($merchant->getProfileImageURI())
+ ->setMerchantContact($merchant_contact)
+ ->setAccountName($buyer->getRealName())
+ ->setStatus($error_view)
+ ->setContent(array(
+ $description,
+ $details,
+ $cart_box,
+ $charges,
+ ));
+ }
- return $this->newPage()
+ $page = $this->newPage()
->setTitle(pht('Cart %d', $cart->getID()))
- ->setCrumbs($crumbs)
- ->addClass('phortune-cart-page')
+ ->addClass($class)
->appendChild($view);
+ if ($crumbs) {
+ $page->setCrumbs($crumbs);
+ }
+ return $page;
}
private function buildDetailsView(PhortuneCart $cart) {
-
$viewer = $this->getViewer();
-
$view = id(new PHUIPropertyListView())
->setUser($viewer)
->setObject($cart);
@@ -276,7 +315,7 @@
$refund_uri = $this->getApplicationURI("{$prefix}cart/{$id}/refund/");
$update_uri = $this->getApplicationURI("{$prefix}cart/{$id}/update/");
$accept_uri = $this->getApplicationURI("{$prefix}cart/{$id}/accept/");
- $print_uri = $this->getApplicationURI("{$prefix}cart/{$id}/?__print__=1");
+ $print_uri = $this->getApplicationURI("{$prefix}cart/{$id}/print/");
$curtain->addAction(
id(new PhabricatorActionView())
diff --git a/src/applications/phortune/view/PhortuneInvoiceView.php b/src/applications/phortune/view/PhortuneInvoiceView.php
new file mode 100644
--- /dev/null
+++ b/src/applications/phortune/view/PhortuneInvoiceView.php
@@ -0,0 +1,155 @@
+<?php
+
+final class PhortuneInvoiceView extends AphrontTagView {
+
+ private $merchantName;
+ private $merchantLogo;
+ private $merchantContact;
+ private $accountName;
+ private $accountContact;
+ private $status;
+ private $content;
+
+ public function setMerchantName($name) {
+ $this->merchantName = $name;
+ return $this;
+ }
+
+ public function setMerchantLogo($logo) {
+ $this->merchantLogo = $logo;
+ return $this;
+ }
+
+ public function setMerchantContact($contact) {
+ $this->merchantContact = $contact;
+ return $this;
+ }
+
+ public function setAccountName($name) {
+ $this->accountName = $name;
+ return $this;
+ }
+
+ public function setAccountContact($contact) {
+ $this->accountContact = $contact;
+ return $this;
+ }
+
+ public function setStatus($status) {
+ $this->status = $status;
+ return $this;
+ }
+
+ public function setContent($content) {
+ $this->content = $content;
+ return $this;
+ }
+
+ protected function getTagAttributes() {
+ $classes = array();
+ $classes[] = 'phortune-invoice-view';
+
+ return array(
+ 'class' => implode(' ', $classes),
+ );
+ }
+
+ protected function getTagContent() {
+ require_celerity_resource('phortune-invoice-css');
+
+ $logo = phutil_tag(
+ 'div',
+ array(
+ 'class' => 'phortune-invoice-logo',
+ ),
+ phutil_tag(
+ 'img',
+ array(
+ 'height' => '50',
+ 'width' => '50',
+ 'alt' => $this->merchantName,
+ 'src' => $this->merchantLogo,
+ )));
+
+ $to_title = phutil_tag(
+ 'div',
+ array(
+ 'class' => 'phortune-mini-header',
+ ),
+ pht('To:'));
+
+ $bill_to = phutil_tag(
+ 'td',
+ array(
+ 'class' => 'phortune-invoice-to',
+ 'width' => '50%',
+ ),
+ array(
+ $to_title,
+ phutil_tag('strong', array(), $this->accountName),
+ phutil_tag('br', array()),
+ $this->accountContact,
+ ));
+
+ $from_title = phutil_tag(
+ 'div',
+ array(
+ 'class' => 'phortune-mini-header',
+ ),
+ pht('From:'));
+
+ $bill_from = phutil_tag(
+ 'td',
+ array(
+ 'class' => 'phortune-invoice-from',
+ 'width' => '50%',
+ ),
+ array(
+ $from_title,
+ phutil_tag('strong', array(), $this->merchantName),
+ phutil_tag('br', array()),
+ $this->merchantContact,
+ ));
+
+ $contact = phutil_tag(
+ 'table',
+ array(
+ 'class' => 'phortune-invoice-contact',
+ 'width' => '100%',
+ ),
+ phutil_tag(
+ 'tr',
+ array(),
+ array(
+ $bill_to,
+ $bill_from,
+ )));
+
+ $status = null;
+ if ($this->status) {
+ $status = phutil_tag(
+ 'div',
+ array(
+ 'class' => 'phortune-invoice-status',
+ ),
+ $this->status);
+ }
+
+ $email = phutil_tag('strong', array(), 'contact@phacility.com');
+ $footer = phutil_tag(
+ 'div',
+ array(
+ 'class' => 'phortune-invoice-footer',
+ ),
+ pht('Thank you for your order. If you have questions about this invoice '.
+ 'please drop us a line at %s.', $email));
+
+ return array(
+ $logo,
+ $contact,
+ $status,
+ $this->content,
+ $footer,
+ );
+ }
+}
diff --git a/webroot/rsrc/css/application/phortune/phortune-invoice.css b/webroot/rsrc/css/application/phortune/phortune-invoice.css
new file mode 100644
--- /dev/null
+++ b/webroot/rsrc/css/application/phortune/phortune-invoice.css
@@ -0,0 +1,71 @@
+/**
+ * @provides phortune-invoice-css
+ */
+
+.phortune-invoice-view {
+ max-width: 800px;
+ margin: 16px auto;
+ background: #fff;
+}
+
+.phortune-invoice-view .phabricator-main-menu {
+ display: none;
+}
+
+.phortune-invoice-view .phabricator-standard-page-footer {
+ display: none;
+}
+
+.device-desktop .phortune-invoice-view .phui-property-list-key {
+ width: 16%;
+}
+
+.device-desktop .phortune-invoice-view .phui-property-list-value {
+ width: 80%;
+}
+
+.phortune-invoice-logo {
+ margin-bottom: 24px;
+}
+
+.phortune-invoice-logo img {
+ margin: 0 auto;
+}
+
+.phortune-invoice-contact {
+ margin-bottom: 32px;
+}
+
+.phortune-invoice-contact td {
+ padding: 4px 16px;
+}
+
+.phortune-invoice-to {
+ border-right: 1px solid {$lightblueborder};
+}
+
+.phortune-mini-header {
+ color: {$lightbluetext};
+ font-weight: bold;
+ text-transform: uppercase;
+ margin-bottom: 4px;
+ letter-spacing: 0.3em;
+}
+
+.phortune-invoice-status {
+ margin-bottom: 24px;
+}
+
+.phortune-invoice-view .phui-box.phui-object-box {
+ margin-bottom: 24px;
+}
+
+.phortune-invoice-footer {
+ color: {$lightgreytext};
+ margin: 48px 0 64px;
+ text-align: center;
+}
+
+.phortune-invoice-footer strong {
+ color: #000;
+}

File Metadata

Mime Type
text/plain
Expires
Fri, Apr 18, 12:33 AM (2 w, 4 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7387327
Default Alt Text
D16762.id40369.diff (11 KB)

Event Timeline