nasa_export.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import pandas as pd
  2. from sqlalchemy import create_engine
  3. def conn_string(dsn: dict[str, str]):
  4. return f"mssql+pyodbc://{dsn['user']}:{dsn['pass']}@{dsn['server']}/{dsn['database']}?driver=SQL+Server+Native+Client+11.0"
  5. def load_data(config: dict[str, str], source: str, period: str):
  6. year = period[:4]
  7. month = period[4:6]
  8. select_befehl_auftraege = f"SELECT * FROM [Auftraege_NASA_gruppiert] WHERE Periode = '{period}'"
  9. select_befehl_mitarbeiter = f"SELECT * FROM [Mitarbeiter_NASA] WHERE Periode = '{period}'"
  10. source_auftraege = "data/Auftraege_NASA_gruppiert.csv"
  11. source_mitarbeiter = "data/Mitarbeiter_NASA.csv"
  12. payload = {
  13. "HaendlerNr": config["client_id"],
  14. "Filiale": config["client_id"],
  15. "Jahr": year,
  16. "Monat": month,
  17. "Fabrikat": "Mazda",
  18. "AnzahlMitarbeiter": 0,
  19. "AnzahlProduktiv": 0.0,
  20. "WerkstattDurchlaeufe": 0,
  21. "Token": config["credentials"]["token"],
  22. }
  23. if source == "database":
  24. source_db = create_engine(conn_string(config["source_dsn"]))
  25. df = pd.read_sql(select_befehl_auftraege, con=source_db)
  26. rename_from = ["AuftragsArt", "AuftragsTyp"]
  27. rename_to = ["AuftragsArtId_Name", "AuftragsArt"]
  28. df = df.rename(columns=dict(zip(rename_from, rename_to)))
  29. else:
  30. df = pd.read_csv(source_auftraege, sep=";", encoding="latin-1", decimal=",")
  31. df = df[df["Periode"] == period]
  32. # AuftragsArt = ["Inspektion", "Karosseriearbeit", "Lackierung", "Verschleißteile", "Sonstiges"]
  33. # AuftragsArtId = {"1": "Extern", "2": "Garantie", "3": "Intern", "4": "Theke"]
  34. columns = [
  35. "AuftragsArt",
  36. "AuftragsArtId",
  37. "TeileUmsatz",
  38. "LohnUmsatz",
  39. "SonstigeUmsatz",
  40. "GesamtUmsatz",
  41. "AnzahlAuftraege",
  42. ]
  43. df = df[columns]
  44. df.to_csv(
  45. f"{config['export_dir']}/csv/{period}_auftraege.csv",
  46. sep=";",
  47. encoding="latin-1",
  48. decimal=",",
  49. index=False,
  50. )
  51. payload["WerkstattDurchlaeufe"] = int(df["AnzahlAuftraege"].sum())
  52. payload["AfterSalesPositionen"] = df.to_dict("records")
  53. # Mitarbeiter gesamt und produktiv
  54. if source == "database":
  55. df = pd.read_sql(select_befehl_mitarbeiter, con=source_db)
  56. else:
  57. df = pd.read_csv(source_mitarbeiter, sep=";", encoding="latin-1", decimal=",")
  58. df.to_csv(
  59. f"{config['export_dir']}/csv/{period}_mitarbeiter.csv",
  60. sep=";",
  61. encoding="latin-1",
  62. decimal=",",
  63. index=False,
  64. )
  65. payload["AnzahlMitarbeiter"] = df.shape[0]
  66. payload["AnzahlProduktiv"] = int(df["produktiv"].sum())
  67. return payload