Faire une recherche

mercredi 28 août 2019

La gestion du processus d'achat et l'entrée des produits en stocks.

Hello!

La semaine dernière je vous montrais comment gérer les dépendances, utiliser les variantes de produits et établir des liens entre modèles.

Pour rappel, cet article fait parti de la formation gratuite Odoo Traning que vous pouvez retrouver sur ce lien. Si vous êtes débutants, commencez par là!

Maintenant que le décors est planté, nous allons entrer dans le vif du sujet: gérer le processus d'achat et faire entrer nos livres dans le stock! Je vous laisse un petit secret: j'ai comme pour impression que ce tuto ne va nécessité aucune écriture de code :)

Commencez par démarrer votre instance Odoo et rassurez-vous d'avoir le module oo_library. Sinon, il est disponible à cette adresse.

Gestion du processus d'achat

Le principe est simple:

  1. Cliquer sur le menu Achats
  2. Ensuite sur le bouton créer situé dans le vue demande de prix




C'est quoi une demande de prix?

Comme mentionné sur la vue, la demande de prix ou devis contient l'histoire de la discussion/négociation que vous avez eue avec le fournisseur. Dès que c'est confirmé, une demande de devis est convertie en un ordre d'achat. La plupart des propositions d'ordres d'achat sont crées automatiquement par Odoo, basé sur les besoins de l'inventaire, notamment lorsque vous avez configuré les règles d'approvisionnement.

Ici, il faut noter que la demande de prix est fournie par le modèle purchase.order. 

Autres choses, n'oubliez pas ce que l'on c'est dit la semaine dernière: Vous faites un module personnalisé de gestion de bibliothèque, votre client ne doit faire aucune autre action. Il doit ouvrir son logiciel, aller sur son module et faire ses manipulations, ce qui veut dire qu'il doit normalement éditer sa demande de prix sur le menu MaLibrairie.

Pour ce faire, nous allons procéder comme la dernière fois c'est-à-dire faire apparaître le menu Demande de prix au niveau de MaLibrairie. Ceci dit, il suffit de créer un nouveau document XML qui contient ce code puis ajouter son chemin dans le fichier manifest.

Et donc, si jamais il arrive que vous ayez besoin d'ajouter ou modifier un champs, il suffira tout simplement de venir dans ce fichier, créer le record form view et hériter de la vue originale (XML ID: purchase.purchase_order_form)

Maintenant que tout est bon, on peut éditer notre demande de prix ou devis. Une fois le formulaire enregistré, vous pouvez alors Confirmer la commande (cliquer sur le bouton) et attendre que le fournisseur vous livre avant de réceptionner les articles dans votre stock (bouton Réception par article)

L'entrée des produits en stock

Nous passons alors dans le module stock (Menu Inventaire). 


Lorsque vous l'ouvrez, vous constatez qu'il y'a deux éléments principaux (Réceptions et Livraison) sur la page. Les réceptions vous indiquent qu'il y'a des produits en cours de réceptions (le fournisseur va les livrer) et les livraisons quant à elle indiquent les livraisons en cours que vous allez devoir écouler. 

