class DonationFormStripe(grok.View):
    """ Renders a donation form setup to submit through Stripe """
    grok.context(IFundraisingCampaignPage)
    grok.require('zope2.View')

    grok.name('donation_form_stripe')
    grok.template('donation_form_stripe')

    form_id = 'donation_form_stripe'

    def update(self):
        self.settings = get_settings()

        self.amount = self.request.form.get('x_amount', None)
        if self.amount is not None:
            self.amount = int(self.amount)

        self.states = []
        self.countries = []
        self.states = []

        self.update_levels()
        self.error = None
        self.update_countries()
        self.update_states()

        self.recurring = False
        self.recurring_id = None
        self.recurring_title = None
        campaign = self.context.get_fundraising_campaign()
        self.default_gift_type = campaign.default_gift_type
        if campaign.stripe_recurring_plan:
            self.recurring = True
            self.recurring_id = campaign.stripe_recurring_plan
            # FIXME: Lookup the title from the vocabulary and cache it for a bit
            self.recurring_title = 'Monthly recurring gift'

    def update_levels(self):
        level_id = self.request.form.get(
            'levels', self.settings.default_donation_ask_one_time)
        self.levels = None
        for row in self.settings.donation_ask_levels:
            row_id, amounts = row.split('|')
            if row_id == level_id:
                self.levels = amounts.split(',')
        if not self.levels:
            self.levels = self.settings.donation_ask_levels[0].split(
                '|')[1].split(',')

    def update_countries(self):
        self.countries = CountryAvailability().getCountryListing()
        self.countries.sort()

    def update_states(self):
        self.states = states_list

    def xss_clean(self, value):
        # FIXME: This needs to be implemented
        return value
class HonoraryMemorialView(grok.View):
    grok.context(IDonation)
    grok.require('zope2.View')

    grok.name('honorary-memorial-donation')

    form_template = ViewPageTemplateFile('donation_templates/honorary-memorial-donation.pt')

    def send_email(self):
        if self.context.honorary_type == 'Memorial':
            return self.context.send_email_memorial()
        else:
            return self.context.send_email_honorary()

    def render(self):
        # check that either the secret_key was passed in the request or the user has modify rights
        key = self.request.form.get('key', None)
        if not key or key != self.context.secret_key:
            sm = getSecurityManager()
            if not sm.checkPermission(ModifyPortalContent, self.context):
                raise Unauthorized

        self.receipt = IDonationReceipt(self.context)()

        # Handle POST
        if self.request['REQUEST_METHOD'] == 'POST':
            # Fetch values from the request
            self.context.honorary_type = self.request.form.get('honorary_type', None)
            self.context.honorary_notification_type = self.request.form.get('honorary_notification_type', None)
            self.context.honorary_first_name = self.request.form.get('honorary_first_name', None)
            self.context.honorary_last_name = self.request.form.get('honorary_last_name', None)
            self.context.honorary_recipient_first_name = self.request.form.get('honorary_recipient_first_name', None)
            self.context.honorary_recipient_last_name = self.request.form.get('honorary_recipient_last_name', None)
            self.context.honorary_email = self.request.form.get('honorary_email', None)
            self.context.honorary_street_address = self.request.form.get('honorary_street_address', None)
            self.context.honorary_city = self.request.form.get('honorary_city', None)
            self.context.honorary_state = self.request.form.get('honorary_state', None)
            self.context.honorary_zip = self.request.form.get('honorary_zip', None)
            self.context.honorary_country = self.request.form.get('honorary_country', None)
            self.context.honorary_message = self.request.form.get('honorary_message', None)

            # If there was an email passed and we're supposed to send an email, send the email
            if self.context.honorary_notification_type == 'Email' and self.context.honorary_email:
                self.send_email()

            # Queue an update of the Donation to get honorary fields populated on the Opportunity in Salesforce
            async = getUtility(IAsyncService)
            async.queueJob(async_salesforce_sync, self.context)

            # Redirect on to the thank you page
            return self.request.response.redirect('%s?key=%s' % (self.context.absolute_url(), self.context.secret_key))

        self.countries = CountryAvailability().getCountryListing()
        self.countries.sort()

        self.states = states_list

        return self.form_template()
class DonationFormStripe(grok.View):
    """ Renders a donation form setup to submit through Stripe """

    grok.context(IFundraisingCampaignPage)
    grok.require("zope2.View")

    grok.name("donation_form_stripe")
    grok.template("donation_form_stripe")

    form_id = "donation_form_stripe"

    def update(self):
        self.settings = get_settings()

        self.amount = self.request.form.get("x_amount", None)
        if self.amount is not None:
            self.amount = int(self.amount)

        self.states = []
        self.countries = []
        self.states = []

        self.update_levels()
        self.error = None
        self.update_countries()
        self.update_states()

        self.recurring = False
        self.recurring_id = None
        self.recurring_title = None
        campaign = self.context.get_fundraising_campaign()
        self.default_gift_type = campaign.default_gift_type
        if campaign.stripe_recurring_plan:
            self.recurring = True
            self.recurring_id = campaign.stripe_recurring_plan
            # FIXME: Lookup the title from the vocabulary and cache it for a bit
            self.recurring_title = "Monthly recurring gift"

    def update_levels(self):
        level_id = self.request.form.get("levels", self.settings.default_donation_ask_one_time)
        self.levels = None
        for row in self.settings.donation_ask_levels:
            row_id, amounts = row.split("|")
            if row_id == level_id:
                self.levels = amounts.split(",")
        if not self.levels:
            self.levels = self.settings.donation_ask_levels[0].split("|")[1].split(",")

    def update_countries(self):
        self.countries = CountryAvailability().getCountryListing()
        self.countries.sort()

    def update_states(self):
        self.states = states_list

    def xss_clean(self, value):
        # FIXME: This needs to be implemented
        return value
 def update_countries(self):
     self.countries = CountryAvailability().getCountryListing()
     self.countries.sort()
 def update_countries(self):
     self.countries = CountryAvailability().getCountryListing()
     self.countries.sort()