mbu-dev-shared-components 2.2.0__tar.gz → 2.4.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/PKG-INFO +2 -2
  2. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/solteqtand/application/app_handler.py +23 -0
  3. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/solteqtand/application/appointment.py +9 -0
  4. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/solteqtand/application/base_ui.py +15 -6
  5. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/solteqtand/application/document.py +1 -0
  6. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/solteqtand/application/edi_portal.py +17 -3
  7. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/solteqtand/application/patient.py +5 -3
  8. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components.egg-info/PKG-INFO +2 -2
  9. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/pyproject.toml +6 -2
  10. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/LICENSE +0 -0
  11. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/README.md +0 -0
  12. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/database/__init__.py +0 -0
  13. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/database/constants.py +0 -0
  14. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/database/logging.py +0 -0
  15. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/database/utility.py +0 -0
  16. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/getorganized/__init__.py +0 -0
  17. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/getorganized/auth.py +0 -0
  18. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/getorganized/cases.py +0 -0
  19. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/getorganized/contacts.py +0 -0
  20. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/getorganized/documents.py +0 -0
  21. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/getorganized/objects.py +0 -0
  22. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/google/__init__.py +0 -0
  23. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/google/api/__init__.py +0 -0
  24. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/google/api/auth.py +0 -0
  25. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/google/workspace/__init__.py +0 -0
  26. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/google/workspace/alerts.py +0 -0
  27. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/msoffice365/__init__.py +0 -0
  28. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/msoffice365/excel/__init__.py +0 -0
  29. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/msoffice365/excel/excel_reader.py +0 -0
  30. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/msoffice365/sharepoint_api/__init__.py +0 -0
  31. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/msoffice365/sharepoint_api/files.py +0 -0
  32. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/os2forms/__init__.py +0 -0
  33. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/os2forms/documents.py +0 -0
  34. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/os2forms/forms.py +0 -0
  35. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/romexis/__init__.py +0 -0
  36. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/romexis/db_handler.py +0 -0
  37. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/romexis/helper_functions.py +0 -0
  38. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/sap/__init__.py +0 -0
  39. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/sap/create_invoice.py +0 -0
  40. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/solteqtand/__init__.py +0 -0
  41. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/solteqtand/application/__init__.py +0 -0
  42. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/solteqtand/application/clinic.py +0 -0
  43. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/solteqtand/application/event.py +0 -0
  44. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/solteqtand/application/exceptions.py +0 -0
  45. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/solteqtand/application/handler_base.py +0 -0
  46. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/solteqtand/application/journal_note.py +0 -0
  47. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/solteqtand/database/__init__.py +0 -0
  48. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/solteqtand/database/db_handler.py +0 -0
  49. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/utils/__init__.py +0 -0
  50. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/utils/db_stored_procedure_executor.py +0 -0
  51. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/utils/fernet_encryptor.py +0 -0
  52. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/utils/file_handler.py +0 -0
  53. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components/utils/json_handler.py +0 -0
  54. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components.egg-info/SOURCES.txt +0 -0
  55. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components.egg-info/dependency_links.txt +0 -0
  56. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components.egg-info/requires.txt +0 -0
  57. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/mbu_dev_shared_components.egg-info/top_level.txt +0 -0
  58. {mbu_dev_shared_components-2.2.0 → mbu_dev_shared_components-2.4.2}/setup.cfg +0 -0
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mbu_dev_shared_components
3
- Version: 2.2.0
3
+ Version: 2.4.2
4
4
  Summary: Shared components to use in RPA projects
5
5
  Author-email: MBU <rpa@mbu.aarhus.dk>
6
+ License-Expression: MIT
6
7
  Classifier: Programming Language :: Python :: 3
7
- Classifier: License :: OSI Approved :: MIT License
8
8
  Classifier: Operating System :: Microsoft :: Windows
9
9
  Requires-Python: >=3.7
10
10
  Description-Content-Type: text/markdown
