[PYTHON] Die Django-Schichttabelle erfordert die gesamte tägliche Arbeitszeit. Wenn Sie Überstunden leisten, wird diese Zahl überschrieben.

Als ich mir die Schichttabelle ansah, die ich gerade benutze, überprüfte ich, ob dies notwendig war, weil es tägliche Arbeitszeiten gab, und als der Administrator sie erstellte, hörte ich, dass eine Gesamtzeit erforderlich war, also änderte ich das Gesamtfeld Ich werde es hinzufügen.

Betrachten Sie Schichtstunden und Überstunden. Es ist möglich zu antworten, indem Sie eine Minuszeit eingeben, wenn die Schichtzeit kürzer als die Schichtzeit ist, wenn Sie früh oder spät ziehen ...

Lassen Sie uns über die Vorteile einer separaten Version nachdenken.

・ Es ist keine Schichtzeit mehr vor Ort erforderlich. ・ Es scheint, dass wir mit Plus und Minus umgehen können ... ・ Wenn Sie im nächsten Monat kopieren, können Sie bis auf Überstunden kopieren. ・ Einfache Überstunden

Nun, ich habe das Gefühl, dass es keinen entscheidenden Treffer gibt.

Wenn Sie es einfach haben ・ Beim Kopieren im nächsten Monat ist eine Berechnungsverarbeitung erforderlich ・ Überstunden sind leicht zu verstehen, da sie die Arbeitszeiten direkt korrigieren ・ Überstundenberechnung erfordert Berechnungsverarbeitung

Ich habe entschieden, dass es nicht viel Verdienst gibt.

Feld zum Modell hinzufügen

python:schesule.models.py



from django.db import models
from shisetsu.models import *
from accounts.models import *
from django.contrib.auth.models import User
from django.core.validators import MaxValueValidator,MinValueValidator

# Create your models here.

class Shift(models.Model):
    id = models.AutoField(verbose_name='Schicht-ID',primary_key=True)
    name = models.CharField(verbose_name='Name verschieben', max_length=1)
    start_time = models.TimeField(verbose_name="Startzeit")
    end_time = models.TimeField(verbose_name="Endzeit")
    wrok_time = models.IntegerField(verbose_name='Arbeitszeit')

    def __str__(self):
        return self.name
    
class Schedule(models.Model):
    id = models.AutoField(verbose_name='Zeitplan-ID',primary_key=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='Mitarbeitername')
    date = models.DateField(verbose_name='Datum')
    year = models.PositiveIntegerField(validators=[MinValueValidator(1),])
    month = models.PositiveIntegerField(validators=[MaxValueValidator(12),MinValueValidator(1),])
    shift_name_1 = models.ForeignKey(Shift, verbose_name='1 Schichtname', related_name='shift_name1',on_delete=models.SET_NULL,null= True)
    shisetsu_name_1 = models.ForeignKey(Shisetsu, verbose_name='1 Einrichtung', related_name='shisetsu_name1',on_delete=models.SET_NULL,blank=True, null=True)
    shift_name_2 = models.ForeignKey(Shift, verbose_name='2 Schichtname', related_name='shift_name2',on_delete=models.SET_NULL,blank=True, null=True)
    shisetsu_name_2 = models.ForeignKey(Shisetsu, verbose_name='2 Einrichtungen', related_name='shisetsu_name2',on_delete=models.SET_NULL,blank=True, null=True)
    shift_name_3 = models.ForeignKey(Shift, verbose_name='3 Schichtname', related_name='shift_name3',on_delete=models.SET_NULL,blank=True, null=True)
    shisetsu_name_3 = models.ForeignKey(Shisetsu, verbose_name='3 Einrichtungen', related_name='shisetsu_name3',on_delete=models.SET_NULL,blank=True, null=True)
    shift_name_4 = models.ForeignKey(Shift, verbose_name='4 Schichtname', related_name='shift_name4',on_delete=models.SET_NULL,blank=True, null=True)
    shisetsu_name_4 = models.ForeignKey(Shisetsu, verbose_name='4 Einrichtungen', related_name='shisetsu_name4',on_delete=models.SET_NULL,blank=True, null=True)
    day_total_worktime = models.IntegerField(verbose_name='Tägliche Arbeitszeit', default=0)) ###hinzufügen

Nachdem wir die Felder hinzugefügt haben, werden wir migrieren

terminal


python3 manage.py makemigrations
python3 manage.py migrate

Dies vervollständigt das Feld! Wir werden es so ändern, dass die Zeit von hier angezeigt wird. Ich möchte ohne Probleme gehen, aber ich habe das Gefühl, dass etwas passiert (lacht)

Zunächst forderte ich mich heraus, jeden Tag die Uhrzeit einzustellen. Ich verstehe HTML kaum, also kann ich es 2 bis 3 Stunden lang ringen und anzeigen.

Der Code ist hier.

schedule/month.html


{% extends 'schedule/base.html' %}
{% block header %}
{% endblock header %}

