Esempio n. 1
0
def sms_record_common_fun(request):
    """Return Form with Initial data or Array (kwargs) for SMS_Report
    Changelist_view"""
    start_date = ''
    end_date = ''
    if request.POST.get('from_date'):
        from_date = request.POST.get('from_date')
        start_date = datetime(int(from_date[0:4]), int(from_date[5:7]),
            int(from_date[8:10]), 0, 0, 0, 0).replace(tzinfo=utc)
    if request.POST.get('to_date'):
        to_date = request.POST.get('to_date')
        end_date = datetime(int(to_date[0:4]), int(to_date[5:7]),
            int(to_date[8:10]), 23, 59, 59, 999999).replace(tzinfo=utc)

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

    # Patch code for persist search
    if request.method != 'POST':

        if request.session.get('from_date'):
            from_date = request.session['from_date']
            start_date = datetime(
                int(from_date[0:4]), int(from_date[5:7]), int(from_date[8:10]),
                0, 0, 0, 0).replace(tzinfo=utc)

        if request.session.get('to_date'):
            to_date = request.session['to_date']
            end_date = datetime(
                int(to_date[0:4]), int(to_date[5:7]), int(to_date[8:10]),
                23, 59, 59, 999999).replace(tzinfo=utc)

        if request.session.get('status'):
            status = request.session['status']

        if request.session.get('smscampaign'):
            smscampaign = request.session['smscampaign']

    kwargs = {}
    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:
        if status != 'all':
            kwargs['status__exact'] = status

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

    if len(kwargs) == 0:
        tday = datetime.utcnow().replace(tzinfo=utc)
        kwargs['send_date__gte'] = datetime(tday.year, tday.month, tday.day,
            0, 0, 0, 0).replace(tzinfo=utc)
    return kwargs
Esempio n. 2
0
def voipcall_search_admin_form_fun(request):
    """Return query string for Voipcall_Report Changelist_view"""
    start_date = ''
    end_date = ''
    if request.POST.get('from_date'):
        start_date = request.POST.get('from_date')

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

    # 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')
    query_string = ''

    if start_date and end_date:
        date_string = 'starting_date__gte=' + start_date + \
            '&starting_date__lte=' + end_date + '+23%3A59%3A59'
        query_string = return_query_string(query_string, date_string)

    if start_date and end_date == '':
        date_string = 'starting_date__gte=' + start_date
        query_string = return_query_string(query_string, date_string)

    if start_date == '' and end_date:
        date_string = 'starting_date__lte=' + end_date
        query_string = return_query_string(query_string, date_string)

    if disposition and disposition != 'all':
        disposition_string = 'disposition__exact=' + disposition
        query_string = return_query_string(query_string, disposition_string)

    if campaign_id and campaign_id != '0':
        campaign_string = 'callrequest__campaign_id=' + str(campaign_id)
        query_string = return_query_string(query_string, campaign_string)

    if leg_type and leg_type != '':
        leg_type_string = 'leg_type__exact=' + str(leg_type)
        query_string = return_query_string(query_string, leg_type_string)

    if start_date == '' and end_date == '':
        tday = datetime.today()
        end_date = start_date = tday.strftime("%Y-%m-%d")
        date_string = 'starting_date__gte=' + start_date + \
            '&starting_date__lte=' + end_date + '+23%3A59%3A59'
        query_string = return_query_string(query_string, date_string)

    return query_string
Esempio n. 3
0
def voipcall_search_admin_form_fun(request):
    """Return query string for Voipcall_Report Changelist_view"""
    start_date = ''
    end_date = ''
    if request.POST.get('from_date'):
        start_date = request.POST.get('from_date')

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

    # 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')
    query_string = ''

    if start_date and end_date:
        date_string = 'starting_date__gte=' + start_date + \
            '&starting_date__lte=' + end_date + '+23%3A59%3A59'
        query_string = return_query_string(query_string, date_string)

    if start_date and end_date == '':
        date_string = 'starting_date__gte=' + start_date
        query_string = return_query_string(query_string, date_string)

    if start_date == '' and end_date:
        date_string = 'starting_date__lte=' + end_date
        query_string = return_query_string(query_string, date_string)

    if disposition and disposition != 'all':
        disposition_string = 'disposition__exact=' + disposition
        query_string = return_query_string(query_string, disposition_string)

    if campaign_id and campaign_id != '0':
        campaign_string = 'callrequest__campaign_id=' + str(campaign_id)
        query_string = return_query_string(query_string, campaign_string)

    if leg_type and leg_type != '':
        leg_type_string = 'leg_type__exact=' + str(leg_type)
        query_string = return_query_string(query_string, leg_type_string)

    if start_date == '' and end_date == '':
        tday = datetime.today()
        end_date = start_date = tday.strftime("%Y-%m-%d")
        date_string = 'starting_date__gte=' + start_date + \
            '&starting_date__lte=' + end_date + '+23%3A59%3A59'
        query_string = return_query_string(query_string, date_string)

    return query_string
Esempio n. 4
0
def voipcall_search_admin_form_fun(request):
    """Return query string for Voipcall_Report Changelist_view"""
    start_date = ''
    end_date = ''
    if request.POST.get('from_date'):
        start_date = request.POST.get('from_date')

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

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

    if start_date and end_date:
        date_string = 'starting_date__gte=' + start_date + '&starting_date__lte=' + end_date + '+23%3A59%3A59'
        query_string = return_query_string(query_string, date_string)

    if start_date and end_date == '':
        date_string = 'starting_date__gte=' + start_date
        query_string = return_query_string(query_string, date_string)

    if start_date == '' and end_date:
        date_string = 'starting_date__lte=' + end_date
        query_string = return_query_string(query_string, date_string)

    if disposition:
        if disposition != 'all':
            disposition_string = 'disposition__exact=' + disposition
            query_string = return_query_string(query_string, disposition_string)

    return query_string
Esempio n. 5
0
def voipcall_search_admin_form_fun(request):
    """Return query string for Voipcall_Report Changelist_view"""
    start_date = ''
    end_date = ''
    if request.POST.get('from_date'):
        start_date = request.POST.get('from_date')

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

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

    if start_date and end_date:
        date_string = 'starting_date__gte=' + start_date + '&starting_date__lte=' + end_date + '+23%3A59%3A59'
        query_string = return_query_string(query_string, date_string)

    if start_date and end_date == '':
        date_string = 'starting_date__gte=' + start_date
        query_string = return_query_string(query_string, date_string)

    if start_date == '' and end_date:
        date_string = 'starting_date__lte=' + end_date
        query_string = return_query_string(query_string, date_string)

    if disposition:
        if disposition != 'all':
            disposition_string = 'disposition__exact=' + disposition
            query_string = return_query_string(query_string,
                                               disposition_string)

    return query_string
Esempio n. 6
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
Esempio n. 7
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
Esempio n. 8
0
def contact_search_common_fun(request):
    """Return Array (kwargs) for Contact list"""

    # Assign form field value to local variable
    contact_no = variable_value(request, 'contact_no')
    contact_no_type = variable_value(request, 'contact_no_type')
    phonebook = variable_value(request, 'phonebook')
    status = variable_value(request, 'status')

    kwargs = {}
    if phonebook != '0':
        kwargs['phonebook'] = phonebook

    if status != '2':
        kwargs['status'] = status

    contact_no = type_field_chk(contact_no, contact_no_type, 'contact')
    for i in contact_no:
        kwargs[i] = contact_no[i]

    return kwargs
Esempio n. 9
0
def contact_search_common_fun(request):
    """Return Array (kwargs) for Contact list"""

    # Assign form field value to local variable
    contact_no = variable_value(request, 'contact_no')
    contact_no_type = variable_value(request, 'contact_no_type')
    phonebook = variable_value(request, 'phonebook')
    status = variable_value(request, 'status')

    kwargs = {}
    if phonebook != '0':
        kwargs['phonebook'] = phonebook

    if status != '2':
        kwargs['status'] = status

    contact_no = type_field_chk(contact_no, contact_no_type, 'contact')
    for i in contact_no:
        kwargs[i] = contact_no[i]

    return kwargs
Esempio n. 10
0
def sms_search_admin_form_fun(request):
    """Return query string for SMSMessage Changelist_view"""
    start_date = ''
    end_date = ''
    smscampaign = ''
    if request.POST.get('from_date'):
        start_date = request.POST.get('from_date')

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

    # Assign form field value to local variable
    status = variable_value(request, 'status')
    smscampaign = variable_value(request, 'smscampaign')
    query_string = ''

    if start_date and end_date:
        date_string = 'send_date__gte=' + start_date + '&send_date__lte=' \
            + end_date + '+23%3A59%3A59'
        query_string = return_query_string(query_string, date_string)

    if start_date and end_date == '':
        date_string = 'send_date__gte=' + start_date
        query_string = return_query_string(query_string, date_string)

    if start_date == '' and end_date:
        date_string = 'send_date__lte=' + end_date
        query_string = return_query_string(query_string, date_string)

    if status:
        if status != 'all':
            status_string = 'status__exact=' + status
            query_string = return_query_string(query_string, status_string)

    if smscampaign and smscampaign != '0':
        smscampaign_string = 'sms_campaign=' + smscampaign
        query_string = return_query_string(query_string, smscampaign_string)

    return query_string
Esempio n. 11
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 = datetime(int(from_date[0:4]), int(from_date[5:7]),
                              int(from_date[8:10]), 0, 0, 0, 0)
    if request.POST.get('to_date'):
        to_date = request.POST.get('to_date')
        end_date = datetime(int(to_date[0:4]), int(to_date[5:7]),
                            int(to_date[8:10]), 23, 59, 59, 999999)

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

    # Patch code for persist search
    if request.method != 'POST':

        if  request.session.get('from_date'):
            from_date = request.session['from_date']
            start_date = datetime(int(from_date[0:4]), int(from_date[5:7]),
                                  int(from_date[8:10]), 0, 0, 0, 0)

        if  request.session.get('to_date'):
            to_date = request.session['to_date']
            end_date = datetime(int(to_date[0:4]), int(to_date[5:7]),
                                int(to_date[8:10]), 23, 59, 59, 999999)

        if request.session.get('status'):
            disposition = request.session['status']

    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:
        if disposition != 'all':
            kwargs['disposition__exact'] = disposition

    if len(kwargs) == 0:
        tday = datetime.today()
        kwargs['starting_date__gte'] = datetime(tday.year,
                                                tday.month,
                                                tday.day, 0, 0, 0, 0)
    return kwargs
