Beispiel #1
0
def uurkosten_per_persoon():
    # Vaste werknemers
    loonkosten_pp = loonkosten_per_persoon()
    loonkosten_pp = {
        user2name()[key]: val
        for key, val in loonkosten_pp.items() if user2name().get(key)
    }
    res = {}
    for user, kosten in loonkosten_pp.items():
        res[user] = round(
            (kosten["maand_kosten_ft"] + OVERIGE_KOSTEN_PER_FTE_PER_MAAND) *
            12 / 45 / 40 / PRODUCTIVITEIT,
            2,
        )

    # Freelancers
    freelancers = sheet_tab("Contracten werknemers", "Freelance")
    if not freelancers:
        log_error(
            "winstgevendheid.py",
            "uurkosten_per_persoon",
            "kan niet bij Freelance tab in contracten sheet",
        )  # Error in the spreadsheet
        return res
    id_col = freelancers[0].index("Id")
    bruto_per_uur_col = freelancers[0].index("BrutoPerUur")
    for line in freelancers[1:]:
        if line[id_col]:
            name = user2name().get(line[id_col])
            if name:
                res[name] = round(
                    float(line[bruto_per_uur_col].replace(",", ".")) +
                    OVERIGE_KOSTEN_PER_FREELANCE_FTR_PER_UUR,
                    2,
                )

    # Flex
    flex = sheet_tab("Contracten werknemers", "Flex")
    if not flex:
        log_error(
            "winstgevendheid.py",
            "uurkosten_per_persoon",
            "kan niet bij Flex tab in contracten sheet",
        )  # Error in the spreadsheet
        return res
    id_col = flex[0].index("Id")
    bruto_per_uur_col = flex[0].index("BrutoPerUur")
    for line in flex[1:]:
        if line[id_col]:
            name = user2name().get(line[id_col])
            if name:
                res[name] = round(
                    float(line[bruto_per_uur_col].replace(",", ".")) +
                    OVERIGE_KOSTEN_PER_FREELANCE_FTR_PER_UUR,
                    2,
                )

    return res
Beispiel #2
0
def bijgewerkt():
    """Checkt in de Resultaat tab van het Keycijfers sheet of de boekhouding van afgelopen
    maand al is ingevuld."""
    tab = sheet_tab(BEGROTING_SHEET, RESULTAAT_TAB)
    vm = vorige_maand()
    data = sheet_value(tab, RESULTAAT_BIJGEWERKT_ROW, vm + 2)
    return data
Beispiel #3
0
def omzet_begroot_tm_maand(m):
    """Begrote kosten t/m maand m"""
    if m == 0:
        return 0
    tab = sheet_tab(BEGROTING_SHEET, BEGROTING_TAB)
    res = sheet_value(tab, BEGROTING_INKOMSTEN_ROW, m + 2) * 1000
    return Decimal(res)
def winst_per_maand():
    tab = sheet_tab(BEGROTING_SHEET, RESULTAAT_TAB)
    if not tab:
        return 0  # Error in the spreadsheet
    return [
        to_int(s) for s in tab[RESULTAAT_WINST_ROW - 1][2:14] if to_int(s) != 0
    ]
Beispiel #5
0
def laatste_geboekte_maand():
    # Nummer van de laatste maand die in de boekhouding is bijgewerkt
    tab = sheet_tab(BEGROTING_SHEET, RESULTAAT_TAB)
    for m in range(12):
        data = sheet_value(tab, RESULTAAT_BIJGEWERKT_ROW, m + 3)
        if not data:
            return m
    return 12
Beispiel #6
0
def kosten_begroot_tm_maand(y, m):
    """Begrote kosten t/m maand m"""
    # todo: !! Rekening houden met het jaar
    if m == 0:
        return 0
    tab = sheet_tab(BEGROTING_SHEET, BEGROTING_TAB)
    res = sheet_value(tab, BEGROTING_KOSTEN_ROW, m + 2) * 1000
    return Decimal(res)
def omzet_vorig_jaar_per_maand():
    y = datetime.today().year
    tab = sheet_tab(BEGROTING_SHEET, BEGROTING_TAB)
    if not tab:
        return 0  # Error in the spreadsheet
    return [
        to_int(s) for s in tab[BEGROTING_INKOMSTEN_VORIG_JAAR_ROW - 1][2:14]
    ]
def omzet_per_maand():
    tab = sheet_tab(BEGROTING_SHEET, RESULTAAT_TAB)
    if not tab:
        return 0  # Error in the spreadsheet
    res = [
        to_int(s) for s in tab[RESULTAAT_INKOMSTEN_ROW - 1][2:14]
        if to_int(s) > 0
    ]
    return res
