def form_valid(self, form): item = Item() item.codigo_item = form.cleaned_data['codigo_item'] item.codigo_fabrica = form.cleaned_data['codigo_fabrica'] item.almacen = form.cleaned_data['almacen'] item.grupo = form.cleaned_data['grupo'] item.subgrupo = form.cleaned_data['subgrupo'] item.descripcion = form.cleaned_data['descripcion'] item.carac_especial_1 = form.cleaned_data['carac_especial_1'] item.carac_especial_2 = form.cleaned_data['carac_especial_2'] item.cantidad = form.cleaned_data['cantidad'] item.saldo_min = form.cleaned_data['saldo_min'] item.proveedor = form.cleaned_data['proveedor'] item.imagen = form.cleaned_data['imagen'] item.unidad_medida = form.cleaned_data['unidad_medida'] item.costo_unitario = form.cleaned_data['costo_unitario'] item.precio_unitario = form.cleaned_data['precio_unitario'] item.empresa = self.request.user.empresa today = date.today() movimiento = Movimiento() movimiento.cantidad = form.cleaned_data['cantidad'] movimiento.precio_unitario = form.cleaned_data['precio_unitario'] movimiento.detalle = 'Saldo Inicial' movimiento.fecha_transaccion = today.strftime('%Y-%m-%d') movimiento.motivo_movimiento = 'inicial' movimiento.empresa = self.request.user.empresa try: item.save() except IntegrityError: messages.error(self.request, "error CODIGO ITEM DUPLICADO") return self.form_invalid(form) movimiento.item = item movimiento.save() return super(CrearItem, self).form_valid(form)
def compraCrear(request): form = None centro_costos = CentroCostos.objects.filter(empresa=request.user.empresa) if request.method == 'POST': sid = transaction.savepoint() try: proceso = json.loads(request.POST.get('proceso')) if len(proceso['producto']) <= 0: msg = 'No se ha seleccionado ningun producto' raise Exception(msg) # if proceso['nit'] == '': # msg = 'Ingrese nit' # raise Exception(msg) total = 0 # calculo total de compras for k in proceso['producto']: total += decimal.Decimal(k['sdf']) if proceso['tipo_compra'] == 'credito': date_1 = datetime.datetime.strptime(proceso['fecha'], "%Y-%m-%d") end_date = date_1 + datetime.timedelta(days=int(proceso['dias'])) today = datetime.date.today() else: end_date = None compra_data = Compra.objects.filter(empresa=request.user.empresa).exclude(nro_nota__isnull=True).last() if compra_data: nro = compra_data.nro_nota if nro is None: nro = 0 else: nro = 0 print total crearCompra = Compra( nit=proceso['nit'], razon_social=proceso['razon'], nro_factura=proceso['nro_factura'], nro_autorizacion=proceso['nro_autorizacion'], fecha=proceso['fecha'], cod_control=proceso['codigo_control'], tipo_compra=proceso['tipo_compra'], cantidad_dias=proceso['dias'], total=total, descuento=proceso['descuento'], recargo=proceso['recargo'], ice=proceso['ice'], excentos=proceso['excentos'], tipo_descuento=proceso['tipo_descuento'], tipo_recargo=proceso['tipo_recargo'], empresa=request.user.empresa, fecha_vencimiento=end_date, nro_nota=nro + 1, ) crearCompra.save() for k in proceso['producto']: if k['centro_costos'] == 'A': item = Item.objects.filter(id=k['pk']) cantidad_total = item[0].cantidad + int(k['cantidad']) today = date.today() item.update(cantidad=cantidad_total, fecha_transaccion=today) crearDetalle = DetalleCompra( compra=crearCompra, producto=Item.objects.get(id=k['pk']), codigo=k['codigo_item'], cantidad=int(k['cantidad']), unidad=k['unidad'], detalle=k['detalle'], precio_unitario=decimal.Decimal(k['precio_unitario']), subtotal=decimal.Decimal(k['subtotal']), descuento=decimal.Decimal(k['descuentos']), recargo=decimal.Decimal(k['recargos']), ice=decimal.Decimal(k['ice']), excentos=decimal.Decimal(k['excentos']), scf=decimal.Decimal(k['sdf']), centro_costos=k['centro_costos'], tipo_descuento=k['tipo_descuento'], tipo_recargo=k['tipo_recargo'], ) detalle = '%s a %s s/g factura Nro. %s' % ('Compra', proceso['razon'], proceso['nro_factura']) crearMovimiento = Movimiento( cantidad=int(k['cantidad']), precio_unitario=decimal.Decimal(k['precio_unitario']), detalle=detalle, fecha_transaccion=proceso['fecha'], motivo_movimiento='ingreso', item=Item.objects.get(id=k['pk']), empresa=request.user.empresa, ) crearDetalle.save() crearMovimiento.save() else: print 'centro de costossssssss' print k['centro_costos'] if CentroCostos.objects.filter(descripcion=k['centro_costos']): pass else: centro = CentroCostos( descripcion=k['centro_costos'], empresa=request.user.empresa ) centro.save() crearDetalle = DetalleCompra( compra=crearCompra, codigo=k['codigo_item'], cantidad=int(k['cantidad']), unidad=k['unidad'], detalle=k['detalle'], precio_unitario=decimal.Decimal(k['precio_unitario']), subtotal=decimal.Decimal(k['subtotal']), descuento=decimal.Decimal(k['descuentos']), recargo=decimal.Decimal(k['recargos']), ice=decimal.Decimal(k['ice']), excentos=decimal.Decimal(k['excentos']), scf=decimal.Decimal(k['sdf']), centro_costos=k['centro_costos'], tipo_descuento=k['tipo_descuento'], tipo_recargo=k['tipo_recargo'], ) crearDetalle.save() # return HttpResponseRedirect(reverse('detallecompra', args=(crearCompra.pk,))) return render('compras/compra.html', {'form': form, 'costos': centro_costos, 'popup': True, 'pk': crearCompra.pk, 'url': '/detalle_compra/' }, context_instance=ctx(request)) except Exception, e: try: transaction.savepoint_rollback(sid) except: pass messages.error(request, e)
def import_data(request): if request.method == "POST": form = UploadFileForm(request.POST, request.FILES) # if request.FILES: # datos=request.FILES['file'] # filename = datos._name # print filename # fd = open('%s/%s' % (MEDIA_ROOT, filename), 'wb') # rute= '%s/%s' % (MEDIA_ROOT, datos) # for chunk in datos.chunks() : # fd.write(chunk) # fd.close() # dt=pe.get_sheet(file_name='%s' % (rute), name_columns_by_row=0) # yy=list(dt.colnames) # print yy today = date.today() def choice_func(row): cod = Proveedor.objects.filter(codigo=row[10])[0] row[10] = cod row.append(request.user) return row if form.is_valid(): print 'ssssssssssssssssssssssssssssssss' # arryadates=['codigo_item', 'codigo_fabrica', 'almacen','grupo', 'subgrupo', 'descripcion', 'carac_especial_1', 'carac_especial_2', 'cantidad', 'saldo_min', 'proveedor', 'imagen', 'unidad_medida', 'costo_unitario', 'precio_unitario'] datos = request.FILES['file'] # datos2= pe.get_sheet(file_name='%s' % (datos),name_columns_by_row=0) # print(list(datos2.colnames)) # for i in arryadates: # if i in dt: # print i # else: # print 'falseeeeeeee' # for d in datos2: # print d['codigo_item'] # print request.FILES['file'].get_sheet() filename = datos._name fd = open('%s/%s' % (MEDIA_ROOT, filename), 'wb') print fd for chunk in datos.chunks(): fd.write(chunk) fd.close() rute = '%s/%s' % (MEDIA_ROOT, datos) book = xlrd.open_workbook(rute) sheet = book.sheet_by_name('Sheet1') # wb = xlrd.open_workbook(rute) # ws = wb.sheet_by_name('Sheet1') # for i in range(ws.nrows): # for j in range(ws.ncols): # if ws.cell_type(i, j) != xlrd.XL_CELL_EMPTY: # print (" (%d, %d):%s:%s" % (i, j, ws.cell_type(i, j), ws.cell_value(i, j))) # else: # print "error" try: errores = [] for r in range(1, sheet.nrows): if Item.objects.filter(codigo_item=sheet.cell(r, 0).value, empresa=request.user.empresa): errores.append('* el codigo_item "%s" ya existe' % (sheet.cell(r, 0).value)) if sheet.cell_type(r, 8) != xlrd.XL_CELL_NUMBER: errores.append('* cantidad "%s" tiene que ser numerico' % (sheet.cell(r, 8).value)) if sheet.cell_type(r, 9) != xlrd.XL_CELL_NUMBER: errores.append('* saldo_min "%s" tiene que ser numerico' % (sheet.cell(r, 9).value)) if sheet.cell_type(r, 11) != xlrd.XL_CELL_TEXT: errores.append('* imagen "%s" tiene que ser texto' % (sheet.cell(r, 11).value)) if not Proveedor.objects.filter(codigo=sheet.cell(r, 10).value, empresa=request.user.empresa): errores.append('* el proveedor "%s" no existe en la base de datos' % (sheet.cell(r, 10).value)) if sheet.cell_type(r, 13) != xlrd.XL_CELL_NUMBER: errores.append('* costo_unitario "%s" tiene que ser numerico' % (sheet.cell(r, 13).value)) if sheet.cell_type(r, 14) != xlrd.XL_CELL_NUMBER: errores.append('* precio_unitario "%s" tiene que ser numerico' % (sheet.cell(r, 14).value)) for s in range(1, sheet.nrows): if errores: for err in errores: messages.error(request, err) # messages.error(request, ', '.join([str(x) for x in errores])) return render_to_response( 'producto/upload_form.html', { 'form': form, }, context_instance=RequestContext(request)) else: crearItem = Item( codigo_item=sheet.cell(s, 0).value, codigo_fabrica=sheet.cell(s, 1).value, almacen=sheet.cell(s, 2).value, grupo=sheet.cell(s, 3).value, subgrupo=sheet.cell(s, 4).value, descripcion=sheet.cell(s, 5).value, carac_especial_1=sheet.cell(s, 6).value, carac_especial_2=sheet.cell(s, 7).value, cantidad=sheet.cell(s, 8).value, saldo_min=sheet.cell(s, 9).value, proveedor=Proveedor.objects.get(codigo=sheet.cell(s, 10).value, empresa=request.user.empresa), imagen=sheet.cell(s, 11).value, unidad_medida=sheet.cell(s, 12).value, costo_unitario=decimal.Decimal(sheet.cell(s, 13).value), precio_unitario=decimal.Decimal(sheet.cell(s, 14).value), empresa=request.user.empresa, ) crearItem.save() crearMovimiento = Movimiento( cantidad=sheet.cell(s, 8).value, precio_unitario=decimal.Decimal(sheet.cell(s, 14).value), detalle='Saldo Inicial', fecha_transaccion=date.today(), motivo_movimiento='inicial', item=crearItem, empresa=request.user.empresa, ) crearMovimiento.save() # try: # request.FILES['file'].save_book_to_database( # models=[Item], # initializers=[choice_func], # mapdicts=[['codigo_item', 'codigo_fabrica', 'almacen', 'grupo', 'subgrupo', 'descripcion', 'carac_especial_1', 'carac_especial_2', 'cantidad', 'saldo_min', 'proveedor', 'imagen', 'unidad_medida', 'costo_unitario', 'precio_unitario', 'user']] # ) messages.success(request, "Los datos se importaron correctamente") # filename = datos._name # # print filename # fd = open('%s/%s' % (MEDIA_ROOT, filename), 'wb') # for chunk in datos.chunks() : # fd.write(chunk) # fd.close() return HttpResponseRedirect(reverse_lazy('listar_item')) except Exception, e: messages.error(request, e)