def test_0030_move_out(self): test_name = u"Hans" test_login = u"hans66" test_email = u"*****@*****.**" test_dormitory = dormitory.Dormitory.q.first() test_mac = "12:11:11:11:11:11" new_user = UserHelper.move_in( test_name, test_login, test_email, test_dormitory, level=1, room_number="1", mac=test_mac, processor=self.processing_user ) out_time = datetime.now() UserHelper.move_out(user=new_user, date=out_time, comment="", processor=self.processing_user) # check end_date of moved out user for membership in new_user.memberships: self.assertIsNotNone(membership.end_date) self.assertLessEqual(membership.end_date, out_time) # check if users finance account still exists finance_account = new_user.finance_account self.assertIsNotNone(finance_account)
def test_0030_move_out(self): test_name = u"Hans" test_login = u"hans66" test_email = u"*****@*****.**" test_dormitory = dormitory.Dormitory.q.first() test_mac = "12:11:11:11:11:11" new_user = UserHelper.move_in(test_name, test_login, test_email, test_dormitory, level=1, room_number="1", mac=test_mac, processor=self.processing_user) out_time = datetime.now() UserHelper.move_out(user=new_user, date=out_time, comment="", processor=self.processing_user) # check end_date of moved out user for membership in new_user.memberships: self.assertIsNotNone(membership.end_date) self.assertLessEqual(membership.end_date, out_time) # check if users finance account still exists finance_account = new_user.finance_account self.assertIsNotNone(finance_account)
def post(self, user_id): """ Terminate the membership on the given date :param user_id: The ID of the user :return: """ parser = reqparse.RequestParser() parser.add_argument('end_date', dest='end_date', required=True, type=lambda x: datetime.strptime(x, '%Y-%m-%d').date()) parser.add_argument('comment', dest='comment', required=False) args = parser.parse_args() user = get_user_or_404(user_id) if membership_ending_task(user) is not None: abort(400, message="The termination of the membership has already" " been scheduled.") if not user.has_property('member'): abort(400, message="User is not a member.") move_out(user=user, comment=args.comment if args.comment is not None else "Move-out over API", processor=user, when=utc.with_min_time(args.end_date), end_membership=True) session.session.commit() return "Membership termination scheduled."
def test_room_history_move_out(self): move_out(self.user, comment="test", processor=self.processor, when=session.utcnow()) session.session.commit() rhe = self.user.room_history_entries[0] self.assertIsNotNone(rhe.begins_at) self.assertIsNotNone(rhe.ends_at)
def test_room_history_move_out(self): move_out(self.user, comment="test", processor=self.processor, when=session.utcnow()) session.session.commit() rhe = self.user.room_history_entries[0] assert rhe.active_during.begin is not None assert rhe.active_during.end is not None
def test_move_out_gets_scheduled(self, end_membership=None): for end_membership in (True, False): with self.subTest(end_membership=end_membership): old_room = self.user.room UserHelper.move_out(self.user, comment="", processor=self.processor, when=session.utcnow() + timedelta(days=1), end_membership=end_membership) assert self.user.room == old_room tasks = self.session.query(Task).all() assert len(tasks) == 1 [task] = tasks assert task.type == TaskType.USER_MOVE_OUT assert task.parameters == UserMoveOutParams(comment="", end_membership=end_membership) session.session.delete(task)
def _execute(self, task: UserTask, parameters: UserMoveOutParams): from pycroft.lib import user as lib_user if task.user.room is None: self.errors.append( "Tried to move out user, but user was not living in a dormitory" ) return lib_user.move_out(user=task.user, comment=parameters.comment, processor=task.creator, when=session.utcnow(), end_membership=parameters.end_membership) self.new_status = TaskStatus.EXECUTED
def _execute(self, task, parameters): from pycroft.lib import user as lib_user if task.user.room is not None: lib_user.move_out(user=task.user, comment=parameters['comment'], processor=task.creator, when=session.utcnow(), end_membership=parameters['end_membership']) self.new_status = TaskStatus.EXECUTED else: self.errors.append( "Tried to move out user, but user was not living in a dormitory" )
def take_actions_for_payment_in_default_users(users_pid_membership, users_membership_terminated, processor): ts_now = session.utcnow() for user in users_pid_membership: if not user.member_of(config.payment_in_default_group): make_member_of(user, config.payment_in_default_group, processor, closed(ts_now, None)) from pycroft.lib.user import move_out for user in users_membership_terminated: if user.member_of(config.member_group): move_out(user, "Zahlungsrückstand", processor, ts_now - timedelta(seconds=1), True) log_user_event("Mitgliedschaftsende wegen Zahlungsrückstand.", processor, user)
def move_out(self, user, comment=None): UserHelper.move_out(user, comment=comment or "", processor=self.processor, when=session.utcnow()) session.session.refresh(user)
def test_0030_move_out(self): test_name = u"Hans" test_login = u"hans66" test_email = u"*****@*****.**" test_building = facilities.Building.q.first() test_mac = "12:11:11:11:11:11" traffic_group = user.TrafficGroup.q.first() test_birthdate = "1990-01-01" new_user, _ = UserHelper.create_user(test_name, test_login, test_email, test_birthdate, processor=self.processing_user, group=config.member_group) UserHelper.move_in(new_user, test_building, level=1, room_number="1", mac=test_mac, processor=self.processing_user, traffic_group_id=traffic_group.id) session.session.commit() out_time = session.utcnow() UserHelper.move_out(user=new_user, comment="", processor=self.processing_user, when=out_time) session.session.refresh(new_user) # check ends_at of moved out user for membership in new_user.memberships: self.assertIsNotNone(membership.ends_at) self.assertLessEqual(membership.ends_at, out_time) self.assertFalse(new_user.hosts) self.assertIsNone(new_user.room) # check if users finance account still exists self.assertIsNotNone(new_user.account) UserHelper.move_in( user=new_user, building=test_building, level=1, room_number="1", mac=test_mac, birthdate=test_birthdate, processor=self.processing_user, traffic_group_id=traffic_group.id, ) session.session.refresh(new_user) self.assertEqual(new_user.room.building, test_building) self.assertEqual(new_user.room.level, 1) self.assertEqual(new_user.room.number, "1") self.assertEqual(len(new_user.hosts), 1) user_host = new_user.hosts[0] self.assertEqual(len(user_host.interfaces), 1) self.assertEqual(user_host.interfaces[0].mac, test_mac) self.assertEqual(len(user_host.ips), 1) self.assertTrue(new_user.member_of(config.member_group)) self.assertTrue(new_user.member_of(config.network_access_group)) # `member_of` only concerns `PropertyGroup`s! self.assertIn(traffic_group, new_user.active_traffic_groups())
def test_move_out(self): test_name = u"Hans" test_login = u"hans66" test_email = u"*****@*****.**" test_building = self.room.building test_mac = "12:11:11:11:11:11" test_birthdate = "1990-01-01" address = self.room.address new_user, _ = UserHelper.create_user( test_name, test_login, test_email, test_birthdate, processor=self.processing_user, groups=[self.config.member_group], address=address ) UserHelper.move_in( new_user, building_id=test_building.id, level=1, room_number="1", mac=test_mac, processor=self.processing_user, ) session.session.commit() out_time = session.utcnow() UserHelper.move_out(user=new_user, comment="", processor=self.processing_user, when=out_time) session.session.refresh(new_user) # check ends_at of moved out user for membership in new_user.memberships: self.assertIsNotNone(membership.ends_at) self.assertLessEqual(membership.ends_at, out_time) self.assertFalse(new_user.hosts) self.assertIsNone(new_user.room) # move_out keeps user's address self.assertEqual(new_user.address, address) # check if users finance account still exists self.assertIsNotNone(new_user.account) UserHelper.move_in( user=new_user, building_id=test_building.id, level=1, room_number="1", mac=test_mac, birthdate=test_birthdate, processor=self.processing_user, ) session.session.refresh(new_user) self.assertEqual(new_user.room.building, test_building) self.assertEqual(new_user.room.level, 1) self.assertEqual(new_user.room.number, "1") self.assertEqual(new_user.address, new_user.room.address) self.assertEqual(len(new_user.hosts), 1) user_host = new_user.hosts[0] self.assertEqual(len(user_host.interfaces), 1) self.assertEqual(user_host.interfaces[0].mac, test_mac) self.assertEqual(len(user_host.ips), 1) self.assertTrue(new_user.member_of(config.member_group)) self.assertTrue(new_user.member_of(config.network_access_group))
def test_0030_move_out(self): test_name = u"Hans" test_login = u"hans66" test_email = u"*****@*****.**" test_building = facilities.Building.q.first() test_mac = "12:11:11:11:11:11" traffic_group = user.TrafficGroup.q.first() test_birthdate = "1990-01-01" new_user, _ = UserHelper.create_user( test_name, test_login, test_email, test_birthdate, processor=self.processing_user, group = config.member_group ) UserHelper.move_in( new_user, test_building, level=1, room_number="1", mac=test_mac, processor=self.processing_user, traffic_group_id=traffic_group.id ) session.session.commit() out_time = session.utcnow() UserHelper.move_out(user=new_user, comment="", processor=self.processing_user, when=out_time) session.session.refresh(new_user) # check ends_at of moved out user for membership in new_user.memberships: self.assertIsNotNone(membership.ends_at) self.assertLessEqual(membership.ends_at, out_time) self.assertFalse(new_user.hosts) self.assertIsNone(new_user.room) # check if users finance account still exists self.assertIsNotNone(new_user.account) UserHelper.move_in( user=new_user, building=test_building, level=1, room_number="1", mac=test_mac, birthdate=test_birthdate, processor=self.processing_user, traffic_group_id=traffic_group.id, ) session.session.refresh(new_user) self.assertEqual(new_user.room.building, test_building) self.assertEqual(new_user.room.level, 1) self.assertEqual(new_user.room.number, "1") self.assertEqual(len(new_user.hosts), 1) user_host = new_user.hosts[0] self.assertEqual(len(user_host.interfaces), 1) self.assertEqual(user_host.interfaces[0].mac, test_mac) self.assertEqual(len(user_host.ips), 1) self.assertTrue(new_user.member_of(config.member_group)) self.assertTrue(new_user.member_of(config.network_access_group)) # `member_of` only concerns `PropertyGroup`s! self.assertIn(traffic_group, new_user.active_traffic_groups())
def test_move_out(self): test_name = "Hans" test_login = "******" test_email = "*****@*****.**" test_building = self.room.building test_mac = "12:11:11:11:11:11" test_birthdate = "1990-01-01" address = self.room.address new_user, _ = UserHelper.create_user( test_name, test_login, test_email, test_birthdate, processor=self.processing_user, groups=[self.config.member_group], address=address ) UserHelper.move_in( new_user, building_id=test_building.id, level=1, room_number="1", mac=test_mac, processor=self.processing_user, ) self.session.commit() out_time = session.utcnow() UserHelper.move_out(user=new_user, comment="", processor=self.processing_user, when=out_time) self.session.refresh(new_user) # check ends_at of moved out user for membership in new_user.memberships: assert (int := membership.active_during) is not None assert (end := int.end) is not None assert end <= out_time assert not new_user.hosts assert new_user.room is None # move_out keeps user's address assert new_user.address == address # check if users finance account still exists assert new_user.account is not None UserHelper.move_in( user=new_user, building_id=test_building.id, level=1, room_number="1", mac=test_mac, birthdate=test_birthdate, processor=self.processing_user, ) self.session.refresh(new_user) assert new_user.room.building == test_building assert new_user.room.level == 1 assert new_user.room.number == "1" assert new_user.address == new_user.room.address assert len(new_user.hosts) == 1 user_host = new_user.hosts[0] assert len(user_host.interfaces) == 1 assert user_host.interfaces[0].mac == test_mac assert len(user_host.ips) == 1 assert new_user.member_of(config.member_group) assert new_user.member_of(config.network_access_group)