<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def no_more_a_problem(self, hosts, services, timeperiods, bi_modulations):
 """Remove this objects as an impact for other schedulingitem. :param hosts: hosts objects, used to get impacts :type hosts: alignak.objects.host.Hosts :param services: services objects, used to get impacts :type services: alignak.objects.service.Services :param timeperiods: Timeperiods objects, used for update_business_impact_value :type timeperiods: alignak.objects.timeperiod.Timeperiods :param bi_modulations: business impact modulation are used when setting myself as problem :type bi_modulations: alignak.object.businessimpactmodulation.Businessimpactmodulations :return: None TODO: SchedulingItem object should not handle other schedulingitem obj. We should call obj.register* on both obj. This is 'Java' style """

        was_pb = self.is_problem
        if self.is_problem:
            self.is_problem = False

            # we warn impacts that we are no more a problem
            for impact_id in self.impacts:
                if impact_id in hosts:
                    impact = hosts[impact_id]
                else:
                    impact = services[impact_id]
                impact.unregister_a_problem(self)

            # we can just drop our impacts list
            self.impacts = []

        # We update our business_impact value, it's not a huge thing :)
        self.update_business_impact_value(hosts, services, timeperiods, bi_modulations)

        # If we were a problem, we say to everyone
        # our new status, with good business_impact value
        if was_pb:
            # And we register a new broks for update status
            self.broks.append(self.get_update_status_brok())