avanzosc team mailing list archive
-
avanzosc team
-
Mailing list archive
-
Message #00501
[Merge] lp:~mikelarregi/avanzosc/dos_production_lots_import into lp:~avanzosc-security-team/avanzosc/72horas
mikel arregi has proposed merging lp:~mikelarregi/avanzosc/dos_production_lots_import into lp:~avanzosc-security-team/avanzosc/72horas.
Requested reviews:
Avanzosc_security (avanzosc-security-team)
For more details, see:
https://code.launchpad.net/~mikelarregi/avanzosc/dos_production_lots_import/+merge/224291
dos_production_lots_import
--
https://code.launchpad.net/~mikelarregi/avanzosc/dos_production_lots_import/+merge/224291
Your team Avanzosc_security is requested to review the proposed merge of lp:~mikelarregi/avanzosc/dos_production_lots_import into lp:~avanzosc-security-team/avanzosc/72horas.
=== modified file 'dos_production_lots_import/__init__.py'
--- dos_production_lots_import/__init__.py 2014-06-11 10:23:47 +0000
+++ dos_production_lots_import/__init__.py 2014-06-24 13:09:55 +0000
@@ -19,6 +19,6 @@
#
##############################################################################
-import wizard
+from . import wizard
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
=== modified file 'dos_production_lots_import/__openerp__.py'
--- dos_production_lots_import/__openerp__.py 2014-06-11 10:23:47 +0000
+++ dos_production_lots_import/__openerp__.py 2014-06-24 13:09:55 +0000
@@ -21,19 +21,14 @@
{
- "name" : "DOS Production Lots Import",
- "version" : "1.0",
- "author" : "DOS",
- "category" : "Production,Sale,Stock",
- "website" : "www.dos-sl.es",
- "description": "This module allows you import lots of production from a csv file.",
- "depends" : ["sale", "stock", "product"],
- "init_xml" : [],
- "update_xml" : [
- 'wizard/production_lots_import_view.xml',
- ],
- "active": False,
+ "name": "DOS Production Lots Import",
+ "version": "1.0",
+ "author": "DOS",
+ "category": "Production,Sale,Stock",
+ "website": "www.dos-sl.es",
+ "description": ("This module allows you import "
+ "lots of production from a csv file."),
+ "depends": ["sale", "stock", "product"],
+ "data": ['wizard/production_lots_import_view.xml'],
"installable": True
}
-
-
=== modified file 'dos_production_lots_import/wizard/__init__.py'
--- dos_production_lots_import/wizard/__init__.py 2014-06-11 10:23:47 +0000
+++ dos_production_lots_import/wizard/__init__.py 2014-06-24 13:09:55 +0000
@@ -19,8 +19,6 @@
#
##############################################################################
-import production_lots_import
+from . import production_lots_import
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
-
=== modified file 'dos_production_lots_import/wizard/production_lots_import.py'
--- dos_production_lots_import/wizard/production_lots_import.py 2014-06-11 10:23:47 +0000
+++ dos_production_lots_import/wizard/production_lots_import.py 2014-06-24 13:09:55 +0000
@@ -19,17 +19,16 @@
#
##############################################################################
-import tools
import base64
import logging
-import pooler
import csv
import time
-from tools.translate import _
+from openerp.tools.translate import _
from tempfile import TemporaryFile
-from osv import osv, fields
-
-class production_lots_import(osv.osv_memory):
+from openerp.orm import orm, fields
+
+
+class ProductionLotsImport(orm.TransientModel):
""" Production Lots Import """
_name = "production.lots.import"
@@ -37,80 +36,68 @@
_inherit = "ir.wizard.screen"
_columns = {
- 'product_type': fields.selection([('sim', 'Tarjeta SIM'), ('enlace', 'Enlace')], 'Product type'),
+ 'product_type': fields.selection([('sim', 'Tarjeta SIM'),
+ ('enlace', 'Enlace')],
+ 'Product type'),
'data': fields.binary('File', required=True),
- }
-
-
+ }
+
def is_date(self, date):
try:
- if date != '':
- valid_date = time.strptime(date, '%Y-%m-%d')
- return True
-
+ if date != '':
+ valid_date = time.strptime(date, '%Y-%m-%d')
+ return True
except ValueError:
- return False
-
+ return False
+
def verify_line(self, dic):
-
if not ('icc' in dic and 'telefono' in dic):
return False
-
if 'fecha_alta' in dic and not self.is_date(dic['fecha_alta']):
return False
-
- if 'fecha_activacion' in dic and not self.is_date(dic['fecha_activacion']):
+ if ('fecha_activacion' in dic
+ and not self.is_date(dic['fecha_activacion'])):
return False
-
return True
-
-
- def get_production_lot_id(self, cr, uid, dic, location_id, location_dest_id):
-
- db_name = cr.dbname
- pool = pooler.get_pool(db_name)
- production_lot_obj = pool.get('stock.production.lot')
- stock_move_obj = pool.get('stock.move')
+
+ def get_production_lot_id(self, cr, uid, dic, location_id,
+ location_dest_id):
+ production_lot_obj = self.pool['stock.production.lot']
+ stock_move_obj = self.pool['stock.move']
name = None
result = None
-
if 'icc' in dic and dic['icc']:
name = dic['icc']
-
if name:
- product_lot_ids = production_lot_obj.search(cr, uid, [('name', '=', name), ('stock_available', '>', 0)])
-
+ lot_info = [('name', '=', name), ('stock_available', '>', 0)]
+ product_lot_ids = production_lot_obj.search(cr, uid, lot_info,
+ context=context)
if product_lot_ids:
product_lot_id = product_lot_ids[0]
-
- #Comprobamos que el lote seleccionado no se haya traspasado de ubicación
- stock_move_ids = stock_move_obj.search(cr, uid, [('prodlot_id', '=', product_lot_id), ('location_id', '=', location_id), ('location_dest_id', '=', location_dest_id)])
-
+ # Comprobamos que el lote seleccionado
+ # no se haya traspasado de ubicación
+ move_info = [('prodlot_id', '=', product_lot_id),
+ ('location_id', '=', location_id),
+ ('location_dest_id', '=', location_dest_id)]
+ stock_move_ids = stock_move_obj.search(cr, uid, move_info,
+ context=context)
if not stock_move_ids:
result = product_lot_id
-
return result
-
-
- def load_data(self, cr, fileobj, fileformat, header_line_columns, context):
-
+
+ def load_data(self, cr, fileobj, fileformat, header_line_columns,
+ context):
"""Read file and save"""
logger = logging.getLogger('production_lot_import')
-
if context is None:
context = {}
-
- db_name = cr.dbname
- pool = pooler.get_pool(db_name)
- stock_warehouse_obj = pool.get('stock.warehouse')
- stock_picking_obj = pool.get('stock.picking')
- stock_move_obj = pool.get('stock.move')
- stock_prod_lot_obj = pool.get('stock.production.lot')
- product_obj = pool.get('product.product')
-
+ stock_warehouse_obj = self.pool['stock.warehouse']
+ stock_picking_obj = self.pool['stock.picking']
+ stock_move_obj = self.pool['stock.move']
+ stock_prod_lot_obj = self.pool['stock.production.lot']
+ product_obj = self.pool['product.product']
try:
uid = 1
-
# Empezamos a leer fichero
fileobj.seek(0)
if fileformat == 'csv':
@@ -120,122 +107,122 @@
else:
logger.error('Bad file format: %s', fileformat)
raise Exception(_('Bad file format'))
-
-
- #Comprobamos que hay al menos un almacen definido
+ # Comprobamos que hay al menos un almacen definido
stock_warehouse = None
stock_warehouse_ids = stock_warehouse_obj.search(cr, uid, [])
-
- for warehouse in stock_warehouse_obj.browse(cr, uid, stock_warehouse_ids, context):
+ for warehouse in stock_warehouse_obj.browse(cr, uid,
+ stock_warehouse_ids,
+ context):
stock_warehouse = warehouse
break
-
if not stock_warehouse:
- raise osv.except_osv(_('Stock Warehouse not defined !'), _('Stock Warehouse not defined.'))
-
-
- #Albaran interno por si hay traspasos de ubicacion
+ raise osv.except_osv(_('Stock Warehouse not defined !'),
+ _('Stock Warehouse not defined.'))
+ # Albaran interno por si hay traspasos de ubicacion
stock_picking_id = None
-
# Leemos resto del fichero
line = 1
succesfull = True
-
for row in reader:
line += 1
- # Leemos para cada línea todos sus valores y los almacenamos en un diccionario
+ # Leemos para cada línea todos sus valores y
+ # los almacenamos en un diccionario
dic = {}
for i in range(len(f)):
# Descartamos columnas
- #if f[i] in ('albaran_entrada',):
+ # if f[i] in ('albaran_entrada',):
# continue
-
-
# Formateamos fecha
if f[i] in ('fecha_alta',):
date = time.strptime(row[i], "%d/%m/%Y")
dic[f[i]] = time.strftime("%Y-%m-%d", date)
-
- #Activamos el lote:
+ # Activamos el lote:
# SIM - Si la linea trae ICC y numero de telefono
if 'icc' in dic and 'telefono' in dic:
- dic['fecha_activacion'] = time.strftime("%Y-%m-%d", date)
-
+ dic['fecha_activacion'] = time.strftime("%Y-%m-%d",
+ date)
continue
-
# Añadimos resto valores al diccionario
if row[i] not in ('NULL', ''):
dic[f[i]] = row[i]
-
try:
- #ACTIVACION DE SIM
- #Actualizamos lotes de produccion sin movimientos de entrada
- #y traspasamos lotes a la ubicación de stock definida en almacen
- stock_prod_lot_id = self.get_production_lot_id(cr, uid, dic, stock_warehouse.lot_input_id.id, stock_warehouse.lot_stock_id.id)
-
- if stock_prod_lot_id and self.verify_line(dic):
-
+ # ACTIVACION DE SIM
+ # Actualizamos lotes de produccion
+ # sin movimientos de entrada y traspasamos
+ # lotes a la ubicación de stock definida en almacen
+ input_id = stock_warehouse.lot_input_id.id
+ stock_id = stock_warehouse.lot_stock_id.id
+ prod_lot_id = self.get_production_lot_id(cr, uid, dic,
+ input_id,
+ stock_id)
+ if prod_lot_id and self.verify_line(dic):
if not stock_picking_id:
- #Creamos albaran interno para la actualizacion
- vals = {
- 'origin': 'IMP/' + time.strftime('%Y%m%d'),
+ # Creamos albaran interno para la actualizacion
+ vals = {'origin': 'IMP/' + time.strftime('%Y%m%d'),
'date': time.strftime('%Y-%m-%d %H:%M:%S'),
'move_type': 'direct',
'invoice_state': 'none',
'state': 'draft',
'auto_picking': False,
'type': 'internal',
+ }
+ stock_picking_id = stock_picking_obj.create(cr,
+ uid,
+ vals)
+ # Actualizamos datos de lote de produccion
+ result = stock_prod_lot_obj.write(cr, uid,
+ [prod_lot_id],
+ dic)
+ # Traspaso de ubicación
+ stock_prod_lot = stock_prod_lot_obj.browse(cr, uid,
+ prod_lot_id,
+ context)
+ date_expected = time.strftime('%Y-%m-%d %H:%M:%S')
+ location_dest_id = stock_warehouse.lot_stock_id.id
+ vals = {
+ 'picking_id': stock_picking_id,
+ 'product_id': stock_prod_lot.product_id.id,
+ 'name': ('[' +
+ stock_prod_lot.product_id.default_code
+ + '] '
+ + stock_prod_lot.product_id.name),
+ 'prodlot_id': prod_lot_id,
+ 'product_qty': 1,
+ 'product_uos_qty': 1,
+ 'product_uom': 1,
+ 'location_id': stock_warehouse.lot_input_id.id,
+ 'location_dest_id': location_dest_id,
+ 'date_expected': date_expected,
+ 'date': time.strftime('%Y-%m-%d %H:%M:%S'),
+ 'auto_validate': False,
+ 'priority': '1',
+ 'state': 'done',
}
-
- stock_picking_id = stock_picking_obj.create(cr, uid, vals)
-
- #Actualizamos datos de lote de produccion
- result = stock_prod_lot_obj.write(cr, uid, [stock_prod_lot_id], dic)
-
- #Traspaso de ubicación
- stock_prod_lot = stock_prod_lot_obj.browse(cr, uid, stock_prod_lot_id, context)
-
- vals = {
- 'picking_id': stock_picking_id,
- 'product_id': stock_prod_lot.product_id.id,
- 'name': '[' + stock_prod_lot.product_id.default_code + '] ' + stock_prod_lot.product_id.name,
- 'prodlot_id': stock_prod_lot_id,
- 'product_qty': 1,
- 'product_uos_qty': 1,
- 'product_uom': 1,
- 'location_id': stock_warehouse.lot_input_id.id,
- 'location_dest_id': stock_warehouse.lot_stock_id.id,
- 'date_expected': time.strftime('%Y-%m-%d %H:%M:%S'),
- 'date': time.strftime('%Y-%m-%d %H:%M:%S'),
- 'auto_validate': False,
- 'priority': '1',
- 'state': 'done',
- }
-
stock_move_id = stock_move_obj.create(cr, uid, vals)
-
else:
succesfull = False
- filename = '[production_lot_import][format: %s]' % (fileformat)
- logger.exception("Couldn't update production lot line %s of file %s", str(line), filename)
+ filename = ('[production_lot_import][format: %s]'
+ % (fileformat))
+ logger.exception("Couldn't update production lot line"
+ " %s of file %s", str(line), filename)
except:
succesfull = False
- filename = '[production_lot_import][format: %s]' % (fileformat)
- logger.exception("Couldn't update production lot line %s of file %s", str(line), filename)
-
- #Validamos albaran interno si se han traspasado lotes
+ filename = ('[production_lot_import][format: %s]' %
+ (fileformat))
+ logger.exception("Couldn't update production lot line"
+ " %s of file %s", str(line), filename)
+ # Validamos albaran interno si se han traspasado lotes
if stock_picking_id:
- stock_picking_obj.write(cr, uid, [stock_picking_id], {'state': 'done'})
-
-
+ stock_picking_obj.write(cr, uid, [stock_picking_id],
+ {'state': 'done'})
if succesfull:
logger.info("import file loaded succesfully")
else:
logger.info("import file loaded with errors")
except IOError:
filename = '[production_lot_import][format: %s]' % (fileformat)
- logger.exception("Couldn't update production lot file %s", filename)
-
+ logger.exception("Couldn't update production lot file %s",
+ filename)
def import_file(self, cr, uid, ids, context):
"""
@@ -245,30 +232,24 @@
@param ids: the ID or list of IDs
@param context: A standard dictionary
"""
-
import_data = self.browse(cr, uid, ids)[0]
fileobj = TemporaryFile('w+')
fileobj.write(base64.decodestring(import_data.data))
-
# now we determine the file format
fileobj.seek(0)
- first_line = fileobj.readline().strip().replace('"', '').replace(' ', '')
+ line = fileobj.readline()
+ first_line = line.strip().replace('"', '').replace(' ', '')
columns = first_line.split(';')
num_columns = len(columns)
-
if num_columns == 8:
- #Fichero SIM
- header_line_columns = "icc;telefono;pin;puk;fecha_alta;operador;descripcion;albaran_entrada"
+ # Fichero SIM
+ header_line_columns = ("icc;telefono;pin;puk;fecha_alta;operador;"
+ "descripcion;albaran_entrada")
fileformat = 'csv'
else:
header_line_columns = ""
file_format = 'no_csv'
-
fileobj.seek(0)
-
self.load_data(cr, fileobj, fileformat, header_line_columns, context)
-
fileobj.close()
return {}
-
-production_lots_import()
=== modified file 'dos_production_lots_import/wizard/production_lots_import_view.xml'
--- dos_production_lots_import/wizard/production_lots_import_view.xml 2014-06-11 10:23:47 +0000
+++ dos_production_lots_import/wizard/production_lots_import_view.xml 2014-06-24 13:09:55 +0000
@@ -5,7 +5,6 @@
<record id="view_production_lots_import" model="ir.ui.view">
<field name="name">Activation of SIM Importer</field>
<field name="model">production.lots.import</field>
- <field name="type">form</field>
<field name="arch" type="xml">
<form string="Activation of SIM Importer">
<group col="8">
Follow ups