Skip to content
Extraits de code Groupes Projets
Valider e9a4adc5 rédigé par Benjamin - Le Filament's avatar Benjamin - Le Filament
Parcourir les fichiers

[update] file upload

parent b42a886a
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -2,3 +2,4 @@ ...@@ -2,3 +2,4 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import models from . import models
from . import wizard
\ No newline at end of file
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
'license': "AGPL-3", 'license': "AGPL-3",
'depends': [ 'depends': [
'cmis', 'cmis',
'cmis_field',
'cmis_web_alf',
'project', 'project',
'adefpat_project', 'adefpat_project',
'adefpat_timesheet', 'adefpat_timesheet',
......
...@@ -16,13 +16,11 @@ class AdefpatHrExpense(models.Model): ...@@ -16,13 +16,11 @@ class AdefpatHrExpense(models.Model):
Ouvre une nouvelle fenêtre avec le fichier Ouvre une nouvelle fenêtre avec le fichier
:return: ir.actions.act_url :return: ir.actions.act_url
""" """
for pp in self: backend = self.env['cmis.backend'].search([], limit=1)
if pp.ex_cmis_folder: for expense in self:
backend_name = self._fields['proof_file'] if expense.proof_file:
folder = backend_name.get_cmis_object(pp) properties = backend.get_cmis_repository().getFolder(
backend = backend_name.get_backend(pp.env) expense.proof_file).getProperties()
repo = backend.get_cmis_repository()
properties = repo.getObject(folder).getProperties()
url = backend.get_content_details_url_from_props(properties) url = backend.get_content_details_url_from_props(properties)
return { return {
'type': 'ir.actions.act_url', 'type': 'ir.actions.act_url',
...@@ -39,5 +37,8 @@ class AdefpatHrExpense(models.Model): ...@@ -39,5 +37,8 @@ class AdefpatHrExpense(models.Model):
Ajoute les propriétés au dossier lors de la création dans Alfresco Ajoute les propriétés au dossier lors de la création dans Alfresco
""" """
return { return {
'cmis:secondaryObjectTypeIds': ['P:adefpat:justificatif'],
'adefpat:justificatifDate': fields.Datetime.to_datetime(self.date).isoformat(),
'adefpat:justificatifTypeConvention': self.type_convention_id.name,
'adefpat:justificatifUtilisateurs': self.user_id.login
} }
# Copyright 2020 Le Filament (<http://www.le-filament.com>) # Copyright 2020 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import api, models from datetime import date
from odoo.addons.cmis_field import fields
from odoo import api, models, fields
class AdefpatAccountAnalyticLine(models.Model): class AdefpatAccountAnalyticLine(models.Model):
_inherit = 'account.analytic.line' _inherit = 'account.analytic.line'
timesheet_file = fields.Char("Justificatif") proof_file = fields.Char("Justificatif")
@api.multi @api.multi
def get_content_details_url(self): def get_content_details_url(self):
...@@ -17,13 +18,11 @@ class AdefpatAccountAnalyticLine(models.Model): ...@@ -17,13 +18,11 @@ class AdefpatAccountAnalyticLine(models.Model):
Ouvre une nouvelle fenêtre avec le fichier Ouvre une nouvelle fenêtre avec le fichier
:return: ir.actions.act_url :return: ir.actions.act_url
""" """
backend = self.env['cmis.backend'].search([], limit=1)
for pp in self: for pp in self:
if pp.acc_cmis_folder: if pp.proof_file:
backend_name = self._fields['timesheet_file'] properties = backend.get_cmis_repository().getFolder(
folder = backend_name.get_cmis_object(pp) pp.proof_file).getProperties()
backend = backend_name.get_backend(pp.env)
repo = backend.get_cmis_repository()
properties = repo.getObject(folder).getProperties()
url = backend.get_content_details_url_from_props(properties) url = backend.get_content_details_url_from_props(properties)
return { return {
'type': 'ir.actions.act_url', 'type': 'ir.actions.act_url',
...@@ -35,10 +34,12 @@ class AdefpatAccountAnalyticLine(models.Model): ...@@ -35,10 +34,12 @@ class AdefpatAccountAnalyticLine(models.Model):
# Common Function # Common Function
# ------------------------------------------------------ # ------------------------------------------------------
def get_file_properties(self): def get_file_properties(self):
# TODO: Renvoyer les propriétés Alfresco
""" """
Ajoute les propriétés au dossier lors de la création dans Alfresco Ajoute les propriétés au dossier lors de la création dans Alfresco
""" """
return { return {
'cmis:secondaryObjectTypeIds': ['P:adefpat:justificatif'],
'adefpat:justificatifDate': fields.Datetime.to_datetime(self.date).isoformat(),
'adefpat:justificatifTypeConvention': self.type_convention_id.name,
'adefpat:justificatifUtilisateurs': self.user_id.login
} }
...@@ -22,10 +22,9 @@ class AdefpatPorteursProjets(models.Model): ...@@ -22,10 +22,9 @@ class AdefpatPorteursProjets(models.Model):
for pp in self: for pp in self:
if pp.pp_cmis_folder: if pp.pp_cmis_folder:
backend_name = self._fields['pp_cmis_folder'] backend_name = self._fields['pp_cmis_folder']
folder = backend_name.get_cmis_object(pp)
backend = backend_name.get_backend(pp.env) backend = backend_name.get_backend(pp.env)
repo = backend.get_cmis_repository() properties = backend.get_cmis_repository().getFolder(
properties = repo.getObject(folder).getProperties() pp.pp_cmis_folder).getProperties()
url = backend.get_content_details_url_from_props(properties) url = backend.get_content_details_url_from_props(properties)
return { return {
'type': 'ir.actions.act_url', 'type': 'ir.actions.act_url',
...@@ -196,15 +195,11 @@ class AlfodooProject(models.Model): ...@@ -196,15 +195,11 @@ class AlfodooProject(models.Model):
# Check de si le répertoire existe # Check de si le répertoire existe
for project in self: for project in self:
# TODO: voir si possible de récupérer le parent_path via le noderef
# Path Initial
path_parts = backend.initial_directory_write.split('/')
# Path parent des projets # Path parent des projets
project_repo = backend.getRepository(project_cmis) parent_path = backend.get_cmis_repository().getFolder(
path_parts.append(project_repo.getRepositoryName()) project_cmis).getPaths()
# Path projet # Path projet
path_proj = path_parts + [project.name] path_proj = parent_path + [project.name]
path = '/'.join(path_proj) path = '/'.join(path_proj)
project.project_cmis_folder = backend.get_folder_by_path(path) project.project_cmis_folder = backend.get_folder_by_path(path)
project.project_cmis_folder.updateProperties( project.project_cmis_folder.updateProperties(
...@@ -279,7 +274,6 @@ class AlfodooProject(models.Model): ...@@ -279,7 +274,6 @@ class AlfodooProject(models.Model):
:return: project_cmis_folder objectId :return: project_cmis_folder objectId
""" """
for project in self: for project in self:
# backend = project.project_cmis_folder.get_backend(env)
backend = self.env['cmis.backend'].sudo().search([]) backend = self.env['cmis.backend'].sudo().search([])
project_path = backend.get_cmis_repository().getFolder( project_path = backend.get_cmis_repository().getFolder(
project.project_cmis_folder).getPaths() project.project_cmis_folder).getPaths()
......
...@@ -11,18 +11,17 @@ ...@@ -11,18 +11,17 @@
<field name="inherit_id" ref="hr_timesheet.hr_timesheet_line_tree"/> <field name="inherit_id" ref="hr_timesheet.hr_timesheet_line_tree"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<field name="unit_amount" position="after"> <field name="unit_amount" position="after">
<field name="timesheet_file" invisible="1"/> <field name="proof_file" invisible="1"/>
<button name="%(adefpat_alfodoo.upload_file_wizard_action)d" <button name="%(adefpat_alfodoo.upload_file_wizard_action)d"
string="Chager un doc" string="Charger un doc"
type="action" type="action"
class="btn-outline-info btn-sm" class="btn-outline-info btn-sm"
attrs="{'invisible': [('timesheet_file', '!=', False)]}"
/> />
<button icon="/adefpat_alfodoo/static/src/img/alfresco-logo-16.png" <button icon="/adefpat_alfodoo/static/src/img/alfresco-logo-16.png"
name="get_content_details_url" name="get_content_details_url"
string="voir" string="voir"
type="object" type="object"
attrs="{'invisible': [('timesheet_file', '=', False)]}" attrs="{'invisible': [('proof_file', '=', False)]}"
/> />
</field> </field>
</field> </field>
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import mimetypes import mimetypes
import base64
from odoo import api, fields, models from odoo import api, fields, models
from odoo.exceptions import UserError from odoo.exceptions import UserError
...@@ -25,7 +26,7 @@ class UploadFileWizard(models.TransientModel): ...@@ -25,7 +26,7 @@ class UploadFileWizard(models.TransientModel):
@return: fonction get_partner_files() de res.partner @return: fonction get_partner_files() de res.partner
""" """
# Get proof folder nodeRef # Get proof folder nodeRef
proof_folder = self.env.company_id.proof_cmis proof_folder = self.env.user.company_id.proof_cmis
if not proof_folder: if not proof_folder:
raise UserError("Le dossier des justificatifs n'est pas configuré") raise UserError("Le dossier des justificatifs n'est pas configuré")
...@@ -41,19 +42,24 @@ class UploadFileWizard(models.TransientModel): ...@@ -41,19 +42,24 @@ class UploadFileWizard(models.TransientModel):
self.env.context.get('active_id') self.env.context.get('active_id')
obj = self.env[context.get('active_model')].browse( obj = self.env[context.get('active_model')].browse(
context.get('active_id')) context.get('active_id'))
# Upload File # Upload File
backend = self.env['cmis.backend'].search([], limit=1) backend = self.env['cmis.backend'].search([], limit=1)
# TODO: voir si le champ est vide et soit mettre à jour soit cherger # TODO: voir si le champ est vide et soit mettre à jour soit cherger
# traiter les 2 types de modèle (timesheet & expense) # traiter les 2 types de modèle (timesheet & expense)
repo = backend.get_cmis_repository().getObject(proof_folder) repo = backend.get_cmis_repository().getObject(proof_folder)
if not obj.proof_file:
file = repo.createDocument( file = repo.createDocument(
name=self.filename, name=self.filename,
properties=obj.get_file_properties(), properties=obj.get_file_properties(),
contentFile=self.file.decode('utf-8'), contentString=self.file,
contentType=content_type contentType=content_type,
) )
file_id = file.getProperties().get('cmis:objectId')
obj.proof_file = file.getObjectId()
# TODO: Mettre à jour le champ avec le NodeRef # TODO: Mettre à jour le champ avec le NodeRef
print(file)
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter