text: import csv
  import io
  from datetime import datetime
  from django.contrib import messages
  from django.db.models import Q
  from django.http import JsonResponse, HttpResponseRedirect
  from django.shortcuts import render
  from django.urls import reverse
  from django.views.generic import CreateView, UpdateView, ListView
  from projeto.equipamento.actions.export_xlsx import export_xlsx
  from projeto.equipamento.actions.import_xlsx import import_xlsx as action_import_xlsx
  from .models import Equipamento
  from .forms import EquipamentoForm
  
  
  # ----------------- LIST ------------------------
  def equipamento_list(request):
      template_name = 'equipamento_list.html'
      objects = Equipamento.objects.all()
      search = request.GET.get('search')
      if search:
          objects = objects.filter(asset__icontains=search)
      context = {'object_list': objects}
      return render(request, template_name, context)
  
  class EquipamentoList(ListView):
      model = Equipamento
      template_name = 'equipamento_list.html'
      paginate_by = 10
  
      def get_queryset(self):
          queryset = super(EquipamentoList, self).get_queryset()
          search = self.request.GET.get('search')
          if search:
              queryset = queryset.filter(
                  Q(asset__icontains=search) |
                  Q(n_serie__icontains=search)
              )
          return queryset
  
  
  # ----------------- DETAIL ----------------------
  def equipamento_detail(request, pk):
      template_name = 'equipamento_detail.html'
      obj = Equipamento.objects.get(pk=pk)
      context = {'object': obj}
      return render(request, template_name, context)
  
  
  # ----------------- ADD/CREATE ------------------
  def equipamento_add(request):
      template_name = 'equipamento_form.html'
  
      if request.method == 'POST':
          if form.is_valid():
              form.save()
              return HttpResponseRedirect(reverse('equipamento:equipamento_list'))
      
      context = {'form': form}
      return render(request, template_name, context)
  
  class EquipamentoCreate(CreateView):
      model = Equipamento
      template_name = 'Equipamento_form.html'
      form_class = EquipamentoForm
  
  
  # ----------------- UPDATE -----------------------
  class EquipamentoUpdate(UpdateView):
      model = Equipamento
      template_name = 'equipamento_form.html'
      form_class = EquipamentoForm
  
  
  # ----------------- IMPORT/EXPORT -----------------
  def save_data(data):
      '''
      Salva os dados no banco
      '''
      aux = []
      for item in data:
          estado = item.get('estado')
          asset = item.get('asset')
          n_serie = item.get('n_serie')
          data_compra = item.get('data_compra')
          garantia = item.get('garantia')
          tipo = item.get('tipo')
          marca = item.get('marca')
          modelo = item.get('modelo')
          cpu = item.get('cpu')
          hd = item.get('hd')
          memoria = item.get('memoria')        
          obs = item.get('obs')
  
          obj = Equipamento(
              estado=estado,            
              asset=asset,
              n_serie=n_serie,
              data_compra=data_compra,
              garantia=garantia,
              tipo=tipo,
              marca=marca,
              modelo=modelo,
              cpu=cpu,
              hd=hd,
              memoria=memoria,
              obs=obs,
          )
          aux.append(obj)
      Equipamento.objects.bulk_create(aux)
  
  def import_csv(request):
      if request.method == 'POST' and request.FILES['myfile']:
          myfile = request.FILES['myfile']
          # Lendo arquivo InMemoryUploadedFile
          file = myfile.read().decode('utf-8')
          reader = csv.DictReader(io.StringIO(file))
          # Gerando uma list comprehension
          data = [line for line in reader]
          save_data(data)
          return HttpResponseRedirect(reverse('equipamento:equipamento_list'))
  
      template_name = 'equipamento_import.html'
      return render(request, template_name)
  
  def export_csv(request):
      header = (
          'estado', 'asset', 'n_serie', 'data_compra', 'garantia', 'tipo', 'marca', 'modelo', 'cpu', 'hd', 'memoria', 'obs',
      )
      equipamentos = Equipamento.objects.all().values_list(*header)
      with open('C:/Users/dnascimento_prest/Desktop/projeto-estoque-master/fix/equipamentos_exportados.csv', 'w') as csvfile:
          equipamento_writer=csv.writer(csvfile)
          equipamento_writer.writerow(header)
          for equipamento in equipamentos:
              equipamento_writer.writerow(equipamento)
      messages.success(request, 'Equipamentos exportador com sucesso')
      return HttpResponseRedirect(reverse('equipamento:equipamento_list')) 
  
  def import_xlsx(request):
      filename = 'C:/Users/dnascimento_prest/Desktop/projeto-estoque-master/fix/equipamentos.xlsx'
      action_import_xlsx(filename)
      messages.success(request, 'Equipamentos importados com sucesso.')
      return HttpResponseRedirect(reverse('equipamento:equipamento_list'))
  
  def export_equipamentos_xlsx(request):
      MDATA = datetime.now().strftime('%Y-%m-%d')
      model = 'Equipamento'
      filename = 'equipamentos_exportados.xlsx'
      _filename = filename.split('.')
      filename_final = f'{_filename[0]}_{MDATA}.{_filename[1]}'
      queryset = Equipamento.objects.all().values_list(
          'estado',
          'asset',
          'n_serie',
          'data_compra',
          'garantia',
          'tipo',
          'marca',
          'modelo',
          'cpu',
          'hd',
          'memoria',
          'obs',
      )
      columns = ('estado', 'asset', 'n_serie', 'data_compra', 'garantia', 'tipo', 'marca', 'modelo', 'cpu', 'hd', 'memoria', 'obs')
      response = export_xlsx(model, filename_final, queryset, columns)
      return response