예제 #1
0
파일: views.py 프로젝트: thecocce/phonecab
def credit_save(request):
    """Save credit"""
    from decimal import Decimal
    phoneuser_id = int(request.POST.get("data[phoneuser_id]", "0"))
    recharge = request.POST.get('data[recharge]', "0")
    reason = request.POST.get('data[reason]', "")

    recharge = recharge.replace(",", ".")

    credit = Credit()

    credit.phoneuser_id = phoneuser_id
    credit.recharge = Decimal(recharge)
    credit.reason = reason

    try:
        #credit.save(user_id=request.user.id, phoneuser_id=phoneuser_id)
        credit.save()
        phoneuser = PhoneUser.objects.get(pk=phoneuser_id)
        # eliminiamo eventuali valori residui negativi
        if phoneuser.balance > 0:
            phoneuser.balance += Decimal(recharge)
        else:
            phoneuser.balance = Decimal(recharge)
        phoneuser.save()
        audit = Audit()
        audit.log(user=request.user,
            what="Effettuata ricarica di importo %s a favore di %s" % (credit.recharge, 
                credit.phoneuser))
        return credit_items(request, phoneuser_id)
    except Exception as e:
        return HttpResponse(status=400, content=json.dumps({'err_msg': format(e)}), content_type='application/json')
예제 #2
0
파일: views.py 프로젝트: thecocce/phonecab
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
예제 #3
0
파일: views.py 프로젝트: thecocce/phonecab
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")
예제 #4
0
파일: views.py 프로젝트: thecocce/phonecab
def phoneuser_save(request):
    """Save or update user"""
    phoneuser_id = int(request.POST.get("data[phoneuser_id]", "0"))
    enabled = int(request.POST.get("data[enabled]", "0"))
    first_name = request.POST.get("data[first_name]", "")
    last_name = request.POST.get("data[last_name]", "")
    serial_no = request.POST.get("data[serial_no]", "")
    pincode = request.POST.get("data[pincode]", "")
    four_bis_limited = int(request.POST.get("data[four_bis_limited]", "0"))
    listening_enabled = int(request.POST.get("data[listening_enabled]", "0"))
    recording_enabled = int(request.POST.get("data[recording_enabled]", "0"))
    language = request.POST.get("data[language]", "")
    vipaccount = int(request.POST.get("data[vipaccount]", "0"))

    variables = Acl.get_permissions_for_user(request.user.id, request.user.is_staff)
    is_new = False
    action = "Creazione"
    try:
        if phoneuser_id:
            phoneuser = PhoneUser.objects.get(pk=phoneuser_id)
            action = "Modifica"
        else:
            phoneuser = PhoneUser()
            is_new = True

        phoneuser.enabled = enabled
        phoneuser.first_name = first_name.title()
        phoneuser.last_name = last_name.title()
        phoneuser.serial_no = serial_no
        phoneuser.pincode = pincode
        phoneuser.four_bis_limited = four_bis_limited
        phoneuser.listening_enabled = listening_enabled
        phoneuser.recording_enabled = recording_enabled
        phoneuser.language = language
        phoneuser.vipaccount = vipaccount

        phoneuser.save()

        # log azione
        audit = Audit()
        audit.log(user=request.user,
            what="%s anagrafica: %s" % (action, phoneuser))
        
        if is_new:
            return phoneuser_items(request)
        variables['phoneuser'] = phoneuser
        return render_to_response(
            'phoneusers/phoneuser_data.html', RequestContext(request, variables))
    except Exception as e:
        return HttpResponse(status=400, content=json.dumps({'err_msg': format(e)}), content_type='application/json')
예제 #5
0
파일: models.py 프로젝트: thecocce/phonecab
 def save(self, user, *args, **kwargs):
     """Override funzione save per loggare azione"""
     try:
         super(Pref, self).save(*args, **kwargs)
         audit = Audit()
         audit.user = user
         audit.what = "L'utente %s ha modificato la preferenza %s impostandola al valore %s" % (
             user.username,
             self.key,
             str(self.value),
         )
         audit.save()
     except Exception as e:
         print "%s (%s)" % (e.message, type(e))
