Changeset 52c3467


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)

Location:
treasury
Files:
2 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
  • treasury/vouchers/import_budget.py

    r7874f6a r52c3467  
    44import subprocess
    55import vouchers.models
    6 from vouchers.models import BudgetArea
    7 from vouchers.models import coerce_full_email
     6import finance_core.models
     7from finance_core.models import BudgetArea
     8from finance_core.models import coerce_full_email
     9from finance_core.models import Transaction
     10from finance_core.models import get_layer_by_name, layer_num
     11from decimal import *
    812
    913columns = ['comm_name','priority','expense_type','start_date','end_date','project','item_name','desc','people','count','costitem','subtotal','per_person','email_list']
     
    1418    reader = csv.reader(infile)
    1519    for comm in reader:
    16         email_list,chair_list,name,prefer_chair,area = comm
     20        email_list,chair_list,name,prefer_chair,area,account = comm
    1721        if prefer_chair=='yes': prefer_chair = True
    1822        else: prefer_chair = False
    19         committees[email_list] = { 'email_list': email_list, 'chair_list': chair_list, 'name': name, 'prefer_chair':prefer_chair, 'area':area}
     23        committees[email_list] = { 'email_list': email_list, 'chair_list': chair_list, 'name': name, 'prefer_chair':prefer_chair, 'area':area, 'account':account}
    2024    return committees
    2125
     
    6064    for comm in committees.values():
    6165        parent = parents[comm['area']]
    62         parent.add_child(
    63             name=comm['name'],
    64             owner=coerce_full_email(comm['chair_list']),
    65             interested=coerce_full_email(comm['email_list']),
    66             use_owner=comm['prefer_chair'],
    67             always=True,
    68         )
     66        if len(parent.get_children().filter(name=comm['name'])) > 0:
     67            pass
     68        else:
     69            parent.add_child(
     70                name=comm['name'],
     71                owner=coerce_full_email(comm['chair_list']),
     72                interested=coerce_full_email(comm['email_list']),
     73                use_owner=comm['prefer_chair'],
     74                always=True,
     75            )
    6976    return (depth+1, )
    7077
     78budget_layer = layer_num(get_layer_by_name('budget'))
    7179def do_process_rows(committees, budget, term, depth):
    7280    reader = csv.reader(budget)
     
    105113            else: line_item_obj = line_items[0]
    106114            line_item_obj.mark_used(term)
     115            amount = Decimal(subtotal.replace('$', '').replace(',', ''))
     116            finance_core.models.make_transfer(
     117                item_name, amount, budget_layer,
     118                term, budget_source, line_item_obj, desc=desc)
     119
    107120
    108121def main(committees_file, budget_file, term_name, ):
Note: See TracChangeset for help on using the changeset viewer.