'Conclude trade - move all offers and clean up
Args:
force (bool, optional): Force cleanup regardless of if the
trade was accepted or not (if not, no goods will change
hands but trading will stop anyway)
Returns:
result (bool): If the finish was successful.'

def finish(self, force=False):

    fin = False
    if (self.trade_started and self.part_a_accepted and self.part_b_accepted):
        for obj in self.part_a_offers:
            obj.location = self.part_b
        for obj in self.part_b_offers:
            obj.location = self.part_a
        fin = True
    if (fin or force):
        self.part_a.cmdset.delete('cmdset_trade')
        self.part_b.cmdset.delete('cmdset_trade')
        self.part_a_offers = None
        self.part_b_offers = None
        self.part_a.scripts.stop('trade_request_timeout')
        del self.part_a.ndb.tradehandler
        if self.part_b.ndb.tradehandler:
            del self.part_b.ndb.tradehandler
        return True
    return False
