示例#1
0
def voipcall_record_common_fun(request):
    """Return Form with Initial data or Array (kwargs) for Voipcall_Report
    Changelist_view"""
    start_date = ''
    end_date = ''
    if request.POST.get('from_date'):
        from_date = request.POST.get('from_date')
        start_date = ceil_strdate(from_date, 'start')

    if request.POST.get('to_date'):
        to_date = request.POST.get('to_date')
        end_date = ceil_strdate(to_date, 'end')

    # Assign form field value to local variable
    disposition = variable_value(request, 'status')
    campaign_id = variable_value(request, 'campaign_id')
    leg_type = variable_value(request, 'leg_type')

    kwargs = {}
    if start_date and end_date:
        kwargs['starting_date__range'] = (start_date, end_date)
    if start_date and end_date == '':
        kwargs['starting_date__gte'] = start_date
    if start_date == '' and end_date:
        kwargs['starting_date__lte'] = end_date

    if disposition and disposition != 'all':
        kwargs['disposition__exact'] = disposition

    if campaign_id and campaign_id != '0':
        kwargs['callrequest__campaign_id'] = campaign_id

    if leg_type and leg_type != '':
        kwargs['leg_type__exact'] = leg_type

    if len(kwargs) == 0:
        tday = datetime.today()
        kwargs['starting_date__gte'] = datetime(tday.year,
                                                tday.month,
                                                tday.day, 0, 0, 0, 0)
        kwargs['starting_date__lte'] = datetime(tday.year,
                                                tday.month,
                                                tday.day, 23, 59, 59)
    return kwargs
示例#2
0
def voipcall_record_common_fun(request):
    """Return Form with Initial data or Array (kwargs) for Voipcall_Report
    Changelist_view"""
    start_date = ''
    end_date = ''
    if request.POST.get('from_date'):
        from_date = request.POST.get('from_date')
        start_date = ceil_strdate(from_date, 'start')

    if request.POST.get('to_date'):
        to_date = request.POST.get('to_date')
        end_date = ceil_strdate(to_date, 'end')

    # Assign form field value to local variable
    disposition = variable_value(request, 'status')
    campaign_id = variable_value(request, 'campaign_id')
    leg_type = variable_value(request, 'leg_type')

    kwargs = {}
    if start_date and end_date:
        kwargs['starting_date__range'] = (start_date, end_date)
    if start_date and end_date == '':
        kwargs['starting_date__gte'] = start_date
    if start_date == '' and end_date:
        kwargs['starting_date__lte'] = end_date

    if disposition and disposition != 'all':
        kwargs['disposition__exact'] = disposition

    if campaign_id and campaign_id != '0':
        kwargs['callrequest__campaign_id'] = campaign_id

    if leg_type and leg_type != '':
        kwargs['leg_type__exact'] = leg_type

    if len(kwargs) == 0:
        tday = datetime.today()
        kwargs['starting_date__gte'] = datetime(tday.year, tday.month,
                                                tday.day, 0, 0, 0, 0)
        kwargs['starting_date__lte'] = datetime(tday.year, tday.month,
                                                tday.day, 23, 59, 59)
    return kwargs
示例#3
0
    def subscriber_report(self, request):
        """
        Get subscriber report

        **Attributes**:

            * ``form`` - SubscriberReportForm
            * ``template`` - admin/dialer_campaign/subscriber/subscriber_report.html
        """
        opts = Subscriber._meta
        tday = datetime.today()
        form = SubscriberReportForm(initial={"from_date": tday.strftime("%Y-%m-%d"),
                                             "to_date": tday.strftime("%Y-%m-%d")})
        total_subscriber = 0
        total_pending = 0
        total_pause = 0
        total_abort = 0
        total_fail = 0
        total_sent = 0
        total_in_process = 0
        total_not_auth = 0
        total_completed = 0

        if request.method == 'POST':
            form = SubscriberReportForm(request.POST)
            if form.is_valid():
                start_date = ''
                end_date = ''
                if request.POST.get('from_date'):
                    from_date = request.POST.get('from_date')
                    start_date = ceil_strdate(from_date, 'start')

                if request.POST.get('to_date'):
                    to_date = request.POST.get('to_date')
                    end_date = ceil_strdate(to_date, 'end')

                campaign_id = variable_value(request, 'campaign_id')
                kwargs = {}
                if start_date and end_date:
                    kwargs['updated_date__range'] = (start_date, end_date)
                if start_date and end_date == '':
                    kwargs['updated_date__gte'] = start_date
                if start_date == '' and end_date:
                    kwargs['updated_date__lte'] = end_date
                if campaign_id and campaign_id != '0':
                    kwargs['campaign_id'] = campaign_id

                select_data = {"updated_date": "SUBSTR(CAST(updated_date as CHAR(30)),1,10)"}
                subscriber = Subscriber.objects \
                    .filter(**kwargs) \
                    .extra(select=select_data) \
                    .values('updated_date', 'status') \
                    .annotate(Count('updated_date')) \
                    .order_by('updated_date')

                for i in subscriber:
                    total_subscriber += i['updated_date__count']
                    if i['status'] == SUBSCRIBER_STATUS.PENDING:
                        total_pending += i['updated_date__count']
                    elif i['status'] == SUBSCRIBER_STATUS.PAUSE:
                        total_pause += i['updated_date__count']
                    elif i['status'] == SUBSCRIBER_STATUS.ABORT:
                        total_abort += i['updated_date__count']
                    elif i['status'] == SUBSCRIBER_STATUS.FAIL:
                        total_fail += i['updated_date__count']
                    elif i['status'] == SUBSCRIBER_STATUS.SENT:
                        total_sent += i['updated_date__count']
                    elif i['status'] == SUBSCRIBER_STATUS.IN_PROCESS:
                        total_in_process += i['updated_date__count']
                    elif i['status'] == SUBSCRIBER_STATUS.NOT_AUTHORIZED:
                        total_not_auth += i['updated_date__count']
                    else:
                        #status COMPLETED
                        total_completed += i['updated_date__count']

        ctx = RequestContext(request, {
            'form': form,
            'opts': opts,
            'total_subscriber': total_subscriber,
            'total_pending': total_pending,
            'total_pause': total_pause,
            'total_abort': total_abort,
            'total_fail': total_fail,
            'total_sent': total_sent,
            'total_in_process': total_in_process,
            'total_not_auth': total_not_auth,
            'total_completed': total_completed,
            'SUBSCRIBER_STATUS_NAME': SUBSCRIBER_STATUS_NAME,
            'model_name': opts.object_name.lower(),
            'app_label': APP_LABEL,
            'title': _('subscriber report'),
        })

        return render_to_response('admin/dialer_campaign/subscriber/subscriber_report.html',
               context_instance=ctx)
示例#4
0
def survey_report(request):
    """
    Survey detail report for the logged in user

    **Attributes**:

        * ``template`` - frontend/survey/survey_report.html

    **Logic Description**:

        * List all survey_report which belong to the logged in user.
    """
    tday = datetime.today()
    from_date = tday.strftime("%Y-%m-%d")
    to_date = tday.strftime("%Y-%m-%d")
    form = SurveyDetailReportForm(request.user,
                                  initial={
                                      'from_date': from_date,
                                      'to_date': to_date
                                  })
    search_tag = 1
    survey_result = ''

    survey_cdr_daily_data = {
        'total_data': '',
        'total_duration': '',
        'total_calls': '',
        'total_avg_duration': '',
        'max_duration': '',
    }

    sort_col_field_list = [
        'starting_date', 'phone_number', 'duration', 'disposition', 'id'
    ]
    default_sort_field = 'starting_date'
    pagination_data =\
        get_pagination_vars(request, sort_col_field_list, default_sort_field)

    PAGE_SIZE = pagination_data['PAGE_SIZE']
    sort_order = pagination_data['sort_order']
    start_page = pagination_data['start_page']
    end_page = pagination_data['end_page']

    campaign_obj = ''
    action = 'tabs-1'

    if request.method == 'POST':
        #search_tag = 1
        form = SurveyDetailReportForm(request.user, request.POST)
        if form.is_valid():
            # set session var value
            request.session['session_from_date'] = ''
            request.session['session_to_date'] = ''
            request.session['session_campaign_id'] = ''
            request.session['session_surveycalls_kwargs'] = ''
            request.session['session_survey_cdr_daily_data'] = {}

            if "from_date" in request.POST:
                # From
                from_date = request.POST['from_date']
                request.session['session_from_date'] = from_date

            if "to_date" in request.POST:
                # To
                to_date = request.POST['to_date']
                request.session['session_to_date'] = to_date

            campaign_id = variable_value(request, 'campaign')
            if campaign_id:
                request.session['session_campaign_id'] = campaign_id
    else:
        rows = []
        campaign_id = ''

    try:
        if request.GET.get('page') or request.GET.get('sort_by'):
            from_date = request.session.get('session_from_date')
            to_date = request.session.get('session_to_date')
            campaign_id = request.session.get('session_campaign_id')
            search_tag = request.session.get('session_search_tag')
        else:
            from_date
    except NameError:
        tday = datetime.today()
        from_date = tday.strftime('%Y-%m-01')
        last_day = ((datetime(tday.year, tday.month, 1, 23, 59, 59, 999999) +
                     relativedelta(months=1)) -
                    relativedelta(days=1)).strftime('%d')
        to_date = tday.strftime('%Y-%m-' + last_day)
        search_tag = 0

        # unset session var value
        request.session['session_from_date'] = from_date
        request.session['session_to_date'] = to_date
        request.session['session_campaign_id'] = ''
        request.session['session_surveycalls_kwargs'] = ''
        request.session['session_search_tag'] = search_tag

    start_date = ceil_strdate(from_date, 'start')
    end_date = ceil_strdate(to_date, 'end')

    kwargs = {}
    if not request.user.is_superuser:
        kwargs['user'] = request.user
    kwargs['disposition__exact'] = VOIPCALL_DISPOSITION.ANSWER

    survey_result_kwargs = {}

    if start_date and end_date:
        kwargs['starting_date__range'] = (start_date, end_date)
        survey_result_kwargs['created_date__range'] = (start_date, end_date)
    if start_date and end_date == '':
        kwargs['starting_date__gte'] = start_date
        survey_result_kwargs['created_date__gte'] = start_date
    if start_date == '' and end_date:
        kwargs['starting_date__lte'] = end_date
        survey_result_kwargs['created_date__lte'] = end_date

    all_call_list = []
    try:
        campaign_obj = Campaign.objects.get(id=int(campaign_id))
        survey_result_kwargs['campaign'] = campaign_obj

        survey_result = get_survey_result(survey_result_kwargs)
        kwargs['callrequest__campaign'] = campaign_obj

        # List of Survey VoIP call report
        voipcall_list = VoIPCall.objects.filter(**kwargs)
        request.session['session_surveycalls_kwargs'] = kwargs
        all_call_list = voipcall_list.values_list('id', flat=True)

        # Get daily report from session while using pagination & sorting
        if request.GET.get('page') or request.GET.get('sort_by'):
            survey_cdr_daily_data = request.session[
                'session_survey_cdr_daily_data']
            action = 'tabs-2'
        else:
            survey_cdr_daily_data = survey_cdr_daily_report(voipcall_list)
            request.session[
                'session_survey_cdr_daily_data'] = survey_cdr_daily_data

        rows = voipcall_list.order_by(sort_order)[start_page:end_page]
    except:
        rows = []
        if request.method == 'POST':
            request.session["err_msg"] = _('no campaign attached with survey.')

    template = 'frontend/survey/survey_report.html'

    data = {
        'rows': rows,
        'all_call_list': all_call_list,
        'call_count': all_call_list.count() if all_call_list else 0,
        'PAGE_SIZE': PAGE_SIZE,
        'SURVEY_CALL_RESULT_NAME': SURVEY_CALL_RESULT_NAME,
        'col_name_with_order': pagination_data['col_name_with_order'],
        'total_data': survey_cdr_daily_data['total_data'],
        'total_duration': survey_cdr_daily_data['total_duration'],
        'total_calls': survey_cdr_daily_data['total_calls'],
        'total_avg_duration': survey_cdr_daily_data['total_avg_duration'],
        'max_duration': survey_cdr_daily_data['max_duration'],
        'module': current_view(request),
        'msg': request.session.get('msg'),
        'err_msg': request.session.get('err_msg'),
        'form': form,
        'survey_result': survey_result,
        'action': action,
        'search_tag': search_tag,
        'start_date': start_date,
        'end_date': end_date,
        'campaign_obj': campaign_obj,
    }
    request.session['msg'] = ''
    request.session['err_msg'] = ''
    return render_to_response(template,
                              data,
                              context_instance=RequestContext(request))
示例#5
0
def subscriber_list(request):
    """Subscriber list for the logged in user

    **Attributes**:

        * ``template`` - frontend/subscriber/list.html
        * ``form`` - SubscriberSearchForm

    **Logic Description**:

        * List all subscribers belonging to the logged in user & their campaign
    """
    sort_col_field_list = [
        "contact",
        "updated_date",
        "count_attempt",
        "completion_count_attempt",
        "status",
        "disposition",
        "collected_data",
        "agent",
    ]
    default_sort_field = "id"
    pagination_data = get_pagination_vars(request, sort_col_field_list, default_sort_field)

    PAGE_SIZE = pagination_data["PAGE_SIZE"]
    sort_order = pagination_data["sort_order"]
    start_page = pagination_data["start_page"]
    end_page = pagination_data["end_page"]

    form = SubscriberSearchForm(request.user)

    search_tag = 1
    campaign_id = ""
    agent_id = ""
    status = "all"

    if request.method == "POST":
        form = SubscriberSearchForm(request.user, request.POST)

        if form.is_valid():
            field_list = ["start_date", "end_date", "status", "campaign_id", "agent_id"]
            unset_session_var(request, field_list)
            campaign_id = getvar(request, "campaign_id", setsession=True)
            agent_id = getvar(request, "agent_id", setsession=True)

            if request.POST.get("from_date"):
                # From
                from_date = request.POST["from_date"]
                start_date = ceil_strdate(from_date, "start")
                request.session["session_start_date"] = start_date

            if request.POST.get("to_date"):
                # To
                to_date = request.POST["to_date"]
                end_date = ceil_strdate(to_date, "end")
                request.session["session_end_date"] = end_date

            status = request.POST.get("status")
            if status != "all":
                request.session["session_status"] = status

    post_var_with_page = 0
    try:
        if request.GET.get("page") or request.GET.get("sort_by"):
            post_var_with_page = 1
            start_date = request.session.get("session_start_date")
            end_date = request.session.get("session_end_date")
            campaign_id = request.session.get("session_campaign_id")
            agent_id = request.session.get("session_agent_id")
            status = request.session.get("session_status")
            form = SubscriberSearchForm(
                request.user,
                initial={
                    "from_date": start_date.strftime("%Y-%m-%d"),
                    "to_date": end_date.strftime("%Y-%m-%d"),
                    "campaign_id": campaign_id,
                    "agent_id": agent_id,
                    "status": status,
                },
            )
        else:
            post_var_with_page = 1
            if request.method == "GET":
                post_var_with_page = 0
    except:
        pass

    if post_var_with_page == 0:
        # default
        tday = datetime.utcnow().replace(tzinfo=utc)
        from_date = tday.strftime("%Y-%m-%d")
        to_date = tday.strftime("%Y-%m-%d")
        start_date = datetime(tday.year, tday.month, tday.day, 0, 0, 0, 0).replace(tzinfo=utc)
        end_date = datetime(tday.year, tday.month, tday.day, 23, 59, 59, 999999).replace(tzinfo=utc)

        form = SubscriberSearchForm(request.user, initial={"from_date": from_date, "to_date": to_date})
        # unset session var
        request.session["session_start_date"] = start_date
        request.session["session_end_date"] = end_date
        request.session["session_status"] = ""
        request.session["session_campaign_id"] = ""
        request.session["session_agent_id"] = ""

    kwargs = {}
    # updated_date might be replaced with last_attempt
    if start_date and end_date:
        kwargs["updated_date__range"] = (start_date, end_date)
    if start_date and end_date == "":
        kwargs["updated_date__gte"] = start_date
    if start_date == "" and end_date:
        kwargs["updated_date__lte"] = end_date

    if campaign_id and campaign_id != "0":
        kwargs["campaign_id"] = campaign_id

    if agent_id and agent_id != "0":
        kwargs["agent_id"] = agent_id

    if status and status != "all":
        kwargs["status"] = status

    subscriber_list = []
    all_subscriber_list = []
    subscriber_count = 0

    if request.user.is_superuser:
        subscriber_list = Subscriber.objects.all()
    else:
        subscriber_list = Subscriber.objects.filter(campaign__user=request.user)

    if kwargs:
        subscriber_list = subscriber_list.filter(**kwargs)
        request.session["subscriber_list_kwargs"] = kwargs
    # if contact_name:
    #    # Search on contact name
    #    q = (Q(last_name__icontains=contact_name) |
    #         Q(first_name__icontains=contact_name))
    #    if q:
    #        contact_list = contact_list.filter(q)

    all_subscriber_list = subscriber_list.order_by(sort_order)
    subscriber_list = all_subscriber_list[start_page:end_page]
    subscriber_count = all_subscriber_list.count()

    template = "frontend/subscriber/list.html"
    data = {
        "subscriber_list": subscriber_list,
        "all_subscriber_list": all_subscriber_list,
        "total_subscribers": subscriber_count,
        "PAGE_SIZE": PAGE_SIZE,
        "SUBSCRIBER_COLUMN_NAME": SUBSCRIBER_COLUMN_NAME,
        "col_name_with_order": pagination_data["col_name_with_order"],
        "msg": request.session.get("msg"),
        "error_msg": request.session.get("error_msg"),
        "form": form,
        "dialer_setting_msg": user_dialer_setting_msg(request.user),
        "search_tag": search_tag,
    }
    request.session["msg"] = ""
    request.session["error_msg"] = ""
    return render_to_response(template, data, context_instance=RequestContext(request))
示例#6
0
def voipcall_report(request):
    """VoIP Call Report

    **Attributes**:

        * ``form`` - VoipSearchForm
        * ``template`` - frontend/report/voipcall_report.html

    **Logic Description**:

        * Get VoIP call list according to search parameters for loggedin user

    **Important variable**:

        * ``request.session['voipcall_record_kwargs']`` - stores voipcall kwargs
    """
    sort_col_field_list = ['starting_date', 'leg_type', 'disposition',
                           'used_gateway', 'callerid', 'callid', 'phone_number',
                           'duration', 'billsec', 'amd_status']
    default_sort_field = 'starting_date'
    pagination_data =\
        get_pagination_vars(request, sort_col_field_list, default_sort_field)

    PAGE_SIZE = pagination_data['PAGE_SIZE']
    sort_order = pagination_data['sort_order']
    start_page = pagination_data['start_page']
    end_page = pagination_data['end_page']

    search_tag = 1
    action = 'tabs-1'

    if request.method == 'POST':
        form = VoipSearchForm(request.user, request.POST)
        if form.is_valid():
            field_list = ['start_date', 'end_date',
                          'disposition', 'campaign_id']
            unset_session_var(request, field_list)

            if request.POST.get('from_date'):
                # From
                from_date = request.POST['from_date']
                start_date = ceil_strdate(from_date, 'start')
                request.session['session_start_date'] = start_date

            if request.POST.get('to_date'):
                # To
                to_date = request.POST['to_date']
                end_date = ceil_strdate(to_date, 'end')
                request.session['session_end_date'] = end_date

            disposition = request.POST.get('status')
            if disposition != 'all':
                request.session['session_disposition'] = disposition

            campaign_id = request.POST.get('campaign_id')
            if campaign_id and int(campaign_id) != 0:
                request.session['session_campaign_id'] = int(campaign_id)

    post_var_with_page = 0
    try:
        if request.GET.get('page') or request.GET.get('sort_by'):
            post_var_with_page = 1
            start_date = request.session.get('session_start_date')
            end_date = request.session.get('session_end_date')
            disposition = request.session.get('session_disposition')
            campaign_id = request.session.get('session_campaign_id')
            form = VoipSearchForm(request.user,
                                  initial={'from_date': start_date.strftime('%Y-%m-%d'),
                                           'to_date': end_date.strftime('%Y-%m-%d'),
                                           'status': disposition,
                                           'campaign_id': campaign_id})
        else:
            post_var_with_page = 1
            if request.method == 'GET':
                post_var_with_page = 0
    except:
        pass

    if post_var_with_page == 0:
        # default
        tday = datetime.today()
        from_date = tday.strftime('%Y-%m-%d')
        to_date = tday.strftime('%Y-%m-%d')
        start_date = datetime(tday.year, tday.month, tday.day, 0, 0, 0, 0)
        end_date = datetime(tday.year, tday.month, tday.day, 23, 59, 59, 999999)
        disposition = 'all'
        campaign_id = 0
        form = VoipSearchForm(request.user,
                              initial={'from_date': from_date, 'to_date': to_date,
                                       'status': disposition, 'campaign_id': campaign_id})
        # unset session var
        request.session['session_start_date'] = start_date
        request.session['session_end_date'] = end_date
        request.session['session_disposition'] = disposition
        request.session['session_campaign_id'] = ''

    kwargs = {}
    if start_date and end_date:
        kwargs['starting_date__range'] = (start_date, end_date)
    if start_date and end_date == '':
        kwargs['starting_date__gte'] = start_date
    if start_date == '' and end_date:
        kwargs['starting_date__lte'] = end_date

    if disposition and disposition != 'all':
        kwargs['disposition__exact'] = disposition

    if campaign_id and int(campaign_id) != 0:
        kwargs['callrequest__campaign_id'] = campaign_id

    if not request.user.is_superuser:
        kwargs['user'] = request.user

    voipcall_list = VoIPCall.objects.filter(**kwargs)

    all_voipcall_list = voipcall_list.values_list('id', flat=True)

    # Session variable is used to get record set with searched option
    # into export file
    request.session['voipcall_record_kwargs'] = kwargs

    if request.GET.get('page') or request.GET.get('sort_by'):
        daily_data = request.session['voipcall_daily_data']
    else:
        if not voipcall_list:
            request.session['voipcall_daily_data'] = ''
        daily_data = get_voipcall_daily_data(voipcall_list)
        request.session['voipcall_daily_data'] = daily_data

    voipcall_list = voipcall_list.order_by(sort_order)[start_page:end_page]

    template = 'frontend/report/voipcall_report.html'
    data = {
        'form': form,
        'total_data': daily_data['total_data'],
        'total_duration': daily_data['total_duration'],
        'total_calls': daily_data['total_calls'],
        'total_avg_duration': daily_data['total_avg_duration'],
        'max_duration': daily_data['max_duration'],
        'module': current_view(request),
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
        'all_voipcall_list': all_voipcall_list,
        'voipcall_list': voipcall_list,
        'PAGE_SIZE': PAGE_SIZE,
        'CDR_REPORT_COLUMN_NAME': CDR_REPORT_COLUMN_NAME,
        'col_name_with_order': pagination_data['col_name_with_order'],
        'search_tag': search_tag,
        'start_date': start_date,
        'end_date': end_date,
        'action': action,
        'AMD': settings.AMD,
    }
    request.session['msg'] = ''
    request.session['error_msg'] = ''
    return render_to_response(template, data,
           context_instance=RequestContext(request))
示例#7
0
def survey_report(request):
    """
    Survey detail report for the logged in user

    **Attributes**:

        * ``template`` - frontend/survey/survey_report.html

    **Logic Description**:

        * List all survey_report which belong to the logged in user.
    """
    tday = datetime.today()
    from_date = tday.strftime("%Y-%m-%d")
    to_date = tday.strftime("%Y-%m-%d")
    form = SurveyDetailReportForm(request.user,
                                  initial={'from_date': from_date,
                                           'to_date': to_date})
    search_tag = 1
    survey_result = ''

    survey_cdr_daily_data = {
        'total_data': '',
        'total_duration': '',
        'total_calls': '',
        'total_avg_duration': '',
        'max_duration': '',
    }

    sort_col_field_list = ['starting_date', 'phone_number', 'duration',
                           'disposition', 'id']
    default_sort_field = 'starting_date'
    pagination_data =\
        get_pagination_vars(request, sort_col_field_list, default_sort_field)

    PAGE_SIZE = pagination_data['PAGE_SIZE']
    sort_order = pagination_data['sort_order']
    start_page = pagination_data['start_page']
    end_page = pagination_data['end_page']

    campaign_obj = ''
    action = 'tabs-1'

    if request.method == 'POST':
        #search_tag = 1
        form = SurveyDetailReportForm(request.user, request.POST)
        if form.is_valid():
            # set session var value
            request.session['session_from_date'] = ''
            request.session['session_to_date'] = ''
            request.session['session_campaign_id'] = ''
            request.session['session_surveycalls_kwargs'] = ''
            request.session['session_survey_cdr_daily_data'] = {}

            if "from_date" in request.POST:
                # From
                from_date = request.POST['from_date']
                request.session['session_from_date'] = from_date

            if "to_date" in request.POST:
                # To
                to_date = request.POST['to_date']
                request.session['session_to_date'] = to_date

            campaign_id = variable_value(request, 'campaign')
            if campaign_id:
                request.session['session_campaign_id'] = campaign_id
    else:
        rows = []
        campaign_id = ''

    try:
        if request.GET.get('page') or request.GET.get('sort_by'):
            from_date = request.session.get('session_from_date')
            to_date = request.session.get('session_to_date')
            campaign_id = request.session.get('session_campaign_id')
            search_tag = request.session.get('session_search_tag')
        else:
            from_date
    except NameError:
        tday = datetime.today()
        from_date = tday.strftime('%Y-%m-01')
        last_day = ((datetime(tday.year, tday.month, 1, 23, 59, 59, 999999) +
                    relativedelta(months=1)) -
                    relativedelta(days=1)).strftime('%d')
        to_date = tday.strftime('%Y-%m-' + last_day)
        search_tag = 0

        # unset session var value
        request.session['session_from_date'] = from_date
        request.session['session_to_date'] = to_date
        request.session['session_campaign_id'] = ''
        request.session['session_surveycalls_kwargs'] = ''
        request.session['session_search_tag'] = search_tag

    start_date = ceil_strdate(from_date, 'start')
    end_date = ceil_strdate(to_date, 'end')

    kwargs = {}
    if not request.user.is_superuser:
        kwargs['user'] = request.user
    kwargs['disposition__exact'] = VOIPCALL_DISPOSITION.ANSWER

    survey_result_kwargs = {}

    if start_date and end_date:
        kwargs['starting_date__range'] = (start_date, end_date)
        survey_result_kwargs['created_date__range'] = (start_date, end_date)
    if start_date and end_date == '':
        kwargs['starting_date__gte'] = start_date
        survey_result_kwargs['created_date__gte'] = start_date
    if start_date == '' and end_date:
        kwargs['starting_date__lte'] = end_date
        survey_result_kwargs['created_date__lte'] = end_date

    all_call_list = []
    try:
        campaign_obj = Campaign.objects.get(id=int(campaign_id))
        survey_result_kwargs['campaign'] = campaign_obj

        survey_result = get_survey_result(survey_result_kwargs)
        kwargs['callrequest__campaign'] = campaign_obj

        # List of Survey VoIP call report
        voipcall_list = VoIPCall.objects.filter(**kwargs)
        request.session['session_surveycalls_kwargs'] = kwargs
        all_call_list = voipcall_list.values_list('id', flat=True)

        # Get daily report from session while using pagination & sorting
        if request.GET.get('page') or request.GET.get('sort_by'):
            survey_cdr_daily_data = request.session['session_survey_cdr_daily_data']
            action = 'tabs-2'
        else:
            survey_cdr_daily_data = survey_cdr_daily_report(voipcall_list)
            request.session['session_survey_cdr_daily_data'] = survey_cdr_daily_data

        rows = voipcall_list.order_by(sort_order)[start_page:end_page]
    except:
        rows = []
        if request.method == 'POST':
            request.session["err_msg"] = _('no campaign attached with survey.')

    template = 'frontend/survey/survey_report.html'

    data = {
        'rows': rows,
        'all_call_list': all_call_list,
        'call_count': all_call_list.count() if all_call_list else 0,
        'PAGE_SIZE': PAGE_SIZE,
        'SURVEY_CALL_RESULT_NAME': SURVEY_CALL_RESULT_NAME,
        'col_name_with_order': pagination_data['col_name_with_order'],
        'total_data': survey_cdr_daily_data['total_data'],
        'total_duration': survey_cdr_daily_data['total_duration'],
        'total_calls': survey_cdr_daily_data['total_calls'],
        'total_avg_duration': survey_cdr_daily_data['total_avg_duration'],
        'max_duration': survey_cdr_daily_data['max_duration'],
        'module': current_view(request),
        'msg': request.session.get('msg'),
        'err_msg': request.session.get('err_msg'),
        'form': form,
        'survey_result': survey_result,
        'action': action,
        'search_tag': search_tag,
        'start_date': start_date,
        'end_date': end_date,
        'campaign_obj': campaign_obj,
    }
    request.session['msg'] = ''
    request.session['err_msg'] = ''
    return render_to_response(template, data,
                              context_instance=RequestContext(request))
