237 lines
10 KiB
Python
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)
|