feat: add PEJ external contacts import script
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
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
8 contacts: PEJ leadership (Maj, Woszczyk, Skolimowski), supplier dept, Bechtel (Holda), PAA (Glowacki), Ministry (Wrochna), Choczewo info point. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
5fff7d8af5
commit
0efb79b294
172
scripts/import_pej_contacts.py
Normal file
172
scripts/import_pej_contacts.py
Normal file
@ -0,0 +1,172 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Import PEJ-related external contacts to NordaBiz."""
|
||||
|
||||
import os
|
||||
import sys
|
||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
from database import ExternalContact
|
||||
|
||||
DATABASE_URL = os.environ.get('DATABASE_URL', 'postgresql://nordabiz_app:dev_password@localhost:5433/nordabiz')
|
||||
|
||||
CONTACTS = [
|
||||
# PEJ — kluczowe osoby
|
||||
{
|
||||
'first_name': 'Grzegorz', 'last_name': 'Maj',
|
||||
'position': 'Pełnomocnik Zarządu ds. Wsparcia Rozwoju Rynku (Local Content)',
|
||||
'organization_name': 'Polskie Elektrownie Jądrowe Sp. z o.o.',
|
||||
'organization_type': 'company',
|
||||
'organization_address': 'Al. Jerozolimskie 132/136, 02-305 Warszawa',
|
||||
'organization_website': 'https://pej.pl',
|
||||
'linkedin_url': 'https://www.linkedin.com/in/grzegorz-maj-80145574/',
|
||||
'project_name': 'Elektrownia Jądrowa Lubiatowo-Kopalino',
|
||||
'tags': 'PEJ, local content, dostawcy, atom, elektrownia jądrowa',
|
||||
'notes': 'Kluczowy kontakt Izby ws. local content. Spotkanie z Zarządem Izby w marcu 2026.',
|
||||
},
|
||||
{
|
||||
'first_name': 'Marek', 'last_name': 'Woszczyk',
|
||||
'position': 'Prezes Zarządu PEJ',
|
||||
'organization_name': 'Polskie Elektrownie Jądrowe Sp. z o.o.',
|
||||
'organization_type': 'company',
|
||||
'organization_address': 'Al. Jerozolimskie 132/136, 02-305 Warszawa',
|
||||
'organization_website': 'https://pej.pl',
|
||||
'linkedin_url': 'https://www.linkedin.com/in/marek-woszczyk-emba-1670a969/',
|
||||
'project_name': 'Elektrownia Jądrowa Lubiatowo-Kopalino',
|
||||
'tags': 'PEJ, zarząd, prezes, atom, elektrownia jądrowa',
|
||||
'notes': 'Prezes PEJ od 1 lipca 2025. Były prezes URE i PGE.',
|
||||
},
|
||||
{
|
||||
'first_name': 'Marcin', 'last_name': 'Skolimowski',
|
||||
'position': 'Rzecznik prasowy PEJ',
|
||||
'phone': '+48 885 661 184',
|
||||
'email': 'Marcin.Skolimowski@pej.pl',
|
||||
'organization_name': 'Polskie Elektrownie Jądrowe Sp. z o.o.',
|
||||
'organization_type': 'company',
|
||||
'organization_address': 'Al. Jerozolimskie 132/136, 02-305 Warszawa',
|
||||
'organization_website': 'https://pej.pl',
|
||||
'project_name': 'Elektrownia Jądrowa Lubiatowo-Kopalino',
|
||||
'tags': 'PEJ, rzecznik, media, komunikacja, atom',
|
||||
},
|
||||
# PEJ — dział dostawców
|
||||
{
|
||||
'first_name': 'Dział', 'last_name': 'Dostawców PEJ',
|
||||
'position': 'Rejestracja i współpraca z dostawcami',
|
||||
'phone': '+48 885 993 277',
|
||||
'email': 'dostawcy@pej.pl',
|
||||
'organization_name': 'Polskie Elektrownie Jądrowe Sp. z o.o.',
|
||||
'organization_type': 'company',
|
||||
'organization_address': 'Al. Jerozolimskie 132/136, 02-305 Warszawa',
|
||||
'organization_website': 'https://pej.pl',
|
||||
'project_name': 'Elektrownia Jądrowa Lubiatowo-Kopalino',
|
||||
'tags': 'PEJ, dostawcy, przetargi, zamówienia, local content',
|
||||
'notes': 'Rejestracja dostawców: wysłać nazwę firmy, NIP, branżę, DUNS, osobę kontaktową.',
|
||||
'related_links': [
|
||||
{'title': 'Platforma zakupowa PEJ', 'url': 'https://pz.pej.pl/', 'type': 'portal'},
|
||||
{'title': 'Tablica ogłoszeń dostawców', 'url': 'https://pej.pl/en/for-suppliers/notice-board/', 'type': 'portal'},
|
||||
],
|
||||
},
|
||||
# Bechtel Polska
|
||||
{
|
||||
'first_name': 'Leszek', 'last_name': 'Hołda',
|
||||
'position': 'Prezes Bechtel Polska',
|
||||
'organization_name': 'Bechtel Polska Sp. z o.o.',
|
||||
'organization_type': 'company',
|
||||
'organization_website': 'https://www.bechtel.com/markets/nuclear-power/',
|
||||
'linkedin_url': 'https://www.linkedin.com/in/leszekholda/',
|
||||
'project_name': 'Elektrownia Jądrowa Lubiatowo-Kopalino',
|
||||
'tags': 'Bechtel, generalny wykonawca, budowa, EPC, atom',
|
||||
'notes': 'Generalny wykonawca elektrowni jądrowej. Wcześniej w PKP Energetyka.',
|
||||
},
|
||||
# PAA
|
||||
{
|
||||
'first_name': 'Andrzej', 'last_name': 'Głowacki',
|
||||
'position': 'Prezes Państwowej Agencji Atomistyki',
|
||||
'organization_name': 'Państwowa Agencja Atomistyki (PAA)',
|
||||
'organization_type': 'government',
|
||||
'organization_address': 'ul. Bonifraterska 17, 00-203 Warszawa',
|
||||
'organization_website': 'https://www.gov.pl/web/paa',
|
||||
'project_name': 'Elektrownia Jądrowa Lubiatowo-Kopalino',
|
||||
'tags': 'PAA, regulator, dozór jądrowy, pozwolenie na budowę, atom',
|
||||
'notes': 'Prezes PAA od marca 2023 (kadencja 5 lat). Odpowiada za wydanie pozwolenia na budowę EJ.',
|
||||
},
|
||||
# Ministerstwo Przemysłu
|
||||
{
|
||||
'first_name': 'Wojciech', 'last_name': 'Wrochna',
|
||||
'position': 'Pełnomocnik Rządu ds. Strategicznej Infrastruktury Energetycznej',
|
||||
'organization_name': 'Ministerstwo Przemysłu',
|
||||
'organization_type': 'government',
|
||||
'organization_website': 'https://www.gov.pl/web/przemysl',
|
||||
'project_name': 'Elektrownia Jądrowa Lubiatowo-Kopalino',
|
||||
'tags': 'ministerstwo, pełnomocnik, infrastruktura energetyczna, atom, PEJ',
|
||||
'notes': 'Sekretarz stanu w Ministerstwie Przemysłu. Nadzoruje PEJ od strony rządowej.',
|
||||
},
|
||||
# Punkt informacyjny Choczewo
|
||||
{
|
||||
'first_name': 'Punkt Informacyjny', 'last_name': 'PEJ Choczewo',
|
||||
'position': 'Lokalny Punkt Informacyjny',
|
||||
'phone': '+48 785 772 726',
|
||||
'email': 'info.choczewo@pej.pl',
|
||||
'organization_name': 'Polskie Elektrownie Jądrowe Sp. z o.o.',
|
||||
'organization_type': 'company',
|
||||
'organization_address': 'ul. Pucka 4, 84-210 Choczewo',
|
||||
'organization_website': 'https://pej.pl',
|
||||
'project_name': 'Elektrownia Jądrowa Lubiatowo-Kopalino',
|
||||
'tags': 'PEJ, Choczewo, punkt informacyjny, lokalny, atom',
|
||||
'notes': 'Godziny otwarcia: Pn/Śr/Czw 9-16, Pt 9-14, Wt nieczynne.',
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
def import_contacts():
|
||||
engine = create_engine(DATABASE_URL)
|
||||
Session = sessionmaker(bind=engine)
|
||||
session = Session()
|
||||
|
||||
added = 0
|
||||
skipped = 0
|
||||
|
||||
for c in CONTACTS:
|
||||
# Check if already exists (by name + organization)
|
||||
existing = session.query(ExternalContact).filter(
|
||||
ExternalContact.first_name == c['first_name'],
|
||||
ExternalContact.last_name == c['last_name'],
|
||||
ExternalContact.organization_name == c['organization_name']
|
||||
).first()
|
||||
|
||||
if existing:
|
||||
print(f" SKIP: {c['first_name']} {c['last_name']} ({c['organization_name']}) — already exists (ID={existing.id})")
|
||||
skipped += 1
|
||||
continue
|
||||
|
||||
contact = ExternalContact(
|
||||
first_name=c['first_name'],
|
||||
last_name=c['last_name'],
|
||||
position=c.get('position'),
|
||||
phone=c.get('phone'),
|
||||
email=c.get('email'),
|
||||
linkedin_url=c.get('linkedin_url'),
|
||||
organization_name=c['organization_name'],
|
||||
organization_type=c.get('organization_type', 'other'),
|
||||
organization_address=c.get('organization_address'),
|
||||
organization_website=c.get('organization_website'),
|
||||
project_name=c.get('project_name'),
|
||||
tags=c.get('tags'),
|
||||
notes=c.get('notes'),
|
||||
related_links=c.get('related_links'),
|
||||
source_type='manual',
|
||||
is_active=True,
|
||||
is_verified=True,
|
||||
)
|
||||
session.add(contact)
|
||||
print(f" ADD: {c['first_name']} {c['last_name']} @ {c['organization_name']}")
|
||||
added += 1
|
||||
|
||||
session.commit()
|
||||
print(f"\nDone: {added} added, {skipped} skipped")
|
||||
session.close()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import_contacts()
|
||||
Loading…
Reference in New Issue
Block a user