403Webshell
Server IP : 37.9.174.138  /  Your IP : 216.73.216.117
Web Server : Apache
System : Linux vps6.backend.sk 6.12.100+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.100-1 (2026-07-30) x86_64
User : ftpuser ( 1001)
PHP Version : 8.4.24
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/html/backend-accounting.sk/app/modules/dpfob/code/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/backend-accounting.sk/app/modules/dpfob/code/DPFOBForm.php
<?php
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Scripting/PHPClass.php to edit this template
 */

namespace modules\dpfob\code;

/**
 * Description of DPFOBForm
 *
 * @author maros
 */
class DPFOBForm extends \modules\forms\code\AbstractForm {

    public const ATTACHMENTS = "attachments";
    public const ATTACHMENTS_INCOMES = "incomes_tpp_attachments";
    public const ATTACHMENTS_KIDS_TAX_BONUS = "kids_tax_bonus_attachments_";
    public const ATTACHMENTS_DDS = "dds_attachments";
    public const ATTACHMENTS_MORTAGE = "mortage_attachments";
    public const ATTACHMENTS_TAX_GIFT = "tax_gift_attachments";
    public const ATTACHMENTS_TRUST_DEED = "trust_deed_attachments";
    protected const NAME = 'dpfob';

    protected $adminScope;
    protected $inputClass;
    public static $kidsRows = 5;
    protected $lastYear;
    protected $user;

    public function __construct($adminScope = false, $inputClass = 'form-control-lg') {
        parent::__construct();
        $this->lastYear = date("Y") - 1;

        try {
            $this->user = \app\classes\BasicUser::getLoggedUser([\app\constants\UserType::CUSTOMER]);
        } catch (\Exception $ex) {
            
        }
        $this->adminScope = $adminScope;
        $this->inputClass = $inputClass;
    }

    static function getConstants($prefix = false) {
        $oClass = new \ReflectionClass(__CLASS__);
        $constants = $oClass->getConstants();
        unset($constants["ATTACHMENTS_KIDS_TAX_BONUS"]);
        for ($i = 1; $i <= self::$kidsRows; $i++) {
            $constants["ATTACHMENTS_KIDS_TAX_BONUS_" . $i] = self::ATTACHMENTS_KIDS_TAX_BONUS . $i;
        }

        if ($prefix) {
            $prefixParam = $prefix;
            $prefix = $prefix . '_';
            foreach ($constants as $key => $val) {
                if (strtolower(substr($key, 0, strlen($prefix))) !== strtolower($prefix) && strtolower($prefixParam) !== strtolower($key)) {
                    unset($constants[$key]);
                }
            }
        }

        return $constants;
    }

    public function render() {
        $form = $this->getNewForm(self::NAME, "ajax('/api/admin/dpfob/dpfob/manage/', 'POST', $(this).serialize(), 'afterManage');", new \PFBC\View\FourColumns());
        $form->addElement(new \PFBC\Element\HTML('<div class="row">'));
        $elements = $this->getAllElements();
        foreach ($elements as $element) {
            if (isset($element["pfbc"])) {
                $form->addElement($element["pfbc"]);
            }
        }

        $form->addElement(new \PFBC\Element\HTML('</div>'));
        $form->render();
    }