{% block content %}
<table class="table table-striped table-bordered">
<thead>
    <tr align="center" class="info">    <!--Datum-->
        <th rowspan="2"></th>
        {% for item in calender_object %}
                <th class="day_{{ item.date }}">{{ item.date | date:"d" }}</th>
        {% endfor %}
    <tr align="center" class="info">   <!--Tag-->
        {% for item in youbi_object %}
            <th class="day_{{ item.date }}">{{ item }}</th>
        {% endfor %}
    </tr>
</thead>
<tbody>
{% for staff in user_list %}
    <tr align="center">
    <th rowspan="2" class="staff_name" staff_id="{{ staff.staff_id }}" width="200" >{{ staff.last_name }} {{ staff.first_name }}</th>  <!--staff_ID-Element, das in js verwendet wird-->
            {% for item in object_list %} 
                {% if item.user|stringformat:"s" == staff.username|stringformat:"s" %}<!--Wenn der Benutzername der gleiche ist-->
                    <td class="day" id="s{{ staff.id }}d{{ item.date }}"> 
                        {% if item.shift_name_1 != None %}
                            {% if item.shift_name_1|stringformat:"s" == "Ja" or item.shift_name_1|stringformat:"s" == "Geschlossen" %}
                                {{ item.shift_name_1 }}
                            {% else %}
                                {% for shisetsu in shisetsu_object %}
                                    {% if item.shisetsu_name_1|stringformat:"s" == shisetsu.name|stringformat:"s" %}                          
                                        <span style="background-color:{{ shisetsu.color }}">{{ item.shift_name_1 }}</span>
                                    {% endif %}
                                {% endfor %} 
                            {% endif %}    
                        {% endif %}
                {% if item.shift_name_2 != None %}
                    {% if item.shift_name_2|stringformat:"s" == "Ja" or item.shift_name_2|stringformat:"s" == "Geschlossen" %}
                        {{ item.shift_name_2 }}
                    {% else %}
                        {% for shisetsu in shisetsu_object %}
                            {% if item.shisetsu_name_2|stringformat:"s" == shisetsu.name|stringformat:"s" %}                          
                                    <span style="background-color:{{ shisetsu.color }}">{{ item.shift_name_2 }}</span>
                            {% endif %}
                        {% endfor %} 
                    {% endif %}    
                {% endif %}
                {% if item.shift_name_3 != None %}
                    {% if item.shift_name_3|stringformat:"s" == "Ja" or item.shift_name_3|stringformat:"s" == "Geschlossen" %}
                        {{ item.shift_name_3 }}
                    {% else %}
                        {% for shisetsu in shisetsu_object %}
                            {% if item.shisetsu_name_3|stringformat:"s" == shisetsu.name|stringformat:"s" %}                          
                                <span style="background-color:{{ shisetsu.color }}">{{ item.shift_name_3 }}</span>
                            {% endif %}
                        {% endfor %} 
                    {% endif %}    
                {% endif %}
                {% if item.shift_name_4 != None %}
                    {% if item.shift_name_4|stringformat:"s" == "Ja" or item.shift_name_4|stringformat:"s" == "Geschlossen" %}
                        {{ item.shift_name_4 }}
                    {% else %}
                        {% for shisetsu in shisetsu_object %}
                            {% if item.shisetsu_name_4|stringformat:"s" == shisetsu.name|stringformat:"s" %}                          
                                <span style="background-color:{{ shisetsu.color }}">{{ item.shift_name_4 }}</span>
                            {% endif %}
                        {% endfor %} 
                    {% endif %}    
                {% endif %}                   
            {% endif %}            
        {% endfor %}
        </td>

        <tr align="center">
            {% for item in object_list %} 
                {% if item.user|stringformat:"s" == staff.username|stringformat:"s" %}<!--Wenn der Benutzername der gleiche ist-->
                    <td class="day" id="s{{ staff.id }}d{{ item.date }}">
                    {{ item.day_total_worktime }} 
                    </td>
            {% endif %}            
        {% endfor %}
    </tr>
{% endfor %}
</tbody>
</table>
{% endblock content %}

Von hier aus werde ich den gesamten Tag eingeben. Als ich es nachgeschlagen habe, wurde gesagt, dass Django eine Funktion hat, um die Summe zu aggregieren. Ich habe die Anmerkungsfunktion überprüft und zu Ansichten hinzugefügt

schedule/views.py


#Füge das hinzu
from django.db.models import Sum
from django.contrib.auth.models import User

#Geben Sie die Gesamtzeit des Monats für jeden Benutzer in den Wörterbuchtyp ein
month_total = Schedule.objects.select_related('User').filter(year = year, month = month).values("user").order_by("user").annotate(month_total_worktime = Sum("day_total_worktime"))

    context = {

        'month_total': month_total,
    }
    return render(request,'schedule/month.html', {
    'month_total' : month_total,
    }, )

Übergeben Sie es an die HTML-Vorlage und ändern Sie das HTML, um es in HTML anzuzeigen

schedule/month.py



