Guest User

Untitled

a guest
Jun 18th, 2018
275
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.57 KB | None | 0 0
  1. /**
  2.  
  3. * Copyright (c) Elastic Path Software Inc., 2007
  4.  
  5. */
  6.  
  7. package com.elasticpath.cmclient.fulfillment.editors.order;
  8.  
  9.  
  10.  
  11. import java.util.Collections;
  12.  
  13. import java.util.HashSet;
  14.  
  15. import java.util.LinkedList;
  16.  
  17. import java.util.List;
  18.  
  19.  
  20.  
  21. import org.apache.commons.lang.StringUtils;
  22.  
  23. import org.apache.log4j.Logger;
  24.  
  25. import org.eclipse.core.databinding.DataBindingContext;
  26.  
  27. import org.eclipse.jface.dialogs.MessageDialog;
  28.  
  29. import org.eclipse.jface.viewers.ISelectionChangedListener;
  30.  
  31. import org.eclipse.jface.viewers.IStructuredContentProvider;
  32.  
  33. import org.eclipse.jface.viewers.IStructuredSelection;
  34.  
  35. import org.eclipse.jface.viewers.ITableLabelProvider;
  36.  
  37. import org.eclipse.jface.viewers.LabelProvider;
  38.  
  39. import org.eclipse.jface.viewers.SelectionChangedEvent;
  40.  
  41. import org.eclipse.jface.viewers.Viewer;
  42.  
  43. import org.eclipse.swt.events.SelectionEvent;
  44.  
  45. import org.eclipse.swt.events.SelectionListener;
  46.  
  47. import org.eclipse.swt.graphics.Image;
  48.  
  49. import org.eclipse.swt.widgets.Button;
  50.  
  51. import org.eclipse.swt.widgets.Composite;
  52.  
  53. import org.eclipse.ui.forms.editor.FormPage;
  54.  
  55. import org.eclipse.ui.forms.widgets.ExpandableComposite;
  56.  
  57. import org.eclipse.ui.forms.widgets.FormToolkit;
  58.  
  59.  
  60.  
  61. import com.elasticpath.cmclient.core.Application;
  62.  
  63. import com.elasticpath.cmclient.core.editors.AbstractCmClientEditorPageSectionPart;
  64.  
  65. import com.elasticpath.cmclient.core.editors.AbstractCmClientFormEditor;
  66.  
  67. import com.elasticpath.cmclient.core.ui.framework.CompositeFactory;
  68.  
  69. import com.elasticpath.cmclient.core.ui.framework.IEpLayoutComposite;
  70.  
  71. import com.elasticpath.cmclient.core.ui.framework.IEpLayoutData;
  72.  
  73. import com.elasticpath.cmclient.core.ui.framework.IEpTableViewer;
  74.  
  75. import com.elasticpath.cmclient.core.ui.framework.EpControlFactory.EpState;
  76.  
  77. import com.elasticpath.cmclient.fulfillment.FulfillmentImageRegistry;
  78.  
  79. import com.elasticpath.cmclient.fulfillment.FulfillmentMessages;
  80.  
  81. import com.elasticpath.cmclient.fulfillment.domain.OrderPaymentPresenter;
  82.  
  83. import com.elasticpath.cmclient.fulfillment.domain.impl.OrderPaymentPresenterFactory;
  84.  
  85. import com.elasticpath.commons.constants.ContextIdNames;
  86.  
  87. import com.elasticpath.commons.util.PaymentsComparatorFactory;
  88.  
  89. import com.elasticpath.domain.misc.EmailProperties;
  90.  
  91. import com.elasticpath.domain.misc.OrderEmailPropertyHelper;
  92.  
  93. import com.elasticpath.domain.order.Order;
  94.  
  95. import com.elasticpath.domain.order.OrderPayment;
  96.  
  97. import com.elasticpath.service.EpServiceException;
  98.  
  99. import com.elasticpath.service.misc.EmailService;
  100.  
  101.  
  102.  
  103. /**
  104.  
  105. * Represents the UI of order payment history section.
  106.  
  107. */
  108.  
  109. public class OrderPaymentsHistorySectionPart extends AbstractCmClientEditorPageSectionPart implements SelectionListener, ISelectionChangedListener {
  110.  
  111.  
  112.  
  113. private static final Logger LOG = Logger.getLogger(OrderPaymentsHistorySectionPart.class);
  114.  
  115.  
  116.  
  117. private static final int COLUMN_WIDTH_DATETIME = 120;
  118.  
  119.  
  120.  
  121. private static final int COLUMN_WIDTH_SHIPMENT_ID = 120;
  122.  
  123.  
  124.  
  125. private static final int COLUMN_WIDTH_PAYMENTTYPE = 100;
  126.  
  127.  
  128.  
  129. private static final int COLUMN_WIDTH_TRANSACTIONTYPE = 100;
  130.  
  131.  
  132.  
  133. private static final int COLUMN_WIDTH_PAYMENTDETIAL = 200;
  134.  
  135.  
  136.  
  137. private static final int COLUMN_WIDTH_AMOUNT = 100;
  138.  
  139.  
  140.  
  141. private static final int COLUMN_WIDTH_STATUS = 80;
  142.  
  143.  
  144.  
  145. private static final int COLUMN_WIDTH_TRANSACTIONID = 100;
  146.  
  147.  
  148.  
  149. private static final int COLUMN_WIDTH_REFERENCENUMBER = 120;
  150.  
  151.  
  152.  
  153. private static final int COLUMN_INDEX_DATETIME = 0;
  154.  
  155.  
  156.  
  157. private static final int COLUMN_INDEX_SHIPMENT_ID = 1;
  158.  
  159.  
  160.  
  161. private static final int COLUMN_INDEX_PAYMENTTYPE = 2;
  162.  
  163.  
  164.  
  165. private static final int COLUMN_INDEX_TRANSACTIONTYPE = 3;
  166.  
  167.  
  168.  
  169. private static final int COLUMN_INDEX_PAYMENTDETAIL = 4;
  170.  
  171.  
  172.  
  173. private static final int COLUMN_INDEX_AMOUNT = 5;
  174.  
  175.  
  176.  
  177. private static final int COLUMN_INDEX_STATUS = 6;
  178.  
  179.  
  180.  
  181. private static final int COLUMN_INDEX_TRANSACTIONID = 7;
  182.  
  183.  
  184.  
  185. private static final int COLUMN_INDEX_REFERENCENUMBER = 8;
  186.  
  187.  
  188.  
  189. private IEpTableViewer epTableViewer;
  190.  
  191.  
  192.  
  193. private Button resendRefundReceiptButton;
  194.  
  195.  
  196.  
  197. /**
  198.  
  199. * Constructor.
  200.  
  201. *
  202.  
  203. * @param formPage the formpage
  204.  
  205. * @param editor the CmClientFormEditor that contains the form
  206.  
  207. */
  208.  
  209. public OrderPaymentsHistorySectionPart(final FormPage formPage, final AbstractCmClientFormEditor editor) {
  210.  
  211. super(formPage, editor, ExpandableComposite.TITLE_BAR | ExpandableComposite.EXPANDED);
  212.  
  213. // super(formPage, editor, ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR); //| ExpandableComposite.EXPANDED);
  214.  
  215. }
  216.  
  217.  
  218.  
  219. /**
  220.  
  221. * Creates the UI of the payment history section.
  222.  
  223. *
  224.  
  225. * @param client parent composite
  226.  
  227. * @param toolkit Eclipse form toolkit
  228.  
  229. */
  230.  
  231. @Override
  232.  
  233. protected void createControls(final Composite client, final FormToolkit toolkit) {
  234.  
  235.  
  236.  
  237. final IEpLayoutComposite mainPane = CompositeFactory.createTableWrapLayoutComposite(client, 2, false);
  238.  
  239.  
  240.  
  241. final IEpLayoutData tableData = mainPane.createLayoutData(IEpLayoutData.FILL, IEpLayoutData.FILL, false, false);
  242.  
  243.  
  244.  
  245. epTableViewer = mainPane.addTableViewer(false, EpState.READ_ONLY, tableData);
  246.  
  247.  
  248.  
  249. epTableViewer.addTableColumn(FulfillmentMessages.OrderPaymentHistorySection_TableTitle_DateTime, COLUMN_WIDTH_DATETIME);
  250.  
  251. epTableViewer.addTableColumn(FulfillmentMessages.OrderPaymentHistorySection_TableTitle_ShipmentId, COLUMN_WIDTH_SHIPMENT_ID);
  252.  
  253. epTableViewer.addTableColumn(FulfillmentMessages.OrderPaymentHistorySection_TableTitle_PaymentType, COLUMN_WIDTH_PAYMENTTYPE);
  254.  
  255. epTableViewer.addTableColumn(FulfillmentMessages.OrderPaymentHistorySection_TableTitle_TransactionType, COLUMN_WIDTH_TRANSACTIONTYPE);
  256.  
  257. epTableViewer.addTableColumn(FulfillmentMessages.OrderPaymentHistorySection_TableTitle_PaymentDetails, COLUMN_WIDTH_PAYMENTDETIAL);
  258.  
  259. epTableViewer.addTableColumn(FulfillmentMessages.OrderPaymentHistorySection_TableTitle_Amount, COLUMN_WIDTH_AMOUNT);
  260.  
  261. epTableViewer.addTableColumn(FulfillmentMessages.OrderPaymentHistorySection_TableTitle_Status, COLUMN_WIDTH_STATUS);
  262.  
  263. epTableViewer.addTableColumn(FulfillmentMessages.OrderPaymentHistorySection_TableTitle_TransactionID, COLUMN_WIDTH_TRANSACTIONID);
  264.  
  265. epTableViewer.addTableColumn(FulfillmentMessages.OrderPaymentHistorySection_TableTitle_ReferenceNumber, COLUMN_WIDTH_REFERENCENUMBER);
  266.  
  267.  
  268.  
  269. epTableViewer.setContentProvider(new ViewContentProvider());
  270.  
  271. epTableViewer.setLabelProvider(new ViewLabelProvider());
  272.  
  273.  
  274.  
  275. epTableViewer.getSwtTableViewer().addSelectionChangedListener(this);
  276.  
  277.  
  278.  
  279. final Image resendImage = FulfillmentImageRegistry.getImage(FulfillmentImageRegistry.REFUND_RECEIPT_RESEND);
  280.  
  281. resendRefundReceiptButton = mainPane.addPushButton(FulfillmentMessages.PaymentHistorySection_RefundReceiptResend, resendImage,
  282.  
  283. EpState.DISABLED, mainPane.createLayoutData(IEpLayoutData.FILL, IEpLayoutData.BEGINNING));
  284.  
  285. resendRefundReceiptButton.addSelectionListener(this);
  286.  
  287. }
  288.  
  289.  
  290.  
  291. /**
  292.  
  293. * Gets the section description.
  294.  
  295. *
  296.  
  297. * @return string
  298.  
  299. */
  300.  
  301. @Override
  302.  
  303. protected String getSectionDescription() {
  304.  
  305. return FulfillmentMessages.PaymentHistorySection_Description;
  306.  
  307. }
  308.  
  309.  
  310.  
  311. /**
  312.  
  313. * Gets the section title.
  314.  
  315. *
  316.  
  317. * @return string
  318.  
  319. */
  320.  
  321. @Override
  322.  
  323. protected String getSectionTitle() {
  324.  
  325. return FulfillmentMessages.PaymentHistorySection_Title;
  326.  
  327. }
  328.  
  329.  
  330.  
  331. /**
  332.  
  333. * Override to populate the controls with their initial values.
  334.  
  335. */
  336.  
  337. @Override
  338.  
  339. protected void populateControls() {
  340.  
  341. // Nothing to do.
  342.  
  343. }
  344.  
  345.  
  346.  
  347. /**
  348.  
  349. * Not used.
  350.  
  351. *
  352.  
  353. * @param event the event object
  354.  
  355. */
  356.  
  357. public void widgetDefaultSelected(final SelectionEvent event) {
  358.  
  359. // not used
  360.  
  361. }
  362.  
  363.  
  364.  
  365. /**
  366.  
  367. * Invoked on selection event.
  368.  
  369. *
  370.  
  371. * @param event the event object
  372.  
  373. */
  374.  
  375. public void widgetSelected(final SelectionEvent event) {
  376.  
  377. if (event.getSource() == resendRefundReceiptButton) {
  378.  
  379. final IStructuredSelection structuredSelection = (IStructuredSelection) epTableViewer.getSwtTableViewer().getSelection();
  380.  
  381. final OrderPayment selectedOrderPayment = (OrderPayment) structuredSelection.getFirstElement();
  382.  
  383.  
  384.  
  385. try {
  386.  
  387. this.sendOrderRefundEmail((Order) this.getModel(), selectedOrderPayment, ""); //$NON-NLS-1$
  388.  
  389. MessageDialog.openInformation(this.getEditor().getSite().getShell(), FulfillmentMessages.OrderActionResendConfirmationEmail,
  390.  
  391. FulfillmentMessages.resendRefundReceiptEmailSuccess);
  392.  
  393. } catch (EpServiceException e) {
  394.  
  395. LOG.error("Error re-sending refund receipt customer.", e); //$NON-NLS-1$
  396.  
  397. MessageDialog.openError(null, FulfillmentMessages.resendRefundReceiptEmailFailure_Title,
  398.  
  399. FulfillmentMessages.resendRefundReceiptEmailFailure);
  400.  
  401. }
  402.  
  403. }
  404.  
  405. }
  406.  
  407.  
  408.  
  409. /**
  410.  
  411. * Send an order refund email to the customer.
  412.  
  413. */
  414.  
  415. private void sendOrderRefundEmail(final Order order, final OrderPayment refundPayment, final String refundNote) {
  416.  
  417. // Send order confirmation email to billing email address if it exists; otherwise fall back to customer email address
  418.  
  419. String emailAddress = order.getBillingEmailAddress();
  420.  
  421. if (StringUtils.isBlank(emailAddress)) {
  422.  
  423. emailAddress = order.getCustomer().getEmail();
  424.  
  425. }
  426.  
  427.  
  428.  
  429. try {
  430.  
  431. final EmailProperties orderRefundEmailProperties = this.getOrderEmailPropertyHelper().getOrderRefundEmailProperties(order, emailAddress,
  432.  
  433. refundPayment, refundNote);
  434.  
  435. this.getEmailService().sendMail(orderRefundEmailProperties);
  436.  
  437. } catch (final Exception e) {
  438.  
  439. // The Mailer is already catching email exceptions. Hence, most if not all exceptions will already be caught.
  440.  
  441. // Catch remaining exception and allow refund process to continue.
  442.  
  443. LOG.error("An error occured while sending order refund email to " + emailAddress, e); //$NON-NLS-1$
  444.  
  445. }
  446.  
  447. }
  448.  
  449.  
  450.  
  451. /**
  452.  
  453. * Returns an instance of {@link EmailService}.
  454.  
  455. *
  456.  
  457. * @return an instance of EmailService
  458.  
  459. */
  460.  
  461. private EmailService getEmailService() {
  462.  
  463. return (EmailService) Application.getInstance().getBean(ContextIdNames.EMAIL_SERVICE);
  464.  
  465. }
  466.  
  467.  
  468.  
  469. /**
  470.  
  471. * Returns an instance of {@link EmailService}.
  472.  
  473. *
  474.  
  475. * @return an instance of EmailService
  476.  
  477. */
  478.  
  479. private OrderEmailPropertyHelper getOrderEmailPropertyHelper() {
  480.  
  481. return (OrderEmailPropertyHelper) Application.getInstance().getBean(ContextIdNames.EMAIL_PROPERTY_HELPER_ORDER);
  482.  
  483. }
  484.  
  485.  
  486.  
  487. /**
  488.  
  489. * Override to perform the bindings between the controls and the domain model.
  490.  
  491. *
  492.  
  493. * @param bindingContext the binding context
  494.  
  495. */
  496.  
  497. @Override
  498.  
  499. protected void bindControls(final DataBindingContext bindingContext) {
  500.  
  501. // Nothing to do.
  502.  
  503. }
  504.  
  505.  
  506.  
  507. /**
  508.  
  509. * Provides the column image for the payments table.
  510.  
  511. */
  512.  
  513. @SuppressWarnings("PMD.CyclomaticComplexity")
  514.  
  515. class ViewLabelProvider extends LabelProvider implements ITableLabelProvider {
  516.  
  517.  
  518.  
  519. /**
  520.  
  521. * Get the column image.
  522.  
  523. *
  524.  
  525. * @param element not used
  526.  
  527. * @param columnIndex the column to create an image for
  528.  
  529. * @return the image
  530.  
  531. */
  532.  
  533. public Image getColumnImage(final Object element, final int columnIndex) {
  534.  
  535. return null;
  536.  
  537. }
  538.  
  539.  
  540.  
  541. /**
  542.  
  543. * Provide the content for each column.
  544.  
  545. *
  546.  
  547. * @param element element object
  548.  
  549. * @param columnIndex index
  550.  
  551. * @return the value for that column
  552.  
  553. */
  554.  
  555. @SuppressWarnings("PMD.CyclomaticComplexity")
  556.  
  557. public String getColumnText(final Object element, final int columnIndex) {
  558.  
  559. final OrderPaymentPresenter presenter = new OrderPaymentPresenterFactory().getOrderPaymentPresenter((OrderPayment) element);
  560.  
  561. switch (columnIndex) {
  562.  
  563. case COLUMN_INDEX_DATETIME:
  564.  
  565. return presenter.getDisplayCreatedDate();
  566.  
  567. case COLUMN_INDEX_SHIPMENT_ID:
  568.  
  569. return presenter.getDisplayShipmentId();
  570.  
  571. case COLUMN_INDEX_PAYMENTTYPE:
  572.  
  573. return presenter.getDisplayPaymentMethod();
  574.  
  575. case COLUMN_INDEX_TRANSACTIONTYPE:
  576.  
  577. return presenter.getDisplayTransactionType();
  578.  
  579. case COLUMN_INDEX_PAYMENTDETAIL:
  580.  
  581. return presenter.getDisplayPaymentDetails();
  582.  
  583. case COLUMN_INDEX_AMOUNT:
  584.  
  585. if (presenter.getDisplayTransactionType().equals(OrderPayment.CREDIT_TRANSACTION)) {
  586.  
  587. return decorateCredit(presenter.getDisplayPaymentAmount());
  588.  
  589. }
  590.  
  591. return presenter.getDisplayPaymentAmount();
  592.  
  593. case COLUMN_INDEX_STATUS:
  594.  
  595. return presenter.getDisplayStatus();
  596.  
  597. case COLUMN_INDEX_TRANSACTIONID:
  598.  
  599. return presenter.getDisplayTransactionId();
  600.  
  601. case COLUMN_INDEX_REFERENCENUMBER:
  602.  
  603. return presenter.getDisplayReferenceNumber();
  604.  
  605. default:
  606.  
  607. return StringUtils.EMPTY;
  608.  
  609. }
  610.  
  611. }
  612.  
  613.  
  614.  
  615. private String decorateCredit(final String amount) {
  616.  
  617. return '(' + amount + ')';
  618.  
  619. }
  620.  
  621. }
  622.  
  623.  
  624.  
  625. /**
  626.  
  627. * Provides the content for the payments.
  628.  
  629. */
  630.  
  631. class ViewContentProvider implements IStructuredContentProvider {
  632.  
  633.  
  634.  
  635. /**
  636.  
  637. * Called when the viewer input is changed.
  638.  
  639. *
  640.  
  641. * @param viewer the viewer
  642.  
  643. * @param oldInput the old input
  644.  
  645. * @param newInput the new input
  646.  
  647. */
  648.  
  649. public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput) {
  650.  
  651. // No action required
  652.  
  653. }
  654.  
  655.  
  656.  
  657. /**
  658.  
  659. * Dispose the content.
  660.  
  661. */
  662.  
  663. public void dispose() {
  664.  
  665. // Nothing to dispose
  666.  
  667. }
  668.  
  669.  
  670.  
  671. /**
  672.  
  673. * Returns an array of elements to display.
  674.  
  675. *
  676.  
  677. * @param inputElement the input element (An Order)
  678.  
  679. * @return an array of order payments
  680.  
  681. */
  682.  
  683. public Object[] getElements(final Object inputElement) {
  684.  
  685.  
  686.  
  687. if (inputElement != null) {
  688.  
  689. final HashSet<OrderPayment> payments = (HashSet<OrderPayment>) ((Order) inputElement).getOrderPayments();
  690.  
  691. final List<OrderPayment> paymentsList = new LinkedList<OrderPayment>(payments);
  692.  
  693. Collections.sort(paymentsList, PaymentsComparatorFactory.getOrderPaymentDateCompatator());
  694.  
  695. if (payments != null) {
  696.  
  697. return paymentsList.toArray();
  698.  
  699. }
  700.  
  701. }
  702.  
  703.  
  704.  
  705. return new Object[0];
  706.  
  707. }
  708.  
  709. }
  710.  
  711.  
  712.  
  713. /**
  714.  
  715. * Refresh the section with order data.
  716.  
  717. *
  718.  
  719. * @param order the order
  720.  
  721. */
  722.  
  723. public void refreshData(final Order order) {
  724.  
  725. epTableViewer.setInput(order);
  726.  
  727. }
  728.  
  729.  
  730.  
  731. /**
  732.  
  733. * {@inheritDoc}
  734.  
  735. */
  736.  
  737. public void selectionChanged(final SelectionChangedEvent event) {
  738.  
  739. final IStructuredSelection structuredSelection = (IStructuredSelection) event.getSelection();
  740.  
  741. final OrderPayment selectedOrderPayment = (OrderPayment) (structuredSelection).getFirstElement();
  742.  
  743. final boolean isRefundOrderPayment = StringUtils.equals(OrderPayment.CREDIT_TRANSACTION, selectedOrderPayment.getTransactionType());
  744.  
  745. resendRefundReceiptButton.setEnabled(isRefundOrderPayment);
  746.  
  747. }
  748.  
  749. }
Add Comment
Please, Sign In to add comment