예제 #6
0
파일: views.py 프로젝트: thecocce/phonecab
def whitelist_remove(request):
    whitelist_id = int(request.POST.get("data[whitelist_id]", "0"))
    phoneuser_id = int(request.POST.get("data[phoneuser_id]", "0"))

    if(whitelist_id):
        try:
            phoneuser = PhoneUser.objects.get(pk=phoneuser_id)
            Whitelist.objects.get(pk=whitelist_id).delete()
            # log azione
            audit = Audit()
            audit.log(user=request.user,
                what="Rimozione autorizzazione: %s" % phoneuser)
            return whitelist_items(request, phoneuser_id)
            
        except Exception as e:
            return HttpResponse(status=400, content=json.dumps({'err_msg': format(e)}), content_type='application/json')
    else:
        raise Http404
예제 #7
0
파일: models.py 프로젝트: thecocce/phonecab
    def save(self, user, *args, **kwargs):
        """Override della funzione save per impostare correttamente le espressioni regolari
        e loggare azione"""
        self._create_regexp_from_prefix_list()

        try:
            super(Fare, self).save(*args, **kwargs)
            audit = Audit()
            audit.user = user
            detail = "Scatto: %s - Tariffa: %s - Lista Prefissi: %s" % (
                self.connection_charge,
                self.fee_per_second,
                self.prefix_list,
            )
            audit.what = "Modifica direttrice %s : %s" % (self.direction, detail)
            audit.save()
        except Exception as e:
            print "%s (%s)" % (e.message, type(e))  # TODO gestire errore
예제 #8
0
파일: views.py 프로젝트: thecocce/phonecab
def _single_record_export(request, record_id="0"):
    """Esportazione singolo file"""
    import os

    record_id = int(record_id)
    try:
        record = Record.objects.get(pk=record_id)
    except ObjectDoesNotExist:
        pass

    path = os.path.join(settings.RECORDS_ROOT, record.filename)
    response = Helper.file_export(path)

    # logghiamo azione
    audit = Audit()
    audit.user = request.user
    audit.what = "L'utente %s ha scaricato il seguente file: %s" \
        % (request.user.username, record.filename)
    audit.save()

    return response
예제 #9
0
파일: views.py 프로젝트: thecocce/phonecab
def phoneuser_change_status(request):
    phoneuser_id = int(request.POST.get("data[phoneuser_id]", "0"))
    newstatus = request.POST.get("data[newstatus]", "")
    ret = newstatus

    action = "Disattivazione"
    if int(newstatus):
        action = "Attivazione"

    try:
        phoneuser = PhoneUser.objects.get(pk=phoneuser_id)
        phoneuser.enabled = int(newstatus)
        phoneuser.save()

        # log azione
        audit = Audit()
        audit.log(user=request.user,
            what="%s scheda anagrafica: %s" % (action, phoneuser))
        return phoneuser_data(request, phoneuser_id)
    except Exception as e:
        return HttpResponse(status=400, content=json.dumps({'err_msg': format(e)}), content_type='application/json')
예제 #10
0
파일: views.py 프로젝트: thecocce/phonecab
def whitelist_save(request):
    """Save or update whitelist"""
    whitelist_id = int(request.POST.get("data[whitelist_id]", "0"))
    phoneuser_id = int(request.POST.get("data[phoneuser_id]", "0"))
    label = request.POST.get("data[label]", "")
    phonenumber = request.POST.get("data[phonenumber]", "")
    duration = int(request.POST.get("data[duration]", "0"))
    frequency = int(request.POST.get("data[frequency]", "0"))
    real_mobile = int(request.POST.get("data[real_mobile]", "0"))

    # la maschera consente di inserire i minuti
    duration = duration * 60
    action = "Creazione"
    try:
        if whitelist_id:
            whitelist = Whitelist.objects.get(pk=whitelist_id)
            action = "Modifica"
        else:
            whitelist = Whitelist()
            if frequency == 0:
                whitelist.enabled = True

        whitelist.phoneuser_id = phoneuser_id
        whitelist.label = label
        whitelist.phonenumber = phonenumber
        whitelist.duration = duration
        whitelist.frequency = frequency
        whitelist.real_mobile = real_mobile

        whitelist.save()

        # log azione
        audit = Audit()
        audit.log(user=request.user,
            what="%s autorizzazione: %s" % (action, whitelist.phoneuser))
        return whitelist_items(request, phoneuser_id)
    except Exception as e:
        return HttpResponse(status=400, content=json.dumps({'err_msg': format(e)}), content_type='application/json')
