1 #!/usr/bin/env python 2 3 """ 4 Common scheduling functionality. 5 6 Copyright (C) 2016, 2017 Paul Boddie <paul@boddie.org.uk> 7 8 This program is free software; you can redistribute it and/or modify it under 9 the terms of the GNU General Public License as published by the Free Software 10 Foundation; either version 3 of the License, or (at your option) any later 11 version. 12 13 This program is distributed in the hope that it will be useful, but WITHOUT 14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 15 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 16 details. 17 18 You should have received a copy of the GNU General Public License along with 19 this program. If not, see <http://www.gnu.org/licenses/>. 20 """ 21 22 def standard_responses(handler, response): 23 24 """ 25 Using 'handler' to translate descriptions, return a tuple containing the 26 'response' and a suitable description. 27 """ 28 29 _ = handler.get_translator() 30 31 if response == "ACCEPTED": 32 return response, _("The recipient has scheduled the requested period.") 33 elif response == "COUNTER": 34 return response, _("The recipient has suggested a different period.") 35 elif response == "DELEGATED": 36 return response, _("The recipient has delegated the requested period.") 37 else: 38 return response, _("The recipient is unavailable in the requested period.") 39 40 def get_scheduling_conflicts(handler, freebusy, users, attendee=False): 41 42 """ 43 Use the 'handler' to obtain scheduling conflicts within the given 'freebusy' 44 collection involving the given 'users', with the organiser of each period 45 being tested against the users unless 'attendee' is set to a true value 46 (thus testing the attendee of each period against the users instead). 47 48 Return a dictionary mapping users to the number of conflicts (or concurrent 49 scheduling instances) each user experiences for the current object of the 50 'handler'. 51 """ 52 53 conflicts = {} 54 55 for user in users: 56 conflicts[user] = 0 57 58 overlapping = freebusy.get_overlapping(handler.get_periods(handler.obj, future_only=True)) 59 60 # Where scheduling cannot occur, find the busy potential users. 61 62 if overlapping: 63 for p in overlapping: 64 involved = attendee and p.attendee or p.organiser 65 if conflicts.has_key(involved): 66 conflicts[involved] += 1 67 68 return conflicts 69 70 # vim: tabstop=4 expandtab shiftwidth=4