From dacce487466eb601bed626c28736e3f5362b17c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ctibor=20Bran=C4=8D=C3=ADk?= Date: Sat, 19 Jan 2019 11:03:45 +0100 Subject: =?UTF-8?q?Z=C3=A1klady=20pro=20v=C3=BDpo=C4=8Dty=20dle=20exekutor?= =?UTF-8?q?sk=C3=A9ho=20tarifu.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- exekutor.py | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 exekutor.py (limited to 'exekutor.py') diff --git a/exekutor.py b/exekutor.py new file mode 100644 index 0000000..6992692 --- /dev/null +++ b/exekutor.py @@ -0,0 +1,111 @@ +# -*- coding: utf-8 -*- +import math +from datetime import * +#import dph +import json + +class Exekutor: + def __init__(self, napad, rozvrh, duzp, naklEx, naklOp): + self.rozvrh = float(rozvrh) + self.nhv = float(naklEx) + self.nop = float(naklOp) + self.datum = datetime.strptime(napad, "%Y-%m-%d") + self.duzp = datetime.strptime(duzp, "%Y-%m-%d") + with open("exekutor_tarif.json") as t: + self.tarif_tab = json.loads(t.read()) + with open("exekutor_dph.json") as d: + self.dph_tab = json.loads(d.read()) + +# Určí koeficient pro výpočet DPH dle sazby odpovídající zvolenému datu DUZP + + def kDph(self): + zmeny_dph = sorted(self.dph_tab) + print(zmeny_dph) + pocet_zmen = len(zmeny_dph) + for i in range(pocet_zmen): + if self.duzp >= datetime.strptime(zmeny_dph[i], "%Y-%m-%d") and self.duzp <= datetime.strptime(zmeny_dph[i+1], "%Y-%m-%d"): + sazba = self.dph_tab[zmeny_dph[i+1] + k = 1 + sazba + return k + +# Tato funkce vybere správné hodnoty tarifu pro datum zahájení řízení +# zadané při inicializaci třídy Exekutor. + + def vyberTarif(self): + zmeny_tarifu = self.tarif_tab.keys() + pocet_zmen = len(zmeny_tarifu) + zero = datetime.min + inf = datetime.max + prvni_zmena = datetime.strptime(zmeny_tarifu[0], "%Y-%m-%d")-timedelta(1) + posledni_zmena = datetime.strptime(zmeny_tarifu[pocet_zmen-1], "%Y-%m-%d") + obdobi = [ [zero, prvni_zmena] ] + for i in range(pocet_zmen-1): + stop = datetime.strptime(zmeny_tarifu[i-1], "%Y-%m-%d")-timedelta(1) + start = datetime.strptime(zmeny_tarifu[i], "%Y-%m-%d") + obdobi.append([start, stop]) + obdobi.append([posledni_zmena,inf]) + pocet_obdobi = len(obdobi) + for o in range(pocet_obdobi): + if self.datum <= obdobi[0][1]: + break + elif self.datum >= obdobi[o][0] and self.datum <= obdobi[o][1]: + tar = datetime.strftime(obdobi[o][0], "%Y-%m-%d") + tarif = self.tarif_tab[tar] + return tarif + + +# Pomocná funkce, která vypočítá maximální odměnu pro jednotlivá pásma tarifu a +# maximální rozdělovanou částku pro dané pásmo tarifu a vstupní hodnoty náhrady +# hotových výdajů a nákladů exekuce oprávněného. Dále se vypočítá pomocná konstanta +# rozdil, která se používá pro finální výpočet. Tato konstanta odečítá z +# z rozdělované částky součet odměn za předešlá pásma vynásobený rozdílem tarifní sazby. + + def tarif(self): + idx = 0 + dph = self.kDph() + max_odmena = [] + max_pasmo = [] + rozdil = [] + while idx <= len(self.vyberTarif()["tarif"]) - 1: + cur = self.vyberTarif()["tarif"][idx] + if idx == 0: + prev = 0 + soucet = 0 + p = self.vyberTarif()["tarif"][idx]+dph*(self.vyberTarif()["tarif"][idx]*self.vyberTarif()["sazby"][idx]+self.nhv)+self.nop + r = 0 + else: + prev = self.vyberTarif()["tarif"][idx-1] + soucet = max_odmena[idx-1] + p = self.vyberTarif()["tarif"][idx]+dph*(max_odmena[idx-1]+(self.vyberTarif()["tarif"][idx]-self.vyberTarif()["tarif"][idx-1])*self.vyberTarif()["sazby"][idx]+self.nhv)+self.nop + r = (max_odmena[idx-1] - self.vyberTarif()["sazby"][idx] * self.vyberTarif()["tarif"][idx-1]) * 1.05 + m = soucet + math.ceil((cur - prev) * self.vyberTarif()["sazby"][idx] / 10) * 10 + max_odmena.append(m) + max_pasmo.append(p) + rozdil.append(r) + idx += 1 + tarif = self.vyberTarif()["tarif"], self.vyberTarif()["sazby"], tuple(max_odmena[:]), tuple(max_pasmo[:]), tuple(rozdil[:]) + return tarif + + def rozdeleni(self): + suma = self.rozvrh + dph = self.kDph() + if suma <= self.tarif()[3][0]: + r_opravneny = (suma - dph * self.nhv - self.nop - self.tarif()[4][0])/(1 + dph * self.vyberTarif()["sazby"][0]) + r_odmena = r_opravneny * self.tarif()[1][0] + elif suma <= self.tarif()[3][1]: + r_opravneny = (suma - dph * self.nhv - self.nop - self.tarif()[4][1])/(1 + dph * self.vyberTarif()["sazby"][1]) + r_odmena = r_opravneny * self.tarif()[1][1] + elif suma <= self.tarif()[3][2]: + r_opravneny = (suma - dph * self.nhv - self.nop - self.tarif()[4][2])/(1 + dph * self.vyberTarif()["sazby"][2]) + r_odmena = r_opravneny * self.tarif()[1][2] + elif suma <= self.tarif()[3][3]: + r_opravneny = (suma - dph * self.nhv - self.nop - self.tarif()[4][3])/(1 + dph * self.vyberTarif()["sazby"][3]) + r_odmena = r_opravneny * self.tarif()[1][3] + elif suma <= self.tarif()[3][4]: + r_opravneny = (suma - dph * self.nhv - self.nop - self.tarif()[4][4])/(1 + dph * self.vyberTarif()["sazby"][4]) + r_odmena = r_opravneny * self.tarif()[1][4] + else: + r_opravneny = (suma - dph * self.nhv - self.nop - self.tarif()[2][4] * dph) + r_odmena = self.tarif()[2][4] + rozdel = [round(r_opravneny,2), round(r_odmena,-1), round(round(r_odmena,-1) * dph - round(r_odmena,-1),2), round(self.nhv,2), round(self.nhv * dph - self.nhv,2), round(self.nop,2)] + return rozdel -- cgit v1.2.3