def update(self, instance, validated_data): if 'tax_transcript' in validated_data['user']['invitation']: instance.user.invitation.tax_transcript = validated_data['user']['invitation']['tax_transcript'] instance.user.invitation.save() tmp_filename = '/tmp/' + str(uuid.uuid4()) + '.pdf' with open(tmp_filename, 'wb+') as f: for chunk in validated_data['user']['invitation']['tax_transcript'].chunks(): f.write(chunk) instance.regional_data['tax_transcript'] = instance.user.invitation.tax_transcript.url instance.regional_data['tax_transcript_data'] = parse_tax_pdf(tmp_filename) if 'social_security_statement' in validated_data['user']['invitation']: instance.user.invitation.social_security_statement = validated_data['user']['invitation']['social_security_statement'] instance.user.invitation.save() tmp_filename = '/tmp/' + str(uuid.uuid4()) + '.pdf' with open(tmp_filename, 'wb+') as f: for chunk in validated_data['user']['invitation']['social_security_statement'].chunks(): f.write(chunk) instance.regional_data['social_security_statement'] = instance.user.invitation.social_security_statement.url instance.regional_data['social_security_statement_data'] = parse_ss_pdf(tmp_filename) if 'partner_social_security_statement' in validated_data['user']['invitation']: instance.user.invitation.partner_social_security_statement = validated_data['user']['invitation']['partner_social_security_statement'] instance.user.invitation.save() tmp_filename = '/tmp/' + str(uuid.uuid4()) + '.pdf' with open(tmp_filename, 'wb+') as f: for chunk in validated_data['user']['invitation']['partner_social_security_statement'].chunks(): f.write(chunk) instance.regional_data['partner_social_security_statement'] = instance.user.invitation.partner_social_security_statement.url instance.regional_data['partner_social_security_statement_data'] = parse_ss_pdf(tmp_filename) instance.save() return validated_data
def get_social_security_statement_data(self, obj): if obj.social_security_statement: tmp_filename = '/tmp/' + str(uuid.uuid4()) + '.pdf' with open(tmp_filename, 'wb+') as f: for chunk in obj.social_security_statement.chunks(): f.write(chunk) obj.social_security_statement_data = parse_ss_pdf(tmp_filename) return obj.social_security_statement_data return None
def get_partner_social_security_statement_data(self, obj): if obj.partner_social_security_statement: tmp_filename = '/tmp/' + str(uuid.uuid4()) + '.pdf' with open(tmp_filename, 'wb+') as f: for chunk in obj.partner_social_security_statement.chunks(): f.write(chunk) obj.client.regional_data['partner_social_security_statement_data'] = parse_ss_pdf(tmp_filename) obj.client.save() return obj.client.regional_data['partner_social_security_statement_data'] return None
def update(self, instance, validated_data): """ Override the default update because we have nested relations. :param instance: :param validated_data: :return: The updated RetirementPlan """ if instance.agreed_on: raise ValidationError( "Unable to make changes to a plan that has been agreed on") # Client civil_status check if 'client' in validated_data: if 'civil_status' in validated_data['client']: instance.client.civil_status = validated_data['client'][ 'civil_status'] if 'smoker' in validated_data['client']: instance.client.smoker = validated_data['client']['smoker'] if 'drinks' in validated_data['client']: instance.client.drinks = validated_data['client']['drinks'] if 'height' in validated_data['client']: instance.client.height = validated_data['client']['height'] if 'weight' in validated_data['client']: instance.client.weight = validated_data['client']['weight'] if 'daily_exercise' in validated_data['client']: instance.client.daily_exercise = validated_data['client'][ 'daily_exercise'] if 'home_value' in validated_data['client']: instance.client.home_value = validated_data['client'][ 'home_value'] if 'home_growth' in validated_data['client']: instance.client.home_growth = validated_data['client'][ 'home_growth'] if 'ss_fra_todays' in validated_data['client']: instance.client.ss_fra_todays = validated_data['client'][ 'ss_fra_todays'] if 'ss_fra_retirement' in validated_data['client']: instance.client.ss_fra_retirement = validated_data['client'][ 'ss_fra_retirement'] if 'state_tax_after_credits' in validated_data['client']: instance.client.state_tax_after_credits = validated_data[ 'client']['state_tax_after_credits'] if 'state_tax_effrate' in validated_data['client']: instance.client.state_tax_effrate = validated_data['client'][ 'state_tax_effrate'] if 'pension_name' in validated_data['client']: instance.client.pension_name = validated_data['client'][ 'pension_name'] if 'pension_amount' in validated_data['client']: instance.client.pension_amount = validated_data['client'][ 'pension_amount'] if 'pension_start_date' in validated_data['client']: instance.client.pension_start_date = validated_data['client'][ 'pension_start_date'] if 'employee_contributions_last_year' in validated_data['client']: instance.client.employee_contributions_last_year = validated_data[ 'client']['employee_contributions_last_year'] if 'employer_contributions_last_year' in validated_data['client']: instance.client.employer_contributions_last_year = validated_data[ 'client']['employer_contributions_last_year'] if 'total_contributions_last_year' in validated_data['client']: instance.client.total_contributions_last_year = validated_data[ 'client']['total_contributions_last_year'] if 'user' in validated_data['client']: if 'tax_transcript' in validated_data['client']['user'][ 'invitation']: instance.client.user.invitation.tax_transcript = validated_data[ 'client']['user']['invitation']['tax_transcript'] instance.client.user.invitation.save() tmp_filename = '/tmp/' + str(uuid.uuid4()) + '.pdf' with open(tmp_filename, 'wb+') as f: for chunk in validated_data['client']['user'][ 'invitation']['tax_transcript'].chunks(): f.write(chunk) instance.client.regional_data[ 'tax_transcript'] = instance.client.user.invitation.tax_transcript.url instance.client.regional_data[ 'tax_transcript_data'] = parse_tax_pdf(tmp_filename) if 'social_security_statement' in validated_data['client'][ 'user']['invitation']: instance.client.user.invitation.social_security_statement = validated_data[ 'client']['user']['invitation'][ 'social_security_statement'] instance.client.user.invitation.save() tmp_filename = '/tmp/' + str(uuid.uuid4()) + '.pdf' with open(tmp_filename, 'wb+') as f: for chunk in validated_data['client']['user'][ 'invitation'][ 'social_security_statement'].chunks(): f.write(chunk) instance.client.regional_data[ 'social_security_statement'] = instance.client.user.invitation.social_security_statement.url instance.client.regional_data[ 'social_security_statement_data'] = parse_ss_pdf( tmp_filename) if 'partner_social_security_statement' in validated_data[ 'client']['user']['invitation']: instance.client.user.invitation.partner_social_security_statement = validated_data[ 'client']['user']['invitation'][ 'partner_social_security_statement'] instance.client.user.invitation.save() tmp_filename = '/tmp/' + str(uuid.uuid4()) + '.pdf' with open(tmp_filename, 'wb+') as f: for chunk in validated_data['client']['user'][ 'invitation'][ 'partner_social_security_statement'].chunks( ): f.write(chunk) instance.client.regional_data[ 'partner_social_security_statement'] = instance.client.user.invitation.partner_social_security_statement.url instance.client.regional_data[ 'partner_social_security_statement_data'] = parse_ss_pdf( tmp_filename) instance.client.save() for attr, value in validated_data.items(): if str(attr) != 'client': # civil_status update is on client setattr(instance, attr, value) reverse_plan = getattr(instance, 'partner_plan_reverse', None) if instance.partner_plan is not None and reverse_plan is not None and instance.partner_plan != reverse_plan: emsg = "Partner plan relationship must be symmetric. " \ "I.e. Your selected partner plan must have you as it's partner" raise ValidationError(emsg) instance.save() return instance