@@ -130,6 +130,29 @@ class SolteqTandApp(
130
130
  tab_button.SetFocus()
131
131
  tab_button.SendKeys('{ENTER}')
132
132
 
133
+ def open_from_main_menu(self, menu_item: str) -> None:
134
+ """
135
+ Opens menu item from Solteq main menu"""
136
+
137
+ # Find hyperlink
138
+ menu_link = self.wait_for_control(
139
+ control_type=auto.HyperlinkControl,
140
+ search_params={
141
+ 'Name': menu_item
142
+ },
143
+ search_depth=5
144
+ )
145
+
146
+ menu_link.GetInvokePattern().Invoke()
147
+
148
+ self.app_window = self.wait_for_control(
149
+ control_type=auto.WindowControl,
150
+ search_params={
151
+ "AutomationId": "FormBooking"
152
+ },
153
+ search_depth=2
154
+ )
155
+
133
156
  def close_solteq_tand(self):
134
157
  """Closes the Solteq Tand application gracefully."""
135
158
  try:
@@ -276,6 +276,7 @@ class AppointmentHandler(HandlerBase):
276
276
  """
277
277
  try:
278
278
  self.open_tab("Stamkort")
279
+ self.open_sub_tab("Behandlingsstatus")
279
280
 
280
281
  create_booking_button = self.wait_for_control(
281
282
  auto.PaneControl,
@@ -304,6 +305,14 @@ class AppointmentHandler(HandlerBase):
304
305
  case "Stol":
305
306
  child.GetPattern(auto.PatternId.ValuePattern).SetValue(booking_reminder_data["comboBoxChair"])
306
307
 
308
+ # Fill out text booking field
309
+ text_booking_field_group = manage_booking.GroupControl(AutomationId="GroupBox5")
310
+ for child in text_booking_field_group.GetChildren():
311
+ match child.AutomationId:
312
+ case "TextBoxBookingText":
313
+ if child.GetPattern(auto.PatternId.ValuePattern).Value != booking_reminder_data["textBoxBookingText"]:
314
+ child.GetPattern(auto.PatternId.ValuePattern).SetValue(booking_reminder_data["textBoxBookingText"])
315
+
307
316
  # Fill out date and time
308
317
  date_and_time_group = manage_booking.GroupControl(AutomationId="GroupBox4")
309
318
 
@@ -23,10 +23,12 @@ class BaseUI:
23
23
  children = control.GetChildren()
24
24
 
25
25
  for child in children:
26
- if (control_type is None or child.ControlType == control_type) and \
27
- (automation_id is None or child.AutomationId == automation_id) and \
28
- (name is None or child.Name == name) and \
29
- (class_name is None or child.ClassName == class_name):
26
+ if (
27
+ (control_type is None or child.ControlType == control_type) and
28
+ (automation_id is None or child.AutomationId == automation_id) and
29
+ (name is None or child.Name == name) and
30
+ (class_name is None or child.ClassName == class_name)
31
+ ):
30
32
  return child
31
33
 
32
34
  found = self.find_element_by_property(child, control_type, automation_id, name, class_name)
@@ -96,5 +98,12 @@ class BaseUI:
96
98
  raise TimeoutError(f"Control with parameters {search_params} did not disappear within the timeout period.")
97
99
 
98
100
  def close_window(self, window_to_close: auto.WindowControl) -> None:
99
- """Closes specified window by sending CTRL+F4 keystroke."""
100
- window_to_close.SendKeys(text="^({F4})")
101
+ """Closes specified window."""
102
+ window_to_close.SetFocus()
103
+ window_to_close.GetWindowPattern().Close()
104
+
105
+ pop_up_window = window_to_close.WindowControl(Name="TMT - Afslut")
106
+ pop_up_window.SetFocus()
107
+ pop_up_window.ButtonControl(Name="Ja").Click(simulateMove=False, waitTime=0)
108
+
109
+ time.sleep(2)
@@ -5,6 +5,7 @@ import time
5
5
  import psutil
6
6
  from docx2pdf import convert
7
7
  import uiautomation as auto
8
+ from datetime import datetime
8
9
 
9
10
  from .handler_base import HandlerBase
10
11
 
@@ -28,6 +28,8 @@ class EDIHandler(HandlerBase):
28
28
  )
29
29
  journalforsendelse_button.Click(simulateMove=False, waitTime=0)
30
30
 
31
+ time.sleep(5)
32
+
31
33
  except Exception as e:
32
34
  print(f"Error while opening EDI Portal: {e}")
33
35
 
@@ -70,7 +72,7 @@ class EDIHandler(HandlerBase):
70
72
  if not next_button:
71
73
  try:
72
74
  next_button = self.wait_for_control(
73
- auto.ButtonControl, {"Name": "patientInformationNextButton"},
75
+ auto.ButtonControl, {"AutomationId": "patientInformationNextButton"},
74
76
  search_depth=50,
75
77
  timeout=5
76
78
  )
@@ -97,6 +99,14 @@ class EDIHandler(HandlerBase):
97
99
  dict: A dictionary containing the row count and whether the phone number matches.
98
100
  """
99
101
  try:
102
+ # Handle Hasle Torv Clinic special case
103
+ if extern_clinic_data[0]["contractorId"] == "477052" or extern_clinic_data[0]["contractorId"] == "470678":
104
+ contractor_id = "485055"
105
+ clinic_phone_number = "86135240"
106
+ else:
107
+ contractor_id = extern_clinic_data[0]["contractorId"]
108
+ clinic_phone_number = extern_clinic_data[0]["phoneNumber"]
109
+
100
110
  self.edi_portal_click_next_button(sleep_time=2)
101
111
 
102
112
  class_options = [
@@ -120,7 +130,7 @@ class EDIHandler(HandlerBase):
120
130
  raise RuntimeError("Search box not found")
121
131
  search_box.SetFocus()
122
132
  search_box_value_pattern = search_box.GetPattern(auto.PatternId.ValuePattern)
123
- search_box_value_pattern.SetValue(extern_clinic_data[0]["contractorId"])
133
+ search_box_value_pattern.SetValue(contractor_id)
124
134
  search_box.SendKeys("{ENTER}")
125
135
 
126
136
  time.sleep(sleep_time)
@@ -134,10 +144,14 @@ class EDIHandler(HandlerBase):
134
144
  row_count = grid_pattern.RowCount
135
145
 
136
146
  is_phone_number_match = False
147
+
148
+ if grid_pattern.GetItem(1, 0).Name == "Ingen data i tabellen":
149
+ return {"rowCount": 0, "isPhoneNumberMatch": False}
150
+
137
151
  if row_count > 0:
138
152
  for row in range(row_count):
139
153
  phone_number = grid_pattern.GetItem(row, 4).Name
140
- if phone_number == extern_clinic_data[0]["phoneNumber"]:
154
+ if phone_number == clinic_phone_number:
141
155
  is_phone_number_match = True
142
156
  break
143
157
  return {"rowCount": row_count, "isPhoneNumberMatch": is_phone_number_match}
@@ -112,13 +112,14 @@ class PatientHandler(HandlerBase):
112
112
  TimeoutError: If the patient window does not close within the expected time.
113
113
  """
114
114
 
115
- title_bar_window = self.app_window.TitleBarControl()
116
- title_bar_window.ButtonControl(Name="Luk").Click(simulateMove=False, waitTime=0)
115
+ self.app_window.SetFocus()
116
+ self.app_window.GetWindowPattern().Close()
117
117
 
118
118
  self.app_window = self.wait_for_control_to_disappear(
119
119
  auto.WindowControl,
120
120
  {'AutomationId': 'FormPatient'},
121
- search_depth=2
121
+ search_depth=2,
122
+ timeout=30
122
123
  )
123
124
 
124
125
  self.app_window = self.wait_for_control(
@@ -127,6 +128,7 @@ class PatientHandler(HandlerBase):
127
128
  search_depth=2,
128
129
  timeout=5
129
130
  )
131
+ self.app_window.SetFocus()
130
132
 
131
133
  def change_status(self, status: str) -> None:
132
134
  """
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mbu_dev_shared_components
3
- Version: 2.2.0
3
+ Version: 2.4.2
4
4
  Summary: Shared components to use in RPA projects
5
5
  Author-email: MBU <rpa@mbu.aarhus.dk>
6
+ License-Expression: MIT
6
7
  Classifier: Programming Language :: Python :: 3
7
- Classifier: License :: OSI Approved :: MIT License
8
8
  Classifier: Operating System :: Microsoft :: Windows
9
9
  Requires-Python: >=3.7
10
10
  Description-Content-Type: text/markdown
@@ -2,9 +2,13 @@
2
2
  requires = ["setuptools>=65.0"]
3
3
  build-backend = "setuptools.build_meta"
4
4
 
5
+ #[tool.setuptools]
6
+ #package-dir = { "" = "." }
7
+ #packages = ["mbu_dev_shared_components"]
8
+
5
9
  [project]
6
10
  name = "mbu_dev_shared_components"
7
- version = "2.2.0" # Specify the version manually here
11
+ version = "2.4.2" # Specify the version manually here
8
12
  authors = [
9
13
  { name="MBU", email="rpa@mbu.aarhus.dk" },
10
14
  ]
@@ -13,9 +17,9 @@ readme = "README.md"
13
17
  requires-python = ">=3.7"
14
18
  classifiers = [
15
19
  "Programming Language :: Python :: 3",
16
- "License :: OSI Approved :: MIT License",
17
20
  "Operating System :: Microsoft :: Windows",
18
21
  ]
22
+ license = "MIT"
19
23
  dependencies = [
20
24
  "openpyxl >= 3.1.2",
21
25
  "pyodbc >= 5.1.0",