Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15511224
D16762.id40369.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
11 KB
Referenced Files
None
Subscribers
None
D16762.id40369.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D16762: Add a basic invoice view for printing to Phortune
Attached
Detach File
Event Timeline
Log In to Comment