wbintegrator_office365 1.55.10rc0__tar.gz → 1.56.1__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.
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/PKG-INFO +2 -1
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/pyproject.toml +1 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/models/event.py +3 -1
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/tasks.py +77 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/viewsets/viewsets.py +1 -1
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/.gitignore +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/__init__.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/admin.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/apps.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/configurations/__init__.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/configurations/configurations/__init__.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/dynamic_preferences_registry.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/factories.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/filters.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/importer/__init__.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/importer/api.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/importer/disable_signals.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/importer/parser.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/kpi_handlers/__init__.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/kpi_handlers/calls.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/migrations/0001_initial_squashed_squashed_0003_alter_calendar_owner_alter_calendarevent_organizer_and_more.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/migrations/0002_remove_calendar_owner_remove_calendarevent_activity_and_more.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/migrations/0003_alter_event_options.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/migrations/__init__.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/models/__init__.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/models/subscription.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/models/tenant.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/serializers.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/templates/admin/tenant_change_list.html +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/tests/__init__.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/tests/conftest.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/tests/test_admin.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/tests/test_models.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/tests/test_tasks.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/tests/test_views.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/tests/tests.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/urls.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/viewsets/__init__.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/viewsets/display.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/viewsets/endpoints.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/viewsets/menu.py +0 -0
- {wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/viewsets/titles.py +0 -0
@@ -1,7 +1,8 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: wbintegrator_office365
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.56.1
|
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.*
|
@@ -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():
|
{wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/tasks.py
RENAMED
@@ -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"))
|
File without changes
|
File without changes
|
{wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/admin.py
RENAMED
File without changes
|
{wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/apps.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{wbintegrator_office365-1.55.10rc0 → wbintegrator_office365-1.56.1}/wbintegrator_office365/urls.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|