Example #1
0
def transdel(request, idx=0):

    LOGGER.debug(
        'Transaction delete page accessed using method {}, id={}'.format(request.method, idx),
        request,
        request.POST)
    idx = int(idx) - 1
    debt = getdebt(request)
    if not debt:  # pragma: no cover
        return error(request)
    if idx >= len(debt.transactions):
        raise Http404
    if request.method == 'GET':
        return render(
            request,
            'hjp_transdel.xhtml',
            {'app': APP,
             'page_title': 'Smazání transakce',
             'date': debt.transactions[idx].date})
    else:
        button = getbutton(request)
        if button == 'yes':
            del debt.transactions[idx]
            if not setdebt(request, debt):  # pragma: no cover
                return error(request)
            return redirect('hjp:transdeleted')
        return redirect('hjp:mainpage')
Example #2
0
def procform(request, idx=0):

    LOGGER.debug(
        'Proceedings form accessed using method {}, id={}'.format(
            request.method, idx), request, request.POST)
    err_message = ''
    uid = request.user.id
    uname = request.user.username
    page_title = 'Úprava řízení' if idx else 'Nové řízení'
    button = getbutton(request)
    if request.method == 'GET':
        form = ProcForm(initial=model_to_dict(
            get_object_or_404(Proceedings, pk=idx,
                              uid=uid))) if idx else ProcForm()
    elif button == 'back':
        return redirect('szr:mainpage')
    else:
        form = ProcForm(request.POST)
        if form.is_valid():
            cld = form.cleaned_data
            if not cld['senate']:
                cld['senate'] = 0
            if idx:
                proc = get_object_or_404(Proceedings, pk=idx, uid=uid)
                cld['pk'] = idx
                cld['timestamp_add'] = proc.timestamp_add
            cld['court_id'] = cld['court']
            del cld['court']
            onlydesc = (idx and proc.court.id == cld['court_id']
                        and proc.senate == cld['senate']
                        and proc.register == cld['register']
                        and proc.number == cld['number']
                        and proc.year == cld['year'])
            if onlydesc:
                cld['changed'] = proc.changed
                cld['updated'] = proc.updated
                cld['hash'] = proc.hash
                cld['auxid'] = proc.auxid
                cld['notify'] = proc.notify
            proc = Proceedings(uid_id=uid, **cld)
            if not onlydesc:
                updateproc(proc)
            proc.save()
            LOGGER.info(
                'User "{}" ({:d}) {} proceedings "{}" ({})'.format(
                    uname, uid, 'updated' if idx else 'added', proc.desc,
                    p2s(proc)), request)
            return redirect('szr:mainpage')
        else:  # pragma: no cover
            LOGGER.debug('Invalid form', request)
            err_message = INERR
    return render(
        request, 'szr_procform.xhtml', {
            'app': APP,
            'form': form,
            'page_title': page_title,
            'err_message': err_message
        })
Example #3
0
def debtorform(request, idx=0):

    LOGGER.debug(
        'Debtor form accessed using method {}, id={}'.format(request.method, idx),
        request,
        request.POST)

    err_message = ''
    uid = request.user.id
    uname = request.user.username
    page_title = 'Úprava dlužníka' if idx else 'Nový dlužník'

    button = getbutton(request)
    if request.method == 'GET':
        if idx:
            debtor = model_to_dict(get_object_or_404(Debtor, pk=idx, uid=uid))
            for opt in OPTS:
                debtor[opt] = TEXT_OPTS_KEYS[debtor[opt]]
            if debtor['birthid']:
                debtor['birthid'] = '{}/{}'.format(debtor['birthid'][:6], debtor['birthid'][6:])
            form = DebtorForm(initial=debtor)
        else:
            form = DebtorForm()
    elif button == 'back':
        return redirect('dir:mainpage')
    else:
        form = DebtorForm(request.POST)
        if form.is_valid():
            cld = form.cleaned_data
            if idx:
                debtor = get_object_or_404(Debtor, pk=idx, uid=uid)
                cld['pk'] = idx
                cld['notify'] = debtor.notify
                cld['timestamp_add'] = debtor.timestamp_add
            cld['birthid'] = cld['birthid'].replace('/', '')
            for key in cld:
                if cld[key] == '':
                    cld[key] = None
            debtor = Debtor(uid_id=uid, **cld)
            for opt in OPTS:
                debtor.__setattr__(opt, TEXT_OPTS_KEYS.index(cld[opt]))
            debtor.save()
            LOGGER.info(
                'User "{}" ({:d}) {} debtor {}'.format(uname, uid, 'updated' if idx else 'added', debtor.desc),
                request)
            return redirect('dir:mainpage')
        else:
            LOGGER.debug('Invalid form', request)
            err_message = INERR
    return render(
        request,
        'dir_debtorform.xhtml',
        {'app': APP,
         'form': form,
         'page_title': page_title,
         'err_message': err_message})
Example #4
0
def procform(request, idx=0):

    LOGGER.debug('Proceedings form accessed using method {}, id={}'.format(request.method, idx), request, request.POST)
    err_message = ''
    uid = request.user.id
    uname = request.user.username
    page_title = 'Úprava řízení' if idx else 'Nové řízení'
    button = getbutton(request)
    if request.method == 'GET':
        form = ProcForm(initial=model_to_dict(get_object_or_404(Proceedings, pk=idx, uid=uid))) if idx else ProcForm()
    elif button == 'back':
        return redirect('szr:mainpage')
    else:
        form = ProcForm(request.POST)
        if form.is_valid():
            cld = form.cleaned_data
            if not cld['senate']:
                cld['senate'] = 0
            if idx:
                proc = get_object_or_404(Proceedings, pk=idx, uid=uid)
                cld['pk'] = idx
                cld['timestamp_add'] = proc.timestamp_add
            cld['court_id'] = cld['court']
            del cld['court']
            onlydesc = (
                idx and proc.court.id == cld['court_id'] and proc.senate == cld['senate']
                and proc.register == cld['register'] and proc.number == cld['number'] and proc.year == cld['year'])
            if onlydesc:
                cld['changed'] = proc.changed
                cld['updated'] = proc.updated
                cld['hash'] = proc.hash
                cld['auxid'] = proc.auxid
                cld['notify'] = proc.notify
            proc = Proceedings(uid_id=uid, **cld)
            if not onlydesc:
                updateproc(proc)
            proc.save()
            LOGGER.info(
                'User "{}" ({:d}) {} proceedings "{}" ({})'
                .format(uname, uid, 'updated' if idx else 'added', proc.desc, p2s(proc)),
                request)
            return redirect('szr:mainpage')
        else:  # pragma: no cover
            LOGGER.debug('Invalid form', request)
            err_message = INERR
    return render(
        request,
        'szr_procform.xhtml',
        {'app': APP,
         'form': form,
         'page_title': page_title,
         'err_message': err_message})
Example #5
0
def mainpage(request):

    LOGGER.debug('Main page accessed using method {}'.format(request.method), request, request.POST)

    today = date.today()

    messages = []

    if request.method == 'GET':
        form = MainForm()
    else:
        form = MainForm(request.POST)
        button = getbutton(request)
        if button == 'set_beg_date':
            form.data = form.data.copy()
            form.data['beg_date'] = today
        elif form.is_valid():
            cld = form.cleaned_data
            beg = cld['beg_date']
            preset = cld['preset']
            if preset == 'none':
                dur = cld['dur']
                unit = cld['unit']
            else:
                dur = int(preset[1:])
                unit = preset[0]

            per = Period(beg, dur, unit)

            if per.error:
                messages = [(per.msg, None)]

            else:
                if per.res != per.bus:
                    messages.append(('{} není pracovní den'.format(fdt(per.res)), None))

                messages.append(('{} {}'.format(WD_NAMES[per.bus.weekday()], fdt(per.bus)), 'res'))

                if per.unc:
                    messages.append(('(evidence pracovních dnů v tomto období není úplná)', 'note'))

        else:
            LOGGER.debug('Invalid form', request)
            messages = [(INERR_SHORT, None)]

    return render(request,
                  'lht_mainpage.xhtml',
                  {'app': APP,
                   'page_title': 'Konec lhůty',
                   'messages': messages,
                   'form': form})
Example #6
0
def partyform(request, idx=0):

    LOGGER.debug(
        'Party form accessed using method {}, id={}'.format(
            request.method, idx), request, request.POST)

    err_message = ''
    uid = request.user.id
    uname = request.user.username
    page_title = 'Úprava účastníka' if idx else 'Nový účastník'

    button = getbutton(request)
    if request.method == 'GET':
        if idx:
            dct = model_to_dict(get_object_or_404(Party, pk=idx, uid=uid))
            dct['party_opt'] = TEXT_OPTS_KEYS[dct['party_opt']]
            form = PartyForm(initial=dct)
        else:
            form = PartyForm()
    elif button == 'back':
        return redirect('sur:mainpage')
    else:
        form = PartyForm(request.POST)
        if form.is_valid():
            cld = form.cleaned_data
            if idx:
                res = get_object_or_404(Party, pk=idx, uid=uid)
                cld['pk'] = idx
                cld['notify'] = res.notify
                cld['timestamp_add'] = res.timestamp_add
            res = Party(uid_id=uid, **cld)
            res.party_opt = TEXT_OPTS_KEYS.index(cld['party_opt'])
            res.save()
            LOGGER.info(
                'User "{}" ({:d}) {} party {}'.format(
                    uname, uid, 'updated' if idx else 'added', res.party),
                request)
            return redirect('sur:mainpage')
        else:
            LOGGER.debug('Invalid form', request)
            err_message = INERR
    return render(
        request, 'sur_partyform.xhtml', {
            'app': APP,
            'form': form,
            'min_chars': grammar(MIN_LENGTH, GR_CHAR),
            'page_title': page_title,
            'err_message': err_message
        })
Example #7
0
def partydelall(request):

    LOGGER.debug('Delete all parties page accessed using method {}'.format(request.method), request)
    uid = request.user.id
    uname = request.user.username
    if request.method == 'GET':
        return render(
            request,
            'sur_partydelall.xhtml',
            {'app': APP,
             'page_title': 'Smazání všech účastníků'})
    else:
        if getbutton(request) == 'yes' and 'conf' in request.POST and request.POST['conf'] == 'Ano':
            Party.objects.filter(uid=uid).delete()
            LOGGER.info('User "{}" ({:d}) deleted all parties'.format(uname, uid), request)
        return redirect('sur:mainpage')