    /**
     * @return array
     */
    protected function getBasicInfoElements(): array {
        $skNaces = new \app\classes\PDOCollection("sk_naces", "id", "SELECT id, CONCAT(code, ' - ', name) AS full_name FROM sk_naces ", []);
        $skNaces = ["" => ""] + array_column($skNaces->toArray(), "full_name", "id");
        $elements = [
            "is_our_client" => [
                "db" => true,
                "controller" => \modules\forms\code\RadioController::class,
                "pfbc" => new \PFBC\Element\Radio(
                        $this->t->_get("Ste naším klientom"),
                        "is_our_client",
                        [
                    1 => $this->t->_get("Áno"),
                    0 => $this->t->_get("Nie"),
                        ],
                        array(
                    "required" => 1,
                    "class" => "",
                    "autocomplete" => "off",
                        )
                ),
            ],
            "our_client_company" => [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("Obchodný názov"),
                        "our_client_company",
                        array(
                    "maxlength" => 45,
                    "required" => 1,
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                    "prepend" => '<div class="input-group mb-3">',
                    "append" => '<span title="' . $this->t->_get('Názov spoločnosti alebo meno (v prípade živnostníka)') . '" class="input-group-text" role="button" data-bs-toggle="tooltip"><i class="fa fa-question"></i></span></div>'
                        )
                ),
            ],
            "dp_submits_client" => [
                "db" => true,
                "controller" => \modules\forms\code\RadioController::class,
                "pfbc" => new \PFBC\Element\Radio(
                        $this->t->_get("Podanie daňového priznania"),
                        "dp_submits_client",
                        [
                    1 => $this->t->_get("Podám sám"),
                    0 => $this->t->_get("Podá Backend Accounting"),
                        ],
                        array(
                    "required" => 1,
                    "class" => "",
                    "data-grid-class" => "col-xl-3 col-lg-4 col-md-6 dp_submits_client-container",
                    "autocomplete" => "off",
                        )
                ),
            ],
            "dp_delayed_submission" => [
                "db" => true,
                "controller" => \modules\forms\code\RadioController::class,
                "pfbc" => new \PFBC\Element\Radio(
                        $this->t->_get("Odklad daňového priznania"),
                        "dp_delayed_submission",
                        [
                    1 => $this->t->_get("Áno"),
                    0 => $this->t->_get("Nie"),
                        ],
                        array(
                    "required" => 1,
                    "class" => "",
                    "data-grid-class" => "col-xl-3 col-lg-4 col-md-6 dp_delayed_submission-container",
                    "autocomplete" => "off",
                        )
                ),
            ],
            $this->getNextHtmlInputKey() => DPFOBHelper::isDoublePriceInterval() ? [
        "db" => false,
        "pfbc" => new \PFBC\Element\HTML("<div id='doublePriceAlert' class='alert alert-info text-center' style='display: none;'><i class='fa fa-info-circle me-1'></i> " . sprintf(
                        $this->t->_get('Od %s účtujeme 100 %% príplatok za spracovanie daňového priznania do <b>%s</b>, ktorý už je zahrnutý v odhadovanej cene.'),
                        date('d.m.Y', strtotime(date('Y', strtotime(DPFOBHelper::getTodayDate())) . '-' . ((intval(date('m', strtotime(DPFOBHelper::getTodayDate()))) > 3 ? DPFOBHelper::DOUBLE_PRICE_DAY_2 :
                                        DPFOBHelper::DOUBLE_PRICE_DAY)))),
                        (intval(date('m', strtotime(DPFOBHelper::getTodayDate()))) > 3 ? '30.06.' : '31.03.') . date('Y', strtotime(DPFOBHelper::getTodayDate()))
                ) . "</div>")
            ] : "",
            $this->getNextHtmlInputKey() => $this->getTitleElement("Osobné údaje", 4, "", "mt-0"),
            "degree_before" => [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("Titul pred menom"),
                        "degree_before",
                        array(
                    "maxlength" => 20,
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                        )
                ),
            ],
            "first_name" => [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("Meno"),
                        "first_name",
                        array(
                    "maxlength" => 45,
                    "required" => 1,
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                        )
                ),
            ],
            "last_name" => [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("Priezvisko"),
                        "last_name",
                        array(
                    "maxlength" => 45,
                    "required" => 1,
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                        )
                ),
            ],
            "degree_after" => [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("Titul za menom"),
                        "degree_after",
                        array(
                    "maxlength" => 20,
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                        )
                ),
            ],
            "street" => [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("Ulica a číslo"),
                        "street",
                        array(
                    "maxlength" => 45,
                    "placeholder" => "",
                    "required" => 1,
                    "class" => "form-control g-location-autocomplete-1 " . $this->inputClass,
                    "autocomplete" => "off",
                    "prepend" => '<div class="input-group mb-3">',
                    "append" => '<span title="' . $this->t->_get('Trvalý pobyt (v prípade živnostníka sídlo podnikania)') . '" class="input-group-text" role="button" data-bs-toggle="tooltip"><i class="fa fa-question"></i></span></div>'
                        )
                ),
            ],
            "city" => [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("Mesto"),
                        "city",
                        array(
                    "maxlength" => 45,
                    "required" => 1,
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                        )
                ),
            ],
            "zip" => [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Tel(
                        $this->t->_get("PSČ"),
                        "zip",
                        array(
                    "pattern" => "\d{3}\s?\d{2}",
                    "maxlength" => 45,
                    "required" => 1,
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                        )
                ),
            ],
            "country" => [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("Krajina"),
                        "country",
                        array(
                    "maxlength" => 45,
                    "required" => 1,
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                        )
                ),
            ],
            "birth_number" => [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("Rodné číslo"),
                        "birth_number",
                        array(
                    "required" => 1,
                    "pattern" => "^\d{6}\/?\d{3,4}$",
                    "inputmode" => "numeric",
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                    "append" => '<div class="invalid-feedback">' . $this->t->_get("Zadajte rodné číslo bez lomky.") . '</div>',
                        )
                ),
            ],
            "idn" => [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("IČO (ak bolo pridelené)"),
                        "idn",
                        array(
                    "pattern" => "^[0-9]{8}$",
                    "maxlength" => 8,
                    "inputmode" => "numeric",
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                    "append" => '<div class="invalid-feedback">' . $this->t->_get("Zadajte platné IČO.") . '</div>',
                        )
                ),
            ],
            "tin" => [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("DIČ (ak bolo pridelené)"),
                        "tin",
                        array(
                    "pattern" => "^[0-9]{10}$",
                    "maxlength" => 10,
                    "inputmode" => "numeric",
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                    "append" => '<div class="invalid-feedback">' . $this->t->_get("Zadajte platné DIČ.") . '</div>',
                        )
                ),
            ],
            "vat" => [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("IČ DPH (ak ste platca DPH)"),
                        "vat",
                        array(
                    "pattern" => "^(SK|sk)?[0-9]{10}$",
                    "maxlength" => 12,
                    "inputmode" => "numeric",
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                    "append" => '<div class="invalid-feedback">' . $this->t->_get("Zadajte platné IČ DPH.") . '</div>',
                        )
                ),
            ],
            "sk_naces_id" => [
                "db" => true,
                "controller" => \modules\forms\code\SelectController::class,
                "pfbc" => new \PFBC\Element\Select(
                        $this->t->_get("Hlavná činnosť (SK NACE)"),
                        "sk_naces_id",
                        $skNaces,
                        array(
                    "data-sel2-tags" => "false",
                    "class" => "form-control sel2 " . $this->inputClass,
                    "autocomplete" => "off",
                        )
                ),
            ],
            "phone" => [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Tel(
                        $this->t->_get("Telefón"),
                        "phone",
                        array(
                    "pattern" => "^\+?[0-9 ]{10,20}$",
                    "placeholder" => "+421 900 123 456",
                    "required" => 1,
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                        )
                ),
            ],
            "email" => [
                "db" => true,
                "controller" => \modules\forms\code\EmailController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("E-mail"),
                        "email",
                        array(
                    "maxlength" => 255,
                    "required" => 1,
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "username",
                        )
                ),
            ],
            "inline-login" => [
                "db" => false,
                "pfbc" => new \PFBC\Element\HTML(
                        $this->getInlineLoginHTML()
                ),
            ],
            $this->getNextHtmlInputKey() => $this->getNewRowElement(),
            "person status" => [
                "db" => true,
                "controller" => \modules\forms\code\CheckboxController::class,
                "pfbc" => new \PFBC\Element\Checkbox(
                        $this->t->_get("Som"),
                        "person_status",
                        [
                    $this->t->_get("Študent"),
                    $this->t->_get("Dôchodca"),
                    $this->t->_get("ZŤP (zdravotne ťažko postihnutý)"),
                        ],
                        array(
                    "class" => "",
                    "data-grid-class" => "col-md-12 checkbox-inline",
                    "autocomplete" => "off",
                        )
                ),
            ],
        ];

        if ($this->user) {
            unset($elements['email'], $elements['inline-login']);
        }

        return $elements;
    }

    protected function getIncomesElements() {
        $elements = [
            $this->getNextHtmlInputKey() => $this->getTitleElement("Príjmy", 4, "mb-0"),
            $this->getNextHtmlInputKey() => $this->getCheckboxAccordionStartElement(),
            "incomes_tpp" => [
                "db" => true,
                "controller" => \modules\forms\code\CheckboxController::class,
                "pfbc" => new \PFBC\Element\Checkbox(
                        "",
                        "incomes_tpp",
                        array(1 => $this->t->_get("TPP (trvalý pracovný pomer, brigáda, odmena konateľa)")),
                        array(
                    "data-grid-class" => "col-md-12",
                    "class" => "accordion-toggle",
                    "data-bs-target" => "#accordion-incomes_tpp",
                    "data-group" => "incomes",
                    "data-feedback-id" => "incomes-invalid-feedback",
                    "autocomplete" => "off",
                        )
                ),
            ],
            $this->getNextHtmlInputKey() => $this->getCheckboxAccordionMiddleElement("accordion-incomes_tpp"),
            "incomes_tpp_attachments" => [
                "db" => false,
                "pfbc" => new \PFBC\Element\File(
                        $this->t->_get("Potvrdenia od zamestnávateľa <nobr><i><small>(počet zamestnávateľov = počet príloh)</small></i></nobr>"),
                        "incomes_tpp_attachments",
                        array(
                    "class" => "filepond",
                    "name" => "incomes_tpp_attachments",
                    "data-should-be-required" => 1,
                    "multiple" => "multiple",
                    "data-allow-reorder" => "true",
                    "data-max-file-size" => \modules\dpfob\api\Upload::MAX_FILE_SIZE_MB . "MB",
                    "data-max-files" => \modules\dpfob\api\Upload::MAX_FILES_COUNT,
                    "data-token" => $this->getToken(),
                    "data-dir" => self::ATTACHMENTS_INCOMES,
                    "data-grid-class" => "col-lg-6 col-md-12",
                    "append" => '<div class="invalid-feedback">' . $this->t->_get("Nahrajte aspoň jedno potvrdenie.") . '</div>',
                        )
                ),
            ],
            $this->getNextHtmlInputKey() => $this->getCheckboxAccordionEndElement(),
            $this->getNextHtmlInputKey() => $this->getCheckboxAccordionStartElement(),
            "incomes_szco" => [
                "db" => true,
                "controller" => \modules\forms\code\CheckboxController::class,
                "pfbc" => new \PFBC\Element\Checkbox(
                        "",
                        "incomes_szco",
                        array(1 => $this->t->_get("SZČO (samostatne zárobkovo činná osoba)")),
                        array(
                    "data-grid-class" => "col-md-12",
                    "class" => "accordion-toggle",
                    "data-bs-target" => "#accordion-incomes_szco",
                    "data-group" => "incomes",
                    "data-feedback-id" => "incomes-invalid-feedback",
                    "autocomplete" => "off",
                        )
                ),
            ],
            $this->getNextHtmlInputKey() => $this->getCheckboxAccordionMiddleElement("accordion-incomes_szco"),
            "incomes_szco_sum" => [
                "db" => true,
                "controller" => \modules\forms\code\NumberController::class,
                "pfbc" => new \PFBC\Element\Number(
                        $this->t->_get("Suma príjmov"),
                        "incomes_szco_sum",
                        array(
                    "min" => 0,
                    "max" => 99999999.99,
                    "step" => 0.01,
                    "data-should-be-required" => 1,
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                        ) + $this->getInputPostfixArray("€")
                ),
            ],
            "incomes_szco_description" => [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("Popis činnosti"),
                        "incomes_szco_description",
                        array(
                    "maxlength" => 255,
                    "data-should-be-required" => 1,
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                        )
                ),
            ],
            "incomes_szco_expenses" => [
                "db" => true,
                "controller" => \modules\forms\code\RadioController::class,
                "pfbc" => new \PFBC\Element\Radio(
                        $this->t->_get("Výdavky"),
                        "incomes_szco_expenses",
                        enums\Expenses::getStateMessage(),
                        array(
                    "data-should-be-required" => 1,
                    "class" => "",
                    "autocomplete" => "off",
                        )
                ),
            ],
            "incomes_szco_expenses_sum" => [
                "db" => true,
                "controller" => \modules\forms\code\NumberController::class,
                "pfbc" => new \PFBC\Element\Number(
                        $this->t->_get("Suma výdavkov"),
                        "incomes_szco_expenses_sum",
                        array(
                    "min" => 0,
                    "max" => 99999999.99,
                    "step" => 0.01,
                    "data-should-be-required" => 1,
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                        ) + $this->getInputPostfixArray("€")
                ),
            ],
            $this->getNextHtmlInputKey() => $this->getCheckboxAccordionEndElement(),
            $this->getNextHtmlInputKey() => $this->getCheckboxAccordionStartElement(),
            "incomes_licenses" => [
                "db" => true,
                "controller" => \modules\forms\code\CheckboxController::class,
                "pfbc" => new \PFBC\Element\Checkbox(
                        "",
                        "incomes_licenses",
                        array(1 => $this->t->_get("Licencie")),
                        array(
                    "data-grid-class" => "col-md-12",
                    "class" => "accordion-toggle",
                    "data-bs-target" => "#accordion-incomes_licenses",
                    "data-group" => "incomes",
                    "data-feedback-id" => "incomes-invalid-feedback",
                    "autocomplete" => "off",
                        )
                ),
            ],
            $this->getNextHtmlInputKey() => $this->getCheckboxAccordionMiddleElement("accordion-incomes_licenses"),
            "incomes_licenses_sum" => [
                "db" => true,
                "controller" => \modules\forms\code\NumberController::class,
                "pfbc" => new \PFBC\Element\Number(
                        $this->t->_get("Suma príjmov"),
                        "incomes_licenses_sum",
                        array(
                    "min" => 0,
                    "max" => 99999999.99,
                    "step" => 0.01,
                    "data-should-be-required" => 1,
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                        ) + $this->getInputPostfixArray("€")
                ),
            ],
            "incomes_licenses_expenses" => [
                "db" => true,
                "controller" => \modules\forms\code\RadioController::class,
                "pfbc" => new \PFBC\Element\Radio(
                        $this->t->_get("Výdavky"),
                        "incomes_licenses_expenses",
                        enums\Expenses::getStateMessage(),
                        array(
                    "data-should-be-required" => 1,
                    "class" => "",
                    "autocomplete" => "off",
                        )
                ),
            ],
            "incomes_licenses_expenses_sum" => [
                "db" => true,
                "controller" => \modules\forms\code\NumberController::class,
                "pfbc" => new \PFBC\Element\Number(
                        $this->t->_get("Suma výdavkov"),
                        "incomes_licenses_expenses_sum",
                        array(
                    "min" => 0,
                    "max" => 99999999.99,
                    "step" => 0.01,
                    "data-should-be-required" => 1,
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                        ) + $this->getInputPostfixArray("€")
                ),
            ],
            $this->getNextHtmlInputKey() => $this->getCheckboxAccordionEndElement(),
            $this->getNextHtmlInputKey() => $this->getCheckboxAccordionStartElement(),
            "incomes_estates_rental" => [
                "db" => true,
                "controller" => \modules\forms\code\CheckboxController::class,
                "pfbc" => new \PFBC\Element\Checkbox(
                        "",
                        "incomes_estates_rental",
                        array(1 => $this->t->_get("Prenájom nehnuteľností")),
                        array(
                    "data-grid-class" => "col-md-12",
                    "class" => "accordion-toggle",
                    "data-bs-target" => "#accordion-incomes_estates_rental",
                    "data-group" => "incomes",
                    "data-feedback-id" => "incomes-invalid-feedback",
                    "autocomplete" => "off",
                        )
                ),
            ],
            $this->getNextHtmlInputKey() => $this->getCheckboxAccordionMiddleElement("accordion-incomes_estates_rental"),
            "incomes_estates_rental_sum" => [
                "db" => true,
                "controller" => \modules\forms\code\NumberController::class,
                "pfbc" => new \PFBC\Element\Number(
                        $this->t->_get("Suma príjmov"),
                        "incomes_estates_rental_sum",
                        array(
                    "min" => 0,
                    "max" => 99999999.99,
                    "step" => 0.01,
                    "data-should-be-required" => 1,
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                        ) + $this->getInputPostfixArray("€")
                ),
            ],
            "incomes_estates_rental_sum_expenses" => [
                "db" => true,
                "controller" => \modules\forms\code\NumberController::class,
                "pfbc" => new \PFBC\Element\Number(
                        $this->t->_get("Suma výdavkov"),
                        "incomes_estates_rental_sum_expenses",
                        array(
                    "min" => 0,
                    "max" => 99999999.99,
                    "step" => 0.01,
                    "data-should-be-required" => 1,
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                        ) + $this->getInputPostfixArray("€")
                ),
            ],
            $this->getNextHtmlInputKey() => $this->getCheckboxAccordionEndElement(),
            $this->getNextHtmlInputKey() => $this->getCheckboxAccordionStartElement(),
            "incomes_capital" => [
                "db" => true,
                "controller" => \modules\forms\code\CheckboxController::class,
                "pfbc" => new \PFBC\Element\Checkbox(
                        "",
                        "incomes_capital",
                        array(1 => $this->t->_get("Kapitálové príjmy (akcie, ETF, CFD, úroky, dividendy)")),
                        array(
                    "data-grid-class" => "col-md-12",
                    "class" => "accordion-toggle",
                    "data-bs-target" => "#accordion-incomes_capital",
                    "data-group" => "incomes",
                    "data-feedback-id" => "incomes-invalid-feedback",
                    "autocomplete" => "off",
                        )
                ),
            ],
            $this->getNextHtmlInputKey() => $this->getCheckboxAccordionMiddleElement("accordion-incomes_capital"),
            "incomes_capital_items" => [
                "db" => true,
                "controller" => \modules\forms\code\MultiRowTextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("Popíšte príjem"),
                        "incomes_capital_items[]",
                        array(
                    "maxlength" => 100,
                    "data-should-be-required" => 1,
                    "data-grid-class" => "col-md-12",
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                        )
                ),
            ],
            $this->getNextHtmlInputKey() => $this->getCheckboxAccordionEndElement(),
            $this->getNextHtmlInputKey() => $this->getCheckboxAccordionStartElement(),
            "incomes_abroad" => [
                "db" => true,
                "controller" => \modules\forms\code\CheckboxController::class,
                "pfbc" => new \PFBC\Element\Checkbox(
                        "",
                        "incomes_abroad",
                        array(1 => $this->t->_get("Zahraničné príjmy")),
                        array(
                    "data-grid-class" => "col-md-12",
                    "class" => "accordion-toggle",
                    "data-bs-target" => "#accordion-incomes_abroad",
                    "data-group" => "incomes",
                    "data-feedback-id" => "incomes-invalid-feedback",
                    "autocomplete" => "off",
                        )
                ),
            ],
            $this->getNextHtmlInputKey() => $this->getCheckboxAccordionMiddleElement("accordion-incomes_abroad"),
            "incomes_abroad_items" => [
                "db" => true,
                "controller" => \modules\forms\code\MultiRowTextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("Popíšte príjem"),
                        "incomes_abroad_items[]",
                        array(
                    "maxlength" => 100,
                    "data-should-be-required" => 1,
                    "data-grid-class" => "col-md-12",
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                        )
                ),
            ],
            $this->getNextHtmlInputKey() => $this->getCheckboxAccordionEndElement(),
            $this->getNextHtmlInputKey() => $this->getCheckboxAccordionStartElement(),
            "incomes_other" => [
                "db" => true,
                "controller" => \modules\forms\code\CheckboxController::class,
                "pfbc" => new \PFBC\Element\Checkbox(
                        "",
                        "incomes_other",
                        array(1 => $this->t->_get("Ostatné")),
                        array(
                    "data-grid-class" => "col-md-12",
                    "class" => "accordion-toggle",
                    "data-bs-target" => "#accordion-incomes_other",
                    "data-group" => "incomes",
                    "data-feedback-id" => "incomes-invalid-feedback",
                    "autocomplete" => "off",
                        )
                ),
            ],
            $this->getNextHtmlInputKey() => $this->getCheckboxAccordionMiddleElement("accordion-incomes_other"),
            "incomes_other_items" => [
                "db" => true,
                "controller" => \modules\forms\code\MultiRowTextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("Popíšte príjem"),
                        "incomes_other_items[]",
                        array(
                    "maxlength" => 100,
                    "data-should-be-required" => 1,
                    "data-grid-class" => "col-md-12",
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                        )
                ),
            ],
            $this->getNextHtmlInputKey() => $this->getCheckboxAccordionEndElement(),
            $this->getNextHtmlInputKey() => $this->getCheckboxInvalidFeedbackElement("incomes-invalid-feedback", $this->t->_get("Vyberte aspoň jeden príjem.")),
        ];
        return $elements;
    }

    protected function getKidsElements() {
        $elements = [
            $this->getNextHtmlInputKey() => $this->getTitleElement("Daňový bonus na deti", 4, "mb-0"),
        ];
        for ($i = 1; $i <= self::$kidsRows; $i++) {
            $elements[$this->getNextHtmlInputKey()] = $this->getCheckboxAccordionStartElement();
            $elements["kids_tax_bonus_" . $i] = [
                "db" => true,
                "controller" => \modules\forms\code\CheckboxController::class,
                "pfbc" => new \PFBC\Element\Checkbox(
                        "",
                        "kids_tax_bonus_" . $i,
                        array(1 => $i . ". " . $this->t->_get("dieťa")),
                        array(
                    "data-grid-class" => "col-md-12",
                    "class" => "accordion-toggle",
                    "data-bs-target" => "#accordion-kids_tax_bonus_" . $i,
                    "autocomplete" => "off",
                        )
                ),
            ];
            $elements[$this->getNextHtmlInputKey()] = $this->getCheckboxAccordionMiddleElement("accordion-kids_tax_bonus_" . $i);
            $elements["kids_tax_bonus_name_" . $i] = [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("Meno a priezvisko dieťaťa"),
                        "kids_tax_bonus_name_" . $i,
                        array(
                    "maxlength" => 100,
                    "data-should-be-required" => 1,
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                        )
                ),
            ];
            $elements["kids_tax_bonus_birth_number_" . $i] = [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("Rodné číslo"),
                        "kids_tax_bonus_birth_number_" . $i,
                        array(
                    "data-should-be-required" => 1,
                    "inputmode" => "numeric",
                    "pattern" => "^\d{6}\/?\d{3,4}$",
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                    "append" => '<div class="invalid-feedback">' . $this->t->_get("Zadajte rodné číslo bez lomky.") . '</div>',
                        )
                ),
            ];
            $elements["kids_tax_bonus_attachments_" . $i] = [
                "db" => false,
                "pfbc" => new \PFBC\Element\File(
                        $this->t->_get("Rodný list"),
                        "kids_tax_bonus[" . $i . "][attachments]",
                        array(
                    "class" => "filepond",
                    "name" => self::ATTACHMENTS_KIDS_TAX_BONUS . $i,
                    "data-should-be-required" => 1,
                    "multiple" => "multiple",
                    "data-allow-reorder" => "true",
                    "data-max-file-size" => \modules\dpfob\api\Upload::MAX_FILE_SIZE_MB . "MB",
                    "data-max-files" => \modules\dpfob\api\Upload::MAX_FILES_COUNT,
                    "data-token" => $this->getToken(),
                    "data-dir" => self::ATTACHMENTS_KIDS_TAX_BONUS . $i,
                    "data-grid-class" => "col-lg-6 col-md-12",
                    "append" => '<div class="invalid-feedback">' . $this->t->_get("Nahrajte prednú a zadnú stranu rodného listu.") . '</div>',
                        )
                ),
            ];
            $elements[$this->getNextHtmlInputKey()] = $this->getCheckboxAccordionEndElement();
        }

        return $elements;
    }

    protected function getOtherElements() {
        return [
            $this->getNextHtmlInputKey() => $this->getTitleElement("Daňové zvýhodnenia", 4, "mb-0"),
            $this->getCheckboxAccordionStartElement(),
            "nczd_spouse" => [
                "db" => true,
                "controller" => \modules\forms\code\CheckboxController::class,
                "pfbc" => new \PFBC\Element\Checkbox(
                        "",
                        "nczd_spouse",
                        array(1 => $this->t->_get("Nezdaniteľná časť základu dane na manželku (manžela)")),
                        array(
                    "data-grid-class" => "col-md-12",
                    "class" => "accordion-toggle",
                    "data-bs-target" => "#accordion-nczd_spouse",
                    "autocomplete" => "off",
                        )
                ),
            ],
            $this->getCheckboxAccordionMiddleElement("accordion-nczd_spouse"),
            "nczd_spouse_name" => [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("Meno a priezvisko"),
                        "nczd_spouse_name",
                        array(
                    "maxlength" => 100,
                    "data-should-be-required" => 1,
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                        )
                ),
            ],
            "nczd_spouse_birth_number" => [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("Rodné číslo"),
                        "nczd_spouse_birth_number",
                        array(
                    "data-should-be-required" => 1,
                    "pattern" => "^\d{6}\/?\d{3,4}$",
                    "inputmode" => "numeric",
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                    "append" => '<div class="invalid-feedback">' . $this->t->_get("Zadajte rodné číslo bez lomky.") . '</div>',
                        )
                ),
            ],
            "nczd_spouse_income_sum" => [
                "db" => true,
                "controller" => \modules\forms\code\NumberController::class,
                "pfbc" => new \PFBC\Element\Number(
                        $this->t->_get("Príjem"),
                        "nczd_spouse_income_sum",
                        array(
                    "min" => 0,
                    "max" => 99999999.99,
                    "step" => 0.01,
                    "data-should-be-required" => 1,
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                        ) + $this->getInputPostfixArray("€")
                ),
            ],
            $this->getCheckboxAccordionEndElement(),
            $this->getCheckboxAccordionStartElement(),
            "dds" => [
                "db" => true,
                "controller" => \modules\forms\code\CheckboxController::class,
                "pfbc" => new \PFBC\Element\Checkbox(
                        "",
                        "dds",
                        array(1 => $this->t->_get("DDS (doplnkové dôchodkové sporenie)")),
                        array(
                    "data-grid-class" => "col-md-12",
                    "class" => "accordion-toggle",
                    "data-bs-target" => "#accordion-dds",
                    "autocomplete" => "off",
                        )
                ),
            ],
            $this->getCheckboxAccordionMiddleElement("accordion-dds"),
            "dds_attachments" => [
                "db" => false,
                "pfbc" => new \PFBC\Element\File(
                        $this->t->_get("Potvrdenie z DDS"),
                        "dds_attachments",
                        array(
                    "class" => "filepond",
                    "name" => "dds_attachments",
                    "data-should-be-required" => 1,
                    "multiple" => "multiple",
                    "data-allow-reorder" => "true",
                    "data-max-file-size" => \modules\dpfob\api\Upload::MAX_FILE_SIZE_MB . "MB",
                    "data-max-files" => \modules\dpfob\api\Upload::MAX_FILES_COUNT,
                    "data-token" => $this->getToken(),
                    "data-dir" => self::ATTACHMENTS_DDS,
                    "data-grid-class" => "col-lg-6 col-md-12",
                    "append" => '<div class="invalid-feedback">' . $this->t->_get("Nahrajte potvrdenie.") . '</div>',
                        )
                ),
            ],
            $this->getCheckboxAccordionEndElement(),
            $this->getCheckboxAccordionStartElement(),
            "mortage" => [
                "db" => true,
                "controller" => \modules\forms\code\CheckboxController::class,
                "pfbc" => new \PFBC\Element\Checkbox(
                        "",
                        "mortage",
                        array(1 => $this->t->_get("Hypotéka")),
                        array(
                    "data-grid-class" => "col-md-12",
                    "class" => "accordion-toggle",
                    "data-bs-target" => "#accordion-mortage",
                    "autocomplete" => "off",
                        )
                ),
            ],
            $this->getCheckboxAccordionMiddleElement("accordion-mortage"),
            "mortage_attachments" => [
                "db" => false,
                "pfbc" => new \PFBC\Element\File(
                        $this->t->_get("Potvrdenie o hypotéke z banky"),
                        "mortage_attachments",
                        array(
                    "class" => "filepond",
                    "name" => "mortage_attachments",
                    "data-should-be-required" => 1,
                    "multiple" => "multiple",
                    "data-allow-reorder" => "true",
                    "data-max-file-size" => \modules\dpfob\api\Upload::MAX_FILE_SIZE_MB . "MB",
                    "data-max-files" => \modules\dpfob\api\Upload::MAX_FILES_COUNT,
                    "data-token" => $this->getToken(),
                    "data-dir" => self::ATTACHMENTS_MORTAGE,
                    "data-grid-class" => "col-lg-6 col-md-12",
                    "append" => '<div class="invalid-feedback">' . $this->t->_get("Nahrajte potvrdenie z banky.") . '</div>',
                        )
                ),
            ],
            $this->getCheckboxAccordionEndElement(),
            $this->getCheckboxAccordionStartElement(),
            "tax_gift" => [
                "db" => true,
                "controller" => \modules\forms\code\CheckboxController::class,
                "pfbc" => new \PFBC\Element\Checkbox(
                        "",
                        "tax_gift",
                        array(1 => $this->t->_get("2 % z dane")),
                        array(
                    "data-grid-class" => "col-md-12",
                    "class" => "accordion-toggle",
                    "data-bs-target" => "#accordion-tax_gift",
                    "autocomplete" => "off",
                        )
                ),
            ],
            $this->getCheckboxAccordionMiddleElement("accordion-tax_gift"),
            "tax_gift_company_name" => [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("Názov organizácie"),
                        "tax_gift_company_name",
                        array(
                    "maxlength" => 100,
                    "data-should-be-required" => 1,
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                        )
                ),
            ],
            "tax_gift_company_idn" => [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("IČO"),
                        "tax_gift_company_idn",
                        array(
                    "inputmode" => "numeric",
                    "autocomplete" => "off",
                    "pattern" => "^\d{8}$",
                    "maxlength" => "8",
                    "data-should-be-required" => 1,
                    "class" => "form-control " . $this->inputClass,
                    "append" => '<div class="invalid-feedback">' . $this->t->_get("Zadajte platné IČO.") . '</div>',
                    "autocomplete" => "off",
                        )
                ),
            ],
            "tax_gift_attachments" => [
                "db" => false,
                "pfbc" => new \PFBC\Element\File(
                        $this->t->_get("3 % (potvrdenie o dobrovoľníckej činnosti)"),
                        "mortage_attachments",
                        array(
                    "class" => "filepond",
                    "name" => "tax_gift_attachments",
                    "multiple" => "multiple",
                    "data-allow-reorder" => "true",
                    "data-max-file-size" => \modules\dpfob\api\Upload::MAX_FILE_SIZE_MB . "MB",
                    "data-max-files" => \modules\dpfob\api\Upload::MAX_FILES_COUNT,
                    "data-token" => $this->getToken(),
                    "data-dir" => self::ATTACHMENTS_TAX_GIFT,
                    "data-grid-class" => "col-lg-6 col-md-12",
                    "append" => '<div class="invalid-feedback"></div>',
                        )
                ),
            ],
            "tax_gift_mother_name" => [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("Meno a priezvisko matky"),
                        "tax_gift_mother_name",
                        array(
                    "maxlength" => 100,
                    "data-should-be-required" => 1,
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                        )
                ),
            ],
            "tax_gift_mother_birth_number" => [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("Rodné číslo matky"),
                        "tax_gift_mother_birth_number",
                        array(
                    "data-should-be-required" => 1,
                    "pattern" => "^\d{6}\/?\d{3,4}$",
                    "inputmode" => "numeric",
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                    "append" => '<div class="invalid-feedback">' . $this->t->_get("Zadajte rodné číslo bez lomky.") . '</div>',
                        )
                ),
            ],
            "tax_gift_father_name" => [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("Meno a priezvisko otca"),
                        "tax_gift_father_name",
                        array(
                    "maxlength" => 100,
                    "data-should-be-required" => 1,
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                        )
                ),
            ],
            "tax_gift_father_birth_number" => [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("Rodné číslo otca"),
                        "tax_gift_father_birth_number",
                        array(
                    "data-should-be-required" => 1,
                    "pattern" => "^\d{6}\/?\d{3,4}$",
                    "inputmode" => "numeric",
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                    "append" => '<div class="invalid-feedback">' . $this->t->_get("Zadajte rodné číslo bez lomky.") . '</div>',
                        )
                ),
            ],
            $this->getCheckboxAccordionEndElement(),
            $this->getNextHtmlInputKey() => $this->getTitleElement("Sociálne a zdravotné poistenie (okrem TPP)"),
            "social_insurance_sum" => [
                "db" => true,
                "controller" => \modules\forms\code\NumberController::class,
                "pfbc" => new \PFBC\Element\Number(
                        $this->t->_get("Zaplatené SP za rok ") . $this->lastYear,
                        "social_insurance_sum",
                        array(
                    "min" => 0,
                    "max" => 99999999.99,
                    "step" => 0.01,
                    "data-should-be-required" => 1,
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                        ) + $this->getInputPostfixArray("€")
                ),
            ],
            "social_insurance_voluntary_sum" => [
                "db" => true,
                "controller" => \modules\forms\code\NumberController::class,
                "pfbc" => new \PFBC\Element\Number(
                        $this->t->_get("Zaplatené dobrovoľné SP za rok ") . $this->lastYear,
                        "social_insurance_voluntary_sum",
                        array(
                    "min" => 0,
                    "max" => 99999999.99,
                    "step" => 0.01,
                    "value" => 0,
                    "class" => "form-control default-0 " . $this->inputClass,
                    "autocomplete" => "off",
                        ) + $this->getInputPostfixArray("€")
                ),
            ],
            $this->getNewRowElement(),
            "health_insurance_sum" => [
                "db" => true,
                "controller" => \modules\forms\code\NumberController::class,
                "pfbc" => new \PFBC\Element\Number(
                        $this->t->_get("Zaplatené ZP za rok ") . $this->lastYear,
                        "health_insurance_sum",
                        array(
                    "min" => 0,
                    "max" => 99999999.99,
                    "step" => 0.01,
                    "data-should-be-required" => 1,
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                        ) + $this->getInputPostfixArray("€")
                ),
            ],
            "health_insurance_overpayment_sum" => [
                "db" => true,
                "controller" => \modules\forms\code\NumberController::class,
                "pfbc" => new \PFBC\Element\Number(
                        $this->t->_get("Preplatok z ročného zúčtovania"),
                        "health_insurance_overpayment_sum",
                        array(
                    "min" => 0,
                    "max" => 99999999.99,
                    "step" => 0.01,
                    "value" => 0,
                    "class" => "form-control default-0 " . $this->inputClass,
                    "autocomplete" => "off",
                        ) + $this->getInputPostfixArray("€")
                ),
            ],
            "health_insurance_undercharge_sum" => [
                "db" => true,
                "controller" => \modules\forms\code\NumberController::class,
                "pfbc" => new \PFBC\Element\Number(
                        $this->t->_get("Nedoplatok z ročného zúčtovania"),
                        "health_insurance_undercharge_sum",
                        array(
                    "min" => 0,
                    "max" => 99999999.99,
                    "step" => 0.01,
                    "value" => 0,
                    "class" => "form-control default-0 " . $this->inputClass,
                    "autocomplete" => "off",
                        ) + $this->getInputPostfixArray("€")
                ),
            ],
                ] + $this->getLastElements();
    }

    protected function getLastElements() {
        return [
            $this->getNextHtmlInputKey() => $this->getTitleElement("Ostatné"),
            "iban" => [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Textbox(
                        $this->t->_get("IBAN pre prípadné vrátenie peňazí"),
                        "iban",
                        array(
                    "maxlength" => 34,
                    "pattern" => "^[A-Za-z]{2}[0-9]{2}(?:\s?[A-Za-z0-9]){11,30}$",
                    "required" => 1,
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                    "append" => '<div class="invalid-feedback">' . $this->t->_get("Zadajte platný IBAN.") . '</div>',
                        )
                ),
            ],
            "attachments" => [
                "db" => false,
                "pfbc" => new \PFBC\Element\File(
                        $this->t->_get("Prílohy"),
                        "attachments",
                        array(
                    "class" => "filepond",
                    "name" => "attachments",
                    "multiple" => "multiple",
                    "data-allow-reorder" => "true",
                    "data-max-file-size" => \modules\dpfob\api\Upload::MAX_FILE_SIZE_MB . "MB",
                    "data-max-files" => \modules\dpfob\api\Upload::MAX_FILES_COUNT * 5,
                    "data-token" => $this->getToken(),
                    "data-dir" => self::ATTACHMENTS,
                    "data-grid-class" => "col-xl-6 col-lg-4",
                    "append" => '<div class="invalid-feedback"></div>',
                        )
                ),
            ],
            "note" => [
                "db" => true,
                "controller" => \modules\forms\code\TextController::class,
                "pfbc" => new \PFBC\Element\Textarea(
                        $this->t->_get("Poznámka"),
                        "note",
                        array(
                    "class" => "form-control " . $this->inputClass,
                    "autocomplete" => "off",
                    "data-grid-class" => "col-md-12",
                    "style" => 'color: blue',
                    "placeholder" => $this->t->_get("Ak máte akekoľvek otázky, napíšte nám ich a my Vás budeme čo najskôr kontaktovať."),
                        )
                ),
            ],
        ];
    }

    protected function getHiddenElements() {
        return [
            "token" => [
                "db" => true,
                "pfbc" => new \PFBC\Element\Hidden(
                        "token",
                        $this->getToken(),
                ),
            ],
        ];
    }

    /**
     * @return array
     */
    public function getAllElements(): array {
        $elements = $this->getBasicInfoElements() + $this->getIncomesElements() + $this->getKidsElements() + $this->getOtherElements() + $this->getHiddenElements();
        return $elements;
    }

    /**
     * @return array
     */
    protected function getCheckboxAccordionStartElement() {
        return ["db" => false, "pfbc" => new \PFBC\Element\HTML('<div class="col-md-12 accordion-checkbox"><div class="mt-0"><div class="form-check p-3 mb-0 bg-light border-bottom">')];
    }

    /**
     * @return array
     */
    protected function getCheckboxAccordionMiddleElement($id) {
        return ["db" => false, "pfbc" => new \PFBC\Element\HTML('</div><div class="collapse mt-3 mb-4 row" id="' . $id . '">')];
    }

    /**
     * @return array
     */
    protected function getCheckboxAccordionEndElement() {
        return ["db" => false, "pfbc" => new \PFBC\Element\HTML('</div></div></div>')];
    }

    /**
     * @return array
     */
    protected function getCheckboxInvalidFeedbackElement($id, $message) {
        return ["db" => false, "pfbc" => new \PFBC\Element\HTML('<div class="invalid-feedback" id="' . $id . '">' . $message . '</div>')];
    }

    /**
     * @return array
     */
    protected function getInputPostfixArray($text) {
        return [
            "prepend" => '<div class="input-group mb-3">',
            "append" => ' <span class="input-group-text">' . $text . '</span></div>'
        ];
    }

    protected function getGdprInputHTML() {
        ob_start();
        ?>
        <div class="col-md-12">
            <div class="alert alert-light">     
                <div class="checkbox mb-0 w-auto d-table position-relative">
                    <label class="mb-0">
                        <input name="gdpr_accept" value="1" type="checkbox" required><i class="helper"></i>
                        <span class="form-check-label" for="gdprCheck">
                            <?php echo $this->t->_get("Súhlasím so spracovaním") ?> <a target="_blank" href="/ochrana-osobnych-udajov/"><?php echo $this->t->_get("osobných údajov") ?></a>
                            <?php echo $this->t->_get("a s ") ?> <a target="_blank" href="/obchodne-podmienky/"><?php echo $this->t->_get("obchodnými podmienkami") ?></a>.
                        </span>
                        <div class="invalid-feedback"><?php echo $this->t->_get("Pre pokračovanie je potrebné súshlasiť so spracovaním osobných údajov a obchodnými podmienkami.") ?></div>
                    </label>
                </div>  
            </div>
        </div>
        <?php
        return ob_get_clean();
    }

    protected function setPrefilledDataJs() {
        $dpfob = $this->user?->getCustomer()?->getLastDPFOB();
        if ($dpfob) {
            ob_start();
            ?>
            <script>
                $(document).ready(function () {
                    setTimeout(function () {
                        const form = document.getElementById('form-<?php echo self::NAME ?>');
                        const formData = {
                            is_our_client: <?php echo $dpfob->_get('is_our_client') ?>,
                            our_client_company: '<?php echo $dpfob->_get('our_client_company') ?>',
                            dp_submits_client: <?php echo $dpfob->_get('dp_submits_client') ?>,
                            dp_delayed_submission: <?php echo $dpfob->_get('dp_delayed_submission') ?>,
                            degree_before: '<?php echo $dpfob->_get('degree_before') ?>',
                            first_name: '<?php echo $dpfob->_get('first_name') ?>',
                            last_name: '<?php echo $dpfob->_get('last_name') ?>',
                            degree_after: '<?php echo $dpfob->_get('degree_after') ?>',
                            phone: '<?php echo $dpfob->_get('phone') ?>',
                            street: '<?php echo $dpfob->_get('street') ?>',
                            zip: '<?php echo $dpfob->_get('zip') ?>',
                            city: '<?php echo $dpfob->_get('city') ?>',
                            country: '<?php echo $dpfob->_get('country') ?>',
                            birth_number: '<?php echo $dpfob->_get('birth_number') ?>',
                            idn: '<?php echo $dpfob->_get('idn') ?>',
                            tin: '<?php echo $dpfob->_get('tin') ?>',
                            vat: '<?php echo $dpfob->_get('vat') ?>',
                            sk_naces_id: '<?php echo $dpfob->_get('sk_naces_id') ?>',
                            iban: '<?php echo $dpfob->_get('iban') ?>',
                            'person_status[]': ["<?php echo implode('", "', $dpfob->_getSet('person_status')) ?>"]
                        };

                        Object.keys(formData).forEach(key => {
                            const inputs = form.querySelectorAll(`[name="${key}"]`);

                            inputs.forEach(input => {
                                if (input.type === 'radio') {
                                    input.checked = (input.value == formData[key]);
                                } else if (input.type === 'checkbox') {
                                    if (Array.isArray(formData[key])) {
                                        input.checked = formData[key].includes(input.value);
                                    } else if (!isNaN(formData[key])) {
                                        input.checked = Boolean(formData[key]);
                                    } else {
                                        input.checked = formData[key] === input.value;
                                    }
                                } else {
                                    input.value = formData[key];
                                }
                                input.dispatchEvent(new Event('change', {bubbles: true}));
                            });
                        });
                    }, 1100);
                });
            </script>
            <?php
            return ob_get_clean();
        }

        return '';
    }

    protected function getInlineLoginHTML() {
        ob_start();
        ?>
        <div class="col-md-12" id="inlineLogin" style="display: none;">
            <div class="row">
                <div class="col-xl-6 col-lg-4 col-md-12 mt-2 mt-xl-0">
                    <label class="d-none d-xl-block">&nbsp;</label>
                    <div class="alert alert-warning py-2">
                        <div class="py-1">
                            <i class="fa fa-exclamation-triangle me-1"></i> <?php echo $this->t->_get("Účet s touto e-mailovou adresou už existuje. Prihláste sa.") ?>
                        </div>
                    </div>
                </div>
                <div class="col-xl-3 col-lg-4 col-md-6">
                    <div class="form-group my-0">
                        <label for="inputPassword"><?php echo $this->t->_get("Heslo") ?></label>
                        <input type="password" id="inputPassword" class="form-control <?php echo $this->inputClass ?>" name="password" style="padding-left: 42px">  
                    </div>
                </div>
                <div class="col-xl-3 col-lg-4 col-md-6">
                    <label>&nbsp;</label>
                    <a class="btn btn-lg btn-primary d-block" onclick="inlineLoginClick()" href="javascript:;"><?php echo $this->t->_get("Prihlásiť sa") ?></a>
                </div>
            </div>
        </div>
        <?php
        return ob_get_clean();
    }

    protected function getRegistrationHTML() {
        ob_start();
        ?>
        <div class="col-md-12 mt-4" id="registrationWrapper">
            <div class="row">
                <div class="col-xl-3 col-lg-4 col-md-6">
                    <div class="alert alert-light">
                        <div class="checkbox position-relative d-table" style="margin-top: 2px !important; margin-bottom: 1px !important;">
                            <label class="mb-0">
                                <input name="createAccount" value="1" type="checkbox" autocomplete='off'><i class="helper"></i>
                                <span class="form-check-label">
                                    <?php echo $this->t->_get("Vytvoriť zákaznícky účet") ?>
                                </span>
                            </label>
                        </div> 
                    </div>
                </div>
                <div class="col-xl-9 col-lg-8 col-md-6">
                    <div class="alert alert-info">
                        <i class="fa fa-info-circle me-1"></i> <?php echo $this->t->_get("Vytvorením účtu získate podrobný prehľad o aktuálnom priebehu spracovania Vášho daňového priznania.") ?>
                    </div>
                </div>
            </div> 
            <div class="row collapse mb-2" id="registrationContainer">
                <div class="col-xl-3 col-lg-4 col-md-6">
                    <div class="form-group my-0">
                        <label for="inputRegPassword"><span class="required">*</span> <?php echo $this->t->_get("Heslo") ?></label>
                        <input type="password" id="inputRegPassword" autocomplete="new-password" class="form-control <?php echo $this->inputClass ?>" name="reg_password" required style="padding-left: 42px">  
                    </div>
                </div>
                <div class="col-xl-3 col-lg-4 col-md-6">
                    <div class="form-group my-0">
                        <label for="inputRegPasswordRetype"><span class="required">*</span> <?php echo $this->t->_get("Heslo znovu") ?></label>
                        <input type="password" id="inputRegPasswordRetype" class="form-control <?php echo $this->inputClass ?>" name="reg_password_retype" required style="padding-left: 42px">  
                    </div>
                </div>
            </div>
        </div>
        <?php
        return ob_get_clean();
    }

    protected function updateIsRequired(array $elements, $post) {
        $unsets = [];
        if (isset($post['is_our_client']) && intval($post['is_our_client']) === 0) {
            $unsets[] = 'our_client_company';
        }

        if (!isset($post['incomes_szco'])) {
            $unsets[] = "incomes_szco_sum";
            $unsets[] = "incomes_szco_description";
            $unsets[] = "incomes_szco_expenses";
        }

        if (!isset($post['incomes_licenses'])) {
            $unsets[] = "incomes_licenses_sum";
            $unsets[] = "incomes_licenses_expenses";
        }

        if (!isset($post['incomes_estates_rental'])) {
            $unsets[] = "incomes_estates_rental_sum";
            $unsets[] = "incomes_estates_rental_sum_expenses";
        }

        if (!isset($post['incomes_other'])) {
            $unsets[] = "incomes_other_items";
        }

        for ($i = 1; $i <= self::$kidsRows; $i++) {
            if (!isset($post['kids_tax_bonus'][$i]['active'])) {
                $unsets[] = 'kids_tax_bonus_name_' . $i;
                $unsets[] = 'kids_tax_bonus_birth_number_' . $i;
            }
        }

        if (!isset($post['nczd_spouse'])) {
            $unsets[] = "nczd_spouse_name";
            $unsets[] = "nczd_spouse_birth_number";
            $unsets[] = "nczd_spouse_income_sum";
        }

        if (!isset($post['tax_gift'])) {
            $unsets[] = "tax_gift_company_name";
            $unsets[] = "tax_gift_company_idn";
        }

        foreach ($unsets as $el) {
            if (isset($elements[$el]) && isset($elements[$el]['pfbc'])) {
                $elements[$el]['pfbc']->unsetRequired();
            }
        }
        return $elements;
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit