Une commande refusée ne bloque plus la file. Avant, une commande refusée par le serveur était renvoyée toutes les 30 s et bloquait toutes les suivantes, sans aucun message. Elle passe maintenant en échec avec le message d'erreur, et les commandes suivantes partent normalement.
Affichage des échecs. Une commande en échec indique « Upload failed ». En la touchant, on voit le message d'erreur et trois choix : Réessayer, Ouvrir la commande, Annuler. Réessayer ne crée jamais de doublon, car le serveur reconnaît la commande grâce à son UUID.
Fin des envois en double. Une commande déjà transmise n'est plus renvoyée. Un seul envoi peut être en cours à la fois.
Nouvelles tentatives limitées. Après une erreur serveur (HTTP 5xx), une réponse illisible ou une réponse sans la commande, l'app réessaie après 1 min, 10 min, 1 h puis 6 h. La commande passe en échec après 5 tentatives ou 24 h. Seul un refus explicite du serveur la met en échec tout de suite.
Suppression protégée. On ne peut pas supprimer une commande pendant son envoi. Si un envoi précédent a eu un résultat incertain, l'app demande une confirmation avant la suppression, car le magasin a peut-être déjà reçu la commande.
Identifiants enregistrés à la confirmation. La commande garde les identifiants du magasin, du client et de l'adresse au moment où elle est confirmée. Avant, une commande en attente pouvait partir avec l'identifiant 0 si le client ou l'adresse avait été supprimé entre-temps. Si ces identifiants manquent, la commande passe en échec (« customer or address missing ») au lieu d'être envoyée.
Pas de confirmation sans prix. On ne peut plus confirmer une commande qui contient une ligne sans prix. La ligne affiche « Price unavailable » et un message demande de la retirer. Avant, ces lignes pouvaient partir à 0. La fiche produit affiche « - » au lieu de 0.00 quand il n'y a pas de prix.
Connexion
Reconnexion automatique quand le jeton expire. Avant, l'app ne se reconnectait jamais et les commandes prêtes restaient sur l'appareil. Une erreur not_authorized déclenche maintenant une reconnexion, au plus une fois toutes les 5 minutes.
Synchronisation
Magasins retirés. Un magasin que le serveur ne liste plus est désactivé sur l'appareil, mais ses données et ses commandes sont conservées. Il n'apparaît plus dans le choix du magasin ni dans les réglages.
Nouveaux magasins visibles tout de suite. Un magasin ajouté reçoit ses clients dès la même synchronisation. Un magasin désactivé ne provoque plus d'erreur not_authorized suivie d'une reconnexion forcée.
Écran de synchronisation remis à zéro. Il repart de zéro à chaque nouvelle synchronishec » si la synchronisation a réussi après une reconnexion automatique.
Pagination fiabilisée. Toutes les tables paginées relisent la base avant de lire leur curseur et sont protégées contre une pagination qui n'avance plus.
Nettoyage. Les appartenances aux cercles supprimées côté serveur sont maintenant retiprix de cercle associés. Chaque nettoyage supprime ses lignes en une seule écriture.
Produits supprimés masqués. Les produits marqués comme supprimés n'apparaissent plus dans les listes.