mirror of
https://github.com/OCA/knowledge.git
synced 2025-07-25 18:08:42 -06:00
First commit Work in Progress
This commit is contained in:
parent
01316a47c2
commit
2fa7baf1b2
BIN
ir_attachment_metadata/.__openerp__.py.swp
Normal file
BIN
ir_attachment_metadata/.__openerp__.py.swp
Normal file
Binary file not shown.
24
ir_attachment_metadata/__init__.py
Normal file
24
ir_attachment_metadata/__init__.py
Normal file
@ -0,0 +1,24 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
###############################################################################
|
||||
#
|
||||
# Module for OpenERP
|
||||
# Copyright (C) 2014 Akretion (http://www.akretion.com).
|
||||
# @author Sébastien BEAU <sebastien.beau@akretion.com>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
import attachment
|
||||
|
44
ir_attachment_metadata/__openerp__.py
Normal file
44
ir_attachment_metadata/__openerp__.py
Normal file
@ -0,0 +1,44 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
###############################################################################
|
||||
#
|
||||
# Module for OpenERP
|
||||
# Copyright (C) 2014 Akretion (http://www.akretion.com).
|
||||
# @author Sébastien BEAU <sebastien.beau@akretion.com>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
{'name': 'ir_attachment_metadata',
|
||||
'version': '0.0.1',
|
||||
'author': 'Akretion',
|
||||
'website': 'www.akretion.com',
|
||||
'license': 'AGPL-3',
|
||||
'category': 'Generic Modules',
|
||||
'description': """
|
||||
|
||||
""",
|
||||
'depends': [
|
||||
'base',
|
||||
],
|
||||
'data': [
|
||||
'attachment_view.xml',
|
||||
],
|
||||
'installable': True,
|
||||
'application': True,
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
42
ir_attachment_metadata/attachment.py
Normal file
42
ir_attachment_metadata/attachment.py
Normal file
@ -0,0 +1,42 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
###############################################################################
|
||||
#
|
||||
# Module for OpenERP
|
||||
# Copyright (C) 2014 Akretion (http://www.akretion.com).
|
||||
# @author Sébastien BEAU <sebastien.beau@akretion.com>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
from openerp import models, fields, api, _
|
||||
from openerp.exceptions import Warning
|
||||
import hashlib
|
||||
|
||||
|
||||
class AttachmentMetadata(models.Model):
|
||||
_inherit = 'ir.attachment'
|
||||
|
||||
internal_hash = fields.Char(store=True, compute='_compute_hash')
|
||||
external_hash = fields.Char()
|
||||
|
||||
|
||||
@api.depends('datas')
|
||||
def _compute_hash(self):
|
||||
if self.datas:
|
||||
print hashlib.md5(self.datas).hexdigest()
|
||||
self.internal_hash = hashlib.md5(self.datas).hexdigest()
|
||||
if self.external_hash and self.internal_hash != self.external_hash:
|
||||
raise Warning(_('File corrupted'), _("Something was wrong with the retreived file, please relaunch the task."))
|
||||
|
18
ir_attachment_metadata/attachment_view.xml
Normal file
18
ir_attachment_metadata/attachment_view.xml
Normal file
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="view_attachment_improved_form" model="ir.ui.view">
|
||||
<field name="model">ir.attachment</field>
|
||||
<field name="inherit_id" ref="base.view_attachment_form" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="url" position="after">
|
||||
<field name="internal_hash"/>
|
||||
<field name="external_hash"/>
|
||||
</field>
|
||||
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
BIN
ir_exchange_file/.__openerp__.py.swp
Normal file
BIN
ir_exchange_file/.__openerp__.py.swp
Normal file
Binary file not shown.
BIN
ir_exchange_file/.attachment.py.swp
Normal file
BIN
ir_exchange_file/.attachment.py.swp
Normal file
Binary file not shown.
BIN
ir_exchange_file/.backend.py.swp
Normal file
BIN
ir_exchange_file/.backend.py.swp
Normal file
Binary file not shown.
26
ir_exchange_file/__init__.py
Normal file
26
ir_exchange_file/__init__.py
Normal file
@ -0,0 +1,26 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
###############################################################################
|
||||
#
|
||||
# Module for OpenERP
|
||||
# Copyright (C) 2014 Akretion (http://www.akretion.com).
|
||||
# @author Sébastien BEAU <sebastien.beau@akretion.com>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
import attachment
|
||||
import location
|
||||
import task
|
||||
|
46
ir_exchange_file/__openerp__.py
Normal file
46
ir_exchange_file/__openerp__.py
Normal file
@ -0,0 +1,46 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
###############################################################################
|
||||
#
|
||||
# Module for OpenERP
|
||||
# Copyright (C) 2014 Akretion (http://www.akretion.com).
|
||||
# @author Sébastien BEAU <sebastien.beau@akretion.com>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
{'name': 'ir_exchange_file',
|
||||
'version': '0.0.1',
|
||||
'author': 'Akretion',
|
||||
'website': 'www.akretion.com',
|
||||
'license': 'AGPL-3',
|
||||
'category': 'Generic Modules',
|
||||
'description': """
|
||||
|
||||
""",
|
||||
'depends': [
|
||||
'base',
|
||||
],
|
||||
'data': [
|
||||
'attachment_view.xml',
|
||||
'location_view.xml',
|
||||
'task_view.xml',
|
||||
],
|
||||
'installable': True,
|
||||
'application': True,
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
37
ir_exchange_file/attachment.py
Normal file
37
ir_exchange_file/attachment.py
Normal file
@ -0,0 +1,37 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
###############################################################################
|
||||
#
|
||||
# Module for OpenERP
|
||||
# Copyright (C) 2014 Akretion (http://www.akretion.com).
|
||||
# @author Sébastien BEAU <sebastien.beau@akretion.com>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
from openerp import models, fields, api, _
|
||||
from openerp.exceptions import Warning
|
||||
import hashlib
|
||||
|
||||
|
||||
class AttachmentMetadata(models.Model):
|
||||
_inherit = 'ir.attachment'
|
||||
|
||||
sync_date = fields.Datetime()
|
||||
parse_state = fields.Selection([
|
||||
('pending', 'Pending'),
|
||||
('failed', 'Failed'),
|
||||
('done', 'Done'),
|
||||
], readonly=True, required=True, default='pending')
|
||||
|
18
ir_exchange_file/attachment_view.xml
Normal file
18
ir_exchange_file/attachment_view.xml
Normal file
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="view_attachment_improved_form" model="ir.ui.view">
|
||||
<field name="model">ir.attachment</field>
|
||||
<field name="inherit_id" ref="base.view_attachment_form" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="url" position="after">
|
||||
<field name="sync_date"/>
|
||||
<field name="parse_state"/>
|
||||
</field>
|
||||
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
34
ir_exchange_file/backend.py
Executable file
34
ir_exchange_file/backend.py
Executable file
@ -0,0 +1,34 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
|
||||
class AbstractConnection(object):
|
||||
|
||||
def __init__(self, host, user, pwd, port=None, allow_dir_creation=False):
|
||||
self.host = host
|
||||
self.user = user
|
||||
self.pwd = pwd
|
||||
self.port = port
|
||||
self.allow_dir_creation = allow_dir_creation
|
||||
self.connection = None
|
||||
|
||||
def connect(self):
|
||||
return NotImplemented
|
||||
|
||||
def close(self):
|
||||
return NotImplemented
|
||||
|
||||
def get(self, filename, path=None):
|
||||
return NotImplemented
|
||||
|
||||
def put(self, fileobject, filename, path=None):
|
||||
return NotImplemented
|
||||
|
||||
def search(self, filename, path=None):
|
||||
return NotImplemented
|
||||
|
||||
def move(self, filename, oldpath, newpath):
|
||||
return NotImplemented
|
||||
|
||||
def rename(self, oldfilename, newfilename, path=None):
|
||||
return NotImplemented
|
BIN
ir_exchange_file/backends/.filestore.py.swp
Normal file
BIN
ir_exchange_file/backends/.filestore.py.swp
Normal file
Binary file not shown.
66
ir_exchange_file/backends/filestore.py
Executable file
66
ir_exchange_file/backends/filestore.py
Executable file
@ -0,0 +1,66 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from ..backend import AbstractConnection
|
||||
import sys
|
||||
import os
|
||||
from tempfile import TemporaryFile
|
||||
|
||||
class AbtractTask()
|
||||
|
||||
def __init__(self, cr, uid):
|
||||
|
||||
|
||||
|
||||
class FileStoreConnection(AbstractTask):
|
||||
_key = "filestore"
|
||||
_name = "Filestore"
|
||||
_synchronize_type = None
|
||||
|
||||
def __init__(self, host, user, pwd, port=None, allow_dir_creation=False):
|
||||
super(FilestoreConnection, self).__init__(host, user, pwd, port, allow_dir_creation)
|
||||
|
||||
def connect(self):
|
||||
return NotImplemented
|
||||
|
||||
def close(self):
|
||||
return NotImplemented
|
||||
|
||||
def get(self, filename, path=None):
|
||||
if path:
|
||||
filepath = "{}/{}".format(path, filename)
|
||||
else:
|
||||
filepath = filename
|
||||
return open(filepath, 'r+b')
|
||||
|
||||
def put(self, fileobject, filename, path=None):
|
||||
if path:
|
||||
filepath = "{}/{}".format(path, filename)
|
||||
else:
|
||||
filepath = filename
|
||||
output = open(filepath, 'w+b')
|
||||
return True
|
||||
|
||||
def search(self, filename, path=None):
|
||||
if path:
|
||||
filepath = "{}/{}".format(path, filename)
|
||||
else:
|
||||
filepath = filename
|
||||
connection_list_result = os.listdir(filepath)
|
||||
return [x for x in connection_list_result if filename in x]
|
||||
|
||||
def move(self, filename, oldpath, newpath):
|
||||
os.rename(
|
||||
os.path.join(oldpath, filename),
|
||||
os.path.join(newpath, filename)
|
||||
)
|
||||
|
||||
def rename(self, oldfilename, newfilename, path=None):
|
||||
return NotImplemented
|
||||
|
||||
class ImportFileStore(FileStoreConnection):
|
||||
_synchronize_type = "import"
|
||||
|
||||
|
||||
def run():
|
||||
|
58
ir_exchange_file/backends/ftp.py
Executable file
58
ir_exchange_file/backends/ftp.py
Executable file
@ -0,0 +1,58 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
|
||||
import sys
|
||||
import os
|
||||
from tempfile import TemporaryFile
|
||||
from ftplib import FTP
|
||||
|
||||
class FTPConnection(object):
|
||||
|
||||
def __init__(self, host, user, pwd, port=None, allow_dir_creation=False):
|
||||
super(FTPConnection, self).__init__(host, user, pwd, port, allow_dir_creation)
|
||||
if not port:
|
||||
self.port = 21
|
||||
self.protocol = "FTP"
|
||||
|
||||
def connect(self):
|
||||
self.connection = FTP(self.location, self.port)
|
||||
self.connection.login(self.user, self.pwd)
|
||||
|
||||
def close(self):
|
||||
self.connection.close()
|
||||
|
||||
def get(self, filename, path=None):
|
||||
if path:
|
||||
filepath = "{}/{}".format(path, filename)
|
||||
else:
|
||||
filepath = filename
|
||||
outfile = TemporaryFile('w+b')
|
||||
self.connection.retrbinary('RETR ' + filepath, outfile.write)
|
||||
return outfile
|
||||
|
||||
def put(self, fileobject, filename, path=None):
|
||||
if path:
|
||||
filepath = "{}/{}".format(path, filename)
|
||||
else:
|
||||
filepath = filename
|
||||
self.connection.storbinary('STOR ' + filepath, fileobject)
|
||||
return True
|
||||
|
||||
def search(self, filename, path=None):
|
||||
if path:
|
||||
filepath = "{}/{}".format(path, filename)
|
||||
else:
|
||||
filepath = filename
|
||||
connection_list_result = self.connection.nlst()
|
||||
return [x for x in connection_list_result if filename in x]
|
||||
|
||||
|
||||
def move(self, filename, oldpath, newpath):
|
||||
self.connection.rename(
|
||||
os.path.join(oldpath, filename),
|
||||
os.path.join(newpath, filename)
|
||||
)
|
||||
|
||||
def rename(self, oldfilename, newfilename, path=None):
|
||||
return NotImplemented
|
59
ir_exchange_file/backends/sftp.py
Executable file
59
ir_exchange_file/backends/sftp.py
Executable file
@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import sys
|
||||
import paramiko
|
||||
import os
|
||||
from tempfile import TemporaryFile
|
||||
|
||||
|
||||
class SFTPConnection(AbstractConnection):
|
||||
|
||||
def __init__(self, host, user, pwd, port=None, allow_dir_creation=False):
|
||||
super(SFTPConnection, self).__init__(host, user, pwd, port, allow_dir_creation)
|
||||
if not port:
|
||||
self.port = 22
|
||||
self.protocol = "STFP"
|
||||
|
||||
def connect(self):
|
||||
self.ssh = paramiko.SSHClient()
|
||||
self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
||||
self.ssh.connect(self.host, self.port, self.user, self.pwd, compress=True)
|
||||
self.connection = self.ssh.open_sftp()
|
||||
|
||||
def close(self):
|
||||
self.connection.close()
|
||||
|
||||
def get(self, filename, path=None):
|
||||
if path:
|
||||
remotefile = "{}/{}".format(path, filename)
|
||||
else:
|
||||
remotefile = filename
|
||||
localfile = filename
|
||||
newfile = open(filename, 'w')
|
||||
self.connection.getfo(remotefile, newfile)
|
||||
return newfile
|
||||
|
||||
def put(self, fileobject, filename, path=None):
|
||||
if path:
|
||||
remotefile = "{}/{}".format(path, filename)
|
||||
else:
|
||||
remotefile = filename
|
||||
if self.allow_dir_creation:
|
||||
self.connection.mkdirs(path)
|
||||
oldfile = open(fileobj, 'r')
|
||||
self.connection.putfo(oldfile, remotefile)
|
||||
|
||||
def search(self, filename, path=None):
|
||||
if path:
|
||||
self.connection.chdir(path)
|
||||
file_list = self.connection.listdir()
|
||||
return [x for x in file_list if filename in x]
|
||||
|
||||
def move(self, filename, oldpath, newpath):
|
||||
self.connection.rename(os.path.join(oldpath, filename), os.path.join(newpath, filename))
|
||||
|
||||
def rename(self, oldfilename, newfilename, path=None):
|
||||
if not path:
|
||||
path = ''
|
||||
self.connection.rename(os.path.join(path, oldfilename), os.path.join(path, newfilename))
|
39
ir_exchange_file/location.py
Normal file
39
ir_exchange_file/location.py
Normal file
@ -0,0 +1,39 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
###############################################################################
|
||||
#
|
||||
# Module for OpenERP
|
||||
# Copyright (C) 2014 Akretion (http://www.akretion.com).
|
||||
# @author Sébastien BEAU <sebastien.beau@akretion.com>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
from openerp import models, fields
|
||||
|
||||
class Location(models.Model):
|
||||
_name = 'ir.location'
|
||||
_description = 'Description'
|
||||
|
||||
name = fields.Char(string='Name')
|
||||
protocol = fields.Selection(selection='_get_protocol')
|
||||
address = fields.Char(string='Address')
|
||||
port = fields.Integer()
|
||||
login = fields.Char()
|
||||
password = fields.Char()
|
||||
|
||||
|
||||
def _get_protocol(self):
|
||||
return [('ftp', 'FTP'), ('sftp', 'SFTP'), ('filestore', 'Filestore')]
|
||||
|
52
ir_exchange_file/location_view.xml
Normal file
52
ir_exchange_file/location_view.xml
Normal file
@ -0,0 +1,52 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="view_location_form" model="ir.ui.view">
|
||||
<field name="model">ir.location</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Location" version="7.0">
|
||||
<sheet>
|
||||
<group col="4">
|
||||
<field name="name" select="1" colspan="4"/>
|
||||
<field name="protocol" colspan="2"/>
|
||||
<newline/>
|
||||
<field name="address" colspan="2"/>
|
||||
<field name="port" colspan="2"/>
|
||||
<field name="login" colspan="4"/>
|
||||
<field name="password" colspan="4"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_location_tree" model="ir.ui.view">
|
||||
<field name="model">ir.location</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Location">
|
||||
<field name="name" select="1"/>
|
||||
<field name="protocol"/>
|
||||
<field name="address"/>
|
||||
<field name="port"/>
|
||||
<field name="login"/>
|
||||
<field name="password"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_location" model="ir.actions.act_window">
|
||||
<field name="name">Locations</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">ir.location</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_id" eval="False"/>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_ir_location"
|
||||
parent="base.next_id_9"
|
||||
sequence="20"
|
||||
action="action_location"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
48
ir_exchange_file/task.py
Normal file
48
ir_exchange_file/task.py
Normal file
@ -0,0 +1,48 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
###############################################################################
|
||||
#
|
||||
# Module for OpenERP
|
||||
# Copyright (C) 2014 Akretion (http://www.akretion.com).
|
||||
# @author Sébastien BEAU <sebastien.beau@akretion.com>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
import sys
|
||||
from openerp import models, fields
|
||||
|
||||
class Task(models.Model):
|
||||
_name = 'ir.location.task'
|
||||
_description = 'Description'
|
||||
|
||||
name = fields.Char()
|
||||
method = fields.Selection([
|
||||
('ftp_import', 'FTP import'),
|
||||
('ftp_export', 'FTP export'),
|
||||
('sftp_import', 'SFTP import'),
|
||||
('sftp_export', 'SFTP export'),
|
||||
('filestore_import', 'Filestore import'),
|
||||
('filestore_export', 'Filestore export'),
|
||||
])
|
||||
filename = fields.Char()
|
||||
filepath = fields.Char()
|
||||
location_id = fields.Many2one('ir.location', string='Location')
|
||||
|
||||
def run(self):
|
||||
connection_class = ...
|
||||
|
||||
method_class = getattr(sys.modules[__name__], self.method)
|
||||
conn = method_class(config)
|
||||
conn.run()
|
47
ir_exchange_file/task_view.xml
Normal file
47
ir_exchange_file/task_view.xml
Normal file
@ -0,0 +1,47 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="view_task_form" model="ir.ui.view">
|
||||
<field name="model">ir.location.task</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Tasks" version="7.0">
|
||||
<sheet>
|
||||
<group col="4">
|
||||
<field name="name" select="1" colspan="4"/>
|
||||
<field name="method" colspan="4"/>
|
||||
<field name="filename" colspan="4"/>
|
||||
<field name="filepath" colspan="4"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_task_tree" model="ir.ui.view">
|
||||
<field name="model">ir.location.task</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Tasks" >
|
||||
<field name="name" select="1"/>
|
||||
<field name="method"/>
|
||||
<field name="filename"/>
|
||||
<field name="filepath"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_task" model="ir.actions.act_window">
|
||||
<field name="name">Tasks</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">ir.location.task</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_id" eval="False"/>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_ir_location_task"
|
||||
parent="base.next_id_9"
|
||||
sequence="20"
|
||||
action="action_task"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
Loading…
Reference in New Issue
Block a user