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

Depuis le menu Configuration>Rapport>Liasse documentaire

Ø  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 

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


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


-- 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

-- 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

-- 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)}

}

 

 

 

 

 

 

 


Revision #7
Created 13 September 2024 13:30:21 by Emeric ORSEL
Updated 7 January 2025 09:53:31 by Emeric ORSEL