source: remit/vouchers/models.py @ bf5333c

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

Fix approval time saving bug

  • Property mode set to 100644
File size: 3.2 KB
Line 
1from django.db import models
2import settings
3from finance_core.models import BudgetArea, BudgetTerm
4
5import datetime
6
7APPROVAL_STATES = (
8    ( 0, 'Pending'),
9    ( 1, 'Approved'),
10    (-1, 'Rejected'),
11)
12
13class ReimbursementRequest(models.Model):
14    submitter = models.CharField(max_length=10) # MIT username of submitter
15    check_to_first_name = models.CharField(max_length=50, verbose_name="check recipient's first name")
16    check_to_last_name = models.CharField(max_length=50, verbose_name="check recipient's last name")
17    check_to_email = models.EmailField(verbose_name="email address for check pickup")
18    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)")
19    amount = models.DecimalField(max_digits=7, decimal_places=2, help_text='Do not include "$"')
20    budget_area = models.ForeignKey(BudgetArea, related_name='as_budget_area')
21    budget_term = models.ForeignKey(BudgetTerm)
22    expense_area = models.ForeignKey(BudgetArea, related_name='as_expense_area') # ~GL
23    request_time = models.DateTimeField(default=datetime.datetime.now)
24    approval_time = models.DateTimeField(blank=True, null=True,)
25    approval_status = models.IntegerField(default=0, choices=APPROVAL_STATES)
26    printing_time = models.DateTimeField(blank=True, null=True,)
27    name = models.CharField(max_length=50, verbose_name='short description', )
28    description = models.TextField(blank=True, verbose_name='long description', )
29
30    class Meta:
31        permissions = (
32            ('can_list', 'Can list requests',),
33            ('can_approve', 'Can approve requests',),
34        )
35
36    def __unicode__(self, ):
37        return "%s: %s %s (%s) (by %s) for $%s" % (
38            self.name,
39            self.check_to_first_name,
40            self.check_to_last_name,
41            self.check_to_email,
42            self.submitter,
43            self.amount,
44        )
45
46    def convert(self, signatory, signatory_email=settings.SIGNATORY_EMAIL):
47        voucher = Voucher()
48        voucher.group_name = settings.GROUP_NAME
49        voucher.account = self.budget_area.get_account_number()
50        voucher.signatory = signatory
51        voucher.signatory_email = signatory_email
52        voucher.first_name = self.check_to_first_name
53        voucher.last_name = self.check_to_last_name
54        voucher.email_address = self.check_to_email
55        voucher.mailing_address = self.check_to_addr
56        voucher.amount = self.amount
57        voucher.description = self.name
58        voucher.gl = self.expense_area.get_account_number()
59        voucher.save()
60        self.approval_status = 1
61        self.approval_time = datetime.datetime.now()
62        self.save()
63
64class Voucher(models.Model):
65    group_name = models.CharField(max_length=10)
66    account = models.IntegerField()
67    signatory = models.CharField(max_length=50)
68    signatory_email = models.EmailField()
69    first_name = models.CharField(max_length=20)
70    last_name = models.CharField(max_length=20)
71    email_address = models.EmailField(max_length=50)
72    mailing_address = models.TextField()
73    amount = models.DecimalField(max_digits=7, decimal_places=2,)
74    description = models.TextField()
75    gl = models.IntegerField()
Note: See TracBrowser for help on using the repository browser.