Esempio n. 12
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 = datetime(int(from_date[0:4]), int(from_date[5:7]),
                              int(from_date[8:10]), 0, 0, 0, 0)
    if request.POST.get('to_date'):
        to_date = request.POST.get('to_date')
        end_date = datetime(int(to_date[0:4]), int(to_date[5:7]),
                            int(to_date[8:10]), 23, 59, 59, 999999)

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

    # Patch code for persist search
    if request.method != 'POST':

        if request.session.get('from_date'):
            from_date = request.session['from_date']
            start_date = datetime(int(from_date[0:4]), int(from_date[5:7]),
                                  int(from_date[8:10]), 0, 0, 0, 0)

        if request.session.get('to_date'):
            to_date = request.session['to_date']
            end_date = datetime(int(to_date[0:4]), int(to_date[5:7]),
                                int(to_date[8:10]), 23, 59, 59, 999999)

        if request.session.get('status'):
            disposition = request.session['status']

    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:
        if disposition != 'all':
            kwargs['disposition__exact'] = disposition

    if len(kwargs) == 0:
        tday = datetime.today()
        kwargs['starting_date__gte'] = datetime(tday.year, tday.month,
                                                tday.day, 0, 0, 0, 0)
    return kwargs
Esempio n. 13
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)
Esempio n. 14
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))
Esempio n. 15
0
    def changelist_view(self, request, extra_context=None):
        """Override changelist_view method of django-admin for search parameters

        **Attributes**:

            * ``form`` - VoipSearchForm
            * ``template`` - admin/dialer_cdr/voipcall/change_list.html

        **Logic Description**:

            * VoIP report Record Listing with search option & Daily Call Report
              search Parameters: by date, by status and by billed.
        """
        opts = VoIPCall._meta
        app_label = opts.app_label

        query_string = ''
        form = VoipSearchForm()
        if request.method == 'POST':
            query_string = voipcall_search_admin_form_fun(request)
            return HttpResponseRedirect("/admin/" + opts.app_label + "/" + \
                opts.object_name.lower() + "/?" + query_string)
        else:
            status = ''
            from_date = ''
            to_date = ''
            if request.GET.get('starting_date__gte'):
                from_date = variable_value(request, 'starting_date__gte')
            if request.GET.get('starting_date__lte'):
                to_date = variable_value(request, 'starting_date__lte')[0:10]
            if request.GET.get('disposition__exact'):
                status = variable_value(request, 'disposition__exact')
            form = VoipSearchForm(initial={
                'status': status,
                'from_date': from_date,
                'to_date': to_date
            })

        ChangeList = self.get_changelist(request)
        try:
            cl = ChangeList(request, self.model, self.list_display,
                            self.list_display_links, self.list_filter,
                            self.date_hierarchy, self.search_fields,
                            self.list_select_related, self.list_per_page,
                            self.list_max_show_all, self.list_editable, self)
        except IncorrectLookupParameters:
            if ERROR_FLAG in request.GET.keys():
                return render_to_response('admin/invalid_setup.html',
                                          {'title': _('Database error')})
            return HttpResponseRedirect(request.path + '?' + ERROR_FLAG + '=1')

        kwargs = {}
        if request.META['QUERY_STRING'] == '':
            tday = datetime.today()
            kwargs['starting_date__gte'] = datetime(tday.year, tday.month,
                                                    tday.day, 0, 0, 0, 0)
            cl.root_query_set.filter(**kwargs)

        formset = cl.formset = None

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

        selection_note_all = ungettext('%(total_count)s selected',
                                       'All %(total_count)s selected',
                                       cl.result_count)

        ctx = {
            'selection_note': _('0 of %(cnt)s selected') % {
                'cnt': len(cl.result_list)
            },
            'selection_note_all': selection_note_all % {
                'total_count': cl.result_count
            },
            'cl': cl,
            'form': form,
            'opts': opts,
            'model_name': opts.object_name.lower(),
            'app_label': _('VoIP Report'),
            'title': _('Call Report'),
        }
        return super(VoIPCallAdmin, self)\
               .changelist_view(request, extra_context=ctx)
