diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..cc5462d
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/benchcoach/static/fonts/dinpro/DINPro-Black.otf b/benchcoach/static/fonts/dinpro/DINPro-Black.otf
new file mode 100644
index 0000000..578641d
Binary files /dev/null and b/benchcoach/static/fonts/dinpro/DINPro-Black.otf differ
diff --git a/benchcoach/static/fonts/dinpro/DINPro-BlackItalic.otf b/benchcoach/static/fonts/dinpro/DINPro-BlackItalic.otf
new file mode 100644
index 0000000..82b5f18
Binary files /dev/null and b/benchcoach/static/fonts/dinpro/DINPro-BlackItalic.otf differ
diff --git a/benchcoach/static/fonts/dinpro/DINPro-Bold.otf b/benchcoach/static/fonts/dinpro/DINPro-Bold.otf
new file mode 100644
index 0000000..b170223
Binary files /dev/null and b/benchcoach/static/fonts/dinpro/DINPro-Bold.otf differ
diff --git a/benchcoach/static/fonts/dinpro/DINPro-BoldItalic.otf b/benchcoach/static/fonts/dinpro/DINPro-BoldItalic.otf
new file mode 100644
index 0000000..76c99de
Binary files /dev/null and b/benchcoach/static/fonts/dinpro/DINPro-BoldItalic.otf differ
diff --git a/benchcoach/static/fonts/dinpro/DINPro-Cond.otf b/benchcoach/static/fonts/dinpro/DINPro-Cond.otf
new file mode 100644
index 0000000..cb581b3
Binary files /dev/null and b/benchcoach/static/fonts/dinpro/DINPro-Cond.otf differ
diff --git a/benchcoach/static/fonts/dinpro/DINPro-CondBlack.otf b/benchcoach/static/fonts/dinpro/DINPro-CondBlack.otf
new file mode 100644
index 0000000..cbcc768
Binary files /dev/null and b/benchcoach/static/fonts/dinpro/DINPro-CondBlack.otf differ
diff --git a/benchcoach/static/fonts/dinpro/DINPro-CondBlackIta.otf b/benchcoach/static/fonts/dinpro/DINPro-CondBlackIta.otf
new file mode 100644
index 0000000..9da8b6b
Binary files /dev/null and b/benchcoach/static/fonts/dinpro/DINPro-CondBlackIta.otf differ
diff --git a/benchcoach/static/fonts/dinpro/DINPro-CondBold.otf b/benchcoach/static/fonts/dinpro/DINPro-CondBold.otf
new file mode 100644
index 0000000..81501d5
Binary files /dev/null and b/benchcoach/static/fonts/dinpro/DINPro-CondBold.otf differ
diff --git a/benchcoach/static/fonts/dinpro/DINPro-CondBoldIta.otf b/benchcoach/static/fonts/dinpro/DINPro-CondBoldIta.otf
new file mode 100644
index 0000000..38d7bad
Binary files /dev/null and b/benchcoach/static/fonts/dinpro/DINPro-CondBoldIta.otf differ
diff --git a/benchcoach/static/fonts/dinpro/DINPro-CondIta.otf b/benchcoach/static/fonts/dinpro/DINPro-CondIta.otf
new file mode 100644
index 0000000..1e39666
Binary files /dev/null and b/benchcoach/static/fonts/dinpro/DINPro-CondIta.otf differ
diff --git a/benchcoach/static/fonts/dinpro/DINPro-CondLight.otf b/benchcoach/static/fonts/dinpro/DINPro-CondLight.otf
new file mode 100644
index 0000000..7666695
Binary files /dev/null and b/benchcoach/static/fonts/dinpro/DINPro-CondLight.otf differ
diff --git a/benchcoach/static/fonts/dinpro/DINPro-CondLightIta.otf b/benchcoach/static/fonts/dinpro/DINPro-CondLightIta.otf
new file mode 100644
index 0000000..be30b9b
Binary files /dev/null and b/benchcoach/static/fonts/dinpro/DINPro-CondLightIta.otf differ
diff --git a/benchcoach/static/fonts/dinpro/DINPro-CondMediIta.otf b/benchcoach/static/fonts/dinpro/DINPro-CondMediIta.otf
new file mode 100644
index 0000000..3596e2c
Binary files /dev/null and b/benchcoach/static/fonts/dinpro/DINPro-CondMediIta.otf differ
diff --git a/benchcoach/static/fonts/dinpro/DINPro-CondMedium.otf b/benchcoach/static/fonts/dinpro/DINPro-CondMedium.otf
new file mode 100644
index 0000000..00b38f6
Binary files /dev/null and b/benchcoach/static/fonts/dinpro/DINPro-CondMedium.otf differ
diff --git a/benchcoach/static/fonts/dinpro/DINPro-Italic.otf b/benchcoach/static/fonts/dinpro/DINPro-Italic.otf
new file mode 100644
index 0000000..fa12564
Binary files /dev/null and b/benchcoach/static/fonts/dinpro/DINPro-Italic.otf differ
diff --git a/benchcoach/static/fonts/dinpro/DINPro-Light.otf b/benchcoach/static/fonts/dinpro/DINPro-Light.otf
new file mode 100644
index 0000000..1b8cfbd
Binary files /dev/null and b/benchcoach/static/fonts/dinpro/DINPro-Light.otf differ
diff --git a/benchcoach/static/fonts/dinpro/DINPro-LightItalic.otf b/benchcoach/static/fonts/dinpro/DINPro-LightItalic.otf
new file mode 100644
index 0000000..baeefa4
Binary files /dev/null and b/benchcoach/static/fonts/dinpro/DINPro-LightItalic.otf differ
diff --git a/benchcoach/static/fonts/dinpro/DINPro-Medium.otf b/benchcoach/static/fonts/dinpro/DINPro-Medium.otf
new file mode 100644
index 0000000..6f771ab
Binary files /dev/null and b/benchcoach/static/fonts/dinpro/DINPro-Medium.otf differ
diff --git a/benchcoach/static/fonts/dinpro/DINPro-MediumItalic.otf b/benchcoach/static/fonts/dinpro/DINPro-MediumItalic.otf
new file mode 100644
index 0000000..151db45
Binary files /dev/null and b/benchcoach/static/fonts/dinpro/DINPro-MediumItalic.otf differ
diff --git a/benchcoach/static/fonts/dinpro/DINPro.otf b/benchcoach/static/fonts/dinpro/DINPro.otf
new file mode 100644
index 0000000..e6e44b1
Binary files /dev/null and b/benchcoach/static/fonts/dinpro/DINPro.otf differ
diff --git a/benchcoach/static/fonts/dinpro/dinpro.css b/benchcoach/static/fonts/dinpro/dinpro.css
new file mode 100644
index 0000000..849372c
--- /dev/null
+++ b/benchcoach/static/fonts/dinpro/dinpro.css
@@ -0,0 +1,123 @@
+@font-face {
+ font-family: "DINPro";
+ font-weight: 800;
+ src: url("DINPro-Black.otf") format("opentype");
+}
+@font-face {
+ font-family: "DINPro";
+ font-weight: 800;
+ font-style: italic;
+ src: url("DINPro-BlackItalic.otf") format("opentype");
+}
+@font-face {
+ font-family: "DINPro";
+ font-weight: bold;
+ src: url("DINPro-Bold.otf") format("opentype");
+}
+@font-face {
+ font-family: "DINPro";
+ font-weight: bold;
+ font-style: italic;
+ src: url("DINPro-BoldItalic.otf") format("opentype");
+}
+@font-face {
+ font-family: "DINPro";
+ font-stretch: condensed;
+ src: url("DINPro-Cond.otf") format("opentype");
+}
+@font-face {
+ font-family: "DINPro";
+ font-stretch: condensed;
+ font-weight: 800;
+ src: url("DINPro-CondBlack.otf") format("opentype");
+}
+@font-face {
+ font-family: "DINPro";
+ font-stretch: condensed;
+ font-weight: 800;
+ font-style: italic;
+ src: url("DINPro-CondBlackIta.otf") format("opentype");
+}
+@font-face {
+ font-family: "DINPro";
+ font-stretch: condensed;
+ font-weight: bold;
+ src: url("DINPro-CondBold.otf") format("opentype");
+}
+@font-face {
+ font-family: "DINPro";
+ font-stretch: condensed;
+ font-weight: bold;
+ font-style: italic;
+ src: url("DINPro-CondBoldIta.otf") format("opentype");
+}
+@font-face {
+ font-family: "DINPro";
+ font-stretch: condensed;
+ font-style: italic;
+ src: url("DINPro-CondIta.otf") format("opentype");
+}
+@font-face {
+ font-family: "DINPro";
+ font-stretch: condensed;
+ font-weight: 300;
+ src: url("DINPro-CondLight.otf") format("opentype");
+}
+@font-face {
+ font-family: "DINPro";
+ font-stretch: condensed;
+ font-weight: 300;
+ font-style: italic;
+ src: url("DINPro-CondLightIta.otf") format("opentype");
+}
+@font-face {
+ font-family: "DINPro";
+ font-stretch: condensed;
+ font-: Medi;
+ font-style: italic;
+ src: url("DINPro-CondMediIta.otf") format("opentype");
+}
+@font-face {
+ font-family: "DINPro";
+ font-stretch: condensed;
+ font-: Medium;
+ src: url("DINPro-CondMedium.otf") format("opentype");
+}
+@font-face {
+ font-family: "DINPro";
+ font-style: italic;
+ src: url("DINPro-Italic.otf") format("opentype");
+}
+@font-face {
+ font-family: "DINPro";
+ font-weight: 300;
+ src: url("DINPro-Light.otf") format("opentype");
+}
+@font-face {
+ font-family: "DINPro";
+ font-weight: 300;
+ font-style: italic;
+
+ src: url("DINPro-LightItalic.otf") format("opentype");
+}
+@font-face {
+ font-family: "DINPro";
+ font-: Medium;
+
+
+ src: url("DINPro-Medium.otf") format("opentype");
+}
+@font-face {
+ font-family: "DINPro";
+ font-: Medium;
+ font-style: italic;
+
+ src: url("DINPro-MediumItalic.otf") format("opentype");
+}
+@font-face {
+ font-family: "DINPro";
+ font-style: normal;
+ font-weight: normal;
+
+ src: url("DINPro.otf") format("opentype");
+}
diff --git a/benchcoach/static/fonts/epilogue/Epilogue-Black.ttf b/benchcoach/static/fonts/epilogue/Epilogue-Black.ttf
new file mode 100644
index 0000000..3d4ad46
Binary files /dev/null and b/benchcoach/static/fonts/epilogue/Epilogue-Black.ttf differ
diff --git a/benchcoach/static/fonts/epilogue/Epilogue-BlackItalic.ttf b/benchcoach/static/fonts/epilogue/Epilogue-BlackItalic.ttf
new file mode 100644
index 0000000..427ee62
Binary files /dev/null and b/benchcoach/static/fonts/epilogue/Epilogue-BlackItalic.ttf differ
diff --git a/benchcoach/static/fonts/epilogue/Epilogue-Bold.ttf b/benchcoach/static/fonts/epilogue/Epilogue-Bold.ttf
new file mode 100644
index 0000000..cdd74d6
Binary files /dev/null and b/benchcoach/static/fonts/epilogue/Epilogue-Bold.ttf differ
diff --git a/benchcoach/static/fonts/epilogue/Epilogue-BoldItalic.ttf b/benchcoach/static/fonts/epilogue/Epilogue-BoldItalic.ttf
new file mode 100644
index 0000000..6def85f
Binary files /dev/null and b/benchcoach/static/fonts/epilogue/Epilogue-BoldItalic.ttf differ
diff --git a/benchcoach/static/fonts/epilogue/Epilogue-ExtraBold.ttf b/benchcoach/static/fonts/epilogue/Epilogue-ExtraBold.ttf
new file mode 100644
index 0000000..f0ac762
Binary files /dev/null and b/benchcoach/static/fonts/epilogue/Epilogue-ExtraBold.ttf differ
diff --git a/benchcoach/static/fonts/epilogue/Epilogue-ExtraBoldItalic.ttf b/benchcoach/static/fonts/epilogue/Epilogue-ExtraBoldItalic.ttf
new file mode 100644
index 0000000..3b5d878
Binary files /dev/null and b/benchcoach/static/fonts/epilogue/Epilogue-ExtraBoldItalic.ttf differ
diff --git a/benchcoach/static/fonts/epilogue/Epilogue-ExtraLight.ttf b/benchcoach/static/fonts/epilogue/Epilogue-ExtraLight.ttf
new file mode 100644
index 0000000..7038cb7
Binary files /dev/null and b/benchcoach/static/fonts/epilogue/Epilogue-ExtraLight.ttf differ
diff --git a/benchcoach/static/fonts/epilogue/Epilogue-ExtraLightItalic.ttf b/benchcoach/static/fonts/epilogue/Epilogue-ExtraLightItalic.ttf
new file mode 100644
index 0000000..1fc2b0a
Binary files /dev/null and b/benchcoach/static/fonts/epilogue/Epilogue-ExtraLightItalic.ttf differ
diff --git a/benchcoach/static/fonts/epilogue/Epilogue-Italic.ttf b/benchcoach/static/fonts/epilogue/Epilogue-Italic.ttf
new file mode 100644
index 0000000..781c033
Binary files /dev/null and b/benchcoach/static/fonts/epilogue/Epilogue-Italic.ttf differ
diff --git a/benchcoach/static/fonts/epilogue/Epilogue-Light.ttf b/benchcoach/static/fonts/epilogue/Epilogue-Light.ttf
new file mode 100644
index 0000000..f4e963a
Binary files /dev/null and b/benchcoach/static/fonts/epilogue/Epilogue-Light.ttf differ
diff --git a/benchcoach/static/fonts/epilogue/Epilogue-LightItalic.ttf b/benchcoach/static/fonts/epilogue/Epilogue-LightItalic.ttf
new file mode 100644
index 0000000..1a9f181
Binary files /dev/null and b/benchcoach/static/fonts/epilogue/Epilogue-LightItalic.ttf differ
diff --git a/benchcoach/static/fonts/epilogue/Epilogue-Medium.ttf b/benchcoach/static/fonts/epilogue/Epilogue-Medium.ttf
new file mode 100644
index 0000000..86adf15
Binary files /dev/null and b/benchcoach/static/fonts/epilogue/Epilogue-Medium.ttf differ
diff --git a/benchcoach/static/fonts/epilogue/Epilogue-MediumItalic.ttf b/benchcoach/static/fonts/epilogue/Epilogue-MediumItalic.ttf
new file mode 100644
index 0000000..78ba8a1
Binary files /dev/null and b/benchcoach/static/fonts/epilogue/Epilogue-MediumItalic.ttf differ
diff --git a/benchcoach/static/fonts/epilogue/Epilogue-Regular.ttf b/benchcoach/static/fonts/epilogue/Epilogue-Regular.ttf
new file mode 100644
index 0000000..262d4c8
Binary files /dev/null and b/benchcoach/static/fonts/epilogue/Epilogue-Regular.ttf differ
diff --git a/benchcoach/static/fonts/epilogue/Epilogue-SemiBold.ttf b/benchcoach/static/fonts/epilogue/Epilogue-SemiBold.ttf
new file mode 100644
index 0000000..41de5e7
Binary files /dev/null and b/benchcoach/static/fonts/epilogue/Epilogue-SemiBold.ttf differ
diff --git a/benchcoach/static/fonts/epilogue/Epilogue-SemiBoldItalic.ttf b/benchcoach/static/fonts/epilogue/Epilogue-SemiBoldItalic.ttf
new file mode 100644
index 0000000..a49cf13
Binary files /dev/null and b/benchcoach/static/fonts/epilogue/Epilogue-SemiBoldItalic.ttf differ
diff --git a/benchcoach/static/fonts/epilogue/Epilogue-Thin.ttf b/benchcoach/static/fonts/epilogue/Epilogue-Thin.ttf
new file mode 100644
index 0000000..1ada722
Binary files /dev/null and b/benchcoach/static/fonts/epilogue/Epilogue-Thin.ttf differ
diff --git a/benchcoach/static/fonts/epilogue/Epilogue-ThinItalic.ttf b/benchcoach/static/fonts/epilogue/Epilogue-ThinItalic.ttf
new file mode 100644
index 0000000..8fe60e5
Binary files /dev/null and b/benchcoach/static/fonts/epilogue/Epilogue-ThinItalic.ttf differ
diff --git a/benchcoach/static/fonts/refrigerator/refigerator.css b/benchcoach/static/fonts/refrigerator/refigerator.css
new file mode 100644
index 0000000..673671a
--- /dev/null
+++ b/benchcoach/static/fonts/refrigerator/refigerator.css
@@ -0,0 +1,26 @@
+@font-face {
+ font-family: "refigerator";
+ font-weight: bold;
+ src: url("refrigerator-deluxe-bold.otf") format("opentype");
+}
+@font-face {
+ font-family: "refigerator";
+ font-weight: extrabold;
+ src: url("refrigerator-deluxe-extrabold.otf") format("opentype");
+}
+@font-face {
+ font-family: "refigerator";
+ font-weight: heavy;
+ src: url("refrigerator-deluxe-heavy.otf") format("opentype");
+}
+@font-face {
+ font-family: "refigerator";
+ font-weight: light;
+ src: url("refrigerator-deluxe-light.otf") format("opentype");
+}
+@font-face {
+ font-family: "refigerator";
+ font-weight: normal;
+ font-style: normal;
+ src: url("refrigerator-deluxe.otf") format("opentype");
+}
diff --git a/benchcoach/static/fonts/refrigerator/refrigerator-deluxe-bold.otf b/benchcoach/static/fonts/refrigerator/refrigerator-deluxe-bold.otf
new file mode 100644
index 0000000..6a9132a
Binary files /dev/null and b/benchcoach/static/fonts/refrigerator/refrigerator-deluxe-bold.otf differ
diff --git a/benchcoach/static/fonts/refrigerator/refrigerator-deluxe-extrabold.otf b/benchcoach/static/fonts/refrigerator/refrigerator-deluxe-extrabold.otf
new file mode 100644
index 0000000..ab65e2d
Binary files /dev/null and b/benchcoach/static/fonts/refrigerator/refrigerator-deluxe-extrabold.otf differ
diff --git a/benchcoach/static/fonts/refrigerator/refrigerator-deluxe-heavy.otf b/benchcoach/static/fonts/refrigerator/refrigerator-deluxe-heavy.otf
new file mode 100644
index 0000000..8d2864f
Binary files /dev/null and b/benchcoach/static/fonts/refrigerator/refrigerator-deluxe-heavy.otf differ
diff --git a/benchcoach/static/fonts/refrigerator/refrigerator-deluxe-light.otf b/benchcoach/static/fonts/refrigerator/refrigerator-deluxe-light.otf
new file mode 100644
index 0000000..7c31975
Binary files /dev/null and b/benchcoach/static/fonts/refrigerator/refrigerator-deluxe-light.otf differ
diff --git a/benchcoach/static/fonts/refrigerator/refrigerator-deluxe.otf b/benchcoach/static/fonts/refrigerator/refrigerator-deluxe.otf
new file mode 100644
index 0000000..1988e34
Binary files /dev/null and b/benchcoach/static/fonts/refrigerator/refrigerator-deluxe.otf differ
diff --git a/benchcoach/templates/base.html b/benchcoach/templates/base.html
index d029ea5..cc347c2 100644
--- a/benchcoach/templates/base.html
+++ b/benchcoach/templates/base.html
@@ -28,8 +28,6 @@
-
-
{% endblock javascript %}
diff --git a/config/settings/base.py b/config/settings/base.py
index b6d7867..503e01b 100644
--- a/config/settings/base.py
+++ b/config/settings/base.py
@@ -272,5 +272,11 @@ SOCIALACCOUNT_FORMS = {"signup": "benchcoach.users.forms.UserSocialSignupForm"}
# Your stuff...
# ------------------------------------------------------------------------------
-INSTALLED_APPS += ["teamsnap", "instagen", "gamechanger"]
+INSTALLED_APPS += [
+ "teamsnap",
+ "instagen",
+ "gamechanger",
+ "teamsnap.lineup",
+ "teamsnap.dashboard",
+]
SOCIALACCOUNT_PROVIDERS = {"teamsnap": {"SCOPE": ["read", "write"]}}
diff --git a/config/urls.py b/config/urls.py
index 1ceca87..dc18fcd 100644
--- a/config/urls.py
+++ b/config/urls.py
@@ -17,7 +17,8 @@ urlpatterns = [
path("accounts/", include("allauth.urls")),
path("", include("teamsnap.urls")),
path("", include("instagen.urls")),
- path("gc/", include("gamechanger.urls"))
+ path("gc/", include("gamechanger.urls")),
+ path("", include("gamecard.urls")),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
diff --git a/gamecard/__init__.py b/gamecard/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/gamecard/apps.py b/gamecard/apps.py
new file mode 100644
index 0000000..5e16d00
--- /dev/null
+++ b/gamecard/apps.py
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class GamecardConfig(AppConfig):
+ default_auto_field = "django.db.models.BigAutoField"
+ name = "gamecard"
diff --git a/gamecard/migrations/__init__.py b/gamecard/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/gamecard/static/css/gamecard.css b/gamecard/static/css/gamecard.css
new file mode 100644
index 0000000..107338b
--- /dev/null
+++ b/gamecard/static/css/gamecard.css
@@ -0,0 +1,152 @@
+@import url("../../css/paper.css");
+@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
+@import url('../fonts/vera/bitstreamvera.css');
+@import url('../fonts/verdana/verdanapro.css');
+@import url('../fonts/m+1m/m+1m.css');
+@import url('../fonts/dinpro/dinpro.css');
+@import url('../fonts/refrigerator/refigerator.css');
+@import url('https://fonts.googleapis.com/css2?family=Pacifico&display=swap');
+
+@page { size: B5; }
+
+* {
+ -moz-box-sizing: border-box;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+body {
+ font-family: "VerdanaPro";
+ /*font-family: -apple-system;*/
+ /*font-weight: bold;*/
+ font-size: 10px;
+}
+.whole-card {
+ margin:0;
+ padding:0;
+ height: 12.5cm;
+ width: 17.5cm;
+ outline: solid black;
+ margin: auto;
+ display: flex;
+}
+
+.half-card {
+ margin:0;
+ padding: .1in;
+ height: 100%;
+ width: 50%;
+}
+
+card-left {
+ float: left;
+}
+card-right {
+ float: right;
+}
+
+.content {
+ height: 100%;
+ width: 100%;
+ /* padding: .1in; */
+ outline: solid grey;
+}
+
+table {
+ border-collapse: collapse;
+ empty-cells: show;
+ font-size:11px;
+ table-layout: fixed;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow-x: hidden;
+ width: 100%;
+}
+
+th, tr, td {
+ /* box-sizing: content-box; */
+ border: 0.5px solid black;
+ height: 17px;
+ text-overflow: ellipsis;
+ overflow-x: hidden;
+}
+
+.gametitle {
+ font-weight: normal;
+ text-transform: uppercase;
+ font-stretch: condensed;
+}
+
+.homeaway {
+ text-transform: uppercase;
+ font-stretch: normal;
+ font-weight: bolder;
+}
+
+.numbercell {
+ font-family: "m+1m";
+ text-align: center;
+ font-stretch: condensed;
+ font-size: 10px;
+}
+
+.statscell {
+ font-family: "m+1m";
+ text-align: center;
+ font-stretch: extra-condensed;
+ font-size: 9px;
+ width: 60px;
+}
+
+tr:nth-child(even) {background-color: #f2f2f2;}
+
+th{
+ background: black;
+ color: white;
+ border: none;
+}
+
+.customcol{
+ width: 120px;
+ text-transform: uppercase;
+}
+
+.condensedNameCell{
+ width: 70px;
+ text-transform: uppercase;
+ font-stretch: condensed;
+}
+
+.square {
+ height: 14px;
+ width: 14px;
+}
+
+.available-status-code-1{
+ background-color: #B7E1CD;
+}
+
+.available-status-code-0{
+ background-color: #F4C7C3;
+}
+
+.available-status-code-2{
+ background-color: #ACC9FE;
+}
+
+.starting{
+ font-weight: bold;
+}
+.grid-container {
+ display: flex;
+ grid-template-columns: auto auto auto;
+ /*background-color: #2196F3;*/
+ /*padding: 10px;*/
+}
+
+.grid-item {
+ /*background-color: rgba(255, 255, 255, 0.8);*/
+ /*border: 1px solid rgba(0, 0, 0, 0.8);*/
+ /*padding: 20px;*/
+ font-size: 30px;
+ text-align: center;
+}
diff --git a/benchcoach/static/css/paper.css b/gamecard/static/css/paper.css
similarity index 77%
rename from benchcoach/static/css/paper.css
rename to gamecard/static/css/paper.css
index ede1dab..5b84e46 100644
--- a/benchcoach/static/css/paper.css
+++ b/gamecard/static/css/paper.css
@@ -15,6 +15,8 @@ body.A4 .sheet { width: 210mm; height: 296mm }
body.A4.landscape .sheet { width: 297mm; height: 209mm }
body.A5 .sheet { width: 148mm; height: 209mm }
body.A5.landscape .sheet { width: 210mm; height: 147mm }
+body.b5 .sheet { width: 176mm; height: 250mm }
+body.b5.landscape .sheet { width: 250mm; height: 176mm }
body.letter .sheet { width: 216mm; height: 279mm }
body.letter.landscape .sheet { width: 280mm; height: 215mm }
body.legal .sheet { width: 216mm; height: 356mm }
@@ -26,12 +28,24 @@ body.legal.landscape .sheet { width: 357mm; height: 215mm }
.sheet.padding-20mm { padding: 20mm }
.sheet.padding-25mm { padding: 25mm }
+/** For screen preview **/
+@media screen {
+ body { background: #e0e0e0 }
+ .sheet {
+ background: white;
+ box-shadow: 0 .5mm 2mm rgba(0,0,0,.3);
+ margin: 5mm auto;
+ }
+}
+
/** Fix for Chrome issue #273306 **/
@media print {
body.A3.landscape { width: 420mm }
body.A3, body.A4.landscape { width: 297mm }
body.A4, body.A5.landscape { width: 210mm }
body.A5 { width: 148mm }
+ body.b5 { width: 190mm }
+ body.b5.landscape { width: 250mm }
body.letter, body.legal { width: 216mm }
body.letter.landscape { width: 280mm }
body.legal.landscape { width: 357mm }
diff --git a/gamecard/static/fonts/m+1m/m+1m.css b/gamecard/static/fonts/m+1m/m+1m.css
new file mode 100644
index 0000000..c8f1fb9
--- /dev/null
+++ b/gamecard/static/fonts/m+1m/m+1m.css
@@ -0,0 +1,38 @@
+@font-face {
+ font-family: 'm+1m';
+ src: url('mplus-1m-bold-webfont.woff') format('woff');
+ font-weight: bold;
+ font-style: normal;
+
+}
+
+@font-face {
+ font-family: 'm+1m';
+ src: url('mplus-1m-light-webfont.woff') format('woff');
+ font-weight: 300;
+ font-style: normal;
+
+}
+
+@font-face {
+ font-family: 'm+1m';
+ src: url('mplus-1m-medium-webfont.woff') format('woff');
+ font-weight: 500;
+ font-style: normal;
+
+}
+
+@font-face {
+ font-family: 'm+1m';
+ src: url('mplus-1m-regular-webfont.woff') format('woff');
+ font-weight: normal;
+ font-style: normal;
+
+}
+
+@font-face {
+ font-family: 'm+1m';
+ src: url('mplus-1m-thin-webfont.woff') format('woff');
+ font-weight: 100;
+ font-style: normal;
+}
diff --git a/gamecard/static/fonts/m+1m/mplus-1m-bold-webfont.woff b/gamecard/static/fonts/m+1m/mplus-1m-bold-webfont.woff
new file mode 100644
index 0000000..4caef46
Binary files /dev/null and b/gamecard/static/fonts/m+1m/mplus-1m-bold-webfont.woff differ
diff --git a/gamecard/static/fonts/m+1m/mplus-1m-light-webfont.woff b/gamecard/static/fonts/m+1m/mplus-1m-light-webfont.woff
new file mode 100644
index 0000000..0ed6554
Binary files /dev/null and b/gamecard/static/fonts/m+1m/mplus-1m-light-webfont.woff differ
diff --git a/gamecard/static/fonts/m+1m/mplus-1m-medium-webfont.woff b/gamecard/static/fonts/m+1m/mplus-1m-medium-webfont.woff
new file mode 100644
index 0000000..bf9c839
Binary files /dev/null and b/gamecard/static/fonts/m+1m/mplus-1m-medium-webfont.woff differ
diff --git a/gamecard/static/fonts/m+1m/mplus-1m-regular-webfont.woff b/gamecard/static/fonts/m+1m/mplus-1m-regular-webfont.woff
new file mode 100644
index 0000000..f588a6a
Binary files /dev/null and b/gamecard/static/fonts/m+1m/mplus-1m-regular-webfont.woff differ
diff --git a/gamecard/static/fonts/m+1m/mplus-1m-thin-webfont.woff b/gamecard/static/fonts/m+1m/mplus-1m-thin-webfont.woff
new file mode 100644
index 0000000..65cd24b
Binary files /dev/null and b/gamecard/static/fonts/m+1m/mplus-1m-thin-webfont.woff differ
diff --git a/gamecard/static/fonts/vera/Vera-Bold-Italic-webfont.woff b/gamecard/static/fonts/vera/Vera-Bold-Italic-webfont.woff
new file mode 100644
index 0000000..fb1260d
Binary files /dev/null and b/gamecard/static/fonts/vera/Vera-Bold-Italic-webfont.woff differ
diff --git a/gamecard/static/fonts/vera/Vera-Bold-webfont.woff b/gamecard/static/fonts/vera/Vera-Bold-webfont.woff
new file mode 100644
index 0000000..ec47bbc
Binary files /dev/null and b/gamecard/static/fonts/vera/Vera-Bold-webfont.woff differ
diff --git a/gamecard/static/fonts/vera/Vera-Italic-webfont.woff b/gamecard/static/fonts/vera/Vera-Italic-webfont.woff
new file mode 100644
index 0000000..3e9531b
Binary files /dev/null and b/gamecard/static/fonts/vera/Vera-Italic-webfont.woff differ
diff --git a/gamecard/static/fonts/vera/Vera-webfont.woff b/gamecard/static/fonts/vera/Vera-webfont.woff
new file mode 100644
index 0000000..3425711
Binary files /dev/null and b/gamecard/static/fonts/vera/Vera-webfont.woff differ
diff --git a/gamecard/static/fonts/vera/VeraMono-Bold-Italic-webfont.woff b/gamecard/static/fonts/vera/VeraMono-Bold-Italic-webfont.woff
new file mode 100644
index 0000000..a3df515
Binary files /dev/null and b/gamecard/static/fonts/vera/VeraMono-Bold-Italic-webfont.woff differ
diff --git a/gamecard/static/fonts/vera/VeraMono-Bold-webfont.woff b/gamecard/static/fonts/vera/VeraMono-Bold-webfont.woff
new file mode 100644
index 0000000..e7d57e4
Binary files /dev/null and b/gamecard/static/fonts/vera/VeraMono-Bold-webfont.woff differ
diff --git a/gamecard/static/fonts/vera/VeraMono-Italic-webfont.woff b/gamecard/static/fonts/vera/VeraMono-Italic-webfont.woff
new file mode 100644
index 0000000..3f04533
Binary files /dev/null and b/gamecard/static/fonts/vera/VeraMono-Italic-webfont.woff differ
diff --git a/gamecard/static/fonts/vera/VeraMono-webfont.woff b/gamecard/static/fonts/vera/VeraMono-webfont.woff
new file mode 100644
index 0000000..1cd4e47
Binary files /dev/null and b/gamecard/static/fonts/vera/VeraMono-webfont.woff differ
diff --git a/gamecard/static/fonts/vera/bitstreamvera.css b/gamecard/static/fonts/vera/bitstreamvera.css
new file mode 100644
index 0000000..3672c63
--- /dev/null
+++ b/gamecard/static/fonts/vera/bitstreamvera.css
@@ -0,0 +1,68 @@
+@font-face {
+ font-family: 'Bitstream Vera Sans';
+ src: url('Vera-Bold-webfont.woff') format('woff');
+ font-weight: bold;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: 'Bitstream Vera Sans';
+ src: url('Vera-Bold-Italic-webfont.woff') format('woff');
+ font-weight: bold;
+ font-style: oblique;
+
+}
+
+@font-face {
+ font-family: 'Bitstream Vera Sans';
+ src: url('Vera-Italic-webfont.woff') format('woff');
+ font-weight: normal;
+ font-style: oblique;
+
+}
+
+@font-face {
+ font-family: 'Bitstream Vera Sans';
+ src: url('Vera-webfont.woff') format('woff');
+ font-weight: normal;
+ font-style: normal;
+
+}
+
+@font-face {
+ font-family: 'Bitstream Vera Sans Mono';
+ src: url('VeraMono-Bold-webfont.woff') format('woff');
+ font-weight: bold;
+ font-style: normal;
+
+}
+
+@font-face {
+ font-family: 'Bitstream Vera Sans Mono';
+ src: url('VeraMono-Bold-Italic-webfont.woff') format('woff');
+ font-weight: bold;
+ font-style: italic;
+
+}
+
+@font-face {
+ font-family: 'Bitstream Vera Sans Mono';
+ src: url('VeraMono-Italic-webfont.woff') format('woff');
+ font-weight: normal;
+ font-style: italic;
+
+}
+
+@font-face {
+ font-family: 'Bitstream Vera Sans Mono';
+ src: url('VeraMono-webfont.woff') format('woff');
+ font-weight: normal;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: 'Bitstream Vera Sans Mono';
+ src: url('VeraMono-webfont.woff') format('woff');
+ font-weight: 800;
+ font-style: normal;
+}
diff --git a/gamecard/static/fonts/verdana/VerdanaPro-Black.ttf b/gamecard/static/fonts/verdana/VerdanaPro-Black.ttf
new file mode 100644
index 0000000..52067f9
Binary files /dev/null and b/gamecard/static/fonts/verdana/VerdanaPro-Black.ttf differ
diff --git a/gamecard/static/fonts/verdana/VerdanaPro-BlackItalic.ttf b/gamecard/static/fonts/verdana/VerdanaPro-BlackItalic.ttf
new file mode 100644
index 0000000..b8445ef
Binary files /dev/null and b/gamecard/static/fonts/verdana/VerdanaPro-BlackItalic.ttf differ
diff --git a/gamecard/static/fonts/verdana/VerdanaPro-Bold.ttf b/gamecard/static/fonts/verdana/VerdanaPro-Bold.ttf
new file mode 100644
index 0000000..887539d
Binary files /dev/null and b/gamecard/static/fonts/verdana/VerdanaPro-Bold.ttf differ
diff --git a/gamecard/static/fonts/verdana/VerdanaPro-BoldItalic.ttf b/gamecard/static/fonts/verdana/VerdanaPro-BoldItalic.ttf
new file mode 100644
index 0000000..952d29c
Binary files /dev/null and b/gamecard/static/fonts/verdana/VerdanaPro-BoldItalic.ttf differ
diff --git a/gamecard/static/fonts/verdana/VerdanaPro-CondBlack.ttf b/gamecard/static/fonts/verdana/VerdanaPro-CondBlack.ttf
new file mode 100644
index 0000000..b097f5c
Binary files /dev/null and b/gamecard/static/fonts/verdana/VerdanaPro-CondBlack.ttf differ
diff --git a/gamecard/static/fonts/verdana/VerdanaPro-CondBlackItalic.ttf b/gamecard/static/fonts/verdana/VerdanaPro-CondBlackItalic.ttf
new file mode 100644
index 0000000..8c48bd2
Binary files /dev/null and b/gamecard/static/fonts/verdana/VerdanaPro-CondBlackItalic.ttf differ
diff --git a/gamecard/static/fonts/verdana/VerdanaPro-CondBold.ttf b/gamecard/static/fonts/verdana/VerdanaPro-CondBold.ttf
new file mode 100644
index 0000000..471c96a
Binary files /dev/null and b/gamecard/static/fonts/verdana/VerdanaPro-CondBold.ttf differ
diff --git a/gamecard/static/fonts/verdana/VerdanaPro-CondBoldItalic.ttf b/gamecard/static/fonts/verdana/VerdanaPro-CondBoldItalic.ttf
new file mode 100644
index 0000000..96b32f4
Binary files /dev/null and b/gamecard/static/fonts/verdana/VerdanaPro-CondBoldItalic.ttf differ
diff --git a/gamecard/static/fonts/verdana/VerdanaPro-CondItalic.ttf b/gamecard/static/fonts/verdana/VerdanaPro-CondItalic.ttf
new file mode 100644
index 0000000..9e95137
Binary files /dev/null and b/gamecard/static/fonts/verdana/VerdanaPro-CondItalic.ttf differ
diff --git a/gamecard/static/fonts/verdana/VerdanaPro-CondLight.ttf b/gamecard/static/fonts/verdana/VerdanaPro-CondLight.ttf
new file mode 100644
index 0000000..8513024
Binary files /dev/null and b/gamecard/static/fonts/verdana/VerdanaPro-CondLight.ttf differ
diff --git a/gamecard/static/fonts/verdana/VerdanaPro-CondLightItalic.ttf b/gamecard/static/fonts/verdana/VerdanaPro-CondLightItalic.ttf
new file mode 100644
index 0000000..c8b7e30
Binary files /dev/null and b/gamecard/static/fonts/verdana/VerdanaPro-CondLightItalic.ttf differ
diff --git a/gamecard/static/fonts/verdana/VerdanaPro-CondRegular.ttf b/gamecard/static/fonts/verdana/VerdanaPro-CondRegular.ttf
new file mode 100644
index 0000000..c2ccf32
Binary files /dev/null and b/gamecard/static/fonts/verdana/VerdanaPro-CondRegular.ttf differ
diff --git a/gamecard/static/fonts/verdana/VerdanaPro-CondSemiBold.ttf b/gamecard/static/fonts/verdana/VerdanaPro-CondSemiBold.ttf
new file mode 100644
index 0000000..9d299a7
Binary files /dev/null and b/gamecard/static/fonts/verdana/VerdanaPro-CondSemiBold.ttf differ
diff --git a/gamecard/static/fonts/verdana/VerdanaPro-CondSemiBoldItalic.ttf b/gamecard/static/fonts/verdana/VerdanaPro-CondSemiBoldItalic.ttf
new file mode 100644
index 0000000..7b7bd70
Binary files /dev/null and b/gamecard/static/fonts/verdana/VerdanaPro-CondSemiBoldItalic.ttf differ
diff --git a/gamecard/static/fonts/verdana/VerdanaPro-Italic.ttf b/gamecard/static/fonts/verdana/VerdanaPro-Italic.ttf
new file mode 100644
index 0000000..595646b
Binary files /dev/null and b/gamecard/static/fonts/verdana/VerdanaPro-Italic.ttf differ
diff --git a/gamecard/static/fonts/verdana/VerdanaPro-Light.ttf b/gamecard/static/fonts/verdana/VerdanaPro-Light.ttf
new file mode 100644
index 0000000..31962b2
Binary files /dev/null and b/gamecard/static/fonts/verdana/VerdanaPro-Light.ttf differ
diff --git a/gamecard/static/fonts/verdana/VerdanaPro-LightItalic.ttf b/gamecard/static/fonts/verdana/VerdanaPro-LightItalic.ttf
new file mode 100644
index 0000000..632f35e
Binary files /dev/null and b/gamecard/static/fonts/verdana/VerdanaPro-LightItalic.ttf differ
diff --git a/gamecard/static/fonts/verdana/VerdanaPro-Regular.ttf b/gamecard/static/fonts/verdana/VerdanaPro-Regular.ttf
new file mode 100644
index 0000000..78394be
Binary files /dev/null and b/gamecard/static/fonts/verdana/VerdanaPro-Regular.ttf differ
diff --git a/gamecard/static/fonts/verdana/VerdanaPro-SemiBold.ttf b/gamecard/static/fonts/verdana/VerdanaPro-SemiBold.ttf
new file mode 100644
index 0000000..e1a54ca
Binary files /dev/null and b/gamecard/static/fonts/verdana/VerdanaPro-SemiBold.ttf differ
diff --git a/gamecard/static/fonts/verdana/VerdanaPro-SemiBoldItalic.ttf b/gamecard/static/fonts/verdana/VerdanaPro-SemiBoldItalic.ttf
new file mode 100644
index 0000000..bd9e631
Binary files /dev/null and b/gamecard/static/fonts/verdana/VerdanaPro-SemiBoldItalic.ttf differ
diff --git a/gamecard/static/fonts/verdana/verdanapro.css b/gamecard/static/fonts/verdana/verdanapro.css
new file mode 100644
index 0000000..2dccbc7
--- /dev/null
+++ b/gamecard/static/fonts/verdana/verdanapro.css
@@ -0,0 +1,123 @@
+@font-face {
+ font-family: 'VerdanaPro';
+ src: url('VerdanaPro-Black.ttf') format('truetype');
+ font-weight: 800;
+ font-style: normal;
+}
+@font-face {
+ font-family: 'VerdanaPro';
+ src: url('VerdanaPro-BlackItalic.ttf') format('truetype');
+ font-weight: 800;
+ font-style: italic;
+}
+@font-face {
+ font-family: 'VerdanaPro';
+ src: url('VerdanaPro-Bold.ttf') format('truetype');
+ font-weight: bold;
+ font-style: normal;
+}
+@font-face {
+ font-family: 'VerdanaPro';
+ src: url('VerdanaPro-BoldItalic.ttf') format('truetype');
+ font-weight: bold;
+ font-style: italic;
+}
+@font-face {
+ font-family: 'VerdanaPro';
+ src: url('VerdanaPro-CondBlack.ttf') format('truetype');
+ font-stretch: condensed;
+ font-weight: 800;
+}
+@font-face {
+ font-family: 'VerdanaPro';
+ src: url('VerdanaPro-CondBlackItalic.ttf') format('truetype');
+ font-stretch: condensed;
+ font-weight: 800;
+ font-style: italic;
+}
+@font-face {
+ font-family: 'VerdanaPro';
+ src: url('VerdanaPro-CondBold.ttf') format('truetype');
+ font-stretch: condensed;
+ font-weight: bold;
+}
+@font-face {
+ font-family: 'VerdanaPro';
+ src: url('VerdanaPro-CondBoldItalic.ttf') format('truetype');
+ font-stretch: condensed;
+ font-weight: bold;
+ font-style: italic;
+}
+@font-face {
+ font-family: 'VerdanaPro';
+ src: url('VerdanaPro-CondItalic.ttf') format('truetype');
+ font-stretch: condensed;
+ font-style: italic;
+}
+@font-face {
+ font-family: 'VerdanaPro';
+ src: url('VerdanaPro-CondLight.ttf') format('truetype');
+ font-stretch: condensed;
+ font-weight: 300;
+}
+@font-face {
+ font-family: 'VerdanaPro';
+ src: url('VerdanaPro-CondLightItalic.ttf') format('truetype');
+ font-stretch: condensed;
+ font-weight: 300;
+ font-style: italic;
+}
+@font-face {
+ font-family: 'VerdanaPro';
+ src: url('VerdanaPro-CondRegular.ttf') format('truetype');
+ font-stretch: condensed;
+ font-style: normal;
+}
+@font-face {
+ font-family: 'VerdanaPro';
+ src: url('VerdanaPro-CondSemiBold.ttf') format('truetype');
+ font-stretch: condensed;
+ font-weight: 600;
+}
+@font-face {
+ font-family: 'VerdanaPro';
+ src: url('VerdanaPro-CondSemiBoldItalic.ttf') format('truetype');
+ font-stretch: condensed;
+ font-weight: 600;
+ font-style: italic;
+}
+@font-face {
+ font-family: 'VerdanaPro';
+ src: url('VerdanaPro-Italic.ttf') format('truetype');
+ font-style: italic;
+ font-weight: normal;
+}
+@font-face {
+ font-family: 'VerdanaPro';
+ src: url('VerdanaPro-Light.ttf') format('truetype');
+ font-weight: 300;
+}
+@font-face {
+ font-family: 'VerdanaPro';
+ src: url('VerdanaPro-LightItalic.ttf') format('truetype');
+ font-weight: 300;
+ font-style: italic;
+}
+@font-face {
+ font-family: 'VerdanaPro';
+ src: url('VerdanaPro-Regular.ttf') format('truetype');
+ font-style: normal;
+ font-weight: normal;
+}
+@font-face {
+ font-family: 'VerdanaPro';
+ src: url('VerdanaPro-SemiBold.ttf') format('truetype');
+ font-weight: 600;
+ font-style: normal;
+}
+@font-face {
+ font-family: 'VerdanaPro';
+ src: url('VerdanaPro-SemiBoldItalic.ttf') format('truetype');
+ font-weight: 600;
+ font-style: italic;
+}
diff --git a/gamecard/templates/gamecard/gamecard.html b/gamecard/templates/gamecard/gamecard.html
new file mode 100644
index 0000000..65bd032
--- /dev/null
+++ b/gamecard/templates/gamecard/gamecard.html
@@ -0,0 +1,191 @@
+{% load static %}
+
+
+
+
+
+ Title
+
+
+
+
+
+
+
+
+
+ |
+ {{ event.data.formatted_title }} {{ event.data.start_date|date:'m/d/Y g:i A' }}
+ {# G#01 at Browns 05/01/2021 12:30 PM#}
+ |
+ {{ event.data.game_type }} |
+
+
+
+
+
+
+ |
+ |
+
+ |
+
+ |
+
+ |
+ 1
+ |
+ 2
+ |
+ 3
+ |
+ 4
+ |
+ 5
+ |
+ 6
+ |
+ 7
+ |
+ X
+ |
+
+
+
+ {% for member in members_startinglineup %}
+
+ | {{ member.lineup_entry.sequence | add:"1" }} |
+ {{ member.member.last_name }} |
+ {{ member.member.jersey_number }} |
+ {{ member.lineup_entry.label }} |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+
+ {% endfor %}
+
+
+
+
+ {% for member in members_startingpositiononly %}
+
+ |
+ {{ member.member.last_name }} |
+ {{ member.member.jersey_number }} |
+ {{ member.lineup_entry.label }} |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+
+ {% endfor %}
+
+
+
+
+
+
+
+
+
+ |
+ |
+ Available |
+ AVG/OBP/SLG:PA |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+
+
+
+ {% for member in members %}
+
+ |
+ {{ member.member.jersey_number }} |
+ {{ member.member.last_name }} |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+
+ {% endfor %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+ {{ event.data.start_date|date:"D, F j, Y g:i A" }}
+ |
+
+
+ |
+ {{ event.data.location_name }}
+ |
+
+
+ |
+
+ |
+
+
+
+
+
+

+
+
+ VS.
+
+
+

+
+
+
+
+
+
+
+
+
diff --git a/gamecard/tests.py b/gamecard/tests.py
new file mode 100644
index 0000000..a79ca8b
--- /dev/null
+++ b/gamecard/tests.py
@@ -0,0 +1,3 @@
+# from django.test import TestCase
+
+# Create your tests here.
diff --git a/gamecard/urls.py b/gamecard/urls.py
new file mode 100644
index 0000000..ae4004c
--- /dev/null
+++ b/gamecard/urls.py
@@ -0,0 +1,7 @@
+from django.urls import path
+
+from .views import gamecard
+
+urlpatterns = [
+ path("/event//gamecard/", gamecard, name="gamecard")
+]
diff --git a/gamecard/utils/__init__.py b/gamecard/utils/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/gamecard/views.py b/gamecard/views.py
new file mode 100644
index 0000000..d5cc273
--- /dev/null
+++ b/gamecard/views.py
@@ -0,0 +1,109 @@
+from django.shortcuts import render
+
+from teamsnap.models import Opponent, Team
+from teamsnap.utils import get_teamsnap_client
+
+
+def gamecard(request, team_id, event_id):
+ import re
+
+ from pyteamsnap.api import (
+ Availability,
+ AvailabilitySummary,
+ Event,
+ EventLineup,
+ EventLineupEntry,
+ Member,
+ )
+
+ client = get_teamsnap_client(request)
+ ts_bulkload = client.bulk_load(
+ team_id=team_id,
+ types=[Event, EventLineup, EventLineupEntry, AvailabilitySummary, Member],
+ event__id=event_id,
+ )
+
+ ts_event = [
+ i for i in ts_bulkload if isinstance(i, Event) and i.data["id"] == event_id
+ ][0]
+ ts_availabilities = Availability.search(client, event_id=ts_event.data["id"])
+
+ ts_lineup_entries = EventLineupEntry.search(client, event_id=event_id)
+
+ if ts_lineup_entries:
+ # ts_lineup = EventLineup.get(
+ # client, id=ts_lineup_entries[0].data["event_lineup_id"]
+ # )
+ pass
+ else:
+ # ts_lineup = EventLineup.search(client, event_id=event_id)
+ pass
+
+ ts_members = [i for i in ts_bulkload if isinstance(i, Member)]
+ # ts_member_lookup = {m.data["id"]: m for m in ts_members}
+ ts_availability_lookup = {m.data["member_id"]: m for m in ts_availabilities}
+ ts_lineup_entries_lookup = {m.data["member_id"]: m for m in ts_lineup_entries}
+
+ members = []
+
+ for member in ts_members:
+ if not member.data["is_non_player"]:
+ members.append(
+ {
+ "member": getattr(member, "data"),
+ "availability": getattr(
+ ts_availability_lookup.get(member.data["id"], {}), "data", {}
+ ),
+ "lineup_entry": getattr(
+ ts_lineup_entries_lookup.get(member.data["id"], {}), "data", {}
+ ),
+ }
+ )
+
+ members = sorted(
+ members,
+ key=lambda d: (
+ {None: 3, 0: 2, 2: 1, 1: 0}.get( # No Response # No # Maybe # Yes
+ d["availability"].get("status_code")
+ ),
+ d["member"].get("last_name"),
+ ),
+ )
+
+ members_startinglineup = []
+ members_startingpositiononly = []
+
+ for member in members:
+ if re.search(
+ r"([A-Z0-9]+)(?:\s+\[(.*)\])?", member["lineup_entry"].get("label", "")
+ ):
+ position, position_note = re.search(
+ r"([A-Z0-9]+)(?:\s+\[(.*)\])?", member["lineup_entry"].get("label", "")
+ ).groups()
+ else:
+ position, position_note = ("", "")
+
+ position_only = position_note == "PO"
+
+ if position_only:
+ member["lineup_entry"]["label"] = position
+
+ if member["lineup_entry"].get("id") and not position_only:
+ members_startinglineup.append(member)
+ elif member["lineup_entry"].get("id") and position_only:
+ members_startingpositiononly.append(member)
+
+ members_startinglineup = sorted(
+ members_startinglineup,
+ key=lambda d: d.get("lineup_entry", {}).get("sequence", 100),
+ )
+
+ context = {
+ "event": ts_event,
+ "members": members,
+ "members_startinglineup": members_startinglineup,
+ "members_startingpositiononly": members_startingpositiononly,
+ "ts_team": Team.objects.get(id=team_id),
+ "ts_opponent": Opponent.objects.get(id=ts_event.data["opponent_id"]),
+ }
+ return render(request, "gamecard/gamecard.html", context=context)
diff --git a/teamsnap/admin.py b/teamsnap/admin.py
index cdfa15c..921ac45 100644
--- a/teamsnap/admin.py
+++ b/teamsnap/admin.py
@@ -1,6 +1,8 @@
from django.contrib import admin
-from .models import Preferences
+from .models import Opponent, Preferences, Team
# Register your models here.
admin.site.register(Preferences)
+admin.site.register(Team)
+admin.site.register(Opponent)
diff --git a/teamsnap/dashboard/__init__.py b/teamsnap/dashboard/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/teamsnap/dashboard/apps.py b/teamsnap/dashboard/apps.py
new file mode 100644
index 0000000..aea90ac
--- /dev/null
+++ b/teamsnap/dashboard/apps.py
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class DashboardConfig(AppConfig):
+ default_auto_field = "django.db.models.BigAutoField"
+ name = "teamsnap.dashboard"
diff --git a/teamsnap/dashboard/migrations/__init__.py b/teamsnap/dashboard/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/teamsnap/templates/dashboard.html b/teamsnap/dashboard/templates/dashboard.html
similarity index 80%
rename from teamsnap/templates/dashboard.html
rename to teamsnap/dashboard/templates/dashboard.html
index 3ecd6af..8e0c88f 100644
--- a/teamsnap/templates/dashboard.html
+++ b/teamsnap/dashboard/templates/dashboard.html
@@ -34,7 +34,12 @@
{{ event.data.location_name }}
-
{% endblock %}
{% block inline_javascript %}
{{ block.super }}
+
-
-{% endblock %}
diff --git a/teamsnap/templates/lineup/multiple_choose_2.html b/teamsnap/templates/lineup/multiple_choose_2.html
deleted file mode 100644
index a21bccf..0000000
--- a/teamsnap/templates/lineup/multiple_choose_2.html
+++ /dev/null
@@ -1,45 +0,0 @@
-{% extends "base.html" %}{% load static %}
-{% block title %} {{ title }}{% endblock %}
-
-{% csrf_token %}
-
-{% block page_heading %}
-
-
-{% endblock %}
-{% block content %}
-
-{% endblock %}
diff --git a/teamsnap/urls.py b/teamsnap/urls.py
index 0e12217..22cf9cd 100644
--- a/teamsnap/urls.py
+++ b/teamsnap/urls.py
@@ -1,48 +1,20 @@
from allauth.socialaccount.providers.oauth2.urls import default_urlpatterns
-from django.urls import path
+from django.urls import include, path
from .provider import TeamsnapProvider
-from .views import (
- PreferencesFormView,
- dashboard,
- edit_lineup,
- multi_lineup_choose,
- schedule_view,
- submit_lineup,
- view_event,
-)
+from .views import PreferencesFormView, schedule_view, view_event
urlpatterns = default_urlpatterns(TeamsnapProvider)
urlpatterns += [
path("preferences/", PreferencesFormView.as_view(), name="teamsnap_preferences"),
path("/schedule/", schedule_view, name="teamsnap_schedule"),
- path("/dashboard/", dashboard, name="teamsnap_dashboard"),
- path("dashboard/", dashboard, name="teamsnap_dashboard"),
path("schedule/", schedule_view, name="teamsnap_schedule"),
path(
"/schedule/view_event/",
view_event,
name="teamsnap_view_event",
),
- path(
- "/schedule/edit_lineup/",
- edit_lineup,
- name="teamsnap_edit_lineup",
- ),
- path(
- "/event//submit_lineup/",
- submit_lineup,
- name="teamsnap_submit_lineup",
- ),
- path(
- "/event//edit_lineup/",
- edit_lineup,
- name="teamsnap_edit_multiple_lineups",
- ),
- path(
- "/multievent/choose",
- multi_lineup_choose,
- name="teamsnap_choose_multiple_lineups",
- ),
+ path("", include("teamsnap.lineup.urls")),
+ path("", include("teamsnap.dashboard.urls")),
]
diff --git a/teamsnap/utils/__init__.py b/teamsnap/utils/__init__.py
new file mode 100644
index 0000000..6b31ac6
--- /dev/null
+++ b/teamsnap/utils/__init__.py
@@ -0,0 +1,14 @@
+import pyteamsnap
+
+
+def get_teamsnap_client(request):
+ request.user.socialaccount_set.filter(provider="teamsnap").first()
+ current_teamsnap_user = request.user.socialaccount_set.filter(
+ provider="teamsnap"
+ ).first()
+
+ ts_token = (
+ current_teamsnap_user.socialtoken_set.order_by("-expires_at").first().token
+ )
+
+ return pyteamsnap.api.TeamSnap(token=ts_token)
diff --git a/teamsnap/views.py b/teamsnap/views.py
index 1fcdcf1..5dfc0a8 100644
--- a/teamsnap/views.py
+++ b/teamsnap/views.py
@@ -1,6 +1,5 @@
import datetime
-import pyteamsnap.api
import requests
from allauth.socialaccount.providers.oauth2.views import (
OAuth2Adapter,
@@ -16,6 +15,7 @@ from gamechanger.models import Player as GamechangerPlayer
from .forms import PreferencesForm
from .models import Preferences
from .provider import TeamsnapProvider
+from .utils import get_teamsnap_client
class TeamsnapAdapter(OAuth2Adapter):
@@ -50,19 +50,6 @@ oauth2_login = OAuth2LoginView.adapter_view(TeamsnapAdapter)
oauth2_callback = OAuth2CallbackView.adapter_view(TeamsnapAdapter)
-def get_teamsnap_client(request):
- request.user.socialaccount_set.filter(provider="teamsnap").first()
- current_teamsnap_user = request.user.socialaccount_set.filter(
- provider="teamsnap"
- ).first()
-
- ts_token = (
- current_teamsnap_user.socialtoken_set.order_by("-expires_at").first().token
- )
-
- return pyteamsnap.api.TeamSnap(token=ts_token)
-
-
class PreferencesFormView(FormView):
template_name = "preferences.html"
form_class = PreferencesForm
@@ -370,45 +357,7 @@ def edit_lineup(request, event_ids, team_id):
}
)
- return render(request, "lineup/multiple_edit.html", context={"contexts": contexts})
-
-
-def dashboard(request, team_id=None):
- if not team_id:
- return redirect(
- "teamsnap_dashboard",
- team_id=request.user.teamsnap_preferences.managed_team_id,
- )
-
- from pyteamsnap.api import AvailabilitySummary, Event
-
- client = get_teamsnap_client(request)
- ts_events = Event.search(client, team_id=team_id)
- ts_availability_summaries_d = {
- a.data["id"]: a for a in AvailabilitySummary.search(client, team_id=team_id)
- }
- ts_events_future = [
- e
- for e in ts_events
- if e.data["start_date"] > datetime.datetime.now(datetime.timezone.utc)
- ]
- ts_events_past = [
- e
- for e in reversed(ts_events)
- if e.data["start_date"] < datetime.datetime.now(datetime.timezone.utc)
- ]
-
- return render(
- request,
- "dashboard.html",
- {
- "ts_events_future": ts_events_future,
- "ts_events_past": ts_events_past,
- "events_availabilities": [
- (e, ts_availability_summaries_d[e.data["id"]]) for e in ts_events_future
- ],
- },
- )
+ return render(request, "lineup/edit.html", context={"contexts": contexts})
def submit_lineup(request, team_id, event_id):
@@ -443,8 +392,7 @@ def submit_lineup(request, team_id, event_id):
try:
r.append(event_lineup_entry.put())
except Exception as e:
- e
- pass
+ raise e
pass
elif data.get("sequence") is not None and data.get("label"):
event_lineup_entry = EventLineupEntry.new(client)
@@ -489,7 +437,7 @@ def multi_lineup_choose(request, team_id):
formset = EventChooseFormset(request.POST)
return redirect(
- "teamsnap_edit_multiple_lineups",
+ "teamsnap_edit_lineup",
team_id=team_id,
event_ids=",".join(event_ids),
)