Cependant, le seul élément qui nous intéresse pour le moment est Réceptions.

  1. En cliquant sur le bouton A recevoir, vous obtenez un vue liste qui vous présente une ligne de transfert incluant la référence, le fournisseur (partenaire), la date de la commande, le document d'origine et l'état du transfert. 
  2. Cliquez sur cette ligne: le formulaire de réception va s'ouvrir. Tous ce que vous aurez à faire sera de Valider (en cliquant sur le bouton) , puis Appliquer (en cliquant sur le bouton) et le tour est joué! Vous venez de faire entrer votre produit dans le stock.
  3. Le menu Mouvements de stocks (premier menu après Valorisation de l'inventaire) vous montre les mouvements qui se sont produits. En ouvrant le formulaire, vous pourrez même accéder à l'emplacement où est stocké votre produit comme le montre ces captures.




Avant de terminer je vais vous donner un petit exercice pour vous aider à assimiler ce que l'on a vu aujourd'hui:

  1. Afficher le menu Transferts en cours dans MaLibrairie. Ce menu doit afficher les transferts en cours
  2. Afficher le menu Emplacements dans MaLibrairie

La prochaine fois, nous ferons la gestion des abonnements

Sur ce, 
A+

mercredi 21 août 2019

Mise en place des fonctions d'acquisition de livres: gestion des dépendances, des variantes de produits et établissement de liens entre deux modèles

Bonjour et bienvenue!

Dernièrement je vous présentais comment implémenter les fonctionnalités de consultation des livres. En gros, il s'agissait d'écrire un modèle qui enregistre des livres et sur lequel on peut faire des éditions et des suppressions. Vous pouvez consulter l'article en question ici!

Si vous êtes débutant et venez tous juste de nous rejoindre, je vous invite plutôt à commencer ici!

OK! Aujourd'hui nous allons commencer la mise en place des fonctions d'acquisitions des livres. Pour vous permettre de comprendre, mettez-vous à la place d'un libraire qui, après avoir enregistrer les livres qu'il va vendre dans sa bibliothèque, décide maintenant de les acquérir. Pour ce faire, il doit enregistrer ses produits ou articles (livres), puis ses fournisseurs. Ensuite, il devra passez par un bon de commande pour passer sa commande auprès du fournisseur avant de les recevoir dans son stock.

Maintenant, et si je vous disais qu'actuellement, Odoo me permet de faire cette opération, sans aucune difficulté, comme ça de manière native? Et oui! c'est vrai. Rien qu'en installant les modules Achats (purchase) et Inventaire (stock), je peux le faire.

Vous allez me demander: mais pourquoi dois-je alors développer une telle fonctionnalité?

Et à moi de vous répondre:
  1. Vous faites un module personnalité de gestion de bibliothèque, votre client ne doit faire aucune autre action. Il doit ouvrir son logiciel, aller sur son module et faire ses manipulations.
  2. Vous faites une intégration ERP; et qui dit intégration ERP dit respect des procédures clients. Votre client vous demande de l'aider à exécuter les tâches qu'il fait tous les jours via son poste de travail.
  3. L'ergonomie et la personalisation. Odoo fait tout et vous devrez le personnaliser selon les besoins de votre client, rien de plus!
J'en profite alors pour vous dire ce qu'on fera dans ce tutoriel

  1. Permettre l'installation des modules Achats (purchase) et Inventaire (stock) lors de l'installation du module de gestion de librairie (oo_library)
  2. Joindre les  livres qui ont été enregistré aux articles (product.product). J'en profiterai pour vous expliquer la différence qu'il y'a entre les modèles product.product et product.template
Passons maintenant aux choses sérieuses

1. Comment installer les modules Achats (purchase) et Inventaire (stock) lors de l'installation de notre module?


C'est simple. Ouvrez le fichier __manifest__.py qui présente les caractéristiques du module (dans un dictionnaire Python). Vous verez qu'au niveau de la clé depends il y'a une liste comme ceci:

'depends': ['base', 'sale_management', 'purchase', 'stock'],

Cette liste est la liste des modules dont dépends notre module personnalisé. Par conséquent, tous ces modules sont installés lors de l'installation du module oo_library. Ici, vous verez les modules suivant:
  • base: le noyau d'odoo comportant les modèles avec res (res.users, res.partners, etc...), ainsi que plusieurs autres fonctionnalités (suppression, création, modification, import, export, impression, etc...) et l'affichage.
  • sale_management: pour la gestion des ventes
  • purchase: gestion des achats
  • stock: gestion de stock

2. Nous allons maintenant établir un lien entre les articles et les livres qui ont été enregistrés


Avant de continuer, notez d'abord cette différence entre les modèles product.product et product.template


  • le modèle product.product contient tous les articles stockables qu'on peut manipuler. Ces articles peuvent être attribués à des variantes: on dit qu'il liste les variantes du produit.
  • le modèle product.template lui, permet de contenir les informations qui sont identiques aux variantes.

En effet, il est possible sur Odoo de créer des variantes de produits. Par exemple le produit stylo contient des variantes stylo rouge et stylo bleu. Du coup, si vous créez un produit (Stylo) en utilisant la modèle product.template, le même produit (Stylo) sera créé au niveau du modèle product.product, vous permettant ainsi d'enregistrer les variantes rouges et bleues.


Comment activer les variantes de produits sur Odoo?

C'est simple: vous pouvez utiliser les variantes de produit dans Odoo en activant "Attributs et variantes" dans le menu Ventes / Configuration.




Ainsi, comme on peut avoir plusieurs versions (tome) d'un même livre, nous allons plutôt créer un product.template.

Dans le dossier views, créer le fichier oo_product_template.xml. Ici, oo représente les initiales de mon module et product_template représente le modèle sur lequel je vais travailler. 

Pour que votre code soit propre et facile à maintenir, optez toujours pour la méthode un modèle pour un fichier.

Le but de cette section est de faire apparaître le menu Articles présent dans Achats au niveau de MaLibrairie. Pour celà, nous allons faire un héritage de vues.

Comment hériter d'une vue sur Odoo?


Il faut tout d'abord être capable repérer le xml_id 


En effet, le xml_id est l'élément qui identifie un composant (action, menu, vue, etc...) sur Odoo. Par exemple, pour repérer le xml_id de l'action qui va ouvrir la formulaire des Articles, voici la procédure à suivre et il en est de même ou presque pour tous les autres composants.
  1. Activer le mode développeur
  2. Cliquer sur le menu en question (Menu Articles dans le modules Achats)
  3. Cliquer sur Ouvrir les outils de développement (il s'agit du petit insecte situé tout juste à côté de votre nom de profil à l'extrême droite)
  4. Cliquer sur modifier l'action et noter la valeur de ID Externe (c'est le xml_id de l'action: purchase.product_normal_action_puchased)


Maintenant on va récupérer le xml_id de la vue (l'ID de la vue formulaire du menu Articles)
  1. Cliquer sur le bouton create
  2. Cliquer sur Ouvrir les outils de développement 
  3. Cliquer sur Modifier la vue formulaire et noter la valeur de l'ID externe (product.product_template_only_form_view



On peut alors passer au code

Nous allons surcharger le modèle product.template (par héritage et faire le lien avec nos livres présents dans le modèle oo.consultation)



N'oubliez pas d'importer ce nouveau fichier dans le dossier models/__init__.py

from . import oo_product_template

Ensuite, nous allons surcharger la vue proprement dite et afficher le livre après le champs Catégorie




N'oubliez pas d'inclure le fichier dans __manifest__.py

'data': [
        'data/menu.xml',
        'views/oo_consultation_view.xml',
        'views/oo_product_template.xml'
    ],

Je vais m'arrêter ici pour aujourd'hui. Prenez la peine de mieux assimiler tout ce qui a été dis jusqu’à aujourd'hui et la prochaine fois nous allons continuez sur la gestion du processus d'achat et l'entrée des produits en stocks.

Découvrez le code source de ce module ainsi que d'autres modules ici

Sur ce, 
A+!

mercredi 14 août 2019

Quelques commandes utiles sous Git que chaque débutant doit connaitre

Hello! Aujourd'hui je vais vous parler de Git.

Git est le système de contrôle de version distribué (ou simplement l'outil de collaboration) le plus célèbre et le plus performant jusque là.

Dans cet article je partage avec vous une liste (non exhaustive) de commandes Git utiles. Ces commandes ont été initialement posté sur twitter par eliaswalyba.

En effet, Elias est un Senior AI/ML consultant et CoFounder DopeLab and @GalsenAI.
Vous pouvez le retrouver sur Twitter, GitHub, LinkedIn et YouTube (il y publie des tutoriels)

Maintenant, passons aux choses sérieuses!

INSTALLER GIT

Pour installer Git, rendez vous sur le site https://git-scm.com/downloads. Télécharger la distribution correspondante à votre système et installer la.

Sur Ubuntu ouvrez votre terminal et tapez

$ sudo apt install git

et le tour est joué. Vous avez Git installé

Dans la suite de cet article, toutes les commandes que je vous présente s’exécutent sur un terminal (cmd pour Windows). Ce pendant il existe des outils graphique qui vous permettent de manipuler Git. Mais pour un début je ne vous les conseille pas.

PREMIÈRES CONFIGURATION

Configurer les informations utilisateur pour tous les référentiels locaux

$ git config --global user.name "Votre nom"
Définit le nom que vous voulez attacher à vos transactions de commit

$ git config --global user.email "Votre adresse email"
Définit l'email que vous voulez attacher à vos transactions de commit

$ git config --global color.ui auto
Active la colorisation utile de la sortie en ligne de commande

CRÉER DES DÉPÔTS

Démarrer un nouveau référentiel ou en obtenir un à partir d'une URL existante

$ git init nom_du_projet
Crée un nouveau référentiel local avec le nom spécifié

$ git clone url
Télécharge un projet et l'historique de ses versions

FAIRE DES CHANGEMENTS

Vérifier les modifications et cré une transaction de validation

$ git status
Répertorie tous les fichiers nouveaux ou modifiés à valider

$ git add nom_du_fichier (ou . pour tout ajouter)
Capture instantanée du fichier en préparation

$ git reset [fichier]
Décompose le fichier mais conserve son contenu

$ git diff
Affiche les différences de fichier non encore mises en scène

$ git diff --staged
Affiche les différences de fichier entre le transfert et la dernière version du fichier

$ git commit -m "Une petite description de votre commit"
Enregistre les fichier de manière permanente dans l'historique des versions

REGROUPER DES CHANGEMENTS

Nommez une série de commits et combinez les efforts accomplis

$ git branch
Répertorie toutes les branches locales du référentiel actuel

$ git branch nom-branche
Cré une nouvelle branche

$ git checkout nom-branche
Bascule vers la branche spécifiée et met à jour le répertoire de travail

$ git merge nom-branche
Combine l’historique de la branche spécifiée dans la branche actuelle

$ git branch -d nom-branche
Supprime la branche spécifiée

MODIFICATIONS SUR LES FICHIERS

Déplacer et supprimer les fichiers versionnés

$ git rm nom_fichier
Supprime le fichier du répertoire de travail

$ git rm --cached nom_fichier
Supprime le fichier du contrôle de version mais conserve le fichier localement

$ git mv ancien_nom_fichier nouveau_nom_fichier
Change le nom du fichier et le prépare pour le commit

EXCLUSION DE FICHIER

Exclure les fichiers temporaires et les chemins

Pour exclure certains fichier (ne pas les traquer par Git)
Créez un fichier nommé .gitignore et mettez y tous les fichiers que vous voulez exclure.

$ git ls-files --other --ignored --exclude-standard
Répertorie tous les fichiers exclu dans ce projet

SAUVEGARDER DES FRAGMENTS DE FICHIERS

Doubler et restaurer les modifications incomplètes

$ git stash
Stocke temporairement tous les fichiers suivis modifiés

$ git stash list
Répertorie tous les changements cachés

$ git stash pop
Restaure les derniers fichiers cachés

$ git stash drop
Ignore le plus récent jeu de modifications stocké

VOIR L'HISTOIRE DE VOTRE PROJET

Parcourir et inspecter l'évolution des fichiers de projet

$ git log
Répertorie l'historique des versions de la branche actuelle

$ git log --follow nom_fichier
Répertorie l'historique des versions d'un fichier, renommage compris

$ git diff nom-branche-1 ... nom-branche-2
Affiche les différences de contenu entre deux branches

$ git show hash-du-commit
Affiche les métadonnées et les modifications de contenu du commit spécifié

REFAIRE DES COMMITS

Effacer les erreurs et l'historique des remplacements

$ git reset hash-du-commit
Annule tous les commits après [hash-du-commit], en préservant les modifications localement. Le hash-du-commit est un identifiant unique octroyé à chaque commit. Par exemple 793e57778a8e33ee61044a8255ee3b37368596a7 est un hash-du-commit

$ git reset --hard hash-du-commit
Ignore tout l'historique et rétablit le commit spécifié

SYNCHRONISER VOS CHANGEMENTS (SUR UN SERVEUR)

Enregistrer un signet de référentiel et échanger l'historique des versions

$ git fetch url
Télécharge tout l'historique du signet du référentiel

$ git push url nom-branche
Télécharge tous les commits des branches vers un serveur

$ git pull url nom-branche
Télécharge l'historique des signets et intègre les modifications

Voilà en gros quelque commandes de Git qu'Elias a publié sur son fil Twitter.

Après je ne retient pas toutes les commandes mais sur internet vous pouvez trouver plein de ressources pour apprendre à utiliser Git. C'est une technologie incontournable maintenant surtout dans le milieu professionnel et malheureusement on en parle jamais dans les universités / instituts de formations.

Enjoy !
A+!