Esempio n. 16
0
    def changelist_view(self, request, extra_context=None):
        """Override changelist_view method of django-admin for search parameters

        **Attributes**:

            * ``form`` - AdminSMSSearchForm
            * ``template`` - admin/sms_module/smsmessage/sms_report.html

        **Logic Description**:

            * SMSMessage report Record Listing with search option
              search Parameters: by date, by status and by billed.
        """
        opts = SMSMessage._meta

        query_string = ''
        form = AdminSMSSearchForm()
        if request.method == 'POST':
            query_string = sms_search_admin_form_fun(request)
            return HttpResponseRedirect(
                "/admin/" + opts.app_label + "/" + opts.object_name.lower() + "/?" + query_string)
        else:
            status = ''
            from_date = ''
            to_date = ''
            smscampaign = ''
            if request.GET.get('send_date__gte'):
                from_date = variable_value(request, 'send_date__gte')
            if request.GET.get('send_date__lte'):
                to_date = variable_value(request, 'send_date__lte')[0:10]
            if request.GET.get('status__exact'):
                status = variable_value(request, 'status__exact')
            if request.GET.get('sms_campaign'):
                smscampaign = variable_value(request, 'sms_campaign')
            form = AdminSMSSearchForm(initial={'status': status,
                                               'from_date': from_date,
                                               'to_date': to_date,
                                               'smscampaign': smscampaign})

        ChangeList = self.get_changelist(request)
        try:
            cl = ChangeList(request, self.model, self.list_display,
                self.list_display_links, self.list_filter, self.date_hierarchy,
                self.search_fields, self.list_select_related,
                self.list_per_page, self.list_max_show_all, self.list_editable,
                self)
        except IncorrectLookupParameters:
            if ERROR_FLAG in request.GET.keys():
                return render_to_response('admin/invalid_setup.html',
                                          {'title': _('Database error')})
            return HttpResponseRedirect(request.path + '?' + ERROR_FLAG + '=1')

        kwargs = {}
        if request.META['QUERY_STRING'] == '':
            tday = datetime.utcnow().replace(tzinfo=utc)
            kwargs['send_date__gte'] = datetime(tday.year, tday.month, tday.day,
                0, 0, 0, 0).replace(tzinfo=utc)
            cl.root_query_set.filter(**kwargs)

        cl.formset = None
        # Session variable is used to get record set with searched option into export file
        request.session['admin_sms_record_qs'] = cl.root_query_set

        selection_note_all = ungettext('%(total_count)s selected',
            'All %(total_count)s selected', cl.result_count)

        ctx = {
            'selection_note': _('0 of %(cnt)s selected') % {'cnt': len(cl.result_list)},
            'selection_note_all': selection_note_all % {'total_count': cl.result_count},
            'cl': cl,
            'form': form,
            'opts': opts,
            'model_name': opts.object_name.lower(),
            'app_label': _('SMS module'),
            'title': _('SMS report'),
        }
        return super(SMSMessageAdmin, self).changelist_view(request, extra_context=ctx)
Esempio n. 17
0
    def changelist_view(self, request, extra_context=None):
        """
        Override changelist_view method of django-admin for search parameters

        **Attributes**:

            * ``form`` - VoipSearchForm
            * ``template`` - admin/dialer_cdr/voipcall/change_list.html

        **Logic Description**:

            * VoIP report Record Listing with search option & Daily Call Report
              search Parameters: by date, by status and by billed.
        """
        opts = VoIPCall._meta
        query_string = ''
        form = VoipSearchForm(request.user)
        if request.method == 'POST':
            # Session variable get record set with searched option into export file
            request.session['admin_voipcall_record_kwargs'] = voipcall_record_common_fun(request)

            query_string = voipcall_search_admin_form_fun(request)
            return HttpResponseRedirect("/admin/%s/%s/?%s"
                % (opts.app_label, opts.object_name.lower(), query_string))
        else:
            status = ''
            from_date = ''
            to_date = ''
            campaign_id = ''
            if request.GET.get('starting_date__gte'):
                from_date = variable_value(request, 'starting_date__gte')
            if request.GET.get('starting_date__lte'):
                to_date = variable_value(request, 'starting_date__lte')[0:10]
            if request.GET.get('disposition__exact'):
                status = variable_value(request, 'disposition__exact')
            if request.GET.get('callrequest__campaign_id'):
                campaign_id = variable_value(request, 'callrequest__campaign_id')
            form = VoipSearchForm(request.user,
                                  initial={'status': status,
                                           'from_date': from_date,
                                           'to_date': to_date,
                                           'campaign': campaign_id})

        ChangeList = self.get_changelist(request)
        try:
            cl = ChangeList(request, self.model, self.list_display,
                self.list_display_links, self.list_filter, self.date_hierarchy,
                self.search_fields, self.list_select_related,
                self.list_per_page, self.list_max_show_all, self.list_editable,
                self)
        except IncorrectLookupParameters:
            if ERROR_FLAG in request.GET.keys():
                return render_to_response('admin/invalid_setup.html',
                        {'title': _('Database error')})
            return HttpResponseRedirect('%s?%s=1' % (request.path, ERROR_FLAG))

        if request.META['QUERY_STRING'] == '':
            # Default
            # Session variable get record set with searched option into export file
            request.session['admin_voipcall_record_kwargs'] = voipcall_record_common_fun(request)

            query_string = voipcall_search_admin_form_fun(request)
            return HttpResponseRedirect("/admin/%s/%s/?%s"
                % (opts.app_label, opts.object_name.lower(), query_string))

        cl.formset = None

        selection_note_all = ungettext('%(total_count)s selected',
            'All %(total_count)s selected', cl.result_count)

        ctx = {
            'selection_note': _('0 of %(cnt)s selected') % {'cnt': len(cl.result_list)},
            'selection_note_all': selection_note_all % {'total_count': cl.result_count},
            'cl': cl,
            'form': form,
            'opts': opts,
            'model_name': opts.object_name.lower(),
            'app_label': APP_LABEL,
            'title': _('call report'),
        }
        return super(VoIPCallAdmin, self).changelist_view(request, extra_context=ctx)
Esempio n. 18
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))
Esempio n. 19
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_qs']`` - stores voipcall query set
    """
    kwargs = {}
    kwargs['user'] = User.objects.get(username=request.user)
    from_date = ''
    to_date = ''
    disposition = variable_value(request, 'status')
    form = VoipSearchForm()
    if request.method == 'POST':

        if request.POST['from_date'] != "":
            from_date = request.POST['from_date']
        if request.POST['to_date'] != "":
            to_date = request.POST['to_date']

        form = VoipSearchForm(request.POST)
        kwargs = voipcall_record_common_fun(request)
    else:
        tday = datetime.today()
        kwargs['starting_date__gte'] = datetime(tday.year, tday.month,
                                                tday.day, 0, 0, 0, 0)

    voipcall_list = \
        VoIPCall.objects.filter(**kwargs).order_by('-starting_date')

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

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

    # Get Total Rrecords from VoIPCall Report table for Daily Call Report
    total_data = VoIPCall.objects.extra(select=select_data)\
                 .values('starting_date')\
                 .filter(**kwargs).annotate(Count('starting_date'))\
                 .annotate(Sum('duration'))\
                 .annotate(Avg('duration'))\
                 .order_by('-starting_date')

    # Following code will count total voip calls, duration
    if total_data.count() != 0:
        max_duration = \
            max([x['duration__sum'] for x in total_data])
        total_duration = \
            sum([x['duration__sum'] for x in total_data])
        total_calls = \
            sum([x['starting_date__count'] for x in total_data])
        total_avg_duration = \
            (sum([x['duration__avg']\
                for x in total_data])) / total_data.count()
    else:
        max_duration = 0
        total_duration = 0
        total_calls = 0
        total_avg_duration = 0

    template = 'frontend/report/voipcall_report.html'
    data = {
        'form': form,
        'from_date': from_date,
        'to_date': to_date,
        'disposition': disposition,
        'total_data': total_data.reverse(),
        'total_duration': total_duration,
        'total_calls': total_calls,
        'total_avg_duration': total_avg_duration,
        'max_duration': max_duration,
        'module': current_view(request),
        'notice_count': notice_count(request),
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }

    return render_to_response(template,
                              data,
                              context_instance=RequestContext(request))
Esempio n. 20
0
def customer_detail_change(request):
    """User Detail change on Customer UI

    **Attributes**:

        * ``form`` - UserChangeDetailForm, UserChangeDetailExtendForm, PasswordChangeForm
        * ``template`` - 'cdr/registration/user_detail_change.html'

    **Logic Description**:

        * User is able to change his/her detail.
    """
    if not request.user.is_superuser: # not superuser
        if not chk_account_code(request):
            return HttpResponseRedirect('/?acc_code_error=true')

    user_detail = User.objects.get(username=request.user)
    try:
        user_detail_extened = UserProfile.objects.get(user=user_detail)
    except UserProfile.DoesNotExist:
        #create UserProfile
        user_detail_extened = UserProfile(user=user_detail)
        user_detail_extened.save()

    user_detail_form = UserChangeDetailForm(request.user,
                                            instance=user_detail)
    user_detail_extened_form = UserChangeDetailExtendForm(request.user,
                                                          instance=user_detail_extened)
    
    user_password_form = PasswordChangeForm(user=request.user)
    check_phone_no_form = CheckPhoneNumberForm()

    try:
        user_ds = UserProfile.objects.get(user=request.user)
    except:
        dialer_set = ''

    # Define no of records per page
    PAGE_SIZE = settings.PAGE_SIZE
    try:
        PAGE_NUMBER = int(request.GET['page'])
    except:
        PAGE_NUMBER = 1

    col_name_with_order = {}
    # default
    col_name_with_order['message'] = '-message'
    col_name_with_order['notice_type'] = '-notice_type'
    col_name_with_order['sender'] = '-sender'
    col_name_with_order['added'] = '-added'

    sort_field = variable_value(request, 'sort_by')
    if not sort_field:
        sort_field = 'message' # default sort field
        sort_order = '-' + sort_field # desc
    else:
        if "-" in sort_field:
            sort_order = sort_field
            col_name_with_order[sort_field] = sort_field[1:]
        else:
            sort_order = sort_field
            col_name_with_order[sort_field] = '-' + sort_field
    
    user_notification = \
    notification.Notice.objects.filter(recipient=request.user)
    # Search on sender name
    q = (Q(sender=request.user))
    if q:
        user_notification = user_notification.filter(q)

    user_notification = user_notification.order_by(sort_order)

    msg_detail = ''
    msg_pass = ''
    msg_number = ''
    msg_note = ''
    error_detail = ''
    error_pass = ''
    error_number = ''
    action = ''

    if 'action' in request.GET:
        action = request.GET['action']
        
    if request.GET.get('msg_note') == 'true':
        msg_note = request.session['msg_note']

    # Mark all notification as read
    if request.GET.get('notification') == 'mark_read_all':
        notification_list = notification.Notice.objects.filter(unseen=1, recipient=request.user)
        notification_list.update(unseen=0)
        msg_note = _('All notifications are marked as read.')

    if request.method == 'POST':
        if request.POST['form-type'] == "change-detail":
            user_detail_form = UserChangeDetailForm(request.user, request.POST,
                                                    instance=user_detail)
            user_detail_extened_form = UserChangeDetailExtendForm(request.user,
                                                                  request.POST,
                                                                  instance=user_detail_extened)
            action = 'tabs-1'
            if user_detail_form.is_valid() and user_detail_extened_form.is_valid():
                user_detail_form.save()
                user_detail_extened_form.save()
                msg_detail = _('Detail has been changed.')
            else:
                error_detail = _('Please correct the errors below.')
        else: # "change-password"
            user_password_form = PasswordChangeForm(user=request.user,
                                                    data=request.POST)
            action = 'tabs-2'
            if user_password_form.is_valid():
                user_password_form.save()
                msg_pass = _('Your password has been changed.')
            else:
                error_pass = _('Please correct the errors below.')

    template = 'cdr/registration/user_detail_change.html'
    data = {
        'module': current_view(request),
        'user_detail_form': user_detail_form,
        'user_detail_extened_form': user_detail_extened_form,
        'user_password_form': user_password_form,
        'user_notification': user_notification,
        'PAGE_SIZE': PAGE_SIZE,
        'msg_detail': msg_detail,
        'msg_pass': msg_pass,
        'msg_note': msg_note,
        'error_detail': error_detail,
        'error_pass': error_pass,
        'notice_count': notice_count(request),
        'action': action,
        'col_name_with_order': col_name_with_order,
    }
    return render_to_response(template, data,
           context_instance=RequestContext(request))
Esempio n. 21
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))
Esempio n. 22
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 = ''
    col_name_with_order = []
    survey_cdr_daily_data = {
        'total_data': '',
        'total_duration': '',
        'total_calls': '',
        'total_avg_duration': '',
        'max_duration': '',
    }
    PAGE_SIZE = settings.PAGE_SIZE
    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'] = ''
            request.session['session_survey_result'] = ''
            request.session['session_survey_cdr_daily_data'] = {}

            if "from_date" in request.POST:
                # From
                from_date = request.POST['from_date']
                start_date = datetime(int(from_date[0:4]),
                                      int(from_date[5:7]),
                                      int(from_date[8:10]),
                                      0, 0, 0, 0)
                request.session['session_from_date'] = from_date

            if "to_date" in request.POST:
                # To
                to_date = request.POST['to_date']
                end_date = datetime(int(to_date[0:4]),
                                    int(to_date[5:7]),
                                    int(to_date[8:10]),
                                    23, 59, 59, 999999)
                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'] = ''
        request.session['session_survey_result'] = ''
        request.session['session_search_tag'] = search_tag

    start_date = datetime(int(from_date[0:4]),
                          int(from_date[5:7]),
                          int(from_date[8:10]),
                          0, 0, 0, 0)
    end_date = datetime(int(to_date[0:4]),
                        int(to_date[5:7]),
                        int(to_date[8:10]),
                        23, 59, 59, 999999)

    kwargs = {}
    kwargs['user'] = request.user
    kwargs['disposition__exact'] = 'ANSWER'

    survey_result_kwargs = {}
    survey_result_kwargs['callrequest__user'] = request.user

    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

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

        # Get survey result report from session
        # while using pagination & sorting
        if request.GET.get('page') or request.GET.get('sort_by'):
            survey_result = request.session['session_survey_result']
        else:
            survey_result = get_survey_result(survey_result_kwargs)
            request.session['session_survey_result'] = survey_result

        kwargs['callrequest__campaign'] = campaign_obj

        # sorting on column
        col_name_with_order = {}
        sort_field = variable_value(request, 'sort_by')
        if not sort_field:
            sort_field = '-starting_date'  # default sort field
        else:
            if "-" in sort_field:
                col_name_with_order['sort_field'] = sort_field[1:]
            else:
                col_name_with_order['sort_field'] = sort_field

        # List of Survey VoIP call report
        from_query =\
            'FROM survey_surveycampaignresult '\
            'WHERE survey_surveycampaignresult.callrequest_id = '\
            'dialer_callrequest.id '
        select_group_query = 'SELECT group_concat(CONCAT_WS("*|*", question, response, record_file) SEPARATOR "-|-") '

        rows = VoIPCall.objects\
                .only('starting_date', 'phone_number', 'duration', 'disposition')\
                .filter(**kwargs)\
                .extra(
                    select={
                        'question_response': select_group_query + from_query
                        },
                ).order_by(sort_field)

        request.session['session_surveycalls'] = rows

        # 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']
        else:
            survey_cdr_daily_data = survey_cdr_daily_report(kwargs,
                                                            from_query,
                                                    select_group_query)
            request.session['session_survey_cdr_daily_data'] = \
                survey_cdr_daily_data
    except:
        rows = []
        if request.method == 'POST':
            request.session["err_msg"] = \
                _('No campaign attached with survey.')

    template = 'frontend/survey/survey_report.html'

    data = {
        'rows': rows,
        'PAGE_SIZE': PAGE_SIZE,
        'col_name_with_order': 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'),
        'notice_count': notice_count(request),
        'form': form,
        'survey_result': survey_result,
        'action': action,
        'search_tag': search_tag,
        'start_date': start_date,
        'end_date': end_date,
        }
    request.session['msg'] = ''
    request.session['err_msg'] = ''
    return render_to_response(template, data,
        context_instance=RequestContext(request))
Esempio n. 23
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_qs']`` - stores voipcall query set
    """
    kwargs = {}
    kwargs['user'] = User.objects.get(username=request.user)
    from_date = ''
    to_date = ''
    disposition = variable_value(request, 'status')
    form = VoipSearchForm()
    if request.method == 'POST':

        if request.POST['from_date'] != "":
            from_date = request.POST['from_date']
        if request.POST['to_date'] != "":
            to_date = request.POST['to_date']

        form = VoipSearchForm(request.POST)
        kwargs = voipcall_record_common_fun(request)
    else:
        tday = datetime.today()
        kwargs['starting_date__gte'] = datetime(tday.year,
                                               tday.month,
                                               tday.day, 0, 0, 0, 0)

    voipcall_list = \
        VoIPCall.objects.filter(**kwargs).order_by('-starting_date')

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

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

    # Get Total Rrecords from VoIPCall Report table for Daily Call Report
    total_data = VoIPCall.objects.extra(select=select_data)\
                 .values('starting_date')\
                 .filter(**kwargs).annotate(Count('starting_date'))\
                 .annotate(Sum('duration'))\
                 .annotate(Avg('duration'))\
                 .order_by('-starting_date')

    # Following code will count total voip calls, duration
    if total_data.count() != 0:
        max_duration = \
            max([x['duration__sum'] for x in total_data])
        total_duration = \
            sum([x['duration__sum'] for x in total_data])
        total_calls = \
            sum([x['starting_date__count'] for x in total_data])
        total_avg_duration = \
            (sum([x['duration__avg']\
                for x in total_data])) / total_data.count()
    else:
        max_duration = 0
        total_duration = 0
        total_calls = 0
        total_avg_duration = 0

    template = 'frontend/report/voipcall_report.html'
    data = {
        'form': form,
        'from_date': from_date,
        'to_date': to_date,
        'disposition': disposition,
        'total_data': total_data.reverse(),
        'total_duration': total_duration,
        'total_calls': total_calls,
        'total_avg_duration': total_avg_duration,
        'max_duration': max_duration,
        'module': current_view(request),
        'notice_count': notice_count(request),
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }

    return render_to_response(template, data,
           context_instance=RequestContext(request))
