1
# -*- coding: utf-8 -*-
2
##############################################################################
4
# OpenERP, Open Source Management Solution
5
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
7
# This program is free software: you can redistribute it and/or modify
8
# it under the terms of the GNU Affero General Public License as
9
# published by the Free Software Foundation, either version 3 of the
10
# License, or (at your option) any later version.
12
# This program is distributed in the hope that it will be useful,
13
# but WITHOUT ANY WARRANTY; without even the implied warranty of
14
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
# GNU Affero General Public License for more details.
17
# You should have received a copy of the GNU Affero General Public License
18
# along with this program. If not, see <http://www.gnu.org/licenses/>.
20
##############################################################################
22
from osv import osv, fields
23
import decimal_precision as dp
26
from tools.translate import _
28
from bias_custom_cycna import utils_sql_connection
34
from ftplib import FTP
37
def __init__(self, instancia={}):
39
self.instancia = instancia
40
self.drivername = self.instancia.get('drivername', '')
41
self.host = self.instancia.get('host', '')
42
self.port = self.instancia.get('port', '')
43
self.user = self.instancia.get('user', '')
44
self.password = self.instancia.get('password', '')
45
self.path = self.instancia.get('path', '') # Data FTP
46
self.import_filename = self.instancia.get('import_filename', '')
47
self.import_control_filename = 'EXTDOTICK.LCK'
48
self.connector = self.get_instancia()
50
def get_instancia(self):
52
if self.drivername == 'ftp':
53
connector = self.get_instancia_ftp()
56
def get_instancia_ftp(self):
60
ftp.connect(self.host, self.port)
62
ftp.connect(self.host)
63
ftp.login(self.user, self.password)
68
raise_type = 'Error ! '
70
raise osv.except_osv(_('%s'%raise_type), _('%s'%raise_msg))
73
def ftp_filename_exist(self, filename):
75
if filename in self.connector.nlst():
79
def ftp_filename_push(self, filename, output):
81
r = self.connector.storbinary('STOR ' + filename, output)
83
raise_type = 'Error ! '
85
raise osv.except_osv(_('%s'%raise_type), _('%s'%raise_msg))
88
def ftp_filename_delete(self, filename):
90
if filename in self.connector.nlst():
91
self.connector.delete(filename)
93
raise_type = 'Error ! '
95
raise osv.except_osv(_('%s'%raise_type), _('%s'%raise_msg))
98
def ftp_filename_read(self, filename):
101
self.connector.retrlines("retr " + filename, data.append)
103
raise_type = 'Error ! '
105
raise osv.except_osv(_('%s'%raise_type), _('%s'%raise_msg))
108
def ftp_filename_close(self):
115
class sale_order(osv.osv):
116
_inherit = "sale.order"
117
_description = "Sales Order"
119
'response_ws_interface': fields.text('Automatic Response WS interface', size=254),
120
'state_interface': fields.selection([
121
('pending', 'Pendiente'),
123
], 'Order State', select=True),
124
'action_interface': fields.selection([
125
('cancel', 'Cancel Order'),
126
('close', 'Close Order'),
127
('generate', 'Generate Order'),
128
], 'Action', select=True),
134
class sale_shop(osv.osv):
135
_inherit = "sale.shop"
136
_description = "Sales Shop"
138
'allow_interface_cb': fields.boolean('Allow Interface With Command Batch'),
139
'shop_code': fields.char('Shop Code', size=8, required=False),
140
'cb_server': fields.char('Server Command Batch', size=64, required=False),
141
'cb_port': fields.char('Port Command Batch', size=64, required=False),
142
'cb_login': fields.char('User Command Batch', size=24, required=False),
143
'cb_password': fields.char('Password Command Batch', size=64, required=False),
144
'cb_database': fields.char('Database Command Batch', size=64, required=False),
145
'cb_driver': fields.char('Driver Command Batch', size=64, required=False),
146
'cb_dns': fields.char('DNS Command Batch', size=64, required=False),
148
'ftp_server': fields.char('Server FTP', size=128, required=False),
149
'ftp_port': fields.char('Port FTP', size=64, required=False),
150
'ftp_login': fields.char('User FTP', size=24, required=False),
151
'ftp_password': fields.char('Password FTP', size=64, required=False),
152
'ftp_dir': fields.char('Dir FTP', size=64, required=False),
153
'ftp_import_filename': fields.char('Import File FTP', size=64, required=False),
158
'ftp_server': 'localhost',
160
'ftp_import_filename': 'datacb.txt'
163
def get_connection_ms_cb(self, cr, uid, ids, context=None):
166
test = context.get('test',False)
173
'PASSWORD': "password",
176
'host_is_server': True,
178
'extra_params': "TDS_VERSION=8.0;CHARSET=UTF8",
179
'driver_needs_utf8': True
184
for shop in self.browse(cr, uid, ids, context=context):
185
if shop.allow_interface_cb and not test:
186
DATABASES['default']['OPTIONS']['driver'] = shop.cb_driver
187
DATABASES['default']['HOST'] = shop.cb_server
188
DATABASES['default']['PORT'] = shop.cb_port
189
DATABASES['default']['USER'] = shop.cb_login
190
DATABASES['default']['PASSWORD'] = shop.cb_password
191
DATABASES['default']['NAME'] = shop.cb_database
193
sql_server = utils_sql_connection.SqlServer(DATABASES['default'])
194
cursor = sql_server._cursor()
195
except pyodbc.Error, err:
196
raise osv.except_osv(_('Error'), _('%s'%err))
199
def test_connection_ms_cb(self, cr, uid, ids, context=None):
201
raise_type = 'Error ! '
202
raise_msg = ' No se pudo conectar al servidor ! '
203
cursor = self.get_connection_ms_cb(cr, uid, ids, context=context)
205
noCount = "SET NOCOUNT ON;"
206
query = " SELECT @@VERSION AS 'SQL Server Version'; "
207
cursor.execute(noCount + query)
208
rows=cursor.fetchone()
209
raise_type = "Info !"
210
raise_msg = rows and rows[0] or ''
212
except pyodbc.ProgrammingError:
214
raise osv.except_osv(_('%s'%raise_type), _('%s'%raise_msg))
217
def get_connection_ftp(self, cr, uid, ids, context=None):
218
shop = self.browse(cr, uid, ids[0], context=context)
221
'host': shop.ftp_server,
222
'port': shop.ftp_port,
223
'user': shop.ftp_login,
224
'password': shop.ftp_password,
225
'path': shop.ftp_dir,
226
'import_filename': shop.ftp_import_filename or ''
228
ftp_conn = oerp_ftp(instancia)
231
def test_connection_ftp(self, cr, uid, ids, context=None):
232
raise_type = "Info !"
233
raise_msg = 'Conexion Exitosa'
235
ftp_conn = self.get_connection_ftp( cr, uid, ids, context=context)
236
if not ftp_conn.connector:
237
raise_type = 'Error ! '
238
raise_msg = 'No se puede conectar con el servidor de FTP'
239
raise osv.except_osv(_('%s'%raise_type), _('%s'%raise_msg))
241
# Crea el archivo demo
243
output = cStringIO.StringIO(layout_cb)
244
ftp_conn.ftp_filename_push( 'demo.txt', output)
247
# Borra el archivo demo
248
ftp_conn.ftp_filename_delete('demo.txt')
250
ftp_conn.ftp_filename_close()
251
raise osv.except_osv(_('%s'%raise_type), _('%s'%raise_msg))
256
#----------------------------------------------------------
258
#----------------------------------------------------------
259
class stock_warehouse(osv.osv):
260
_inherit = 'stock.warehouse'
261
_description = "Warehouse"
263
'warehouse_code': fields.char('Warehouse Code', size=8, required=False),
268
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: