test_calendar_holiday.py 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. # -*- coding: utf-8 -*-
  2. # © 2016 Alfredo de la Fuente - AvanzOSC
  3. # © 2016 Oihane Crucelaegui - AvanzOSC
  4. # License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
  5. import openerp.tests.common as common
  6. from openerp import fields, exceptions
  7. class TestCalendarHoliday(common.TransactionCase):
  8. def setUp(self):
  9. super(TestCalendarHoliday, self).setUp()
  10. self.holiday_model = self.env['calendar.holiday']
  11. self.contract_model = self.env['hr.contract']
  12. self.calendar_model = self.env['res.partner.calendar']
  13. self.calendar_day_model = self.env['res.partner.calendar.day']
  14. self.wiz_model = self.env['wiz.calculate.workable.festive']
  15. self.wiz_assign_model = self.env['wiz.assign.calendar.holiday']
  16. self.holidays_model = self.env['hr.holidays']
  17. self.today = fields.Date.from_string(fields.Date.today())
  18. self.partner = self.env['res.partner'].create({
  19. 'name': 'Partner',
  20. })
  21. self.partner2 = self.env['res.partner'].create({
  22. 'name': 'Partner 2',
  23. })
  24. self.user = self.env['res.users'].create({
  25. 'partner_id': self.partner.id,
  26. 'login': 'user',
  27. 'password': 'pass',
  28. })
  29. employee_model = self.env['hr.employee']
  30. employee_vals = {
  31. 'name': 'Test Employee',
  32. 'user_id': self.user.id,
  33. }
  34. employee_vals.update(
  35. employee_model.onchange_user(
  36. user_id=employee_vals['user_id'])['value'])
  37. self.employee = employee_model.create(employee_vals)
  38. calendar_line_vals = {
  39. 'date': self.today.replace(month=1, day=6),
  40. 'absence_type': self.ref('hr_holidays.holiday_status_comp'),
  41. }
  42. calendar_vals = {
  43. 'name': 'Holidays calendar',
  44. 'lines': [(0, 0, calendar_line_vals)],
  45. }
  46. self.calendar_holiday = self.holiday_model.create(calendar_vals)
  47. contract_vals = {
  48. 'name': 'Test Employee Contract',
  49. 'date_start': self.today.replace(month=1, day=2),
  50. 'date_end': self.today.replace(month=12, day=30),
  51. 'employee_id': self.employee.id,
  52. 'wage': 500,
  53. 'working_hours': self.ref('resource.timesheet_group1'),
  54. 'holiday_calendars': [(6, 0, [self.calendar_holiday.id])],
  55. }
  56. self.contract = self.contract_model.create(contract_vals)
  57. date_from = '{}-02-02 08:00:00'.format(self.today.year)
  58. date_to = '{}-02-05 18:00:00'.format(self.today.year)
  59. hr_holidays_vals = {'name': 'Employee holidays',
  60. 'holiday_type': 'employee',
  61. 'holiday_status_id':
  62. self.ref('hr_holidays.holiday_status_comp'),
  63. 'employee_id': self.employee.id,
  64. 'date_from': date_from,
  65. 'date_to': date_to,
  66. 'number_of_days_temp': 4}
  67. self.hr_holidays = self.holidays_model.create(hr_holidays_vals)
  68. def test_calendar_holiday(self):
  69. self.contract.write({})
  70. cond = [('partner', '=', self.contract.partner.id),
  71. ('year', '=', self.today.year)]
  72. calendar = self.calendar_model.search(cond)
  73. self.assertEquals(len(calendar), 0)
  74. wiz = self.wiz_model.with_context(
  75. active_id=self.contract.id).create({'year': 2000})
  76. with self.assertRaises(exceptions.Warning):
  77. wiz.button_calculate_workables_and_festives()
  78. wiz.year = self.today.year+5
  79. with self.assertRaises(exceptions.Warning):
  80. wiz.button_calculate_workables_and_festives()
  81. wiz.year = 0
  82. self.wiz_model.with_context(
  83. active_id=self.contract.id).default_get([])
  84. wiz.year = self.today.year
  85. wiz.button_calculate_workables_and_festives()
  86. self.wiz_model.with_context(
  87. active_id=self.contract.id).default_get([])
  88. self.assertEquals(
  89. wiz.year, fields.Date.from_string(self.contract.date_start).year)
  90. calendar = self.calendar_model.search(cond)
  91. self.assertNotEquals(len(calendar), 0)
  92. with self.assertRaises(exceptions.Warning):
  93. self.partner2._generate_festives_in_calendar(self.today.year,
  94. self.calendar_holiday)
  95. self.hr_holidays.signal_workflow('validate')
  96. date_from = '{}-01-01'.format(self.today.year)
  97. date_to = '{}-12-31'.format(self.today.year)
  98. cond = [('date', '>=', date_from),
  99. ('date', '<=', date_to),
  100. ('absence_type', '=',
  101. self.ref('hr_holidays.holiday_status_comp')),
  102. ('partner', '=', self.employee.address_home_id.id)]
  103. days = self.calendar_day_model.search(cond)
  104. self.assertEquals(
  105. len(days), 5, 'Employee calendar holiday days not found(1)')
  106. wiz.button_calculate_workables_and_festives()
  107. days = self.calendar_day_model.search(cond)
  108. self.assertEquals(
  109. len(days), 5, 'Employee calendar holiday days not found(2)')
  110. self.hr_holidays.signal_workflow('refuse')
  111. days = self.calendar_day_model.search(cond)
  112. self.assertEquals(
  113. len(days), 1, 'Employee with holiday days')
  114. wiz2 = self.wiz_model.with_context(active_id=self.contract.id).create(
  115. {'year': fields.Date.from_string(self.contract.date_end).year})
  116. wiz2.button_calculate_workables_and_festives()
  117. date_from = str(fields.Datetime.from_string(
  118. fields.Datetime.now()).replace(month=1, day=1))
  119. vals = self.holidays_model.onchange_date_from(
  120. False, date_from, self.employee.id)
  121. date_to = str(fields.Datetime.from_string(
  122. fields.Datetime.now()).replace(month=1, day=7))
  123. date_from = str(fields.Datetime.from_string(
  124. fields.Datetime.now()).replace(month=1, day=1))
  125. vals = self.holidays_model.onchange_date_from(
  126. date_to, date_from, self.employee.id)
  127. days = int(vals['value'].get('number_of_days_temp'))
  128. self.assertEqual(days, 6, 'Absent days(1) badly calculated')
  129. vals = self.holidays_model.onchange_date_to(
  130. date_to, date_from, self.employee.id)
  131. days = int(vals['value'].get('number_of_days_temp'))
  132. self.assertEqual(days, 6, 'Absent days(2) badly calculated')
  133. vals = self.holidays_model.onchange_employee(
  134. self.employee.id, date_to, date_from)
  135. days = int(vals['value'].get('number_of_days_temp'))
  136. self.assertEqual(days, 6, 'Absent days(3) badly calculated')
  137. cond = [('calendar', '=', calendar.id),
  138. ('partner', '=', self.partner.id),
  139. ('date', '=', self.today.replace(month=1, day=6))]
  140. self.calendar_day_model.search(cond, limit=1). unlink()
  141. with self.assertRaises(exceptions.Warning):
  142. self.partner._generate_festives_in_calendar(self.today.year,
  143. self.calendar_holiday)
  144. self.employee.address_home_id = False
  145. res = self.hr_holidays._remove_holidays(
  146. 20, False, False, self.employee.id)
  147. self.assertEqual(res, 20, 'Bad days of employee without partner')
  148. def test_calendar_holiday_calendar_Scheduler(self):
  149. self.contract.write({
  150. 'date_start': self.today.replace(
  151. year=self.today.year + 1, month=1, day=2),
  152. 'date_end': self.today.replace(
  153. year=self.today.year + 1, month=12, day=30),
  154. })
  155. self.contract.automatic_process_generate_calendar()
  156. cond = [('partner', '=', self.contract.partner.id)]
  157. calendars = self.calendar_model.search(cond)
  158. self.assertEquals(
  159. len(calendars), 1, 'Calendar no generated for employee')
  160. def test_wiz_assign_calendar_holiday(self):
  161. cond = [('partner', '=', self.contract.partner.id)]
  162. calendars = self.calendar_model.search(cond)
  163. calendars.unlink()
  164. wiz_vals = {
  165. 'calendar_holidays_ids': [(6, 0, self.calendar_holiday.ids)],
  166. 'calendar_year': self.today.year}
  167. wiz = self.wiz_assign_model.create(wiz_vals)
  168. c = self.contract.ids
  169. wiz.with_context(
  170. active_ids=c).button_assign_calendar_holiday_in_contracts()
  171. cond = [('partner', '=', self.contract.partner.id),
  172. ('year', '=', self.today.year)]
  173. calendar = self.calendar_model.search(cond)
  174. self.assertEquals(len(calendar), 1)