Esempio n. 24
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)
Esempio n. 25
0
def customer_detail_change(request):
    """User Detail change on Customer UI

    **Attributes**:

        * ``form`` - UserChangeDetailForm, UserChangeDetailExtendForm, PasswordChangeForm
        * ``template`` - 'cdr/registration/user_detail_change.html'

    **Logic Description**:

        * User is able to change his/her detail.
    """
    if not request.user.is_superuser:  # not superuser
        if not chk_account_code(request):
            return HttpResponseRedirect('/?acc_code_error=true')

    user_detail = User.objects.get(username=request.user)
    try:
        user_detail_extened = UserProfile.objects.get(user=user_detail)
    except UserProfile.DoesNotExist:
        #create UserProfile
        user_detail_extened = UserProfile(user=user_detail)
        user_detail_extened.save()

    user_detail_form = UserChangeDetailForm(request.user, instance=user_detail)
    user_detail_extened_form = UserChangeDetailExtendForm(
        request.user, instance=user_detail_extened)

    user_password_form = PasswordChangeForm(user=request.user)
    check_phone_no_form = CheckPhoneNumberForm()

    try:
        user_ds = UserProfile.objects.get(user=request.user)
    except:
        dialer_set = ''

    # Define no of records per page
    PAGE_SIZE = settings.PAGE_SIZE
    try:
        PAGE_NUMBER = int(request.GET['page'])
    except:
        PAGE_NUMBER = 1

    col_name_with_order = {}
    # default
    col_name_with_order['message'] = '-message'
    col_name_with_order['notice_type'] = '-notice_type'
    col_name_with_order['sender'] = '-sender'
    col_name_with_order['added'] = '-added'

    sort_field = variable_value(request, 'sort_by')
    if not sort_field:
        sort_field = 'message'  # default sort field
        sort_order = '-' + sort_field  # desc
    else:
        if "-" in sort_field:
            sort_order = sort_field
            col_name_with_order[sort_field] = sort_field[1:]
        else:
            sort_order = sort_field
            col_name_with_order[sort_field] = '-' + sort_field

    user_notification = \
    notification.Notice.objects.filter(recipient=request.user)
    # Search on sender name
    q = (Q(sender=request.user))
    if q:
        user_notification = user_notification.filter(q)

    user_notification = user_notification.order_by(sort_order)

    msg_detail = ''
    msg_pass = ''
    msg_number = ''
    msg_note = ''
    error_detail = ''
    error_pass = ''
    error_number = ''
    action = ''

    if 'action' in request.GET:
        action = request.GET['action']

    if request.GET.get('msg_note') == 'true':
        msg_note = request.session['msg_note']

    # Mark all notification as read
    if request.GET.get('notification') == 'mark_read_all':
        notification_list = notification.Notice.objects.filter(
            unseen=1, recipient=request.user)
        notification_list.update(unseen=0)
        msg_note = _('All notifications are marked as read.')

    if request.method == 'POST':
        if request.POST['form-type'] == "change-detail":
            user_detail_form = UserChangeDetailForm(request.user,
                                                    request.POST,
                                                    instance=user_detail)
            user_detail_extened_form = UserChangeDetailExtendForm(
                request.user, request.POST, instance=user_detail_extened)
            action = 'tabs-1'
            if user_detail_form.is_valid(
            ) and user_detail_extened_form.is_valid():
                user_detail_form.save()
                user_detail_extened_form.save()
                msg_detail = _('Detail has been changed.')
            else:
                error_detail = _('Please correct the errors below.')
        else:  # "change-password"
            user_password_form = PasswordChangeForm(user=request.user,
                                                    data=request.POST)
            action = 'tabs-2'
            if user_password_form.is_valid():
                user_password_form.save()
                msg_pass = _('Your password has been changed.')
            else:
                error_pass = _('Please correct the errors below.')

    template = 'cdr/registration/user_detail_change.html'
    data = {
        'module': current_view(request),
        'user_detail_form': user_detail_form,
        'user_detail_extened_form': user_detail_extened_form,
        'user_password_form': user_password_form,
        'user_notification': user_notification,
        'PAGE_SIZE': PAGE_SIZE,
        'msg_detail': msg_detail,
        'msg_pass': msg_pass,
        'msg_note': msg_note,
        'error_detail': error_detail,
        'error_pass': error_pass,
        'notice_count': notice_count(request),
        'action': action,
        'col_name_with_order': col_name_with_order,
    }
    return render_to_response(template,
                              data,
                              context_instance=RequestContext(request))