Beispiel #9
0
def loonkosten_per_persoon():
    """Dict met gegevens uit het contracten sheet met user als key
    en velden:
    - bruto: Bruto maandsalaris
    - maand_kosten_ft: Maandelijkse kosten voor Oberon op basis van fulltime
    - uren: Aantal uur per week
    - kosten_jaar: Werkelijke kosten dit jaar rekening houdend met startdatum en part time"""
    contracten = sheet_tab("Contracten werknemers", "Fixed")
    if not contracten:
        return []  # Error in the spreadsheet
    ex_werknemers = sheet_tab("Contracten werknemers", "ex werknemers")
    if not ex_werknemers:
        return []  # Error in the spreadsheet

    # Mensen die een managementfee factureren
    rdb = {
        "bruto": MT_SALARIS / 12,
        "maand_kosten_ft": MT_SALARIS / 12,
        "uren": 40
    }
    gert = {
        "bruto": MT_SALARIS / 12 * 32 / 40,
        "maand_kosten_ft": MT_SALARIS / 12,
        "uren": 32,
    }
    joost = {
        "bruto": MT_SALARIS * 104 / 110 / 12 * 36 / 40,
        "maand_kosten_ft": MT_SALARIS * 104 / 110 / 12,
        "uren": 36,
    }
    hph = rdb
    users = {"rdb": rdb, "gert": gert, "hph": hph, "joost": joost}
    for k in users.keys():
        users[k]["kosten_jaar"] = (MT_SALARIS * users[k]["uren"] / 40, )
        users[k]["jaar_kosten_pt"] = 12 * users[k]["maand_kosten_ft"] * users[
            k]["uren"] / 40
        users[k]["fraction_of_the_year_worked"] = fraction_of_the_year_past()

    # Werknemers en ex werknemers
    id_col = contracten[0].index("Id")
    bruto_col = contracten[0].index("Bruto")
    kosten_col = contracten[0].index("Kosten voor Oberon obv full")
    uren_col = contracten[0].index("UrenPerWeek")
    start_date_col = contracten[0].index("InDienstGetreden")
    end_date_col = ex_werknemers[0].index("Einddatum")
    for line in contracten[1:] + ex_werknemers[1:]:
        if line[id_col]:
            d, m, y = parse_date(line[start_date_col])
            if y == datetime.today().year:
                start_year_fraction = (m - 1) / 12 + d / 365
            else:
                start_year_fraction = 0
            end_year_fraction = fraction_of_the_year_past()
            if line in ex_werknemers:
                try:
                    d, m, y = parse_date(line[end_date_col])
                except:
                    log_error(
                        "winstgevendheid.py",
                        "loonkosten_per_persoon()",
                        "End date is not filled in for " + line[2],
                    )
                if y < datetime.today().year:
                    continue
                if y == datetime.today().year:
                    end_year_fraction = (m - 1) / 12 + d / 365

            maand_kosten_ft = (
                to_float(line[kosten_col]) if line[kosten_col] else 0
            )  # Kosten_col zit LH, vakantiegeld etc. al bij in
            users[line[id_col]] = {
                "bruto":
                to_float(line[bruto_col]),
                "maand_kosten_ft":
                maand_kosten_ft,
                "uren":
                to_int(line[uren_col]),
                "jaar_kosten_pt":
                12 * maand_kosten_ft * to_int(line[uren_col]) / 40,
                "fraction_of_the_year_worked":
                end_year_fraction - start_year_fraction,
            }
    return users
def winst_begroot_per_maand():
    tab = sheet_tab(BEGROTING_SHEET, BEGROTING_TAB)
    if not tab:
        return 0  # Error in the spreadsheet
    return [1000 * to_int(s) for s in tab[BEGROTING_WINST_ROW - 1][2:14]]
Beispiel #11
0
def aantal_fte_begroot():
    tab = sheet_tab(FTE_SHEET, FTE_TAB)
    m = datetime.today().month
    res = sheet_value(tab, FTE_ROW, FTE_START_COL + m - 1)
    return res
Beispiel #12
0
def aantal_fte():
    tab = sheet_tab('Contracten werknemers', 'stats')
    return sheet_value(tab, 3, 6)
Beispiel #13
0
def aantal_mensen(hours=168):
    tab = sheet_tab('Contracten werknemers', 'stats')
    return sheet_value(tab, 2, 6)