feat: Add granular visibility controls for registry sub-sections
Some checks are pending
NordaBiz Tests / Unit & Integration Tests (push) Waiting to run
NordaBiz Tests / E2E Tests (Playwright) (push) Blocked by required conditions
NordaBiz Tests / Smoke Tests (Production) (push) Blocked by required conditions
NordaBiz Tests / Send Failure Notification (push) Blocked by required conditions

19 sub-sections (7 CEIDG + 12 KRS) can now be individually hidden
within the Official Registry Data section. Sub-section toggles use
indented styling with lighter colors in the edit UI.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Maciej Pienczyn 2026-02-17 10:15:13 +01:00
parent 2c0b068428
commit d3b59b824e
3 changed files with 152 additions and 66 deletions

View File

@ -24,6 +24,15 @@ VALID_SECTION_KEYS = [
'about', 'services', 'board', 'owner_info', 'registry', 'legal',
'contact', 'social_media', 'recommendations', 'website', 'seo_audit',
'gbp_audit', 'social_audit', 'it_audit', 'news',
# Registry sub-sections (CEIDG)
'registry.ceidg_status', 'registry.ceidg_owner', 'registry.ceidg_start_date',
'registry.ceidg_pkd', 'registry.ceidg_contacts', 'registry.ceidg_succession',
'registry.ceidg_locations',
# Registry sub-sections (KRS)
'registry.krs_legal_form', 'registry.krs_capital', 'registry.krs_identity',
'registry.krs_contacts', 'registry.krs_agreement', 'registry.krs_representation',
'registry.krs_board', 'registry.krs_partners', 'registry.krs_activities',
'registry.krs_financials', 'registry.krs_address', 'registry.krs_register',
]
@ -72,22 +81,54 @@ def company_edit(company_id=None):
editable_contacts = [c for c in contacts if c.source in EDITABLE_SOURCES]
registry_ceidg_subs = [
('registry.ceidg_status', 'Status działalności'),
('registry.ceidg_owner', 'Właściciel JDG'),
('registry.ceidg_start_date', 'Data rozpoczęcia'),
('registry.ceidg_pkd', 'Kody PKD'),
('registry.ceidg_contacts', 'Dane kontaktowe z CEIDG'),
('registry.ceidg_succession', 'Zarządca sukcesyjny'),
('registry.ceidg_locations', 'Dodatkowe miejsca działalności'),
]
registry_krs_subs = [
('registry.krs_legal_form', 'Forma prawna'),
('registry.krs_capital', 'Kapitał zakładowy'),
('registry.krs_identity', 'Identyfikatory (KRS, NIP, REGON, data)'),
('registry.krs_contacts', 'Dane kontaktowe'),
('registry.krs_agreement', 'Umowa spółki'),
('registry.krs_representation', 'Sposób reprezentacji'),
('registry.krs_board', 'Zarząd'),
('registry.krs_partners', 'Wspólnicy'),
('registry.krs_activities', 'Przedmiot działalności (PKD)'),
('registry.krs_financials', 'Sprawozdania finansowe'),
('registry.krs_address', 'Adres siedziby z KRS'),
('registry.krs_register', 'Dane rejestrowe i odpis KRS'),
]
# Choose sub-sections based on company type
if company.ceidg_id:
registry_subs = registry_ceidg_subs
elif company.krs and company.data_source == 'KRS API':
registry_subs = registry_krs_subs
else:
registry_subs = []
section_definitions = [
('about', 'O firmie', 'Opis firmy, historia, wartości'),
('services', 'Usługi i kompetencje', 'Oferowane usługi, technologie, obszar działania'),
('board', 'Zarząd i Wspólnicy', 'Osoby w zarządzie, wspólnicy, prokurenci'),
('owner_info', 'Właściciel (JDG)', 'Dane właściciela jednoosobowej działalności'),
('registry', 'Dane z rejestrów urzędowych', 'Dane z CEIDG/KRS, PKD, adresy rejestrowe'),
('legal', 'Informacje prawne i biznesowe', 'NIP, REGON, KRS, forma prawna'),
('contact', 'Dane kontaktowe', 'Telefony, e-mail, adres, dodatkowe kontakty'),
('social_media', 'Social Media', 'Profile w mediach społecznościowych'),
('recommendations', 'Rekomendacje', 'Rekomendacje od innych członków Izby'),
('website', 'Strona WWW', 'Link do strony i podgląd'),
('seo_audit', 'Analiza SEO', 'Wyniki audytu SEO strony internetowej'),
('gbp_audit', 'Audyt Google Business Profile', 'Wyniki audytu wizytówki Google'),
('social_audit', 'Audyt Social Media', 'Wyniki audytu mediów społecznościowych'),
('it_audit', 'Audyt IT', 'Wyniki audytu infrastruktury IT'),
('news', 'Aktualności i wydarzenia', 'Najnowsze wydarzenia firmy'),
('about', 'O firmie', 'Opis firmy, historia, wartości', []),
('services', 'Usługi i kompetencje', 'Oferowane usługi, technologie, obszar działania', []),
('board', 'Zarząd i Wspólnicy', 'Osoby w zarządzie, wspólnicy, prokurenci', []),
('owner_info', 'Właściciel (JDG)', 'Dane właściciela jednoosobowej działalności', []),
('registry', 'Dane z rejestrów urzędowych', 'Dane z CEIDG/KRS, PKD, adresy rejestrowe', registry_subs),
('legal', 'Informacje prawne i biznesowe', 'NIP, REGON, KRS, forma prawna', []),
('contact', 'Dane kontaktowe', 'Telefony, e-mail, adres, dodatkowe kontakty', []),
('social_media', 'Social Media', 'Profile w mediach społecznościowych', []),
('recommendations', 'Rekomendacje', 'Rekomendacje od innych członków Izby', []),
('website', 'Strona WWW', 'Link do strony i podgląd', []),
('seo_audit', 'Analiza SEO', 'Wyniki audytu SEO strony internetowej', []),
('gbp_audit', 'Audyt Google Business Profile', 'Wyniki audytu wizytówki Google', []),
('social_audit', 'Audyt Social Media', 'Wyniki audytu mediów społecznościowych', []),
('it_audit', 'Audyt IT', 'Wyniki audytu infrastruktury IT', []),
('news', 'Aktualności i wydarzenia', 'Najnowsze wydarzenia firmy', []),
]
return render_template(

View File

@ -1270,8 +1270,8 @@
{% if company.ceidg_id %}
<!-- Status CEIDG -->
{% if company.ceidg_status %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid {% if company.ceidg_status == 'AKTYWNY' %}#22c55e{% elif company.ceidg_status == 'ZAWIESZONY' %}#f59e0b{% else %}#ef4444{% endif %};">
{% if company.ceidg_status and (not company.is_section_hidden('registry.ceidg_status') or can_edit_profile or is_admin) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid {% if company.ceidg_status == 'AKTYWNY' %}#22c55e{% elif company.ceidg_status == 'ZAWIESZONY' %}#f59e0b{% else %}#ef4444{% endif %}; {% if company.is_section_hidden('registry.ceidg_status') %}opacity: 0.5; border: 2px dashed #f59e0b;{% endif %}">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em;">Status działalności</div>
<div style="font-size: var(--font-size-xl); font-weight: 700; color: {% if company.ceidg_status == 'AKTYWNY' %}#22c55e{% elif company.ceidg_status == 'ZAWIESZONY' %}#f59e0b{% else %}#ef4444{% endif %}; margin-top: 4px;">
{{ company.ceidg_status }}
@ -1280,8 +1280,8 @@
{% endif %}
<!-- Właściciel JDG -->
{% if company.owner_first_name %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #8b5cf6;">
{% if company.owner_first_name and (not company.is_section_hidden('registry.ceidg_owner') or can_edit_profile or is_admin) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #8b5cf6; {% if company.is_section_hidden('registry.ceidg_owner') %}opacity: 0.5; border: 2px dashed #f59e0b;{% endif %}">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em;">Właściciel</div>
<div style="font-size: var(--font-size-xl); font-weight: 700; color: #8b5cf6; margin-top: 4px;">
{{ company.owner_first_name }} {{ company.owner_last_name }}
@ -1291,8 +1291,8 @@
{% endif %}
<!-- Data rozpoczęcia -->
{% if company.business_start_date %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #059669;">
{% if company.business_start_date and (not company.is_section_hidden('registry.ceidg_start_date') or can_edit_profile or is_admin) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #059669; {% if company.is_section_hidden('registry.ceidg_start_date') %}opacity: 0.5; border: 2px dashed #f59e0b;{% endif %}">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em;">Data rozpoczęcia działalności</div>
<div style="font-size: var(--font-size-xl); font-weight: 700; color: #059669; margin-top: 4px;">
{{ company.business_start_date.strftime('%d.%m.%Y') }}
@ -1305,8 +1305,8 @@
{% endif %}
<!-- PKD główny -->
{% if company.pkd_code %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #7c3aed;">
{% if company.pkd_code and (not company.is_section_hidden('registry.ceidg_pkd') or can_edit_profile or is_admin) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #7c3aed; {% if company.is_section_hidden('registry.ceidg_pkd') %}opacity: 0.5; border: 2px dashed #f59e0b;{% endif %}">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em;">PKD główny</div>
<div style="font-size: var(--font-size-xl); font-weight: 700; color: #7c3aed; font-family: monospace; margin-top: 4px;">
{{ company.pkd_code }}
@ -1321,8 +1321,8 @@
{% if company.ceidg_raw_data %}
{% set raw = company.ceidg_raw_data %}
{% if raw.email or raw.telefon or raw.www %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #0ea5e9; grid-column: span 2;">
{% if (raw.email or raw.telefon or raw.www) and (not company.is_section_hidden('registry.ceidg_contacts') or can_edit_profile or is_admin) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #0ea5e9; grid-column: span 2; {% if company.is_section_hidden('registry.ceidg_contacts') %}opacity: 0.5; border: 2px dashed #f59e0b;{% endif %}">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: var(--spacing-md);">Dane kontaktowe z CEIDG</div>
<div style="display: flex; flex-wrap: wrap; gap: var(--spacing-lg);">
{% if raw.email %}
@ -1348,8 +1348,8 @@
{% endif %}
<!-- Wszystkie PKD z CEIDG -->
{% if raw.pkd and raw.pkd|length > 1 %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #a855f7; grid-column: span 2;">
{% if raw.pkd and raw.pkd|length > 1 and (not company.is_section_hidden('registry.ceidg_pkd') or can_edit_profile or is_admin) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #a855f7; grid-column: span 2; {% if company.is_section_hidden('registry.ceidg_pkd') %}opacity: 0.5; border: 2px dashed #f59e0b;{% endif %}">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: var(--spacing-md);">
Wszystkie kody PKD ({{ raw.pkd|length }})
</div>
@ -1364,8 +1364,8 @@
{% endif %}
<!-- Zarządca sukcesyjny -->
{% if raw.zarzadcaSukcesyjny %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #f59e0b;">
{% if raw.zarzadcaSukcesyjny and (not company.is_section_hidden('registry.ceidg_succession') or can_edit_profile or is_admin) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #f59e0b; {% if company.is_section_hidden('registry.ceidg_succession') %}opacity: 0.5; border: 2px dashed #f59e0b;{% endif %}">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em;">Zarządca sukcesyjny</div>
<div style="font-size: var(--font-size-lg); font-weight: 600; color: #f59e0b; margin-top: 4px;">
{{ raw.zarzadcaSukcesyjny.imie }} {{ raw.zarzadcaSukcesyjny.nazwisko }}
@ -1374,8 +1374,8 @@
{% endif %}
<!-- Dodatkowe adresy działalności -->
{% if raw.adresyDzialalnosciDodatkowe and raw.adresyDzialalnosciDodatkowe|length > 0 %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #64748b; grid-column: span 2;">
{% if raw.adresyDzialalnosciDodatkowe and raw.adresyDzialalnosciDodatkowe|length > 0 and (not company.is_section_hidden('registry.ceidg_locations') or can_edit_profile or is_admin) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #64748b; grid-column: span 2; {% if company.is_section_hidden('registry.ceidg_locations') %}opacity: 0.5; border: 2px dashed #f59e0b;{% endif %}">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: var(--spacing-md);">
Dodatkowe miejsca działalności ({{ raw.adresyDzialalnosciDodatkowe|length }})
</div>
@ -1401,8 +1401,8 @@
{% set krs = company.krs_raw_data or {} %}
<!-- Forma prawna -->
{% if company.legal_form %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #2563eb;">
{% if company.legal_form and (not company.is_section_hidden('registry.krs_legal_form') or can_edit_profile or is_admin) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #2563eb; {% if company.is_section_hidden('registry.krs_legal_form') %}opacity: 0.5; border: 2px dashed #f59e0b;{% endif %}">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em;">Forma prawna</div>
<div style="font-size: var(--font-size-lg); font-weight: 700; color: #2563eb; margin-top: 4px;">
{{ company.legal_form }}
@ -1411,8 +1411,8 @@
{% endif %}
<!-- Kapitał zakładowy -->
{% if company.capital_amount %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #22c55e;">
{% if company.capital_amount and (not company.is_section_hidden('registry.krs_capital') or can_edit_profile or is_admin) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #22c55e; {% if company.is_section_hidden('registry.krs_capital') %}opacity: 0.5; border: 2px dashed #f59e0b;{% endif %}">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em;">Kapitał zakładowy</div>
<div style="font-size: var(--font-size-xl); font-weight: 700; color: #22c55e; margin-top: 4px;">
{{ '{:,.2f}'.format(company.capital_amount).replace(',', ' ') }} PLN
@ -1424,16 +1424,18 @@
{% endif %}
<!-- Numer KRS -->
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #6366f1;">
{% if not company.is_section_hidden('registry.krs_identity') or can_edit_profile or is_admin %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #6366f1; {% if company.is_section_hidden('registry.krs_identity') %}opacity: 0.5; border: 2px dashed #f59e0b;{% endif %}">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em;">Numer KRS</div>
<div style="font-size: var(--font-size-xl); font-weight: 700; color: #6366f1; font-family: monospace; margin-top: 4px;">
{{ company.krs }}
</div>
</div>
{% endif %}
<!-- NIP z KRS -->
{% if krs.nip %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #3b82f6;">
{% if krs.nip and (not company.is_section_hidden('registry.krs_identity') or can_edit_profile or is_admin) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #3b82f6; {% if company.is_section_hidden('registry.krs_identity') %}opacity: 0.5; border: 2px dashed #f59e0b;{% endif %}">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em;">NIP</div>
<div style="font-size: var(--font-size-xl); font-weight: 700; color: #3b82f6; font-family: monospace; margin-top: 4px;">
{{ krs.nip[:3] }}-{{ krs.nip[3:6] }}-{{ krs.nip[6:8] }}-{{ krs.nip[8:] }}
@ -1442,8 +1444,8 @@
{% endif %}
<!-- REGON z KRS -->
{% if krs.regon %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #0891b2;">
{% if krs.regon and (not company.is_section_hidden('registry.krs_identity') or can_edit_profile or is_admin) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #0891b2; {% if company.is_section_hidden('registry.krs_identity') %}opacity: 0.5; border: 2px dashed #f59e0b;{% endif %}">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em;">REGON</div>
<div style="font-size: var(--font-size-xl); font-weight: 700; color: #0891b2; font-family: monospace; margin-top: 4px;">
{{ krs.regon }}
@ -1452,8 +1454,8 @@
{% endif %}
<!-- Data rejestracji w KRS -->
{% if company.krs_registration_date or (krs.daty and krs.daty.rejestracji) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #059669;">
{% if (company.krs_registration_date or (krs.daty and krs.daty.rejestracji)) and (not company.is_section_hidden('registry.krs_identity') or can_edit_profile or is_admin) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #059669; {% if company.is_section_hidden('registry.krs_identity') %}opacity: 0.5; border: 2px dashed #f59e0b;{% endif %}">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em;">Data rejestracji w KRS</div>
<div style="font-size: var(--font-size-xl); font-weight: 700; color: #059669; margin-top: 4px;">
{% if company.krs_registration_date %}
@ -1472,8 +1474,8 @@
{% endif %}
<!-- Dane kontaktowe (z KRS + telefon z bazy) -->
{% if (krs.kontakt_krs and (krs.kontakt_krs.email or krs.kontakt_krs.www or krs.kontakt_krs.adres_epuap)) or company.phone %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #10b981; grid-column: span 2;">
{% if ((krs.kontakt_krs and (krs.kontakt_krs.email or krs.kontakt_krs.www or krs.kontakt_krs.adres_epuap)) or company.phone) and (not company.is_section_hidden('registry.krs_contacts') or can_edit_profile or is_admin) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #10b981; grid-column: span 2; {% if company.is_section_hidden('registry.krs_contacts') %}opacity: 0.5; border: 2px dashed #f59e0b;{% endif %}">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: var(--spacing-md);">Dane kontaktowe</div>
<div style="display: flex; flex-wrap: wrap; gap: var(--spacing-lg);">
{% if company.phone %}
@ -1505,8 +1507,8 @@
{% endif %}
<!-- Umowa spółki -->
{% if krs.umowa_spolki and (krs.umowa_spolki.data_umowy or krs.umowa_spolki.czas_trwania) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #7c3aed; grid-column: span 2;">
{% if krs.umowa_spolki and (krs.umowa_spolki.data_umowy or krs.umowa_spolki.czas_trwania) and (not company.is_section_hidden('registry.krs_agreement') or can_edit_profile or is_admin) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #7c3aed; grid-column: span 2; {% if company.is_section_hidden('registry.krs_agreement') %}opacity: 0.5; border: 2px dashed #f59e0b;{% endif %}">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: var(--spacing-md);">Umowa spółki</div>
<div style="display: flex; flex-wrap: wrap; gap: var(--spacing-lg);">
{% if krs.umowa_spolki.data_umowy %}
@ -1532,8 +1534,8 @@
{% endif %}
<!-- Sposób reprezentacji -->
{% if company.krs_representation or krs.sposob_reprezentacji %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #8b5cf6; grid-column: span 2;">
{% if (company.krs_representation or krs.sposob_reprezentacji) and (not company.is_section_hidden('registry.krs_representation') or can_edit_profile or is_admin) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #8b5cf6; grid-column: span 2; {% if company.is_section_hidden('registry.krs_representation') %}opacity: 0.5; border: 2px dashed #f59e0b;{% endif %}">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: var(--spacing-sm);">
{% if krs.nazwa_organu %}{{ krs.nazwa_organu }} - {% endif %}Sposób reprezentacji
</div>
@ -1544,8 +1546,8 @@
{% endif %}
<!-- Zarząd -->
{% if krs.zarzad and krs.zarzad|length > 0 %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #0ea5e9; grid-column: span 2;">
{% if krs.zarzad and krs.zarzad|length > 0 and (not company.is_section_hidden('registry.krs_board') or can_edit_profile or is_admin) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #0ea5e9; grid-column: span 2; {% if company.is_section_hidden('registry.krs_board') %}opacity: 0.5; border: 2px dashed #f59e0b;{% endif %}">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: var(--spacing-md);">
Zarząd ({{ krs.zarzad|length }} {{ 'osoba' if krs.zarzad|length == 1 else 'osoby' if krs.zarzad|length < 5 else 'osób' }})
</div>
@ -1570,8 +1572,8 @@
{% endif %}
<!-- Wspólnicy -->
{% if krs.wspolnicy and krs.wspolnicy|length > 0 %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #f59e0b; grid-column: span 2;">
{% if krs.wspolnicy and krs.wspolnicy|length > 0 and (not company.is_section_hidden('registry.krs_partners') or can_edit_profile or is_admin) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #f59e0b; grid-column: span 2; {% if company.is_section_hidden('registry.krs_partners') %}opacity: 0.5; border: 2px dashed #f59e0b;{% endif %}">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: var(--spacing-md);">
Wspólnicy ({{ krs.wspolnicy|length }})
</div>
@ -1599,8 +1601,8 @@
{% endif %}
<!-- Przedmiot działalności (PKD) -->
{% if company.krs_activities and company.krs_activities|length > 0 %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #a855f7; grid-column: span 2;">
{% if company.krs_activities and company.krs_activities|length > 0 and (not company.is_section_hidden('registry.krs_activities') or can_edit_profile or is_admin) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #a855f7; grid-column: span 2; {% if company.is_section_hidden('registry.krs_activities') %}opacity: 0.5; border: 2px dashed #f59e0b;{% endif %}">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: var(--spacing-md);">
Przedmiot działalności z KRS ({{ company.krs_activities|length }} PKD)
</div>
@ -1612,8 +1614,8 @@
{% endfor %}
</div>
</div>
{% elif krs.przedmiot_dzialalnosci and krs.przedmiot_dzialalnosci|length > 0 %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #a855f7; grid-column: span 2;">
{% elif krs.przedmiot_dzialalnosci and krs.przedmiot_dzialalnosci|length > 0 and (not company.is_section_hidden('registry.krs_activities') or can_edit_profile or is_admin) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #a855f7; grid-column: span 2; {% if company.is_section_hidden('registry.krs_activities') %}opacity: 0.5; border: 2px dashed #f59e0b;{% endif %}">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: var(--spacing-md);">
Przedmiot działalności z KRS ({{ krs.przedmiot_dzialalnosci|length }} PKD)
</div>
@ -1633,8 +1635,8 @@
{% endif %}
<!-- Sprawozdania finansowe -->
{% if krs.sprawozdania_finansowe and krs.sprawozdania_finansowe|length > 0 %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #14b8a6; grid-column: span 2;">
{% if krs.sprawozdania_finansowe and krs.sprawozdania_finansowe|length > 0 and (not company.is_section_hidden('registry.krs_financials') or can_edit_profile or is_admin) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #14b8a6; grid-column: span 2; {% if company.is_section_hidden('registry.krs_financials') %}opacity: 0.5; border: 2px dashed #f59e0b;{% endif %}">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: var(--spacing-md);">
Sprawozdania finansowe ({{ krs.sprawozdania_finansowe|length }})
</div>
@ -1650,8 +1652,8 @@
{% endif %}
<!-- Adres z KRS -->
{% if krs.adres and (krs.adres.ulica or krs.adres.miejscowosc) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #64748b;">
{% if krs.adres and (krs.adres.ulica or krs.adres.miejscowosc) and (not company.is_section_hidden('registry.krs_address') or can_edit_profile or is_admin) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #64748b; {% if company.is_section_hidden('registry.krs_address') %}opacity: 0.5; border: 2px dashed #f59e0b;{% endif %}">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: var(--spacing-sm);">Adres siedziby z KRS</div>
<div style="font-size: var(--font-size-base); color: var(--text-primary);">
{% if krs.adres.ulica %}{{ krs.adres.ulica }}{% endif %}
@ -1668,8 +1670,8 @@
{% endif %}
<!-- OPP Status -->
{% if krs.czy_opp %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #ec4899;">
{% if krs.czy_opp and (not company.is_section_hidden('registry.krs_register') or can_edit_profile or is_admin) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #ec4899; {% if company.is_section_hidden('registry.krs_register') %}opacity: 0.5; border: 2px dashed #f59e0b;{% endif %}">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em;">Status OPP</div>
<div style="font-size: var(--font-size-lg); font-weight: 700; color: #ec4899; margin-top: 4px;">
Organizacja Pożytku Publicznego
@ -1679,8 +1681,8 @@
{% endif %}
<!-- Dane sądu rejestrowego -->
{% if krs.rejestr and (krs.rejestr.sygnatura_akt or krs.rejestr.sad_rejestrowy or krs.rejestr.dzien_konczacy_rok_obrotowy) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #78716c;">
{% if krs.rejestr and (krs.rejestr.sygnatura_akt or krs.rejestr.sad_rejestrowy or krs.rejestr.dzien_konczacy_rok_obrotowy) and (not company.is_section_hidden('registry.krs_register') or can_edit_profile or is_admin) %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #78716c; {% if company.is_section_hidden('registry.krs_register') %}opacity: 0.5; border: 2px dashed #f59e0b;{% endif %}">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: var(--spacing-sm);">Dane rejestrowe</div>
<div style="font-size: var(--font-size-sm); color: var(--text-muted);">
{% if krs.rejestr.sygnatura_akt %}
@ -1698,7 +1700,8 @@
<!-- Metadane KRS -->
{% if krs.metadata or krs.daty %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #94a3b8;">
{% if not company.is_section_hidden('registry.krs_register') or can_edit_profile or is_admin %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #94a3b8; {% if company.is_section_hidden('registry.krs_register') %}opacity: 0.5; border: 2px dashed #f59e0b;{% endif %}">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: var(--spacing-sm);">Informacje o odpisie KRS</div>
<div style="font-size: var(--font-size-sm); color: var(--text-muted);">
{% if krs.metadata %}
@ -1716,6 +1719,7 @@
</div>
</div>
{% endif %}
{% endif %}
{% endif %}
<!-- ===== KONIEC DANE KRS ===== -->

View File

@ -332,6 +332,28 @@
pointer-events: none;
}
/* Sub-section rows */
.visibility-sub {
padding-left: calc(var(--spacing-md) + 24px);
background: #f8fafc;
border-bottom-color: #f1f5f9;
}
.visibility-sub .visibility-label {
font-size: var(--font-size-sm);
font-weight: 400;
color: var(--text-secondary, #464646);
}
.visibility-toggle-sub {
padding: 4px 10px;
font-size: 0.8rem;
}
.visibility-toggle-sub svg { width: 15px; height: 15px; }
.visibility-toggle-sub.hidden-state {
background: #fef9c3;
color: #a16207;
border-color: #fde68a;
}
/* Website primary radio */
.website-primary-label {
display: flex;
@ -712,7 +734,7 @@
</div>
<div id="visibilitySections" style="margin-top: var(--spacing-lg);">
{% for key, label, description in section_definitions %}
{% for key, label, description, subs in section_definitions %}
<div class="visibility-row" data-section="{{ key }}">
<div class="visibility-info">
<span class="visibility-label">{{ label }}</span>
@ -729,6 +751,25 @@
{% endif %}
</button>
</div>
{% if subs %}
{% for sub_key, sub_label in subs %}
<div class="visibility-row visibility-sub" data-section="{{ sub_key }}">
<div class="visibility-info">
<span class="visibility-label">{{ sub_label }}</span>
</div>
<button type="button" class="visibility-toggle visibility-toggle-sub {% if company.is_section_hidden(sub_key) %}hidden-state{% endif %}"
onclick="toggleSection('{{ sub_key }}', this)" title="Kliknij aby zmienić widoczność">
{% if company.is_section_hidden(sub_key) %}
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"/><line x1="1" y1="1" x2="23" y2="23"/></svg>
<span>Ukryta</span>
{% else %}
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/><circle cx="12" cy="12" r="3"/></svg>
<span>Widoczna</span>
{% endif %}
</button>
</div>
{% endfor %}
{% endif %}
{% endfor %}
</div>