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

[init] module init

parent
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
.*
*.pyc
!.gitignore
Ce diff est replié.
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: http://www.gnu.org/licenses/agpl
:alt: License: AGPL-3
========================
Import CSV into Database
========================
Description
===========
This module allows to insert CSV lines into Postgre Database.
Credits
=======
Contributors
------------
* Benjamin Rivier <benjamin@le-filament.com>
Maintainer
----------
.. image:: https://le-filament.com/img/logo-lefilament.png
:alt: Le Filament
:target: https://le-filament.com
This module is maintained by Le Filament
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import wizard
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
'name': 'Import CSV into Database',
'version': '10.0.1.0.O',
'summary': 'Imports CSV data directly into database',
'author': 'LE FILAMENT',
'license': 'AGPL-3',
'website': 'https://le-filament.com',
'contributors': [
'Benjamin Rivier <benjamin@le-filament.com>',
],
'depends': ['base'],
'data': [
'wizard/import_csv_db.xml'
],
'installable': True,
'auto_install': False,
}
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
static/desctiption/icon.png

8,95 ko

# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import import_csv_db
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
import csv
import base64
import mimetypes
from io import StringIO
from odoo import fields, models, api
from odoo.exceptions import UserError
from odoo.tools.mimetypes import guess_mimetype
class ImportCsvDb(models.TransientModel):
_name = 'import.csv.db'
_description = 'Import CSV into Database'
file = fields.Binary('CSV File', required=True)
filename = fields.Char('Filename')
model_id = fields.Many2one(
comodel_name='ir.model',
string='Model Name',
required=True
)
def load_data(self):
"""
Load CSV File and write datas into the database
:return:
"""
# Get Mimetype
content_type = mimetypes.guess_type(self.filename)
if content_type[0]:
content_type = content_type[0]
else:
content_type = guess_mimetype(self.file)
if content_type != 'text/csv':
raise UserError('This file does not seem to be a CSV file')
file = StringIO(base64.b64decode(self.file).decode('UTF-8'))
reader = csv.reader(file, delimiter=',')
csv_header = reader.__next__()
headers = list('"' + h + '"' for h in csv_header)
table_name = self.env[self.model_id.model]._table
errors = []
for row in reader:
counter = 1
try:
req = "INSERT INTO %s(%s) VALUES (%s)" % (
table_name,
','.join(headers),
','.join(['NULL' if v == '' else "'" + v + "'" for v in row]),
)
self.env.cr.execute(req)
counter += 1
except Exception as e:
errors.append("Line: " + str(counter) + ' - ' + str(e))
counter += 1
print(counter)
return False
print(' il y a eu # erreurs : ' + str(len(errors)))
print(str(counter) + ' LIGNES IMPORTEES')
# return True
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2020 Le Filament
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<data>
<!-- WIZARD FORM -->
<record id="import_csv_db_view_form" model="ir.ui.view">
<field name="name">upload.file.wizard.form</field>
<field name="model">import.csv.db</field>
<field name="arch" type="xml">
<form string="Load File">
<group>
<field name="model_id"/>
<field name="filename" invisible="1"/>
<field name="file" filename="filename" required="1"/>
</group>
<footer>
<button class="btn btn-sm btn-primary" name="load_data" string="Load Data" type="object"/>
<button class="btn btn-sm btn-default" special="cancel" string="Fermer"/>
</footer>
</form>
</field>
</record>
<record id="import_csv_db_wizard_action" model="ir.actions.act_window">
<field name="name">Load CSV Data</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">import.csv.db</field>
<field name="view_mode">form</field>
<field name="view_id" ref="import_csv_db_view_form"/>
<field name="target">new</field>
</record>
<!-- This Menu Item must have a parent and an action -->
<menuitem id="import_csv_db_menu"
parent="base.menu_custom"
action="import_csv_db_wizard_action"
sequence="99"/>
</data>
</odoo>
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