#!/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()