예제 #1
0
파일: mis.py 프로젝트: tedlaz/efka
def calc_astheneia(par, osyk_db):
    fin = {'par': par}
    apo = {}
    apo['a_eos3'] = rnd(par['eos3'] * par['imeromisthio'] / 2)
    apo['a_more3'] = rnd(par['more3'] * par['imeromisthio'])
    apo['a_efka'] = rnd(apo['a_eos3'] + apo['a_more3'])
    efka = calc_efka(osyk_db, par['kad'], par['eid'], par['per'],
                     apo['a_efka'])
    efka_epidoma = calc_efka(osyk_db, par['kad'], par['eid'], par['per'],
                             par['epidoma'])
    fin['apo'] = apo
    fin['efka'] = efka
    return fin
예제 #2
0
파일: mis.py 프로젝트: tedlaz/efka
def calc_ea(par, osyk_db):
    """
    Υπολογισμός επιδόματος αδείας

    """
    par['mtype'] = 'Μισθοδοσία Επιδόματος Αδείας'
    par['payroll_type'] = s.PTYPE[par['typ']]
    fin = {'par': par}
    apo = {}
    apo['meresea'] = rnd(par['meres'] / 25 * 2)
    apo['meso_imeromisthio'] = rnd(par['val'] / par['meres'])
    if par['typ'] == 1:
        if apo['meresea'] > 12.5:
            apo['meresea'] = 12.5
    elif par['typ'] == 2:
        if apo['meresea'] > 13:
            apo['meresea'] = 13
    elif par['typ'] == 3:
        if apo['meresea'] > 13:
            apo['meresea'] = 13
    apo['a_total'] = rnd(apo['meresea'] * apo['meso_imeromisthio'])
    apo['meres_efka'] = 0
    fin['apo'] = apo
    efka = calc_efka(osyk_db, par['kad'], par['eid'], par['per'],
                     apo['a_total'])
    fin['efka'] = efka
    year = str(par['per'])[:4]
    taxes = calc_tax_doro_pasxa_epidoma_adeias(year, efka['amount-after-efka'],
                                               par['paidia'])
    fin['taxes'] = taxes
    return fin
예제 #3
0
파일: mis.py 프로젝트: tedlaz/efka
def calc_doro(par, osyk_db):
    """
        par: {
            'imeromisthio': 55,
            'total_meres': 15
        }
        dtyp: 1=Πάσχα, 2=Χριστούγεννα
        Στην περίπτωση των ημερομισθίων θα μπορούσε να γίνει υπολογισμός
        με βάση τις μικτές αποδοχές από Ιανουάριο έως Απρίλιο επί τον
        συντελεστη 0.15385(0.6154 / 4)
    """
    par['paidia'] = par.get('paidia', 0)
    fin = {'par': par}
    if par['doro_typ'] == 1:
        syn = 6.5
        orio_meres = 15
        par['mtype'] = 'Μισθοδοσία Δώρου Πάσχα'
    else:
        syn = 8
        orio_meres = 25
        par['mtype'] = 'Μισθοδοσία Δώρου Χριστουγέννων'
    apo = {}
    par['payroll_type'] = s.PTYPE[par['typ']]
    if par['typ'] == 1:
        apo['a_doro'] = rnd(par['val'] / 8)
    elif par['typ'] == 2:
        if par['meres'] == 0:
            return {'error': 'Πρέπει να δώσετε ημέρες εργασίας (meres)'}
        apo['a_doro'] = rnd(par['val'] * par['meres'] / syn)
        apo['orio_doroy'] = rnd(orio_meres * par['val'])
        if apo['a_doro'] > apo['orio_doroy']:
            apo['a_doro'] = rnd(apo['orio_doroy'])
    elif par['typ'] == 3:
        apo['a_doro'] = rnd(par['val'] / 8)
    else:
        fin['apo'] = {'error': 'Λάθος τύπος μισθοδοσίας'}
        return fin
    apo['a_total'] = rnd(apo['a_doro'] * s.PROSAFKSISI_DOROY)
    apo['meres_efka'] = 0
    fin['apo'] = apo
    efka = calc_efka(osyk_db, par['kad'], par['eid'], par['per'],
                     apo['a_total'])
    fin['efka'] = efka
    year = str(par['per'])[:4]
    taxes = calc_tax_doro_pasxa_epidoma_adeias(year, efka['amount-after-efka'],
                                               par['paidia'])
    fin['taxes'] = taxes
    return fin