{% extends 'schedule/base.html' %}
{% block header %}
{% endblock header %}

{% block content %}
<table class="table table-striped table-bordered">
<thead>
    <tr align="center" class="info">    <!--Datum-->
        <th rowspan="2"></th>
        {% for item in calender_object %}
                <th class="day_{{ item.date }}">{{ item.date | date:"d" }}</th>
        {% endfor %}
    <tr align="center" class="info">   <!--Tag-->
        {% for item in youbi_object %}
            <th class="day_{{ item.date }}">{{ item }}</th>
        {% endfor %}
    </tr>
</thead>
<tbody>
{% for staff in user_list %}
    <tr align="center">
    <th rowspan="1" class="staff_name" staff_id="{{ staff.staff_id }}" width="200" >{{ staff.last_name }} {{ staff.first_name }}</th>  <!--staff_ID-Element, das in js verwendet wird-->
            {% for item in object_list %} 
                {% if item.user|stringformat:"s" == staff.username|stringformat:"s" %}<!--Wenn der Benutzername der gleiche ist-->
                    <td class="day" id="s{{ staff.id }}d{{ item.date }}"> 
                        {% if item.shift_name_1 != None %}
                            {% if item.shift_name_1|stringformat:"s" == "Ja" or item.shift_name_1|stringformat:"s" == "Geschlossen" %}
                                {{ item.shift_name_1 }}
                            {% else %}
                                {% for shisetsu in shisetsu_object %}
                                    {% if item.shisetsu_name_1|stringformat:"s" == shisetsu.name|stringformat:"s" %}                          
                                        <span style="background-color:{{ shisetsu.color }}">{{ item.shift_name_1 }}</span>
                                    {% endif %}
                                {% endfor %} 
                            {% endif %}    
                        {% endif %}
                {% if item.shift_name_2 != None %}
                    {% if item.shift_name_2|stringformat:"s" == "Ja" or item.shift_name_2|stringformat:"s" == "Geschlossen" %}
                        {{ item.shift_name_2 }}
                    {% else %}
                        {% for shisetsu in shisetsu_object %}
                            {% if item.shisetsu_name_2|stringformat:"s" == shisetsu.name|stringformat:"s" %}                          
                                    <span style="background-color:{{ shisetsu.color }}">{{ item.shift_name_2 }}</span>
                            {% endif %}
                        {% endfor %} 
                    {% endif %}    
                {% endif %}
                {% if item.shift_name_3 != None %}
                    {% if item.shift_name_3|stringformat:"s" == "Ja" or item.shift_name_3|stringformat:"s" == "Geschlossen" %}
                        {{ item.shift_name_3 }}
                    {% else %}
                        {% for shisetsu in shisetsu_object %}
                            {% if item.shisetsu_name_3|stringformat:"s" == shisetsu.name|stringformat:"s" %}                          
                                <span style="background-color:{{ shisetsu.color }}">{{ item.shift_name_3 }}</span>
                            {% endif %}
                        {% endfor %} 
                    {% endif %}    
                {% endif %}
                {% if item.shift_name_4 != None %}
                    {% if item.shift_name_4|stringformat:"s" == "Ja" or item.shift_name_4|stringformat:"s" == "Geschlossen" %}
                        {{ item.shift_name_4 }}
                    {% else %}
                        {% for shisetsu in shisetsu_object %}
                            {% if item.shisetsu_name_4|stringformat:"s" == shisetsu.name|stringformat:"s" %}                          
                                <span style="background-color:{{ shisetsu.color }}">{{ item.shift_name_4 }}</span>
                            {% endif %}
                        {% endfor %} 
                    {% endif %}    
                {% endif %}                   
            {% endif %}            
        {% endfor %}
        </td>

        <tr align="center">
            {% for month in month_total %} 
                {% if month.user ==  staff.id %}<!--Wenn der Benutzername der gleiche ist-->
                    <td><b>{{ month.month_total_worktime }}</b></td>
                {% endif %}
            {% endfor %}
            {% for item in object_list %} 
                {% if item.user|stringformat:"s" == staff.username|stringformat:"s" %}<!--Wenn der Benutzername der gleiche ist-->
                    <td class="day" id="s{{ staff.id }}d{{ item.date }}">
                    {{ item.day_total_worktime }} 
                    </td>
            {% endif %}            
        {% endfor %}
    </tr>
{% endfor %}
</tbody>
</table>
{% endblock content %}

HTML wurde nach 1-2 Stunden Kampf gemacht!

Klicken Sie hier für Ergebnisse

image.png

Nein, es fühlt sich gut an! Ich halte es für notwendig, die Linie für jeden Mitarbeiter in eine dicke Linie zu ändern und Feineinstellungen vorzunehmen, aber es ist großartig, dass das, woran ich dachte, eine Form wird!

Recommended Posts

Die Django-Schichttabelle erfordert die gesamte tägliche Arbeitszeit. Wenn Sie Überstunden leisten, wird diese Zahl überschrieben.
Django Python Verschiebungstabelle