Le repo des sources pour le site web des JM2L
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

101 lines
4.2 KiB

  1. from .models import DBSession, JM2L_Year, Sejour
  2. from datetime import timedelta, datetime
  3. import itertools
  4. class Sejour_helpers:
  5. def __init__(self, event):
  6. self.Me = event['request'].user
  7. self.CurrentEventYear = DBSession.query(JM2L_Year).filter(JM2L_Year.state=='Ongoing').first()
  8. self.Sejour = None
  9. if self.Me:
  10. self.Sejour = DBSession.query(Sejour)\
  11. .filter(Sejour.user_id==self.Me.uid)\
  12. .filter(Sejour.for_year==self.CurrentEventYear.year_uid)\
  13. .first()
  14. if self.Sejour and self.Sejour.arrival_time is None:
  15. self.Sejour = None
  16. def StartEvent(self):
  17. # This function return the start of the event
  18. return self.CurrentYear
  19. def PossibleDate(self, typedate="arrival"):
  20. arrival, departure = False, False
  21. TabResult = list()
  22. if typedate == "arrival":
  23. # Let's say people should arrive until 2 day before
  24. arrival = True
  25. myDayRange = xrange(2,-1,-1)
  26. elif typedate == "departure":
  27. # Let's say people should go back home until 2 day after
  28. departure = True
  29. myDayRange = xrange(3)
  30. else:
  31. return TabResult
  32. if self.Sejour:
  33. ArrDate = datetime.strftime(self.Sejour.arrival_time,"%d %B %Y")
  34. DepDate = datetime.strftime(self.Sejour.depart_time,"%d %B %Y")
  35. else:
  36. ArrDate = datetime.strftime( self.CurrentEventYear.start_time,"%d %B %Y" )
  37. DepDate = datetime.strftime( self.CurrentEventYear.end_time,"%d %B %Y" )
  38. for oneday in myDayRange:
  39. if arrival:
  40. TmpDay = self.CurrentEventYear.end_time - timedelta(days=oneday)
  41. elif departure:
  42. TmpDay = self.CurrentEventYear.start_time + timedelta(days=oneday)
  43. DayName = datetime.strftime(TmpDay,"%A")
  44. DayNum = datetime.strftime(TmpDay,"%d/%m/%y")
  45. DayString = datetime.strftime(TmpDay,"%d %B %Y")
  46. if arrival and ArrDate==DayString:
  47. TabResult.append((DayNum, DayName, 'selected="selected"'))
  48. elif departure and DepDate==DayString:
  49. TabResult.append((DayNum, DayName, 'selected="selected"'))
  50. else:
  51. TabResult.append((DayNum, DayName, ""))
  52. return TabResult
  53. def PossibleTime(self, typedate="arrival"):
  54. ArrTime, DepTime = "10:00", "19:00"
  55. TabResult = list()
  56. if self.Sejour:
  57. ArrTime = datetime.strftime(self.Sejour.arrival_time,"%H:%M")
  58. DepTime = datetime.strftime(self.Sejour.depart_time,"%H:%M")
  59. for hour in range(24):
  60. for minutes in range(0,60,10):
  61. StrTime = "%.2d:%.2d" % (hour, minutes)
  62. DispTime = "%dh%.2d" % (hour, minutes)
  63. if typedate == "arrival" and StrTime==ArrTime:
  64. TabResult.append( (StrTime, DispTime, 'selected="selected"') )
  65. elif typedate == "departure" and StrTime==DepTime:
  66. TabResult.append( (StrTime, DispTime, 'selected="selected"') )
  67. else:
  68. TabResult.append( (StrTime, DispTime, "") )
  69. return TabResult
  70. def IsCheck(self, InputControl):
  71. ListControlA = ['Arrival', 'Departure']
  72. ListControlB = ['PMR', 'Cov', 'Bras', 'Other']
  73. if InputControl not in map(':'.join, itertools.product(ListControlA, ListControlB)):
  74. return ""
  75. if self.Sejour:
  76. if InputControl.startswith('Arrival'):
  77. CtrlVal = 2**ListControlB.index(InputControl[8:])
  78. if self.Sejour.arrival_check & CtrlVal == CtrlVal:
  79. return "checked=\"checked\""
  80. else:
  81. return ""
  82. elif InputControl.startswith('Departure'):
  83. CtrlVal = 2**ListControlB.index(InputControl[10:])
  84. if self.Sejour.depart_check & CtrlVal == CtrlVal:
  85. return "checked=\"checked\""
  86. else:
  87. return ""
  88. else:
  89. return ""
  90. else:
  91. return ""