Sélectionner une révision Git
adefpat_project_justif_zip_wizard.py
adefpat_project_justif_zip_wizard.py 12,00 Kio
# Copyright 2022 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import json
from datetime import date, datetime
from odoo import api, fields, models
from odoo.exceptions import UserError
class AdefpatProjectJustifZip(models.TransientModel):
_name = "adefpat.project.justif.zip.wizard"
_inherit = 'lefilament.alfresco'
_description = "Wizard justifs zip projets"
period_start = fields.Date("Début de période", required=True)
period_end = fields.Date(
"Fin de période", required=True, default=fields.Date.today()
)
type_convention_id = fields.Many2one(
"adefpat.type.convention",
domain=[
"|",
("date_end_validity", ">=", fields.Date.today()),
("date_end_validity", "=", False),
],
string="Type de convention de financement",
)
@api.multi
def build_folder_bilan(self):
json_file = []
json_file_proj = self.build_json_project("11")
json_file.append(json_file_proj)
json_file_ff = self.build_json_file_facture_fournisseur("21")
json_file.append(json_file_ff)
json_file_fc = self.build_json_file_facture_client("31")
json_file.append(json_file_fc)
json_file_frais = self.build_json_file_expense_zip("41")
json_file.append(json_file_frais)
virtual_json = {
"name": "Bilan",
"nodes": [{
"id": "1",
"name": "Bilan",
"description": "Bilan",
"nodes": json_file,
}]
}
if self.type_convention_id:
file_name = "bilan"+ str(datetime.now().strftime("%y-%m-%d-%H-%M")) + "_" + self.type_convention_id.name
else:
file_name = "bilan"+ str(datetime.now().strftime("%y-%m-%d-%H-%M"))
json_file_cmis = self.env.user.company_id.proof_justif_cmis
return self.create_json_file(file_name, virtual_json, json_file_cmis)
@api.multi
def build_json_project(self, bilan_nb=None):
# Get Projects with at least 1 task on period
project_ids = self.env["project.task"].search([
("date_deadline", "<=", self.period_end),
("date_deadline", ">=", self.period_start),
]).mapped("project_id")
if self.type_convention_id:
project_ids = project_ids.filtered(
lambda p: p.type_convention_id == self.type_convention_id)
compteur = 0
json_file = []
for project in project_ids:
compteur += 1
proj = project.name.replace(" ", "_x0020_")
path = "PATH:'/app:company_home/st:sites/cm:odoo/cm:documentLibrary/cm:Projets/cm:" + proj
json_file.append({
"id": bilan_nb + str(compteur),
"name": project.name,
"description": project.name,
"nodes":[
{
"id": bilan_nb + str(compteur) + "1",
"name": "CR séance",
"description": "Compte-Rendus des séances d’accompagnement",
"search": {
"language": "fts-alfresco",
"query": path + "/cm:seances//*'" + " AND =adefpat:typeDocument:'compte rendu'",
}
},
{
"id": bilan_nb + str(compteur) + "2",
"name": "GAP",
"description": "Compte-Rendus des séances de GAP",
"search": {
"language": "fts-alfresco",
"query": path + "/cm:gap//*'" + " AND =adefpat:typeDocument:'compte rendu'",
},
},
{
"id": bilan_nb + str(compteur) + "3",
"name": "Evaluation CF",
"description": "Evaluation finale du consultant formateur",
"search": {
"language": "fts-alfresco",
"query": path + "/cm:seances//*'" + " AND =adefpat:typeDocument:'évaluation du formateur'",
},
},
{
"id": bilan_nb + str(compteur) + "4",
"name": "Evaluation stagiaire",
"description": "Questionnaire de satisfaction de chaque stagiaire",
"search": {
"language": "fts-alfresco",
"query": path + "/cm:beneficiaires//*'" + " AND =adefpat:typeDocument:'questionnaire de satisfaction'",
},
},
{
"id": bilan_nb + str(compteur) + "5",
"name": "Consultations",
"description": "Consultations",
"search": {
"language": "fts-alfresco",
"query": path + "/cm:consultation//*'",
},
},
{
"id": bilan_nb + str(compteur) + "6",
"name": "Conventions",
"description": "Conventions",
"search": {
"language": "fts-alfresco",
"query": path + "/cm:admin//*'" + " AND (=adefpat:typeDocument:'convention d'accompagnement' OR =adefpat:typeDocument:'convention d'objectif')",
},
},
]})
virtual_json = {
"name": "Justificatifs Projets",
"nodes": [{
"id": bilan_nb,
"name": "Justificatifs Projets",
"description": "Justificatifs Projets",
"nodes": json_file,
}]
}
return virtual_json
@api.multi
def build_folder(self):
virtual_json = self.build_json_project("1")
if self.type_convention_id:
file_name = "justifs_projets_"+ str(datetime.now().strftime("%y-%m-%d-%H-%M")) + "_" + self.type_convention_id.name
else:
file_name = "justifs_projets_"+ str(datetime.now().strftime("%y-%m-%d-%H-%M"))
json_file_cmis = self.env.user.company_id.proof_justif_cmis
return self.create_json_file(file_name, virtual_json, json_file_cmis)
@api.multi
def build_json_file_facture_fournisseur(self, bilan_nb=None):
virtual_json = {
"name": "Factures fournisseurs",
"nodes": [{
"id": bilan_nb,
"name": "Factures fournisseurs",
"description": "Factures fournisseurs",
"search": {
"language": "fts-alfresco",
"query": "(PATH:'/app:company_home/st:sites/cm:odoo/cm:documentLibrary/cm:Factures_x0020_fournisseurs//*') AND (+adefpat:factureEndDate:['" + str(
self.period_start) + "' TO '" + str(
self.period_end) + "'] OR +adefpat:factureSartDate:['" + str(
self.period_start) + "' TO '" + str(self.period_end) + "'])",
}
},
]
}
return virtual_json
@api.multi
def build_facture_fournisseur(self):
virtual_json = self.build_json_file_facture_fournisseur("1")
if self.type_convention_id:
file_name = "justifs_factures_fournisseurs_" + str(datetime.now().strftime("%y-%m-%d-%H-%M")) + "_" + self.type_convention_id.name
else:
file_name = "justifs_factures_fournisseurs_" + str(datetime.now().strftime("%y-%m-%d-%H-%M"))
json_file_cmis = self.env.user.company_id.proof_justif_cmis
return self.create_json_file(file_name, virtual_json, json_file_cmis)
@api.multi
def build_json_file_facture_client(self, bilan_nb=None):
if self.type_convention_id:
query = "(PATH:'/app:company_home/st:sites/cm:odoo/cm:documentLibrary/cm:Factures_x0020_clients//*') AND (+adefpat:factureStartDate:['" + str(self.period_start) + "' TO '" + str(self.period_end) +"']) AND =adefpat:factureTypeConvention:'"+ self.type_convention_id.name +"'"
else:
query = "(PATH:'/app:company_home/st:sites/cm:odoo/cm:documentLibrary/cm:Factures_x0020_clients//*') AND (+adefpat:factureStartDate:['" + str(
self.period_start) + "' TO '" + str(
self.period_end) + "'])"
virtual_json = {
"name": "Factures clients",
"nodes": [{
"id": bilan_nb,
"name": "Factures clients",
"description": "Factures clients",
"search": {
"language": "fts-alfresco",
"query": query,
}
},
]
}
return virtual_json
@api.multi
def build_facture_client(self):
virtual_json = self.build_json_file_facture_client("1")
if self.type_convention_id:
file_name = "justifs_factures_clients_" + str(datetime.now().strftime("%y-%m-%d-%H-%M")) + "_" + self.type_convention_id.name
else:
file_name = "justifs_factures_clients_" + str(datetime.now().strftime("%y-%m-%d-%H-%M"))
json_file_cmis = self.env.user.company_id.proof_justif_cmis
return self.create_json_file(file_name, virtual_json, json_file_cmis)
@api.multi
def build_json_file_expense_zip(self, bilan_nb=None):
user_ids = self.env["res.users"].search([("active", "=", True)])
compteur = 0
json_file = []
for user in user_ids:
if user.has_group('base.group_user'):
if self.type_convention_id:
query = "PATH:'/app:company_home/st:sites/cm:odoo/cm:documentLibrary/cm:Justificatifs//*' AND =adefpat:justificatifUtilisateurs:'" + user.login + "' AND (+adefpat:justificatifDate:['" + str(
self.period_start) + "' TO '" + str(
self.period_end) + "']) AND =adefpat: justificatifTypeConvention:'" + self.type_convention_id.name + "'"
else:
query = "PATH:'/app:company_home/st:sites/cm:odoo/cm:documentLibrary/cm:Justificatifs//*' AND =adefpat:justificatifUtilisateurs:'" + user.login + "' AND (+adefpat:justificatifDate:['" + str(
self.period_start) + "' TO '" + str(
self.period_end) + "'])"
compteur += 1
json_file.append({
"id": bilan_nb + str(compteur),
"name": user.name,
"description": user.name,
"search": {
"language": "fts-alfresco",
"query": query,
}
})
virtual_json = {
"name": "Justificatifs Frais",
"nodes": [{
"id": bilan_nb,
"name": "Justificatifs Frais",
"description": "Justificatifs Frais",
"nodes": json_file,
}]
}
return virtual_json
@api.multi
def build_expense_zip(self):
virtual_json = self.build_json_file_expense_zip("1")
if self.type_convention_id:
file_name = "justifs_frais_" + str(
datetime.now().strftime("%y-%m-%d-%H-%M")) + "_" + self.type_convention_id.name
else:
file_name = "justifs_frais_" + str(
datetime.now().strftime("%y-%m-%d-%H-%M"))
json_file_cmis = self.env.user.company_id.proof_justif_cmis
return self.create_json_file(file_name, virtual_json, json_file_cmis)