Skip to content
Extraits de code Groupes Projets
Valider 2924a27f rédigé par Benjamin's avatar Benjamin
Parcourir les fichiers

ajout lecture ftp

parent ec5e5b24
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -21,6 +21,21 @@ Fonctionnement
Un cron quotidien permet de lire les fichiers, et pour chaque ligne de créer ou mettre à jour un enregistrement enregistrement.
Usage
=====
Les données suivantes sont à renseigner dans le fichier de configuration d'Odoo :
* *tantiemo_ftp_login* : login de connexion au serveur FTP
* *tantiemo_ftp_password* : password de connexion au serveur FTP
Les données suivantes sont présentes dans la table **ir.config.parameter** :
* *tantiemo_filename* : nom du fichir à importer
* *tantiemo_url* : URL du serveur FTP
* *tantiemo_path* : path du dossier dans lequel se trouve le fichier CSV
Credits
=======
......
......@@ -12,7 +12,7 @@
"views/res_partner.xml",
"views/scop_financial_tools.xml",
"datas/cron_tantiemo.xml",
# "datas/ir_config_parameter.xml",
"datas/ir_config_parameter.xml",
],
'installable': True,
'auto_install': False,
......
<?xml version="1.0" encoding="utf-8"?>
<odoo noupdate="1">
<odoo noupdate="0">
<record id="tantiemo_login" model="ir.config_parameter">
<field name="key">tantiemo.login</field>
<field name="value">login</field>
</record>
<record id="tantiemo_password" model="ir.config_parameter">
<field name="key">tantiemo.password</field>
<field name="value">password</field>
<record id="tantiemo_filename" model="ir.config_parameter">
<field name="key">tantiemo.filename</field>
<field name="value">tantiemo.csv</field>
</record>
<record id="tantiemo_url" model="ir.config_parameter">
<field name="key">tantiemo.url</field>
<field name="value">http://178.208.15.181:60853/</field>
<field name="value">ftp.les-scop.coop</field>
</record>
<record id="tantiemo_path" model="ir.config_parameter">
<field name="key">tantiemo.path</field>
<field name="value">tantiemo</field>
</record>
</odoo>
\ No newline at end of file
......@@ -2,9 +2,12 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import csv
import os
import io
from urllib.request import urlopen
from odoo import models, fields
from ftplib import FTP
from odoo import models, fields, tools, exceptions
class ScopFinancialTools(models.Model):
......@@ -41,43 +44,53 @@ class ScopFinancialTools(models.Model):
#######################################################
def import_data(self):
csv_file = open('/home/odoo/tantiemo.csv', 'rt', encoding="ISO-8859-1")
# csv_file = open('/home/odoo/tantiemo.csv', 'rb')
# Requete
header = [
'riga_id', 'nom_scop', 'outil', 'type_intervention',
'typo_financement', 'no_intervention', 'montant_accorde',
'montant_notifie', 'montant_verse', 'montant_solde',
'date_decision', 'date_versement', 'date_fin', 'encours_total',
'encours_garanti', 'taux_provision', 'date_notification',
'date_convention']
param = self.env['ir.config_parameter'].sudo()
ftp_login = tools.config['tantiemo_ftp_login']
ftp_pass = tools.config['tantiemo_ftp_password']
# Connexion FTP
try:
# Connexion ftp
ftp = FTP(param.get_param('tantiemo.url'), ftp_login, ftp_pass)
# Changement de path
ftp.cwd(param.get_param('tantiemo.path'))
# Lecture du fichier
csv_file = io.BytesIO()
ftp.retrbinary(
"RETR " + param.get_param('tantiemo.filename'),
csv_file.write)
csv_file.seek(0)
except Exception as e:
ftp.quit()
raise exceptions.Warning(e)
# Suppression des lignes
self.unlink()
try:
# Création du lecteur CSV.
reader = csv.reader(csv_file, delimiter=';')
reader = csv.DictReader(
io.TextIOWrapper(csv_file, encoding="ISO-8859-1", newline=None),
delimiter=';')
# Lecture de chaque ligne
for row in reader:
vals_financial_tools = {}
for index, item in enumerate(row):
vals_financial_tools[header[index]] = item
if not item:
vals_financial_tools[header[index]] = False
else:
vals_financial_tools[header[index]] = item
vals_financial_tools = row
# Traitement des valeurs nulles
self._check_empty(vals_financial_tools)
# récupération du dossier
partner_id = self.env['res.partner'].search([
['is_company', '=', True],
['id_riga', '=', vals_financial_tools['riga_id']]])
# si le dossier n'existe pas, on le crée,
# si il existe, on le met à jour
if partner_id:
vals_financial_tools.update({'partner_id': partner_id.id})
self.create(vals_financial_tools)
finally:
csv_file.close()
ftp.quit()
def _check_empty(self, dict_value):
for key, value in dict_value.items():
if not value:
dict_value[key] = False
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_scop_financial_tools,access_scop_financial_tools,model_scop_financial_tools,base.group_user,1,0,0,0
access_financial_tools_group_user,access_financial_tools_group_user,model_scop_financial_tools,base.group_user,1,0,0,0
admin_financial_tools_group_user,access_financial_tools_group_user,model_scop_financial_tools,cgscop_partner.group_cg_administrator,1,1,1,1
\ No newline at end of file
......@@ -10,7 +10,7 @@
<field name="name">scop.financial.tools.tree</field>
<field name="model">scop.financial.tools</field>
<field name="arch" type="xml">
<tree string="Financial Tools Types">
<tree string="Financial Tools Types" create="false" edit="false" delete="false">
<field name="outil"/>
<field name="no_intervention"/>
<field name="type_intervention"/>
......
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