source: remit/vouchers/models.py @ 1d4c89e

client
Last change on this file since 1d4c89e was 3e79308, checked in by Alex Dehnert <adehnert@…>, 15 years ago

Don't let you approve a non-pending request

  • Property mode set to 100644
File size: 3.3 KB
RevLine 
[719e4bb]1from django.db import models
[13a23ce]2import settings
[f468e6d]3from finance_core.models import BudgetArea, BudgetTerm
[f186a0e]4
[93e2ab9]5import datetime
6
[3e79308]7APPROVAL_STATE_PENDING = 0
8APPROVAL_STATE_APPROVED = 1
9APPROVAL_STATE_REJECTED = -1
[3e29d7a]10APPROVAL_STATES = (
[3e79308]11    (APPROVAL_STATE_PENDING,  'Pending'),
12    (APPROVAL_STATE_APPROVED, 'Approved'),
13    (APPROVAL_STATE_REJECTED, 'Rejected'),
[3e29d7a]14)
[f186a0e]15
[13a23ce]16class ReimbursementRequest(models.Model):
17    submitter = models.CharField(max_length=10) # MIT username of submitter
[248b30b]18    check_to_first_name = models.CharField(max_length=50, verbose_name="check recipient's first name")
19    check_to_last_name = models.CharField(max_length=50, verbose_name="check recipient's last name")
[a96d938]20    check_to_email = models.EmailField(verbose_name="email address for check pickup")
21    check_to_addr = models.TextField(blank=True, verbose_name="address for check mailing", help_text="For most requests, this should be blank for pickup in SAO (W20-549)")
[6b8d891]22    amount = models.DecimalField(max_digits=7, decimal_places=2, help_text='Do not include "$"')
[31bd056]23    budget_area = models.ForeignKey(BudgetArea, related_name='as_budget_area')
[13a23ce]24    budget_term = models.ForeignKey(BudgetTerm)
[31bd056]25    expense_area = models.ForeignKey(BudgetArea, related_name='as_expense_area') # ~GL
[6a867b3]26    request_time = models.DateTimeField(default=datetime.datetime.now)
[6b8d891]27    approval_time = models.DateTimeField(blank=True, null=True,)
[3e29d7a]28    approval_status = models.IntegerField(default=0, choices=APPROVAL_STATES)
[6b8d891]29    printing_time = models.DateTimeField(blank=True, null=True,)
30    name = models.CharField(max_length=50, verbose_name='short description', )
31    description = models.TextField(blank=True, verbose_name='long description', )
[d7e325a]32
[485673a]33    class Meta:
34        permissions = (
35            ('can_list', 'Can list requests',),
[587bb95]36            ('can_approve', 'Can approve requests',),
[485673a]37        )
38
[d7e325a]39    def __unicode__(self, ):
[248b30b]40        return "%s: %s %s (%s) (by %s) for $%s" % (
[3235c66]41            self.name,
[248b30b]42            self.check_to_first_name,
43            self.check_to_last_name,
[d7e325a]44            self.check_to_email,
45            self.submitter,
46            self.amount,
47        )
[31bd056]48
[587bb95]49    def convert(self, signatory, signatory_email=settings.SIGNATORY_EMAIL):
[db191ee]50        voucher = Voucher()
[587bb95]51        voucher.group_name = settings.GROUP_NAME
[db191ee]52        voucher.account = self.budget_area.get_account_number()
53        voucher.signatory = signatory
[587bb95]54        voucher.signatory_email = signatory_email
[db191ee]55        voucher.first_name = self.check_to_first_name
56        voucher.last_name = self.check_to_last_name
57        voucher.email_address = self.check_to_email
58        voucher.mailing_address = self.check_to_addr
59        voucher.amount = self.amount
60        voucher.description = self.name
61        voucher.gl = self.expense_area.get_account_number()
62        voucher.save()
[587bb95]63        self.approval_status = 1
[bf5333c]64        self.approval_time = datetime.datetime.now()
[587bb95]65        self.save()
[31bd056]66
67class Voucher(models.Model):
68    group_name = models.CharField(max_length=10)
69    account = models.IntegerField()
70    signatory = models.CharField(max_length=50)
[587bb95]71    signatory_email = models.EmailField()
[31bd056]72    first_name = models.CharField(max_length=20)
73    last_name = models.CharField(max_length=20)
74    email_address = models.EmailField(max_length=50)
75    mailing_address = models.TextField()
76    amount = models.DecimalField(max_digits=7, decimal_places=2,)
77    description = models.TextField()
78    gl = models.IntegerField()
Note: See TracBrowser for help on using the repository browser.