code: def no_more_a_problem(self, hosts, services, timeperiods, bi_modulations):
          
          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())
docs: 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