nordabiz/fix_company_data_corrections.py
2026-01-01 14:01:49 +01:00

237 lines
10 KiB
Python

#!/usr/bin/env python3
"""
Korekta danych 3 firm w NordaBiz
================================
Zmiany:
1. HILLOB (ID: 35) - zmiana kategorii z "budownictwo/maszyny budowlane" na "maszyny szwalnicze"
2. Hotel SPA Wieniawa (ID: 36) - zmiana lokalizacji z "Lebork" na "Rekowo Gorne"
3. Wejherplast (ID: 74) - zmiana profilu z "tworzywa sztuczne" na "drukarnia poligraficzna"
Data utworzenia: 2025-12-29
Autor: Claude Code
WAZNE: Uruchom na produkcji jako:
cd /var/www/nordabiznes
sudo -u www-data /var/www/nordabiznes/venv/bin/python3 fix_company_data_corrections.py --dry-run
sudo -u www-data /var/www/nordabiznes/venv/bin/python3 fix_company_data_corrections.py
"""
import sys
from datetime import datetime
from sqlalchemy import text
from database import SessionLocal, Company, Category
def fix_company_data_corrections(dry_run: bool = False):
"""
Wykonaj korekty danych dla 3 firm.
Args:
dry_run: Jesli True, tylko pokazuje zmiany bez zapisywania
"""
db = SessionLocal()
try:
print("=" * 70)
print("KOREKTA DANYCH FIRM - NordaBiz")
print("=" * 70)
print(f"Data: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
print(f"Tryb: {'DRY RUN (bez zmian)' if dry_run else 'PRODUKCJA (zmiany zapisane)'}")
print("=" * 70)
# Pobierz kategorie (bedziemy potrzebowac ID dla Produkcja i Handel)
categories = {cat.slug: cat for cat in db.query(Category).all()}
print(f"\nDostepne kategorie: {[c.name for c in categories.values()]}")
# ============================================================
# 1. HILLOB (ID: 35) - zmiana branzy
# ============================================================
print("\n" + "-" * 50)
print("1. HILLOB (ID: 35)")
print("-" * 50)
hillob = db.query(Company).filter_by(id=35).first()
if not hillob:
hillob = db.query(Company).filter(Company.name.ilike('%hillob%')).first()
if hillob:
print(f" Nazwa: {hillob.name}")
print(f" Slug: {hillob.slug}")
print(f" Aktualna kategoria ID: {hillob.category_id}")
print(f" Aktualna kategoria: {hillob.category.name if hillob.category else 'brak'}")
print(f" Aktualny industry_sector: {hillob.industry_sector}")
print(f" Aktualny opis krotki: {hillob.description_short}")
# Zmiana na kategorie Handel (dystrybucja maszyn szwalniczych)
handel_category = categories.get('handel')
print("\n ZMIANY:")
print(f" - category_id: {hillob.category_id} -> {handel_category.id if handel_category else 'brak'}")
print(f" - industry_sector: '{hillob.industry_sector}' -> 'Maszyny szwalnicze - dystrybucja i serwis'")
print(f" - description_short: '{hillob.description_short}' -> 'Dystrybucja i serwis profesjonalnych maszyn szwalniczych'")
if not dry_run:
hillob.category_id = handel_category.id if handel_category else hillob.category_id
hillob.industry_sector = 'Maszyny szwalnicze - dystrybucja i serwis'
hillob.description_short = 'Dystrybucja i serwis profesjonalnych maszyn szwalniczych'
hillob.last_updated = datetime.now()
hillob.data_source = 'Manual correction (2025-12-29)'
print(" [OK] Zmiany zapisane")
else:
print(" [BLAD] Firma HILLOB nie znaleziona!")
# ============================================================
# 2. Hotel SPA Wieniawa (ID: 36) - zmiana lokalizacji
# ============================================================
print("\n" + "-" * 50)
print("2. HOTEL SPA WIENIAWA (ID: 36)")
print("-" * 50)
wieniawa = db.query(Company).filter_by(id=36).first()
if not wieniawa:
wieniawa = db.query(Company).filter(Company.name.ilike('%wieniawa%')).first()
if wieniawa:
print(f" Nazwa: {wieniawa.name}")
print(f" Slug: {wieniawa.slug}")
print(f" Aktualne miasto (address_city): {wieniawa.address_city}")
print(f" Aktualny adres pelny: {wieniawa.address_full}")
print("\n ZMIANY:")
print(f" - address_city: '{wieniawa.address_city}' -> 'Rekowo Gorne'")
# Aktualizuj tez pelny adres jesli istnieje
new_address_full = None
if wieniawa.address_full:
# Zamien stare miasto na nowe w pelnym adresie
if wieniawa.address_city and wieniawa.address_city in str(wieniawa.address_full):
new_address_full = wieniawa.address_full.replace(wieniawa.address_city, 'Rekowo Gorne')
print(f" - address_full: '{wieniawa.address_full}' -> '{new_address_full}'")
if not dry_run:
wieniawa.address_city = 'Rekowo Gorne'
if new_address_full:
wieniawa.address_full = new_address_full
wieniawa.last_updated = datetime.now()
wieniawa.data_source = 'Manual correction (2025-12-29)'
print(" [OK] Zmiany zapisane")
else:
print(" [BLAD] Firma Hotel SPA Wieniawa nie znaleziona!")
# ============================================================
# 3. Wejherplast (ID: 74) - zmiana profilu
# ============================================================
print("\n" + "-" * 50)
print("3. WEJHERPLAST (ID: 74)")
print("-" * 50)
wejherplast = db.query(Company).filter_by(id=74).first()
if not wejherplast:
wejherplast = db.query(Company).filter(Company.name.ilike('%wejherplast%')).first()
if wejherplast:
print(f" Nazwa: {wejherplast.name}")
print(f" Slug: {wejherplast.slug}")
print(f" Aktualna kategoria ID: {wejherplast.category_id}")
print(f" Aktualna kategoria: {wejherplast.category.name if wejherplast.category else 'brak'}")
print(f" Aktualny industry_sector: {wejherplast.industry_sector}")
print(f" Aktualny opis krotki: {wejherplast.description_short}")
print(f" Aktualny opis pelny: {wejherplast.description_full[:100] if wejherplast.description_full else 'brak'}...")
# Zmiana kategorii na Uslugi lub Produkcja (drukarnia)
# Media moze byc tez odpowiednia (reklama, druk)
media_category = categories.get('media')
produkcja_category = categories.get('produkcja')
# Drukarnia poligraficzna - najlepsza kategoria to Media (marketing, reklama, druk)
target_category = media_category or produkcja_category
print("\n ZMIANY:")
print(f" - category_id: {wejherplast.category_id} -> {target_category.id if target_category else 'brak'} ({target_category.name if target_category else 'brak'})")
print(f" - industry_sector: '{wejherplast.industry_sector}' -> 'Poligrafia i druk'")
print(f" - description_short: '{wejherplast.description_short}' -> 'Drukarnia poligraficzna - druk cyfrowy i offsetowy'")
if not dry_run:
wejherplast.category_id = target_category.id if target_category else wejherplast.category_id
wejherplast.industry_sector = 'Poligrafia i druk'
wejherplast.description_short = 'Drukarnia poligraficzna - druk cyfrowy i offsetowy'
# Aktualizuj tez pelny opis jesli zawiera informacje o tworzywach sztucznych
if wejherplast.description_full and 'tworzyw' in wejherplast.description_full.lower():
wejherplast.description_full = 'Wejherplast to profesjonalna drukarnia poligraficzna swiadczaca kompleksowe uslugi druku dla firm. Specjalizujemy sie w druku cyfrowym, offsetowym oraz materialachreklamowych.'
wejherplast.last_updated = datetime.now()
wejherplast.data_source = 'Manual correction (2025-12-29)'
print(" [OK] Zmiany zapisane")
else:
print(" [BLAD] Firma Wejherplast nie znaleziona!")
# ============================================================
# PODSUMOWANIE
# ============================================================
print("\n" + "=" * 70)
if dry_run:
print("DRY RUN ZAKONCZONY - zadne zmiany nie zostaly zapisane")
print("\nAby zastosowac zmiany, uruchom bez flagi --dry-run:")
print(" python3 fix_company_data_corrections.py")
else:
db.commit()
print("KOREKTA ZAKONCZYNA - 3 FIRMY ZAKTUALIZOWANE")
print("\nZmiany zostaly zapisane w bazie danych.")
print("=" * 70)
except Exception as e:
print(f"\n[BLAD KRYTYCZNY] {e}")
db.rollback()
raise
finally:
db.close()
def show_current_state():
"""Pokaz aktualny stan firm przed korektami."""
db = SessionLocal()
try:
print("\n" + "=" * 70)
print("AKTUALNY STAN FIRM (przed korektami)")
print("=" * 70)
for company_id, name_hint in [(35, 'hillob'), (36, 'wieniawa'), (74, 'wejherplast')]:
company = db.query(Company).filter_by(id=company_id).first()
if not company:
company = db.query(Company).filter(Company.name.ilike(f'%{name_hint}%')).first()
if company:
print(f"\n{company.name} (ID: {company.id})")
print(f" - Slug: {company.slug}")
print(f" - Kategoria: {company.category.name if company.category else 'brak'}")
print(f" - Miasto: {company.address_city}")
print(f" - Sektor: {company.industry_sector}")
print(f" - Opis: {company.description_short}")
else:
print(f"\n[!] Firma {name_hint} nie znaleziona (ID: {company_id})")
finally:
db.close()
if __name__ == "__main__":
# Parsuj argumenty
dry_run = '--dry-run' in sys.argv or '-n' in sys.argv
show_state = '--show' in sys.argv or '-s' in sys.argv
if '--help' in sys.argv or '-h' in sys.argv:
print(__doc__)
print("\nUzycie:")
print(" python3 fix_company_data_corrections.py [opcje]")
print("\nOpcje:")
print(" --dry-run, -n Pokaz zmiany bez zapisywania")
print(" --show, -s Pokaz aktualny stan firm przed zmianami")
print(" --help, -h Pokaz ta pomoc")
sys.exit(0)
if show_state:
show_current_state()
fix_company_data_corrections(dry_run=dry_run)