IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Gestion des unités gratuite - Quels sont les cas de figure ?


Sujet :

WinDev

  1. #1
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut Gestion des unités gratuite - Quels sont les cas de figure ?
    Bonjour,
    dans une application qui gère entre autres, la vente (BL) et le stock, un de mes clients me demande d’intégrer la gestion des gratuités dans une vente au comptoir
    dans le cas de ce client, la règle est assez simple :
    "Si dans un BL en cours, la quantité du produit X dépasse 10 alors offrir au client 1 boite du produit X"
    Mon souci n'étant pas dans la mise en place de cette règle, mais dans l'identification de "toutes" les règles relatives aux unités gratuite, et cela afin que je puisse mettre en place une analyse assez solide et générale
    et ainsi donner aux utilisateurs, une interface de paramétrage assez riche pour les UG.

    Avez-vous déjà été confronté à ce problème ? un petit retour me sera de grande utilité

    Merci à vous

    Réda
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    J'ai été confronté à ce genre de demande, pour déterminer le transporteur à affecter à une commande en fonction de l'adresse de livraison (pays et/ou code postal), des dimensions des produits commandés…
    J'ai utilisé le design pattern Spécification, et j'ai codé une classe pour "parser" la chaine qui représente les conditions.

    Ton cas sera par contre un peu plus complexe que le mien, car tu peux avoir 2 "opérations" qui se recoupent et qui sont mutuellement exclusives, par exemple:
    • 2 achetés, le 3ème à 50%
    • 3 achetés, le 4ème gratuit

    Il faudrait donc déterminer quelles sont les "opérations" à appliquer, selon quelles règles.

    Tatayo.

  3. #3
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut
    Merci tatayo de ta réponse.
    En effet je pense devoir formaliser la condition avec éventuellement des conjonctions et disjonctions
    Et aussi formaliser l'action à entreprendre lorsque la condition est vraie...
    L'utilisateur devra donc écrire lui même ses conditions et ses actions respectives. Ces dernière seront ainsi stocker quelque part dans l'analyse
    je vais devoir interpréter dynamiquement ces conditions pendant l'exécution. Le hic c'est que je travaille partiellement sous Android et malheureusement aucune fonction de compilation dynamique n'est disponible (compile, executeCode, exécute, EvalueExpression)
    À moins de réécrire moi un analyseur syntaxique et interprète
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    C'est à peu près ce que j'ai fait: un "analyseur" qui transforme une simple chaine de caractères en un objet qui utilise le Design Pattern Spécification.
    C'est ce dernier qui s'occupe de la partie "interprétation". Il n'y a même pas besoin de compilation dynamique.
    Il suffit de lui passer un objet, et la méthode renvoie un booléen qui indique si l'objet vérifie ou pas la condition.

    La version WinDev de cet analyseur reste simple, la chaine est du type "pays=FR et (poidsmin=2 et poidsmax=5) et pas departement=20". Je ne gère pas les critères du type <>, <, <=…
    J'ai refait en C# une version qui va beaucoup plus loin, je gère maintenant une liste de valeur, les opérateur <, >, dans… mais c'est en C#, ce ne sera pas simple à traduire en WinDev.
    Avec un peu de méthode et en prenant un peu de recul, ce n'est pas très compliqué à faire.

    Dans mon exemple, j'ai mis toutes les classes "de base" dans un composant: l'interpréteur (que j'ai appelé Expression, je ne sais pas si c'est un bon choix…), la classe de base Specification qui contient la logique de base, et les classe AndSpecification, OrSpecification… comme indiqué dans mon lien, et une classe Fabrique (voir le Design Pattern Abstract Factory).

    Le projet qui utilise le composant doit posséder une classe qui hérite de Fabrique, qui sera la fabrique concrète, et une classe par test qui doit hériter de Specification (dans mo exemple TestPoids, TestPays…).
    Lorsque la classe Expression va interpréter la chaine, elle va appeler une méthode de la Fabrique, lui passer en paramètre le nom du test et la valeur (par exemple PAYS et FR). La fabrique doit renvoyer le nom objet.

    Au final on se retrouve avec une classe qui hérite de Specification (laquelle ? Ca dépend de la chaine. Vive le polymorphisme !). Il suffit alors de lui passer un objet, et on a en retour un booléen qui indique si ce dernier vérifie ou pas la condition.
    Dans mon cas j'ai une instance par transporteur avec chacun des critères différent. Je peux donc savoir si la commande peut être livrée par un transporteur donné (en fonction de l'adresse, des cotes des articles…).

    Yapuka

    Tatayo.

  5. #5
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut
    Merci des tes conseils tatayo!
    je pense comprendre le principe de ta démarche...
    Dans mon cas, vu la diversité des formules et des conditions à mettre en place, je pense que cela sera un peu plus complexe.
    Dans un premier temps, je vais essayer de voir si je peux exploiter la compilation dynamique pour traiter les formules et les actions à entreprendre. Sur windev, cela ne pose pas vraiment de problème,
    j'ai déjà eu affaire à un cas similaire pour un logiciel de paie ou je devais générer des rubriques selon des formules saisies par l'utilisateurs.
    par contre sur windev mobile et en particulier pour android, je vais devoir trouver une alternative, j'ai pensé à l'utilisation d'un webservice en déportant le traitement dans une procédure webdev (la compilation dynamique étant dispo pour webdev)
    Cela reste à voir....

    EDIT : je pense aussi aux indirections, disponible sur android....
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/06/2011, 10h24
  2. Réponses: 0
    Dernier message: 27/10/2009, 18h45
  3. Réponses: 5
    Dernier message: 12/01/2007, 11h32
  4. Réponses: 12
    Dernier message: 06/10/2006, 13h35
  5. Réponses: 5
    Dernier message: 04/08/2006, 00h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo