 
     @destroy()
 
+

    me = KD.whoami()
    me.fetchEmail (err, email) =>

      return KD.showError err  if err

      options.email = email
      options.provider = @state.provider


    { paymentController } = KD.singletons

    paymentController.canUserPurchase (err, canPurchase) =>

      return @showError err  if err

      unless canPurchase
        return @showError { message: PaymentConstants.error.ERR_USER_NOT_CONFIRMED }

      paymentController.creditCard (err, card) =>

        @state.paymentMethod = card

        { UPGRADE, DOWNGRADE, INTERVAL_CHANGE } = PaymentConstants.operation

        switch operation
          when DOWNGRADE                then @startDowngradeFlow()
          when UPGRADE, INTERVAL_CHANGE then @startRegularFlow()

        @emit 'WorkflowStarted'


  showError: (err) ->

    { message } = err

    humanReadable = PaymentConstants.error[message]
    err.message   = humanReadable  if humanReadable

    KD.showError err
    @modal?.form.submitButton.hideLoader()


  startRegularFlow: ->

    @modal = new PaymentModal { @state }
    @modal.on 'PaymentWorkflowFinished',          @bound 'finish'
    @modal.on 'PaymentWorkflowFinishedWithError', @bound 'finishWithError'

    @modal.on 'PaymentSubmitted', (formData) =>
      isUserConfirmed (err, confirmed) =>
        return @userIsNotConfirmed err  if err
        @handlePaymentSubmit formData

    @modal.on 'PaypalButtonClicked', =>
      @state.provider = PaymentConstants.provider.PAYPAL