예제 #11
0
파일: views.py 프로젝트: thecocce/phonecab
def whitelist_change_ordinary(request):
    whitelist_id = int(request.POST.get("data[whitelist_id]", "0"))
    phoneuser_id = int(request.POST.get("data[phoneuser_id]", "0"))
    newstatus = int(request.POST.get("data[newstatus]", "0"))

    ret = newstatus

    action = "Abilitazione ordinaria"
    if int(newstatus):
        action = "Abilitazione straordinaria"

    if(whitelist_id):
        try:
            whitelist = Whitelist.objects.get(pk=whitelist_id)
            whitelist.extraordinary = newstatus
            whitelist.save()
            audit = Audit()
            audit.log(user=request.user,
                what="%s autorizzazione: %s" % (action, whitelist.phoneuser))
            return whitelist_items(request, phoneuser_id)
        except Exception as e:
            return HttpResponse(status=400, content=json.dumps({'err_msg': format(e)}), content_type='application/json')
    else:
        raise Http404
예제 #12
0
def request_all_audits():
    pages = Page.objects.filter(project__is_active=True).iterator()

    for page in pages:
        audit_parameters_list = page.project.audit_parameters_list.all()
        for audit_parameters in audit_parameters_list:
            audit = Audit(page=page, parameters=audit_parameters)
            audit.save()
            request_audit.delay(audit.uuid)

    scripts = Script.objects.filter(project__is_active=True).iterator()

    for script in scripts:
        audit_parameters_list = script.project.audit_parameters_list.all()
        for audit_parameters in audit_parameters_list:
            audit = Audit(script=script, parameters=audit_parameters)
            audit.save()
            request_audit.delay(audit.uuid)
예제 #13
0
파일: forms.py 프로젝트: younghai/falco
    def submit_form(self, project, user):
        try:
            check_if_member_of_project(user.id, project.uuid)
            page_or_script_to_audit_uuid = self.data["page_or_script_to_audit"]
            audit_parameters_uuid = self.data["audit_parameters_to_use"]

            if "__all__" == page_or_script_to_audit_uuid:
                pages_to_audit = project.pages.all()
                scripts_to_audit = project.scripts.all()
            else:
                pages_to_audit = project.pages.filter(
                    uuid=page_or_script_to_audit_uuid)
                scripts_to_audit = project.scripts.filter(
                    uuid=page_or_script_to_audit_uuid)

            if "__all__" == audit_parameters_uuid:
                audit_parameters_list = project.audit_parameters_list.all()
            else:
                audit_parameters_list = project.audit_parameters_list.filter(
                    uuid=audit_parameters_uuid)

            for audit_parameters in audit_parameters_list:
                for page_to_audit in pages_to_audit:
                    new_page_audit = Audit(page=page_to_audit,
                                           parameters=audit_parameters)
                    new_page_audit.save()
                    request_audit.delay(new_page_audit.uuid)

                for script_to_audit in scripts_to_audit:
                    new_script_audit = Audit(script=script_to_audit,
                                             parameters=audit_parameters)
                    new_script_audit.save()
                    request_audit.delay(new_script_audit.uuid)

        except Exception as e:
            error_message = str(e)
            self.add_error(None, error_message)
            raise

        return True
예제 #14
0
파일: views.py 프로젝트: thecocce/phonecab
def profile_save(request):
    """Save or update user"""
    user_id = int(request.POST.get("data[profile_id]", "0"))
    first_name = request.POST.get("data[first_name]", "")
    last_name = request.POST.get("data[last_name]", "")
    username = request.POST.get("data[username]", "")
    password = request.POST.get("data[password]", "")
    is_admin = request.POST.get("data[is_admin]", "0") == "1"

    priv_anagrafica = int(request.POST.get("data[priv_anagrafica]", "1"))
    priv_whitelist = int(request.POST.get("data[priv_whitelist]", "0"))
    priv_credit = int(request.POST.get("data[priv_credit]", "0"))
    priv_cdr = int(request.POST.get("data[priv_cdr]", "0"))
    priv_record = int(request.POST.get("data[priv_record]", "0"))

    action = "Creazione"
    try:
        if user_id:
            user = User.objects.get(pk=user_id)
            user.first_name = first_name.title()
            user.last_name = last_name.title()
            user.username = username
            if password:
                user.set_password(password)
            action = "Modifica"
        else:
            user = User.objects.create_user(username=username,
                first_name=first_name,
                last_name=last_name,
                password=password)

        user.is_staff = is_admin
        user.save()
        # log azione
        audit = Audit()
        audit.log(user=request.user,
            what="%s utente: %s" % (action, user.get_full_name()))

        if not user.is_staff:
            # cancelliamo tutte le acl utente e
            # (ri)creiamo le acl corrispondenti
            Acl.objects.filter(user_id=user.id).delete()
            # userid function permission
            Acl.objects.create(
                user_id=user.id, function=0, permission=priv_anagrafica)
            if priv_whitelist:
                Acl.objects.create(
                    user_id=user.id, function=1, permission=priv_whitelist)
            if priv_credit:
                Acl.objects.create(
                    user_id=user.id, function=2, permission=priv_credit)
            if priv_cdr:
                Acl.objects.create(
                    user_id=user.id, function=3, permission=priv_cdr)
            if priv_record:
                Acl.objects.create(
                    user_id=user.id, function=4, permission=priv_record)

        return profile_items(request)
    except Exception as e:
        return HttpResponse(status=400, content=json.dumps({'err_msg': format(e)}), content_type='application/json')
