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

[add] file deletion

parent 3a8b4982
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -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).
from odoo import api, models, fields from odoo import api, models, fields
from odoo.exceptions import UserError
class AdefpatHrExpense(models.Model): class AdefpatHrExpense(models.Model):
...@@ -9,6 +10,21 @@ class AdefpatHrExpense(models.Model): ...@@ -9,6 +10,21 @@ class AdefpatHrExpense(models.Model):
proof_file = fields.Char("Justificatif") proof_file = fields.Char("Justificatif")
# ------------------------------------------------------
# Override ORM
# ------------------------------------------------------
@api.multi
def unlink(self):
for espense in self:
if espense.proof_file:
raise UserError(
"Un document est attaché à cette note de frais, "
"veuillez le supprimer avant de supprimer la note de frais.")
return super(AdefpatHrExpense, self).unlink()
# ------------------------------------------------------
# Button Function
# ------------------------------------------------------
@api.multi @api.multi
def get_content_details_url(self): def get_content_details_url(self):
# TODO: Refaire la fonction sans le type CMIS Folder # TODO: Refaire la fonction sans le type CMIS Folder
...@@ -28,6 +44,18 @@ class AdefpatHrExpense(models.Model): ...@@ -28,6 +44,18 @@ class AdefpatHrExpense(models.Model):
'target': 'new', 'target': 'new',
} }
def delete_file(self):
backend = self.env['cmis.backend'].search([], limit=1)
try:
file = backend.get_cmis_repository().getObject(
self.proof_file
)
file.delete()
self.proof_file = False
except Exception as e:
self.proof_file = False
# raise UserError(json.loads(e.details).get('message'))
# ------------------------------------------------------ # ------------------------------------------------------
# Common Function # Common Function
# ------------------------------------------------------ # ------------------------------------------------------
...@@ -39,6 +67,6 @@ class AdefpatHrExpense(models.Model): ...@@ -39,6 +67,6 @@ class AdefpatHrExpense(models.Model):
return { return {
'cmis:secondaryObjectTypeIds': ['P:adefpat:justificatif'], 'cmis:secondaryObjectTypeIds': ['P:adefpat:justificatif'],
'adefpat:justificatifDate': fields.Datetime.to_datetime(self.date).isoformat(), 'adefpat:justificatifDate': fields.Datetime.to_datetime(self.date).isoformat(),
'adefpat:justificatifTypeConvention': self.type_convention_id.name, 'adefpat:justificatifTypeConvention': self.type_convention_id.name if self.type_convention_id.name else '',
'adefpat:justificatifUtilisateurs': self.employee_id.user_id.login 'adefpat:justificatifUtilisateurs': self.employee_id.user_id.login
} }
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
from datetime import date from datetime import date
from odoo import api, models, fields from odoo import api, models, fields
from odoo.exceptions import UserError
class AdefpatAccountAnalyticLine(models.Model): class AdefpatAccountAnalyticLine(models.Model):
...@@ -11,6 +12,21 @@ class AdefpatAccountAnalyticLine(models.Model): ...@@ -11,6 +12,21 @@ class AdefpatAccountAnalyticLine(models.Model):
proof_file = fields.Char("Justificatif") proof_file = fields.Char("Justificatif")
# ------------------------------------------------------
# Override ORM
# ------------------------------------------------------
@api.multi
def unlink(self):
for line in self:
if line.proof_file:
raise UserError(
"Un document est attaché à cette ligne, "
"veuillez le supprimer avant de supprimer la ligne.")
return super(AdefpatAccountAnalyticLine, self).unlink()
# ------------------------------------------------------
# Button Function
# ------------------------------------------------------
@api.multi @api.multi
def get_content_details_url(self): def get_content_details_url(self):
# TODO: Refaire la fonction sans le type CMIS Folder # TODO: Refaire la fonction sans le type CMIS Folder
...@@ -30,6 +46,18 @@ class AdefpatAccountAnalyticLine(models.Model): ...@@ -30,6 +46,18 @@ class AdefpatAccountAnalyticLine(models.Model):
'target': 'new', 'target': 'new',
} }
def delete_file(self):
backend = self.env['cmis.backend'].search([], limit=1)
try:
file = backend.get_cmis_repository().getObject(
self.proof_file
)
file.delete()
self.proof_file = False
except:
self.proof_file = False
# raise UserError("Le fichier est introuvable sur Alfresco")
# ------------------------------------------------------ # ------------------------------------------------------
# Common Function # Common Function
# ------------------------------------------------------ # ------------------------------------------------------
......
...@@ -62,9 +62,10 @@ ...@@ -62,9 +62,10 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree string="Documents" editable="top"> <tree string="Documents" editable="top">
<field name="name"/> <field name="name"/>
<field name="parent_id"/> <field name="parent_id" options="{ 'no_create': 1 }"/>
<field name="path"/> <field name="path"/>
<field name="specifique"/> <field name="specifique"/>
<field name="model_id" attrs="{'required': [('specifique', '=', True)]}"/>
</tree> </tree>
</field> </field>
</record> </record>
......
...@@ -16,6 +16,10 @@ ...@@ -16,6 +16,10 @@
type="action" type="action"
class="oe_highlight" class="oe_highlight"
attrs="{'invisible': [('proof_file', '!=', False)]}"/> attrs="{'invisible': [('proof_file', '!=', False)]}"/>
<button name="delete_file"
string="Supprimer le justificatif"
type="object"
attrs="{'invisible': [('proof_file', '=', False)]}"/>
<field name="proof_file" invisible="1"/> <field name="proof_file" invisible="1"/>
<button name="get_content_details_url" <button name="get_content_details_url"
string="Voir le justificatif" string="Voir le justificatif"
......
...@@ -13,14 +13,21 @@ ...@@ -13,14 +13,21 @@
<field name="unit_amount" position="after"> <field name="unit_amount" position="after">
<field name="proof_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="Charger un doc" string="Justif de présence"
type="action" type="action"
class="btn-outline-info btn-sm" class="btn-outline-info btn-sm"
attrs="{'invisible': ['|',('proof_file', '!=', False),('id', '=', False)]}" attrs="{'invisible': [('proof_file', '!=', False)]}"
/>
<button icon="fa-times"
name="delete_file"
string="Supprimer le fichier"
class="text-danger"
type="object"
attrs="{'invisible': [('proof_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 le fichier dans Alfresco"
type="object" type="object"
attrs="{'invisible': [('proof_file', '=', False)]}" attrs="{'invisible': [('proof_file', '=', False)]}"
/> />
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
<!-- Ajoute l'onglet Documents dans la vue projet --> <!-- Ajoute l'onglet Documents dans la vue projet -->
<xpath expr="//notebook" position="inside"> <xpath expr="//notebook" position="inside">
<page string="Documents" groups="base.group_user"> <page string="Documents" groups="base.group_user">
<field name="task_cmis_folder" <field name="cmis_folder"
canCreateFolder="0" canCreateFolder="0"
canCreateDocument="0" canCreateDocument="0"
canImportNewVersion="0" canImportNewVersion="0"
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
import mimetypes import mimetypes
import base64 import base64
import json
from odoo import api, fields, models from odoo import api, fields, models
from odoo.exceptions import UserError from odoo.exceptions import UserError
...@@ -45,19 +46,23 @@ class UploadFileWizard(models.TransientModel): ...@@ -45,19 +46,23 @@ class UploadFileWizard(models.TransientModel):
# 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
# 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: if not obj.proof_file:
try:
filename = (fields.Date.to_string(obj.date).replace('-', '') +
'-' + str(obj.id) + ' - ' +
obj.employee_id.user_id.name + ' - ' + self.filename)
file = repo.createDocument( file = repo.createDocument(
name=self.filename, name=filename,
properties=obj.get_file_properties(), properties=obj.get_file_properties(),
contentFile=base64.b64decode(self.file), contentFile=base64.b64decode(self.file),
contentType=content_type contentType=content_type
) )
file_id = file.getProperties().get('cmis:objectId') file_id = file.getProperties().get('cmis:objectId')
obj.proof_file = file.getObjectId() obj.proof_file = file.getObjectId()
except Exception as e:
raise UserError(json.loads(e.details).get('message'))
# TODO: Mettre à jour le champ avec le NodeRef # TODO: Mettre à jour le champ avec le NodeRef
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