wbintegrator_office365 1.55.10rc0__py2.py3-none-any.whl → 1.56.0__py2.py3-none-any.whl

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.
@@ -301,8 +301,10 @@ class CallUser(WBModel):
301
301
  contacts = TelephoneContact.objects.filter(number=self.tenant_user.tenant_id, entry__isnull=False)
302
302
  if contacts.exists():
303
303
  return str(contacts.first().entry)
304
- elif self.tenant_user.tenant_id[0] == "+":
304
+ elif self.tenant_user.tenant_id and self.tenant_user.tenant_id[0] == "+":
305
305
  return self.tenant_user.tenant_id
306
+ else:
307
+ return self.tenant_user.display_name
306
308
 
307
309
  def __str__(self):
308
310
  if repr := self.get_humanized_repr():
@@ -1,5 +1,8 @@
1
+ import os
2
+ from collections import defaultdict
1
3
  from datetime import date, timedelta
2
4
 
5
+ import boto3
3
6
  import humanize
4
7
  from celery import shared_task
5
8
  from django.contrib.auth import get_user_model
@@ -23,6 +26,65 @@ def format_td(td: timedelta) -> str:
23
26
  return humanize.precisedelta(td, suppress=["hours"], minimum_unit="seconds", format="%0.0f")
24
27
 
25
28
 
29
+ #################################################
30
+ ################# TEMPORARY #####################
31
+ #################################################
32
+
33
+
34
+ def convert_user(user):
35
+ email = user["Attributes"][0]["Value"]
36
+ first = user["Attributes"][3]["Value"]
37
+ last = user["Attributes"][2]["Value"]
38
+
39
+ return f"{email} ({first} {last})"
40
+
41
+
42
+ def get_fundy_users():
43
+ access_key = os.environ["FUNDY_BOTO_ACCESS_KEY"]
44
+ secret_access_key = os.environ["FUNDY_BOTO_SECRET_ACCESS_KEY"]
45
+
46
+ client = boto3.client(
47
+ "cognito-idp", region_name="eu-north-1", aws_access_key_id=access_key, aws_secret_access_key=secret_access_key
48
+ )
49
+
50
+ pagination_token = None
51
+ users = []
52
+ while True:
53
+ if not pagination_token:
54
+ response = client.list_users(
55
+ UserPoolId="eu-north-1_IFRQriJAf",
56
+ )
57
+ else:
58
+ response = client.list_users(
59
+ UserPoolId="eu-north-1_IFRQriJAf",
60
+ PaginationToken=pagination_token,
61
+ )
62
+
63
+ users.extend(response["Users"])
64
+ if response.get("PaginationToken", None) is None:
65
+ break
66
+ else:
67
+ pagination_token = response["PaginationToken"]
68
+
69
+ users_date = defaultdict(list)
70
+ for user in sorted(users, key=lambda x: x["UserCreateDate"]):
71
+ users_date[user["UserCreateDate"].date()].append(convert_user(user))
72
+ return users_date, len(users)
73
+
74
+
75
+ def get_fundy_user_statistics():
76
+ today = date.today()
77
+ users, total_users = get_fundy_users()
78
+
79
+ yesterday_users = users.get(today - timedelta(days=1), [])
80
+ return yesterday_users, len(yesterday_users), total_users
81
+
82
+
83
+ #################################################
84
+ ################ TEMPORARY END ##################
85
+ #################################################
86
+
87
+
26
88
  @shared_task
27
89
  def send_call_summary(
28
90
  to_emails: list,
@@ -109,6 +171,21 @@ def send_call_summary(
109
171
  message += "</table><br/>"
110
172
 
111
173
  message += "</div>"
174
+
175
+ ######## TEMPORARY START ########
176
+ yesterday_users, yesterday_users_count, total_users_count = get_fundy_user_statistics()
177
+ message += f"""
178
+ <div>
179
+ <h3>FUNDY USER STATISTICS</h3>
180
+ <strong>Yesterday Users:</strong> {yesterday_users_count}
181
+ <strong>Total Users:</strong> {total_users_count}
182
+ <ul>
183
+ """
184
+ for user in yesterday_users:
185
+ message += f"<li>{user}</li>"
186
+ message += "</ul></div>"
187
+ ######## TEMPORARY END ########
188
+
112
189
  title = f"Call summary - {date_repr}"
113
190
  if include_detail:
114
191
  title = "Detailed " + title
@@ -445,7 +445,7 @@ class CallEventSummaryGraph(viewsets.ChartViewSet):
445
445
  df = df.sort_values(by=["day"]).reset_index()
446
446
  return df
447
447
 
448
- def get_plotly(self, queryset):
448
+ def get_plotly(self, queryset): # noqa: C901
449
449
  fig = go.Figure()
450
450
  if queryset.exists():
451
451
  df = pd.DataFrame(queryset.annotate(day=F("created__date")).values("start", "end", "day"))
@@ -1,7 +1,8 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wbintegrator_office365
3
- Version: 1.55.10rc0
3
+ Version: 1.56.0
4
4
  Author-email: Christopher Wittlinger <c.wittlinger@stainly.com>
5
+ Requires-Dist: boto3>=1.35.99
5
6
  Requires-Dist: bs4==0.0.*
6
7
  Requires-Dist: oauthlib==3.1.*
7
8
  Requires-Dist: requests-oauthlib==1.3.*
@@ -5,7 +5,7 @@ wbintegrator_office365/dynamic_preferences_registry.py,sha256=RIptl8WGibV_XMynXl
5
5
  wbintegrator_office365/factories.py,sha256=pG8moGurbSElIugs_Gz3nd7-UJt3vC6mGy-EZQIeldI,3872
6
6
  wbintegrator_office365/filters.py,sha256=bSX1jrP1SrqiGkysoX__AqPRUPSU-uQq_-tOHinqijU,7447
7
7
  wbintegrator_office365/serializers.py,sha256=tR_HdsyxwCZo2_sOdhj2NErOEjTRyoIXA6DRR-BjVKs,8097
8
- wbintegrator_office365/tasks.py,sha256=gley52lfXrOQUCz3L3NN3OGp5L7_sBVI2PtdxWDQBnE,7800
8
+ wbintegrator_office365/tasks.py,sha256=-kji2Bipo95nP4UWWfRi4JrW2-Hn8AXv4KiM-oQYsyU,10176
9
9
  wbintegrator_office365/urls.py,sha256=qfIIb3CNJw40xhGJnE7ztEMt2l-kgnRXA_P8Y3sDlPg,1922
10
10
  wbintegrator_office365/configurations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  wbintegrator_office365/configurations/configurations/__init__.py,sha256=tIBWiG0KWrDJ1xtKe5m1W9aKX5PMNLwsYuoy7xrQ4uI,1145
@@ -20,7 +20,7 @@ wbintegrator_office365/migrations/0002_remove_calendar_owner_remove_calendareven
20
20
  wbintegrator_office365/migrations/0003_alter_event_options.py,sha256=rUYPQdwEuJowo10veLOZPtV3WMqxJu8_uan600EcpN4,585
21
21
  wbintegrator_office365/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  wbintegrator_office365/models/__init__.py,sha256=sZKutR9oNMm2IaON35doaMVPgeMfxmWDqoAdALHRLIA,126
23
- wbintegrator_office365/models/event.py,sha256=4B3b4Q09PxOnxaPfzGH7NAMNWKgvb3G_3b5pp-9Uu7c,27000
23
+ wbintegrator_office365/models/event.py,sha256=tw9GaCrNieQ9KRDFcMVoobwjYBZObTkTmgldVtwcLCY,27110
24
24
  wbintegrator_office365/models/subscription.py,sha256=ynp74wjd8OFRrnkomGl7pc8OyXRRvdHyl36TzHiCVSM,6423
25
25
  wbintegrator_office365/models/tenant.py,sha256=-FS6jg9nt8IgUv_729D92QFvrrbKleBUGnXhwaLv5Sc,2357
26
26
  wbintegrator_office365/templates/admin/tenant_change_list.html,sha256=mI4C1ZmTkl5MdN4CgoIWgCziSReqlHiK71aI7zJpVEM,358
@@ -36,7 +36,7 @@ wbintegrator_office365/viewsets/display.py,sha256=TS1fZCHFUb9XUNlXT1EO_7HE_lUsB1
36
36
  wbintegrator_office365/viewsets/endpoints.py,sha256=NxEdH-tKk87mJdSNxpOZdN2z0AhYY_1ob_zcHgPOAXQ,1969
37
37
  wbintegrator_office365/viewsets/menu.py,sha256=hafwoiHZmN3ltf30dTfwHreDwhyfdHlGOQk8bB7jB_o,2406
38
38
  wbintegrator_office365/viewsets/titles.py,sha256=9GZ_fqN9-sJzYHFvibOhNrRQQMNTh_m4eAv66VaGzDM,1214
39
- wbintegrator_office365/viewsets/viewsets.py,sha256=IpgbRZEMLfYb_ijBfEnuKUp8MaTUTxIyj-YB_CdTMnY,26339
40
- wbintegrator_office365-1.55.10rc0.dist-info/METADATA,sha256=MSGaG1ceDnRKw8D8iGOg6QzvS76HaWGyuP1d8yQwD6I,308
41
- wbintegrator_office365-1.55.10rc0.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
42
- wbintegrator_office365-1.55.10rc0.dist-info/RECORD,,
39
+ wbintegrator_office365/viewsets/viewsets.py,sha256=Mu6loE9ICDYEhWZNURsbdFj8ofdz4qZUSVStydQ7pW4,26353
40
+ wbintegrator_office365-1.56.0.dist-info/METADATA,sha256=jolMzMRl6DokyPGO0Ll2D2QIEN8SPFcUxhpBwysku-M,334
41
+ wbintegrator_office365-1.56.0.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
42
+ wbintegrator_office365-1.56.0.dist-info/RECORD,,