Hola tengo mi aplicacion que lee 2 tipos de archivos de excel y los datos del excel los guarda en en una base de datos
pero me an pedido que si que alteran el la estructura del archivo del excel y quieran guardarla en al bd de mendiante la aplicacion que salga un mensaje diciendo que no se va poder porque alteraron la estructura
aqui les dejo el codigo esperando su pronta ayuda
views.py
Código Python:
Ver originalclass DataExcelProcessView(TemplateView):
template_name = 'app/volver.html'
def get(self, request, *args, **kwargs):
return super(DataExcelProcessView, self).get(request, args, kwargs)
def get_context_data(self, **kwargs):
ctx = super(DataExcelProcessView, self).get_context_data(**kwargs)
ctx['lista_data'] = self.process_file()
return ctx
def process_file(self):
data = DataExcel.objects.get(pk=self.kwargs['pk'])
book = xlrd.open_workbook(data.file.path)
hoja1 = book.sheet_by_index(0)
if data.tienda == 1:
fields = ('codsucursal', 'sucursal', 'coddivision', 'division', 'codarea', 'area', 'coddpto', 'dpto', 'codlinea',
'linea', 'codsublinea', 'sublinea', 'codmodelo', 'modelo', 'codvariacion', 'variacion', 'codmarca',
'marca', 'codproveedor', 'proveedor', 'temporada', 'procedencia', 'tiponeg', 'color', 'talla',
'semantig', 'conventa', 'constockoh', 'esrebate', 'concobertura', 'vtaund', 'vtasmf', 'contr',
'costo', 'stock_oh', 'costo_oh', 'cbt')
products = [Ripley(id_dataexcel=data,**{fields[i]: cell for i, cell in enumerate(hoja1.row_values(rowid))})
for rowid in range(1, hoja1.nrows)]
#print products
for product in products:
product.color = str(product.color).replace('.0', '')
product.talla = str(product.talla).replace('.0', '')
product.semantig = str(product.semantig).replace('.0', '')
product.vtaund = str(product.vtaund).replace('.0', '')
product.stock_oh = str(product.stock_oh).replace('.0', '')
product.cbt = str(product.cbt).replace('.0', '')
try:
Ripley.objects.bulk_create(products)
data.active= False
data.save()
except IntegrityError as e:
return False
elif data.tienda == 2:
fields = ('codigo','consignacion','tipo_trx','fecha_proceso','fecha_trx','local',
'ccosto','subclase','ean','sku','descripcion_sku','caja_vta','nro_trx_vta','cantidad',
'base_imponible_vta','impto_vta','monto_timbrado_vta','tipo_comision','monto_comision',
'costo_vta','igv_costo_vta','total_costo_vta','local_trx_ori','fecha_trx_ori','caja_trx_ori','nro_trx_ori')
#print [(fields[i], c) for i, c in enumerate(hoja1.row_values(110))]
products_saga = [Saga(id_dataexcel=data,**{fields[i]: cell for i, cell in enumerate(hoja1.row_values(rowid))})
for rowid in range(6, hoja1.nrows)]
for saga in products_saga:
saga.ean = str(int(saga.ean))
saga.fecha_proceso = date(1899,12,30) + timedelta(days=(int(saga.fecha_proceso)))
saga.fecha_trx = date(1899,12,30) + timedelta(days=(int(saga.fecha_trx)))
if saga.local_trx_ori == '':
saga.local_trx_ori=None
if saga.fecha_trx_ori == '':
saga.fecha_trx_ori = None
else:
saga.fecha_trx_ori = date(1899,12,30) + timedelta(days=(int(saga.fecha_trx_ori)))
if saga.caja_trx_ori == '':
saga.caja_trx_ori=None
if saga.nro_trx_ori == '':
saga.nro_trx_ori=None
try:
Saga.objects.bulk_create(products_saga)
data.active = False
data.save()
except IntegrityError as e:
return False