sync improvements
allow blank for teamsnap fields
This commit is contained in:
@@ -1,23 +0,0 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %} {{ title }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<h1>{{ title }}</h1>
|
||||
{#<ol class="list-group">#}
|
||||
{% for item in object_list %}
|
||||
<ul class="card">
|
||||
<span class="card-title">{{ item.formatted_title }}</span>
|
||||
<span class="fs-6">{{ item.subtitle }}</span>
|
||||
{# {% if item.body %}#}
|
||||
{# <br><span class="fs-6">{{ item.body }}</span>#}
|
||||
<br>{{ item.start_date|date:"D, M j, g:i A" }},<br>{{item.location.name}}
|
||||
{# {% endif %}#}
|
||||
<br>
|
||||
{% for button in item.buttons %}
|
||||
<a class="btn btn-primary btn-sm" href="{{ button.href }}" role="button">{{ button.label }}</a>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endfor %}
|
||||
</ol>
|
||||
{% endblock %}
|
||||
@@ -7,32 +7,30 @@
|
||||
<p><b>TeamSnap: </b>{{ teamsnap_user.email }}</p>
|
||||
<p><b>TeamSnap Managed Team: </b>{{ teamsnap_team.name }}</p>
|
||||
|
||||
<button type="button" class="btn btn-primary m-1" onclick="sync_teamsnap_db()">
|
||||
Sync TeamSnap DB
|
||||
<button type="button" class="btn btn-primary m-1" onclick="sync_teamsnapdb_with_teamsnapapi()">
|
||||
Sync TeamSnapDB with TeamSnap.com
|
||||
<div id="teamsnap-sync-spinner" class="spinner-border spinner-border-sm d-none" role="status">
|
||||
<span class="visually-hidden">Loading...</span>
|
||||
</div>
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary m-1" onclick="sync_teamsnap_db()">
|
||||
Sync TeamSnap DB
|
||||
<div id="teamsnap-sync-spinner" class="spinner-border spinner-border-sm d-none" role="status">
|
||||
<button type="button" class="btn btn-primary m-1" onclick="sync_teamsnapdb_to_benchcoachdb()">
|
||||
Sync BenchCoachDB with TeamSnapDB
|
||||
<div id="benchcoach-sync-spinner" class="spinner-border spinner-border-sm d-none" role="status">
|
||||
<span class="visually-hidden">Loading...</span>
|
||||
</div>
|
||||
</button>
|
||||
{% include 'messages.html' %}
|
||||
<div id="message-area"> </div>
|
||||
<script>
|
||||
const progress_spinner = document.getElementById("teamsnap-sync-spinner")
|
||||
const message_area = document.getElementById("message-area")
|
||||
function sync_teamsnap_db(){
|
||||
|
||||
function sync_teamsnapdb_with_teamsnapapi(){
|
||||
const progress_spinner = document.getElementById("teamsnap-sync-spinner")
|
||||
const Http = new XMLHttpRequest();
|
||||
const url='{% url 'sync teamsnap db' %}';
|
||||
console.log(progress_spinner)
|
||||
const url='{% url 'sync with teamsnapapi' %}';
|
||||
progress_spinner.classList.remove("d-none");
|
||||
fetch(url)
|
||||
.then((response) => {
|
||||
progress_spinner.classList.add("d-none")
|
||||
message_area.innerText = "test"
|
||||
return response.json();
|
||||
})
|
||||
.then((myJson) => {
|
||||
@@ -41,15 +39,16 @@
|
||||
});
|
||||
}
|
||||
|
||||
function sync_teamsnap_db_2(){
|
||||
function sync_teamsnapdb_to_benchcoachdb(){
|
||||
console.log('hello')
|
||||
const progress_spinner = document.getElementById("benchcoach-sync-spinner")
|
||||
const Http = new XMLHttpRequest();
|
||||
const url='{% url 'sync teamsnap db' %}';
|
||||
console.log(progress_spinner)
|
||||
const url='{% url 'sync benchcoach' %}';
|
||||
console.log(url)
|
||||
progress_spinner.classList.remove("d-none");
|
||||
fetch(url)
|
||||
.then((response) => {
|
||||
progress_spinner.classList.add("d-none")
|
||||
message_area.innerText = "test"
|
||||
return response.json();
|
||||
})
|
||||
.then((myJson) => {
|
||||
|
||||
@@ -1,157 +0,0 @@
|
||||
{% extends 'base.html' %}{% block title %} {{ title }} {% endblock %}{% load static %}
|
||||
|
||||
{% block content %}
|
||||
<div class="w-100 text-center mx-auto text-center">
|
||||
<h1 class="display-5 fw-bold"><a href="#" class="btn btn-primary btn-secondary p-1 mx-3"><</a>{{ event.formatted_title }}<a href="#" class="btn btn-primary btn-secondary p-1 mx-3">></a></h1>
|
||||
<div class="lead">
|
||||
<p class="">{{ event.start_date|date:"l, F j, Y g:i A" }}<br>{{ event.location.name }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<form action="{% url 'teamsnap edit lineup' event_id=event.id%}" method="post">
|
||||
{% csrf_token %}
|
||||
{{ formset.management_form }}
|
||||
<div class="row">
|
||||
{# <input type="submit" value="Submit" class="btn btn-sm btn-success mx-3 my-0 my-0">#}
|
||||
<div class="col-md-6">
|
||||
<div class="card my-1">
|
||||
<div class="card-header"><h5>Lineup</h5></div>
|
||||
<div class="card-body p-0">
|
||||
{% include 'teamsnap/player-table.html' with table_id="lineup" formset=formset_lineup available_class="d-none"%}
|
||||
<div class="justify-content-md-end d-md-flex m-2"><input type="submit" value="Submit" class="btn btn-primary"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card my-1">
|
||||
<div class="card-header"><h5>DH'd</h5></div>
|
||||
<div class="card-body p-0">
|
||||
{% include 'teamsnap/player-table.html' with table_id="dhd" formset=formset_dhd available_class="d-none" sequence_class="d-none"%}
|
||||
<div class="justify-content-md-end d-md-flex m-2"><input type="submit" value="Submit" class="btn btn-primary"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<div class="card my-1">
|
||||
<div class="card-header"><h5>Bench</h5></div>
|
||||
<div class="card-body p-0">
|
||||
{% include 'teamsnap/player-table.html' with table_id="bench" formset=formset_bench sequence_class="d-none"%}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<script src="{% static 'js/Sortable.js' %}"></script>
|
||||
<script id="sortable">
|
||||
function refresh_lineup_sequence (){
|
||||
var member_rows = document.getElementById('lineup').querySelectorAll('tr')
|
||||
var has_dh = false
|
||||
|
||||
for (let i = 0; i < member_rows.length; i++) {
|
||||
if (member_rows[i].dataset.sequence == 0) {
|
||||
has_dh = true
|
||||
continue
|
||||
}
|
||||
if (has_dh) {
|
||||
member_rows[i].dataset.sequence = i
|
||||
}
|
||||
else {
|
||||
member_rows[i].dataset.sequence = i+1
|
||||
}
|
||||
var member_sequence = member_rows[i].querySelector('[id^="member-sequence-button"]')
|
||||
var form_element_sequence = member_rows[i].querySelector('[id$="sequence"]')
|
||||
member_sequence.innerText = parseInt(member_rows[i].dataset.sequence)
|
||||
form_element_sequence.value = parseInt(member_rows[i].dataset.sequence)
|
||||
}
|
||||
}
|
||||
var lineup = new Sortable.create(
|
||||
document.getElementById('dhd'), {
|
||||
animation: 150,
|
||||
ghostClass: "ghost",
|
||||
{#handle: ".bars-move",#}
|
||||
group: {
|
||||
put: true,
|
||||
pull: true
|
||||
}
|
||||
})
|
||||
var lineup = new Sortable.create(
|
||||
document.getElementById('lineup'), {
|
||||
animation: 150,
|
||||
ghostClass:"ghost",
|
||||
{#handle: ".bars-move",#}
|
||||
group:{
|
||||
put:true,
|
||||
pull:true
|
||||
},
|
||||
onAdd: function (/**Event*/evt) {
|
||||
// Add to Lineup
|
||||
var itemEl = evt.item; // dragged HTMLElement
|
||||
var member_id = itemEl.dataset.memberId
|
||||
console.log(itemEl)
|
||||
var form_element_sequence =itemEl.querySelector('[id$="sequence"]')
|
||||
var member_sequence = itemEl.querySelector('[id^="member-sequence"]')
|
||||
var member_available =itemEl.querySelector('[id^="member-available"]')
|
||||
var member_sequence_button =itemEl.querySelector('[id^="member-sequence-button"]')
|
||||
console.log(member_sequence.parentElement.dataset)
|
||||
toggle_in_lineup(member_sequence_button)
|
||||
member_sequence.parentElement.dataset.sequence = evt.newIndex
|
||||
refresh_lineup_sequence()
|
||||
{#member_available.parentElement.style.display="none"#}
|
||||
member_available.parentElement.classList.add('d-none')
|
||||
{#member_sequence.style.display="table-cell"#}
|
||||
member_sequence.classList.remove('d-none')
|
||||
},
|
||||
onUpdate: function (/**Event*/evt) {
|
||||
console.log('update to lineup')
|
||||
var itemEl = evt.item; // dragged HTMLElement
|
||||
refresh_lineup_sequence()
|
||||
},
|
||||
});
|
||||
var bench = new Sortable.create(
|
||||
document.getElementById('bench'), {
|
||||
animation: 150,
|
||||
ghostClass:"ghost",
|
||||
sort: false,
|
||||
{#handle: ".bars-move",#}
|
||||
group:{
|
||||
put:true,
|
||||
pull:true
|
||||
},
|
||||
onAdd: function (/**Event*/evt) {
|
||||
console.log('added to bench')
|
||||
var itemEl = evt.item; // dragged HTMLElement
|
||||
console.log(itemEl)
|
||||
var form_element_sequence =itemEl.querySelector('[id$="sequence"]')
|
||||
var member_sequence = itemEl.querySelector('[id^="member-sequence"]')
|
||||
var member_available =itemEl.querySelector('[id^="member-available"]')
|
||||
{#member_available.parentElement.style.display="table-cell"#}
|
||||
member_available.parentElement.classList.remove('d-none')
|
||||
form_element_sequence.value = 0
|
||||
member_sequence.innerHTML = 1
|
||||
{#member_sequence.style.display="none"#}
|
||||
member_sequence.classList.add('d-none')
|
||||
var member_id = itemEl.dataset.memberId
|
||||
refresh_lineup_sequence()
|
||||
}
|
||||
});
|
||||
function toggle_in_lineup(sequence_button){
|
||||
var member_row = sequence_button.parentNode.parentNode
|
||||
if (member_row.dataset.sequence == 0) {
|
||||
sequence_button.innerText = "1"
|
||||
sequence_button.classList.add("btn-light")
|
||||
sequence_button.classList.remove("btn-dark")
|
||||
member_row.dataset.sequence = 1
|
||||
}
|
||||
else {
|
||||
sequence_button.innerText = "D"
|
||||
sequence_button.classList.remove("btn-light")
|
||||
sequence_button.classList.add("btn-dark")
|
||||
member_row.dataset.sequence = 0
|
||||
}
|
||||
refresh_lineup_sequence()
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
||||
@@ -1,86 +0,0 @@
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr class="border border-light">
|
||||
{# <th scope="col" style="display: none"></th>#}
|
||||
{# <th scope="col" class="border border-light"></th>#}
|
||||
{# <th scope="col">Name</th>#}
|
||||
{# <th scope="col">Pos</th>#}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id={{ table_id }}>
|
||||
{% for form in formset %}
|
||||
<tr data-member-id="{{ form.instance.member.id }}"
|
||||
data-position="{{ form.instance.position }}"
|
||||
data-sequence="{{ form.instance.sequence }}">
|
||||
{{ form.id.as_hidden }}
|
||||
{{ form.event.as_hidden }}
|
||||
{{ form.sequence.as_hidden }}
|
||||
{{ form.member.as_hidden }}
|
||||
{{ form.teamsnap_id.as_hidden }}
|
||||
<td id="member-availability-{{ form.instance.member.id }}"
|
||||
class="{{ available_class }}"
|
||||
>
|
||||
{% if form.availability.status_code == 2 %}
|
||||
<button class="btn btn-light bg-info p-1"
|
||||
id="member-available-{{ form.instance.member.id }}"
|
||||
>
|
||||
<span style="visibility: hidden">2</span>
|
||||
<span class="visually-hidden">Maybe</span>
|
||||
</button>
|
||||
{% elif form.availability.status_code == 1%}
|
||||
<button class="btn btn-light bg-success p-1"
|
||||
id="member-available-{{ form.instance.member.id }}"
|
||||
>
|
||||
<span style="visibility: hidden">1</span>
|
||||
</button>
|
||||
<span class="visually-hidden">Maybe</span>
|
||||
{% elif form.availability.status_code == 0%}
|
||||
<button class="btn btn-light bg-danger p-1"
|
||||
id="member-available-{{ form.instance.member.id }}"
|
||||
>
|
||||
<span style="visibility: hidden">0</span>
|
||||
</button>
|
||||
<span class="visually-hidden">No</span>
|
||||
{% else %}
|
||||
<button class="btn btn-light bg-secondary p-1"
|
||||
id="member-available-{{ form.instance.member.id }}"
|
||||
>
|
||||
<span style="visibility: hidden">X</span>
|
||||
</button>
|
||||
<span class="visually-hidden">Unknown</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
<th scope="row"
|
||||
id="member-sequence-{{ form.instance.member.id }}"
|
||||
class="{{ sequence_class }}">
|
||||
{% if form.sequence.value %}
|
||||
<button type="button"
|
||||
class="btn btn-light p-1"
|
||||
id="member-sequence-button-{{ form.instance.member.id }}"
|
||||
onclick="toggle_in_lineup(this)"
|
||||
>
|
||||
{{ form.sequence.value }}
|
||||
</button>
|
||||
{% elif form.sequence.value == 0 %}
|
||||
<button type="button"
|
||||
class="btn btn-dark p-1"s
|
||||
id="member-sequence-button-{{ form.instance.member.id }}"
|
||||
onclick="toggle_in_lineup(this)"
|
||||
>
|
||||
D
|
||||
</button>
|
||||
{% endif %}
|
||||
</th>
|
||||
<th>
|
||||
{{ form.instance.member.first_name }} {{ form.instance.member.last_name }}
|
||||
<small class="text-muted fw-light">#{{ form.instance.member.jersey_number }}</small>
|
||||
{# <br><code><small>{{ form.statline }}</small></code>#}
|
||||
</th>
|
||||
<td>
|
||||
{{ form.label }}
|
||||
</td>
|
||||
{# <td>{{ form.instance.position }}</td>#}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -1,13 +1,8 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Title</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
{{ formset.management_form }}
|
||||
<table>
|
||||
{% extends 'base.html' %}
|
||||
{% block content %}
|
||||
<form method="post">
|
||||
{{ formset.management_form }}{% csrf_token %}
|
||||
<table class="table">
|
||||
<tr>
|
||||
{% for _, field in formset.0.base_fields.items %}
|
||||
<th>{{ field.label }}</th>
|
||||
@@ -24,6 +19,6 @@
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
<input type="submit" value="Submit">
|
||||
</form>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user