@@ -56,31 +56,6 @@ final class OrderDetailsViewController: UIViewController {
5656
5757 private let notices = OrderDetailsNotices ( )
5858
59- /// Orchestrates what needs to be presented in the modal views
60- /// that provide user-facing feedback about the card present payment process.
61- private lazy var paymentAlerts : OrderDetailsPaymentAlerts = {
62- OrderDetailsPaymentAlerts ( presentingController: self )
63- } ( )
64-
65- /// Subscription that listens for connected readers while we are trying to connect to one to capture payment
66- /// We need to cancel that subscription if the process is canceled by the user or when we connect to a reader.
67- ///
68- private var cardReaderAvailableSubscription : Combine . Cancellable ? = nil
69-
70- /// Connection Controller (helps connect readers)
71- ///
72- private lazy var connectionController : CardReaderConnectionController ? = {
73- guard let siteID = viewModel? . order. siteID else {
74- return nil
75- }
76-
77- return CardReaderConnectionController (
78- forSiteID: siteID,
79- knownReaderProvider: CardReaderSettingsKnownReaderStorage ( ) ,
80- alertsProvider: CardReaderSettingsAlerts ( )
81- )
82- } ( )
83-
8459 // MARK: - View Lifecycle
8560
8661 /// Create an instance of `Self` from its corresponding storyboard.
@@ -513,10 +488,10 @@ private extension OrderDetailsViewController {
513488 case . issueRefund:
514489 issueRefundWasPressed ( )
515490 case . collectPayment:
516- guard let indexPath = indexPath else {
491+ guard indexPath != nil else {
517492 break
518493 }
519- collectPayment ( at : indexPath )
494+ collectPayment ( )
520495 case . reprintShippingLabel( let shippingLabel) :
521496 guard let navigationController = navigationController else {
522497 assertionFailure ( " Cannot reprint a shipping label because `navigationController` is nil " )
@@ -710,7 +685,7 @@ private extension OrderDetailsViewController {
710685 present ( navigationController, animated: true , completion: nil )
711686 }
712687
713- @objc private func collectPayment( at : IndexPath ) {
688+ @objc private func collectPayment( ) {
714689 viewModel. collectPayment ( rootViewController: self , backButtonTitle: Localization . Payments. backToOrder) { [ weak self] result in
715690 guard let self = self else { return }
716691 // Refresh date & view once payment has been collected.
@@ -720,97 +695,6 @@ private extension OrderDetailsViewController {
720695 }
721696 }
722697 }
723- return
724-
725- cardReaderAvailableSubscription = viewModel. cardReaderAvailable ( )
726- . sink (
727- receiveCompletion: { [ weak self] result in
728- self ? . dismiss ( animated: false , completion: {
729- self ? . collectPaymentForCurrentOrder ( )
730- } )
731- self ? . cardReaderAvailableSubscription = nil
732- } ,
733- receiveValue: { [ weak self] _ in
734- self ? . connectToCardReader ( )
735- } )
736- }
737-
738- private func collectPaymentForCurrentOrder( ) {
739- let currencyFormatter = CurrencyFormatter ( currencySettings: ServiceLocator . currencySettings)
740- let currencyCode = ServiceLocator . currencySettings. currencyCode
741- let unit = ServiceLocator . currencySettings. symbol ( from: currencyCode)
742- let value = currencyFormatter. formatAmount ( viewModel. order. total, with: unit) ?? " "
743-
744- paymentAlerts. readerIsReady ( title: viewModel. collectPaymentFrom,
745- amount: value)
746-
747- ServiceLocator . analytics. track ( . collectPaymentTapped)
748- viewModel. collectPayment (
749- onWaitingForInput: { [ weak self] in
750- self ? . paymentAlerts. tapOrInsertCard ( onCancel: {
751- self ? . viewModel. cancelPayment ( onCompletion: { _ in
752- ServiceLocator . analytics. track ( . collectPaymentCanceled)
753- } )
754- } )
755- } ,
756- onProcessingMessage: { [ weak self] in
757- self ? . paymentAlerts. processingPayment ( )
758- } ,
759- onDisplayMessage: { [ weak self] message in // display a message from the reader, e.g. "Remove Card"
760- self ? . paymentAlerts. displayReaderMessage ( message: message)
761- } ,
762- onCompletion: { [ weak self] result in
763- guard let self = self else {
764- return
765- }
766-
767- switch result {
768- case . failure( let error) :
769- ServiceLocator . analytics. track ( . collectPaymentFailed, withError: error)
770- DDLogError ( " Failed to collect payment: \( error. localizedDescription) " )
771- self . paymentAlerts. error ( error: error, tryAgain: {
772- self . retryCollectPayment ( )
773- } )
774- case . success( let receiptParameters) :
775- ServiceLocator . analytics. track ( . collectPaymentSuccess)
776- self . syncOrderAfterPaymentCollection {
777- self . refreshCardPresentPaymentEligibility ( )
778- }
779-
780- self . paymentAlerts. success ( printReceipt: {
781- self . viewModel. printReceipt ( params: receiptParameters)
782- } , emailReceipt: {
783- self . viewModel. emailReceipt ( params: receiptParameters, onContent: { emailContent in
784- self . emailReceipt ( emailContent)
785- } )
786- } , noReceiptTitle: Localization . Payments. backToOrder,
787- noReceiptAction: { } )
788- }
789- }
790- )
791- }
792-
793- private func retryCollectPayment( ) {
794- viewModel. cancelPayment { [ weak self] result in
795- switch result {
796- case . failure( let error) :
797- self ? . paymentAlerts. nonRetryableError ( from: self , error: error)
798- case . success:
799- self ? . collectPaymentForCurrentOrder ( )
800- }
801- }
802- }
803-
804- private func connectToCardReader( ) {
805- connectionController? . searchAndConnect ( from: self ) { _ in
806- /// No need for logic here. Once connected, the connected reader will publish
807- /// through the `cardReaderAvailableSubscription`
808- }
809- }
810-
811- private func cancelObservingCardReader( ) {
812- cardReaderAvailableSubscription? . cancel ( )
813- cardReaderAvailableSubscription = nil
814698 }
815699
816700 private func itemAddOnsButtonTapped( addOns: [ OrderItemAttribute ] ) {
@@ -819,41 +703,6 @@ private extension OrderDetailsViewController {
819703 let navigationController = WooNavigationController ( rootViewController: addOnsController)
820704 present ( navigationController, animated: true , completion: nil )
821705 }
822-
823- private func emailReceipt( _ content: String ) {
824- guard MFMailComposeViewController . canSendMail ( ) else {
825- DDLogError ( " ⛔️ Failed to submit email receipt for order: \( viewModel. order. orderID) . Email is not configured " )
826- return
827- }
828-
829- let mail = MFMailComposeViewController ( )
830- mail. mailComposeDelegate = self
831-
832- mail. setSubject ( viewModel. paymentReceiptEmailSubject)
833- mail. setMessageBody ( content, isHTML: true )
834-
835- if let customerEmail = viewModel. order. billingAddress? . email {
836- mail. setToRecipients ( [ customerEmail] )
837- }
838-
839- present ( mail, animated: true )
840- }
841- }
842-
843- extension OrderDetailsViewController : MFMailComposeViewControllerDelegate {
844- func mailComposeController( _ controller: MFMailComposeViewController , didFinishWith result: MFMailComposeResult , error: Error ? ) {
845- switch result {
846- case . cancelled:
847- ServiceLocator . analytics. track ( . receiptEmailCanceled)
848- case . sent, . saved:
849- ServiceLocator . analytics. track ( . receiptEmailSuccess)
850- case . failed:
851- ServiceLocator . analytics. track ( . receiptEmailFailed, withError: error ?? UnknownEmailError ( ) )
852- @unknown default :
853- assertionFailure ( " MFMailComposeViewController finished with an unknown result type " )
854- }
855- controller. dismiss ( animated: true )
856- }
857706}
858707
859708// MARK: - UITableViewDelegate Conformance
@@ -920,12 +769,6 @@ extension OrderDetailsViewController: UITableViewDelegate {
920769 }
921770}
922771
923- extension OrderDetailsViewController : UIAdaptivePresentationControllerDelegate {
924- func presentationControllerDidDismiss( _ presentationController: UIPresentationController ) {
925- cancelObservingCardReader ( )
926- }
927- }
928-
929772// MARK: - Trackings alert
930773// Track / delete tracking alert
931774private extension OrderDetailsViewController {
0 commit comments