示例#8
0
def voipcall_report(request):
    """VoIP Call Report

    **Attributes**:

        * ``form`` - VoipSearchForm
        * ``template`` - frontend/report/voipcall_report.html

    **Logic Description**:

        * Get VoIP call list according to search parameters for loggedin user

    **Important variable**:

        * ``request.session['voipcall_record_kwargs']`` - stores voipcall kwargs
    """
    sort_col_field_list = ['starting_date', 'leg_type', 'disposition',
                           'used_gateway', 'callerid', 'callid', 'phone_number',
                           'duration', 'billsec', 'amd_status']
    default_sort_field = 'starting_date'
    pagination_data =\
        get_pagination_vars(request, sort_col_field_list, default_sort_field)

    PAGE_SIZE = pagination_data['PAGE_SIZE']
    sort_order = pagination_data['sort_order']
    start_page = pagination_data['start_page']
    end_page = pagination_data['end_page']

    search_tag = 1
    action = 'tabs-1'

    if request.method == 'POST':
        form = VoipSearchForm(request.user, request.POST)
        if form.is_valid():
            field_list = ['start_date', 'end_date',
                          'disposition', 'campaign_id', 'leg_type']
            unset_session_var(request, field_list)

            if request.POST.get('from_date'):
                # From
                from_date = request.POST['from_date']
                start_date = ceil_strdate(from_date, 'start')
                request.session['session_start_date'] = start_date

            if request.POST.get('to_date'):
                # To
                to_date = request.POST['to_date']
                end_date = ceil_strdate(to_date, 'end')
                request.session['session_end_date'] = end_date

            disposition = request.POST.get('status')
            if disposition != 'all':
                request.session['session_disposition'] = disposition

            campaign_id = request.POST.get('campaign_id')
            if campaign_id and int(campaign_id) != 0:
                request.session['session_campaign_id'] = int(campaign_id)

            leg_type = request.POST.get('leg_type')
            if leg_type and leg_type != '':
                request.session['session_leg_type'] = leg_type

    post_var_with_page = 0
    try:
        if request.GET.get('page') or request.GET.get('sort_by'):
            post_var_with_page = 1
            start_date = request.session.get('session_start_date')
            end_date = request.session.get('session_end_date')
            disposition = request.session.get('session_disposition')
            campaign_id = request.session.get('session_campaign_id')
            leg_type = request.session.get('session_leg_type')
            form = VoipSearchForm(request.user,
                                  initial={'from_date': start_date.strftime('%Y-%m-%d'),
                                           'to_date': end_date.strftime('%Y-%m-%d'),
                                           'status': disposition,
                                           'campaign_id': campaign_id,
                                           'leg_type': leg_type})
        else:
            post_var_with_page = 1
            if request.method == 'GET':
                post_var_with_page = 0
    except:
        pass

    if post_var_with_page == 0:
        # default
        tday = datetime.today()
        from_date = tday.strftime('%Y-%m-%d')
        to_date = tday.strftime('%Y-%m-%d')
        start_date = datetime(tday.year, tday.month, tday.day, 0, 0, 0, 0)
        end_date = datetime(tday.year, tday.month, tday.day, 23, 59, 59, 999999)
        disposition = 'all'
        campaign_id = 0
        leg_type = ''
        form = VoipSearchForm(request.user,
                              initial={'from_date': from_date,
                                       'to_date': to_date,
                                       'status': disposition,
                                       'campaign_id': campaign_id,
                                       'leg_type': leg_type})
        # unset session var
        request.session['session_start_date'] = start_date
        request.session['session_end_date'] = end_date
        request.session['session_disposition'] = disposition
        request.session['session_campaign_id'] = ''
        request.session['session_leg_type'] = ''

    kwargs = {}
    if start_date and end_date:
        kwargs['starting_date__range'] = (start_date, end_date)
    if start_date and end_date == '':
        kwargs['starting_date__gte'] = start_date
    if start_date == '' and end_date:
        kwargs['starting_date__lte'] = end_date

    if disposition and disposition != 'all':
        kwargs['disposition__exact'] = disposition

    if campaign_id and int(campaign_id) != 0:
        kwargs['callrequest__campaign_id'] = campaign_id

    if leg_type and leg_type != '':
        kwargs['leg_type__exact'] = leg_type

    if not request.user.is_superuser:
        kwargs['user'] = request.user

    voipcall_list = VoIPCall.objects.filter(**kwargs)

    all_voipcall_list = voipcall_list.values_list('id', flat=True)

    # Session variable is used to get record set with searched option
    # into export file
    request.session['voipcall_record_kwargs'] = kwargs

    if request.GET.get('page') or request.GET.get('sort_by'):
        daily_data = request.session['voipcall_daily_data']
    else:
        if not voipcall_list:
            request.session['voipcall_daily_data'] = ''
        daily_data = get_voipcall_daily_data(voipcall_list)
        request.session['voipcall_daily_data'] = daily_data

    voipcall_list = voipcall_list.order_by(sort_order)[start_page:end_page]

    template = 'frontend/report/voipcall_report.html'
    data = {
        'form': form,
        'total_data': daily_data['total_data'],
        'total_duration': daily_data['total_duration'],
        'total_calls': daily_data['total_calls'],
        'total_avg_duration': daily_data['total_avg_duration'],
        'max_duration': daily_data['max_duration'],
        'module': current_view(request),
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
        'all_voipcall_list': all_voipcall_list,
        'voipcall_list': voipcall_list,
        'PAGE_SIZE': PAGE_SIZE,
        'CDR_REPORT_COLUMN_NAME': CDR_REPORT_COLUMN_NAME,
        'col_name_with_order': pagination_data['col_name_with_order'],
        'search_tag': search_tag,
        'start_date': start_date,
        'end_date': end_date,
        'action': action,
        'AMD': settings.AMD,
    }
    request.session['msg'] = ''
    request.session['error_msg'] = ''
    return render_to_response(template, data,
           context_instance=RequestContext(request))