Example #8
0
def debtordelall(request):

    LOGGER.debug('Delete all debtors page accessed using method {}'.format(request.method), request)
    uid = request.user.id
    uname = request.user.username
    if request.method == 'GET':
        return render(
            request,
            'dir_debtordelall.xhtml',
            {'app': APP,
             'page_title': 'Smazání všech dlužníků'})
    else:
        if getbutton(request) == 'yes' and 'conf' in request.POST and request.POST['conf'] == 'Ano':
            Debtor.objects.filter(uid=uid).delete()
            LOGGER.info('User "{}" ({:d}) deleted all debtors'.format(uname, uid), request)
        return redirect('dir:mainpage')
Example #9
0
def partyform(request, idx=0):

    LOGGER.debug('Party form accessed using method {}, id={}'.format(request.method, idx), request, request.POST)

    err_message = ''
    uid = request.user.id
    uname = request.user.username
    page_title = 'Úprava účastníka' if idx else 'Nový účastník'

    button = getbutton(request)
    if request.method == 'GET':
        if idx:
            dct = model_to_dict(get_object_or_404(Party, pk=idx, uid=uid))
            dct['party_opt'] = TEXT_OPTS_KEYS[dct['party_opt']]
            form = PartyForm(initial=dct)
        else:
            form = PartyForm()
    elif button == 'back':
        return redirect('sur:mainpage')
    else:
        form = PartyForm(request.POST)
        if form.is_valid():
            cld = form.cleaned_data
            if idx:
                res = get_object_or_404(Party, pk=idx, uid=uid)
                cld['pk'] = idx
                cld['notify'] = res.notify
                cld['timestamp_add'] = res.timestamp_add
            res = Party(uid_id=uid, **cld)
            res.party_opt = TEXT_OPTS_KEYS.index(cld['party_opt'])
            res.save()
            LOGGER.info(
                'User "{}" ({:d}) {} party {}'.format(uname, uid, 'updated' if idx else 'added', res.party),
                request)
            return redirect('sur:mainpage')
        else:
            LOGGER.debug('Invalid form', request)
            err_message = INERR
    return render(
        request,
        'sur_partyform.xhtml',
        {'app': APP,
         'form': form,
         'min_chars': grammar(MIN_LENGTH, GR_CHAR),
         'page_title': page_title,
         'err_message': err_message})
Example #10
0
def insform(request, idx=0):

    LOGGER.debug(
        'Proceedings form accessed using method {}, id={}'.format(
            request.method, idx), request, request.POST)
    err_message = ''
    uid = request.user.id
    uname = request.user.username
    page_title = 'Úprava řízení' if idx else 'Nové řízení'
    button = getbutton(request)
    if request.method == 'GET':
        form = InsForm(initial=model_to_dict(
            get_object_or_404(Insolvency, pk=idx,
                              uid=uid))) if idx else InsForm()
    elif button == 'back':
        return redirect('sir:mainpage')
    else:
        form = InsForm(request.POST)
        if form.is_valid():
            cld = form.cleaned_data
            if idx:
                res = get_object_or_404(Insolvency, pk=idx, uid=uid)
                cld['pk'] = idx
                cld['notify'] = res.notify
                cld['timestamp_add'] = res.timestamp_add
            res = Insolvency(uid_id=uid, **cld)
            res.save()
            LOGGER.info(
                'User "{}" ({:d}) {} proceedings "{}" ({})'.format(
                    uname, uid, 'updated' if idx else 'added', res.desc,
                    p2s(res)), request)
            return redirect('sir:mainpage')
        else:
            LOGGER.debug('Invalid form', request)
            err_message = INERR
    return render(
        request, 'sir_insform.xhtml', {
            'app': APP,
            'form': form,
            'page_title': page_title,
            'err_message': err_message
        })
Example #11
0
def insform(request, idx=0):

    LOGGER.debug(
        'Proceedings form accessed using method {}, id={}'.format(request.method, idx),
        request,
        request.POST)
    err_message = ''
    uid = request.user.id
    uname = request.user.username
    page_title = 'Úprava řízení' if idx else 'Nové řízení'
    button = getbutton(request)
    if request.method == 'GET':
        form = InsForm(initial=model_to_dict(get_object_or_404(Insolvency, pk=idx, uid=uid))) if idx else InsForm()
    elif button == 'back':
        return redirect('sir:mainpage')
    else:
        form = InsForm(request.POST)
        if form.is_valid():
            cld = form.cleaned_data
            if idx:
                res = get_object_or_404(Insolvency, pk=idx, uid=uid)
                cld['pk'] = idx
                cld['notify'] = res.notify
                cld['timestamp_add'] = res.timestamp_add
            res = Insolvency(uid_id=uid, **cld)
            res.save()
            LOGGER.info(
                'User "{}" ({:d}) {} proceedings "{}" ({})'
                .format(uname, uid, 'updated' if idx else 'added', res.desc, p2s(res)),
                request)
            return redirect('sir:mainpage')
        else:
            LOGGER.debug('Invalid form', request)
            err_message = INERR
    return render(
        request,
        'sir_insform.xhtml',
        {'app': APP,
         'form': form,
         'page_title': page_title,
         'err_message': err_message})
Example #12
0
def procdel(request, idx=0):

    LOGGER.debug(
        'Proceedings delete page accessed using method {}, id={}'.format(
            request.method, idx), request, request.POST)
    uid = request.user.id
    uname = request.user.username
    proc = get_object_or_404(Proceedings, pk=idx, uid=uid)
    if request.method == 'GET':
        return render(request, 'szr_procdel.xhtml', {
            'app': APP,
            'page_title': 'Smazání řízení',
            'desc': proc.desc
        })
    else:
        if getbutton(request) == 'yes':
            LOGGER.info(
                'User "{}" ({:d}) deleted proceedings "{}" ({})'.format(
                    uname, uid, proc.desc, p2s(proc)), request)
            proc.delete()
            return redirect('szr:procdeleted')
        return redirect('szr:mainpage')
Example #13
0
def partydel(request, idx=0):

    LOGGER.debug(
        'Party delete page accessed using method {}, id={}'.format(
            request.method, idx), request, request.POST)
    uid = request.user.id
    uname = request.user.username
    party = get_object_or_404(Party, pk=idx, uid=uid)
    if request.method == 'GET':
        return render(request, 'sur_partydel.xhtml', {
            'app': APP,
            'page_title': 'Smazání účastníka',
            'desc': party.party
        })
    else:
        if getbutton(request) == 'yes':
            LOGGER.info(
                'User "{}" ({:d}) deleted party "{}"'.format(
                    uname, uid, party.party), request)
            party.delete()
            return redirect('sur:partydeleted')
        return redirect('sur:mainpage')
Example #14
0
def debtordel(request, idx=0):

    LOGGER.debug(
        'Debtor delete page accessed using method {}, id={}'.format(request.method, idx),
        request,
        request.POST)
    uid = request.user.id
    uname = request.user.username
    debtor = get_object_or_404(Debtor, pk=idx, uid=uid)
    if request.method == 'GET':
        return render(
            request,
            'dir_debtordel.xhtml',
            {'app': APP,
             'page_title': 'Smazání dlužníka',
             'desc': debtor.desc})
    else:
        if getbutton(request) == 'yes':
            LOGGER.info('User "{}" ({:d}) deleted debtor "{}"'.format(uname, uid, debtor.desc), request)
            debtor.delete()
            return redirect('dir:debtordeleted')
        return redirect('dir:mainpage')
Example #15
0
def partydel(request, idx=0):

    LOGGER.debug(
        'Party delete page accessed using method {}, id={}'.format(request.method, idx),
        request,
        request.POST)
    uid = request.user.id
    uname = request.user.username
    party = get_object_or_404(Party, pk=idx, uid=uid)
    if request.method == 'GET':
        return render(
            request,
            'sur_partydel.xhtml',
            {'app': APP,
             'page_title': 'Smazání účastníka',
             'desc': party.party})
    else:
        if getbutton(request) == 'yes':
            LOGGER.info('User "{}" ({:d}) deleted party "{}"'.format(uname, uid, party.party), request)
            party.delete()
            return redirect('sur:partydeleted')
        return redirect('sur:mainpage')
Example #16
0
def insdel(request, idx=0):

    LOGGER.debug(
        'Proceedings delete page accessed using method {}, id={}'.format(request.method, idx),
        request,
        request.POST)
    uid = request.user.id
    uname = request.user.username
    ins = get_object_or_404(Insolvency, pk=idx, uid=uid)
    if request.method == 'GET':
        return render(
            request,
            'sir_insdel.xhtml',
            {'app': APP,
             'page_title': 'Smazání řízení',
             'desc': ins.desc})
    else:
        if getbutton(request) == 'yes':
            LOGGER.info(
                'User "{}" ({:d}) deleted proceedings "{}" ({})'.format(uname, uid, ins.desc, p2s(ins)),
                request)
            ins.delete()
            return redirect('sir:insdeleted')
        return redirect('sir:mainpage')
