diff --git a/src/wce_crm/gui.py b/src/wce_crm/gui.py index edd2794..0447313 100644 --- a/src/wce_crm/gui.py +++ b/src/wce_crm/gui.py @@ -368,9 +368,8 @@ class Page_Consulting_ConsultingSession_State(PageState[Module]): nutzer_id: UserId # must be set with the session (always known) nutzer_name: str # must be set with the session (always known) beratung_id: int | None # known and not known entries - zeitstempel: datetime.datetime = dc.field( - default_factory=lambda: datetime.datetime.now(tz=datetime.UTC) - ) + zeitstempel: datetime.datetime | None = None + # dc.field(default_factory=lambda: datetime.datetime.now(tz=datetime.UTC)) ansprechpartner: str | None = None kommunikationsweg: str | None = None thema_crm_matrix: str | None = ( @@ -521,6 +520,8 @@ def build_and_add_widget( if form_field.readonly: widget.setReadOnly(True) + if form_field.required: + widget.setRequired(True) case FormFieldType.DATETIME_FLEXIBLE: widget = FlexibleDateTimeInput() @@ -534,6 +535,8 @@ def build_and_add_widget( if form_field.readonly: widget.setReadOnly(True) + if form_field.required: + widget.setRequired(True) case FormFieldType.DROPDOWN: widget = QComboBox() @@ -1677,7 +1680,8 @@ class AutoForm(QWidget): class FlexibleDateInput(QWidget): def __init__(self, parent=None): super().__init__(parent) - self._read_only = False + self._read_only: bool = False + self._required: bool = False layout = QHBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) @@ -1740,6 +1744,15 @@ class FlexibleDateInput(QWidget): self.calendar.move(pos) self.calendar.show() + def isRequired(self) -> bool: + return self._required + + def setRequired( + self, + required: bool, + ) -> None: + self._required = required + def isReadOnly(self) -> bool: return self._read_only @@ -1770,7 +1783,9 @@ class FlexibleDateInput(QWidget): self.line_edit.setInputMask("99.99.9999;_") self.line_edit.setPlaceholderText("TT.MM.JJJJ") - def _validate_input(self) -> None: + def _validate_input( + self, + ) -> None: logger_gui.debug("[Widget -- FlexibleDateInput] Trigger input validation") if self._read_only: return @@ -1781,7 +1796,8 @@ class FlexibleDateInput(QWidget): text = self.line_edit.text() # field empty - if not text.replace(".", "").replace("_", "").strip(): + pure_text = text.replace(".", "").replace("_", "").strip() + if not self._required and not pure_text: self.line_edit.setStyleSheet("") return @@ -1796,7 +1812,9 @@ class FlexibleDateInput(QWidget): else: self.line_edit.setStyleSheet("") - def validate(self) -> bool: + def validate( + self, + ) -> bool: logger_custom_fields.debug("[CustomField - FlexDate]: Call validate...") self._validate_input() date = self.get_date() @@ -1851,7 +1869,8 @@ class FlexibleDateInput(QWidget): class FlexibleDateTimeInput(QWidget): def __init__(self, parent=None): super().__init__(parent) - self._read_only = False + self._read_only: bool = False + self._required: bool = False layout = QHBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) @@ -1915,6 +1934,15 @@ class FlexibleDateTimeInput(QWidget): self.calendar.move(pos) self.calendar.show() + def isRequired(self) -> bool: + return self._required + + def setRequired( + self, + required: bool, + ) -> None: + self._required = required + def isReadOnly(self) -> bool: return self._read_only @@ -1945,7 +1973,9 @@ class FlexibleDateTimeInput(QWidget): self.line_edit.setInputMask("99.99.9999 99:99;_") self.line_edit.setPlaceholderText("TT.MM.JJJJ hh:mm") - def _validate_input(self) -> None: + def _validate_input( + self, + ) -> None: logger_gui.debug("[Widget -- FlexibleDateTimeInput] Trigger input validation") if self._read_only: return @@ -1959,7 +1989,7 @@ class FlexibleDateTimeInput(QWidget): pure_text = ( text.replace(".", "").replace(":", "").replace(" ", "").replace("_", "").strip() ) - if not pure_text: + if not self._required and not pure_text: self.line_edit.setStyleSheet("") return @@ -1972,7 +2002,9 @@ class FlexibleDateTimeInput(QWidget): else: self.line_edit.setStyleSheet("") - def validate(self) -> bool: + def validate( + self, + ) -> bool: logger_custom_fields.debug("[CustomField - FlexDatetime]: Call validate...") self._validate_input() datetime = self.get_datetime() @@ -3665,6 +3697,13 @@ class Page_Consulting(QWidget): db_index_layout.addWidget(db_index_set_button) container_layout.addLayout(db_index_layout) + test_flex_datetime = FlexibleDateTimeInput() + test_flex_datetime.setSizePolicy( + QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed + ) + + container_layout.addWidget(test_flex_datetime) + separator2 = QFrame() separator2.setFrameShape(QFrame.Shape.HLine) separator2.setFrameShadow(QFrame.Shadow.Sunken) @@ -4067,7 +4106,6 @@ class Page_Consulting_ConsultingSession(QWidget): layout, widget_registry=self.widget_registry, ) - self.timestamp.set_pydatetime(datetime.datetime.now()) contact_def = FormField[QLineEdit]( "Kontaktperson", @@ -4175,7 +4213,8 @@ class Page_Consulting_ConsultingSession(QWidget): "[Page Consulting -- Consulting Session]: State = %s", self.STATE ) set_widget_value(self.user_field, self.STATE.nutzer_name) - set_widget_value(self.timestamp, self.STATE.zeitstempel.astimezone(TIMEZONE_CEST)) + if self.STATE.zeitstempel is not None: + set_widget_value(self.timestamp, self.STATE.zeitstempel.astimezone(TIMEZONE_CEST)) set_widget_value(self.contact, self.STATE.ansprechpartner) set_widget_value(self.contact_type, self.STATE.kommunikationsweg) set_widget_value(self.crm_link, self.STATE.thema_crm_matrix) @@ -4200,7 +4239,7 @@ class Page_Consulting_ConsultingSession(QWidget): def validate(self) -> list[str]: logger_page_consulting.debug( ">>>>> Call validate on Session. Widget registry:\n%s", - pprint_registry(self.widget_registry), + pformat_registry(self.widget_registry), ) return validate_form_data(self.widget_registry)