def CreateJobsheet(jobcode, job_times, d, title, outdir): out = rtf.Rtf() common.assert_job(d, jobcode, "In tblTimeItems, but not jobs") job = d['jobs'][jobcode] sheets = aggregate(job_times, lambda x: (x['Task'], x['Person'])) last_key = sheets[-1][0] for key, values in sheets: task, initials = key taskTitle = task + ' - ' + db.task_desc(d, jobcode, task) person_name = db.initials_to_name(d, initials) AddHeader(title, jobcode, job['title'], taskTitle, person_name, out) #pdb.set_trace() AddPersonToJobsheet(initials, values, out) out.annotation(job) if key != last_key: out.page() out.save(outdir, jobcode + ".rtf" )
def create_statements(data): # TODO - print a warning if exp_factor > 1.05 work_codes = set([common.AsAscii(t["JobCode"]) for t in data["timeItems"]]) the_expenses = data["Expenses"] expense_codes = set([e["JobCode"] for e in the_expenses]) job_codes = list(work_codes.union(expense_codes)) job_codes.sort() if data["auto_invoices"] is None: data["auto_invoices"] = {} for job_code in job_codes: if job_code[0:2] == "01": continue job = data["jobs"][job_code] exps = [] for exp in the_expenses: if exp["JobCode"] <> job_code: continue item = LineItem() item.task = exp["Task"] item.desc = "{0} - {1} - {2}".format(exp["Period"], exp["Name"], exp["Desc"]) item.qty = job["exp_factor"] item.price = exp["Amount"] exps.append(item) times = [] times1 = filter(lambda x: x["JobCode"] == job_code, data["timeItems"]) times2 = common.summate_to_dict(times1, lambda x: (x["Task"], x["Person"]), common.mkKeyFunc("TimeVal")) keys = times2.keys() keys = sorted(keys, key=lambda x: x[0] + " " + x[1]) for k in keys: item = LineItem() item.task = k[0] initials = k[1] item.desc = db.initials_to_name(data, initials) item.qty = times2[k] item.price = price = data["charges"][(job_code, item.task, initials)] times.append(item) if len(exps) + len(times) > 0: invoice = create_job_statement(job, data["tasks"], exps, times) data["auto_invoices"][job_code] = invoice