Esempio n. 26
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 = ''
    col_name_with_order = []
    survey_cdr_daily_data = {
        'total_data': '',
        'total_duration': '',
        'total_calls': '',
        'total_avg_duration': '',
        'max_duration': '',
    }
    PAGE_SIZE = settings.PAGE_SIZE
    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'] = ''
            request.session['session_survey_result'] = ''
            request.session['session_survey_cdr_daily_data'] = {}

            if "from_date" in request.POST:
                # From
                from_date = request.POST['from_date']
                start_date = datetime(int(from_date[0:4]), int(from_date[5:7]),
                                      int(from_date[8:10]), 0, 0, 0, 0)
                request.session['session_from_date'] = from_date

            if "to_date" in request.POST:
                # To
                to_date = request.POST['to_date']
                end_date = datetime(int(to_date[0:4]), int(to_date[5:7]),
                                    int(to_date[8:10]), 23, 59, 59, 999999)
                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'] = ''
        request.session['session_survey_result'] = ''
        request.session['session_search_tag'] = search_tag

    start_date = datetime(int(from_date[0:4]), int(from_date[5:7]),
                          int(from_date[8:10]), 0, 0, 0, 0)
    end_date = datetime(int(to_date[0:4]), int(to_date[5:7]),
                        int(to_date[8:10]), 23, 59, 59, 999999)

    kwargs = {}
    kwargs['user'] = request.user
    kwargs['disposition__exact'] = 'ANSWER'

    survey_result_kwargs = {}
    survey_result_kwargs['callrequest__user'] = request.user

    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

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

        # Get survey result report from session
        # while using pagination & sorting
        if request.GET.get('page') or request.GET.get('sort_by'):
            survey_result = request.session['session_survey_result']
        else:
            survey_result = get_survey_result(survey_result_kwargs)
            request.session['session_survey_result'] = survey_result

        kwargs['callrequest__campaign'] = campaign_obj

        # sorting on column
        col_name_with_order = {}
        sort_field = variable_value(request, 'sort_by')
        if not sort_field:
            sort_field = '-starting_date'  # default sort field
        else:
            if "-" in sort_field:
                col_name_with_order['sort_field'] = sort_field[1:]
            else:
                col_name_with_order['sort_field'] = sort_field

        # List of Survey VoIP call report
        from_query =\
            'FROM survey_surveycampaignresult '\
            'WHERE survey_surveycampaignresult.callrequest_id = '\
            'dialer_callrequest.id '
        select_group_query = 'SELECT group_concat(CONCAT_WS("*|*", question, response, record_file) SEPARATOR "-|-") '

        rows = VoIPCall.objects\
                .only('starting_date', 'phone_number', 'duration', 'disposition')\
                .filter(**kwargs)\
                .extra(
                    select={
                        'question_response': select_group_query + from_query
                        },
                ).order_by(sort_field)

        request.session['session_surveycalls'] = rows

        # 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']
        else:
            survey_cdr_daily_data = survey_cdr_daily_report(
                kwargs, from_query, select_group_query)
            request.session['session_survey_cdr_daily_data'] = \
                survey_cdr_daily_data
    except:
        rows = []
        if request.method == 'POST':
            request.session["err_msg"] = \
                _('No campaign attached with survey.')

    template = 'frontend/survey/survey_report.html'

    data = {
        'rows': rows,
        'PAGE_SIZE': PAGE_SIZE,
        'col_name_with_order': 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'),
        'notice_count': notice_count(request),
        'form': form,
        'survey_result': survey_result,
        'action': action,
        'search_tag': search_tag,
        'start_date': start_date,
        'end_date': end_date,
    }
    request.session['msg'] = ''
    request.session['err_msg'] = ''
    return render_to_response(template,
                              data,
                              context_instance=RequestContext(request))