query_filter.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import csv
  2. from dataclasses import dataclass
  3. @dataclass
  4. class FilterConfig:
  5. name: str
  6. text: str
  7. filter_type: str
  8. width: str
  9. key_column: str
  10. value_column: str
  11. sort_column: str
  12. visible: bool = True
  13. default_value: str = ""
  14. options: list[dict[str, str]] | None = None
  15. current_value: str | None = None
  16. @property
  17. def query_param(self) -> str:
  18. if self.current_value is None or self.current_value == "":
  19. if self.default_value is None or self.default_value == "":
  20. return None
  21. self.current_value = self.default_value
  22. if self.filter_type == "date":
  23. if "bis" in self.name.lower():
  24. return f" [{self.key_column}] <= '{self.current_value}' "
  25. return f" [{self.key_column}] >= '{self.current_value}' "
  26. # if self.filter_type == "select":
  27. # return f"{self.key_column} IN ({self.current_value})"
  28. return f" [{self.key_column}] LIKE '%{self.current_value}%' "
  29. @staticmethod
  30. def from_dict(
  31. name: str,
  32. filter_type: str,
  33. width: str,
  34. text: str,
  35. key_column: str,
  36. value_column: str,
  37. sort_column: str,
  38. default_value: str,
  39. ) -> "FilterConfig":
  40. if filter_type not in ["text", "select", "date", "hidden"]:
  41. filter_type = "text"
  42. if width not in ["1", "2", "3", "4"]:
  43. width = "2"
  44. if not text:
  45. text = name
  46. if not key_column:
  47. key_column = name
  48. if not value_column:
  49. value_column = key_column
  50. if not sort_column:
  51. sort_column = key_column
  52. if not default_value:
  53. default_value = ""
  54. return FilterConfig(
  55. name=name,
  56. text=text,
  57. filter_type=filter_type,
  58. width=width,
  59. key_column=key_column,
  60. value_column=value_column,
  61. sort_column=sort_column,
  62. default_value=default_value,
  63. )
  64. filter_type_option = {
  65. "text": "text",
  66. "select": "selectedOptionValue",
  67. "date": "selectedDate",
  68. "hidden": "selectedOptionValue",
  69. }
  70. def import_filter_config() -> list[FilterConfig]:
  71. res = []
  72. with open(
  73. "templates\\forderungen\\liste\\config\\liste_filter.csv", "r", newline="", encoding="latin-1"
  74. ) as csvfile:
  75. reader = csv.DictReader(csvfile, delimiter=";")
  76. for row in reader:
  77. config = FilterConfig.from_dict(*row.values())
  78. res.append(config)
  79. return res