Prends ce que je te dis avec des pincettes, je suis sur mobile et le formattage est weird.
Dans ta fonction generate la variable ID n’est pas utilisé. Si tu ne l’utilise pas, ne la déclare pas 
Ensuite tu redéfini tes valeurs à chaque itérations, mais tu return en fin de loop, donc à la fin de la première itération. -> tu auras un str qui sera composé d’un Type et d’une origine de fruit.
Beaucoup de tes parenthèses sont redondantes, tu pourrais retirer les parenthèses qui ne servent pas à call des fonction. Précise les si tu fais des calculs pour les priorités d’exécution et éviter les ambigüité.
import random
import json
fruit = ['banana', 'apple', 'orange']
origine = ['france', 'sweden', 'USA', 'mexico']
def generate():
for n in range(100):
types_fruit = random.choice(fruit)
origine_names = random.choice(origine)
yield types_fruit+origine_names
with open("sales_detail.json", "w") as sales :
json.dump(generate(), sales)
Test pour voir si dump accepte un generator sinon remplace l’appel de generate par ‘list(generate())’.