def fill_out(form, pdf): f = form pdf.load('us.f8829--{}.pdf'.format(f.form_version)) if f.form_version < u'2014': return fill_out_pre_2014(form, pdf) pdf.pattern = 'p1-t{}[0]' pdf[1] = f.name pdf[2] = f.ssn pdf[3] = zstr(f.line1) pdf[4] = zstr(f.line2) pdf[5] = zstr(f.line3 * hundred).rstrip(u'0 ') # pdf[8] = zstr(f.line4) # pdf[9] = zstr(f.line6) pdf[9] = zstr(f.line7 * hundred).rstrip(u'0 ') n = 10 for seq in ([[8]] + [ab(i) for i in range(9, 13)] + [[13, 14, 15]] + [ab(i) for i in range(16, 23)] + [range(23, 40)]): for i in seq: pdf[n], pdf[n + 1] = zzstr(f['line', i]) n += 2 pdf[96] = zstr(f.line40 * hundred).rstrip(u'0 ') pdf[97], pdf[98] = zzstr(f.line41) pdf[99], pdf[100] = zzstr(f.line42) pdf[101], pdf[102] = zzstr(f.line43)
def fill_out(form, pdf): f = form pdf.load('us.f8829--{}.pdf'.format(f.form_version)) pdf.pattern = 'p1-t{}[0]' pdf[1] = f.name pdf[2] = f.ssn pdf[5] = zstr(f.line1) pdf[6] = zstr(f.line2) pdf[7] = zstr(f.line3 * hundred).rstrip(u'0 ') # pdf[8] = zstr(f.line4) # pdf[9] = zstr(f.line6) pdf[10] = zstr(f.line7 * hundred).rstrip(u'0 ') n = 11 for seq in ( [[8]] + [ab(i) for i in range(9, 13)] + [[13, 14, 15]] + [ab(i) for i in range(16, 23)] + [range(23, 40)] ): for i in seq: pdf[n], pdf[n+1] = zzstr(f['line', i]) n += 2 pdf[97] = zstr(f.line40 * hundred).rstrip(u'0 ') pdf[98], pdf[99] = zzstr(f.line41) pdf[100], pdf[101] = zzstr(f.line42) pdf[102], pdf[103] = zzstr(f.line43)
def fill_out_pre_2014(form, pdf): f = form pdf.pattern = 'p1-t{}[0]' pdf[1] = f.name pdf[2] = f.ssn pdf[5] = zstr(f.line1) pdf[6] = zstr(f.line2) pdf[7] = zstr(f.line3 * hundred).rstrip(u'0 ') # pdf[8] = zstr(f.line4) # pdf[9] = zstr(f.line6) pdf[10] = zstr(f.line7 * hundred).rstrip(u'0 ') n = 11 for seq in ([[8]] + [ab(i) for i in range(9, 13)] + [[13, 14, 15]] + [ab(i) for i in range(16, 23)] + [range(23, 40)]): for i in seq: pdf[n], pdf[n + 1] = zzstr(f['line', i]) n += 2 pdf[97] = zstr(f.line40 * hundred).rstrip(u'0 ') pdf[98], pdf[99] = zzstr(f.line41) pdf[100], pdf[101] = zzstr(f.line42) pdf[102], pdf[103] = zzstr(f.line43)
def fill_out_pre_2014(form, pdf): f = form pdf.pattern = "p1-t{}[0]" pdf[1] = f.name pdf[2] = f.ssn pdf[5] = zstr(f.line1) pdf[6] = zstr(f.line2) pdf[7] = zstr(f.line3 * hundred).rstrip(u"0 ") # pdf[8] = zstr(f.line4) # pdf[9] = zstr(f.line6) pdf[10] = zstr(f.line7 * hundred).rstrip(u"0 ") n = 11 for seq in ( [[8]] + [ab(i) for i in range(9, 13)] + [[13, 14, 15]] + [ab(i) for i in range(16, 23)] + [range(23, 40)] ): for i in seq: pdf[n], pdf[n + 1] = zzstr(f["line", i]) n += 2 pdf[97] = zstr(f.line40 * hundred).rstrip(u"0 ") pdf[98], pdf[99] = zzstr(f.line41) pdf[100], pdf[101] = zzstr(f.line42) pdf[102], pdf[103] = zzstr(f.line43)
def fill_out(form, pdf): f = form pdf.load("us.f8829--{}.pdf".format(f.form_version)) if f.form_version < u"2014": return fill_out_pre_2014(form, pdf) pdf.pattern = "p1-t{}[0]" pdf[1] = f.name pdf[2] = f.ssn pdf[3] = zstr(f.line1) pdf[4] = zstr(f.line2) pdf[5] = zstr(f.line3 * hundred).rstrip(u"0 ") # pdf[8] = zstr(f.line4) # pdf[9] = zstr(f.line6) pdf[9] = zstr(f.line7 * hundred).rstrip(u"0 ") n = 10 for seq in ( [[8]] + [ab(i) for i in range(9, 13)] + [[13, 14, 15]] + [ab(i) for i in range(16, 23)] + [range(23, 40)] ): for i in seq: pdf[n], pdf[n + 1] = zzstr(f["line", i]) n += 2 pdf[96] = zstr(f.line40 * hundred).rstrip(u"0 ") pdf[97], pdf[98] = zzstr(f.line41) pdf[99], pdf[100] = zzstr(f.line42) pdf[101], pdf[102] = zzstr(f.line43)
def split(value, i=None, j=None): if i is None: i = last_split[0] + 2 last_split[0] = i if j is None: j = i + 1 pdf[i], pdf[j] = zzstr(value)
def fill_out(form, pdf): f = form pdf.load('us.f1040sse--{}.pdf'.format(f.form_version)) pdf.pages = 2, pdf.pattern = 'p2-t{}[0]' pdf[1] = f.name pdf[2] = f.ssn n = 5 for v in (f.line1a, f.line1b, f.line2, f.line3, f.line4a, f.line4b, f.line4c, f.line5a, f.line5b, f.line6, f.line8a, f.line8b, f.line8c, f.line8d, f.line9, f.line10, f.line11, f.line12): pdf[n], pdf[n + 1] = zzstr(v) n += 2 pdf[52], pdf[53] = zzstr(f.line13)
def fill_out(form, pdf): f = form pdf.load('us.f1040sse--{}.pdf'.format(f.form_version)) pdf.pages = 2, pdf.pattern = 'p2-t{}[0]' pdf[1] = f.name pdf[2] = f.ssn n = 5 for v in (f.line1a, f.line1b, f.line2, f.line3, f.line4a, f.line4b, f.line4c, f.line5a, f.line5b, f.line6, f.line8a, f.line8b, f.line8c, f.line8d, f.line9, f.line10, f.line11, f.line12): pdf[n], pdf[n+1] = zzstr(v) n += 2 pdf[52], pdf[53] = zzstr(f.line13)
def fill_out(form, pdf): f = form pdf.load('us.f1040sse--{}.pdf'.format(f.form_version)) pdf.pages = 1, pdf.pattern = 'p1-t{}[0]' pdf[1] = f.name pdf[2] = f.ssn pdf[5], pdf[6] = zzstr(f.line1a) pdf[7], pdf[8] = zzstr(f.line1b) pdf[9], pdf[10] = zzstr(f.line2) pdf[11], pdf[12] = zzstr(f.line3) pdf[13], pdf[14] = zzstr(f.line4) pdf[15], pdf[16] = zzstr(f.line5) pdf[17], pdf[18] = zzstr(f.line6)
def fill_out(form, pdf): f = form pdf.load('us.f1040sb--{}.pdf'.format(f.form_version)) pdf.pages = 1, pdf['_01['] = f.name pdf['_02['] = f.ssn pdf.pattern = 'f1-{:02}[' n = 3 for payer, amount in f.line1: pdf[n] = payer pdf[n+1], pdf[n+2] = zzstr(amount) n += 3 pdf[45], pdf[46] = zzstr(f.line2) pdf[47], pdf[48] = zzstr(f.line3) pdf[49], pdf[50] = zzstr(f.line4) n = 51 for payer, amount in f.line5: pdf[n] = payer pdf[n+1], pdf[n+2] = zzstr(amount) n += 3 pdf[96], pdf[97] = zzstr(f.line6) pdf[98] = f.line7b pdf.pattern = '{}' a, b = f.line7a pdf['-cb1[0]'] = 'yes' if a else 'Off' pdf['-cb1[1]'] = 'no' if not a else 'Off' pdf['-cb2[0]'] = 'yes' if b else 'Off' pdf['-cb2[1]'] = 'no' if not b else 'Off' pdf['-cb3[0]'] = 'yes' if f.line8 else 'Off' pdf['-cb3[1]'] = 'no' if not f.line8 else 'Off'
def fill_out(form, pdf): f = form pdf.load('us.f1040sb--{}.pdf'.format(f.form_version)) pdf.pages = 1, pdf['_01['] = f.name pdf['_02['] = f.ssn pdf.pattern = 'f1-{:02}[' n = 3 for payer, amount in f.line1: pdf[n] = payer pdf[n + 1], pdf[n + 2] = zzstr(amount) n += 3 pdf[45], pdf[46] = zzstr(f.line2) pdf[47], pdf[48] = zzstr(f.line3) pdf[49], pdf[50] = zzstr(f.line4) n = 51 for payer, amount in f.line5: pdf[n] = payer pdf[n + 1], pdf[n + 2] = zzstr(amount) n += 3 pdf[96], pdf[97] = zzstr(f.line6) pdf[98] = f.line7b pdf.pattern = '{}' a, b = f.line7a pdf['-cb1[0]'] = 'yes' if a else 'Off' pdf['-cb1[1]'] = 'no' if not a else 'Off' pdf['-cb2[0]'] = 'yes' if b else 'Off' pdf['-cb2[1]'] = 'no' if not b else 'Off' pdf['-cb3[0]'] = 'yes' if f.line8 else 'Off' pdf['-cb3[1]'] = 'no' if not f.line8 else 'Off'
def _old_2013_fill_out(f, pdf): pdf.pattern = 'topmostSubform[0].Page1[0].EntityArea[0].Text3{}[0]' for letter, digit in zip(' abcdefgh', f.ein.replace('-', '')): pdf[letter.strip()] = digit pdf.pattern = 'topmostSubform[0].Page1[0].EntityArea[0].Text{}[0]' pdf[5] = f.name pdf[6] = f.trade_name pdf[7] = f.address pdf[8] = f.city pdf[9] = f.state pdf[10] = f.zip # TODO: Foreign address pdf.pattern = 'topmostSubform[0].Page1[0].#subform[{}].Check_Box{}[0]' pdf[5, 23] = '1' if f.line4a else 'Off' pdf[5, 24] = '1' if f.line4b else 'Off' pdf[6, 25] = '1' if f.line4c else 'Off' pdf[6, 26] = '1' if f.line4d else 'Off' pdf.pattern = 'topmostSubform[0].Page1[0].Check_Box{}[0]' pdf[23] = '1' if f.line4e else 'Off' pdf.pattern = 'topmostSubform[0].Page1[0].Text{}[0]' pdf[16] = f.line1a[0] pdf[17] = f.line1a[1] # TODO: check marks on lines 1b and 2 pdf['21'], pdf['21a'] = zzstr(f.line3) pdf['22'], pdf['22a'] = zzstr(f.line4) # TODO: check boxes on line 4 pdf['28'], pdf['28a'] = zzstr(f.line5) pdf['29'], pdf['29a'] = zzstr(f.line6) pdf['500'], pdf['500a'] = zzstr(f.line7) pdf['31'], pdf['31a'] = zzstr(f.line8) pdf['32'], pdf['32a'] = zzstr(f.line9) pdf['33'], pdf['33a'] = zzstr(f.line10) pdf['34'], pdf['34a'] = zzstr(f.line11) pdf['35'], pdf['35a'] = zzstr(f.line12) pdf['36'], pdf['36a'] = zzstr(f.line13) pdf['37'], pdf['37a'] = zzstr(f.line14) pdf['38'], pdf['38a'] = zzstr(f.line15) pdf.pattern = 'topmostSubform[0].Page2[0].{}' pdf['Text41[0]'] = f.name pdf['Text42[0]'] = f.ein # TODO: Part 5 # TODO: Part 6 designee pdf['p2-cb1[1]'] = 'Off' if f.part6 else '2' pdf.pattern = 'topmostSubform[0].Page2[0].Text{}[0]' pdf['59'] = f.sign_name pdf['61'] = f.sign_title pdf['64'] = f.sign_phone
def fill_out(form, pdf): pdf.load('us.f1040--{}.pdf'.format(form.form_version)) if form.form_version < u'2014': return fill_out_2013_and_before(form, pdf) f = form #v = info_dict[f.form_version] pdf.pattern = 'f1_{:02}[0]' pdf[4] = f.first_name pdf[5] = f.last_name pdf[6] = f.ssn.replace('-', '') pdf[7] = f.spouse_first_name pdf[8] = f.spouse_last_name pdf[9] = f.spouse_ssn.replace('-', '') pdf.pattern = 'f1-{:02}[0]' pdf[10] = f.address pdf[11] = f.apartment_number pdf[12] = f.city_state_zip pdf[13] = f.foreign_country pdf[14] = f.foreign_province pdf[15] = f.foreign_postal_code pdf.pattern = '{}' pdf['Lines1-3[0].c1_03[0]'] = ('S' if f.filing_status == 'S' else 'Off') pdf['Lines1-3[0].c1_03[1]'] = ('MJ' if f.filing_status == 'MJ' else 'Off') pdf['Lines1-3[0].c1_03[2]'] = ('MS' if f.filing_status == 'MS' else 'Off') pdf['Page1[0].c1_03[0]'] = ('HoH' if f.filing_status == 'HoH' else 'Off') pdf['Page1[0].c1_03[1]'] = ('QW' if f.filing_status == 'QW' else 'Off') if f.filing_status == 'MS': pdf['Lines1-3[0].f1-16[0]'] = f.spouse_ssn pdf['c1_04[0]'] = ('1' if f.line6a else 'Off') pdf['c1_05[0]'] = ('1' if f.line6b else 'Off') # TODO: Dependents pdf.pattern = 'Page1[0].f1_{:02}[0]' pdf[30] = f.line6ab pdf[34] = f.line6d i = 35 for n in ('7 8a 8b 9a 9b 10 11 12 13 14 15a 15b 16a 16b 17 18 19 ' '20a 20b 21 22 23 24 25 26 27 28 29 ' '30 31a 32 33 34 35 36 37').split(): pdf[i], pdf[i + 1] = zzstr(f['line', n]) if n in ('21', '31a'): i += 3 else: i += 2 pdf.pattern = '{}' pdf['f1-_51[0]'] = zzstr(f.line13)[0] pdf.pattern = '.f2_{:02}[0]' i = 1 for n in ([38] + range(40, 60) + '60a 60b'.split() + range(61, 66) + '66a 66b'.split() + range(67, 76) + '76a 77 78 79'.split()): pdf[i], pdf[i + 1] = zzstr(f['line', n]) if n == '76a': i += 4 elif n in (38, 43, 53, 61, 72): i += 3 else: i += 2
def fill_out_2013_and_before(form, pdf): f = form v = info_dict[f.form_version] pdf.pattern = 'p1-t{}[' pdf[4] = f.first_name pdf[5] = f.last_name pdf[6] = f.spouse_first_name pdf[7] = f.spouse_last_name pdf[8] = f.address pdf[9] = f.apartment_number pdf[10] = f.city_state_zip pdf['011'] = f.foreign_country pdf['012'] = f.foreign_province pdf['013'] = f.foreign_postal_code pdf[11] = f.ssn.replace('-', '') pdf[14] = f.spouse_ssn.replace('-', '') # TODO: checkboxes for the Presidential Election Campaign (or not?) pdf.pattern = '{}' pdf['c1_04['] = [(status if f.filing_status == status else u'Off') for status in filing_statuses] # TODO: text fields that go along with filing statuses pdf['c1_05[0]'] = '1' if f.line6a else 'Off' pdf['c1_06[0]'] = '1' if f.line6b else 'Off' d_pos = [20, 21, 24, 25, 26, 30, 31, 32, 35, 36, 37, 40] # not uniform numbering d_cbox = 7 for (d_name, d_ssn, d_rel, d_credit) in getattr(f, 'dependents', []): pdf['p1-t%s[' % d_pos.pop(0)] = d_name pdf['p1-t%s[' % d_pos.pop(0)] = d_ssn.replace('-', '') pdf['p1-t%s[' % d_pos.pop(0)] = d_rel pdf['c1_%02d[' % d_cbox] = '1' if d_credit else 'Off' d_cbox += 1 pdf.pattern = 'p1-t{}[' pdf[19] = str(f.line6ab) pdf[42] = str(getattr(f, 'line6c_lived_with', '')) pdf[43] = str(getattr(f, 'line6c_not_lived_with', '')) pdf[44] = str(getattr(f, 'line6c_other', '')) pdf[45] = str(f.line6d) n = 46 for line in income_lines + lines('22') + adjustments + lines('36 37'): pdf[n], pdf[n + 1] = zzstr(getattr(f, line)) if n == 82: n = 85 elif n == 103: if f.form_version <= u'2012': n = 108 else: n = 106 else: n += 2 pdf.pattern = '{}' pdf['Page1[0].p1-t84[0]'] = f.line21_text pdf.pattern = 'p2-t{}[0]' n = 1 for line in (lines([38] + range(40, 47)) + v.credits + lines('54 55') + v.other_taxes + lines('61') + v.payments + lines('72 73 74a') + lines(range(75, 78))): pdf[n], pdf[n + 1] = zzstr(getattr(f, line, zero)) # todo: remove default if f.form_version == u'2013': if n == 1: n = 4 elif n == 60: n = 65 elif n == 65: # TODO: more fields are wrong here; look for [1]'s n = 62 else: n += 2 elif f.form_version == u'2012': if n == 1: n = 4 elif n == 20: n = 24 elif n == 32: n = 37 elif n == 45 and pdf.pattern == 'p2-t{}[0]': pdf.pattern = 'p2-t{}[1]' elif n == 45 and pdf.pattern == 'p2-t{}[1]': pdf.pattern = 'p2-t{}[2]' elif n == 45 and pdf.pattern == 'p2-t{}[2]': pdf.pattern = 'p2-t{}[0]' n = 47 elif n == 49: n = 53 elif n == 69 and pdf.pattern == 'p2-t{}[0]': pdf.pattern = 'p2-t{}[1]' elif n == 69 and pdf.pattern == 'p2-t{}[1]': pdf.pattern = 'p2-t{}[0]' n = 71 elif n == 77: n = 105 else: n += 2
def fill_out(form, pdf): f = form pdf.load('us.f1040se--{}.pdf'.format(f.form_version)) pdf['p1-t1['] = [f.name, f.name] pdf['t2['] = [f.ssn, f.ssn] pdf['c1_01['] = yesno(f.is_1099_required) pdf['c1_03['] = yesno(f.is_1099_required) # Part I: Income or Loss From Rental Real Estate and Royalties subforms = [getattr(form.Part_I, letter) for letter in 'ABC'] pdf['Pg1Table1a'] = [s.address for s in subforms] pdf['Pg1Table1b'] = [str(s.type) for s in subforms] pdf['Table_Line2[0]'] = concat( [z(s.fair_rental_days), z(s.personal_use_days), z(s.qjv)] for s in subforms ) if f.form_version <= u'2012': pdf.pattern = 'Pg1Table2[0].Line{}[0]' elif f.form_version <= u'2013': pdf.pattern = 'Pg1Table2[0].#subform[1].Line{}[1]' else: pdf.pattern = 'Pg1Table2[0].#subform[1].Line{}[0]' for j in range(3, 5): attr = 'line{}'.format(j) pdf[j] = concat(zzstr(getattr(s, attr)) for s in subforms) pdf.pattern = 'Pg1Table3[0].Line{}[0]' for j in range(5, 23): attr = 'line{}'.format(j) pdf[j] = concat(zzstr(getattr(s, attr)) for s in subforms) pdf.pattern = 'Page1[0].p1-t{}[' pdf[505], pdf[504] = zzstr(f.line23a) pdf[176], pdf[177] = zzstr(f.line23b) pdf[508], pdf[509] = zzstr(f.line23c) pdf[510], pdf[511] = zzstr(f.line23d) pdf[512], pdf[513] = zzstr(f.line23e) pdf[507], pdf[506] = zzstr(f.line24) pdf[178], pdf[179] = zzstr(-f.line25) pdf[180], pdf[181] = zzstr(f.line26) # Part II: Income or Loss From Partnerships and S Corporations pdf.pattern = '{}' subforms = [getattr(f.Part_II, letter) for letter in 'ABCD'] pdf['Line28TableA-E[0]'] = concat( [s.name, s.type, onoff(s.is_foreign), s.ein, onoff(s.any_not_at_risk)] for s in subforms ) if f.form_version <= u'2012': key = 'Line28TableF-J[0]' else: key = 'Pt2PassiveNonPassive[0]' pdf[key] = concat( concat([zzstr(s.f), zzstr(s.g), zzstr(s.h), zzstr(s.i), zzstr(s.j)]) for s in subforms ) pdf['.p2-t57['], pdf['.p2-t58['] = zzstr(f.line29ag) pdf['.p2-t59['], pdf['.p2-t60['] = zzstr(f.line29aj) pdf['.p2-t61['], pdf['.p2-t62['] = zzstr(f.line29bf) pdf['.p2-t63['], pdf['.p2-t64['] = zzstr(f.line29bh) pdf['.p2-t65['], pdf['.p2-t66['] = zzstr(f.line29bi) pdf['.p2-t67['], pdf['.p2-t68['] = zzstr(f.line30) pdf['.p2-t69['], pdf['.p2-t70['] = zzstr(f.line31) pdf['.p2-t71['], pdf['.p2-t72['] = zzstr(f.line32) # TODO: Part III # TODO: Part IV pdf['.p2-t117['], pdf['.p2-t118['] = zzstr(f.line40) pdf['.p2-t119['], pdf['.p2-t120['] = zzstr(f.line41) pdf['.p2-t121['], pdf['.p2-t122['] = zzstr(f.line42) pdf['.p2-t123['], pdf['.p2-t124['] = zzstr(f.line43)
def pair(n, value, show_zero=False): pdf[n], pdf[n + 1] = nnstr(value) if show_zero else zzstr(value)
def fill_out_2013_and_before(form, pdf): f = form v = info_dict[f.form_version] pdf.pattern = 'p1-t{}[' pdf[4] = f.first_name pdf[5] = f.last_name pdf[6] = f.spouse_first_name pdf[7] = f.spouse_last_name pdf[8] = f.address pdf[9] = f.apartment_number pdf[10] = f.city_state_zip pdf['011'] = f.foreign_country pdf['012'] = f.foreign_province pdf['013'] = f.foreign_postal_code pdf[11] = f.ssn.replace('-', '') pdf[14] = f.spouse_ssn.replace('-', '') # TODO: checkboxes for the Presidential Election Campaign (or not?) pdf.pattern = '{}' pdf['c1_04['] = [(status if f.filing_status == status else u'Off') for status in filing_statuses] # TODO: text fields that go along with filing statuses pdf['c1_05[0]'] = '1' if f.line6a else 'Off' pdf['c1_06[0]'] = '1' if f.line6b else 'Off' pdf.pattern = 'p1-t{}[' pdf[19] = str(f.line6ab) # TODO: dependents pdf[45] = str(f.line6d) n = 46 for line in income_lines + lines('22') + adjustments + lines('36 37'): pdf[n], pdf[n+1] = zzstr(getattr(f, line)) if n == 82: n = 85 elif n == 103: if f.form_version <= u'2012': n = 108 else: n = 106 else: n += 2 pdf.pattern = '{}' pdf['Page1[0].p1-t84[0]'] = f.line21_text pdf.pattern = 'p2-t{}[0]' n = 1 for line in (lines([38] + range(40, 47)) + v.credits + lines('54 55') + v.other_taxes + lines('61') + v.payments + lines('72 73 74a') + lines(range(75, 78))): pdf[n], pdf[n+1] = zzstr(getattr(f, line, zero)) # todo: remove default if f.form_version == u'2013': if n == 1: n = 4 elif n == 60: n = 65 elif n == 65: # TODO: more fields are wrong here; look for [1]'s n = 62 else: n += 2 elif f.form_version == u'2012': if n == 1: n = 4 elif n == 20: n = 24 elif n == 32: n = 37 elif n == 45 and pdf.pattern == 'p2-t{}[0]': pdf.pattern = 'p2-t{}[1]' elif n == 45 and pdf.pattern == 'p2-t{}[1]': pdf.pattern = 'p2-t{}[2]' elif n == 45 and pdf.pattern == 'p2-t{}[2]': pdf.pattern = 'p2-t{}[0]' n = 47 elif n == 49: n = 53 elif n == 69 and pdf.pattern == 'p2-t{}[0]': pdf.pattern = 'p2-t{}[1]' elif n == 69 and pdf.pattern == 'p2-t{}[1]': pdf.pattern = 'p2-t{}[0]' n = 71 elif n == 77: n = 105 else: n += 2
def split(i, value, j=None): if j is None: j = i + 1 pdf[i], pdf[j] = zzstr(value)
def fill_out(form, pdf): pdf.load('us.f1040--{}.pdf'.format(form.form_version)) if form.form_version < u'2014': return fill_out_2013_and_before(form, pdf) f = form #v = info_dict[f.form_version] pdf.pattern = 'f1_{:02}[0]' pdf[4] = f.first_name pdf[5] = f.last_name pdf[6] = f.ssn.replace('-', '') pdf[7] = f.spouse_first_name pdf[8] = f.spouse_last_name pdf[9] = f.spouse_ssn.replace('-', '') pdf.pattern = 'f1-{:02}[0]' pdf[10] = f.address pdf[11] = f.apartment_number pdf[12] = f.city_state_zip pdf[13] = f.foreign_country pdf[14] = f.foreign_province pdf[15] = f.foreign_postal_code pdf.pattern = '{}' pdf['Lines1-3[0].c1_03[0]'] = ('S' if f.filing_status == 'S' else 'Off') pdf['Lines1-3[0].c1_03[1]'] = ('MJ' if f.filing_status == 'MJ' else 'Off') pdf['Lines1-3[0].c1_03[2]'] = ('MS' if f.filing_status == 'MS' else 'Off') pdf['Page1[0].c1_03[0]'] = ('HoH' if f.filing_status == 'HoH' else 'Off') pdf['Page1[0].c1_03[1]'] = ('QW' if f.filing_status == 'QW' else 'Off') if f.filing_status == 'MS': pdf['Lines1-3[0].f1-16[0]'] = f.spouse_ssn pdf['c1_04[0]'] = ('1' if f.line6a else 'Off') pdf['c1_05[0]'] = ('1' if f.line6b else 'Off') # TODO: Dependents pdf.pattern = 'Page1[0].f1_{:02}[0]' pdf[30] = f.line6ab pdf[34] = f.line6d i = 35 for n in ('7 8a 8b 9a 9b 10 11 12 13 14 15a 15b 16a 16b 17 18 19 ' '20a 20b 21 22 23 24 25 26 27 28 29 ' '30 31a 32 33 34 35 36 37').split(): pdf[i], pdf[i+1] = zzstr(f['line', n]) if n in ('21', '31a'): i += 3 else: i += 2 pdf.pattern = '{}' pdf['f1-_51[0]'] = zzstr(f.line13)[0] pdf.pattern = '.f2_{:02}[0]' i = 1 for n in ([38] + range(40, 60) + '60a 60b'.split() + range(61, 66) + '66a 66b'.split() + range(67, 76) + '76a 77 78 79'.split()): pdf[i], pdf[i+1] = zzstr(f['line', n]) if n == '76a': i += 4 elif n in (38, 43, 53, 61, 72): i += 3 else: i += 2
def put(n, value): sa, sb = zzstr(value) pdf['-t{}['.format(n + 0)] = sa pdf['-t{}['.format(n + 1)] = sb
def fill_out(form, pdf): f = form pdf.load('us.f940--{}.pdf'.format(f.form_version)) pdf.pages = 1, 2 if form.form_version == '2013': return _old_2013_fill_out(f, pdf) if form.form_version == '2012': return _old_2012_fill_out(f, pdf) if form.form_version == '2014': pdf.pattern = '.TypeReturn[0].c1_{:02}[0]' else: pdf.pattern = '.TypeReturn[0].c1_{}[0]' pdf[1] = 'Report1' if f.type == 'a' else 'Off' pdf[2] = 'Report2' if f.type == 'b' else 'Off' pdf[3] = 'Report3' if f.type == 'c' else 'Off' pdf[4] = 'Report4' if f.type == 'd' else 'Off' if form.form_version == '2014': pdf.pattern = '.c1_{:02}[0]' else: pdf.pattern = '.c1_{}[0]' pdf[5] = '1' if f.line1b else 'Off' pdf[6] = '1' if f.line2 else 'Off' pdf[7] = '1' if f.line4a else 'Off' pdf[8] = '1' if f.line4b else 'Off' pdf[9] = '1' if f.line4c else 'Off' pdf[10] = '1' if f.line4d else 'Off' pdf[11] = '1' if f.line4e else 'Off' if form.form_version == '2014': pdf.pattern = '.f1_{:02}[0]' else: pdf.pattern = '.f1_{}[0]' for n, digit in enumerate(f.ein.replace('-', ''), 1): pdf[n] = digit pdf[10] = f.name pdf[11] = f.trade_name pdf[12] = f.address pdf[13] = f.city pdf[14] = f.state pdf[15] = f.zip # TODO: foreign address # pdf[23] = '1' if f.line4e else 'Off' # delete? pdf[19] = f.line1a[0] pdf[20] = f.line1a[1] pdf[21], pdf[22] = nnstr(f.line3) pdf[23], pdf[24] = zzstr(f.line4) pdf[25], pdf[26] = zzstr(f.line5) pdf[27], pdf[28] = nnstr(f.line6) pdf[29], pdf[30] = nnstr(f.line7) pdf[31], pdf[32] = nnstr(f.line8) pdf[33], pdf[34] = nnstr(f.line9) pdf[35], pdf[36] = zzstr(f.line10) pdf[37], pdf[38] = zzstr(f.line11) pdf[39], pdf[40] = nnstr(f.line12) pdf[41], pdf[42] = nnstr(f.line13) pdf[43], pdf[44] = zzstr(f.line14) pdf[45], pdf[46] = zzstr(f.line15) pdf.pattern = '.f2_{:02}[0]' pdf[1] = f.name pdf[2] = f.ein # TODO: Part 5 # TODO: Part 6 designee (but "No" checkbox is implemented below) pdf[16] = f.sign_name pdf[17] = f.sign_title pdf[18] = f.sign_phone pdf.pattern = '{}' if form.form_version == '2014': pdf['.c2_01[1]'] = '2' if (not f.part6) else 'Off' else: pdf['.c2_1[0]'] = 'Yes' if f.part6 else 'Off' pdf['.c2_1[1]'] = 'Off' if f.part6 else 'No'
def fill_out_2013_and_earlier(form, pdf): f = form pdf.load('us.f941--{}.pdf'.format(f.year)) pdf.pages = 1, 2 page = 1 def name(n): return 'f{}_{:02}_0_[0]'.format(page, n) def pair(n, value): pdf[name(n)], pdf[name(n + 1)] = zzstr(value) for i in range(9): pdf[name(i + 1)] = f.ein.replace('-', '')[i : i+1] pdf[name(16)] = str(f.line1 or '') pdf[name(10)] = f.name pdf[name(11)] = f.trade_name pdf[name(12)] = f.address pdf[name(13)] = f.city pdf[name(14)] = f.state pdf[name(15)] = f.zip pdf['c1_1_0_[0]'] = 'Report1' if f.quarter == 1 else 'Off' pdf['c1_1_0_[1]'] = 'Report2' if f.quarter == 2 else 'Off' pdf['c1_1_0_[2]'] = 'Report3' if f.quarter == 3 else 'Off' pdf['c1_1_0_[3]'] = 'Report4' if f.quarter == 4 else 'Off' pair(17, f.line2) pair(19, f.line3) pdf['c1_5_0_[0]'] = '1' if f.line4 else 'Off' pair(21, f.line5a1) pair(23, f.line5a2) pair(25, f.line5b1) pair(27, f.line5b2) pair(29, f.line5c1) pair(31, f.line5c2) pair(33, f.line5d) if f.form_version < u'2013': pair(60, f.line5e) dollars, cents = zzstr(f.line6) pdf[name(105)] = dollars pdf[name(36)] = cents pair(37, f.line7) pair(39, f.line8) pair(41, f.line9) pair(54, f.line10) pair(56, f.line11) pair(45, f.line12a) pdf[name(47)] = str(f.line12b or '') pair(43, f.line13) pair(58, f.line14) pair(64, f.line15) page = 2 pdf[name(75) if f.year < 2013 else 'd2_75_0_[0]'] = f.name pdf[name(14)] = f.ein pdf['c2_01_0_[0]'] = 'Chck1' if f.line16 == 'a' else 'Off' pdf['c2_01_0_[1]'] = 'Chck2' if f.line16 == 'b' else 'Off' pdf['c2_01_0_[2]'] = 'Chck3' if f.line16 == 'c' else 'Off' pdf.pattern = '.f2_{:02}_0_[0]' pdf[3], pdf[4] = zzstr(f.line16_month1) pdf[5], pdf[6] = zzstr(f.line16_month2) pdf[7], pdf[8] = zzstr(f.line16_month3) pdf[9], pdf[10] = zzstr(f.line16_total) # TODO: support Part 3 # TODO: allow "yes" and further information for Part 4 pdf.pattern = '{}' pdf['c2_06_0_[0]'] = 'Yes' if f.Part_4 else 'Off' pdf['c2_06_0_[1]'] = 'Off' if f.Part_4 else 'No' pdf[name(44)] = f.signer_name pdf[name(66)] = f.signer_title pdf[name(48)] = f.signer_phone
def fill_out(form, pdf): f = form pdf.load("us.f1040se--{}.pdf".format(f.form_version)) pdf["p1-t1["] = [f.name, f.name] pdf["t2["] = [f.ssn, f.ssn] pdf["c1_01["] = yesno(f.is_1099_required) pdf["c1_03["] = yesno(f.is_1099_required) # Part I: Income or Loss From Rental Real Estate and Royalties subforms = [getattr(form.Part_I, letter) for letter in "ABC"] pdf["Pg1Table1a"] = [s.address for s in subforms] pdf["Pg1Table1b"] = [str(s.type) for s in subforms] pdf["Table_Line2[0]"] = concat([z(s.fair_rental_days), z(s.personal_use_days), z(s.qjv)] for s in subforms) if f.form_version <= u"2012": pdf.pattern = "Pg1Table2[0].Line{}[0]" elif f.form_version <= u"2013": pdf.pattern = "Pg1Table2[0].#subform[1].Line{}[1]" else: pdf.pattern = "Pg1Table2[0].#subform[1].Line{}[0]" for j in range(3, 5): attr = "line{}".format(j) pdf[j] = concat(zzstr(getattr(s, attr)) for s in subforms) pdf.pattern = "Pg1Table3[0].Line{}[0]" for j in range(5, 23): attr = "line{}".format(j) pdf[j] = concat(zzstr(getattr(s, attr)) for s in subforms) pdf.pattern = "Page1[0].p1-t{}[" pdf[505], pdf[504] = zzstr(f.line23a) pdf[176], pdf[177] = zzstr(f.line23b) pdf[508], pdf[509] = zzstr(f.line23c) pdf[510], pdf[511] = zzstr(f.line23d) pdf[512], pdf[513] = zzstr(f.line23e) pdf[507], pdf[506] = zzstr(f.line24) pdf[178], pdf[179] = zzstr(-f.line25) pdf[180], pdf[181] = zzstr(f.line26) # Part II: Income or Loss From Partnerships and S Corporations pdf.pattern = "{}" subforms = [getattr(f.Part_II, letter) for letter in "ABCD"] pdf["Line28TableA-E[0]"] = concat( [s.name, s.type, onoff(s.is_foreign), s.ein, onoff(s.any_not_at_risk)] for s in subforms ) if f.form_version <= u"2012": key = "Line28TableF-J[0]" else: key = "Pt2PassiveNonPassive[0]" pdf[key] = concat(concat([zzstr(s.f), zzstr(s.g), zzstr(s.h), zzstr(s.i), zzstr(s.j)]) for s in subforms) pdf[".p2-t57["], pdf[".p2-t58["] = zzstr(f.line29ag) pdf[".p2-t59["], pdf[".p2-t60["] = zzstr(f.line29aj) pdf[".p2-t61["], pdf[".p2-t62["] = zzstr(f.line29bf) pdf[".p2-t63["], pdf[".p2-t64["] = zzstr(f.line29bh) pdf[".p2-t65["], pdf[".p2-t66["] = zzstr(f.line29bi) pdf[".p2-t67["], pdf[".p2-t68["] = zzstr(f.line30) pdf[".p2-t69["], pdf[".p2-t70["] = zzstr(f.line31) pdf[".p2-t71["], pdf[".p2-t72["] = zzstr(f.line32) # TODO: Part III # TODO: Part IV pdf[".p2-t117["], pdf[".p2-t118["] = zzstr(f.line40) pdf[".p2-t119["], pdf[".p2-t120["] = zzstr(f.line41) pdf[".p2-t121["], pdf[".p2-t122["] = zzstr(f.line42) pdf[".p2-t123["], pdf[".p2-t124["] = zzstr(f.line43)
def fill_out_2013(form, pdf): f = form pdf.pattern = 'f1_{:03}[' pdf[1] = f.name pdf[2] = f.ssn pdf[3] = f.A pdf[4] = f.B pdf[5] = f.C pdf[6] = f.D pdf[7] = f.E_text1 pdf[8] = f.E_text2 pdf[9] = f.F_text pdf.pattern = '{}' pdf['.c1_01['] = '0' if f.F == 'cash' else 'Off' pdf['.c1_02['] = '0' if f.F == 'accrual' else 'Off' pdf['.c1_03['] = '0' if f.F == 'other' else 'Off' pdf['.c1_04[0]'] = 'Yes' if f.G else 'Off' pdf['.c1_04[1]'] = 'Off' if f.G else 'No' pdf['.c1_05[0]'] = '1' if f.H else 'Off' pdf['.c1_06[0]'] = 'Yes' if f.I else 'Off' pdf['.c1_06[1]'] = 'Off' if f.I else 'No' pdf['.c1_07[0]'] = 'Yes' if f.J else 'Off' pdf['.c1_07[1]'] = 'Off' if f.J else 'No' # Part I: Income pdf['.c1_08_0_['] = '1' if f.line1_box else 'Off' pdf.pattern = 'f1_{:03}[' pdf[10], pdf[11] = zzstr(f.line1) n = 18 for i in range(2, 8): pdf[n], pdf[n + 1] = zzstr(getattr(f, 'line{}'.format(i))) n += 2 # Part II: Expenses n = 30 for attr in _expense_lines(): pdf[n], pdf[n + 1] = zzstr(getattr(f, attr)) if n == 74: n = 84 else: n += 2 pdf[76], pdf[77] = zzstr(f.line28) pdf[78], pdf[79] = zzstr(f.line29) pdf[80], pdf[81] = zzstr(f.line30) pdf[82], pdf[83] = zzstr(f.line31) pdf.pattern = '{}' if f.line31 < zero: pdf['.c1_08['] = '1' if f.line32 == 'a' else 'Off' pdf['.c1_09['] = '1' if f.line32 == 'b' else 'Off' # Part III: Cost of Goods Sold pdf['.c2_01['] = '1' if f.line33 == 'a' else 'Off' pdf['.c2_02['] = '1' if f.line33 == 'b' else 'Off' pdf['.c2_03['] = '1' if f.line33 == 'c' else 'Off' pdf['.c2_04[0]'] = 'Yes' if f.line34 else 'Off' pdf['.c2_04[1]'] = 'Off' if f.line34 else 'No' pdf.pattern = 'f2_{:03}[' n = 1 for i in range(35, 43): pdf[n], pdf[n + 1] = zzstr(getattr(f, 'line{}'.format(i))) n += 2 # Part IV: Information on Your Vehicle # TODO # Part V: Other Expenses n = 23 for text, value in f.Part_V: pdf[n] = text pdf[n + 1], pdf[n + 2] = zzstr(value) n += 3 pdf[50], pdf[51] = zzstr(f.line48)
def put(n, value): sa, sb = zzstr(value) pdf['-t{}['.format(n+0)] = sa pdf['-t{}['.format(n+1)] = sb
def fill_out(form, pdf): f = form pdf.load('us.f1040sc--{}.pdf'.format(f.form_version)) if f.form_version < u'2014': return fill_out_2013(form, pdf) pdf.pattern = 'f1_{:03}[' pdf[1] = f.name pdf[2] = f.ssn pdf[3] = f.A pdf[4] = f.B pdf[5] = f.C pdf[6] = f.D pdf[7] = f.E_text1 pdf[8] = f.E_text2 pdf[9] = f.F_text pdf.pattern = '{}' pdf['.c1_01[0]'] = '1' if f.F == 'cash' else 'Off' pdf['.c1_01[1]'] = '2' if f.F == 'accrual' else 'Off' pdf['.c1_01[2]'] = '3' if f.F == 'other' else 'Off' pdf['.c1_02[0]'] = 'Yes' if f.G else 'Off' pdf['.c1_02[1]'] = 'Off' if f.G else 'No' pdf['.c1_03[0]'] = '1' if f.H else 'Off' pdf['.c1_04[0]'] = 'Yes' if f.I else 'Off' pdf['.c1_04[1]'] = 'Off' if f.I else 'No' pdf['.c1_05[0]'] = 'Yes' if f.J else 'Off' pdf['.c1_05[1]'] = 'Off' if f.J else 'No' # Part I: Income pdf['.c1_06[0]'] = '1' if f.line1_box else 'Off' pdf.pattern = 'f1_{:03}[' pdf[10], pdf[11] = zzstr(f.line1) n = 12 for i in range(2, 8): pdf[n], pdf[n + 1] = zzstr(getattr(f, 'line{}'.format(i))) n += 2 # Part II: Expenses n = 24 for attr in _expense_lines(30): pdf[n], pdf[n + 1] = zzstr(getattr(f, attr)) # if n == 74: # n = 84 # else: n += 2 pdf[78], pdf[79] = zzstr(f.line30) pdf[80], pdf[81] = zzstr(f.line31) pdf.pattern = '{}' if f.line31 < zero: pdf['.c1_08['] = '1' if f.line32 == 'a' else 'Off' pdf['.c1_09['] = '1' if f.line32 == 'b' else 'Off'
def fill_out_2013(form, pdf): f = form pdf.pattern = 'f1_{:03}[' pdf[1] = f.name pdf[2] = f.ssn pdf[3] = f.A pdf[4] = f.B pdf[5] = f.C pdf[6] = f.D pdf[7] = f.E_text1 pdf[8] = f.E_text2 pdf[9] = f.F_text pdf.pattern = '{}' pdf['.c1_01['] = '0' if f.F == 'cash' else 'Off' pdf['.c1_02['] = '0' if f.F == 'accrual' else 'Off' pdf['.c1_03['] = '0' if f.F == 'other' else 'Off' pdf['.c1_04[0]'] = 'Yes' if f.G else 'Off' pdf['.c1_04[1]'] = 'Off' if f.G else 'No' pdf['.c1_05[0]'] = '1' if f.H else 'Off' pdf['.c1_06[0]'] = 'Yes' if f.I else 'Off' pdf['.c1_06[1]'] = 'Off' if f.I else 'No' pdf['.c1_07[0]'] = 'Yes' if f.J else 'Off' pdf['.c1_07[1]'] = 'Off' if f.J else 'No' # Part I: Income pdf['.c1_08_0_['] = '1' if f.line1_box else 'Off' pdf.pattern = 'f1_{:03}[' pdf[10], pdf[11] = zzstr(f.line1) n = 18 for i in range(2, 8): pdf[n], pdf[n+1] = zzstr(getattr(f, 'line{}'.format(i))) n += 2 # Part II: Expenses n = 30 for attr in _expense_lines(): pdf[n], pdf[n+1] = zzstr(getattr(f, attr)) if n == 74: n = 84 else: n += 2 pdf[76], pdf[77] = zzstr(f.line28) pdf[78], pdf[79] = zzstr(f.line29) pdf[80], pdf[81] = zzstr(f.line30) pdf[82], pdf[83] = zzstr(f.line31) pdf.pattern = '{}' if f.line31 < zero: pdf['.c1_08['] = '1' if f.line32 == 'a' else 'Off' pdf['.c1_09['] = '1' if f.line32 == 'b' else 'Off' # Part III: Cost of Goods Sold pdf['.c2_01['] = '1' if f.line33 == 'a' else 'Off' pdf['.c2_02['] = '1' if f.line33 == 'b' else 'Off' pdf['.c2_03['] = '1' if f.line33 == 'c' else 'Off' pdf['.c2_04[0]'] = 'Yes' if f.line34 else 'Off' pdf['.c2_04[1]'] = 'Off' if f.line34 else 'No' pdf.pattern = 'f2_{:03}[' n = 1 for i in range(35, 43): pdf[n], pdf[n+1] = zzstr(getattr(f, 'line{}'.format(i))) n += 2 # Part IV: Information on Your Vehicle # TODO # Part V: Other Expenses n = 23 for text, value in f.Part_V: pdf[n] = text pdf[n+1], pdf[n+2] = zzstr(value) n += 3 pdf[50], pdf[51] = zzstr(f.line48)
def fill_out(form, pdf): f = form pdf.load('us.f940--{}.pdf'.format(f.form_version)) pdf.pages = 1, 2 if form.form_version == '2013': return _old_2013_fill_out(f, pdf) if form.form_version == '2012': return _old_2012_fill_out(f, pdf) pdf.pattern = '.TypeReturn[0].c1_{:02}[0]' pdf[1] = 'Report1' if f.type == 'a' else 'Off' pdf[2] = 'Report2' if f.type == 'b' else 'Off' pdf[3] = 'Report3' if f.type == 'c' else 'Off' pdf[4] = 'Report4' if f.type == 'd' else 'Off' pdf.pattern = '.c1_{:02}[0]' pdf[5] = '1' if f.line1b else 'Off' pdf[6] = '1' if f.line2 else 'Off' pdf[7] = '1' if f.line4a else 'Off' pdf[8] = '1' if f.line4b else 'Off' pdf[9] = '1' if f.line4c else 'Off' pdf[10] = '1' if f.line4d else 'Off' pdf[11] = '1' if f.line4e else 'Off' pdf.pattern = '.f1_{:02}[0]' for n, digit in enumerate(f.ein.replace('-', ''), 1): pdf[n] = digit pdf[10] = f.name pdf[11] = f.trade_name pdf[12] = f.address pdf[13] = f.city pdf[14] = f.state pdf[15] = f.zip # TODO: foreign address # pdf[23] = '1' if f.line4e else 'Off' # delete? pdf[19] = f.line1a[0] pdf[20] = f.line1a[1] pdf[21], pdf[22] = zzstr(f.line3) pdf[23], pdf[24] = zzstr(f.line4) pdf[25], pdf[26] = zzstr(f.line5) pdf[27], pdf[28] = zzstr(f.line6) pdf[29], pdf[30] = zzstr(f.line7) pdf[31], pdf[32] = zzstr(f.line8) pdf[33], pdf[34] = zzstr(f.line9) pdf[35], pdf[36] = zzstr(f.line10) pdf[37], pdf[38] = zzstr(f.line11) pdf[39], pdf[40] = zzstr(f.line12) pdf[41], pdf[42] = zzstr(f.line13) pdf[43], pdf[44] = zzstr(f.line14) pdf[45], pdf[46] = zzstr(f.line15) pdf.pattern = '.f2_{:02}[0]' pdf[1] = f.name pdf[2] = f.ein # TODO: Part 5 # TODO: Part 6 designee (but "No" checkbox is implemented below) pdf[16] = f.sign_name pdf[17] = f.sign_title pdf[18] = f.sign_phone pdf.pattern = '{}' pdf['.c2_01[1]'] = '2' if (not f.part6) else 'Off'
def fill_out(form, pdf): f = form pdf.load('us.f1040sc--{}.pdf'.format(f.form_version)) if f.form_version < u'2014': return fill_out_2013(form, pdf) pdf.pattern = 'f1_{:03}[' pdf[1] = f.name pdf[2] = f.ssn pdf[3] = f.A pdf[4] = f.B pdf[5] = f.C pdf[6] = f.D pdf[7] = f.E_text1 pdf[8] = f.E_text2 pdf[9] = f.F_text pdf.pattern = '{}' pdf['.c1_01[0]'] = '1' if f.F == 'cash' else 'Off' pdf['.c1_01[1]'] = '2' if f.F == 'accrual' else 'Off' pdf['.c1_01[2]'] = '3' if f.F == 'other' else 'Off' pdf['.c1_02[0]'] = 'Yes' if f.G else 'Off' pdf['.c1_02[1]'] = 'Off' if f.G else 'No' pdf['.c1_03[0]'] = '1' if f.H else 'Off' pdf['.c1_04[0]'] = 'Yes' if f.I else 'Off' pdf['.c1_04[1]'] = 'Off' if f.I else 'No' pdf['.c1_05[0]'] = 'Yes' if f.J else 'Off' pdf['.c1_05[1]'] = 'Off' if f.J else 'No' # Part I: Income pdf['.c1_06[0]'] = '1' if f.line1_box else 'Off' pdf.pattern = 'f1_{:03}[' pdf[10], pdf[11] = zzstr(f.line1) n = 12 for i in range(2, 8): pdf[n], pdf[n+1] = zzstr(getattr(f, 'line{}'.format(i))) n += 2 # Part II: Expenses n = 24 for attr in _expense_lines(30): pdf[n], pdf[n+1] = zzstr(getattr(f, attr)) # if n == 74: # n = 84 # else: n += 2 pdf[78], pdf[79] = zzstr(f.line30) pdf[80], pdf[81] = zzstr(f.line31) pdf.pattern = '{}' if f.line31 < zero: pdf['.c1_08['] = '1' if f.line32 == 'a' else 'Off' pdf['.c1_09['] = '1' if f.line32 == 'b' else 'Off'
def pair(n, value): pdf[n], pdf[n + 1] = zzstr(value)
def pair(n, value): pdf[name(n)], pdf[name(n + 1)] = zzstr(value)
def fill_out_2013_and_earlier(form, pdf): f = form pdf.load('us.f941--{}.pdf'.format(f.year)) pdf.pages = 1, 2 page = 1 def name(n): return 'f{}_{:02}_0_[0]'.format(page, n) def pair(n, value): pdf[name(n)], pdf[name(n + 1)] = zzstr(value) for i in range(9): pdf[name(i + 1)] = f.ein.replace('-', '')[i:i + 1] pdf[name(16)] = str(f.line1) pdf[name(10)] = f.name pdf[name(11)] = f.trade_name pdf[name(12)] = f.address pdf[name(13)] = f.city pdf[name(14)] = f.state pdf[name(15)] = f.zip pdf['c1_1_0_[0]'] = 'Report1' if f.quarter == 1 else 'Off' pdf['c1_1_0_[1]'] = 'Report2' if f.quarter == 2 else 'Off' pdf['c1_1_0_[2]'] = 'Report3' if f.quarter == 3 else 'Off' pdf['c1_1_0_[3]'] = 'Report4' if f.quarter == 4 else 'Off' pair(17, f.line2) pair(19, f.line3) pdf['c1_5_0_[0]'] = '1' if f.line4 else 'Off' pair(21, f.line5a1) pair(23, f.line5a2) pair(25, f.line5b1) pair(27, f.line5b2) pair(29, f.line5c1) pair(31, f.line5c2) pair(33, f.line5d) if f.form_version < u'2013': pair(60, f.line5e) dollars, cents = zzstr(f.line6) pdf[name(105)] = dollars pdf[name(36)] = cents pair(37, f.line7) pair(39, f.line8) pair(41, f.line9) pair(54, f.line10) pair(56, f.line11) pair(45, f.line12a) pdf[name(47)] = str(f.line12b or '') pair(43, f.line13) pair(58, f.line14) pair(64, f.line15) page = 2 pdf[name(75) if f.year < 2013 else 'd2_75_0_[0]'] = f.name pdf[name(14)] = f.ein pdf['c2_01_0_[0]'] = 'Chck1' if f.line16 == 'a' else 'Off' pdf['c2_01_0_[1]'] = 'Chck2' if f.line16 == 'b' else 'Off' pdf['c2_01_0_[2]'] = 'Chck3' if f.line16 == 'c' else 'Off' pdf.pattern = '.f2_{:02}_0_[0]' pdf[3], pdf[4] = zzstr(f.line16_month1) pdf[5], pdf[6] = zzstr(f.line16_month2) pdf[7], pdf[8] = zzstr(f.line16_month3) pdf[9], pdf[10] = zzstr(f.line16_total) # TODO: support Part 3 # TODO: allow "yes" and further information for Part 4 pdf.pattern = '{}' pdf['c2_06_0_[0]'] = 'Yes' if f.Part_4 else 'Off' pdf['c2_06_0_[1]'] = 'Off' if f.Part_4 else 'No' pdf[name(44)] = f.signer_name pdf[name(66)] = f.signer_title pdf[name(48)] = f.signer_phone
def fill_out(form, pdf): f = form pdf.load("us.f1040sc--{}.pdf".format(f.form_version)) pdf.pattern = "f1_{:03}[" pdf[1] = f.name pdf[2] = f.ssn pdf[3] = f.A pdf[4] = f.B pdf[5] = f.C pdf[6] = f.D pdf[7] = f.E_text1 pdf[8] = f.E_text2 pdf[9] = f.F_text pdf.pattern = "{}" pdf[".c1_01["] = "0" if f.F == "cash" else "Off" pdf[".c1_02["] = "0" if f.F == "accrual" else "Off" pdf[".c1_03["] = "0" if f.F == "other" else "Off" pdf[".c1_04[0]"] = "Yes" if f.G else "Off" pdf[".c1_04[1]"] = "Off" if f.G else "No" pdf[".c1_05[0]"] = "1" if f.H else "Off" pdf[".c1_06[0]"] = "Yes" if f.I else "Off" pdf[".c1_06[1]"] = "Off" if f.I else "No" pdf[".c1_07[0]"] = "Yes" if f.J else "Off" pdf[".c1_07[1]"] = "Off" if f.J else "No" # Part I: Income pdf[".c1_08_0_["] = "1" if f.line1_box else "Off" pdf.pattern = "f1_{:03}[" pdf[10], pdf[11] = zzstr(f.line1) n = 18 for i in range(2, 8): pdf[n], pdf[n + 1] = zzstr(getattr(f, "line{}".format(i))) n += 2 # Part II: Expenses n = 30 for attr in _expense_lines(): pdf[n], pdf[n + 1] = zzstr(getattr(f, attr)) if n == 74: n = 84 else: n += 2 pdf[76], pdf[77] = zzstr(f.line28) pdf[78], pdf[79] = zzstr(f.line29) pdf[80], pdf[81] = zzstr(f.line30) pdf[82], pdf[83] = zzstr(f.line31) pdf.pattern = "{}" if f.line31 < zero: pdf[".c1_08["] = "1" if f.line32 == "a" else "Off" pdf[".c1_09["] = "1" if f.line32 == "b" else "Off" # Part III: Cost of Goods Sold pdf[".c2_01["] = "1" if f.line33 == "a" else "Off" pdf[".c2_02["] = "1" if f.line33 == "b" else "Off" pdf[".c2_03["] = "1" if f.line33 == "c" else "Off" pdf[".c2_04[0]"] = "Yes" if f.line34 else "Off" pdf[".c2_04[1]"] = "Off" if f.line34 else "No" pdf.pattern = "f2_{:03}[" n = 1 for i in range(35, 43): pdf[n], pdf[n + 1] = zzstr(getattr(f, "line{}".format(i))) n += 2 # Part IV: Information on Your Vehicle # TODO # Part V: Other Expenses n = 23 for text, value in f.Part_V: pdf[n] = text pdf[n + 1], pdf[n + 2] = zzstr(value) n += 3 pdf[50], pdf[51] = zzstr(f.line48)
def fill_out(form, pdf): f = form pdf.load("us.f940--{}.pdf".format(f.form_version)) pdf.pages = 1, 2 if form.form_version == "2012": return _old_2012_fill_out(f, pdf) pdf.pattern = "topmostSubform[0].Page1[0].EntityArea[0].Text3{}[0]" for letter, digit in zip(" abcdefgh", f.ein.replace("-", "")): pdf[letter.strip()] = digit pdf.pattern = "topmostSubform[0].Page1[0].EntityArea[0].Text{}[0]" pdf[5] = f.name pdf[6] = f.trade_name pdf[7] = f.address pdf[8] = f.city pdf[9] = f.state pdf[10] = f.zip # TODO: Foreign address pdf.pattern = "topmostSubform[0].Page1[0].#subform[{}].Check_Box{}[0]" pdf[5, 23] = "1" if f.line4a else "Off" pdf[5, 24] = "1" if f.line4b else "Off" pdf[6, 25] = "1" if f.line4c else "Off" pdf[6, 26] = "1" if f.line4d else "Off" pdf.pattern = "topmostSubform[0].Page1[0].Check_Box{}[0]" pdf[23] = "1" if f.line4e else "Off" pdf.pattern = "topmostSubform[0].Page1[0].Text{}[0]" pdf[16] = f.line1a[0] pdf[17] = f.line1a[1] # TODO: check marks on lines 1b and 2 pdf["21"], pdf["21a"] = zzstr(f.line3) pdf["22"], pdf["22a"] = zzstr(f.line4) # TODO: check boxes on line 4 pdf["28"], pdf["28a"] = zzstr(f.line5) pdf["29"], pdf["29a"] = zzstr(f.line6) pdf["500"], pdf["500a"] = zzstr(f.line7) pdf["31"], pdf["31a"] = zzstr(f.line8) pdf["32"], pdf["32a"] = zzstr(f.line9) pdf["33"], pdf["33a"] = zzstr(f.line10) pdf["34"], pdf["34a"] = zzstr(f.line11) pdf["35"], pdf["35a"] = zzstr(f.line12) pdf["36"], pdf["36a"] = zzstr(f.line13) pdf["37"], pdf["37a"] = zzstr(f.line14) pdf["38"], pdf["38a"] = zzstr(f.line15) pdf.pattern = "topmostSubform[0].Page2[0].{}" pdf["Text41[0]"] = f.name pdf["Text42[0]"] = f.ein # TODO: Part 5 # TODO: Part 6 designee pdf["p2-cb1[1]"] = "Off" if f.part6 else "2" pdf.pattern = "topmostSubform[0].Page2[0].Text{}[0]" pdf["59"] = f.sign_name pdf["61"] = f.sign_title pdf["64"] = f.sign_phone