~eduardo-bayardo-bias/openobject-addons/addons_interface

« back to all changes in this revision

Viewing changes to bias_custom_cycna/command_batch_interface/sale.py

  • Committer: Eduardo Bayardo
  • Date: 2017-07-27 22:08:40 UTC
  • Revision ID: eduardo.bayardo@bias.com.mx-20170727220840-2g212n522yy1dx5a
init

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# -*- coding: utf-8 -*-
 
2
##############################################################################
 
3
#
 
4
#    OpenERP, Open Source Management Solution
 
5
#    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
 
6
#
 
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.
 
11
#
 
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.
 
16
#
 
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/>.
 
19
#
 
20
##############################################################################
 
21
 
 
22
from osv import osv, fields
 
23
import decimal_precision as dp
 
24
import math
 
25
import re
 
26
from tools.translate import _
 
27
import base64
 
28
from bias_custom_cycna import utils_sql_connection
 
29
 
 
30
import cStringIO
 
31
 
 
32
import os, sys
 
33
import pyodbc
 
34
from ftplib import FTP
 
35
 
 
36
class oerp_ftp():
 
37
    def __init__(self, instancia={}):
 
38
 
 
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()
 
49
 
 
50
    def get_instancia(self):
 
51
        connector = False
 
52
        if self.drivername == 'ftp':
 
53
            connector = self.get_instancia_ftp()
 
54
        return connector
 
55
 
 
56
    def get_instancia_ftp(self):
 
57
        try:
 
58
            ftp = FTP()
 
59
            if self.port != '21':
 
60
                ftp.connect(self.host, self.port)
 
61
            else:
 
62
                ftp.connect(self.host)
 
63
            ftp.login(self.user, self.password)
 
64
            if self.path:
 
65
                ftp.cwd(self.path)
 
66
            connector = ftp
 
67
        except Exception, e:
 
68
            raise_type = 'Error ! '
 
69
            raise_msg = '%s'%(e)
 
70
            raise osv.except_osv(_('%s'%raise_type), _('%s'%raise_msg))
 
71
        return connector
 
72
 
 
73
    def ftp_filename_exist(self, filename):
 
74
        res = False
 
75
        if filename in self.connector.nlst():
 
76
            res = True
 
77
        return res
 
78
 
 
79
    def ftp_filename_push(self, filename, output):
 
80
        try:
 
81
            r = self.connector.storbinary('STOR ' + filename, output)
 
82
        except Exception, e:
 
83
            raise_type = 'Error ! '
 
84
            raise_msg = '%s'%(e)
 
85
            raise osv.except_osv(_('%s'%raise_type), _('%s'%raise_msg))
 
86
        return True
 
87
 
 
88
    def ftp_filename_delete(self, filename):
 
89
        try:
 
90
            if filename in self.connector.nlst():
 
91
                self.connector.delete(filename)
 
92
        except Exception, e:
 
93
            raise_type = 'Error ! '
 
94
            raise_msg = '%s'%(e)
 
95
            raise osv.except_osv(_('%s'%raise_type), _('%s'%raise_msg))
 
96
        return True
 
97
 
 
98
    def ftp_filename_read(self, filename):
 
99
        data = []
 
100
        try:
 
101
            self.connector.retrlines("retr " + filename, data.append)
 
102
        except Exception, e:
 
103
            raise_type = 'Error ! '
 
104
            raise_msg = '%s'%(e)
 
105
            raise osv.except_osv(_('%s'%raise_type), _('%s'%raise_msg))
 
106
        return data
 
107
 
 
108
    def ftp_filename_close(self):
 
109
        ftp = self.connector
 
110
        ftp.quit()
 
111
        return True
 
112
 
 
113
 
 
114
# Sale Order
 
115
class sale_order(osv.osv):
 
116
    _inherit = "sale.order"
 
117
    _description = "Sales Order"
 
118
    _columns = {
 
119
        'response_ws_interface': fields.text('Automatic Response WS interface', size=254),
 
120
        'state_interface': fields.selection([
 
121
            ('pending', 'Pendiente'),
 
122
            ('done', 'Done'),
 
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),
 
129
    }
 
130
 
 
131
sale_order()
 
132
 
 
133
# Sale Shop
 
134
class sale_shop(osv.osv):
 
135
    _inherit = "sale.shop"
 
136
    _description = "Sales Shop"
 
137
    _columns = {
 
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),
 
147
 
 
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),
 
154
 
 
155
    }
 
156
 
 
157
    _defaults = {
 
158
        'ftp_server': 'localhost',
 
159
        'ftp_port': 21,
 
160
        'ftp_import_filename': 'datacb.txt'
 
161
    }
 
162
 
 
163
    def get_connection_ms_cb(self, cr, uid, ids, context=None):
 
164
        if context is None:
 
165
            context = {}
 
166
        test = context.get('test',False)
 
167
        DATABASES = {
 
168
           'default': {
 
169
               'ENGINE': "pyodbc",
 
170
               'HOST': "localhost",
 
171
               'PORT': '1433',
 
172
               'USER': "username",
 
173
               'PASSWORD': "password",
 
174
               'NAME': "database",
 
175
               'OPTIONS': {
 
176
                   'host_is_server': True,
 
177
                   'driver': 'FreeTDS',
 
178
                   'extra_params': "TDS_VERSION=8.0;CHARSET=UTF8",
 
179
                   'driver_needs_utf8': True
 
180
               },
 
181
           }
 
182
        }
 
183
        cursor = None
 
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
 
192
                try:
 
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))
 
197
        return cursor
 
198
 
 
199
    def test_connection_ms_cb(self, cr, uid, ids, context=None):
 
200
        res = False
 
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)
 
204
        try:
 
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 ''
 
211
            res = True
 
212
        except pyodbc.ProgrammingError:
 
213
            res = False
 
214
        raise osv.except_osv(_('%s'%raise_type), _('%s'%raise_msg))
 
215
        return res
 
216
 
 
217
    def get_connection_ftp(self, cr, uid, ids, context=None):
 
218
        shop = self.browse(cr, uid, ids[0], context=context)
 
219
        instancia = {
 
220
            'drivername': 'ftp',
 
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 ''
 
227
        }
 
228
        ftp_conn = oerp_ftp(instancia)
 
229
        return ftp_conn
 
230
 
 
231
    def test_connection_ftp(self, cr, uid, ids, context=None):
 
232
        raise_type = "Info !"
 
233
        raise_msg = 'Conexion Exitosa'
 
234
 
 
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))
 
240
 
 
241
        # Crea el archivo demo        
 
242
        layout_cb = 'demo'
 
243
        output = cStringIO.StringIO(layout_cb)
 
244
        ftp_conn.ftp_filename_push( 'demo.txt', output)
 
245
        output.close()
 
246
 
 
247
        # Borra el archivo demo
 
248
        ftp_conn.ftp_filename_delete('demo.txt')
 
249
 
 
250
        ftp_conn.ftp_filename_close()
 
251
        raise osv.except_osv(_('%s'%raise_type), _('%s'%raise_msg))
 
252
        return True
 
253
 
 
254
sale_shop()
 
255
 
 
256
#----------------------------------------------------------
 
257
# Stock Warehouse
 
258
#----------------------------------------------------------
 
259
class stock_warehouse(osv.osv):
 
260
    _inherit = 'stock.warehouse'
 
261
    _description = "Warehouse"
 
262
    _columns = {
 
263
        'warehouse_code': fields.char('Warehouse Code', size=8, required=False),
 
264
    }
 
265
 
 
266
stock_warehouse()
 
267
 
 
268
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: