Skip to content

Instantly share code, notes, and snippets.

@robrocker7
Created June 8, 2012 14:34
Show Gist options
  • Select an option

  • Save robrocker7/2895929 to your computer and use it in GitHub Desktop.

Select an option

Save robrocker7/2895929 to your computer and use it in GitHub Desktop.
import os
from datetime import timedelta
from django.db import models
from django_extensions.db.fields.encrypted import EncryptedCharField
from django.contrib.localflavor.us.models import PhoneNumberField
from django.contrib.localflavor.us.us_states import STATE_CHOICES
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from django.conf import settings
# Create your models here.
class Phone(models.Model):
PHONE_TYPE = (
('Home', 'home',),
('Mobile', 'mobile',),
('Business', 'business',),
('Fax', 'fax',),
)
number = PhoneNumberField()
type = models.CharField(max_length=8, choices=PHONE_TYPE)
date_created = models.DateTimeField(auto_now_add=True,
null=True, blank=True)
created_by = models.ForeignKey(User, null=True, blank=True)
def __unicode__(self):
return '%s - %s' % (self.number, self.type,)
class Address(models.Model):
street_address = models.CharField(max_length=256)
street_address_2 = models.CharField(max_length=256,
null=True, blank=True, default='')
city = models.CharField(max_length=32)
state = models.CharField(max_length=2,
choices=STATE_CHOICES, default='TX')
zip_code = models.CharField(max_length=10, blank=True, null=True)
county = models.CharField(max_length=36)
date_created = models.DateTimeField(auto_now_add=True,
null=True, blank=True)
created_by = models.ForeignKey(User, null=True, blank=True)
def get_street_address(self):
street = [self.street_address]
if self.street_address_2:
street.append(self.street_address_2)
return ' '.join(street)
def __unicode__(self):
street = [self.street_address]
if self.street_address_2:
street.append(self.street_address_2)
return '%s %s, %s %s %s' % (self.get_street_address(),
self.city,
self.state,
self.zip_code,
self.county)
class Client(models.Model):
# going to pull the name, email from the `auth.User`
profile = models.ForeignKey(User, related_name='profile',
null=True, blank=True)
# information for registering and activating their account
activation_key = models.CharField(max_length=40,
null=True, blank=True)
key_expires = models.DateTimeField(null=True, blank=True)
home_address = models.ForeignKey(Address, related_name='home',
null=True, blank=True)
billing_address = models.ForeignKey(Address, related_name='business',
null=True, blank=True)
phone_numbers = models.ManyToManyField(Phone,
null=True, blank=True)
social = EncryptedCharField(max_length=256,
null=True, blank=True)
date_of_birth = models.CharField(max_length=10, help_text='Format: DD/MM/YYYY',
null=True, blank=True)
date_created = models.DateTimeField(auto_now_add=True,
null=True, blank=True)
def get_full_name(self):
return '%s %s' % (self.profile.first_name, self.profile.last_name)
def __unicode__(self):
return '%s' % (self.profile.username)
class Beneficiary(models.Model):
BENE_TYPES = (
('primary', 'Primary'),
('contingent', 'Contingent'),
)
first_name = models.CharField(max_length=30, null=True, blank=True)
last_name = models.CharField(max_length=30, null=True, blank=True)
street_address = models.CharField(max_length=256,
null=True, blank=True)
street_address_2 = models.CharField(max_length=256,
null=True, blank=True, default='')
city = models.CharField(max_length=32,
null=True, blank=True)
state = models.CharField(max_length=2,
choices=STATE_CHOICES, default='TX')
zip_code = models.CharField(max_length=10, blank=True, null=True)
county = models.CharField(max_length=36,
null=True, blank=True)
social = EncryptedCharField(max_length=256,
null=True, blank=True)
date_of_birth = models.CharField(max_length=10, help_text='Format: DD/MM/YYYY',
null=True, blank=True)
relationship = models.CharField(max_length=256)
bene_type = models.CharField(max_length=12, choices=BENE_TYPES,
null=True, blank=True)
percentage = models.CharField(max_length=5, default=100,
null=True, blank=True)
def get_street_address(self):
street = [self.street_address]
if self.street_address_2:
street.append(self.street_address_2)
return ' '.join(street)
class NameAddressBase(models.Model):
name = models.CharField(max_length=256)
address = models.ForeignKey(Address, null=True, blank=True)
phone = models.ForeignKey(Phone, null=True, blank=True)
date_created = models.DateTimeField(auto_now_add=True,
null=True, blank=True)
created_by = models.ForeignKey(User, null=True, blank=True)
class Meta:
abstract = True
class RegisteredAgent(NameAddressBase):
pass
class LLCManager(NameAddressBase):
pass
class Custodian(models.Model):
CUSTODIAN_PLAN_TYPES = (
('previous', 'Previous 401(k), 403(b), 457 or Defined Benefit Plan from a past Employer'),
('traditional_ira', 'Traditional IRA'),
('roth_ira', 'Roth IRA'),
('sep_ira', 'SEP IRA'),
('inherited_ira', 'Inherited IRA'),
('simple_ira', 'Simple IRA'),
('new_ira', 'New IRA'),
)
LIQUIDATE_CHOICES = (
('all_assets', 'Liquidate all assets and transfer cash balance to IRA'),
('partial', 'This will be a Partial Transfer/Rollover'),
)
plan = models.CharField(max_length=48, choices=CUSTODIAN_PLAN_TYPES)
account_number = models.CharField(max_length=32, null=True, blank=True)
new_amount = models.CharField(max_length=36, null=True, blank=True)
new_years = models.CharField(max_length=8, null=True, blank=True)
liquidate = models.CharField(max_length=18, choices=LIQUIDATE_CHOICES)
liquidate_cash = models.CharField(max_length=36, null=True, blank=True)
name = models.CharField(max_length=64, null=True, blank=True)
address = models.ForeignKey(Address, null=True, blank=True)
phone = models.ForeignKey(Phone, null=True, blank=True)
date_created = models.DateTimeField(auto_now_add=True,
null=True, blank=True)
created_by = models.ForeignKey(User, null=True, blank=True)
class Intake(models.Model):
TRANSFER_MAP = (
('transfer', 'Transfer - I will transfer assets from another IRA'),
('rollover', 'Rollover - I will rollover cash from an existing IRA or qualified retirement plan - This will be a Rollover of a distribution from a prior IRA or of a lump sum distribution or plan termination distribution paid to me within one taxable year from a qualified employee benefit plan or annuity, either of which is contributed to this IRA within 60 days of receipt of such funds.'),
)
STATUS_MAP = (
('0', 'Client'),
('1', 'Beneficiaries'),
('2', 'Custodian Information'),
('3', 'IRA Formation,Reg Agent, LLC Manager'),
('4', 'Special Instructions'),
('5', 'Waiting for payment'),
('6', 'Paid'),
)
IRA_TYPE = (
('traditional_ira', 'Traditional IRA'),
('roth_ira', 'Roth IRA'),
('roth_conversion', 'Roth Conversion'),
('sep_ira', 'SEP IRA'),
('inherited_ira', 'Inherited IRA'),
)
client = models.ForeignKey(Client)
beneficiaries = models.ManyToManyField(Beneficiary, related_name='client_beneficiaries', null=True, blank=True)
ira_type = models.CharField(max_length=16, choices=IRA_TYPE,
null=True, blank=True)
custodians = models.ManyToManyField(Custodian,
null=True, blank=True)
proposed_name_one = models.CharField(max_length=64,
null=True, blank=True)
proposed_name_two = models.CharField(max_length=64,
null=True, blank=True)
proposed_name_three = models.CharField(max_length=64,
null=True, blank=True)
registered_agent = models.ForeignKey(RegisteredAgent,
null=True, blank=True)
llc_manager = models.ForeignKey(LLCManager,
null=True, blank=True)
duration = models.BooleanField(default=True,
help_text="Leave checked for Perpetual (Recommended)")
duration_other = models.CharField(max_length=64,
null=True, blank=True)
special_instructions = models.TextField(null=True, blank=True)
transfer_method = models.CharField(max_length=24, choices=TRANSFER_MAP,
null=True, blank=True)
intital = models.CharField(max_length=2, help_text="Initials must match the First and Last name you entered earlier",
null=True, blank=True)
date_created = models.DateTimeField(auto_now_add=True)
created_by = models.ForeignKey(User, related_name='created_by',
null=True, blank=True)
agent = models.ForeignKey(User, related_name='agent',
null=True, blank=True)
status = models.CharField(max_length=20, choices=STATUS_MAP,
null=True, blank=True)
def generate_forms(self):
forms = {}
documents = []
# generate application
from apps.pdfs.application import Application
a = Application(self)
application = Document().create_application(self, a.file_path)
documents.append(application)
# generate beneficiary
from apps.pdfs.beneficiary import Beneficiary
b = Beneficiary(self)
for bc in range(0, len(b.file_path)):
beneficiary = Document().create_beneficiary(self, b.file_path[bc])
documents.append(beneficiary)
return documents
def get_documents(self):
documents = []
# create document sets
doc_time_temp = None
current_docset = None
time_pad = timedelta(minutes=3)
for document in self.document_set.all():
if doc_time_temp is None:
doc_time_temp = document.date_created
documents.append([])
current_docset = len(documents) - 1
documents[current_docset].append(document)
elif document.date_created <= (doc_time_temp + time_pad) and document.date_created >= (doc_time_temp - time_pad):
documents[current_docset].append(document)
else:
doc_time_temp = document.date_created
documents.append([])
current_docset = len(documents) - 1
documents[current_docset].append(document)
return documents
def __unicode__(self):
return '%s - %s' % (self.ira_type, self.client)
def get_absolute_url(self):
if self.status == '0':
return reverse('intake:intake_form')
elif self.status == '1':
return reverse('intake:intake_form_two')
elif self.status == '2':
return reverse('intake:intake_form_three')
elif self.status == '3':
return reverse('intake:intake_form_four')
elif self.status == '4':
return reverse('intake:intake_form_five')
elif self.status == '5':
return reverse('intake:intake_form_six')
else:
return reverse('intake:intake_form')
def agent_absolute_url(self):
if self.status == '0':
return reverse('agent_intake:intake_form',
kwargs={'client_id': self.client.id})
elif self.status == '1':
return reverse('agent_intake:intake_form_two',
kwargs={'client_id': self.client.id})
elif self.status == '2':
return reverse('agent_intake:intake_form_three',
kwargs={'client_id': self.client.id})
elif self.status == '3':
return reverse('agent_intake:intake_form_four',
kwargs={'client_id': self.client.id})
elif self.status == '4':
return reverse('agent_intake:intake_form_five',
kwargs={'client_id': self.client.id})
elif self.status == '5':
return reverse('agent_intake:intake_form_six',
kwargs={'client_id': self.client.id})
else:
return reverse('agent_intake:intake_form',
kwargs={'client_id': self.client.id})
class Document(models.Model):
DOCUMENT_TYPES = (
('application', 'Application'),
('beneficiary', 'Beneficiary'),
)
intake = models.ForeignKey(Intake)
document_type = models.CharField(max_length=18)
file_path = models.FilePathField(
path=os.path.join(settings.MEDIA_ROOT, 'forms'))
date_created = models.DateTimeField(auto_now_add=True)
def create_application(self, intake, path):
d = self
d.document_type = 'application'
d.intake = intake
d.file_path = path
d.save()
return d
def create_beneficiary(self, intake, path):
d = self
d.document_type = 'beneficiary'
d.intake = intake
d.file_path = path
d.save()
return d
def get_absolute_url(self):
return '%sforms/%s' % (settings.MEDIA_URL, self.file_path)
def __unicode__(self):
return '%s - %s (%s-%s-%s)' % (
self.intake.client.get_full_name(),
self.document_type,
self.date_created.month,
self.date_created.day,
self.date_created.year)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment