diff --git a/status/StatusUpdateReporter.py b/status/StatusUpdateReporter.py index bba3341..e443bef 100644 --- a/status/StatusUpdateReporter.py +++ b/status/StatusUpdateReporter.py @@ -66,10 +66,14 @@ def getBatchName(y): def groupMembersByBatch(members, year): return UserProfile.objects.filter(user__in=members, batch=year) + def getActiveStatusUpdateDays(self, last_send, expected_date, member): + return DailyLog.objects.filter(thread=self.thread, members=member, date__lt=expected_date, + date__gt=last_send).count() + @staticmethod - def getLastSendStr(last_send, expected_date): + def getLastSendStr(diff): message = '' - diff = abs(expected_date - last_send) + diff = abs(diff) diff = diff.days + 1 if diff > 28: message += '1M+' @@ -127,8 +131,9 @@ def generateBatchWiseDNSReport(self, members, year): lastSend = self.getMemberLastSend(member.user) message += str(i) + '. ' + self.getName(member.user) if lastSend: - lastSend = self.getLastSendStr(lastSend.date(), - self.getMemberLastRequiredDate(member.user)) + expected_date = self.getMemberLastRequiredDate(member.user) + diff = self.getActiveStatusUpdateDays(lastSend.date(), expected_date, member.user) + lastSend = self.getLastSendStr(diff) memberHistory = self.getMemberHistory(member.user) message += ' [ ' + lastSend + ', ' + memberHistory + ']' else: @@ -214,7 +219,7 @@ def generateDailyReport(self): sendCount = totalMembers - (didNotSendCount + invalidUpdatesCount) if self.isTelegram: message = 'Daily Status Update Report \n\n 📅 ' + date.strftime( - '%d %B %Y') + ' | 📤 ' + str(sendCount) + '/' + str(totalMembers) + ' Members' + '%d %B %Y') + ' | 📤 ' + str(sendCount) + '/' + str(totalMembers) + ' Members' message += '\n\n' + self.getPercentageSummary(sendCount, totalMembers, self.isTelegram) + '' else: @@ -228,17 +233,19 @@ def generateDailyReport(self): if updates.count() > 0: if self.isTelegram: message += '\n\n⭐ First : ' + first.first_name + ' ' + first.last_name + \ - ' (' + updates[0].timestamp.astimezone(timezone('Asia/Kolkata')).strftime( - '%I:%M %p') + ')' + '\n' + ' (' + updates[0].timestamp.astimezone(timezone('Asia/Kolkata')).strftime( + '%I:%M %p') + ')' + '\n' message += '🐌 Last : ' + last.first_name + ' ' + last.last_name + \ - ' (' + list(reversed(updates))[0].timestamp.astimezone(timezone('Asia/Kolkata')).strftime( - '%I:%M %p') + ')' + '\n' + ' (' + list(reversed(updates))[0].timestamp.astimezone( + timezone('Asia/Kolkata')).strftime( + '%I:%M %p') + ')' + '\n' else: message += '\n\n** :star: First : **' + first.first_name + ' ' + first.last_name + \ - ' (' + updates[0].timestamp.astimezone(timezone('Asia/Kolkata')).strftime( + ' (' + updates[0].timestamp.astimezone(timezone('Asia/Kolkata')).strftime( '%I:%M %p') + ')' + '\n' message += '** :snail: Last : **' + last.first_name + ' ' + last.last_name + \ - ' (' + list(reversed(updates))[0].timestamp.astimezone(timezone('Asia/Kolkata')).strftime( + ' (' + list(reversed(updates))[0].timestamp.astimezone( + timezone('Asia/Kolkata')).strftime( '%I:%M %p') + ')' + '\n' message += self.generateDidNotSendReport(log.didNotSend) if thread.footerMessage: @@ -283,29 +290,24 @@ def kickMembers(self): member = self.checkKickException(member) if member and member not in shouldKick: shouldKick.append(member) - except ObjectDoesNotExist: - raise + pass return shouldKick - - def checkKickException(self, member, bot = None): + + def checkKickException(self, member, bot=None): date = self.date thread = self.thread - userProfile = UserProfile.objects.get(user=member) lastSend = self.getMemberLastSend(member) if lastSend: - lastSend = self.getLastSend(lastSend.date(), - self.getMemberLastRequiredDate(member)) + diff = self.getActiveStatusUpdateDays(lastSend.date(), self.getMemberLastRequiredDate(member), member) + lastSend = self.getLastSend(diff) else: - lastSend = self.getLastSend(self.date, self.getNSBMemberLastRequiredDate(member)) + diff = self.getActiveStatusUpdateDays(self.date, self.getNSBMemberLastRequiredDate(member), member) + lastSend = self.getLastSend(diff) try: - if bot: - status = bot.getChatMember(chat_id=agent[1], user_id=userProfile.telegram_id).status - else: - status = "present" if lastSend > thread.noOfDays: kick = True exceptions = StatusException.objects.filter(isPaused=True) @@ -317,9 +319,9 @@ def checkKickException(self, member, bot = None): break else: exception.isPaused = False - if kick and status != "left": + if kick: return member except: pass - + return None