Przeglądaj źródła

Added the ability to enable/disable projects feature. You can also now set a maximum daily time entry limit.

Adam Day 4 lat temu
rodzic
commit
688cf614fd

+ 9 - 3
app/forms.py

@@ -35,7 +35,7 @@ except Exception as e:
 
 
 minutes = (
-    ('0', '0'),
+    ('0', '00'),
     ('0.25', '15'),
     ('0.50', '30'),
     ('0.75', '45')
@@ -58,8 +58,10 @@ class CreateUserForm(forms.Form):
 
 
 class TimeEntryForm(forms.Form):
-    project = forms.ModelChoiceField(Project.objects.all(), required=False, label="Select a project if applicable (not required)",
+    project = forms.ModelChoiceField(Project.objects.all(), required=False,
+                                     label="Select a project if applicable (not required)",
                                      widget=forms.Select(attrs={'class': 'form-control form-control-lg'}))
+
     hours = forms.ChoiceField(required=True, choices=hours,
                               widget=forms.Select(attrs={'class': 'form-control form-control-lg'}))
     minutes = forms.ChoiceField(required=True, choices=minutes,
@@ -68,6 +70,10 @@ class TimeEntryForm(forms.Form):
 
 class SettingsForm(forms.Form):
     max_daily_hours = forms.CharField(required=True, validators=[max_daily_hours_length])
+    max_daily_entries = forms.CharField(required=True)
     session_timeout = forms.CharField(required=True, validators=[session_timeout_length])
-    allow_entry_edit = forms.BooleanField(required=True)
+    projects = forms.BooleanField(required=False, label="Enable Projects",
+                                  help_text="Allows for time entries to be attached to projects.")
+
+
 

+ 4 - 7
app/templates/forms/timesheet_entry.html

@@ -2,19 +2,16 @@
 
 <form action="{% url 'timesheet' %}" method="post">
     <div class="row">
-        <div class="col-sm-12 col-md-6">
+        <div class="col-sm-12 col-md-4">
             {{ form.hours | as_crispy_field }}
         </div>
-        <div class="col-sm-12 col-md-6">
+        <div class="col-sm-12 col-md-4">
             {{ form.minutes | as_crispy_field }}
         </div>
-        <div class="col-sm-12 col-md-6">
-            {{ form.project | as_crispy_field }}
-        </div>
-        <div class="col-sm-12 col-md-6">
+        <div class="col-sm-12 col-md-4">
             <label class="form-label">&nbsp;</label>
             <input type="submit" value="Submit" class="form-control form-control-lg btn btn-lg btn-dark">
         </div>
         {% csrf_token %}
     </div>
-</form>
+</form>

+ 22 - 0
app/templates/forms/timesheet_entry_projects.html

@@ -0,0 +1,22 @@
+{% load crispy_forms_tags %}
+
+<form action="{% url 'timesheet' %}" method="post">
+    <div class="row">
+        <div class="col-sm-12 col-md-6">
+            {{ form.hours | as_crispy_field }}
+        </div>
+        <div class="col-sm-12 col-md-6">
+            {{ form.minutes | as_crispy_field }}
+        </div>
+        <div class="col-sm-12 col-md-6">
+            {{ form.project | as_crispy_field }}
+        </div>
+        <div class="col-sm-12 col-md-6">
+            <label class="form-label">&nbsp;</label>
+            <input type="submit" value="Submit" class="form-control form-control-lg btn btn-lg btn-dark">
+        </div>
+        {% csrf_token %}
+    </div>
+</form>
+
+

+ 27 - 5
app/templates/timesheet.html

@@ -14,15 +14,33 @@
             <a href="{% url 'logout' %}" class="btn btn-lg btn-danger"><span class="oi" data-glyph="account-logout"></span></a>
         </div>
     </div>
+
+    {% if max_daily_entries_quota == False %}
     <div class="row mb-3">
         <div class="col-12">
             <div class="card">
                 <div class="card-body">
-                    {% include 'forms/timesheet_entry.html' %}
+                    {% if projects == "True" %}
+                        {% include 'forms/timesheet_entry_projects.html' %}
+                    {% else %}
+                        {% include 'forms/timesheet_entry.html' %}
+                    {% endif %}
+                </div>
+            </div>
+        </div>
+    </div>
+    {% else %}
+    <div class="row mb-3">
+        <div class="col-12">
+            <div class="card">
+                <div class="card-body text-center">
+                    <p class="lead"><span class="oi" data-glyph="warning"></span> Maximum daily entries met.</p>
                 </div>
             </div>
         </div>
     </div>
+    {% endif %}
+
     {% if entries %}
     <div class="row">
         <div class="col-12">
@@ -47,7 +65,9 @@
                             <b>Hours</b>
                         </div>
                         <div class="d-sm-none d-md-block col-md-3">
+                            {% if projects == "True" %}
                             <b>Project</b>
+                            {% endif %}
                         </div>
                         <div class="col-md-4 text-end">
 
@@ -63,10 +83,12 @@
                                 {{ entry.time_worked }}
                             </div>
                             <div class="col-md-3">
-                                {% if entry.project %}
-                                    {{ entry.project.name }}
-                                {% else %}
-                                    -
+                                {% if projects == "True" %}
+                                    {% if entry.project %}
+                                        {{ entry.project.name }}
+                                    {% else %}
+                                        -
+                                    {% endif %}
                                 {% endif %}
                             </div>
                             <div class="col-sm-6 col-md-4 text-end">

+ 21 - 3
app/views.py

@@ -58,8 +58,13 @@ def setup(request):
             s.save()
 
             s = Setting()
-            s.setting = 'Allow Entry Edit'
-            s.value = data['allow_entry_edit']
+            s.setting = 'Max Daily Entries'
+            s.value = data['max_daily_entries']
+            s.save()
+
+            s = Setting()
+            s.setting = 'Projects'
+            s.value = data['projects']
             s.save()
 
             return redirect('home')
@@ -130,6 +135,8 @@ def timesheet(request):
     uid = request.session.get('uid')
     user = get_user(uid)
 
+    projects = Setting.objects.get(setting='Projects')
+
     form = TimeEntryForm()
 
     if request.method == "POST":
@@ -150,7 +157,16 @@ def timesheet(request):
                 entry.save()
                 form = TimeEntryForm()
 
-    entries = Entry.objects.filter(user__id=uid)
+    entries = Entry.objects.filter(user=user, date__month=datetime.datetime.now().month)
+
+    date = datetime.datetime.now()
+    max_daily_entries = Setting.objects.get(setting='Max Daily Entries')
+    todays_entries = Entry.objects.filter(user=user, date=date).count()
+
+    max_daily_entries_quota = False
+
+    if int(todays_entries) >= int(max_daily_entries.value):
+        max_daily_entries_quota = True
 
     time_entries = list()
     total_time_worked = 0
@@ -172,6 +188,8 @@ def timesheet(request):
         'form': form,
         'entries': time_entries,
         'total_time_worked': total_time_worked,
+        'max_daily_entries_quota': max_daily_entries_quota,
+        'projects': projects.value,
     }
 
     return render(request, 'timesheet.html', context=context)