cleaning up, improved scripts and menus

This commit is contained in:
Arthur Gerbaud
2016-08-13 20:59:48 +02:00
parent 12f23b8acb
commit 128314bcb3
25 changed files with 274 additions and 209 deletions

View File

@@ -15,6 +15,7 @@ admin.site.register(Lieu)
# Inlines
class ObservationInline(admin.StackedInline):
model = Observation
extra = 0
@admin.register(Rencontre)

View File

@@ -1,14 +1,10 @@
{% load bootstrap3 %}
{% load staticfiles %}
{% load bootstrap3 %}{% load staticfiles %}
{{ form.media.js }}{{ form.media.css }}
<script type="text/javascript" src="{% static "jquery.formset.js" %}"></script>
<script type="text/javascript">
/* Dynamic Formsets */
$(function() {
$.fn.onAddForm = function(row) {
/*
* Custom code to integrate with django-select2 and bootstrap3
*/
// Load django_select2 fields
row.find('.django-select2').djangoSelect2();
var button = row.find('a.btn-delete')
@@ -22,8 +18,6 @@
*/
};
});
$(function() {
$('.dynamic-formset').formset({
prefix: '{{ inline_formset.prefix }}',
@@ -40,67 +34,8 @@
text = $('a.btn-delete:first').text()
$('a.btn-delete').html('<span class="glyphicon glyphicon-minus"></span> ' + text);
});
/* Lier les boutons de création
* Thanks to Derek Morgan, https://dmorgan.info/posts/django-views-bootstrap-modals/
*/
$(function() {
var formAjaxSubmit = function(form, modal) {
$(form).submit(function (e) {
e.preventDefault();
$.ajax({
type: $(this).attr('method'),
url: $(this).attr('action'),
data: $(this).serialize(),
success: function (xhr, ajaxOptions, thrownError) {
if ( $(xhr).find('.has-error').length > 0 ) {
$(modal).find('.modal-body').html(xhr);
formAjaxSubmit(form, modal);
} else {
$(modal).modal('toggle');
// Reload page ?
}
},
error: function (xhr, ajaxOptions, thrownError) {
// handle response errors here
}
});
});
}
/* TODO: Use formAjaxSubmit above, but reload page on form success */
$('#new-sujet').click(function() {
$('#form-modal-body').load('{% url "sujets:create" %}?next={% url "maraudes:create" pk=maraude.id %}', function () {
$('.modal-title').text("Nouveau sujet");
$('#form-modal').modal('toggle');
});
});
$('#new-lieu').click(function() {
$('#form-modal-body').load('{% url "maraudes:lieu-create" %}?next={% url "maraudes:create" pk=maraude.id %}', function () {
$('.modal-title').text("Nouveau lieu");
$('#form-modal').modal('toggle');
});
});
});
</script>
<div class="modal fade" id="form-modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title">Modal title</h4>
</div>
<div id="form-modal-body" class="modal-body">
...
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Fermer</button>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6 col-sd-12">
<form method="post" action="{% url 'maraudes:create' maraude.pk %}?finalize=False">
@@ -114,18 +49,9 @@
<div class="panel-body">
{% include "compte_rendu/compterendu_form.html" %}
</div>
<div class="panel-footer text-right">
<div class="btn-group">
<a class= "btn btn-primary" id="new-sujet">
{% bootstrap_icon "user" %} Nouveau sujet</a>
<a class="btn btn-primary" id="new-lieu">
{% bootstrap_icon "globe" %} Nouveau lieu</a>
</div>
</div>
</div>
</form>
</div>
<div class="col-md-6 col-sd-12">
<div class="panel panel-default">
<div class="panel-heading"><h4>Enregistrées
@@ -142,3 +68,17 @@
</div>
</div>
</div>
<div class="modal fade" id="form-modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title">Modal title</h4>
</div>
<div id="form-modal-body" class="modal-body">
<div class="alert alert-warning">Content should be there...</div>
</div>
</div>
</div>
</div>

View File

@@ -1,4 +1,4 @@
{% load bootstrap3 %}
{% load bootstrap3 %}{% load staticfiles %}
<div class="form-inline well well-sm text-center">
{% if form.id %}{% bootstrap_field form.id %}{% endif %}
{% bootstrap_field form.lieu layout="inline" size="small" %}
@@ -27,36 +27,4 @@
{% endfor %}
</div>
<script type="text/javascript">
$(function() {
var input = $('#id_heure_debut')
var min_value = input.attr('value').split(":")
$.fn.editHeureValue = function(mod) {
var input = $('#id_heure_debut');
var value = input.attr('value').split(":");
value[1] = parseInt(value[1]) + mod;
do_change = true
for (i=0; i < 3; i++){
if (value[i] < min_value[i]){
do_change = false
};
};
new_value = value.join(":");
if (do_change){
input.attr('value', new_value);
};
};
$('#minus-5').click(function() {
$.fn.editHeureValue(-5)
console.log('minus 5')
});
$('#plus-5').click(function() {
$.fn.editHeureValue(5)
console.log('plus 5')
});
});
</script>
<script type="text/javascript" src="{% static "scripts/update_time.js" %}"></script>

View File

@@ -0,0 +1,55 @@
{% if user.is_superuser %}{% load bootstrap3 %}
<li class="dropdown app-menu"><a class="dropdown-toggle" data-toggle="dropdown" href="#">Création<b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="#" id="new-sujet">{% bootstrap_icon "user" %} Nouveau sujet</a></li>
<li><a href="#" id="new-lieu">{% bootstrap_icon "globe" %} Nouveau lieu</a></li>
</ul>
{% endif %}
<script type="text/javascript">
/* Lier les boutons de création
* Thanks to Derek Morgan, https://dmorgan.info/posts/django-views-bootstrap-modals/
*/
$(function() {
var formAjaxSubmit = function(form, modal) {
$(form).submit(function (e) {
e.preventDefault();
$.ajax({
type: $(this).attr('method'),
url: $(this).attr('action'),
data: $(this).serialize(),
success: function (xhr, ajaxOptions, thrownError) {
if ( $(xhr).find('.has-error').length > 0 || $(xhr).find('.alert-danger').length > 0) {
$(modal).find('.modal-body').html(xhr);
formAjaxSubmit(form, modal);
} else {
$(modal).modal('toggle');
// Reload page ?
}
},
error: function (xhr, ajaxOptions, thrownError) {
// handle response errors here
}
});
});
}
/* TODO: Use formAjaxSubmit above, but reload page on form success */
$('#new-sujet').click(function() {
$('#form-modal-body').load('{% url "sujets:create" %}?next={% url "maraudes:create" pk=maraude.id %}', function () {
$('.modal-title').text("Nouveau sujet");
$('#form-modal').modal('toggle');
formAjaxSubmit("#form-modal-body form", "#form-modal");
});
});
$('#new-lieu').click(function() {
$('#form-modal-body').load('{% url "maraudes:lieu-create" %}?next={% url "maraudes:create" pk=maraude.id %}', function () {
$('.modal-title').text("Nouveau lieu");
$('#form-modal').modal('toggle');
formAjaxSubmit("#form-modal-body form", "#form-modal");
});
});
});
</script>

View File

@@ -3,7 +3,7 @@
<div class="panel panel-primary">
<!-- Default panel contents -->
<div class="panel-heading text-center">
<h3 class="panel-title">Maraudes</h3>
<h3 class="panel-title">Maraudes passées</h3>
</div>
<!-- Table -->
@@ -24,8 +24,8 @@
</a><a class="btn btn-danger" href="/admin/maraudes/maraude/{{maraude.id}}/change/">{% bootstrap_icon "edit" %}
{% endif %}</a></div>
<div class="pull-right">
<span class="label label-info">{{ maraude.binome }} & {{ maraude.referent }}</span>
<span class="label label-success">{{maraude.rencontres.count}} rencontres</span>
<span class="label label-info">{{ maraude.binome }} & {{ maraude.referent }}</span>
</div>
</td>
</tr>

View File

@@ -59,6 +59,26 @@ class IndexView(DerniereMaraudeMixin, generic.TemplateView):
template_name = "maraudes/index.html"
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(**kwargs)
context['prochaine_maraude_abs'] = self.get_prochaine_maraude()
context['prochaine_maraude'] = self.get_prochaine_maraude_for_user()
return context
def get_prochaine_maraude_for_user(self):
""" Retourne le prochain objet Maraude auquel
l'utilisateur participe, ou None """
try: #TODO: Clean up this ugly thing
self.maraudeur = Maraudeur.objects.get(username=self.request.user.username)
except:
self.maraudeur = None
if self.maraudeur:
return Maraude.objects.get_next_of(self.maraudeur)
return None
def get_prochaine_maraude(self):
return Maraude.objects.next
## MARAUDES
@webpage
@@ -112,6 +132,10 @@ class CompteRenduCreateView(generic.DetailView):
header = "{{maraude.date}}"
header_small = "écriture du compte-rendu"
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.app_menu = ["compte_rendu/menu_creation.html"]
def get_forms(self, *args, initial=None):
self.form = RencontreForm(*args,
initial=initial)
@@ -151,11 +175,13 @@ class CompteRenduCreateView(generic.DetailView):
def calculate_end_time(debut, duree):
end_minute = debut.minute + duree
hour = debut.hour + end_minute // 60
if hour >= 24: hour -= 24
elif hour < 0: hour += 24
minute = end_minute % 60
return datetime.time(
hour,
minute,
debut.second
0
)
if new_form:
last_rencontre = self.get_object().rencontres.last()