예제 #15
0
파일: views.py 프로젝트: thecocce/phonecab
def archive_cdrs_export_excel(request):
    import time
    import xlwt
    book = xlwt.Workbook(encoding='utf8')
    sheet = book.add_sheet('Esportazione')

    default_style = xlwt.Style.default_style
    datetime_style = xlwt.easyxf(num_format_str='dd/mm/yyyy hh:mm')

    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")
    accountcode = request.GET.get("accountcode", "")
    dst = request.GET.get("dst", "")

    q_obj = Q(accountcode__icontains=accountcode)
    q_obj.add(Q(custom_dst__icontains=dst), Q.AND)
    q_obj.add(Q(dcontext='cabs-dial-number')|Q(dcontext='outgoing-operator-dial-number')|Q(dcontext='incoming-operator-dial-number'), Q.AND)
    q_obj.add(Q(custom_valid=1), Q.AND) # esportiamo solo le chiamate ritenute valide
    
    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)

    details = ArchivedDetail.objects.filter(q_obj).order_by('-calldate')

    sheet.write(0, 0, "Data e ora", style=default_style)
    sheet.write(0, 1, "Codice", style=default_style)
    sheet.write(0, 2, "Matricola", style=default_style)
    sheet.write(0, 3, "Cognome e Nome", style=default_style)
    sheet.write(0, 4, "Sorgente", style=default_style)
    sheet.write(0, 5, "Destinazione", style=default_style)
    sheet.write(0, 6, "Numero Autorizzato", style=default_style)
    sheet.write(0, 7, "Durata", style=default_style)
    sheet.write(0, 8, "Costo", style=default_style)

    for row, rowdata in enumerate(details):
        try:
            archived_phoneuser = ArchivedPhoneUser.objects.get(pincode=rowdata.accountcode)
            fullname = archived_phoneuser.get_full_name()
            matricola = archived_phoneuser.serial_no
            whitelist = ArchivedWhitelist.objects.get(phonenumber=rowdata.custom_dst,
                archived_phoneuser_id=archived_phoneuser.id)
            whitelist_label = whitelist.label
        except:
            fullname = '-'
            matricola = '-'
            whitelist_label = '-'

        calldate = time.strftime("%d-%m-%Y %H:%M:%S",
                                 time.strptime(str(rowdata.calldate),
                                               "%Y-%m-%d %H:%M:%S"))
        billsec = "%sm %ss" % (int(rowdata.billsec / 60), rowdata.billsec % 60)
        rowdata.price = rowdata.price > 0 and rowdata.price or 0
        sheet.write(row + 1, 0, calldate, style=datetime_style)
        sheet.write(row + 1, 1, rowdata.accountcode, style=default_style)
        sheet.write(row + 1, 2, matricola, style=default_style)
        sheet.write(row + 1, 3, fullname, style=default_style)
        sheet.write(row + 1, 4, rowdata.custom_src, style=default_style)
        sheet.write(row + 1, 5, rowdata.custom_dst, style=default_style)
        sheet.write(row + 1, 6, whitelist_label, style=default_style)
        sheet.write(row + 1, 7, billsec, style=default_style)
        sheet.write(row + 1, 8, rowdata.price, style=default_style)

    response = HttpResponse(content_type='application/vnd.ms-excel')
    filename = 'Dettaglio_chiamate_archiviate.xls'
    response[
        'Content-Disposition'] = 'attachment; filename=%s' % filename
    book.save(response)

    # logghiamo azione
    audit = Audit()
    audit.user = request.user
    d = request.GET.dict()
    audit.what = "Esportazione lista chiamate archiviate corrispondenti ai seguenti criteri: %s" \
        % (urlencode(d))
    audit.save()

    return response