Ignore:
Timestamp:
Jan 22, 2010, 4:56:19 AM (16 years ago)
Author:
Alex Dehnert <adehnert@…>
Branches:
master, client
Children:
31bd056
Parents:
e64b195
git-author:
Alex Dehnert <adehnert@…> (01/22/10 04:56:19)
git-committer:
Alex Dehnert <adehnert@…> (01/22/10 04:56:19)
Message:

Add transaction support (WIP)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • treasury/finance_core/models.py

    r169d7b5 r52c3467  
    8585
    8686
     87class Transaction(models.Model):
     88    name = models.CharField(max_length=40)
     89    desc = models.TextField(blank=True)
     90
     91    def __unicode__(self,):
     92        return self.name
     93
     94def make_transfer(name, amount,
     95    layer, budget_term, from_area, to_area, desc, ):
     96    tx = Transaction(
     97        name=name,
     98        desc=desc,
     99    )
     100    tx.save()
     101
     102    from_li = LineItem(
     103        label='Send: %s' % (name, ),
     104        amount=-amount,
     105        budget_area=from_area,
     106        budget_term=budget_term,
     107        layer=layer,
     108        tx=tx,
     109    )
     110    from_li.save()
     111
     112    to_li = LineItem(
     113        label='Receive: %s' % (name, ),
     114        amount=amount,
     115        budget_area=to_area,
     116        budget_term=budget_term,
     117        layer=layer,
     118        tx=tx,
     119    )
     120    to_li.save()
     121
     122    return tx
     123
     124
     125class LineItem(models.Model):
     126    tx = models.ForeignKey(Transaction)
     127    amount = models.DecimalField(max_digits=7, decimal_places=2, help_text='Do not include "$"')
     128    label = models.CharField(max_length=40)
     129    budget_area = models.ForeignKey(BudgetArea)
     130    budget_term = models.ForeignKey(BudgetTerm)
     131    layer = models.IntegerField() # this might actually be a Transaction property...
     132
     133    def layer_string(self,):
     134        layer = self.layer
     135        return layer_name(get_layer_by_num(layer))
     136
     137    def __unicode__(self, ):
     138        return "%s: %s: $%s (%s) in %s during %s" % (
     139            self.tx, self.label, self.amount, self.layer,
     140            self.budget_area, self.budget_term, )
     141
     142
     143layers=(
     144    (10, 'budget'),
     145    (20, 'allocation'),
     146    (30, 'expenditure'),
     147    (40, 'closeout'),
     148)
     149def get_layer_by_name(name):
     150    for layer in layers:
     151        if name == layer[1]:
     152            return layer
     153    raise KeyError, "layer %s not found" % (name, )
     154def get_layer_by_num(num):
     155    for layer in layers:
     156        if num == layer[0]:
     157            return layer
     158    raise KeyError, "layer %d not found" % (num, )
     159def layer_name(layer): return layer[1]
     160def layer_num(layer):  return layer[0]
     161
     162
    87163def coerce_full_email(email):
    88164    if '@' in email: return email
Note: See TracChangeset for help on using the changeset viewer.