Liasse documentaire
Ce module permet de :
- Récupérer tous les documents liées un enregistrement (et aux enregistrements liées)
- Générer des rapports Excel ou jasper liées à un enregistrement (et aux enregistrements liées)
Exemple :
Depuis un BL :
- Récupérer les document Open-Prod en pièces jointe des article PF et CP, client, Commande, OF, OT, Lot PF et CP, Etiquettes)
- Pouvoir générer des rapports pdf (exemple : certificat de conformité, rapport de contrôle… basé sur un rapport Excel ou rapport jasper)
- Stocker ces éléments dans le champs document joint du BL (soit tout dans un zip, soit tout en pièce jointe)
Liasse documentaire
1. Résumé
Ce module permet de :
- Récupérer tous les documents liées un enregistrement (et aux enregistrements liées)
- Générer des rapports Excel ou jasper liées à un enregistrement (et aux enregistrements liées)
Exemple :
Depuis un BL :
- Récupérer les document Open-Prod en pièces jointe des article PF et CP, client, Commande, OF, OT, Lot PF et CP, Etiquettes)
- Pouvoir générer des rapports pdf (exemple : certificat de conformité, rapport de contrôle… basé sur un rapport Excel ou rapport jasper)
- Stocker ces éléments dans le champs document joint du BL (soit tout dans un zip, soit tout en pièce jointe)
2. Utilisation
Ø Créer une configuration :
Modèle : sélectionner le modèle au quel s’applique le paramétrage (exemple : stock.picking, mrp.manufacturingorder…)
Champ : champ de type « Document Open-Prod » dans lequel les documents (ou le zip) résultant seront stockés.
Générer un zip : si cette case est cochée, les documents récupéré seront mis dans un fichier zip.
Nom du fichier zip : Modélisation du nom de fichier
Type , Tag : type et tag du document Open-Prod contenant le zip généré.
Liste des documents :
- Type : Récupérer un document Open-Prod :
Grace à ce type on va récupérer la liste des documents Open-Prod dont les id sont renvoyées par la requête SQL.
- Type : Imprimer un rapport jasper
Grace à ce type on va lancer l’impression des documents dont on a précisé le modèle d’impression pour les id des enregistrements renvoyées par la requête.
- Type : Imprimer un rapport Excel
Grace à ce type on va lancer l’impression des documents dont on a précisé le modèle d’impression pour les id des enregistrements renvoyées par la requête.
Le bouton Générer action va créer une action serveur et ajouter l’action sur le modèle concerné
Ø Depuis le modèle concerné, on retrouve l’action
Génère un zip : génèrera un zip contenant les documents récupères
Nom du fichier zip : Nom du fichier zip calculé.
Attention la génération d’un zip présente l’avantage de figer les données dans le système à un instant T. Cependant cela à pour effet de dupliquer tous les documents ged (un fois à son emplacement d’origine et une fois dans le zip) -> il faudra donc bien surveiller l’espace disque du server hébergeant votre ged (filestore).
Liste des documents : On visualise ici la liste des documents à récupérer/ générer. On peut ici décocher des lignes si on ne souhaite pas récupérer certain éléments
Bouton charger : Permet de visualiser les documents récupérés
Liste des documents récupérés : on peut ici décocher des lignes que l’on ne souhaite pas intégrer au zip.
Télécharger le zip : permet de télécharger le zip (sans quitter la fenêtre) .
Bouton Valider : permet de mettre les documents (ou le zip) dans le champs document sélectionné dans le paramétrage.
Remarques :
- Il n’est pas nécessaire de charger les documents -> dans ce cas tous les documents récupérer seront pris.
- Pour supprimer une liasse de documentaire de la liste, il suffit de supprimer l'action serveur correspondante.
3. Exemple de configuration
3.1 Bon de livraison :
3.2 Bibliothèque de requêtes SQL
- Récupérer les ID des documents liées au articles du BL :
select doc.id from
stock_picking as bl
join stock_move sm on sm.picking_id= bl.id
join internal_plan_document_openprod_rel as rel on rel.product_id=sm.product_id
join document_openprod doc on rel.document_id=doc.id
where bl.id = %object_id
- Récupérer les ID des documents liées au étiquettes du BL :
select doc.id
from stock_picking as bl
join stock_move sm on sm.picking_id= bl.id
join stock_move_label sml on sm.id= sml.move_id
join stock_label sl on sl.id= sml.label_id
join document_openprod_stock_label_rel as rel on rel.stock_label_id =sml.label_id
join document_openprod doc on rel.document_openprod_id =doc.id
where bl.id = %object_id
- Récupérer les ID des documents liées aux étiquettes consommées dans les OF liées au étiquettes du BL :
-- liste documents liées étiquettes consommées dans l'OF liées à l'étiquette envoyée (sur 1 niveau)
select distinct doc.id
from stock_picking as bl
join stock_move sm on sm.picking_id= bl.id
join stock_move_label sml on sm.id= sml.move_id
join stock_label sl on sl.id= sml.label_id
join stock_move fistmove on fistmove.id= sl.first_move_id
join mrp_workorder wo on wo.id= fistmove.wo_outgoing_id
join mrp_workorder wo_all on wo.mo_id=wo_all.mo_id
join stock_move sm_conso on sm_conso.wo_incoming_id = wo_all.id and sm_conso.state<>'cancel'
join stock_move_label sml_conso on sm_conso.id= sml_conso.move_id
join document_openprod_stock_label_rel as rel on rel.stock_label_id =sml_conso.label_id
join document_openprod doc on rel.document_openprod_id =doc.id
where bl.id=%object_id
- Récupérer les ID des OF liées au étiquettes du BL (pour impression document) :
-- liste OF liées
select distinct wo.mo_id
from stock_picking as bl
join stock_move sm on sm.picking_id= bl.id
join stock_move_label sml on sm.id= sml.move_id
join stock_label sl on sl.id= sml.label_id
join stock_move fistmove on fistmove.id= sl.first_move_id
join mrp_workorder wo on wo.id= fistmove.wo_outgoing_id
where bl.id=%object_id
- Récupérer les ID contrôles qualité terminé liées OF liées au étiquettes du BL (pour impression document) :
-- liste contrôles qualité terminés liées aux OT liées
select distinct decla_qualite.id
from stock_picking as bl
join stock_move sm on sm.picking_id= bl.id
join stock_move_label sml on sm.id= sml.move_id
join stock_label sl on sl.id= sml.label_id
join stock_move fistmove on fistmove.id= sl.first_move_id
join mrp_workorder wo on wo.id= fistmove.wo_outgoing_id
join mrp_workorder wo_all on wo.mo_id=wo_all.mo_id
join quality_control_declaration decla_qualite on decla_qualite.wo_id=wo_all.id and decla_qualite.state='done'
where bl.id=%object_id
Récupérer les ID des documents liées aux contrôles qualité terminés liées aux OT liées au BL
-- liste document liées aux contrôles qualité terminés liées aux OT liées au BL
select distinct doc.id
from stock_picking as bl
join stock_move sm on sm.picking_id= bl.id
join stock_move_label sml on sm.id= sml.move_id
join stock_label sl on sl.id= sml.label_id
join stock_move fistmove on fistmove.id= sl.first_move_id
join mrp_workorder wo on wo.id= fistmove.wo_outgoing_id
join mrp_workorder wo_all on wo.mo_id=wo_all.mo_id
join quality_control_declaration decla_qualite on decla_qualite.wo_id=wo_all.id and decla_qualite.state='done'
join quality_control_document_openprod_rel as rel on decla_qualite.id =rel.qcd_id
join document_openprod doc on rel.document_id =doc.id
where bl.id=%object_id
Récupérer les ID des documents liées à l'OF liées au BL
SELECT DISTINCT doc.document_id
FROM stock_picking AS bl JOIN stock_move AS sm ON sm.picking_id = bl.id
JOIN stock_move_label AS sml ON sm.id = sml.move_id
JOIN stock_label AS sl ON sl.id = sml.label_id
JOIN stock_move AS fistmove ON fistmove.id = sl.first_move_id
JOIN mrp_workorder AS wo ON wo.id = fistmove.wo_outgoing_id
LEFT OUTER JOIN mo_document_openprod_rel AS doc ON doc.mo_id = wo.mo_id
WHERE bl.id = %object_id
liste document liées aux contrôles qualité terminés liées aux MP consommés sur les OT liées au BL
-- liste document liées aux contrôles qualité terminés liées aux MP consommés sur les OT liées au BL
select distinct doc.id
from stock_picking as bl
join stock_move sm on sm.picking_id= bl.id
join stock_move_label sml on sm.id= sml.move_id
join stock_label sl on sl.id= sml.label_id
join stock_move fistmove on fistmove.id= sl.first_move_id
join mrp_workorder wo on wo.id= fistmove.wo_outgoing_id
join mrp_workorder wo_all on wo.mo_id=wo_all.mo_id
join stock_move sm_conso on sm_conso.wo_incoming_id = wo_all.id and sm_conso.state<>'cancel'
join stock_move_label sml_conso on sm_conso.id= sml_conso.move_id join stock_label slconso on slconso.id = sml_conso.label_id
join stock_move fistmove_label_conso on fistmove_label_conso.id = slconso.first_move_id
join quality_control_declaration decla_qualite on decla_qualite.id= fistmove_label_conso.control_declaration_id and decla_qualite.state='done'
join quality_control_document_openprod_rel as rel on decla_qualite.id =rel.qcd_id
join document_openprod doc on rel.document_id =doc.id
where bl.id=%object_id
Exemples depuis l'OF :
Nom |
Type |
Requête SQL |
Imprime les documents de contrôle qualité de l'OF |
Imprimer un rapport excel |
select distinct decla_qualite.id from mrp_workorder wo_all join quality_control_declaration decla_qualite on decla_qualite.wo_id=wo_all.id and decla_qualite.state='done' where wo_all.mo_id=%object_id |
Récupère les documents de l'OF |
Récupérer un document openprod |
SELECT docrel.document_id FROM mrp_manufacturingorder AS mrp FULL OUTER JOIN mo_document_openprod_rel AS docrel ON docrel.mo_id = mrp.id left join document_openprod as doc on (doc.id = docrel.document_id ) left join document_type_openprod AS t0 on ( t0.id=doc.type_id) left join document_tag_rel AS DTR on (DTR.document_id=doc.id) left join tracker_tag AS TT on (DTR.tag_id=TT.ID) WHERE mrp.id = %object_id and TT.name = 'CLIENT' |
Récupère le certificat MP depuis contrôle qualité fournisseur |
Récupérer un document openprod |
select distinct doc.id from mrp_workorder wo_all join stock_move sm_conso on sm_conso.wo_incoming_id = wo_all.id and sm_conso.state<>'cancel' join stock_move_label sml_conso on sm_conso.id= sml_conso.move_id join stock_label slconso on slconso.id = sml_conso.label_id join stock_move fistmove_label_conso on fistmove_label_conso.id = slconso.first_move_id join quality_control_declaration decla_qualite on decla_qualite.id= fistmove_label_conso.control_declaration_id and decla_qualite.state='done' join quality_control_document_openprod_rel as rel on decla_qualite.id =rel.qcd_id join document_openprod doc on rel.document_id =doc.id where wo_all.mo_id=%object_id |
Imprime les étiquettes du PF |
Imprimer un rapport jasper |
select distinct sl.id from stock_label sl join stock_move fistmove on fistmove.id= sl.first_move_id join mrp_workorder wo on wo.id= fistmove.wo_outgoing_id where wo.mo_id=%object_id |
4. Pour aller plus loin avec peu de travail !
4.1 Exemple d’une exécution automatique sans interface (pour mettre par exemple cette action serveur dans une action automatisée au traitement du BL)
#----------------------------------------------------------------------------------
# génère automatiquement la liasse documentaire ayant l'ID 1
#----------------------------------------------------------------------------------
ctx=env.context.copy()
ctx['default_mf_docu_bundle_id']=1 # id de la liasse documentaire
ctx['default_mf_data_ids']=str(objects.ids) # id des objets sur les quelles lancer la liasse
ctx['default_mf_data_model']=str(objects._model._name) # nom du modèle sur lequel lancer la liasse documentaire.# crée le wizard
liasse_documentaire=env['mf.docu.bundle.wiz'].with_context(ctx).create({})
# valide le wizard
liasse_documentaire.validate()
4.2 Exécute la liasse documentaire BL du client :
è Ajout champs perso « x_liasse_doc_partenaire_id » sur fiche partenaire (many2one) avec
o Modèle : mf.docu.bundle
o domain : [('mf_model_id','=','stock.picking')]
è Action server sur BL :
#récupère la liasse documentaire du partenaire
liasse_doc_id=object.partner_id.x_liasse_doc_partenaire_id or 1
# lance le wizard avec la bonne config
action={
"name": "Liasse documentaire BL",
"view_mode": "form",
"res_model": "mf.docu.bundle.wiz",
"type": "ir.actions.act_window",
"target": "new",
"context": {"default_mf_docu_bundle_id": liasse_doc_id,"default_mf_data_ids":str(objects.ids),"default_mf_data_model":str(objects._model._name)}
}