Created
June 8, 2012 14:34
-
-
Save robrocker7/2895929 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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