# [tech][Odoo MRP] Présentation générale Odoo Transfo

Voici toutes fonctionnalités ajoutées à Odoo concernant les métiers de transformation alimentaire et artisanale dans Odoo.  
Tous nos développements sont en licence libre, réutilisable, modifiable, améliorable à votre convenance. On indique dans chaque paragraphe où retrouver le module en question.

## 📋 \[Bom\] Les Nomenclatures deviennent des Fiches Techniques  


<p class="callout info">L'assemblage final de la vue de la Fiche Technique est géré dans le module custom de Grap [dans ce fichier](https://github.com/grap/grap-odoo-custom/blob/12.0/grap_change_views_mrp/views/view_mrp_bom.xml).</p>

Dans l'alimentation, on parle pas de nomenclature (plutôt réservé à l'industrie) mais de Recettes ou encore de Fiches Techniques. C'est ce dernier terme qui a été retenu car il est utilisé par les professionnel·les.

Voici à quoi ressemble actuellement une Nomenclature/Fiche technique à Grap.

[![image.png](https://librairie.grap.coop/uploads/images/gallery/2023-12/scaled-1680-/PxWimage.png)](https://librairie.grap.coop/uploads/images/gallery/2023-12/PxWimage.png)

#### Ajouts sur la fiche technique

<details id="bkmrk-r%C3%A9f%C3%A9rence-unique-de-"><summary>Référence unique de recette ✨</summary>

<p class="callout info">Nouveaux champs `code` dans `mrp.bom` et `tla` dans `product.product` dans le modèle fourre-tout [mrp\_business](https://github.com/grap/grap-odoo-custom/tree/12.0/mrp_business)</p>

Un article peut être lié à plusieurs Fiches Techniques. On voulait avoir une référence unique pour retrouver de façon précise une recette.

À la création de la fiche technique, l'utisateur·rice appuie sur le bouton Définir la référence. En fonction du nom de l'article et du nombre de fiches techniques déjà liées, Odoo propose une référence unique composée du <span style="text-decoration: underline;">trigramme de l'activité</span> - d'un <span style="text-decoration: underline;">trigramme du produit</span> et du chiffre adéquate.   
*Exemple "MAT-AMA-1" : MAT car l'activité s'appelle Matisserie, AMA pour Amande et 1 car c'est la première fiche technique du produit.*

[![Peek 12-04-2023 11-50.gif](https://librairie.grap.coop/uploads/images/gallery/2023-04/peek-12-04-2023-11-50.gif)](https://librairie.grap.coop/uploads/images/gallery/2023-04/peek-12-04-2023-11-50.gif)

<table border="1" id="bkmrk-les-fiches-technique" style="border-collapse: collapse; width: 99.5062%; height: 317.133px;"><colgroup><col style="width: 53.9024%;"></col><col style="width: 46.0956%;"></col></colgroup><tbody><tr style="height: 317.133px;"><td style="height: 317.133px; vertical-align: middle;">Les Fiches Techniques nommés en XXX sont celles où l'utilisateur·rice n'a pas appuyé sur "Définir la référence"  
</td><td style="height: 317.133px;">[![image.png](https://librairie.grap.coop/uploads/images/gallery/2023-04/scaled-1680-/zUrimage.png)](https://librairie.grap.coop/uploads/images/gallery/2023-04/zUrimage.png)

</td></tr></tbody></table>

</details><details id="bkmrk-tags-color%C3%A9s-sur-les"><summary>Tags colorés sur les fiches techniques 🎨</summary>

<p class="callout info">Module dédié `mrp_bom_tag` disponible ici [https://github.com/grap/grap-odoo-custom/tree/12.0/mrp\_bom\_tag](https://github.com/grap/grap-odoo-custom/tree/12.0/mrp_bom_tag)</p>


Nouveau modèle lié à `mrp.bom` qui permet de créer des tags à la volée sur une fiche technique.

<table border="1" id="bkmrk-cela-peut-permettre-" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 42.4065%;"></col><col style="width: 57.7151%;"></col></colgroup><tbody><tr><td style="vertical-align: middle;">Cela peut permettre retrouver plus rapidement et visuellement une information</td><td>[![image.png](https://librairie.grap.coop/uploads/images/gallery/2023-04/scaled-1680-/Bviimage.png)](https://librairie.grap.coop/uploads/images/gallery/2023-04/Bviimage.png)</td></tr><tr><td style="vertical-align: middle;">Ou de classer des articles en catégories car les tags peuvent être classés en arborescence.</td><td>[![image.png](https://librairie.grap.coop/uploads/images/gallery/2023-04/scaled-1680-/leEimage.png)](https://librairie.grap.coop/uploads/images/gallery/2023-04/leEimage.png)</td></tr></tbody></table>

</details><details id="bkmrk-descriptions-et-temp"><summary>Descriptions et temps indicatif 🌸</summary>

<p class="callout info">Tous ces nouveaux champs sont dans le module temporaire fourre-tout [mrp\_business](https://github.com/grap/grap-odoo-custom/tree/12.0/mrp_business).</p>

##### Descriptions

Ajout de champ de Description `<span class="pl-s1"><span class="pl-token" data-hydro-click="{"event_type":"code_navigation.click_on_symbol","payload":{"action":"click_on_symbol","repository_id":123416601,"ref":"12.0","language":"Python","backend":"ALEPH_PRECISE","code_nav_context":"BLOB_VIEW","retry_backend":"","cross_repo_results_included":"CROSS_REPO_ENABLED","in_repo_result_count":1,"cross_repo_result_count":0,"originating_url":"https://github.com/grap/grap-odoo-custom/find-definition?q=description_short&blob_path=mrp_business%2Fmodels%2Fmrp_bom.py&ref=12.0&language=Python&row=15&col=4&code_nav_context=BLOB_VIEW","user_id":9005817}}" data-hydro-click-hmac="b9983c1356f96ddc13a9cf147f49e3b8befbe28641fddb73e912fd64f2fa6695">description_short</span></span>`, Description longue `<span class="pl-s1"><span class="pl-token" data-hydro-click="{"event_type":"code_navigation.click_on_symbol","payload":{"action":"click_on_symbol","repository_id":123416601,"ref":"12.0","language":"Python","backend":"ALEPH_PRECISE","code_nav_context":"BLOB_VIEW","retry_backend":"","cross_repo_results_included":"CROSS_REPO_ENABLED","in_repo_result_count":1,"cross_repo_result_count":0,"originating_url":"https://github.com/grap/grap-odoo-custom/find-definition?q=description_long&blob_path=mrp_business%2Fmodels%2Fmrp_bom.py&ref=12.0&language=Python&row=16&col=4&code_nav_context=BLOB_VIEW","user_id":9005817}}" data-hydro-click-hmac="a64a6774555cf03b495472a343713a1d745caf78eb1e5d506c23d7d68cecc607">description_long</span></span>` , Description de conditionnement `<span class="pl-s1"><span class="pl-token" data-hydro-click="{"event_type":"code_navigation.click_on_symbol","payload":{"action":"click_on_symbol","repository_id":123416601,"ref":"12.0","language":"Python","backend":"ALEPH_PRECISE","code_nav_context":"BLOB_VIEW","retry_backend":"","cross_repo_results_included":"CROSS_REPO_ENABLED","in_repo_result_count":1,"cross_repo_result_count":0,"originating_url":"https://github.com/grap/grap-odoo-custom/find-definition?q=description_packaging&blob_path=mrp_business%2Fmodels%2Fmrp_bom.py&ref=12.0&language=Python&row=14&col=4&code_nav_context=BLOB_VIEW","user_id":9005817}}" data-hydro-click-hmac="f37482bf63c55992cef6823fd9ddeceab765b419361c67f2c8ef3af42f24d7eb">description_packaging</span></span>`

##### Gestion du temps

Actuellement très simple, un champ libre pour écrire le temps nécessaire à la recette `<span class="pl-s1"><span class="pl-token" data-hydro-click="{"event_type":"code_navigation.click_on_symbol","payload":{"action":"click_on_symbol","repository_id":123416601,"ref":"12.0","language":"Python","backend":"ALEPH_PRECISE","code_nav_context":"BLOB_VIEW","retry_backend":"","cross_repo_results_included":"CROSS_REPO_ENABLED","in_repo_result_count":1,"cross_repo_result_count":0,"originating_url":"https://github.com/grap/grap-odoo-custom/find-definition?q=time_to_produce&blob_path=mrp_business%2Fmodels%2Fmrp_bom.py&ref=12.0&language=Python&row=52&col=4&code_nav_context=BLOB_VIEW","user_id":9005817}}" data-hydro-click-hmac="3ec3ad3393cd80135b7020f52d6b3d8f8adca4e2211af7ecd717f97c1bc9ebb5">time_to_produce</span></span>`

</details><details id="bkmrk-gestion-du-poids-sur"><summary>Gestion du poids sur les recettes ⚖️ </summary>

<p class="callout info">Module dédié `mrp_bom_line_net_qty` : [https://github.com/grap/grap-odoo-custom/tree/12.0/mrp\_bom\_line\_net\_qty](https://github.com/grap/grap-odoo-custom/tree/12.0/mrp_bom_line_net_qty)  
</p>

Trois fonctionnalités dans ce module :

- Gestion du poids net, poids brut et du pourcentage de perte pour chaque ligne de recette *→ je perds 5% de matières quand j'épluche ce légume donc il faut que ça impacte mon poids net*
- Pourcentage de chaque ligne de recette *→ combien de margarine j'ai dans ma recette ?*
- Poids net et brut de la recette *→ pour ajuster son prix au kilo au plus proche de la réalit*

</details><details id="bkmrk-saisonnalit%C3%A9s%2C-aller"><summary>Saisonnalités, allergènes et labels ☀️</summary>

<p class="callout info">Dans le module fourre-tout `mrp_food` : [https://github.com/grap/grap-odoo-custom/tree/12.0/mrp\_food](https://github.com/grap/grap-odoo-custom/tree/12.0/mrp_food)</p>

[![image.png](https://librairie.grap.coop/uploads/images/gallery/2023-04/scaled-1680-/3Znimage.png)](https://librairie.grap.coop/uploads/images/gallery/2023-04/3Znimage.png)

##### Saisonnalités

Nouveau modèle dans Odoo <span class="pl-v"><span class="pl-token active" data-hydro-click="{"event_type":"code_navigation.click_on_symbol","payload":{"action":"click_on_symbol","repository_id":123416601,"ref":"12.0","language":"Python","backend":"ALEPH_PRECISE","code_nav_context":"BLOB_VIEW","retry_backend":"","cross_repo_results_included":"CROSS_REPO_ENABLED","in_repo_result_count":1,"cross_repo_result_count":0,"originating_url":"https://github.com/grap/grap-odoo-custom/find-definition?q=Seasonality&blob_path=mrp_food%2Fmodels%2Fseasonality.py&ref=12.0&language=Python&row=12&col=6&code_nav_context=BLOB_VIEW","user_id":9005817}}" data-hydro-click-hmac="12270c3e26881c29ff830840be3b52ca1d14605223db38747c70213092d252b5">`seasonality` (lié à des `seasonality.line`) qui permet de configurer des saisons classiques (printemps, été etc</span></span>.) ou des saisons marchandes (Pâques, Noël) ou dire que c'est un produit de toute saison.

Modèle lié aux Fiches Techniques `mrp.bom` et aux Articles `product.product`<span class="pl-v"><span class="pl-token active" data-hydro-click="{"event_type":"code_navigation.click_on_symbol","payload":{"action":"click_on_symbol","repository_id":123416601,"ref":"12.0","language":"Python","backend":"ALEPH_PRECISE","code_nav_context":"BLOB_VIEW","retry_backend":"","cross_repo_results_included":"CROSS_REPO_ENABLED","in_repo_result_count":1,"cross_repo_result_count":0,"originating_url":"https://github.com/grap/grap-odoo-custom/find-definition?q=Seasonality&blob_path=mrp_food%2Fmodels%2Fseasonality.py&ref=12.0&language=Python&row=12&col=6&code_nav_context=BLOB_VIEW","user_id":9005817}}" data-hydro-click-hmac="12270c3e26881c29ff830840be3b52ca1d14605223db38747c70213092d252b5"> pour fa</span></span>ciliter des jeux de filtres, mettre un avertissement pour indiquer que "cette fiche technique n'est pas de saison" etc.

Selon la date du jour, Odoo affiche si l'Article ou la Fiche Technique est alors de saison ou non.

<table border="1" id="bkmrk-exemple-ici%2C-nous-so" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 21.6667%;"></col><col style="width: 78.4569%;"></col></colgroup><tbody><tr><td style="vertical-align: middle;">Exemple ici, nous sommes en avril et les framboises ne sont pas de saison, le reste oui  
</td><td>[![image.png](https://librairie.grap.coop/uploads/images/gallery/2023-04/scaled-1680-/tHkimage.png)](https://librairie.grap.coop/uploads/images/gallery/2023-04/tHkimage.png)

</td></tr></tbody></table>

##### Allergènes

Ajout de champs d'allergènes (modèle `product.allergen` crée dans le module de Grap [product\_food) ](https://github.com/grap/grap-odoo-business/tree/12.0/product_food)sur <span style="text-decoration: underline;">les lignes de fiche technique</span> (composants) et sur <span style="text-decoration: underline;">la fiche technique elle-même</span>.   
Les allergènes de la fiche technique sont construits par concaténation des allergènes des composants et de l'article lié à la Fiche Technique.

##### Labels

Ajout de labels (bio par exemple) sur les lignes et la fiche technique elle même. Par contre, le label sur la fiche technique est à rentrer manuellement (pour ne pas rentrer dans la complexification de la labellisation d'une fiche technique).


</details>## 📊 Gestion groupée des ventes et de la production  


<p class="callout info">Nouveau module `mrp.sale.grouped` pour gérer en un écran les ventes et la production de "sa semaine" (ou de son mois etc.) [https://github.com/grap/grap-odoo-custom/pull/330](https://github.com/grap/grap-odoo-custom/pull/330)</p>

- On concatène des Ventes `sale.order`
- On fait le lien avec les produits et <span style="color: rgb(132, 63, 161);">quantités</span> de ses `sale.order`
- On peut modifier ces <span style="color: rgb(132, 63, 161);">quantités</span> grâce au module `web_widget_x2many_2d_matrix`
- Vision du CA théorique de la semaine
- Validation facilitée des ventes
- 🖨️ Impression d'un résumé des ventes (produits / clients)
- 🖨️ Lien avec [l'assistant de production décrit plus bas](https://librairie.grap.coop/books/odoo-v12/page/techodoo-mrp-presentation-generale-odoo-transfo#bkmrk-g%C3%A9n%C3%A9rer-une-liste-d%27)  
    
    - PDF récap : quoi produire en produits finis (tarte aux pommes) + produits intermédiaires (tarte) et des matières premières à avoir (pommes, farine etc.)
    - PDF d'un tableau double entrée produits / fiche technique
    - PDF des fiches techniques

 **🎥 Voici la présentation en vidéo de ce module :**

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="315" sandbox="allow-same-origin allow-scripts allow-popups" src="https://tube.grap.coop/videos/embed/45a30b74-ad67-447c-86b6-7cfdf9a39abb" title="Odoo Transfo - Vidéo 5 : Gérer ses ventes et sa production de face groupée" width="560"></iframe>

## 🥕 \[Product\] Informations de production

Ajout d'un onglet sur notre fiche article pour gérer les nouveaux champs liés à la production alimentaire.

[![image.png](https://librairie.grap.coop/uploads/images/gallery/2023-04/scaled-1680-/NJFimage.png)](https://librairie.grap.coop/uploads/images/gallery/2023-04/NJFimage.png)

<details id="bkmrk-cat%C3%A9gorie-de-repas-%F0%9F%8D%BD"><summary>Catégorie de repas 🍽️</summary>

Nouveau modèle Odoo `mrp.meal.category` très simple qui permet de catégoriser des articles par exemple en créant des catégories "Entrées", "Plats", "Desserts" . Utile pour imprimer un menu d'allergènes par exemple, ce qu'on verra plus bas

<p class="callout info">Actuellement dans le module temporaire mrp\_business ici : [https://github.com/grap/grap-odoo-custom/blob/12.0/mrp\_business/models/mrp\_meal\_category.py](https://github.com/grap/grap-odoo-custom/blob/12.0/mrp_business/models/mrp_meal_category.py)</p>

</details><details id="bkmrk-saisonnalit%C3%A9s%2C-aller-1"><summary>Saisonnalités, allergènes ☀️</summary>

Décrit plus haut pour la Fiche Technique.

</details><details id="bkmrk-mercuriale-%F0%9F%93%9C-ajout-d"><summary>Mercuriale - gérer ses prix de matières premières 📜</summary>


Ajout de deux champs <span style="color: rgb(132, 63, 161);">Relevé Prix</span> `<span class="pl-s1"><span class="pl-token" data-hydro-click="{"event_type":"code_navigation.click_on_symbol","payload":{"action":"click_on_symbol","repository_id":123416601,"ref":"12.0","language":"Python","backend":"ALEPH_PRECISE","code_nav_context":"BLOB_VIEW","retry_backend":"","cross_repo_results_included":"CROSS_REPO_ENABLED","in_repo_result_count":1,"cross_repo_result_count":0,"originating_url":"https://github.com/grap/grap-odoo-custom/find-definition?q=date_last_statement_price&blob_path=mrp_food%2Fmodels%2Fproduct_product.py&ref=12.0&language=Python&row=10&col=4&code_nav_context=BLOB_VIEW","user_id":9005817}}" data-hydro-click-hmac="d79b38367de66db1f8d18a5e41ac7be4941c50d6333c6b2356308e054bf4c62b">date_last_statement_price</span></span>` et <span style="color: rgb(186, 55, 42);">Fin mercuriale</span> `<span class="pl-s1"><span class="pl-token" data-hydro-click="{"event_type":"code_navigation.click_on_symbol","payload":{"action":"click_on_symbol","repository_id":123416601,"ref":"12.0","language":"Python","backend":"ALEPH_PRECISE","code_nav_context":"BLOB_VIEW","retry_backend":"","cross_repo_results_included":"CROSS_REPO_ENABLED","in_repo_result_count":1,"cross_repo_result_count":0,"originating_url":"https://github.com/grap/grap-odoo-custom/find-definition?q=end_date_of_market_price_list&blob_path=mrp_food%2Fmodels%2Fproduct_product.py&ref=12.0&language=Python&row=15&col=4&code_nav_context=BLOB_VIEW","user_id":9005817}}" data-hydro-click-hmac="236377cdc903f775bdf355191bd0862e6f549d45268c9ed928ec7ecbfdcc5ad3">end_date_of_market_price_list</span></span>` qui vont avec l'ajout d'une vue Tree éditable.

Quand on modifie le Coût d'un article, le champ <span style="color: rgb(132, 63, 161);">Relevé Prix</span> se met à jour avec la date du jour. On peut alors indiquer une date de <span style="color: rgb(186, 55, 42);">Fin mercuriale</span> : Odoo indiquera en rouge quand la date sera dépassée, informant l'utilisateur·rice qu'iel doit peut-être revoir le coût de l'article.

[![Peek 12-04-2023 12-26.gif](https://librairie.grap.coop/uploads/images/gallery/2023-04/peek-12-04-2023-12-26.gif)](https://librairie.grap.coop/uploads/images/gallery/2023-04/peek-12-04-2023-12-26.gif)

</details>
## 🖇️ Impression de document

#### Tableau des allergènes  


<p class="callout info">Nouveau module et visuels disponibles ici [mrp\_bom\_print.](https://github.com/grap/grap-odoo-custom/tree/12.0/mrp_bom_print)</p>

Permet actuellement d'imprimer un tableau d'allergènes des Fiches Techniques que l'on sélectionne. Quelques options disponibles, et notamment l'ordre des recettes sur le PDF conditionné par la "catégorie de repas" [présenté juste en haut](https://librairie.grap.coop/books/odoo-v12/page/0-presentation-generale-fonctionnelle-et-technique#bkmrk-%F0%9F%8D%BD%EF%B8%8F-cat%C3%A9gorie-de-repa).


##   
💻 Écran, menus et actions simplifiés  


<details id="bkmrk-lien-fiche-technique"><summary>Gérer facilement le prix et la marge Recette ←→ Article</summary>

<p class="callout info">Nouveau module et visuels disponibles ici [mrp\_bom\_sale\_product\_margin](https://librairie.grap.coop/mrp_bom_sale_product_margin).</p>

Ajouter un modèle (mrp.bol) pour calculer le coût d'un article (product.product) n'est pas forcement intuitif et facile à prendre en main  
On a donc chercher à simplifier tout ça : depuis la Fiche Technique, on voit donc désormais des informations du Produit lié : son Coût, son Prix de Vente, la marge actuelle, et on peut agir sur le Coût - ce qui paraît intuitif car on prend le coût de la Fiche Technique pour l'y appliquer.

<table border="1" id="bkmrk-1-%3A-la-recette-est-f" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td style="vertical-align: top;">**1 :** La recette est faite pour 100 pièces, mais l'article est bien à la pièce, un coefficient sera donc appliqué

**2 :** Le coût de cette Fiche Technique pour 1 pièce est de 0,98€

**3 :** Alors que le Produit lié à un Coût à 0,85€

**4 :** Et un Prix de Vente à 4,20€

**5 :** Le bouton permet d'appliquer le nouveau coût

</td><td>[![image.png](https://librairie.grap.coop/uploads/images/gallery/2023-04/scaled-1680-/nc5image.png)](https://librairie.grap.coop/uploads/images/gallery/2023-04/nc5image.png)

</td></tr><tr><td style="vertical-align: top;">Le coût de la Fiche Technique que l'on voit a bien été appliqué au Produit. Reste à modifier le Prix de Vente selon la marge que l'on souhaite appliquer !

</td><td>[![image.png](https://librairie.grap.coop/uploads/images/gallery/2023-04/scaled-1680-/GCgimage.png)](https://librairie.grap.coop/uploads/images/gallery/2023-04/GCgimage.png)

</td></tr></tbody></table>

</details><details id="bkmrk-mati%C3%A8res-premi%C3%A8res-%F0%9F%A5%95"><summary>Accéder facilement aux matières premières 🥕 produits intermédiaires 🧩 et finis 🥧</summary>

Dans l'alimentaire, on peut avoir pas mal de cas différents. Pour simplifier la recherche de certains produits et Fiches Techniques, nous avons eu besoin de bien séparer les matières premières 🥕 des produits intermédiaires 🧩 des produits finis 🥧.

<table border="1" id="bkmrk-mati%C3%A8res-premi%C3%A8res-%F0%9F%A5%95-1" style="border-collapse: collapse; width: 100%; height: 169.267px;"><colgroup><col style="width: 39.5513%;"></col><col style="width: 60.4466%;"></col></colgroup><tbody><tr style="height: 46.5167px;"><td style="height: 46.5167px;">**Matières premières 🥕**   
  
</td><td style="height: 46.5167px;">Carottes</td></tr><tr style="height: 46.5167px;"><td style="height: 46.5167px;">**Produit seulement intermédiaires 🧩**  
  
</td><td style="height: 46.5167px;">Une pâte à tarte</td></tr><tr style="height: 46.5167px;"><td style="height: 46.5167px;">**Produit intermédiaires 🧩 et produits finis 🥧**  
  
</td><td style="height: 46.5167px;">Légumes lacto-fermentés (que l'on vend en vrac)</td></tr><tr style="height: 29.7167px;"><td style="height: 29.7167px;">**Produits seulement finis 🥧**   
</td><td style="height: 29.7167px;">Bocal avec des légumes lacto-fermenté</td></tr></tbody></table>

<div drawio-diagram="2971"><img src="https://librairie.grap.coop/uploads/images/drawio/2023-04/drawing-4-1682608233.png" alt=""/></div>

</details><details id="bkmrk-nos-filtres-produits"><summary>Nos filtres Produits et Fiches Techniques dans Odoo</summary>

<p class="callout info">Ajout de champs sur  
- `product_product` : `is_component` et `is_intermediate` dans `mrp_food`,  
- `mrp_bom` : champ liés `product_intermediate` et `product_finished` liés au product</p>

<table border="1" id="bkmrk-filtre-sur-les-produ" style="border-collapse: collapse; width: 100%; height: 221.167px;"><colgroup><col style="width: 50.0618%;"></col><col style="width: 50.0618%;"></col></colgroup><tbody><tr style="height: 29.8px;"><td style="height: 29.8px; background-color: rgb(251, 238, 184);">**Filtre sur les produits** </td><td style="height: 29.8px; background-color: rgb(251, 238, 184);">**Doit respecter <span style="text-decoration: underline;">toutes</span> ses conditions**  
</td></tr><tr><td style="height: 46.7667px;">**Produits finis 🥧**  
  
</td><td style="height: 46.7667px;">`sale_ok` = True  
`bom_line_ids` = False

</td></tr><tr><td style="height: 63.9px;">**Produit intermédiaires 🧩**  
  
</td><td style="height: 63.9px;">`bom_line_ids` = True `and`

`bom_count` &gt; 0

</td></tr><tr style="height: 80.7px;"><td style="height: 80.7px;">**Matières premières 🥕**   
  
</td><td style="height: 80.7px;">`bom_line_ids` = True `and`  
`bom_count` = 0  
  
</td></tr></tbody></table>

On voit que :

- <span style="color: rgb(35, 111, 161);">matières premières</span> et <span style="color: rgb(22, 145, 121);">produits intermédiaires</span> ne se recoupent (la différence est dans le fait d'avoir ou nonune fiche technique qui permet de calculer son coût)
- <span style="color: rgb(22, 145, 121);">produits intermédiaires</span> et <span style="color: rgb(230, 126, 35);">produits finis </span>sont des catégories non excluantes :

<div drawio-diagram="2965"><img src="https://librairie.grap.coop/uploads/images/drawio/2023-04/drawing-4-1682082835.png" alt=""/></div>


</details>






## 📈 Gestion simplifiée : de l'achat des matières premières à la vente du produit  


<p class="callout info">Ce menu est crée dans le module custom de Grap, notamment [dans ce fichier](https://github.com/grap/grap-odoo-custom/blob/12.0/grap_change_views_mrp/views/menu.xml).</p>

Dans un contexte d'inflation et de changement régulier des prix des matières premières, ce menu facilite les étapes à à suivre pour gérer ses prix :

- 📜 1. D'abord on met à jour ces **prix de matières premières**
    - soit par "Matières Premières" qui permet de modifier directement le Coût d'un article
    - soit par "Prix fournisseur·es" qui permet de modifier une information fournisseur puis de l'appliquer au Coût de l'article
- 📋 2. Puis on met à jour les **coûts des Fiches Techniques**
    - d'abord des Produits intermédiaires (exemple la fiche Technique de "pâte à tarte")
    - puis des Produits finis (exemple "Tarte à l'oignon" contenant la "pâte à tarte")
- 🥧 3. Et enfin on met à jour les **prix de vente de l'article vendu**, lié à la bonne Fiche Technique

Chaque menu amenant à une vue arbre éditable ou avec des boutons d'actions

[![image.png](https://librairie.grap.coop/uploads/images/gallery/2023-04/scaled-1680-/SOUimage.png)](https://librairie.grap.coop/uploads/images/gallery/2023-04/SOUimage.png)