示例#9
0
def sms_report(request):
    """SMS Report

    **Attributes**:

        * ``form`` - SMSSearchForm
        * ``template`` - frontend/sms_campaign/sms_report.html

    **Logic Description**:

        * Get SMS list according to search parameters for logged-in user

    **Important variable**:

        * ``request.session['sms_record_qs']`` - stores sms query set
    """
    sort_col_field_list = ['send_date', 'recipient_number', 'uuid',
                           'status', 'status_message', 'gateway']
    default_sort_field = 'send_date'

    pagination_data = get_pagination_vars(
        request, sort_col_field_list, default_sort_field)

    PAGE_SIZE = pagination_data['PAGE_SIZE']
    sort_order = pagination_data['sort_order']
    start_page = pagination_data['start_page']
    end_page = pagination_data['end_page']

    from_date = ''
    to_date = ''
    status = 'all'
    smscampaign = ''

    form = SMSSearchForm(request.user)
    search_tag = 1
    action = 'tabs-1'
    kwargs = {}

    if request.method == 'POST':
        form = SMSSearchForm(request.user, request.POST)
        if form.is_valid():
            request.session['session_start_date'] = ''
            request.session['session_end_date'] = ''
            request.session['session_status'] = ''
            request.session['session_smscampaign'] = ''

            if request.POST.get('from_date'):
                # From
                from_date = request.POST['from_date']
                start_date = ceil_strdate(from_date, 'start')
                request.session['session_start_date'] = start_date

            if request.POST.get('to_date'):
                # To
                to_date = request.POST['to_date']
                end_date = ceil_strdate(to_date, 'end')
                request.session['session_end_date'] = end_date

            status = request.POST.get('status')
            if status != 'all':
                request.session['session_status'] = status

            smscampaign = request.POST.get('smscampaign')
            if smscampaign != '0':
                request.session['session_smscampaign'] = smscampaign

    post_var_with_page = 0
    try:
        if request.GET.get('page') or request.GET.get('sort_by'):
            post_var_with_page = 1
            start_date = request.session.get('session_start_date')
            end_date = request.session.get('session_end_date')
            status = request.session.get('session_status')
            smscampaign = request.session.get('session_smscampaign')

            form = SMSSearchForm(request.user,
                                 initial={'from_date': start_date.strftime('%Y-%m-%d'),
                                          'to_date': end_date.strftime('%Y-%m-%d'),
                                          'status': status,
                                          'smscampaign': smscampaign})
        else:
            post_var_with_page = 1
            if request.method == 'GET':
                post_var_with_page = 0
    except:
        pass

    if post_var_with_page == 0:
        # default
        tday = datetime.utcnow().replace(tzinfo=utc)
        from_date = tday.strftime('%Y-%m-%d')
        to_date = tday.strftime('%Y-%m-%d')
        start_date = datetime(tday.year, tday.month, tday.day, 0, 0, 0, 0).replace(tzinfo=utc)
        end_date = datetime(tday.year, tday.month, tday.day, 23, 59, 59, 999999).replace(tzinfo=utc)
        status = 'all'
        smscampaign = ''
        form = SMSSearchForm(
            request.user, initial={'from_date': from_date, 'to_date': to_date,
                                   'status': status, 'smscampaign': smscampaign})
        # unset session var
        request.session['session_start_date'] = start_date
        request.session['session_end_date'] = end_date
        request.session['session_status'] = status
        request.session['session_smscampaign'] = smscampaign

    kwargs['sender'] = request.user

    if start_date and end_date:
        kwargs['send_date__range'] = (start_date, end_date)
    if start_date and end_date == '':
        kwargs['send_date__gte'] = start_date
    if start_date == '' and end_date:
        kwargs['send_date__lte'] = end_date

    if status and status != 'all':
        kwargs['status__exact'] = status

    if smscampaign and smscampaign != '0':
        kwargs['sms_campaign_id'] = smscampaign

    smslist = SMSMessage.objects.filter(**kwargs)
    all_sms_list = smslist.values_list('id', flat=True)
    sms_list = smslist.order_by(sort_order)[start_page:end_page]

    # Session variable is used to get record set with searched option
    # into export file
    request.session['sms_record_qs'] = smslist

    select_data = {"send_date": "SUBSTR(CAST(send_date as CHAR(30)),1,10)"}

    # Get Total Rrecords from SMSMessage Report table for Daily SMS Report
    total_data = all_sms_list.extra(select=select_data).values('send_date')\
        .annotate(Count('send_date')).order_by('-send_date')

    # Following code will count total sms
    if total_data.count() != 0:
        total_sms = sum([x['send_date__count'] for x in total_data])
    else:
        total_sms = 0

    template = 'frontend/sms_campaign/sms_report.html'
    data = {
        'form': form,
        'from_date': from_date,
        'all_sms_list': all_sms_list,
        'sms_list': sms_list,
        'sms_count': all_sms_list.count() if all_sms_list else 0,
        'SMS_REPORT_COLUMN_NAME': SMS_REPORT_COLUMN_NAME,
        'PAGE_SIZE': PAGE_SIZE,
        'col_name_with_order': pagination_data['col_name_with_order'],
        'start_date': start_date,
        'end_date': end_date,
        'to_date': to_date,
        'search_tag': search_tag,
        'action': action,
        'status': status,
        'total_data': total_data.reverse(),
        'total_sms': total_sms,
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }

    return render_to_response(
        template, data, context_instance=RequestContext(request))
