Changeset 7ee21d8


Ignore:
Timestamp:
Jul 7, 2014, 9:44:27 PM (11 years ago)
Author:
Alex Dehnert <adehnert@…>
Branches:
master
Children:
b61cf1a
Parents:
2b31097
git-author:
Alex Dehnert <adehnert@…> (07/07/14 21:44:27)
git-committer:
Alex Dehnert <adehnert@…> (07/07/14 21:44:27)
Message:

Allow creating RFPs

Location:
remit/vouchers
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • remit/vouchers/admin.py

    r9102ac9 r7ee21d8  
    2727    list_display_links = ('description', )
    2828
     29class RFPAdmin(admin.ModelAdmin):
     30    list_display = ('name', 'rfp_number', 'rfp_submit_time', 'payee_type', 'payee_name', 'item_amount', 'item_co', 'item_gl')
     31
    2932admin.site.register(vouchers.models.ReimbursementRequest, ReimbursementRequestAdmin)
    3033admin.site.register(vouchers.models.Voucher, VoucherAdmin)
     34admin.site.register(vouchers.models.RFP, RFPAdmin)
  • remit/vouchers/models.py

    r2b31097 r7ee21d8  
    101101    def convert_to_rfp(self, ):
    102102        rfp = RFP()
     103        max_name_len = RFP._meta.get_field_by_name('name')[0].max_length
     104        rfp.name = ("%s: %s" % (self.label(), self.name))[:max_name_len]
     105        rfp.payee_type = self.recipient_type
     106        rfp.payee_name = "%s %s" % (self.check_to_first_name, self.check_to_last_name)
     107        rfp.fill_addr(self.check_to_addr)
     108        rfp.item_date = self.incurred_time.date()
     109        rfp.item_gl = self.expense_area.get_account_number()
     110        rfp.item_co = self.budget_area.get_account_number()
     111        rfp.item_amount = self.amount
     112        rfp.item_desc = self.description
    103113        rfp.save()
    104114        self.create_transfers()
     
    202212
    203213class RFP(models.Model):
    204     addr_regex = re.compile(r'^(?P<addr>.+)\n(?P<city>.+), (?P<state>\w\w) (?P<zip>\d{5}(-\d{4})?)$')
     214    # Class constants
     215    addr_regex = re.compile(r'^(?P<street>.+)\n(?P<city>.+), (?P<state>\w\w) (?P<zip>\d{5}(-\d{4})?)$')
    205216    addr_error = 'Address must two lines: a street address, followed by "<city>, <two letter state abbreviation> <zip>". For non-US addresses, please contact a Treasurer for help.'
    206217
     218    # Fields
    207219    create_time = models.DateTimeField(default=datetime.datetime.now)
     220    rfp_submit_time = models.DateTimeField(default=None, null=True, blank=True)
     221    rfp_number = models.IntegerField(default=None, null=True, blank=True)
     222
     223    name = models.CharField(max_length=25, verbose_name='short description', )
     224    payee_type = models.CharField(choices=recipient_type_choices, max_length=10, default='other')
     225    payee_name = models.CharField(max_length=35, )
     226    addr_street = models.CharField(max_length=35, verbose_name='street address', blank=True, )
     227    addr_city = models.CharField(max_length=35, verbose_name='city', blank=True, )
     228    addr_state = models.CharField(max_length=10, verbose_name='state', blank=True, )
     229    addr_zip = models.CharField(max_length=10, verbose_name='zipcode', blank=True, )
     230    item_date = models.DateField()
     231    item_gl = models.CharField(max_length=10, verbose_name="item's G/L account")
     232    item_co = models.CharField(max_length=12, verbose_name="item's cost object")
     233    item_amount = models.DecimalField(max_digits=7, decimal_places=2)
     234    item_desc = models.TextField()
     235    documentation = models.ForeignKey('Documentation', blank=True, null=True, )
     236
     237    def fill_addr(self, address):
     238        match = self.addr_regex.match(address)
     239        assert match != None
     240        self.addr_street = match.group("street")
     241        self.addr_city = match.group("city")
     242        self.addr_state = match.group("state")
     243        self.addr_zip = match.group("zip")
    208244
    209245    def __unicode__(self, ):
    210246        return "RFP: %s" % (self.create_time.strftime(settings.SHORT_DATETIME_FORMAT_F), )
     247
     248    class Meta:
     249        verbose_name = "RFP"
    211250
    212251class Documentation(models.Model):
Note: See TracChangeset for help on using the changeset viewer.