예제 #4
0
파일: mis.py 프로젝트: tedlaz/efka
def calc_mis(par, osyk_db):
    """
    par: Dictionary με τις παρουσίες του εργαζομένου
    """
    par['ores'] = par.get('ores', 0)
    # Έλεγχοι για να έχουμε είτε μισθο είτε ημερομίσθιο είτε ωρομίσθιο
    valid_par, error_dic = check_par(par)
    if not valid_par:
        return error_dic
    par['month_year'] = humanize_period(par['per'])
    par['ores_nyxta'] = par.get('ores_nyxta', 0)
    par['ores_argia'] = par.get('ores_argia', 0)
    par['ores_yperergasia'] = par.get('ores_yperergasia', 0)
    par['meres_argia'] = par.get('meres_argia', 0)
    par['paidia'] = par.get('paidia', 0)
    par['mtype'] = 'Μισθοδοσία μηνός'
    fin = {'par': par}
    apo = {}
    par['payroll_type'] = s.PTYPE[par['typ']]
    if par['typ'] == 1:
        if par['meres'] == 0:
            par['meres'] = 25
        apo['misthos'] = par['val']
        apo['imeromisthio'] = rnd(par['val'] / s.EFKA_MERES_MHNA)
        apo['oromisthio'] = rnd(apo['imeromisthio'] * s.EFKA_MERES_BDOMADA /
                                s.EFKA_ORES_BDOMADA)
        apo['a_meres'] = rnd(par['meres'] / s.EFKA_MERES_MHNA * par['val'])
        apo['a_yperergasia'] = rnd(par['ores_yperergasia'] * apo['oromisthio'])
        apo['a_nyxta'] = rnd(par['ores_nyxta'] * apo['oromisthio'] *
                             s.POSOSTO_NYXTA)
        apo['a_argia_ores'] = rnd(par['ores_argia'] * apo['oromisthio'] *
                                  s.POSOSTO_ARGIA)
        apo['a_argia_meres'] = rnd(par['meres_argia'] * apo['imeromisthio'] *
                                   s.POSOSTO_ARGIA)
        apo['a_total'] = rnd(apo['a_meres'] + apo['a_yperergasia'] +
                             apo['a_nyxta'] + apo['a_argia_ores'] +
                             apo['a_argia_meres'])
        apo['meres_efka'] = par['meres']
    elif par['typ'] == 2:
        apo['imeromisthio'] = par['val']
        apo['oromisthio'] = rnd(par['val'] * s.EFKA_MERES_BDOMADA /
                                s.EFKA_ORES_BDOMADA)
        apo['a_meres'] = rnd(par['meres'] * par['val'])
        apo['a_yperergasia'] = rnd(par['ores_yperergasia'] * apo['oromisthio'])
        apo['a_nyxta'] = rnd(par['ores_nyxta'] * apo['oromisthio'] *
                             s.POSOSTO_NYXTA)
        apo['a_argia_ores'] = rnd(par['ores_argia'] * apo['oromisthio'] *
                                  s.POSOSTO_ARGIA)
        apo['a_argia_meres'] = rnd(par['meres_argia'] * par['val'] *
                                   s.POSOSTO_ARGIA)
        apo['a_total'] = rnd(apo['a_meres'] + apo['a_yperergasia'] +
                             apo['a_nyxta'] + apo['a_argia_ores'] +
                             apo['a_argia_meres'])
        apo['meres_efka'] = par['meres']
    elif par['typ'] == 3:
        apo['oromisthio'] = par['val']
        apo['a_ores'] = rnd(par['ores'] * par['val'])
        apo['a_yperergasia'] = rnd(par['ores_yperergasia'] * par['val'])
        apo['a_nyxta'] = rnd(par['ores_nyxta'] * par['val'] * s.POSOSTO_NYXTA)
        apo['a_argia_ores'] = rnd(par['ores_argia'] * par['val'] *
                                  s.POSOSTO_ARGIA)
        apo['a_total'] = rnd(apo['a_ores'] + apo['a_yperergasia'] +
                             apo['a_nyxta'] + apo['a_argia_ores'])

        apo['oresAnaMera'] = rnd(par['ores'] / par['meres'])
        apo['imeromisthio'] = rnd(apo['oresAnaMera'] * par['val'])
        if apo['imeromisthio'] >= s.EFKA_CLASS_1:
            par['meres_efka'] = par['meres']
        else:
            par['meres_efka'] = rnd(apo['a_total'] / s.EFKA_CLASS_1, 0)
    else:
        fin['apo'] = {'error': 'Λάθος τύπος μισθοδοσίας'}
        return fin
    fin['apo'] = apo
    # Εφ όσον έχουν πάει όλα καλά μέχρι εδώ συνεχίζουμε
    efka = calc_efka(osyk_db, par['kad'], par['eid'], par['per'],
                     apo['a_total'])
    fin['efka'] = efka
    year = str(par['per'])[:4]
    taxes = calc_tax_monthly(year, efka['amount-after-efka'], par['paidia'])
    fin['taxes'] = taxes
    return fin
예제 #5
0
 def test_calc_efka_01(self):
     res = efka.calc_efka(DBF, 5540, 913230, 201911, 100)['total-kost']
     self.assertEqual(res, 126.96)
예제 #6
0
 def test_calc_efka_02(self):
     res = efka.calc_efka(DBF, 55400, 913230, 201911, 100)
     self.assertTrue('error' in res)
예제 #7
0
def calc_efka(kad: hug.types.text, eid: hug.types.text,
              period: hug.types.number, amount: hug.types.float_number):
    """Calculate efka given kad, eid, period and amount"""
    return efka.calc_efka(DB_OSYK, kad, eid, period, amount)