Example #1
0
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" )
Example #2
0
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