Nouvelle présentation de notre méthodologie d’intégration

Bonjour à tous,

En ce moment Tiny publie beaucoup de documents, ce qui est plutôt une bonne chose. En début de semaine, un document très intéressant et très bien fait a été publié : un memento sur la méthodologie d’intégration, à destination des partenaires intégrateurs comme nous.

Je dois avouer avoir été surpris par la précision et la qualité du document (la dernière fois que j’ai été surpris de la sorte, c’était le memento technique il y a plus de six mois). En tout cas pour nous à SYNERPGY, qui attachons une grande importance à avoir une méthodologie la plus parfaite possible, ce document a été une véritable mine d’or.

On a déjà récemment complètement refondu notre méthodologie, à coup de schémas BPMN, de maquettes OpenERP et de documents de spécifications techniques. Ce nouveau document a donc été l’occasion de mixer le meilleur de notre nouvelle méthodologie et de celle recommandée par Tiny (ainsi que de se forcer à trouver le temps de la présenter sur le site…).

Vous trouverez donc la présentation de notre nouvelle méthodologie sur le site. Si vous êtes un potentiel client cette présentation devrait vous rassurer, si vous êtes intégrateur n’hésitez pas à vous en inspirer et pourquoi pas nous aider à améliorer nos documents de travail.

Module Stock d’OpenERP : Quantité disponible et affichage des stocks

Bonjour à tous,

Aujourd’hui, la demande d’un client a été l’occasion pour nous d’explorer plus avant le fonctionnement de la gestion des stocks, notamment comment était calculé la quantité disponible et le stock virtuel d’un produit.

Pour ceux qui ne le savent pas, la quantité disponible représente la quantité de produit qui est actuellement physiquement présente dans un emplacement tandis que le stock virtuel représente la quantité qui sera disponible quand tous les fournisseurs auront livré les commandes et quand la société aura livré tous ses clients. Ce dernier est notamment très utile pour les commerciaux ce qui leur permet de déterminer la quantité de produits qu’ils peuvent promettre à leurs clients.

Ces champs sont mis à jour dynamiquement en fonction des mouvements de stocks, que ce soit des produits entrants, expéditions etc…

Le problème qui se posait, c’est que la structure des emplacements ayant été modifiée, les quantités disponibles et stocks virtuels de tous les produits restaient invariablement à 0. Cela nous a poussé à chercher comment étaient calculés ces champs, et notamment quels emplacements de stock étaient considérés par OpenERP comme faisant parti du stock de la société et donc comme produit disponible.

Nous avons d’abord pensé que tous les emplacements ayant le type “emplacement interne” étaient pris en compte, ce qui était faux. Nous avons également pensé qu’il fallait obligatoirement garder les emplacement “Emplacement physique” / “nom de la société” / “Stock” définis par défaut mais c’était faux également.

Ne trouvant pas l’information sur Internet, nous avons dû regarder directement dans le code. L’information se trouve dans le fichier product.py du module stock.

En vérité, ils sont basés non sur les emplacements mais sur les entrepots (stock.warehouse). Ceux-ci ont un emplacement stock et c’est celui-ci qui est utilisé pour le calcul des quantités disponibles du produit. Ainsi, les quantités disponibles d’un produit sont les quantités de ce produit dans tous les emplacement de stock de tous les entrepôt existants.
Si vous avez à modifier vos emplacement de stock, n’oubliez donc pas de renseigner l’emplacement de stock de vos entrepots.

Pour information supplémentaire, sachez que lorsque vous consulter la liste des produits en créant un devis, la liste des produits affiche uniquement les quantités disponibles dans l’entrepot du magasin de la commande, et donc uniquement l’emplacement de stock et ses emplacements fils de cet entrepot. Sur la fiche produit, en revanche tous les entrepots sont pris en compte.

Le client nous a également demandé que seul les produits ayant une quantité différente de zéro (dans le cas du client, seulement 40 produits au lieu de 2000…) soient affichés quand on consulte les produits d’un emplacement de stock. Pour les plus techniques d’entre vous, voici le code qu’on a implanté dans le module stock.

Il vous faut modifier le fichier stock/wizard/wizard_location_product.py et remplacer la fonction _action_open_windows par celle-ci :

def _action_open_window(self, cr, uid, data, context):

self.pool = pooler.get_pool(cr.dbname)
product_obj = self.pool.get(‘product.product’)

product_ids = product_obj.search(cr, uid, [(‘active’,’=’,True)])
prod_context = {‘location': data[‘ids’][0],’from_date':data[‘form’][‘from_date’],’to_date':data[‘form’][‘to_date’]}
products = product_obj.read(cr, uid, product_ids, [‘qty_available’,’virtual_available’], prod_context)

res = []

for product in products:
if (product[‘qty_available’] > 0) or (product[‘virtual_available’] > 0):
res = res + [product[‘id’]]

return {
‘name': False,
‘view_type': ‘form’,
“view_mode”: ‘tree,form’,
‘res_model': ‘product.product’,
‘type': ‘ir.actions.act_window’,
‘context':{‘location': data[‘ids’][0],’from_date':data[‘form’][‘from_date’],’to_date':data[‘form’][‘to_date’]},
‘domain':[(‘type’,'<>’,’service’),(‘id’,’in’,res)]
}

Il n’est pas certain que Tiny accepte ce code car il est très consommateur en ressource système (il doit passer les 2000 produits ayant la case “actif” cochée en revue et calculer leurs quantités disponibles avant de sélectionner ceux qui apparaitront), mais c’est il est vrai une amélioration ergonomique notable que de pouvoir afficher que les produits présents dans l’emplacement consulté.