def _multi_record_export_as_zip_file(request): "Esportazione multifile in formato zip""" import os import contextlib import zipfile d = request.GET.dict() start_date = request.GET.get("start_date", "") end_date = request.GET.get("end_date", "") start_time = request.GET.get("start_time", "00:00") end_time = request.GET.get("end_time", "23:59") pincode = request.GET.get("pincode", "") q_obj = Q(pincode__icontains=pincode) if start_date != '': start_date = Helper.convert_datestring_format( start_date, "%d-%m-%Y", "%Y-%m-%d") start_date = "%s %s:00" % (start_date, start_time) q_obj.add(Q(calldate__gte=start_date), Q.AND) if end_date != '': end_date = Helper.convert_datestring_format( end_date, "%d-%m-%Y", "%Y-%m-%d") end_date = "%s %s:59" % (end_date, end_time) q_obj.add(Q(calldate__lte=end_date), Q.AND) items_list = Record.objects.filter(q_obj).order_by('-calldate') filename = 'registrazioni' if pincode != '': phoneuser = PhoneUser.get_from_pincode(pincode) filename = 'registrazioni %s' % phoneuser zipname = "%s.zip" % filename tmpzippath = os.path.join(settings.TMP_ZIP_ROOT, zipname) file_counter = 0 with contextlib.closing(zipfile.ZipFile(tmpzippath, 'w')) as myzip: for item in items_list: detail = Detail.objects.get(uniqueid=item.uniqueid) if detail.custom_valid and (detail.dcontext == 'cabs-dial-number' or detail.dcontext == 'outgoing-operator-dial-number' or detail.dcontext == 'incoming-operator-dial-number'): file_counter += 1 path = os.path.join(settings.RECORDS_ROOT, item.filename) myzip.write(path, arcname = item.filename) if not file_counter: return redirect("/records/?err=1&err_msg=Nessuno dei file soddisfa i criteri per l'esportazione&%s" % urlencode(d)) response = Helper.file_export(tmpzippath) # logghiamo azione audit = Audit() audit.user_id = request.user.id detail = Helper.get_filter_detail(d) audit.what = "Esportazione registrazioni corrispondenti ai seguenti criteri: %s" \ % (detail) audit.save() return response
def _multi_record_remove(request): import os d = request.POST.dict() start_date = request.POST.get("data[start_date]", "") end_date = request.POST.get("data[end_date]", "") start_time = request.POST.get("data[start_time]", "00:00") end_time = request.POST.get("data[end_time]", "23:59") dst = request.POST.get("data[dst]", "") pincode = request.POST.get("data[pincode]", "") q_obj = Q(pincode__icontains=pincode) if start_date != '': start_date = Helper.convert_datestring_format( start_date, "%d-%m-%Y", "%Y-%m-%d") start_date = "%s %s:00" % (start_date, start_time) q_obj.add(Q(calldate__gte=start_date), Q.AND) if end_date != '': end_date = Helper.convert_datestring_format( end_date, "%d-%m-%Y", "%Y-%m-%d") end_date = "%s %s:59" % (end_date, end_time) q_obj.add(Q(calldate__lte=end_date), Q.AND) items_list = Record.objects.filter(q_obj).order_by('-calldate') if dst != '': filtered_item_list = [] for item in items_list: try: detail = Detail.objects.get(uniqueid=item.uniqueid) if dst in detail.custom_dst: filtered_item_list.append(item) except: pass items_list = filtered_item_list for item in items_list: path = os.path.join(settings.RECORDS_ROOT, item.filename) try: os.remove(path) item.delete() # logghiamo azione audit = Audit() audit.user_id = request.user.id detail = Helper.get_filter_detail(d) audit.what = "Eliminazione registrazioni corrispondenti ai seguenti criteri: %s" \ % (detail) audit.save() except Exception as e: return redirect("/records/?err=1&err_msg=ELiminazione registrazioni non avvenuta") return redirect("/records/?ok=1&msg=ELiminazione registrazioni avvenuta con successo")