示例#1
0
 def __init__(self, project, engine, *args, **kwargs):
     super(InvoiceForm, self).__init__(*args, **kwargs)
     self.project = project
     self.engine = engine
     if engine == 'ideal':
         self.fields['bank'] = forms.CharField(max_length=4,
             widget=forms.Select(choices=get_mollie_banklist()))
示例#2
0
 def __init__(self, project, engine, *args, **kwargs):
     super(InvoiceForm, self).__init__(*args, **kwargs)
     self.project = project
     self.engine = engine
     if engine == 'ideal':
         self.fields['bank'] = forms.CharField(
             max_length=4,
             widget=forms.Select(choices=get_mollie_banklist()))
示例#3
0
 def __init__(self, project, engine, *args, **kwargs): 
     super(InvoiceForm, self).__init__(*args, **kwargs)
     self.project = project
     self.engine = engine
     self.fields['email2'] = forms.EmailField()
     if engine == 'ideal':
         self.fields['bank'] = forms.CharField(max_length=4, 
             widget=forms.Select(choices=get_mollie_banklist(empty_label=_('Please select your bank'))))
示例#4
0
文件: forms.py 项目: pvw/pvw-rsr
    def __init__(self, user, project, engine, add_extra_fields=True, *args, **kwargs):
        super(InvoiceForm, self).__init__(*args, **kwargs)
        self.project = project
        self.engine = engine
        if user.is_authenticated() and user.email:
            add_extra_fields == False
        if add_extra_fields:
            self.fields["name"] = forms.CharField(label=_("Full name"))
            self.fields["email"] = forms.EmailField(label=_("Email address"))
            self.fields["email2"] = forms.EmailField(label=_("Email address (confirm)"))

        if engine == "ideal":
            self.fields["bank"] = forms.CharField(
                max_length=4, widget=forms.Select(choices=get_mollie_banklist(empty_label=_("Please select your bank")))
            )
示例#5
0
class Invoice(models.Model):
    PAYPAL_INVOICE_STATUS_PENDING = 1
    PAYPAL_INVOICE_STATUS_VOID = 2
    PAYPAL_INVOICE_STATUS_COMPLETE = 3
    PAYPAL_INVOICE_STATUS_STALE = 4

    STATUS_CHOICES = (
        (PAYPAL_INVOICE_STATUS_PENDING, 'Pending'),
        (PAYPAL_INVOICE_STATUS_VOID, 'Void'),
        (PAYPAL_INVOICE_STATUS_COMPLETE, 'Complete'),
        (PAYPAL_INVOICE_STATUS_STALE, 'Stale'),
    )
    # NOTE: There are still a few places in templates where the strings 'paypal' and 'ideal' are used
    PAYMENT_ENGINE_PAYPAL = 'paypal'
    PAYMENT_ENGINE_IDEAL = 'ideal'
    PAYMENT_ENGINES = (
        (PAYMENT_ENGINE_PAYPAL, u'PayPal'),
        (PAYMENT_ENGINE_IDEAL, u'iDEAL'),
    )
    test = models.BooleanField(
        u'test donation',
        help_text=u'This flag is set if the donation was made in test mode.',
        default=False)
    engine = ValidXMLCharField(u'payment engine', choices=PAYMENT_ENGINES, max_length=10, default=PAYMENT_ENGINE_PAYPAL)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True)
    project = models.ForeignKey('Project', related_name='invoices')
    # Common
    amount = models.PositiveIntegerField(help_text=u'Amount requested by user.')
    amount_received = models.DecimalField(
        max_digits=10, decimal_places=2, blank=True, null=True,
        help_text=u'Amount actually received after charges have been applied.'
    )
    time = models.DateTimeField(auto_now_add=True)
    name = ValidXMLCharField(max_length=75, blank=True, null=True)
    email = models.EmailField(blank=True, null=True)
    status = models.PositiveSmallIntegerField('status', choices=STATUS_CHOICES, default=1)
    http_referer = ValidXMLCharField(u'HTTP referer', max_length=255, blank=True)
    campaign_code = ValidXMLCharField(u'Campaign code', blank=True, max_length=15)
    is_anonymous = models.BooleanField(u'anonymous donation', default=False)
    # PayPal
    ipn = ValidXMLCharField(u'PayPal IPN', blank=True, null=True, max_length=75)
    # Mollie
    bank = ValidXMLCharField(u'mollie.nl bank ID', max_length=4, choices=get_mollie_banklist(), blank=True)
    transaction_id = ValidXMLCharField(u'mollie.nl transaction ID', max_length=100, blank=True)

    notes = ValidXMLTextField(verbose_name=_("Notes and comments"), blank=True, default='')

    admin_objects = models.Manager()
    objects = InvoiceManager()

    def get_favicon(self):
        pass  # TODO: @ grab favicon from HTTP_REFERER site

    @property
    def get_name(self):
        if self.user:
            return self.user.get_full_name()
        return self.name

    @property
    def get_email(self):
        if self.user:
            return self.user.email
        return self.email

    @property
    def currency(self):
        return self.project.currency

    @property
    def gateway(self):
        if self.engine == self.PAYMENT_ENGINE_PAYPAL:
            if settings.DONATION_TEST:
                return settings.PAYPAL_SANDBOX_GATEWAY
            else:
                return self.project.paymentgatewayselector.paypal_gateway.account_email
        elif self.engine == 'ideal':
            return self.project.paymentgatewayselector.mollie_gateway.partner_id

    @property
    def locale(self):
        return self.project.paymentgatewayselector.paypal_gateway.locale

    @property
    def notification_email(self):
        if getattr(settings, "DONATION_TEST", False):
            return "*****@*****.**"
        else:
            if self.engine == "paypal":
                return self.project.paymentgatewayselector.paypal_gateway.notification_email
            elif self.engine == "ideal":
                return self.project.paymentgatewayselector.mollie_gateway.notification_email

    @property
    def donation_fee(self):
        return (self.amount - self.amount_received)

    def __unicode__(self):
        return u'Invoice %(invoice_id)s (Project: %(project_name)s)' % {
            'invoice_id': self.id, 'project_name': self.project
        }

    class Meta:
        app_label = 'rsr'
        verbose_name = u'invoice'
        ordering = ['-id', ]