diff --git a/users/views.py b/users/views.py index dbbf270..aa4cf30 100644 --- a/users/views.py +++ b/users/views.py @@ -963,6 +963,7 @@ def cronactions(request, code): json_data = json.dumps(lexdata) r = requests.get("https://api.lexoffice.io/v1/invoices/0f9b6a1d-1912-4a10-9926-7909e5580202", data=json_data, headers=headers) print(r) + print(r.text) ''' @@ -988,90 +989,89 @@ def absencecheck(user, daytocheck): # CRONJOBS UM 00:01! def cronactionsdaily(request, code): - data = {} - if(code == settings.CRONAPIKEY): - allusers = User.objects.all() - ''' - Pro User gibt es das Feld loose_holiday in der UserTime-Info. Ist dieser Tag vorbei, muss die Differenz der days_inuse des VORJHARES in den Rest das AKTUELLEN JAHRES gespeichert werden! - ''' - today = date.today() - for user in allusers: - # REST URLAUB BERECHNUNG - usertimedata = UserTime.objects.get(user=user) - day_tocheck = usertimedata.loose_holidedate.split(".")[0] - month_tocheck = usertimedata.loose_holidedate.split(".")[1] - month = today.month - if month < 10: - month = "0" + str(month) - day = today.day - if day < 10: - day = "0" + str(day) + data = {} + if(code == settings.CRONAPIKEY): + allusers = User.objects.all() + ''' + Pro User gibt es das Feld loose_holiday in der UserTime-Info. Ist dieser Tag vorbei, muss die Differenz der days_inuse des VORJHARES in den Rest das AKTUELLEN JAHRES gespeichert werden! +''' + today = date.today() + for user in allusers: + # REST URLAUB BERECHNUNG + try: + usertimedata = UserTime.objects.get(user=user) + day_tocheck = usertimedata.loose_holidedate.split(".")[0] + month_tocheck = usertimedata.loose_holidedate.split(".")[1] + month = today.month + if month < 10: + month = "0" + str(month) + day = today.day + if day < 10: + day = "0" + str(day) + # Restetag erreicht, Reste ins nächste Jahr übertragen + if(str(day_tocheck) == str(day) and str(month_tocheck) == str(month)): + sourceyear = today.year + this_year = list(UserYearAbsenceInfo.objects.filter(year=sourceyear, user=user))[0] + next_year = list(UserYearAbsenceInfo.objects.filter(year=sourceyear+1, user=user))[0] + next_year.restdays = this_year.days - this_year.days_inuse + next_year.save() - # Restetag erreicht, Reste ins nächste Jahr übertragen - if(str(day_tocheck) == str(day) and str(month_tocheck) == str(month)): - sourceyear = today.year - this_year = list(UserYearAbsenceInfo.objects.filter(year=sourceyear, user=user))[0] - next_year = list(UserYearAbsenceInfo.objects.filter(year=sourceyear+1, user=user))[0] - next_year.restdays = this_year.days - this_year.days_inuse - next_year.save() + if(user.usertime.usetime): + workdays = Workday.objects.filter(user=user, end=None) + for wd in workdays: + wd.end = datetime(wd.start.year, wd.start.month, wd.start.day, 23, 59) + wd.save() - # ARBEITSTAGE BEENDEN - # Benutzer hat Zeiterfassung aktiv - if(user.usertime.usetime): - workdays = Workday.objects.filter(user=user, end=None) - for wd in workdays: - wd.end = datetime(wd.start.year, wd.start.month, wd.start.day, 23, 59) - wd.save() + yesterday = date.today() - timedelta(days=1) + weekday = yesterday.weekday() + workdays_yesterday = len(Workday.objects.filter(user=user, start__day=yesterday.day, start__month=yesterday.month, start__year=yesterday.year)) - yesterday = date.today() - timedelta(days=1) - weekday = yesterday.weekday() - workdays_yesterday = len(Workday.objects.filter(user=user, start__day=yesterday.day, start__month=yesterday.month, start__year=yesterday.year)) - # Mitarbeiter hat für den gestrigen Tag keine Zeiten erfasst, daher automatisch auf null wenn KEINE Abwesenheit eingetragen wurde + targettworktime = 0.0 + # Mitarbeiter hat für den gestrigen Tag keine Zeiten erfasst, daher automatisch auf null wenn KEINE Abwesenheit eingetragen wurde + if(weekday == 0): + targettworktime = user.usertime.wd_mo + if(weekday == 1): + targettworktime = user.usertime.wd_tu + if(weekday == 2): + targettworktime = user.usertime.wd_we + if(weekday == 3): + targettworktime = user.usertime.wd_th + if(weekday == 4): + targettworktime = user.usertime.wd_fr + if(weekday == 5): + targettworktime = user.usertime.wd_sa + if(weekday == 6): + targettworktime = user.usertime.wd_so - targettworktime = 0.0 - if(weekday == 0): - targettworktime = user.usertime.wd_mo - if(weekday == 1): - targettworktime = user.usertime.wd_tu - if(weekday == 2): - targettworktime = user.usertime.wd_we - if(weekday == 3): - targettworktime = user.usertime.wd_th - if(weekday == 4): - targettworktime = user.usertime.wd_fr - if(weekday == 5): - targettworktime = user.usertime.wd_sa - if(weekday == 6): - targettworktime = user.usertime.wd_so - - # Es wird nur ein Arbeitstag erstellt, wenn KEINE Abwesenheiten vorliegen und der Nutzer an diesem Tag arbeiten muss - if(workdays_yesterday == 0 and absencecheck(user, yesterday) == False and targettworktime > 0.0): - - workdaytemp = Workday(user=user, agency=user.profile.agency, start=datetime(yesterday.year, yesterday.month, yesterday.day, 8, 0), end=datetime(yesterday.year, yesterday.month, yesterday.day, 8, 0), target=targettworktime) - workdaytemp.save() + # Es wird nur ein Arbeitstag erstellt, wenn KEINE Abwesenheiten vorliegen und der Nutzer an diesem Tag arbeiten muss + if(workdays_yesterday == 0 and absencecheck(user, yesterday) == False and targettworktime > 0.0): + workdaytemp = Workday(user=user, agency=user.profile.agency, start=datetime(yesterday.year, yesterday.month, yesterday.day, 8, 0), end=datetime(yesterday.year, yesterday.month, yesterday.day, 8, 0), target=targettworktime) + workdaytemp.save() - # Erinnerungsmails/Push bei Vertretung verschicken - one_week_later = date.today() + timedelta(days=7) - repre_absence = Absence.objects.filter(representator=user, start=one_week_later, confirm_status=0) + # Erinnerungsmails/Push bei Vertretung verschicken + one_week_later = date.today() + timedelta(days=7) + repre_absence = Absence.objects.filter(representator=user, start=one_week_later, confirm_status=0) - for r in repre_absence: - if(r.representator.usernotifications.absence_user_is_rep_reminder_mail): - sendMailNoti(" in einer Woche startet Ihre Vertretung für " + r.user.first_name + " " + r.user.last_name + "!", user) + for r in repre_absence: + if(r.representator.usernotifications.absence_user_is_rep_reminder_mail): + sendMailNoti(" in einer Woche startet Ihre Vertretung für " + r.user.first_name + " " + r.user.last_name + "!", user) - if(r.representator.usernotifications.absence_user_is_rep_reminder_push): - newnotification = UserNotification(touser=user, notificationtext="Erinnerung für Abwesenheitsvertretung!", notificationtype="", elementid=r.pk) - newnotification.save() + if(r.representator.usernotifications.absence_user_is_rep_reminder_push): + newnotification = UserNotification(touser=user, notificationtext="Erinnerung für Abwesenheitsvertretung!", notificationtype="", elementid=r.pk) + newnotification.save() - channel_layer = channels.layers.get_channel_layer() - async_to_sync(channel_layer.group_send)("user_" + str(user.pk), {'type' : 'pushhandler', 'pushtext' : "pushnotification__Abwesenheit | In einer Woche startet Ihre Vertretung für " + r.user.first_name + " " + r.user.last_name + "!"}) - data.update({"status" : "ok"}) + channel_layer = channels.layers.get_channel_layer() + async_to_sync(channel_layer.group_send)("user_" + str(user.pk), {'type' : 'pushhandler', 'pushtext' : "pushnotification__Abwesenheit | In einer Woche startet Ihre Vertretung für " + r.user.first_name + " " + r.user.last_name + "!"}) + data.update({"status" : "ok"}) + except: + pass - else: - print("API CODE FAILED") - data.update({"status" : "failed"}) + else: + print("API CODE FAILED") + data.update({"status" : "failed"}) - return JsonResponse(data) + return JsonResponse(data) def sendMailNoti(notificationtext, user_touched, linktarget=""):