generated from dopt-python/py311
frontpage construction
This commit is contained in:
@@ -62,7 +62,7 @@ from PySide6.QtWidgets import (
|
||||
QWidget,
|
||||
)
|
||||
|
||||
from wce_crm.backend import initial_recording as be_init_rec
|
||||
from wce_crm.backend import backend as be_init_rec
|
||||
|
||||
K = TypeVar("K")
|
||||
V = TypeVar("V")
|
||||
@@ -2373,9 +2373,11 @@ class NoScrollFilter(QObject):
|
||||
class ClickableCell(QFrame):
|
||||
"""cell in the table on the startup screen"""
|
||||
|
||||
clicked = Signal(dict) # Signal which also sends data as dictionary
|
||||
clicked = Signal(
|
||||
be_init_rec.FrontpageCompany
|
||||
) # Signal which also sends data as dictionary
|
||||
|
||||
def __init__(self, text, data_record):
|
||||
def __init__(self, text: str, data_record: be_init_rec.FrontpageCompany):
|
||||
super().__init__()
|
||||
self.data_record = data_record # Wir merken uns den ganzen Datensatz
|
||||
self.setStyleSheet("""
|
||||
@@ -3468,7 +3470,8 @@ class SearchFormPage(QWidget):
|
||||
title.setStyleSheet("font-size: 14px; font-style: italic;") # font-weight: bold;
|
||||
container_layout.addWidget(title)
|
||||
# container_layout.addWidget(MyFormPart(FORM_FIELD_DEF, "Test-Gruppe"))
|
||||
container_layout.addWidget(AutoForm(cfg=CONFIG_GRUNDERFASSUNG_UNTERNEHMEN))
|
||||
self.auto_form = AutoForm(cfg=CONFIG_GRUNDERFASSUNG_UNTERNEHMEN)
|
||||
container_layout.addWidget(self.auto_form)
|
||||
|
||||
container_layout.addSpacing(30)
|
||||
|
||||
@@ -3508,10 +3511,10 @@ class MainWindow(QMainWindow):
|
||||
self.new_entry_select.company_requested.connect(self.show_company_page)
|
||||
self.stack.addWidget(self.new_entry_select)
|
||||
# SEITE: Bsp.
|
||||
self.company_page = SearchFormPage()
|
||||
self.company_page.back_main_requested.connect(self.show_main_page)
|
||||
self.company_page.back_requested.connect(self.show_new_entry_select)
|
||||
self.stack.addWidget(self.company_page)
|
||||
self.company_recording_page = SearchFormPage()
|
||||
self.company_recording_page.back_main_requested.connect(self.show_main_page)
|
||||
self.company_recording_page.back_requested.connect(self.show_new_entry_select)
|
||||
self.stack.addWidget(self.company_recording_page)
|
||||
|
||||
def setup_main_page(self):
|
||||
# --- 2. DAS ZENTRALE WIDGET ---
|
||||
@@ -3586,78 +3589,90 @@ class MainWindow(QMainWindow):
|
||||
# Zeilen-Zähler (0 ist für die Überschriften)
|
||||
self.current_row = 0
|
||||
# Beispieldaten (Projekt Gamma hat kein 'c3')
|
||||
headers = ["Name", "Beschreibung", "Abteilung", "Status", "Datum"]
|
||||
headers = [
|
||||
"UN/ NWP/ Kontaktperson",
|
||||
"Individualberatung",
|
||||
"Pauschalberatung",
|
||||
"Verlaufsprotokoll",
|
||||
"Datum",
|
||||
]
|
||||
for col_idx, title in enumerate(headers):
|
||||
self.grid.addWidget(HeaderCell(title), self.current_row, col_idx)
|
||||
|
||||
self.current_row += 1
|
||||
|
||||
data = [
|
||||
{
|
||||
"c1": "Projekt Alpha",
|
||||
"c2": "Alles komplett.",
|
||||
"c3": "Teamleitung",
|
||||
"c4": "Hoch",
|
||||
"date": "17.04.",
|
||||
},
|
||||
{
|
||||
"c1": "Projekt Beta",
|
||||
"c2": "Abteilung fehlt.",
|
||||
"c4": "Wartend",
|
||||
"date": "21.04.",
|
||||
},
|
||||
{
|
||||
"c1": "Projekt Gamma",
|
||||
"c2": "Alles komplett.",
|
||||
"c3": "Teamleitung",
|
||||
"c4": "Mittel",
|
||||
"date": "30.04.",
|
||||
},
|
||||
{
|
||||
"c1": "Projekt Delta",
|
||||
"c2": "Abteilung fehlt.",
|
||||
"c4": "Wartend",
|
||||
"date": "05.05.",
|
||||
},
|
||||
]
|
||||
data = be_init_rec.get_company_list()
|
||||
|
||||
# data = [
|
||||
# {
|
||||
# "c1": "Projekt Alpha",
|
||||
# "c2": "Alles komplett.",
|
||||
# "c3": "Teamleitung",
|
||||
# "c4": "Hoch",
|
||||
# "date": "17.04.",
|
||||
# },
|
||||
# {
|
||||
# "c1": "Projekt Beta",
|
||||
# "c2": "Abteilung fehlt.",
|
||||
# "c4": "Wartend",
|
||||
# "date": "21.04.",
|
||||
# },
|
||||
# {
|
||||
# "c1": "Projekt Gamma",
|
||||
# "c2": "Alles komplett.",
|
||||
# "c3": "Teamleitung",
|
||||
# "c4": "Mittel",
|
||||
# "date": "30.04.",
|
||||
# },
|
||||
# {
|
||||
# "c1": "Projekt Delta",
|
||||
# "c2": "Abteilung fehlt.",
|
||||
# "c4": "Wartend",
|
||||
# "date": "05.05.",
|
||||
# },
|
||||
# ]
|
||||
|
||||
# Wir gehen die Datenliste mit enumerate durch, um den row_index für das Grid zu bekommen
|
||||
for entry in data:
|
||||
self.add_row_to_grid(entry)
|
||||
|
||||
return main_widget
|
||||
|
||||
# --- HILFSMETHODE UM EINE ZEILE EINZUFÜGEN ---
|
||||
def add_row_to_grid(self, entry):
|
||||
def add_row_to_grid(self, entry: be_init_rec.FrontpageCompany):
|
||||
row = self.current_row
|
||||
|
||||
# Beim Erstellen der Zelle übergeben wir den kompletten Datensatz
|
||||
cell = ClickableCell(entry["c1"], entry)
|
||||
cell.clicked.connect(self.show_details)
|
||||
cell = ClickableCell(entry.name, entry)
|
||||
cell.clicked.connect(self.goto_initial_recording)
|
||||
self.grid.addWidget(cell, row, 0)
|
||||
# Wir verbinden das Klick-Signal der Zelle mit unserer Wechsel-Funktion
|
||||
self.grid.addWidget(ClickableCell(entry["c2"], entry), row, 1)
|
||||
# self.grid.addWidget(ClickableCell(entry["c2"], entry), row, 1)
|
||||
|
||||
c3_value = entry.get("c3")
|
||||
if c3_value:
|
||||
self.grid.addWidget(ClickableCell(c3_value, entry), row, 2)
|
||||
else:
|
||||
empty_box = QFrame()
|
||||
empty_box.setStyleSheet(
|
||||
"QFrame { background-color: #f8fafc; border: 2px dashed #e2e8f0; border-radius: 8px; }"
|
||||
)
|
||||
self.grid.addWidget(empty_box, row, 2)
|
||||
# c3_value = entry.get("c3")
|
||||
# if c3_value:
|
||||
# self.grid.addWidget(ClickableCell(c3_value, entry), row, 2)
|
||||
# else:
|
||||
# empty_box = QFrame()
|
||||
# empty_box.setStyleSheet(
|
||||
# "QFrame { background-color: #f8fafc; border: 2px dashed #e2e8f0; border-radius: 8px; }"
|
||||
# )
|
||||
# self.grid.addWidget(empty_box, row, 2)
|
||||
|
||||
self.grid.addWidget(ClickableCell(entry.get("c4", ""), entry), row, 3)
|
||||
self.grid.addWidget(ClickableCell(entry.get("date", ""), entry), row, 4)
|
||||
# self.grid.addWidget(ClickableCell(entry.get("c4", ""), entry), row, 3)
|
||||
# self.grid.addWidget(ClickableCell(entry.get("date", ""), entry), row, 4)
|
||||
|
||||
self.current_row += 1 # Zähler für den nächsten Eintrag erhöhen
|
||||
|
||||
def show_details(self, data):
|
||||
def goto_initial_recording(
|
||||
self,
|
||||
data: be_init_rec.FrontpageCompany,
|
||||
):
|
||||
self.company_recording_page.auto_form.load_data(data.erfassung_id)
|
||||
self.stack.setCurrentWidget(self.company_recording_page)
|
||||
# 1. Daten an die Detail-Seite übergeben
|
||||
self.detail_page.update_content(data)
|
||||
# self.detail_page.update_content(data)
|
||||
# 2. Auf die Detail-Seite umblättern
|
||||
self.stack.setCurrentWidget(self.detail_page)
|
||||
# self.stack.setCurrentWidget(self.detail_page)
|
||||
|
||||
def show_main_page(self):
|
||||
# Zurück zur Tabelle blättern
|
||||
@@ -3667,7 +3682,7 @@ class MainWindow(QMainWindow):
|
||||
self.stack.setCurrentWidget(self.new_entry_select)
|
||||
|
||||
def show_company_page(self):
|
||||
self.stack.setCurrentWidget(self.company_page)
|
||||
self.stack.setCurrentWidget(self.company_recording_page)
|
||||
|
||||
# --- MENÜ LOGIK ---
|
||||
def create_menu(self):
|
||||
|
||||
@@ -12,9 +12,41 @@ from pprint import pprint
|
||||
from typing import Annotated, Any
|
||||
|
||||
import babel
|
||||
import polars as pl
|
||||
import sqlalchemy as sql
|
||||
from pydantic import BaseModel, ConfigDict, EmailStr, Field, field_validator, model_validator
|
||||
from PySide6.QtCore import QDate, Qt
|
||||
|
||||
from wce_crm import constants, db
|
||||
from wce_crm.backend import backend
|
||||
|
||||
# %%
|
||||
db_path = constants.Config.DB_PATH_MAIN
|
||||
crm_path = constants.Config.DB_PATH_CRM
|
||||
engine = sql.create_engine(f"sqlite:///{str(db_path)}")
|
||||
engine_crm = sql.create_engine(f"sqlite:///{str(crm_path)}")
|
||||
# %%
|
||||
stmt = sql.select(
|
||||
db.grunderfassung_unternehmen.c.erfassung_id,
|
||||
db.grunderfassung_unternehmen.c.Partnersuche__un_suche,
|
||||
)
|
||||
|
||||
with engine.connect() as conn:
|
||||
res = conn.execute(stmt)
|
||||
|
||||
|
||||
for r in res:
|
||||
print(r)
|
||||
# %%
|
||||
|
||||
|
||||
# %%
|
||||
backend.get_company_list()
|
||||
|
||||
|
||||
# %%
|
||||
db.DF_CRM_MASTER.filter(pl.col.ma_id == 381)
|
||||
|
||||
# %%
|
||||
# class FlatBaseModel(BaseModel):
|
||||
# @classmethod
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import dataclasses as dc
|
||||
from typing import Any, TypedDict, cast
|
||||
|
||||
import polars as pl
|
||||
import sqlalchemy as sql
|
||||
|
||||
from wce_crm import db
|
||||
|
||||
@@ -176,3 +178,32 @@ def get_initial_recording(
|
||||
raise KeyError(f"Database ID {id_} not found")
|
||||
|
||||
return row._asdict()
|
||||
|
||||
|
||||
@dc.dataclass(slots=True)
|
||||
class FrontpageCompany:
|
||||
erfassung_id: int
|
||||
ma_id: int
|
||||
name: str
|
||||
|
||||
|
||||
def get_company_list() -> list[FrontpageCompany]:
|
||||
stmt = sql.select(
|
||||
db.grunderfassung_unternehmen.c.erfassung_id,
|
||||
db.grunderfassung_unternehmen.c.Partnersuche__un_suche,
|
||||
)
|
||||
|
||||
with db.ENGINE.connect() as conn:
|
||||
res = conn.execute(stmt)
|
||||
|
||||
front_page_companies: list[FrontpageCompany] = []
|
||||
|
||||
for entry in res:
|
||||
erfassung_id = entry[0]
|
||||
ma_id = entry[1]
|
||||
comp_info = comp_search_get_info(ma_id)
|
||||
name = comp_info["ma_unternehmensname"]
|
||||
|
||||
front_page_companies.append(FrontpageCompany(erfassung_id, ma_id, name))
|
||||
|
||||
return front_page_companies
|
||||
@@ -363,15 +363,15 @@ grunderfassung_unternehmen: sql.Table = Table(
|
||||
# Column("Metadaten_aktualisierung", sql.Text, nullable=True),
|
||||
# Column("Metadaten_erstellung", sql.Text, nullable=True),
|
||||
Column("Partnersuche__kanal_aufmerksamkeit", sql.Text, nullable=True),
|
||||
Column("Partnersuche__person_suche", sql.Text, nullable=True),
|
||||
Column("Partnersuche__un_suche", sql.Text, nullable=True),
|
||||
Column("Partnersuche__person_suche", sql.Integer, nullable=True),
|
||||
Column("Partnersuche__un_suche", sql.Integer, nullable=True),
|
||||
Column("Projektrelevanz__relevanz", sql.Boolean, nullable=True),
|
||||
Column("Schulbildung", sql.Text, nullable=True),
|
||||
Column("Sprachkenntnisse", sql.Text, nullable=True),
|
||||
Column("Stammdaten__PLZ", sql.Text, nullable=True),
|
||||
Column("Stammdaten__anrede_anschrift", sql.Text, nullable=True),
|
||||
Column("Stammdaten__anzahl_kinder__alter", sql.Text, nullable=True),
|
||||
Column("Stammdaten__anzahl_kinder__anzahl", sql.Text, nullable=True),
|
||||
Column("Stammdaten__anzahl_kinder__anzahl", sql.Integer, nullable=True),
|
||||
Column("Stammdaten__aufenthaltsort", sql.Text, nullable=True),
|
||||
Column("Stammdaten__bundesland", sql.Text, nullable=True),
|
||||
Column("Stammdaten__land", sql.Text, nullable=True),
|
||||
|
||||
Reference in New Issue
Block a user