Example #17
0
def mainpage(request):

    LOGGER.debug('Main page accessed using method {}'.format(request.method),
                 request, request.POST)

    messages = []

    if request.method == 'GET':
        form = MainForm()
    else:
        dual = getbutton(request) == 'dual'
        form = MainForm(request.POST)
        if form.is_valid():
            cld = form.cleaned_data
            netincome = cld['netincome']
            deps = cld['deps']
            if cld['partner'] or dual:
                deps += 1
            subs = cld['subs']
            apt = cld['apt']
            vat = cld['vat']
            if vat:
                vatrate = float(cld['vatrate'])
            if dual:
                netincome2 = cld['netincome2']
                deps2 = cld['deps2'] + 1
                fee = cld['fee2']
                exp = cld['exp2']
                messages.append(
                    ('Kalkulace pro společný návrh manželů', 'header'))
            else:
                fee = cld['fee']
                exp = cld['exp']
                messages.append(
                    ('Kalkulace pro samostatného dlužníka', 'header'))
            lim = subs + apt
            prot = lim * 2 / 3
            messages.append(
                ('Nezabavitelná částka: {} Kč'.format(famt(round(prot))),
                 None))
            basis1 = ceil(prot * (1 + (deps / 4)))
            rem = max(netincome - basis1, 0)
            if rem > lim:
                rep = rem - lim
                rem = lim
            else:
                rep = 0
            rem = (rem // 3) * 3
            rep += (rem * 2) // 3
            if dual:
                totnetincome = netincome + netincome2
                basis2 = ceil(prot * (1 + (deps2 / 4)))
                messages.append(
                    ('Celková základní částka pro 1. manžela: {} Kč'.format(
                        famt(round(basis1))), None))
                messages.append(
                    ('Celková základní částka pro 2. manžela: {} Kč'.format(
                        famt(round(basis2))), None))
                rem2 = max(netincome2 - basis2, 0)
                if rem2 > lim:
                    rep2 = rem2 - lim
                    rem2 = lim
                else:
                    rep2 = 0
                rem2 = (rem2 // 3) * 3
                rep2 += (rem2 * 2) // 3
                rep += rep2
            else:
                totnetincome = netincome
                messages.append(('Celková základní částka: {} Kč'.format(
                    famt(round(basis1))), None))
            messages.append(
                ('Výše měsíční splátky: {} Kč'.format(famt(round(rep))),
                 'gap'))
            messages.append(('Zůstatek ze mzdy: {} Kč'.format(
                famt(round(totnetincome - rep))), None))
            tru = fee + exp
            if vat:
                tru *= 1 + (vatrate / 100)
            messages.append(
                ('Měsíční poplatky insolvenčnímu správci: {} Kč'.format(
                    famt(round(tru))), None))
            rep = max(rep - tru, 0)
            messages.append(
                ('Měsíční splátka věřitelům: {} Kč'.format(famt(round(rep))),
                 None))
            tot = 5 * 12 * rep
            messages.append(
                ('Celková výše splátek věřitelům za 5 let: {} Kč'.format(
                    famt(round(tot))), None))
            messages.append(('Pohledávky uspokojené do výše 30 %:', 'gap'))
            messages.append(('{} Kč'.format(famt(round(tot / .3))), 'total'))
        else:
            LOGGER.debug('Invalid form', request)
            messages = [(INERR_SHORT, None)]

    return render(
        request, 'kos_mainpage.xhtml', {
            'app': APP,
            'page_title': 'Kalkulace splátek při oddlužení',
            'messages': messages,
            'form': form
        })
Example #18
0
def mainpage(request):

    LOGGER.debug('Main page accessed using method {}'.format(request.method), request, request.POST)

    today = date.today()
    messages = []

    if request.method == 'GET':
        form = MainForm()
    else:
        form = MainForm(request.POST)
        button = getbutton(request)
        if button in {'set_beg_date', 'set_end_date'}:
            unrequire(form, ('beg_date', 'end_date'))
            form.data = form.data.copy()
            form.data['{}_date'.format(button[4:7])] = today
        elif form.is_valid():
            cld = form.cleaned_data
            beg_date = cld['beg_date']
            end_date = cld['end_date']
            if beg_date >= end_date:
                messages.append(('Počátek musí předcházet konci', None))
            else:
                messages.append(('{} → {}'.format(fdt(beg_date), fdt(end_date)), 'header'))

                messages.append((grammar((end_date - beg_date).days, GR_DAY), None))

                if beg_date >= UNC_DATE:
                    temp = beg_date + ODP
                    num = 0
                    while temp <= end_date:
                        if not holiday(temp):
                            num += 1
                        temp += ODP
                    messages.append((grammar(num, GR_BUSDAY), None))

                nyear = nmonth = nday = 0
                while True:
                    temp = ply(beg_date, nyear + 1)
                    if temp > end_date:
                        break
                    nyear += 1
                res = ply(beg_date, nyear)
                while True:
                    temp = plm(res, nmonth + 1)
                    if temp > end_date:
                        break
                    nmonth += 1
                res = plm(res, nmonth)
                while res < end_date:
                    res += ODP
                    nday += 1
                messages.append(
                    ('{} {} {}'.format(grammar(nyear, GR_YEAR), grammar(nmonth, GR_MONTH), grammar(nday, GR_DAY)),
                     'ymd'))

                for dconv in YDCONVS:
                    messages.append(
                        ('{:.6f} let ({})'.format(LocalFloat(yfactor(beg_date, end_date, dconv)), dconv),
                         'year'))

                for dconv in MDCONVS:
                    if dconv == MDCONVS[0]:
                        messages.append(
                            ('{:.6f} měsíců ({})'.format(LocalFloat(mfactor(beg_date, end_date, dconv)), dconv),
                             'month1'))
                    else:
                        messages.append(
                            ('{:.6f} měsíců ({})'.format(LocalFloat(mfactor(beg_date, end_date, dconv)), dconv),
                             'month2'))

        else:
            LOGGER.debug('Invalid form', request)
            messages = [(INERR_SHORT, None)]

    return render(
        request,
        'cin_mainpage.xhtml',
        {'app': APP,
         'form': form,
         'messages': messages,
         'page_title': 'Délka časového intervalu'})
Example #19
0
def mainpage(request):

    LOGGER.debug('Main page accessed using method {}'.format(request.method), request, request.POST)

    rate_desc = {
        'DISC': 'Diskontní sazba',
        'LOMB': 'Lombardní sazba',
        'REPO': 'Repo sazba pro dvoutýdenní operace',
    }
    messages = []
    today = date.today()
    AmountField.rounding = 2

    if request.method == 'GET':
        form = MainForm()
    else:
        form = MainForm(request.POST)
        button = getbutton(request)
        if button in {'set_fx_date', 'set_mpi_date'}:
            unrequire(form, ('fx_date', 'basis', 'mpi_date'))
            form.data = form.data.copy()
            if button == 'set_fx_date':
                form.data['fx_date'] = today
            else:
                form.data['mpi_date'] = today
        else:
            fxr = button in {'show_fx', 'conv_from', 'conv_to'}
            if button == 'show_fx':
                unrequire(form, ('basis', 'mpi_date'))
            elif fxr:
                unrequire(form, ('mpi_date',))
            else:
                unrequire(form, ('fx_date', 'basis'))
            if form.is_valid():
                cld = form.cleaned_data
                if fxr:
                    curr = cld['curr']
                    fx_date = cld['fx_date']
                    rate, qty, dreq, msg = get_fx_rate(curr, fx_date)
                    if msg:
                        messages = [(msg, None)]
                    elif button == 'show_fx':
                        messages.append(
                            ('{:d} {} = {:.3f} CZK'.format(qty, curr, LocalFloat(rate)),
                             'res1'))
                        messages.append(
                            ('(Kurs vyhlášený ke dni: {})'.format(fdt(dreq)),
                             'note'))
                    else:
                        basis = cld['basis']
                        if button == 'conv_from':
                            messages.append(
                                ('{} {} = {} CZK'.format(famt(basis), curr, famt(basis * rate / qty)),
                                 'res2'))
                        else:
                            messages.append(
                                ('{} CZK = {} {}'.format(famt(basis), famt(basis * qty / rate), curr),
                                 'res2'))
                        messages.append(
                            ('{:d} {} = {:.3f} CZK'.format(qty, curr, LocalFloat(rate)),
                             None))
                        messages.append(
                            ('(Kurs vyhlášený ke dni: {})'.format(fdt(dreq)),
                             'note'))
                else:
                    mpi_date = cld['mpi_date']
                    rate, msg = get_mpi_rate(button, mpi_date)
                    if msg:
                        messages = [(msg, None)]
                    else:
                        messages.append(
                            ('{} platná ke dni {}:'.format(rate_desc[button], fdt(mpi_date)),
                             None))
                        messages.append(
                            ('{:.2f} %'.format(LocalFloat(rate)),
                             'res0'))
            else:
                LOGGER.debug('Invalid form', request)
                messages = [(INERR_SHORT, None)]

    return render(
        request,
        'cnb_mainpage.xhtml',
        {'app': APP,
         'form': form,
         'messages': messages,
         'page_title': 'Kursy a sazby ČNB'})
Example #20
0
def mainpage(request):

    LOGGER.debug('Main page accessed using method {}'.format(request.method),
                 request, request.POST)

    today = date.today()
    messages = []

    if request.method == 'GET':
        form = MainForm()
    else:
        form = MainForm(request.POST)
        button = getbutton(request)
        if button in {'set_beg_date', 'set_end_date'}:
            unrequire(form, ('beg_date', 'end_date'))
            form.data = form.data.copy()
            form.data['{}_date'.format(button[4:7])] = today
        elif form.is_valid():
            cld = form.cleaned_data
            beg_date = cld['beg_date']
            end_date = cld['end_date']
            if beg_date >= end_date:
                messages.append(('Počátek musí předcházet konci', None))
            else:
                messages.append(('{} → {}'.format(fdt(beg_date),
                                                  fdt(end_date)), 'header'))

                messages.append((grammar((end_date - beg_date).days,
                                         GR_DAY), None))

                if beg_date >= UNC_DATE:
                    temp = beg_date + ODP
                    num = 0
                    while temp <= end_date:
                        if not holiday(temp):
                            num += 1
                        temp += ODP
                    messages.append((grammar(num, GR_BUSDAY), None))

                nyear = nmonth = nday = 0
                while True:
                    temp = ply(beg_date, nyear + 1)
                    if temp > end_date:
                        break
                    nyear += 1
                res = ply(beg_date, nyear)
                while True:
                    temp = plm(res, nmonth + 1)
                    if temp > end_date:
                        break
                    nmonth += 1
                res = plm(res, nmonth)
                while res < end_date:
                    res += ODP
                    nday += 1
                messages.append(('{} {} {}'.format(grammar(nyear, GR_YEAR),
                                                   grammar(nmonth, GR_MONTH),
                                                   grammar(nday,
                                                           GR_DAY)), 'ymd'))

                for dconv in YDCONVS:
                    messages.append(('{:.6f} let ({})'.format(
                        LocalFloat(yfactor(beg_date, end_date, dconv)),
                        dconv), 'year'))

                for dconv in MDCONVS:
                    if dconv == MDCONVS[0]:
                        messages.append(('{:.6f} měsíců ({})'.format(
                            LocalFloat(mfactor(beg_date, end_date, dconv)),
                            dconv), 'month1'))
                    else:
                        messages.append(('{:.6f} měsíců ({})'.format(
                            LocalFloat(mfactor(beg_date, end_date, dconv)),
                            dconv), 'month2'))

        else:
            LOGGER.debug('Invalid form', request)
            messages = [(INERR_SHORT, None)]

    return render(
        request, 'cin_mainpage.xhtml', {
            'app': APP,
            'form': form,
            'messages': messages,
            'page_title': 'Délka časového intervalu'
        })
Example #21
0
def debtorbatchform(request):

    LOGGER.debug('Debtor import page accessed using method {}'.format(request.method), request)

    err_message = ''
    uid = request.user.id
    uname = request.user.username

    if request.method == 'POST':
        button = getbutton(request)

        if button == 'load':
            infile = request.FILES.get('load')
            if not infile:
                err_message = 'Nejprve zvolte soubor k načtení'
            else:
                errors = []
                try:
                    count = 0
                    with infile:
                        idx = 0
                        for line in csvreader(StringIO(infile.read().decode())):
                            idx += 1
                            errlen = len(errors)
                            if not line:
                                continue
                            desc = line[0].strip()
                            court = name = first_name = genid = taxid = birthid = date_birth = year_birth_from \
                                = year_birth_to = None
                            name_opt = first_name_opt = 0
                            if not desc:
                                errors.append((idx, 'Prázdný popis'))
                                continue
                            if len(desc) > 255:
                                errors.append((idx, 'Příliš dlouhý popis'))
                                continue
                            for term in line[1:]:
                                if '=' not in term:
                                    errors.append((idx, 'Chybný formát'))
                                    continue
                                key, val = map(
                                    lambda x: x.strip(),
                                    term.split('=', 1))
                                if not val:
                                    continue
                                if key == 'soud':
                                    court = val
                                elif key == 'název':
                                    if ':' in val:
                                        name, name_opt = val.split(':', 1)
                                        if name_opt not in TEXT_OPTS_ABBR:
                                            errors.append((idx, 'Chybná zkratka pro posici v poli <q>název</q>'))
                                            continue
                                        name_opt = TEXT_OPTS_AI[name_opt]
                                    else:
                                        name = val
                                        name_opt = 0
                                    if len(name) > MAX_LENGTH:
                                        errors.append((idx, 'Příliš dlouhé pole <q>název</q>'))
                                        continue
                                elif key == 'jméno':
                                    if ':' in val:
                                        first_name, first_name_opt = val.split(':', 1)
                                        if first_name_opt not in TEXT_OPTS_ABBR:
                                            errors.append((idx, 'Chybná zkratka pro posici v poli <q>jméno</q>'))
                                            continue
                                        first_name_opt = TEXT_OPTS_AI[first_name_opt]
                                    else:
                                        first_name = val
                                        first_name_opt = 0
                                    if len(first_name) > MAX_LENGTH:
                                        errors.append((idx, 'Příliš dlouhé pole <q>jméno</q>'))
                                        continue
                                elif key == 'IČO':
                                    if not compile(IC_RE_STR).match(val):
                                        errors.append((idx, 'Chybná hodnota pro IČO'))
                                        continue
                                    genid = val
                                elif key == 'DIČ':
                                    if len(val) > 14:
                                        errors.append((idx, 'Chybná hodnota pro DIČ'))
                                        continue
                                    taxid = val
                                elif key == 'RČ':
                                    if not compile(RC_FULL_RE_STR).match(val):
                                        errors.append((idx, 'Chybná hodnota pro rodné číslo'))
                                        continue
                                    birthid = val.replace('/', '')
                                elif key == 'datumNarození':
                                    try:
                                        date_birth = date(*map(int, val.split('.')[2::-1]))
                                        assert date_birth.year >= 1900
                                    except:
                                        errors.append((idx, 'Chybná hodnota pro datum narození'))
                                        continue
                                elif key == 'rokNarozeníOd':
                                    try:
                                        year_birth_from = int(val)
                                        assert year_birth_from >= 1900
                                    except:
                                        errors.append((idx, 'Chybná hodnota pro pole <q>rokNarozeníOd</q>'))
                                        continue
                                elif key == 'rokNarozeníDo':
                                    try:
                                        year_birth_to = int(val)
                                        assert year_birth_to >= 1900
                                    except:
                                        errors.append((idx, 'Chybná hodnota pro pole <q>rokNarozeníDo</q>'))
                                        continue
                                else:
                                    errors.append((idx, 'Chybný parametr: "{}"'.format(key)))
                                    continue
                                if year_birth_from and year_birth_to and year_birth_from > year_birth_to:
                                    errors.append((idx, 'Chybný interval pro rok narození'))
                                    continue

                            if len(errors) == errlen:
                                try:
                                    Debtor.objects.update_or_create(
                                        uid_id=uid,
                                        desc=desc,
                                        defaults={
                                            'court': court,
                                            'name': name,
                                            'name_opt': name_opt,
                                            'first_name': first_name,
                                            'first_name_opt': first_name_opt,
                                            'genid': genid,
                                            'taxid': taxid,
                                            'birthid': birthid,
                                            'date_birth': date_birth,
                                            'year_birth_from': year_birth_from,
                                            'year_birth_to': year_birth_to}
                                    )
                                except:
                                    errors.append((idx, 'Popisu "{}" odpovídá více než jeden dlužník'.format(desc)))
                                    continue
                                count += 1
                    LOGGER.info('User "{}" ({:d}) imported {:d} debtor(s)'.format(uname, uid, count), request)
                    return render(
                        request,
                        'dir_debtorbatchresult.xhtml',
                        {'app': APP,
                         'page_title': 'Import dlužníků ze souboru',
                         'count': count,
                         'errors': errors})

                except:  # pragma: no cover
                    LOGGER.error('Error reading file', request)
                    err_message = 'Chyba při načtení souboru'
        else:
            LOGGER.debug('Invalid form', request)
            err_message = INERR

    return render(
        request,
        'dir_debtorbatchform.xhtml',
        {'app': APP,
         'page_title': 'Import dlužníků ze souboru',
         'err_message': err_message})
Example #22
0
def partybatchform(request):

    LOGGER.debug(
        'Party import page accessed using method {}'.format(request.method),
        request)

    err_message = ''
    uid = request.user.id
    uname = request.user.username

    if request.method == 'POST':
        button = getbutton(request)

        if button == 'load':
            infile = request.FILES.get('load')
            if not infile:
                err_message = 'Nejprve zvolte soubor k načtení'
            else:
                errors = []
                try:
                    count = 0
                    with infile:
                        idx = 0
                        for line in csvreader(StringIO(
                                infile.read().decode())):
                            idx += 1
                            errlen = len(errors)
                            if not line:
                                continue
                            line = line[0].strip()
                            if ':' in line:
                                line, party_opt = line.split(':', 1)
                            else:
                                party_opt = '*'
                            if not between(MIN_LENGTH, len(line), MAX_LENGTH):
                                errors.append((idx, 'Chybná délka řetězce'))
                                continue
                            if party_opt not in TEXT_OPTS_ABBR:
                                errors.append(
                                    (idx, 'Chybná zkratka pro posici'))
                                continue
                            if len(errors) == errlen:
                                try:
                                    Party.objects.update_or_create(
                                        uid_id=uid,
                                        party=line,
                                        defaults={
                                            'party_opt':
                                            TEXT_OPTS_AI[party_opt]
                                        })
                                except:
                                    errors.append((
                                        idx,
                                        'Řetězci "{}" odpovídá více než jeden účastník'
                                        .format(line)))
                                    continue
                                count += 1
                    LOGGER.info(
                        'User "{}" ({:d}) imported {} party/ies'.format(
                            uname, uid, count), request)
                    return render(
                        request, 'sur_partybatchresult.xhtml', {
                            'app': APP,
                            'page_title': 'Import účastníků řízení ze souboru',
                            'count': count,
                            'errors': errors
                        })

                except:  # pragma: no cover
                    LOGGER.error('Error reading file', request)
                    err_message = 'Chyba při načtení souboru'
        else:
            LOGGER.debug('Invalid form', request)
            err_message = INERR

    return render(
        request, 'sur_partybatchform.xhtml', {
            'app': APP,
            'page_title': 'Import účastníků řízení ze souboru',
            'err_message': err_message,
            'min_length': MIN_LENGTH,
            'max_length': MAX_LENGTH
        })
Example #23
0
def insbatchform(request):

    LOGGER.debug(
        'Proceedings import page accessed using method {}'.format(
            request.method), request)

    err_message = ''
    uid = request.user.id
    uname = request.user.username

    if request.method == 'POST':
        button = getbutton(request)

        if button == 'load':
            infile = request.FILES.get('load')
            if not infile:
                err_message = 'Nejprve zvolte soubor k načtení'
            else:
                errors = []
                try:
                    count = 0
                    with infile:
                        idx = 0
                        for line in csvreader(StringIO(
                                infile.read().decode())):
                            idx += 1
                            errlen = len(errors)
                            if not line:
                                continue
                            desc = line[0].strip()
                            if not desc:
                                errors.append((idx, 'Prázdný popis'))
                                continue
                            if len(desc) > 255:
                                errors.append((idx, 'Příliš dlouhý popis'))
                                continue
                            try:
                                number = int(line[1])
                                assert number > 0
                            except:
                                errors.append((idx, 'Chybné běžné číslo'))
                                continue
                            try:
                                year = int(line[2])
                                assert year >= 2008
                            except:
                                errors.append((idx, 'Chybný ročník'))
                                continue
                            detailed = line[3].strip()
                            if detailed == 'ano':
                                detailed = True
                            elif detailed == 'ne':
                                detailed = False
                            else:
                                errors.append(
                                    (idx, 'Chybný údaj pro pole Vše'))
                                continue

                            if len(errors) == errlen:
                                try:
                                    Insolvency.objects.update_or_create(
                                        uid_id=uid,
                                        desc=desc,
                                        defaults={
                                            'number': number,
                                            'year': year,
                                            'detailed': detailed
                                        })
                                except:
                                    errors.append((
                                        idx,
                                        'Popisu "{}" odpovídá více než jedno řízení'
                                        .format(desc)))
                                    continue
                                count += 1
                    LOGGER.info(
                        'User "{}" ({:d}) imported {:d} proceedings'.format(
                            uname, uid, count), request)
                    return render(
                        request, 'sir_insbatchresult.xhtml', {
                            'app': APP,
                            'page_title': 'Import řízení ze souboru',
                            'count': count,
                            'errors': errors
                        })

                except:  # pragma: no cover
                    LOGGER.error('Error reading file', request)
                    err_message = 'Chyba při načtení souboru'

    return render(
        request, 'sir_insbatchform.xhtml', {
            'app': APP,
            'page_title': 'Import řízení ze souboru',
            'err_message': err_message
        })
Example #24
0
def mainpage(request):

    LOGGER.debug('Main page accessed using method {}'.format(request.method), request, request.POST)

    def cellam(amt, slb=False):
        amt = (float(amt) if debt.rounding else int(round(amt)))
        suf = 's' if slb else ''
        if abs(amt) < LIM:
            return '<td class="cr{}"></td>'.format(suf)
        if amt > 0:
            return '<td class="cr{}">{}</td>'.format(suf, famt(amt))
        return '<td class="dr{}">{}</td>'.format(suf, famt(-amt))

    def lfamt(amt):
        return '{} {}'.format(
            famt(round(amt, debt.rounding) if debt.rounding
            else int(round(amt))).replace('-', '−'), dispcurr(debt.currency))

    err_message = ''
    rows_err = False

    if request.method == 'GET':
        debt = getdebt(request)
        if not debt:  # pragma: no cover
            return error(request)
        debt.rates = {}

        rows = getrows(debt)
        for row in rows:
            if row['err']:
                rows_err = True
                break

        var = {'title': debt.title,
               'note': debt.note,
               'internal_note': debt.internal_note,
               'currency': debt.currency,
               'rounding': str(debt.rounding)}
        interest = debt.interest
        var['model'] = model = interest.model
        if model == 'fixed':
            var['fixed_amount'] = '{:.2f}'.format(LocalFloat(
                interest.fixed_amount)) if debt.rounding else int(round(interest.fixed_amount))
        elif model == 'per_annum':
            var['pa_rate'] = interest.rate
            var['ydconv'] = interest.day_count_convention
        elif model == 'per_mensem':
            var['pm_rate'] = interest.rate
            var['mdconv'] = interest.day_count_convention
        elif model == 'per_diem':
            var['pd_rate'] = interest.rate

        form = MainForm(initial=var)

    else:
        button = getbutton(request)

        if button == 'empty':
            debt = Debt()
            if not setdebt(request, debt):  # pragma: no cover
                return error(request)
            return redirect('hjp:mainpage')

        if button == 'load':
            infile = request.FILES.get('load')
            if not infile:
                err_message = 'Nejprve zvolte soubor k načtení'
            else:
                try:
                    dat = infile.read()
                    infile.close()
                    debt, msg = from_xml(dat)
                    if msg:
                        raise Exception('Error reading file')
                    setdebt(request, debt)
                    return redirect('hjp:mainpage')
                except:
                    err_message = 'Chyba při načtení souboru'

        debt = getdebt(request)
        if not debt:  # pragma: no cover
            return error(request)
        debt.rates = {}
        rows = getrows(debt)
        for row in rows:
            if row['err']:
                rows_err = True
                break

        form = MainForm(request.POST)
        if form.is_valid():
            cld = form.cleaned_data
            debt.title = cld['title'].strip()
            debt.note = cld['note'].strip()
            debt.internal_note = cld['internal_note'].strip()
            debt.currency = cld['currency']
            debt.rounding = int(cld['rounding'])
            interest = Interest()
            debt.interest = interest
            interest.model = model = cld['model']
            if model == 'fixed':
                interest.fixed_amount = float(cld['fixed_amount'])
            elif model == 'per_annum':
                interest.rate = float(cld['pa_rate'])
                interest.day_count_convention = cld['ydconv']
            elif model == 'per_mensem':
                interest.rate = float(cld['pm_rate'])
                interest.day_count_convention = cld['mdconv']
            elif model == 'per_diem':
                interest.rate = float(cld['pd_rate'])
            setdebt(request, debt)

            if not button and cld['next']:
                return redirect(cld['next'])

            if button == 'xml':
                response = HttpResponse(
                    to_xml(debt),
                    content_type='text/xml; charset=utf-8')
                response['Content-Disposition'] = 'attachment; filename=Pohledavka.xml'
                return response

            if button == 'csv' and not rows_err:
                response = HttpResponse(content_type='text/csv; charset=utf-8')
                response['Content-Disposition'] = 'attachment; filename=Pohledavka.csv'
                writer = csv.writer(response)
                writer.writerow(
                    ('Datum',
                     'Popis',
                     'Přednost',
                     'Pohyb',
                     'Předchozí zůstatek/jistina',
                     'Předchozí zůstatek/úrok',
                     'Předchozí zůstatek/celkem',
                     'Započteno/jistina',
                     'Započteno/úrok',
                     'Nový zůstatek/jistina',
                     'Nový zůstatek/úrok',
                     'Nový zůstatek/celkem'))
                for row in rows:
                    writer.writerow(
                        (row['date'].isoformat(),
                         row['description'],
                         row.get('rep', ''),
                         '{:.2f}'.format(normfl(row['change'])),
                         '{:.2f}'.format(normfl(row['pre_principal'])),
                         '{:.2f}'.format(normfl(row['pre_interest'])),
                         '{:.2f}'.format(normfl(row['pre_total'])),
                         '{:.2f}'.format(normfl(row['change_principal'])),
                         '{:.2f}'.format(normfl(row['change_interest'])),
                         '{:.2f}'.format(normfl(row['post_principal'])),
                         '{:.2f}'.format(normfl(row['post_interest'])),
                         '{:.2f}'.format(normfl(row['post_total']))))
                return response

            if button == 'pdf':

                register_fonts()

                style1 = ParagraphStyle(
                    name='STYLE1',
                    fontName='Bookman',
                    fontSize=8,
                    leading=9,
                    alignment=TA_RIGHT,
                    allowWidows=False,
                    allowOrphans=False)

                style2 = ParagraphStyle(
                    name='STYLE2',
                    fontName='BookmanB',
                    fontSize=10,
                    leading=11,
                    alignment=TA_RIGHT,
                    allowWidows=False,
                    allowOrphans=False)

                style4 = ParagraphStyle(
                    name='STYLE4',
                    fontName='BookmanB',
                    fontSize=8,
                    leading=10,
                    allowWidows=False,
                    allowOrphans=False)

                style12 = ParagraphStyle(
                    name='STYLE12',
                    fontName='BookmanI',
                    fontSize=8,
                    leading=9,
                    spaceBefore=4,
                    spaceAfter=5,
                    leftIndent=8,
                    allowWidows=False,
                    allowOrphans=False)

                style13 = ParagraphStyle(
                    name='STYLE13',
                    fontName='Bookman',
                    fontSize=8,
                    leading=12,
                    alignment=TA_CENTER,
                    allowWidows=False,
                    allowOrphans=False)

                style14 = ParagraphStyle(
                    name='STYLE14',
                    fontName='BookmanB',
                    fontSize=8,
                    leading=12,
                    allowWidows=False,
                    allowOrphans=False)

                style15 = ParagraphStyle(
                    name='STYLE15',
                    fontName='BookmanB',
                    fontSize=8,
                    leading=10,
                    alignment=TA_CENTER,
                    allowWidows=False,
                    allowOrphans=False)

                style16 = ParagraphStyle(
                    name='STYLE16',
                    fontName='Bookman',
                    fontSize=8,
                    leading=10,
                    alignment=TA_CENTER,
                    allowWidows=False,
                    allowOrphans=False)

                style17 = ParagraphStyle(
                    name='STYLE17',
                    fontName='BookmanB',
                    fontSize=8,
                    leading=10,
                    alignment=TA_RIGHT,
                    allowWidows=False,
                    allowOrphans=False)

                style18 = ParagraphStyle(
                    name='STYLE18',
                    fontName='Bookman',
                    fontSize=8,
                    leading=10,
                    allowWidows=False,
                    allowOrphans=False)

                style19 = ParagraphStyle(
                    name='STYLE19',
                    fontName='Bookman',
                    fontSize=8,
                    leading=10,
                    allowWidows=False,
                    allowOrphans=False)

                style20 = ParagraphStyle(
                    name='STYLE20',
                    fontName='Bookman',
                    fontSize=8,
                    leading=10,
                    leftIndent=8,
                    allowWidows=False,
                    allowOrphans=False)

                style21 = ParagraphStyle(
                    name='STYLE21',
                    fontName='Bookman',
                    fontSize=8,
                    leading=10,
                    leftIndent=16,
                    allowWidows=False,
                    allowOrphans=False)

                style22 = ParagraphStyle(
                    name='STYLE22',
                    fontName='BookmanI',
                    fontSize=8,
                    leading=10,
                    alignment=TA_CENTER,
                    allowWidows=False,
                    allowOrphans=False)

                doc1 = (([Paragraph('Historie peněžité pohledávky'.upper(), style1)],),)
                if debt.title:
                    doc1[0][0].append(Paragraph(escape(debt.title), style2))
                table1 = Table(doc1, colWidths=(483.3,))
                table1.setStyle(
                    TableStyle((
                        ('LINEABOVE', (0, 0), (0, -1), 1.0, black),
                        ('TOPPADDING', (0, 0), (0, -1), 2),
                        ('LINEBELOW', (-1, 0), (-1, -1), 1.0, black),
                        ('BOTTOMPADDING', (-1, 0), (-1, -1), 3),
                        ('LEFTPADDING', (0, 0), (-1, -1), 2),
                        ('RIGHTPADDING', (0, 0), (-1, -1), 2),
                    )))
                flow = [table1, Spacer(0, 36)]

                wid = 483.3
                widl = 8
                widr = 8
                widg = 12
                widf = widc = (wid - widl - widr - (widg * 2)) / 6
                cwid = (
                    (widl,) + ((widc / 5,) * 5) + ((widf / 5,) * 5) + (widg,) + ((widc / 5,) * 5)
                    + ((widf / 5,) * 5) + (widg,) + ((widc / 5,) * 5) + ((widf / 5,) * 5) + (widr,))

                thickness = .5

                res = [Paragraph(('<b>Měna:</b> {}'.format(debt.currency)),
                    style19)]
                if hasattr(debt, 'default_date') and debt.default_date:
                    res.append(Paragraph('<b>První den prodlení:</b> {:%d.%m.%Y}'.format(debt.default_date), style19))
                interest2 = None
                interest3 = []
                if debt.interest.model == 'none':
                    interest1 = 'bez úroku'
                elif debt.interest.model == 'fixed':
                    interest1 = 'pevnou částkou {}'.format(lfamt(debt.interest.fixed_amount))
                elif debt.interest.model == 'per_annum':
                    interest1 = (
                        'pevnou sazbou {0.rate:n} % <i>p. a.</i>, konvence pro počítání dnů: {0.day_count_convention}'
                        .format(debt.interest))
                elif debt.interest.model == 'per_mensem':
                    interest1 = (
                        'pevnou sazbou {0.rate:n} % <i>p. m.</i>, konvence pro počítání dnů: {0.day_count_convention}'
                        .format(debt.interest))
                elif debt.interest.model == 'per_diem':
                    interest1 = 'pevnou sazbou {:n} ‰ <i>p. d.</i>'.format(debt.interest.rate)
                elif debt.interest.model == 'cust1':
                    interest1 = 'úrok z prodlení podle nařízení č. 142/1994 Sb. (účinnost do 27.04.2005)'
                    if debt.rates:
                        rate = debt.rates.popitem()
                        interest2 = (
                            'Diskontní sazba ČNB ke dni {:%d.%m.%Y}: {:.2f} % <i>p. a.</i>'
                            .format(rate[0], LocalFloat(rate[1])))
                elif debt.interest.model == 'cust2':
                    interest1 = 'úrok z prodlení podle nařízení č. 142/1994 Sb. (účinnost od 28.04.2005 do 30.06.2010)'
                    if len(debt.rates) == 1:
                        rate = debt.rates.popitem()
                        interest2 = (
                            'Použita 2T repo sazba ČNB ke dni {:%d.%m.%Y}: {:.2f} % <i>p. a.</i>'
                            .format(rate[0], LocalFloat(rate[1])))
                    elif len(debt.rates) > 1:
                        interest2 = 'Použity následující 2T repo sazby ČNB:'
                        for dat in sorted(debt.rates.keys()):
                            interest3.append(
                                '– ke dni {:%d.%m.%Y}: {:.2f} % <i>p. a.</i>'.format(dat, LocalFloat(debt.rates[dat])))
                elif debt.interest.model == 'cust3':
                    interest1 = 'úrok z prodlení podle nařízení č. 142/1994 Sb. (účinnost od 01.07.2010 do 30.06.2013)'
                    if debt.rates:
                        rate = debt.rates.popitem()
                        interest2 = (
                            '2T repo sazba ČNB ke dni {:%d.%m.%Y}: {:.2f} % <i>p. a.</i>'
                            .format(rate[0], LocalFloat(rate[1])))
                elif debt.interest.model == 'cust5':
                    interest1 = 'úrok z prodlení podle nařízení č. 142/1994 Sb. (účinnost od 01.07.2013 do 31.12.2013)'
                    if debt.rates:
                        rate = debt.rates.popitem()
                        interest2 = (
                            '2T repo sazba ČNB ke dni {:%d.%m.%Y}: {:.2f} % <i>p. a.</i>'
                            .format(rate[0], LocalFloat(rate[1])))
                elif debt.interest.model == 'cust6':
                    interest1 = 'úrok z prodlení podle nařízení č. 351/2013 Sb.'
                    if debt.rates:
                        rate = debt.rates.popitem()
                        interest2 = (
                            '2T repo sazba ČNB ke dni {:%d.%m.%Y}: {:.2f} % <i>p. a.</i>'
                            .format(rate[0], LocalFloat(rate[1])))
                else:
                    interest1 = 'poplatek z prodlení podle nařízení č. 142/1994 Sb.'
                    if debt.currency != 'CZK':
                        interest2 = (
                            '<i>(minimální sazba 25 Kč za každý započatý měsíc prodlení není pro jinou měnu než CZK '
                            'podporována)</i>')

                res.append(Paragraph('<b>Úročení:</b> {}'.format(interest1), style19))
                if interest2:
                    res.append(Paragraph(interest2, style20))
                for key in interest3:
                    res.append(Paragraph(key, style21))
                res.append(Spacer(0, 50))
                flow.extend(res)

                bst = (
                    ('SPAN', (0, 0), (4, 0)),
                    ('SPAN', (5, 0), (33, 0)),
                    ('SPAN', (1, 1), (10, 1)),
                    ('SPAN', (12, 1), (21, 1)),
                    ('SPAN', (23, 1), (32, 1)),
                    ('SPAN', (1, 2), (3, 2)),
                    ('SPAN', (4, 2), (10, 2)),
                    ('SPAN', (12, 2), (14, 2)),
                    ('SPAN', (15, 2), (21, 2)),
                    ('SPAN', (23, 2), (25, 2)),
                    ('SPAN', (26, 2), (32, 2)),
                    ('SPAN', (1, 3), (3, 3)),
                    ('SPAN', (4, 3), (10, 3)),
                    ('SPAN', (12, 3), (14, 3)),
                    ('SPAN', (15, 3), (21, 3)),
                    ('SPAN', (23, 3), (25, 3)),
                    ('SPAN', (26, 3), (32, 3)),
                    ('SPAN', (1, 4), (3, 4)),
                    ('SPAN', (4, 4), (10, 4)),
                    ('SPAN', (12, 4), (14, 4)),
                    ('SPAN', (15, 4), (21, 4)),
                    ('SPAN', (23, 4), (25, 4)),
                    ('SPAN', (26, 4), (32, 4)),
                    ('LINEABOVE', (0, 0), (-1, 0), 1, black),
                    ('LINEBELOW', (0, 0), (-1, 0), 1, black),
                    ('LINEBEFORE', (0, 0), (0, -1), 1, black),
                    ('LINEAFTER', (-1, 0), (-1, -1), 1, black),
                    ('LINEBELOW', (0, -1), (-1, -1), 1, black),
                    ('BACKGROUND', (0, 0), (-1, 0), '#e8e8e8'),
                    ('VALIGN', (0, 0), (-1, 0), 'TOP'),
                    ('LEFTPADDING', (0, 0), (-1, 0), 0),
                    ('LEFTPADDING', (0, 1), (-1, -1), 3),
                    ('RIGHTPADDING', (0, 0), (-1, -1), 3),
                    ('RIGHTPADDING', (4, 2), (10, 4), 0),
                    ('RIGHTPADDING', (15, 2), (21, 4), 0),
                    ('RIGHTPADDING', (26, 2), (32, 4), 0),
                    ('TOPPADDING', (0, 0), (-1, 0), 2.5),
                    ('TOPPADDING', (0, 1), (-1, 1), 10),
                    ('TOPPADDING', (0, 2), (-1, -1), 0),
                    ('BOTTOMPADDING', (0, 0), (-1, 0), .5),
                    ('BOTTOMPADDING', (0, 1), (-1, 1), 1.5),
                    ('BOTTOMPADDING', (0, 2), (-1, 4), 0),
                    ('BOTTOMPADDING', (0, -1), (-1, -1), 18),
                )

                ast = {
                    'debit': (
                        ('LINEBELOW', (1, 1), (10, 1), thickness, black),
                        ('LINEAFTER', (3, 2), (3, 2), thickness, black),
                        ('LINEBELOW', (12, 1), (21, 1), thickness, black),
                        ('LINEAFTER', (14, 2), (14, 4), thickness, black),
                        ('LINEBELOW', (23, 1), (32, 1), thickness, black),
                        ('LINEAFTER', (25, 2), (25, 4), thickness, black)),
                    'credit': (
                        ('LINEBELOW', (1, 1), (10, 1), thickness, black),
                        ('LINEAFTER', (3, 2), (3, 4), thickness, black),
                        ('LINEBELOW', (12, 1), (21, 1), thickness, black),
                        ('LINEAFTER', (14, 2), (14, 4), thickness, black),
                        ('LINEBELOW', (23, 1), (32, 1), thickness, black),
                        ('LINEAFTER', (25, 2), (25, 4), thickness, black)),
                    'balance': (
                        ('LINEBELOW', (23, 1), (32, 1), thickness, black),
                        ('LINEAFTER', (25, 2), (25, 4), thickness, black))
                }

                for row in rows:
                    if row['err']:
                        flow.extend(
                            [Spacer(0, 20),
                             Paragraph(
                                 '(pro další transakce nejsou k disposici'
                                 ' data, při výpočtu došlo k chybě)', style22)])
                        break
                    trt = row['trt']
                    doc3 = []
                    temp1 = [Paragraph('{:%d.%m.%Y}'.format(row['date']), style13)] + (EL * 4)
                    temp2 = [Paragraph(escape(row['description']).upper(), style14)] + (EL * 28)
                    doc3.extend([temp1 + temp2])

                    if trt == 'debit':
                        temp = (
                            EL + [Paragraph('Závazek', style15)] + (EL * 10)
                            + [Paragraph('Předchozí zůstatek', style15)] + (EL * 10)
                            + [Paragraph('Nový zůstatek', style15), ''])
                    elif trt == 'credit':
                        temp = (
                            EL + [Paragraph('<b>Splátka</b> (přednost {}'.format(row['rep']), style16)] + (EL * 10)
                            + [Paragraph('Předchozí zůstatek', style15)] + (EL * 10)
                            + [Paragraph('Nový zůstatek', style15), ''])
                    else:
                        temp = (EL * 23) + [Paragraph('Zůstatek', style15), '']
                    doc3.extend([temp])

                    if trt != 'balance':
                        temp = (
                            EL + [Paragraph('Částka', style17)] + (EL * 2)
                            + [Paragraph(lfamt((row['change'] if (trt == 'debit') else (-row['change']))), style18)]
                            + (EL * 7) + [Paragraph('Jistina', style17)] + (EL * 2)
                            + [Paragraph(lfamt(row['pre_principal']), style18)] + (EL * 7)
                            + [Paragraph('Jistina', style17)] + (EL * 2)
                            + [Paragraph(lfamt(row['post_principal']), style18)] + (EL * 7))
                    else:
                        temp = (
                            (EL * 23) + [Paragraph('Jistina', style17)] + (EL * 2)
                            + [Paragraph(lfamt(row['post_principal']), style18)] + (EL * 7))
                    doc3.extend([temp])

                    if trt == 'debit':
                        temp = (
                            (EL * 12) + [Paragraph('Úrok', style17)] + (EL * 2)
                            + [Paragraph(lfamt(row['pre_interest']), style18)] + (EL * 7)
                            + [Paragraph('Úrok', style17)] + (EL * 2)
                            + [Paragraph(lfamt(row['post_interest']), style18)] + (EL * 7))
                    elif trt == 'credit':
                        temp = (
                            EL + [Paragraph('Jistina', style17)] + (EL * 2)
                            + [Paragraph(lfamt(-row['change_principal']), style18)] + (EL * 7)
                            + [Paragraph('Úrok', style17)] + (EL * 2)
                            + [Paragraph(lfamt(row['pre_interest']), style18)] + (EL * 7)
                            + [Paragraph('Úrok', style17)] + (EL * 2)
                            + [Paragraph(lfamt(row['post_interest']), style18)] + (EL * 7))
                    else:
                        temp = (
                            (EL * 23) + [Paragraph('Úrok', style17)] + (EL * 2)
                            + [Paragraph(lfamt(row['post_interest']), style18)] + (EL * 7))
                    doc3.extend([temp])

                    if trt == 'debit':
                        temp = (
                            (EL * 12) + [Paragraph('Celkem', style17)] + (EL * 2)
                            + [Paragraph(lfamt(row['pre_total']), style18)] + (EL * 7)
                            + [Paragraph('Celkem', style17)] + (EL * 2)
                            + [Paragraph(lfamt(row['post_total']), style18)] + (EL * 7))
                    elif trt == 'credit':
                        temp = (
                            EL + [Paragraph('Úrok', style17)] + (EL * 2)
                            + [Paragraph(lfamt(-row['change_interest']), style18)] + (EL * 7)
                            + [Paragraph('Celkem', style17)] + (EL * 2)
                            + [Paragraph(lfamt(row['pre_total']), style18)] + (EL * 7)
                            + [Paragraph('Celkem', style17)] + (EL * 2)
                            + [Paragraph(lfamt(row['post_total']), style18)] + (EL * 7))
                    else:
                        temp = (
                            (EL * 23) + [Paragraph('Celkem', style17)] + (EL * 2)
                            + [Paragraph(lfamt(row['post_total']), style18)] + (EL * 7))
                    doc3.extend([temp])

                    temp = EL * 34
                    doc3.extend([temp])

                    table3 = Table(doc3, colWidths=cwid)
                    table3.setStyle(TableStyle(bst + ast[trt]))
                    flow.append(KeepTogether(table3))

                if debt.note:
                    flow.append(Spacer(0, 24))
                    temp = [Paragraph('Poznámka:'.upper(), style4)]
                    for line in filter(bool, debt.note.strip().split('\n')):
                        temp.append(Paragraph(escape(line), style12))
                    flow.append(KeepTogether(temp[:2]))
                    if len(temp) > 2:
                        flow.extend(temp[2:])
                temp = BytesIO()
                response = HttpResponse(content_type='application/pdf')
                response['Content-Disposition'] = 'attachment; filename=Pohledavka.pdf'
                auth = '{} V{}'.format(APP.upper(), APPVERSION)
                doc = SimpleDocTemplate(
                    temp,
                    pagesize=A4,
                    title='Historie peněžité pohledávky',
                    author=auth,
                    leftMargin=64,
                    rightMargin=48,
                    topMargin=48,
                    bottomMargin=96,
                    )
                make_pdf(
                    doc,
                    flow,
                    string=auth,
                    xml=to_xml(debt))
                response.write(temp.getvalue())
                return response

        else:
            LOGGER.debug('Invalid form', request)
            err_message = INERR

    for row in rows:
        row['change'] = cellam(row['change'])
        if not row['err']:
            row['pre_principal'] = cellam(row['pre_principal'])
            row['pre_interest'] = cellam(row['pre_interest'], True)
            row['change_principal'] = cellam(row['change_principal'])
            row['change_interest'] = cellam(row['change_interest'], True)
            row['post_principal'] = cellam(row['post_principal'])
            row['post_interest'] = cellam(row['post_interest'], True)
            row['post_total'] = cellam(row['post_total'], True)

    return render(
        request,
        'hjp_mainpage.xhtml',
        {'app': APP,
         'page_title': 'Historie jednoduché peněžité pohledávky',
         'form': form,
         'rows': rows,
         'currency': dispcurr(debt.currency),
         'ydconvs': YDCONVS,
         'mdconvs': MDCONVS,
         'err_message': err_message,
         'rows_err': rows_err})
Example #25
0
def procbatchform(request):

    LOGGER.debug(
        'Proceedings import page accessed using method {}'.format(
            request.method), request)

    err_message = ''
    uid = request.user.id
    uname = request.user.username
    today = date.today()

    if request.method == 'POST':
        button = getbutton(request)

        if button == 'load':
            infile = request.FILES.get('load')
            if not infile:
                err_message = 'Nejprve zvolte soubor k načtení'
            else:
                errors = []
                try:
                    count = 0
                    with infile:
                        idx = 0
                        for line in csvreader(StringIO(
                                infile.read().decode())):
                            idx += 1
                            errlen = len(errors)
                            if not line:
                                continue
                            if len(line) != 3:
                                errors.append((idx, 'Chybný formát'))
                                continue
                            desc = line[0].strip()
                            if not desc:
                                errors.append((idx, 'Prázdný popis'))
                                continue
                            if len(desc) > 255:
                                errors.append((idx, 'Příliš dlouhý popis'))
                                continue
                            try:
                                court = line[1]
                                assert Court.objects.get(id=court)
                            except:
                                errors.append((idx, 'Chybná zkratka soudu'))
                                continue
                            try:
                                senate, register, number, year = decomposeref(
                                    line[2])
                                assert senate >= 0
                                assert register in REGISTERS
                                assert number > 0
                                assert year >= 1990 and year <= today.year
                            except:
                                errors.append((idx, 'Chybná spisová značka'))
                                continue
                            if len(errors) == errlen:
                                proc = Proceedings.objects.filter(
                                    uid_id=uid,
                                    desc=desc,
                                    court=court,
                                    senate=senate,
                                    register=register,
                                    number=number,
                                    year=year)
                                if not proc.exists():
                                    try:
                                        proc = Proceedings.objects.update_or_create(
                                            uid_id=uid,
                                            desc=desc,
                                            defaults={
                                                'court_id': court,
                                                'senate': senate,
                                                'register': register,
                                                'number': number,
                                                'year': year,
                                                'changed': None,
                                                'updated': None,
                                                'hash': '',
                                                'auxid': 0,
                                                'notify': False
                                            })[0]
                                        updateproc(proc)
                                        proc.save()
                                    except:
                                        errors.append((
                                            idx,
                                            'Popisu "{}" odpovídá více než jedno řízení'
                                            .format(desc)))
                                        continue
                                count += 1
                    LOGGER.info(
                        'User "{}" ({:d}) imported {:d} proceedings'.format(
                            uname, uid, count), request)
                    return render(
                        request, 'szr_procbatchresult.xhtml', {
                            'app': APP,
                            'page_title': 'Import řízení ze souboru',
                            'count': count,
                            'errors': errors
                        })

                except:  # pragma: no cover
                    LOGGER.error('Error reading file', request)
                    err_message = 'Chyba při načtení souboru'

    return render(
        request, 'szr_procbatchform.xhtml', {
            'app': APP,
            'page_title': 'Import řízení ze souboru',
            'err_message': err_message
        })
Example #26
0
def transform(request, idx=0):

    LOGGER.debug(
        'Transaction form accessed using method {}, id={}'.format(request.method, idx),
        request,
        request.POST)
    page_title = 'Úprava transakce' if idx else 'Nová transakce'
    err_message = ''
    debt = getdebt(request)
    if not debt:  # pragma: no cover
        return error(request)
    idx = int(idx)
    if request.method == 'GET':
        if idx:
            if idx > len(debt.transactions):
                raise Http404
            transaction = debt.transactions[idx - 1]
            var = {
                'description': transaction.description,
                'transaction_type': transaction.transaction_type,
                'date': transaction.date}
            if hasattr(transaction, 'amount'):
                var['amount'] = (
                    '{:.2f}'.format(LocalFloat(transaction.amount)) if debt.rounding
                    else int(round(transaction.amount)))
            if hasattr(transaction, 'repayment_preference'):
                var['repayment_preference'] = transaction.repayment_preference
            form = TransForm(initial=var)
        else:
            form = TransForm()
    else:
        form = TransForm(request.POST)

        button = getbutton(request)
        if button == 'back':
            return redirect('hjp:mainpage')
        if button == 'set_date':
            form.data = form.data.copy()
            form.data['date'] = date.today()
        elif form.is_valid():
            cld = form.cleaned_data
            transaction = Transaction()
            transaction.description = cld['description'].strip()
            transaction.transaction_type = cld['transaction_type']
            transaction.date = cld['date']
            if transaction.transaction_type != 'balance':
                transaction.amount = float(cld['amount'])
            if transaction.transaction_type == 'credit':
                transaction.repayment_preference = cld['repayment_preference']
            if idx:
                if idx > len(debt.transactions):
                    raise Http404
                debt.transactions[idx - 1] = transaction
            else:
                debt.transactions.append(transaction)
            if not setdebt(request, debt):  # pragma: no cover
                return error(request)
            return redirect('hjp:mainpage')

        else:
            LOGGER.debug('Invalid form', request)
            err_message = INERR

    return render(
        request,
        'hjp_transform.xhtml',
        {'app': APP,
         'form': form,
         'page_title': page_title,
         'currency': dispcurr(debt.currency),
         'err_message': err_message})
Example #27
0
def mainpage(request):

    LOGGER.debug('Main page accessed using method {}'.format(request.method), request, request.POST)

    messages = []

    if request.method == 'GET':
        form = MainForm()
    else:
        dual = getbutton(request) == 'dual'
        form = MainForm(request.POST)
        if form.is_valid():
            cld = form.cleaned_data
            netincome = cld['netincome']
            deps = cld['deps']
            if cld['partner'] or dual:
                deps += 1
            subs = cld['subs']
            apt = cld['apt']
            vat = cld['vat']
            if vat:
                vatrate = float(cld['vatrate'])
            if dual:
                netincome2 = cld['netincome2']
                deps2 = cld['deps2'] + 1
                fee = cld['fee2']
                exp = cld['exp2']
                messages.append(('Kalkulace pro společný návrh manželů', 'header'))
            else:
                fee = cld['fee']
                exp = cld['exp']
                messages.append(('Kalkulace pro samostatného dlužníka', 'header'))
            lim = subs + apt
            prot = lim * 2 / 3
            messages.append(('Nezabavitelná částka: {} Kč'.format(famt(round(prot))), None))
            basis1 = ceil(prot * (1 + (deps / 4)))
            rem = max(netincome - basis1, 0)
            if rem > lim:
                rep = rem - lim
                rem = lim
            else:
                rep = 0
            rem = (rem // 3) * 3
            rep += (rem * 2) // 3
            if dual:
                totnetincome = netincome + netincome2
                basis2 = ceil(prot * (1 + (deps2 / 4)))
                messages.append(('Celková základní částka pro 1. manžela: {} Kč'.format(famt(round(basis1))), None))
                messages.append(('Celková základní částka pro 2. manžela: {} Kč'.format(famt(round(basis2))), None))
                rem2 = max(netincome2 - basis2, 0)
                if rem2 > lim:
                    rep2 = rem2 - lim
                    rem2 = lim
                else:
                    rep2 = 0
                rem2 = (rem2 // 3) * 3
                rep2 += (rem2 * 2) // 3
                rep += rep2
            else:
                totnetincome = netincome
                messages.append(('Celková základní částka: {} Kč'.format(famt(round(basis1))), None))
            messages.append(('Výše měsíční splátky: {} Kč'.format(famt(round(rep))), 'gap'))
            messages.append(('Zůstatek ze mzdy: {} Kč'.format(famt(round(totnetincome - rep))), None))
            tru = fee + exp
            if vat:
                tru *= 1 + (vatrate / 100)
            messages.append(('Měsíční poplatky insolvenčnímu správci: {} Kč'.format(famt(round(tru))), None))
            rep = max(rep - tru, 0)
            messages.append(('Měsíční splátka věřitelům: {} Kč'.format(famt(round(rep))), None))
            tot = 5 * 12 * rep
            messages.append(('Celková výše splátek věřitelům za 5 let: {} Kč'.format(famt(round(tot))), None))
            messages.append(('Pohledávky uspokojené do výše 30 %:', 'gap'))
            messages.append(('{} Kč'.format(famt(round(tot / .3))), 'total'))
        else:
            LOGGER.debug('Invalid form', request)
            messages = [(INERR_SHORT, None)]

    return render(
        request,
        'kos_mainpage.xhtml',
        {'app': APP,
         'page_title': 'Kalkulace splátek při oddlužení',
         'messages': messages,
         'form': form})
Example #28
0
def insbatchform(request):

    LOGGER.debug('Proceedings import page accessed using method {}'.format(request.method), request)

    err_message = ''
    uid = request.user.id
    uname = request.user.username

    if request.method == 'POST':
        button = getbutton(request)

        if button == 'load':
            infile = request.FILES.get('load')
            if not infile:
                err_message = 'Nejprve zvolte soubor k načtení'
            else:
                errors = []
                try:
                    count = 0
                    with infile:
                        idx = 0
                        for line in csvreader(StringIO(infile.read().decode())):
                            idx += 1
                            errlen = len(errors)
                            if not line:
                                continue
                            desc = line[0].strip()
                            if not desc:
                                errors.append((idx, 'Prázdný popis'))
                                continue
                            if len(desc) > 255:
                                errors.append((idx, 'Příliš dlouhý popis'))
                                continue
                            try:
                                number = int(line[1])
                                assert number > 0
                            except:
                                errors.append((idx, 'Chybné běžné číslo'))
                                continue
                            try:
                                year = int(line[2])
                                assert year >= 2008
                            except:
                                errors.append((idx, 'Chybný ročník'))
                                continue
                            detailed = line[3].strip()
                            if detailed == 'ano':
                                detailed = True
                            elif detailed == 'ne':
                                detailed = False
                            else:
                                errors.append((idx, 'Chybný údaj pro pole Vše'))
                                continue

                            if len(errors) == errlen:
                                try:
                                    Insolvency.objects.update_or_create(
                                        uid_id=uid,
                                        desc=desc,
                                        defaults={
                                            'number': number,
                                            'year': year,
                                            'detailed': detailed}
                                    )
                                except:
                                    errors.append((idx, 'Popisu "{}" odpovídá více než jedno řízení'.format(desc)))
                                    continue
                                count += 1
                    LOGGER.info('User "{}" ({:d}) imported {:d} proceedings'.format(uname, uid, count), request)
                    return render(
                        request,
                        'sir_insbatchresult.xhtml',
                        {'app': APP,
                         'page_title': 'Import řízení ze souboru',
                         'count': count,
                         'errors': errors})

                except:  # pragma: no cover
                    LOGGER.error('Error reading file', request)
                    err_message = 'Chyba při načtení souboru'

    return render(
        request,
        'sir_insbatchform.xhtml',
        {'app': APP,
         'page_title': 'Import řízení ze souboru',
         'err_message': err_message})
Example #29
0
def partybatchform(request):

    LOGGER.debug('Party import page accessed using method {}'.format(request.method), request)

    err_message = ''
    uid = request.user.id
    uname = request.user.username

    if request.method == 'POST':
        button = getbutton(request)

        if button == 'load':
            infile = request.FILES.get('load')
            if not infile:
                err_message = 'Nejprve zvolte soubor k načtení'
            else:
                errors = []
                try:
                    count = 0
                    with infile:
                        idx = 0
                        for line in csvreader(StringIO(infile.read().decode())):
                            idx += 1
                            errlen = len(errors)
                            if not line:
                                continue
                            line = line[0].strip()
                            if ':' in line:
                                line, party_opt = line.split(':', 1)
                            else:
                                party_opt = '*'
                            if not between(MIN_LENGTH, len(line), MAX_LENGTH):
                                errors.append((idx, 'Chybná délka řetězce'))
                                continue
                            if party_opt not in TEXT_OPTS_ABBR:
                                errors.append((idx, 'Chybná zkratka pro posici'))
                                continue
                            if len(errors) == errlen:
                                try:
                                    Party.objects.update_or_create(
                                        uid_id=uid,
                                        party=line,
                                        defaults={'party_opt': TEXT_OPTS_AI[party_opt]}
                                    )
                                except:
                                    errors.append((idx, 'Řetězci "{}" odpovídá více než jeden účastník'.format(line)))
                                    continue
                                count += 1
                    LOGGER.info('User "{}" ({:d}) imported {} party/ies'.format(uname, uid, count), request)
                    return render(
                        request,
                        'sur_partybatchresult.xhtml',
                        {'app': APP,
                         'page_title': 'Import účastníků řízení ze souboru',
                         'count': count,
                         'errors': errors})

                except:  # pragma: no cover
                    LOGGER.error('Error reading file', request)
                    err_message = 'Chyba při načtení souboru'
        else:
            LOGGER.debug('Invalid form', request)
            err_message = INERR

    return render(
        request,
        'sur_partybatchform.xhtml',
        {'app': APP,
         'page_title': 'Import účastníků řízení ze souboru',
         'err_message': err_message,
         'min_length': MIN_LENGTH,
         'max_length': MAX_LENGTH})
Example #30
0
def procbatchform(request):

    LOGGER.debug('Proceedings import page accessed using method {}'.format(request.method), request)

    err_message = ''
    uid = request.user.id
    uname = request.user.username
    today = date.today()

    if request.method == 'POST':
        button = getbutton(request)

        if button == 'load':
            infile = request.FILES.get('load')
            if not infile:
                err_message = 'Nejprve zvolte soubor k načtení'
            else:
                errors = []
                try:
                    count = 0
                    with infile:
                        idx = 0
                        for line in csvreader(StringIO(infile.read().decode())):
                            idx += 1
                            errlen = len(errors)
                            if not line:
                                continue
                            if len(line) != 3:
                                errors.append((idx, 'Chybný formát'))
                                continue
                            desc = line[0].strip()
                            if not desc:
                                errors.append((idx, 'Prázdný popis'))
                                continue
                            if len(desc) > 255:
                                errors.append((idx, 'Příliš dlouhý popis'))
                                continue
                            try:
                                court = line[1]
                                assert Court.objects.get(id=court)
                            except:
                                errors.append((idx, 'Chybná zkratka soudu'))
                                continue
                            try:
                                senate, register, number, year = decomposeref(line[2])
                                assert senate >= 0
                                assert register in REGISTERS
                                assert number > 0
                                assert year >= 1990 and year <= today.year
                            except:
                                errors.append((idx, 'Chybná spisová značka'))
                                continue
                            if len(errors) == errlen:
                                proc = Proceedings.objects.filter(
                                    uid_id=uid,
                                    desc=desc,
                                    court=court,
                                    senate=senate,
                                    register=register,
                                    number=number,
                                    year=year)
                                if not proc.exists():
                                    try:
                                        proc = Proceedings.objects.update_or_create(
                                                uid_id=uid,
                                                desc=desc,
                                                defaults={
                                                    'court_id': court,
                                                    'senate': senate,
                                                    'register': register,
                                                    'number': number,
                                                    'year': year,
                                                    'changed': None,
                                                    'updated': None,
                                                    'hash': '',
                                                    'auxid': 0,
                                                    'notify': False})[0]
                                        updateproc(proc)
                                        proc.save()
                                    except:
                                        errors.append((idx, 'Popisu "{}" odpovídá více než jedno řízení'.format(desc)))
                                        continue
                                count += 1
                    LOGGER.info('User "{}" ({:d}) imported {:d} proceedings'.format(uname, uid, count), request)
                    return render(
                        request,
                        'szr_procbatchresult.xhtml',
                        {'app': APP,
                         'page_title': 'Import řízení ze souboru',
                         'count': count,
                         'errors': errors})

                except:  # pragma: no cover
                    LOGGER.error('Error reading file', request)
                    err_message = 'Chyba při načtení souboru'

    return render(
        request,
        'szr_procbatchform.xhtml',
        {'app': APP,
         'page_title': 'Import řízení ze souboru',
         'err_message': err_message})