示例#10
0
def event_list(request):
    """Event list for the logged in user

    **Attributes**:

        * ``template`` - frontend/appointment/event/list.html

    **Logic Description**:

        * List all events which belong to the logged in user.
    """
    today = datetime.utcnow().replace(tzinfo=utc)
    form = EventSearchForm(request.user,
                           initial={'start': today.strftime('%Y-%m-%d %H:%M:%S')})
    sort_col_field_list = ['id', 'start', 'end', 'title',
                           'calendar', 'status', 'created_on']
    default_sort_field = 'id'
    pagination_data = get_pagination_vars(
        request, sort_col_field_list, default_sort_field)

    PAGE_SIZE = pagination_data['PAGE_SIZE']
    sort_order = pagination_data['sort_order']
    start_page = pagination_data['start_page']
    end_page = pagination_data['end_page']

    #search_tag = 1
    start_date = ''
    calendar_id = ''
    calendar_user_id = ''

    if request.method == 'POST':
        form = EventSearchForm(request.user, request.POST)
        if form.is_valid():
            field_list = ['start_date', 'calendar_id', 'calendar_user_id']
            unset_session_var(request, field_list)

            if request.POST.get('start_date'):
                # start date
                start_date = ceil_strdate(request.POST['start_date'], 'start')
                request.session['session_start_date'] = start_date

            calendar_id = getvar(request, 'calendar_id', setsession=True)
            calendar_user_id = getvar(request, 'calendar_user_id', setsession=True)

    post_var_with_page = 0
    try:
        if request.GET.get('page') or request.GET.get('sort_by'):
            post_var_with_page = 1
            start_date = request.session.get('session_start_date')
            calendar_id = request.session.get('session_calendar_id')
            calendar_user_id = request.session.get('session_calendar_user_id')
            form = EventSearchForm(request.user, initial={'start_date': start_date,
                                                          'calendar_id': calendar_id,
                                                          'calendar_user_id': calendar_user_id,
                                                          })
        else:
            post_var_with_page = 1
            if request.method == 'GET':
                post_var_with_page = 0
    except:
        pass

    if post_var_with_page == 0:
        # default
        # unset session var
        field_list = ['start_date', 'calendar_id', 'calendar_user_id']
        unset_session_var(request, field_list)

    kwargs = {}
    if start_date:
        kwargs['start__gte'] = start_date

    if calendar_id and int(calendar_id) != 0:
        kwargs['calendar_id'] = calendar_id

    if calendar_user_id and int(calendar_user_id) != 0:
        kwargs['creator_id'] = calendar_user_id

    calendar_user_id_list = get_calendar_user_id_list(request.user)
    event_list = Event.objects.filter(
        calendar__user_id__in=calendar_user_id_list).order_by(sort_order)
    if kwargs:
        event_list = event_list.filter(**kwargs)
    event_list = event_list[start_page:end_page]

    template = 'frontend/appointment/event/list.html'
    data = {
        'form': form,
        'msg': request.session.get('msg'),
        'event_list': event_list,
        'total_event': event_list.count(),
        'PAGE_SIZE': PAGE_SIZE,
        'EVENT_COLUMN_NAME': EVENT_COLUMN_NAME,
        'col_name_with_order': pagination_data['col_name_with_order'],
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    request.session['msg'] = ''
    request.session['error_msg'] = ''
    return render_to_response(template, data,
                              context_instance=RequestContext(request))
示例#11
0
    def subscriber_report(self, request):
        """
        Get subscriber report

        **Attributes**:

            * ``form`` - SubscriberReportForm
            * ``template`` - admin/dialer_campaign/subscriber/subscriber_report.html
        """
        opts = Subscriber._meta
        tday = datetime.today()
        form = SubscriberReportForm(initial={"from_date": tday.strftime("%Y-%m-%d"),
                                             "to_date": tday.strftime("%Y-%m-%d")})
        total_subscriber = 0
        total_pending = 0
        total_pause = 0
        total_abort = 0
        total_fail = 0
        total_sent = 0
        total_in_process = 0
        total_not_auth = 0
        total_completed = 0

        if request.method == 'POST':
            form = SubscriberReportForm(request.POST)
            if form.is_valid():
                start_date = ''
                end_date = ''
                if request.POST.get('from_date'):
                    from_date = request.POST.get('from_date')
                    start_date = ceil_strdate(from_date, 'start')

                if request.POST.get('to_date'):
                    to_date = request.POST.get('to_date')
                    end_date = ceil_strdate(to_date, 'end')

                campaign_id = variable_value(request, 'campaign_id')
                kwargs = {}
                if start_date and end_date:
                    kwargs['updated_date__range'] = (start_date, end_date)
                if start_date and end_date == '':
                    kwargs['updated_date__gte'] = start_date
                if start_date == '' and end_date:
                    kwargs['updated_date__lte'] = end_date
                if campaign_id and campaign_id != '0':
                    kwargs['campaign_id'] = campaign_id

                select_data = {"updated_date": "SUBSTR(CAST(updated_date as CHAR(30)),1,10)"}
                subscriber = Subscriber.objects\
                    .filter(**kwargs)\
                    .extra(select=select_data)\
                    .values('updated_date', 'status')\
                    .annotate(Count('updated_date'))\
                    .order_by('updated_date')

                for i in subscriber:
                    total_subscriber += i['updated_date__count']
                    if i['status'] == SUBSCRIBER_STATUS.PENDING:
                        total_pending += i['updated_date__count']
                    elif i['status'] == SUBSCRIBER_STATUS.PAUSE:
                        total_pause += i['updated_date__count']
                    elif i['status'] == SUBSCRIBER_STATUS.ABORT:
                        total_abort += i['updated_date__count']
                    elif i['status'] == SUBSCRIBER_STATUS.FAIL:
                        total_fail += i['updated_date__count']
                    elif i['status'] == SUBSCRIBER_STATUS.SENT:
                        total_sent += i['updated_date__count']
                    elif i['status'] == SUBSCRIBER_STATUS.IN_PROCESS:
                        total_in_process += i['updated_date__count']
                    elif i['status'] == SUBSCRIBER_STATUS.NOT_AUTHORIZED:
                        total_not_auth += i['updated_date__count']
                    else:
                        #status COMPLETED
                        total_completed += i['updated_date__count']

        ctx = RequestContext(request, {
            'form': form,
            'opts': opts,
            'total_subscriber': total_subscriber,
            'total_pending': total_pending,
            'total_pause': total_pause,
            'total_abort': total_abort,
            'total_fail': total_fail,
            'total_sent': total_sent,
            'total_in_process': total_in_process,
            'total_not_auth': total_not_auth,
            'total_completed': total_completed,
            'SUBSCRIBER_STATUS_NAME': SUBSCRIBER_STATUS_NAME,
            'model_name': opts.object_name.lower(),
            'app_label': APP_LABEL,
            'title': _('subscriber report'),
        })

        return render_to_response('admin/dialer_campaign/subscriber/subscriber_report.html',
               context_instance=ctx)
示例#12
0
def survey_report(request):
    """
    Survey detail report for the logged in user

    **Attributes**:

        * ``template`` - frontend/survey/survey_report.html

    **Logic Description**:

        * List all survey_report which belong to the logged in user.
    """
    tday = datetime.today()
    from_date = tday.strftime("%Y-%m-%d")
    to_date = tday.strftime("%Y-%m-%d")

    form = SurveyDetailReportForm(request.user, initial={"from_date": from_date, "to_date": to_date})
    search_tag = 1
    survey_result = ""

    survey_cdr_daily_data = {
        "total_data": "",
        "total_duration": "",
        "total_calls": "",
        "total_avg_duration": "",
        "max_duration": "",
    }

    sort_col_field_list = ["starting_date", "phone_number", "duration", "disposition", "id"]
    default_sort_field = "starting_date"
    pagination_data = get_pagination_vars(request, sort_col_field_list, default_sort_field)

    PAGE_SIZE = pagination_data["PAGE_SIZE"]
    sort_order = pagination_data["sort_order"]
    start_page = pagination_data["start_page"]
    end_page = pagination_data["end_page"]

    survey_id = ""
    action = "tabs-1"
    campaign_obj = ""
    if request.method == "POST":
        # search_tag = 1
        form = SurveyDetailReportForm(request.user, request.POST)
        if form.is_valid():
            # set session var value
            request.session["session_from_date"] = ""
            request.session["session_to_date"] = ""
            request.session["session_survey_id"] = ""
            request.session["session_surveycalls_kwargs"] = ""
            request.session["session_survey_cdr_daily_data"] = {}

            if "from_date" in request.POST:
                # From
                from_date = request.POST["from_date"]
                request.session["session_from_date"] = from_date

            if "to_date" in request.POST:
                # To
                to_date = request.POST["to_date"]
                request.session["session_to_date"] = to_date

            survey_id = variable_value(request, "survey_id")
            if survey_id:
                request.session["session_survey_id"] = survey_id
    else:
        rows = []
        survey_id = ""

    try:
        if request.GET.get("page") or request.GET.get("sort_by"):
            from_date = request.session.get("session_from_date")
            to_date = request.session.get("session_to_date")
            survey_id = request.session.get("session_survey_id")
            search_tag = request.session.get("session_search_tag")
        else:
            from_date
    except NameError:
        tday = datetime.utcnow().replace(tzinfo=utc)
        from_date = tday.strftime("%Y-%m-01")
        last_day = (
            (datetime(tday.year, tday.month, 1, 23, 59, 59, 999999).replace(tzinfo=utc) + relativedelta(months=1))
            - relativedelta(days=1)
        ).strftime("%d")
        to_date = tday.strftime("%Y-%m-" + last_day)
        search_tag = 0

        # unset session var value
        request.session["session_from_date"] = from_date
        request.session["session_to_date"] = to_date
        request.session["session_survey_id"] = ""
        request.session["session_surveycalls_kwargs"] = ""
        request.session["session_search_tag"] = search_tag

    start_date = ceil_strdate(from_date, "start")
    end_date = ceil_strdate(to_date, "end")

    kwargs = {}
    if not request.user.is_superuser:
        kwargs["user"] = request.user
    kwargs["disposition__exact"] = VOIPCALL_DISPOSITION.ANSWER

    survey_result_kwargs = {}

    if start_date and end_date:
        kwargs["starting_date__range"] = (start_date, end_date)
        survey_result_kwargs["created_date__range"] = (start_date, end_date)
    if start_date and end_date == "":
        kwargs["starting_date__gte"] = start_date
        survey_result_kwargs["created_date__gte"] = start_date
    if start_date == "" and end_date:
        kwargs["starting_date__lte"] = end_date
        survey_result_kwargs["created_date__lte"] = end_date

    all_call_list = []
    try:
        survey_result_kwargs["survey_id"] = survey_id
        survey_result = get_survey_result(survey_result_kwargs)

        campaign_obj = Survey.objects.get(id=int(survey_id)).campaign
        kwargs["callrequest__campaign"] = campaign_obj

        # List of Survey VoIP call report
        voipcall_list = VoIPCall.objects.filter(**kwargs)
        request.session["session_surveycalls_kwargs"] = kwargs
        all_call_list = voipcall_list.values_list("id", flat=True)

        # Get daily report from session while using pagination & sorting
        if request.GET.get("page") or request.GET.get("sort_by"):
            survey_cdr_daily_data = request.session["session_survey_cdr_daily_data"]
            action = "tabs-2"
        else:
            survey_cdr_daily_data = survey_cdr_daily_report(voipcall_list)
            request.session["session_survey_cdr_daily_data"] = survey_cdr_daily_data

        rows = voipcall_list.order_by(sort_order)[start_page:end_page]
    except:
        rows = []
        if request.method == "POST":
            request.session["err_msg"] = _("no campaign attached with survey.")

    template = "frontend/survey/survey_report.html"

    data = {
        "rows": rows,
        "all_call_list": all_call_list,
        "call_count": all_call_list.count() if all_call_list else 0,
        "PAGE_SIZE": PAGE_SIZE,
        "SURVEY_CALL_RESULT_NAME": SURVEY_CALL_RESULT_NAME,
        "col_name_with_order": pagination_data["col_name_with_order"],
        "total_data": survey_cdr_daily_data["total_data"],
        "total_duration": survey_cdr_daily_data["total_duration"],
        "total_calls": survey_cdr_daily_data["total_calls"],
        "total_avg_duration": survey_cdr_daily_data["total_avg_duration"],
        "max_duration": survey_cdr_daily_data["max_duration"],
        "msg": request.session.get("msg"),
        "err_msg": request.session.get("err_msg"),
        "form": form,
        "survey_result": survey_result,
        "action": action,
        "search_tag": search_tag,
        "start_date": start_date,
        "end_date": end_date,
        "campaign_obj": campaign_obj,
    }
    request.session["msg"] = ""
    request.session["err_msg"] = ""
    return render_to_response(template, data, context_instance=RequestContext(request))