From a9c3c6a834d44a3b8bfd5ad84283d3338ab09de5 Mon Sep 17 00:00:00 2001
From: ingo <ingo.leindecker@fro.at>
Date: Fri, 3 Nov 2017 15:52:11 +0100
Subject: [PATCH] Added some form validation See #8 #20

---
 program/admin.py                |  7 +++-
 program/templates/styles.css    |  4 +++
 pv/site_media/js/show_change.js | 57 ++++++++++++++++++++++++++++++++-
 3 files changed, 66 insertions(+), 2 deletions(-)

diff --git a/program/admin.py b/program/admin.py
index e84d76fb..d1dfee24 100644
--- a/program/admin.py
+++ b/program/admin.py
@@ -159,7 +159,12 @@ class ShowAdmin(admin.ModelAdmin):
     class Media:
         from django.conf import settings
         media_url = getattr(settings, 'MEDIA_URL')
-        js = [ media_url + 'js/show_change.js',]
+        js = [ media_url + 'js/show_change.js',
+               media_url + 'js/calendar/lib/moment.min.js',
+             ]
+
+        css = { 'all': ('/program/styles.css',) }
+
 
     def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
         try:
diff --git a/program/templates/styles.css b/program/templates/styles.css
index 40f2bfa9..fbad3e9c 100644
--- a/program/templates/styles.css
+++ b/program/templates/styles.css
@@ -164,6 +164,10 @@
    float:left;
 }
 
+.validation-error {
+   border:2px solid #ba2121 !important;
+}
+
 .noselect {
   -webkit-touch-callout: none; /* iOS Safari */
     -webkit-user-select: none; /* Safari */
diff --git a/pv/site_media/js/show_change.js b/pv/site_media/js/show_change.js
index cf1c6d22..f3db2ec5 100644
--- a/pv/site_media/js/show_change.js
+++ b/pv/site_media/js/show_change.js
@@ -28,6 +28,8 @@ function toggleSelects( select_elm ) {
 
 django.jQuery(document).ready( function() {
 
+   moment.locale("de");
+
  	/* Toggle selects dependent on rrule option on load */
    django.jQuery(".field-rrule select").each( function(i) {
       toggleSelects( django.jQuery(this) );
@@ -38,14 +40,67 @@ django.jQuery(document).ready( function() {
       toggleSelects( django.jQuery(this) )
    });
 
-	/* Set the until date to dstart if editing a programslot with freq 'once' */
+
    django.jQuery(document).on('blur', '.field-dstart input', function() {
 		var ps_id = django.jQuery(this).closest('tr').attr("id");
       var dstart = django.jQuery(this).val();
 
+      //django.jQuery(this).removeClass('validation-error');
+
+   	/* Set the until date to dstart if editing a programslot with freq 'once' */
 		if( django.jQuery('#id_' + ps_id + '-rrule option:selected').val() == 1 ) {
    		django.jQuery('#id_' + ps_id + '-until').show().val(dstart).hide();
    	}
+
+		/* Check if dstart is not in the past */
+      /*
+      if( dstart != '' ) {
+        console.log(moment(dstart, "DD.MM.YYYY").unix());
+        console.log(moment().unix());
+
+        if( moment(dstart, "DD.MM.YYYY").unix() <= moment().unix() ) {
+            alert('Startdatum darf nicht in der Vergangenheit liegen');
+            django.jQuery(this).addClass('validation-error');
+        }
+
+      }
+      */
+
+   });
+
+
+   django.jQuery(document).on('submit', '#show_form', function(e) {
+       django.jQuery('input').removeClass('validation-error');
+
+       django.jQuery('.field-until input').each( function() {
+
+           var until = django.jQuery(this).val();
+           var dstart = django.jQuery(this).closest('tr').find('.field-dstart input').val();
+           var until_timestamp =  moment(until, "DD.MM.YYYY") / 1000;
+           var dstart_timestamp = moment(dstart, "DD.MM.YYYY") / 1000;
+
+           if( until != '' && dstart != '') {
+               if( until_timestamp <= dstart_timestamp ) {
+                   e.preventDefault();
+                   alert('Enddatum darf nicht vor dem Startdatum liegen');
+                   django.jQuery(this).addClass('validation-error');
+               }
+
+           } else if( until == '' && dstart != '') {
+               e.preventDefault();
+               alert('Enddatum darf nicht leer sein');
+               django.jQuery(this).addClass('validation-error');
+           } else if( dstart == '' && until != '') {
+           	   e.preventDefault();
+           	   alert('Startdatum darf nicht leer sein');
+               django.jQuery(this).closest('tr').find('.field-dstart input').addClass('validation-error');
+           } else {
+               return;
+           }
+
+       });
+
+
    });
 
 });
\ No newline at end of file
-- 
GitLab