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_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)) 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 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 if f.form_version in (u'2018', u'2019'): return fill_out_2019(form, pdf) if f.form_version == u'2017': return fill_out_2017(form, pdf) if f.form_version < u'2017': return old_fill_out(form, pdf) pdf.load('us.f1120ssk--{}.pdf'.format(f.form_version)) pdf.pages = 1, # TODO: these two codes might no longer be correct pdf['c1_01_0_[0]'] = 'Yes' if f.final else 'Off' pdf['c1_02_0_[0]'] = 'Yes' if f.amended else 'Off' # TODO: specific dates instead of calendar year # pdf.pattern = 'p1-t{}[0]' # pdf[1] = f.beginning_date # pdf[2] = f.ending_date # pdf[3] = f.ending_year pdf.pattern = 'f1_{:02d}[0]' n = 6 for letter in 'ABCDEF': pdf[n] = f[letter] n += 1 n += 4 # TODO: G and H for number in first_nine_lines: pdf[n] = zstr(f['line', number]) n += 1 pdf[27] = zstr(f.line11) pdf.pattern = '{}' def write_lines(line_number, n): lines = f['line', line_number] for line in lines: pdf['f1_{}[0]'.format(n)] = line.code n += 1 pdf['f1_{}[0]'.format(n)] = zstr(line.amount) n += 1 write_lines(10, 24) #write_lines(11, 28) write_lines(12, 35) write_lines(13, 51) write_lines(14, 61) write_lines(15, 75) write_lines(16, 85) write_lines(17, 95)
def fill_out(form, pdf): f = form if f.form_version == u'2017': return fill_out_2017(form, pdf) if f.form_version < u'2017': return old_fill_out(form, pdf) pdf.load('us.f1120ssk--{}.pdf'.format(f.form_version)) pdf.pages = 1, # TODO: these two codes might no longer be correct pdf['c1_01_0_[0]'] = 'Yes' if f.final else 'Off' pdf['c1_02_0_[0]'] = 'Yes' if f.amended else 'Off' # TODO: specific dates instead of calendar year # pdf.pattern = 'p1-t{}[0]' # pdf[1] = f.beginning_date # pdf[2] = f.ending_date # pdf[3] = f.ending_year pdf.pattern = 'f1_{:02d}[0]' n = 6 for letter in 'ABCDEF': pdf[n] = f[letter] n += 1 for number in first_nine_lines: pdf[n] = zstr(f['line', number]) n += 1 pdf[27] = zstr(f.line11) pdf.pattern = '{}' def write_lines(line_number, n): lines = f['line', line_number] for line in lines: pdf['f1_{}[0]'.format(n)] = line.code n += 1 pdf['f1_{}[0]'.format(n)] = zstr(line.amount) n += 1 write_lines(10, 24) #write_lines(11, 28) write_lines(12, 35) write_lines(13, 51) write_lines(14, 61) write_lines(15, 75) write_lines(16, 85) write_lines(17, 95)
def write_lines(line_number, n): lines = f['line', line_number] for line in lines: pdf['f1_{}[0]'.format(n)] = line.code n += 1 pdf['f1_{}[0]'.format(n)] = zstr(line.amount) n += 1
def fill_out_2017(form, pdf): f = form pdf.load('us.f1120ssk--{}.pdf'.format(f.form_version)) pdf.pages = 1, # TODO: these two codes might no longer be correct pdf['c1_01_0_[0]'] = 'Yes' if f.final else 'Off' pdf['c1_02_0_[0]'] = 'Yes' if f.amended else 'Off' # TODO: specific dates instead of calendar year # pdf.pattern = 'p1-t{}[0]' # pdf[1] = f.beginning_date # pdf[2] = f.ending_date # pdf[3] = f.ending_year pdf.pattern = 'f1_{:02d}[0]' n = 6 for letter in 'ABCDEF': pdf[n] = f[letter] n += 1 for number in first_nine_lines: pdf[n] = zstr(f['line', number]) n += 1 pdf[27] = zstr(f.line11) pdf.pattern = '{}' def write_lines(line_number, n): lines = f['line', line_number] for line in lines: pdf['p1-t{}a'.format(n)] = line.code pdf['p1-t{}[0]'.format(n)] = zstr(line.amount) n += 1 write_lines(10, 22) write_lines(12, 28) write_lines(13, 36) write_lines(14, 41) write_lines(15, 48) write_lines(16, 53) write_lines(17, 58)
def fill_out(form, pdf): f = form pdf.load('us.f1040sd--{}.pdf'.format(f.form_version)) pdf['f1_001['] = f.name pdf['f1_002['] = f.ssn letters = 'efgh' if f.form_version < u'2012' else 'degh' # Part I: Short-Term Capital Gains and Losses pdf.pattern = 'f1_{:03d}' n = 3 for line in 1, 2, 3: for letter in letters: value = getattr(f, 'line{}{}'.format(line, letter)) pdf[n] = zstr(value) n += 1 for line in 4, 5, 6, 7: value = getattr(f, 'line{}'.format(line)) pdf[n] = zstr(value) n += 1 # Part II: Long-Term Capital Gains and Losses for line in 8, 9, 10: for letter in letters: value = getattr(f, 'line{}{}'.format(line, letter)) pdf[n] = zstr(value) n += 1 for line in 11, 12, 13, 14, 15: value = getattr(f, 'line{}'.format(line)) pdf[n] = zstr(value) n += 1 # Part III: Summary pdf.pattern = 'f2_{:03d}' pdf[1] = zstr(f.line16) pdf[2] = zstr(f.line18) pdf[3] = zstr(f.line19) pdf[5] = zstr(f.line21) pdf.pattern = '.c2_0{}_' pdf[1] = yesno(f.line17) pdf[2] = yesno(f.line20) pdf[3] = yesno(f.line22)
def fill_out(form, pdf): f = form pdf.load('us.f1120ssk--{}.pdf'.format(f.form_version)) pdf.pages = 1, pdf['c1_01_0_[0]'] = 'Yes' if f.final else 'Off' pdf['c1_02_0_[0]'] = 'Yes' if f.amended else 'Off' pdf.pattern = 'p1-t{}[0]' pdf[1] = f.beginning_date pdf[2] = f.ending_date pdf[3] = f.ending_year n = 4 for letter in 'ABCDEF': pdf[n] = f[letter] n += 1 for number in first_nine_lines: pdf[n] = zstr(f['line', number]) n += 1 pdf[27] = zstr(f.line11) pdf.pattern = '{}' def write_lines(line_number, n): lines = f['line', line_number] for line in lines: pdf['p1-t{}a'.format(n)] = line.code pdf['p1-t{}[0]'.format(n)] = zstr(line.amount) n += 1 write_lines(10, 22) write_lines(12, 28) write_lines(13, 36) write_lines(14, 41) write_lines(15, 48) write_lines(16, 53) write_lines(17, 58)
def old_fill_out(form, pdf): f = form pdf.load('us.f1120ssk--{}.pdf'.format(f.form_version)) pdf.pages = 1, pdf['c1_01_0_[0]'] = 'Yes' if f.final else 'Off' pdf['c1_02_0_[0]'] = 'Yes' if f.amended else 'Off' pdf.pattern = 'p1-t{}[0]' pdf[1] = f.beginning_date pdf[2] = f.ending_date pdf[3] = f.ending_year n = 4 for letter in 'ABCDEF': pdf[n] = f[letter] n += 1 for number in first_nine_lines: pdf[n] = zstr(f['line', number]) n += 1 pdf[27] = zstr(f.line11) pdf.pattern = '{}' def write_lines(line_number, n): lines = f['line', line_number] for line in lines: pdf['p1-t{}a'.format(n)] = line.code pdf['p1-t{}[0]'.format(n)] = zstr(line.amount) n += 1 write_lines(10, 22) write_lines(12, 28) write_lines(13, 36) write_lines(14, 41) write_lines(15, 48) write_lines(16, 53) write_lines(17, 58)
def fill_out(form, pdf): f = form pdf.load('us.f1120s--{}.pdf'.format(f.form_version)) def split(i, value, j=None): if j is None: j = i + 1 pdf[i], pdf[j] = zzstr(value) pdf.pattern = '.p1-t{}[0]' pdf[1] = f.beginning_date pdf[2] = f.ending_date pdf[3] = f.ending_year pdf[4] = f.name pdf[5] = f.street pdf[6] = f.city_state_zip pdf[7] = f.lineA pdf[8] = f.lineB pdf[9] = f.ein pdf[11] = f.lineE split(12, f.lineF) pdf[14] = str(f.lineI) split(15, f.line1a) split(17, f.line1b) split(19, f.line1c) for i in range(2, 21+1): split(2*i + 17, f['line', i]) split(61, f.line22a) split(63, f.line22b) split(65, f.line22c) split(67, f.line23a) split(69, f.line23b) split(71, f.line23c) split(73, f.line23d) split(75, f.line24) split(77, f.line25) split(79, f.line26) split(81, f.line27_credited) split(83, f.line27) pdf.pattern = 'topmostSubform[0].Page1[0].{}' pdf['ABC[0].c1_01_0_[0]'] = 'Yes' if f.lineC else 'Off' pdf['c1_02_0_[0]'] = 'Yes' if f.lineG else 'Off' pdf['c1_02_0_[1]'] = 'Off' if f.lineG else 'No' for i in range(1, 5+1): checked = str(i) in f.lineH pdf['c1_0{}_0_[0]'.format(i + 2)] = 'Yes' if checked else 'Off' pdf['p1_t85[0]'] = f.signer_title # note the underscore! pdf['c1_9_0_[0]'] = 'Yes' if f.discuss else 'Off' pdf['c1_9_0_[1]'] = 'Off' if f.discuss else 'No' pdf.pattern = 'topmostSubform[0].Page2[0].{}' pdf['c2_01_0_[0]'] = 'A' if f.B.line1 == 'a' else 'Off' pdf['c2_01_0_[1]'] = 'B' if f.B.line1 == 'b' else 'Off' if f.B.line1 not in ('a', 'b'): pdf['c2_01_0_[2]'] = 'C' pdf['p2-t19[0]'] = f.B.line1 pdf['p2-t20'] = f.B.line2_activity pdf['p2-t21'] = f.B.line2_product_or_service pdf['c2_04_0_[0]'] = 'Yes' if f.B.line3 else 'Off' pdf['c2_04_0_[1]'] = 'Off' if f.B.line3 else 'No' pdf['c2_06_0_[0]'] = 'Yes' if f.B.line4a else 'Off' pdf['c2_06_0_[1]'] = 'Off' if f.B.line4a else 'No' pdf['c2_08_0_[0]'] = 'Yes' if f.B.line4b else 'Off' pdf['c2_08_0_[1]'] = 'Off' if f.B.line4b else 'No' pdf['c2_10_0_[0]'] = 'Yes' if (f.B.line5ai or f.B.line5aii) else 'Off' pdf['c2_10_0_[1]'] = 'Off' if (f.B.line5ai or f.B.line5aii) else 'No' pdf['c2_112_0_[0]'] = 'Yes' if (f.B.line5bi or f.B.line5bii) else 'Off' pdf['c2_112_0_[1]'] = 'Off' if (f.B.line5bi or f.B.line5bii) else 'No' pdf['c2_15_0_[0]'] = 'Yes' if f.B.line6 else 'Off' pdf['c2_15_0_[1]'] = 'Off' if f.B.line6 else 'No' pdf['c2_11_0_[0]'] = 'Yes' if f.B.line7 else 'Off' pdf['p2-t22[0]'] = zstr(f.B.line8) pdf['p2-t23[0]'] = zstr(f.B.line9) pdf['c2_100_0_[0]'] = 'Yes' if f.B.line10 else 'Off' pdf['c2_101_0_[0]'] = 'Yes' if f.B.line11 else 'Off' pdf['c2_101_0_[1]'] = 'Off' if f.B.line11 else 'No' pdf['p2-t22[1]'] = zstr(f.B.line11) pdf['c2_13_0_[0]'] = 'Yes' if f.B.line12 else 'Off' pdf['c2_13_0_[1]'] = 'Off' if f.B.line12 else 'No' if f.form_version == u'2012': pdf['c2_80_0_[0]'] = 'Yes' if f.B.line13a else 'Off' pdf['c2_80_0_[1]'] = 'Off' if f.B.line13a else 'No' else: pdf['c2_13a_0_[0]'] = 'Yes' if f.B.line13a else 'Off' pdf['c2_13a_0_[1]'] = 'Off' if f.B.line13a else 'No' pdf['c2_07_0_[0]'] = 'Yes' if f.B.line13b else 'Off' pdf['c2_07_0_[1]'] = 'Off' if f.B.line13b else 'No' if f.form_version == u'2010': pdf.pattern = '.p2-t{}[0]' split(24, f.K.line1) split(34, f.K.line4) split(55, f.K.line11) split(125, f.K.line16c) split(127, f.K.line16d) split(131, f.K.line17a) split(137, f.K.line18) pdf.pattern = '.p4-t{}[0]' pdf[87] = zstr(f.M2.line1a) pdf[90] = zstr(f.M2.line2a) pdf[91] = zstr(f.M2.line3a) pdf[93] = zstr(f.M2.line4a) pdf[94] = zstr(f.M2.line5a) pdf[96] = zstr(f.M2.line6a) pdf[99] = zstr(f.M2.line7a) pdf[102] = zstr(f.M2.line8a) else: pdf.pattern = '.p3-t{}[0]' split(100, f.K.line1) split(102, f.K.line2) split(104, f.K.line3a) split(106, f.K.line3b) split(108, f.K.line3c) split(110, f.K.line4) split(112, f.K.line5a) split(114, f.K.line5b) split(116, f.K.line6) split(118, f.K.line7) split(120, f.K.line8a) split(122, f.K.line8b) split(124, f.K.line8c) split(126, f.K.line9) pdf[128] = zstr(f.K.line10_type) split(129, f.K.line10) split(131, f.K.line11) split(133, f.K.line12a) split(135, f.K.line12b) pdf[137] = zstr(f.K.line12c_type) split(138, f.K.line12c) pdf[140] = zstr(f.K.line12d_type) split(141, f.K.line12d, j=145) split(146, f.K.line13a) split(148, f.K.line13b) split(150, f.K.line13c) pdf[152] = zstr(f.K.line13d_type) split(153, f.K.line13d) pdf[155] = zstr(f.K.line13e_type) split(156, f.K.line13e) split(158, f.K.line13f) pdf[160] = zstr(f.K.line13g_type) split(161, f.K.line13g) pdf[163] = zstr(f.K.line14a) split(164, f.K.line14b) split(166, f.K.line14c) split(168, f.K.line14d) split(170, f.K.line14e) split(172, f.K.line14f) split(174, f.K.line14g) split(176, f.K.line14h) split(178, f.K.line14i) split(180, f.K.line14j) split(182, f.K.line14k) split(184, f.K.line14l) split(186, f.K.line14m) split(188, f.K.line15a) split(190, f.K.line15b) split(192, f.K.line15c) split(194, f.K.line15d) split(196, f.K.line15e) split(198, f.K.line15f) split(200, f.K.line16a) split(202, f.K.line16b) split(204, f.K.line16c) # penalties, fines; half of meals split(206, f.K.line16d) split(208, f.K.line16e) pdf.pattern = '{}' if f.K.line14l: pdf['c3_01_0_[0]'] = 'A' if f.K.line14n_accounting == 'a' else 'Off' pdf['c3_01_0_[1]'] = 'B' if f.K.line14n_accounting == 'b' else 'Off' pdf.pattern = 'p4-t{}[0]' split(100, f.K.line17a) split(102, f.K.line17b) split(104, f.K.line17c) split(106, f.K.line18) # TODO: Schedule L # TODO: Schedule M-1 pdf.pattern = 'p5-t{:03}[0]' pdf[116] = zstr(f.M2.line1a) pdf[117] = zstr(f.M2.line1b) pdf[118] = zstr(f.M2.line1c) pdf[119] = zstr(f.M2.line2a) pdf[120] = zstr(f.M2.line3a) pdf[121] = zstr(f.M2.line3b) pdf[122] = zstr(f.M2.line4a) pdf[123] = zstr(f.M2.line5a) pdf[124] = zstr(f.M2.line5b) pdf[125] = zstr(f.M2.line6a) pdf[126] = zstr(f.M2.line6b) pdf[127] = zstr(f.M2.line6c) pdf[128] = zstr(f.M2.line7a) pdf[129] = zstr(f.M2.line7b) pdf[130] = zstr(f.M2.line7c) pdf[131] = zstr(f.M2.line8a) pdf[132] = zstr(f.M2.line8b) pdf[133] = zstr(f.M2.line8c)
def fill_out(form, pdf): if form.form_version < u'2018': return fill_out_pre_2018(form, pdf) f = form pdf.load('us.f1120s--{}.pdf'.format(f.form_version)) last_split = [0] 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) pdf.pattern = '.f1_{}[0]' pdf[1] = f.beginning_date pdf[2] = f.ending_date pdf[3] = f.ending_year pdf[4] = f.name pdf[5] = f.street pdf[6] = f.city_state_zip pdf[7] = f.lineA pdf[8] = f.ein pdf[9] = f.lineE split(f.lineF, 10) pdf[12] = str(f.lineI) split(f.line1a, 13) split(f.line1b) split(f.line1c) for i in range(2, 21+1): split(f['line', i]) split(f.line22a) split(f.line22b) split(f.line22c) split(f.line23a) split(f.line23b) split(f.line23c) split(f.line23d) split(f.line24) split(f.line25) split(f.line26) split(f.line27_credited) split(f.line27) pdf.pattern = 'ABC[0].f1_{}[0]' pdf[8] = f.lineB # same name as line D pdf.pattern = 'topmostSubform[0].Page1[0].{}' pdf['c1_01_0_[0]'] = 'Yes' if f.lineC else 'Off' pdf['c1_2[0]'] = '1' if f.lineG else 'Off' pdf['c1_2[1]'] = 'Off' if f.lineG else '2' for i in range(1, 5+1): checked = str(i) in f.lineH pdf['c1_0{}_0_[0]'.format(i + 2)] = 'Yes' if checked else 'Off' pdf['p1_t85[0]'] = f.signer_title # note the underscore! pdf['c1_9_0_[0]'] = 'Yes' if f.discuss else 'Off' pdf['c1_9_0_[1]'] = 'Off' if f.discuss else 'No' pdf.pattern = 'topmostSubform[0].Page2[0].{}' pdf['c2_01_0_[0]'] = '1' if f.B.line1 == 'a' else 'Off' pdf['c2_01_0_[1]'] = '2' if f.B.line1 == 'b' else 'Off' if f.B.line1 not in ('a', 'b'): pdf['c2_01_0_[2]'] = '3' pdf['f2_1[0]'] = f.B.line1 pdf['f2_2[0]'] = f.B.line2_activity pdf['f2_3[0]'] = f.B.line2_product_or_service pdf['c2_02[0]'] = '1' if f.B.line3 else 'Off' pdf['c2_02[1]'] = 'Off' if f.B.line3 else '2' pdf['c2_03[0]'] = '1' if f.B.line4a else 'Off' pdf['c2_03[1]'] = 'Off' if f.B.line4a else '2' pdf['c2_04[0]'] = '1' if f.B.line4b else 'Off' pdf['c2_04[1]'] = 'Off' if f.B.line4b else '2' pdf['c2_05[0]'] = '1' if (f.B.line5ai or f.B.line5aii) else 'Off' pdf['c2_05[1]'] = 'Off' if (f.B.line5ai or f.B.line5aii) else '2' pdf['c2_06[0]'] = '1' if (f.B.line5bi or f.B.line5bii) else 'Off' pdf['c2_06[1]'] = 'Off' if (f.B.line5bi or f.B.line5bii) else '2' def truefalse(value, field, yes_suffix='[0]', no_suffix='[1]'): pdf[field + yes_suffix] = '1' if value else 'Off' pdf[field + no_suffix] = 'Off' if value else '2' truefalse(f.B.line6, 'c2_06') truefalse(f.B.line7, 'c2_07') truefalse(f.B.line9, 'c2_09') truefalse(f.B.line10, 'c2_10') truefalse(f.B.line11, 'c2_11') pdf.pattern = 'topmostSubform[0].Page3[0].schb[0].{}' truefalse(f.B.line12, 'c3_1') truefalse(f.B.line13, 'c3_2') truefalse(f.B.line14a, 'c3_3') truefalse(f.B.line14b, 'c3_4') truefalse(f.B.line15, 'c3_5') pdf.pattern = 'f3_{}[0]' split(f.K.line1, 3) split(f.K.line2) split(f.K.line3a) split(f.K.line3b) split(f.K.line3c) split(f.K.line4) split(f.K.line5a) split(f.K.line5b) split(f.K.line6) split(f.K.line7) split(f.K.line8a) split(f.K.line8b) split(f.K.line8c) split(f.K.line9) pdf[31] = zstr(f.K.line10_type) split(f.K.line10, 32) split(f.K.line11) split(f.K.line12a) split(f.K.line12b) # several fields skipped that I don't need pdf.pattern = 'f4_{}[0]' split(f.K.line16c, 17) # half of meals split(f.K.line18, 29) # TODO: Schedule L # TODO: Schedule M-1 pdf.pattern = 'f5_{}[0]' pdf[19] = zstr(f.M2.line1a) pdf[20] = zstr(f.M2.line1b) pdf[21] = zstr(f.M2.line1c) pdf[23] = zstr(f.M2.line2a) pdf[24] = zstr(f.M2.line3a) #pdf[121] = zstr(f.M2.line3b) pdf[26] = zstr(f.M2.line4a) pdf[27] = zstr(f.M2.line5a) #pdf[124] = zstr(f.M2.line5b) pdf[29] = zstr(f.M2.line6a) pdf[30] = zstr(f.M2.line6b) pdf[31] = zstr(f.M2.line6c) pdf[33] = zstr(f.M2.line7a) pdf[34] = zstr(f.M2.line7b) pdf[35] = zstr(f.M2.line7c) pdf[37] = zstr(f.M2.line8a) pdf[38] = zstr(f.M2.line8b) pdf[29] = zstr(f.M2.line8c)
def split(value, i=None, j=None): if i is None: i = last_split[0] + 1 last_split[0] = i pdf[i] = zstr(value)
def fill_out_2018(form, pdf): f = form pdf.load('us.f1120s--{}.pdf'.format(f.form_version)) last_split = [0] 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) pdf.pattern = '.f1_{}[0]' pdf[1] = f.beginning_date pdf[2] = f.ending_date pdf[3] = f.ending_year pdf[4] = f.name pdf[5] = f.street pdf[6] = f.city_state_zip pdf[7] = f.lineA pdf[8] = f.ein pdf[9] = f.lineE split(f.lineF, 10) pdf[12] = str(f.lineI) split(f.line1a, 13) split(f.line1b) split(f.line1c) for i in range(2, 21 + 1): split(f['line', i]) split(f.line22a) split(f.line22b) split(f.line22c) split(f.line23a) split(f.line23b) split(f.line23c) split(f.line23d) split(f.line24) split(f.line25) split(f.line26) split(f.line27_credited) split(f.line27) pdf.pattern = 'ABC[0].f1_{}[0]' pdf[8] = f.lineB # same name as line D pdf.pattern = 'topmostSubform[0].Page1[0].{}' pdf['c1_01_0_[0]'] = 'Yes' if f.lineC else 'Off' pdf['c1_2[0]'] = '1' if f.lineG else 'Off' pdf['c1_2[1]'] = 'Off' if f.lineG else '2' for i in range(1, 5 + 1): checked = str(i) in f.lineH pdf['c1_0{}_0_[0]'.format(i + 2)] = 'Yes' if checked else 'Off' pdf['p1_t85[0]'] = f.signer_title # note the underscore! pdf['c1_9_0_[0]'] = 'Yes' if f.discuss else 'Off' pdf['c1_9_0_[1]'] = 'Off' if f.discuss else 'No' pdf.pattern = 'topmostSubform[0].Page2[0].{}' pdf['c2_01_0_[0]'] = '1' if f.B.line1 == 'a' else 'Off' pdf['c2_01_0_[1]'] = '2' if f.B.line1 == 'b' else 'Off' if f.B.line1 not in ('a', 'b'): pdf['c2_01_0_[2]'] = '3' pdf['f2_1[0]'] = f.B.line1 pdf['f2_2[0]'] = f.B.line2_activity pdf['f2_3[0]'] = f.B.line2_product_or_service pdf['c2_02[0]'] = '1' if f.B.line3 else 'Off' pdf['c2_02[1]'] = 'Off' if f.B.line3 else '2' pdf['c2_03[0]'] = '1' if f.B.line4a else 'Off' pdf['c2_03[1]'] = 'Off' if f.B.line4a else '2' pdf['c2_04[0]'] = '1' if f.B.line4b else 'Off' pdf['c2_04[1]'] = 'Off' if f.B.line4b else '2' pdf['c2_05[0]'] = '1' if (f.B.line5ai or f.B.line5aii) else 'Off' pdf['c2_05[1]'] = 'Off' if (f.B.line5ai or f.B.line5aii) else '2' pdf['c2_06[0]'] = '1' if (f.B.line5bi or f.B.line5bii) else 'Off' pdf['c2_06[1]'] = 'Off' if (f.B.line5bi or f.B.line5bii) else '2' def truefalse(value, field, yes_suffix='[0]', no_suffix='[1]'): pdf[field + yes_suffix] = '1' if value else 'Off' pdf[field + no_suffix] = 'Off' if value else '2' truefalse(f.B.line6, 'c2_06') truefalse(f.B.line7, 'c2_07') truefalse(f.B.line9, 'c2_09') truefalse(f.B.line10, 'c2_10') truefalse(f.B.line11, 'c2_11') pdf.pattern = 'topmostSubform[0].Page3[0].schb[0].{}' truefalse(f.B.line12, 'c3_1') truefalse(f.B.line13, 'c3_2') truefalse(f.B.line14a, 'c3_3') truefalse(f.B.line14b, 'c3_4') truefalse(f.B.line15, 'c3_5') pdf.pattern = 'f3_{}[0]' split(f.K.line1, 3) split(f.K.line2) split(f.K.line3a) split(f.K.line3b) split(f.K.line3c) split(f.K.line4) split(f.K.line5a) split(f.K.line5b) split(f.K.line6) split(f.K.line7) split(f.K.line8a) split(f.K.line8b) split(f.K.line8c) split(f.K.line9) pdf[31] = zstr(f.K.line10_type) split(f.K.line10, 32) split(f.K.line11) split(f.K.line12a) split(f.K.line12b) # several fields skipped that I don't need pdf.pattern = 'f4_{}[0]' split(f.K.line16c, 17) # half of meals split(f.K.line18, 29) # TODO: Schedule L # TODO: Schedule M-1 pdf.pattern = 'f5_{}[0]' pdf[19] = zstr(f.M2.line1a) pdf[20] = zstr(f.M2.line1b) pdf[21] = zstr(f.M2.line1c) pdf[23] = zstr(f.M2.line2a) pdf[24] = zstr(f.M2.line3a) #pdf[121] = zstr(f.M2.line3b) pdf[26] = zstr(f.M2.line4a) pdf[27] = zstr(f.M2.line5a) #pdf[124] = zstr(f.M2.line5b) pdf[29] = zstr(f.M2.line6a) pdf[30] = zstr(f.M2.line6b) pdf[31] = zstr(f.M2.line6c) pdf[33] = zstr(f.M2.line7a) pdf[34] = zstr(f.M2.line7b) pdf[35] = zstr(f.M2.line7c) pdf[37] = zstr(f.M2.line8a) pdf[38] = zstr(f.M2.line8b) pdf[29] = zstr(f.M2.line8c)
def fill_out(form, pdf): f = form pdf.load('us.f1099msc--{}.pdf'.format(f.form_version)) # The pdftk "fill_form" command seems to ignore "\r" characters # so we have to draw the payer ourselves; see draw() below. # # fields['f1_001[0]'].all = f.payer pdf.pattern = 'f1_{:03}[0]' pdf[1] = f.payer pdf[2] = f.payer_number pdf[3] = f.recipient_number pdf[4] = f.recipient_name pdf[5] = f.recipient_street pdf[6] = f.recipient_city_state_zip pdf[7] = f.account_number pdf[8] = zstr(f.line15a) pdf[9] = zstr(f.line15b) pdf[10] = zstr(f.line1) pdf[11] = zstr(f.line2) pdf[12] = zstr(f.line3) pdf[13] = zstr(f.line4) pdf[14] = zstr(f.line5) pdf[15] = zstr(f.line6) pdf[16] = zstr(f.line7) pdf[17] = zstr(f.line8) pdf[18] = zstr(f.line10) pdf[101] = zstr(f.line11) pdf[19] = zstr(f.line13) pdf[20] = zstr(f.line14) if len(f.states) > 0: pdf[21] = zstr(f.states[0].line16) pdf[23] = zstr(f.states[0].line17) pdf[25] = zstr(f.states[0].line18) if len(f.states) > 1: pdf[22] = zstr(f.states[1].line16) pdf[24] = zstr(f.states[1].line17) pdf[26] = zstr(f.states[1].line18) if len(f.states) > 2: raise ValueError('Form 1099-MISC only supports two states') pdf.pattern = '{}' pdf['c1_02_0_[0]'] = 'Yes' if f.line9 else 'Off' pdf['Box12[0]'] = f.line12
def fill_out_pre_2018(form, pdf): f = form pdf.load('us.f1120s--{}.pdf'.format(f.form_version)) def split(i, value, j=None): if j is None: j = i + 1 pdf[i], pdf[j] = zzstr(value) pdf.pattern = '.p1-t{}[0]' pdf[1] = f.beginning_date pdf[2] = f.ending_date pdf[3] = f.ending_year pdf[4] = f.name pdf[5] = f.street pdf[6] = f.city_state_zip pdf[7] = f.lineA pdf[8] = f.lineB pdf[9] = f.ein pdf[11] = f.lineE split(12, f.lineF) pdf[14] = str(f.lineI) split(15, f.line1a) split(17, f.line1b) split(19, f.line1c) for i in range(2, 21 + 1): split(2 * i + 17, f['line', i]) split(61, f.line22a) split(63, f.line22b) split(65, f.line22c) split(67, f.line23a) split(69, f.line23b) split(71, f.line23c) split(73, f.line23d) split(75, f.line24) split(77, f.line25) split(79, f.line26) split(81, f.line27_credited) split(83, f.line27) pdf.pattern = 'topmostSubform[0].Page1[0].{}' pdf['ABC[0].c1_01_0_[0]'] = 'Yes' if f.lineC else 'Off' pdf['c1_02_0_[0]'] = 'Yes' if f.lineG else 'Off' pdf['c1_02_0_[1]'] = 'Off' if f.lineG else 'No' for i in range(1, 5 + 1): checked = str(i) in f.lineH pdf['c1_0{}_0_[0]'.format(i + 2)] = 'Yes' if checked else 'Off' pdf['p1_t85[0]'] = f.signer_title # note the underscore! pdf['c1_9_0_[0]'] = 'Yes' if f.discuss else 'Off' pdf['c1_9_0_[1]'] = 'Off' if f.discuss else 'No' pdf.pattern = 'topmostSubform[0].Page2[0].{}' pdf['c2_01_0_[0]'] = 'A' if f.B.line1 == 'a' else 'Off' pdf['c2_01_0_[1]'] = 'B' if f.B.line1 == 'b' else 'Off' if f.B.line1 not in ('a', 'b'): pdf['c2_01_0_[2]'] = 'C' pdf['p2-t19[0]'] = f.B.line1 if f.form_version >= u'2014': pdf['f2_2[0]'] = f.B.line2_activity pdf['f2_3[0]'] = f.B.line2_product_or_service else: pdf['p2-t20'] = f.B.line2_activity pdf['p2-t21'] = f.B.line2_product_or_service pdf['c2_04_0_[0]'] = 'Yes' if f.B.line3 else 'Off' pdf['c2_04_0_[1]'] = 'Off' if f.B.line3 else 'No' pdf['c2_06_0_[0]'] = 'Yes' if f.B.line4a else 'Off' pdf['c2_06_0_[1]'] = 'Off' if f.B.line4a else 'No' pdf['c2_08_0_[0]'] = 'Yes' if f.B.line4b else 'Off' pdf['c2_08_0_[1]'] = 'Off' if f.B.line4b else 'No' pdf['c2_10_0_[0]'] = 'Yes' if (f.B.line5ai or f.B.line5aii) else 'Off' pdf['c2_10_0_[1]'] = 'Off' if (f.B.line5ai or f.B.line5aii) else 'No' pdf['c2_112_0_[0]'] = 'Yes' if (f.B.line5bi or f.B.line5bii) else 'Off' pdf['c2_112_0_[1]'] = 'Off' if (f.B.line5bi or f.B.line5bii) else 'No' pdf['c2_15_0_[0]'] = 'Yes' if f.B.line6 else 'Off' pdf['c2_15_0_[1]'] = 'Off' if f.B.line6 else 'No' pdf['c2_11_0_[0]'] = 'Yes' if f.B.line7 else 'Off' pdf['p2-t22[0]'] = zstr(f.B.line8) pdf['p2-t23[0]'] = zstr(f.B.line9) pdf['c2_100_0_[0]'] = 'Yes' if f.B.line10 else 'Off' pdf['c2_101_0_[0]'] = 'Yes' if f.B.line11 else 'Off' pdf['c2_101_0_[1]'] = 'Off' if f.B.line11 else 'No' pdf['p2-t22[1]'] = zstr(f.B.line11) pdf['c2_13_0_[0]'] = 'Yes' if f.B.line12 else 'Off' pdf['c2_13_0_[1]'] = 'Off' if f.B.line12 else 'No' if f.form_version == u'2012': pdf['c2_80_0_[0]'] = 'Yes' if f.B.line13a else 'Off' pdf['c2_80_0_[1]'] = 'Off' if f.B.line13a else 'No' elif f.form_version == u'2016': pdf['c2_300[0]'] = 'Yes' if f.B.line13a else 'Off' pdf['c2_300[1]'] = 'Off' if f.B.line13a else 'No' else: pdf['c2_13a_0_[0]'] = 'Yes' if f.B.line13a else 'Off' pdf['c2_13a_0_[1]'] = 'Off' if f.B.line13a else 'No' pdf['c2_07_0_[0]'] = 'Yes' if f.B.line13b else 'Off' pdf['c2_07_0_[1]'] = 'Off' if f.B.line13b else 'No' if f.form_version == u'2010': pdf.pattern = '.p2-t{}[0]' split(24, f.K.line1) split(34, f.K.line4) split(55, f.K.line11) split(125, f.K.line16c) split(127, f.K.line16d) split(131, f.K.line17a) split(137, f.K.line18) pdf.pattern = '.p4-t{}[0]' pdf[87] = zstr(f.M2.line1a) pdf[90] = zstr(f.M2.line2a) pdf[91] = zstr(f.M2.line3a) pdf[93] = zstr(f.M2.line4a) pdf[94] = zstr(f.M2.line5a) pdf[96] = zstr(f.M2.line6a) pdf[99] = zstr(f.M2.line7a) pdf[102] = zstr(f.M2.line8a) else: pdf.pattern = '.p3-t{}[0]' split(100, f.K.line1) split(102, f.K.line2) split(104, f.K.line3a) split(106, f.K.line3b) split(108, f.K.line3c) split(110, f.K.line4) split(112, f.K.line5a) split(114, f.K.line5b) split(116, f.K.line6) split(118, f.K.line7) split(120, f.K.line8a) split(122, f.K.line8b) split(124, f.K.line8c) split(126, f.K.line9) pdf[128] = zstr(f.K.line10_type) split(129, f.K.line10) split(131, f.K.line11) split(133, f.K.line12a) split(135, f.K.line12b) pdf[137] = zstr(f.K.line12c_type) split(138, f.K.line12c) pdf[140] = zstr(f.K.line12d_type) split(141, f.K.line12d, j=145) split(146, f.K.line13a) split(148, f.K.line13b) split(150, f.K.line13c) pdf[152] = zstr(f.K.line13d_type) split(153, f.K.line13d) pdf[155] = zstr(f.K.line13e_type) split(156, f.K.line13e) split(158, f.K.line13f) pdf[160] = zstr(f.K.line13g_type) split(161, f.K.line13g) pdf[163] = zstr(f.K.line14a) split(164, f.K.line14b) split(166, f.K.line14c) split(168, f.K.line14d) split(170, f.K.line14e) split(172, f.K.line14f) split(174, f.K.line14g) split(176, f.K.line14h) split(178, f.K.line14i) split(180, f.K.line14j) split(182, f.K.line14k) split(184, f.K.line14l) split(186, f.K.line14m) split(188, f.K.line15a) split(190, f.K.line15b) split(192, f.K.line15c) split(194, f.K.line15d) split(196, f.K.line15e) split(198, f.K.line15f) split(200, f.K.line16a) split(202, f.K.line16b) split(204, f.K.line16c) # penalties, fines; half of meals split(206, f.K.line16d) split(208, f.K.line16e) pdf.pattern = '{}' if f.K.line14l: pdf['c3_01_0_[0]'] = 'A' if f.K.line14n_accounting == 'a' else 'Off' pdf['c3_01_0_[1]'] = 'B' if f.K.line14n_accounting == 'b' else 'Off' pdf.pattern = 'p4-t{}[0]' split(100, f.K.line17a) split(102, f.K.line17b) split(104, f.K.line17c) split(106, f.K.line18) # TODO: Schedule L # TODO: Schedule M-1 pdf.pattern = 'p5-t{:03}[0]' pdf[116] = zstr(f.M2.line1a) pdf[117] = zstr(f.M2.line1b) pdf[118] = zstr(f.M2.line1c) pdf[119] = zstr(f.M2.line2a) pdf[120] = zstr(f.M2.line3a) pdf[121] = zstr(f.M2.line3b) pdf[122] = zstr(f.M2.line4a) pdf[123] = zstr(f.M2.line5a) pdf[124] = zstr(f.M2.line5b) pdf[125] = zstr(f.M2.line6a) pdf[126] = zstr(f.M2.line6b) pdf[127] = zstr(f.M2.line6c) pdf[128] = zstr(f.M2.line7a) pdf[129] = zstr(f.M2.line7b) pdf[130] = zstr(f.M2.line7c) pdf[131] = zstr(f.M2.line8a) pdf[132] = zstr(f.M2.line8b) pdf[133] = zstr(f.M2.line8c)
def fill_out_2012(form, pdf): f = form pdf['f1_001_0_[0]'] = f.name, f.name pdf['f1_002_0_[0]'] = f.ssn, f.ssn for pageno, part in [(1, f.Part_I), (2, f.Part_II)]: pdf.pattern = 'topmostSubform[0].Page{}[0].c1_0{}_0_[{}]' for n, letter in enumerate('ABC'): value = letter if part.box == letter else 'Off' pdf[pageno, pageno, n] = value pdf.pattern = 'f{}_{}[0]' n = 1 for row in part.table: pdf[pageno, n + 0] = row.a pdf[pageno, n + 1] = row.b pdf[pageno, n + 2] = row.c pdf[pageno, n + 3] = zstr(row.d) pdf[pageno, n + 4] = zstr(row.e) pdf[pageno, n + 5] = row.f pdf[pageno, n + 6] = zstr(row.g) pdf[pageno, n + 7] = zstr(row.h) n += 10 pdf.pattern = '{}' pdf['f1_159['] = zstr(f.Part_I.total_d) pdf['f1_160['] = zstr(f.Part_I.total_e) pdf['f1_161['] = zstr(f.Part_I.total_g) pdf['f1_162['] = zstr(f.Part_I.total_h) pdf['f2_167['] = zstr(f.Part_II.total_d) pdf['f2_168['] = zstr(f.Part_II.total_e) pdf['f2_169['] = zstr(f.Part_II.total_g) pdf['f2_170['] = zstr(f.Part_II.total_h)
def fill_out_2011(form, pdf): f = form pdf['f1_001_0_[0]'] = f.name, f.name pdf['f1_002_0_[0]'] = f.ssn, f.ssn for pageno, part in [(1, f.Part_I), (2, f.Part_II)]: pdf.pattern = 'topmostSubform[0].Page{}[0].c{}_0{}_0_[0]' for n, letter in enumerate('ABC', 1): value = letter if part.box == letter else 'Off' pdf[pageno, pageno, n] = value pdf.pattern = 'f{}_{:03}_0_[0]' i = 14 j = 226 for row in part.table: if i <= 176: pdf[pageno, i + 0] = row.a pdf[pageno, j] = row.b pdf[pageno, i + 1] = row.c pdf[pageno, i + 2] = row.d pdf[pageno, i + 3] = zstr(row.e) pdf[pageno, i + 5] = zstr(row.f) pdf[pageno, i + 7] = zstr(row.g) else: pdf[pageno, i + 0] = row.a pdf[pageno, i + 1] = row.b pdf[pageno, i + 2] = row.c pdf[pageno, i + 3] = row.d pdf[pageno, i + 4] = zstr(row.e) pdf[pageno, i + 6] = zstr(row.f) pdf[pageno, i + 8] = zstr(row.g) if i < 176: i += 9 elif i == 176: i = 245 else: i += 10 j += 1 pdf.pattern = '{}' pdf['f1_500_'] = zstr(f.Part_I.total_e) pdf['f1_476_'] = zstr(f.Part_I.total_f) pdf['f1_502_'] = zstr(f.Part_I.total_g) pdf['f2_500_'] = zstr(f.Part_II.total_e) pdf['f2_476_'] = zstr(f.Part_II.total_f) pdf['f2_502_'] = zstr(f.Part_II.total_g)
def fill_out_2011(form, pdf): f = form pdf['f1_001_0_[0]'] = f.name, f.name pdf['f1_002_0_[0]'] = f.ssn, f.ssn for pageno, part in [(1, f.Part_I), (2, f.Part_II)]: pdf.pattern = 'topmostSubform[0].Page{}[0].c{}_0{}_0_[0]' for n, letter in enumerate('ABC', 1): value = letter if part.box == letter else 'Off' pdf[pageno, pageno, n] = value pdf.pattern = 'f{}_{:03}_0_[0]' i = 14 j = 226 for row in part.table: if i <= 176: pdf[pageno, i+0] = row.a pdf[pageno, j] = row.b pdf[pageno, i+1] = row.c pdf[pageno, i+2] = row.d pdf[pageno, i+3] = zstr(row.e) pdf[pageno, i+5] = zstr(row.f) pdf[pageno, i+7] = zstr(row.g) else: pdf[pageno, i+0] = row.a pdf[pageno, i+1] = row.b pdf[pageno, i+2] = row.c pdf[pageno, i+3] = row.d pdf[pageno, i+4] = zstr(row.e) pdf[pageno, i+6] = zstr(row.f) pdf[pageno, i+8] = zstr(row.g) if i < 176: i += 9 elif i == 176: i = 245 else: i += 10 j += 1 pdf.pattern = '{}' pdf['f1_500_'] = zstr(f.Part_I.total_e) pdf['f1_476_'] = zstr(f.Part_I.total_f) pdf['f1_502_'] = zstr(f.Part_I.total_g) pdf['f2_500_'] = zstr(f.Part_II.total_e) pdf['f2_476_'] = zstr(f.Part_II.total_f) pdf['f2_502_'] = zstr(f.Part_II.total_g)