Example #1
0
def phonebook_list(request):
    """Phonebook list for the logged in user

    **Attributes**:

        * ``template`` - frontend/phonebook/list.html

    **Logic Description**:

        * List all phonebooks which belong to the logged in user.
    """
    sort_col_field_list = ["id", "name", "updated_date"]
    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"]

    phonebook_list = (
        Phonebook.objects.annotate(contact_count=Count("contact")).filter(user=request.user).order_by(sort_order)
    )

    template = "frontend/phonebook/list.html"
    data = {
        "msg": request.session.get("msg"),
        "phonebook_list": phonebook_list,
        "total_phonebook": phonebook_list.count(),
        "PAGE_SIZE": PAGE_SIZE,
        "PHONEBOOK_COLUMN_NAME": PHONEBOOK_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))
Example #2
0
def contact_change(request, object_id):
    """Update/Delete contact for the logged in user

    **Attributes**:

        * ``object_id`` - Selected contact object
        * ``form`` - ContactForm
        * ``template`` - frontend/contact/change.html

    **Logic Description**:

        * Update/delete selected contact from the contact list
          via ContactForm & get redirected to the contact list
    """
    contact = get_object_or_404(Contact, pk=object_id, phonebook__user=request.user)

    form = ContactForm(request.user, instance=contact)
    if request.method == "POST":
        # Delete contact
        if request.POST.get("delete"):
            return HttpResponseRedirect("/contact/del/%s/" % object_id)
        else:
            # Update contact
            form = ContactForm(request.user, request.POST, instance=contact)
            if form.is_valid():
                form.save()
                request.session["msg"] = _('"%s" is updated.') % request.POST["contact"]
                return HttpResponseRedirect("/contact/")

    template = "frontend/contact/change.html"
    data = {"form": form, "action": "update", "dialer_setting_msg": user_dialer_setting_msg(request.user)}
    return render_to_response(template, data, context_instance=RequestContext(request))
Example #3
0
def alarm_add(request):
    """Add a new alarm for the logged in user

    **Attributes**:

        * ``form`` - AlarmForm
        * ``template`` - frontend/appointment/alarm/change.html

    **Logic Description**:

        * Add new alarm belonging to the logged in user
          via AlarmForm & get redirected to the alarm list
    """
    form = AlarmForm(request.user)
    error_msg = False
    # Add alarm
    if request.method == 'POST':
        form = AlarmForm(request.user, request.POST)
        if form.is_valid():
            obj = form.save()
            request.session["msg"] = _('"%s" is added.') % obj
            return HttpResponseRedirect(redirect_url_to_alarm_list)

    template = 'frontend/appointment/alarm/change.html'
    data = {
        'form': form,
        'action': 'add',
        'error_msg': error_msg,
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    return render_to_response(template, data,
                              context_instance=RequestContext(request))
Example #4
0
def calendar_setting_add(request):
    """Add a new calendar setting for the logged in user

    **Attributes**:

        * ``form`` - CalendarSettingForm
        * ``template`` - frontend/appointment/calendar_setting/change.html

    **Logic Description**:

        * Add new calendar_setting belonging to the logged in user
          via ContactSettingForm & get redirected to the calendar_setting list
    """
    form = CalendarSettingForm(request.user)
    error_msg = False
    # Add calendar_setting
    if request.method == 'POST':
        form = CalendarSettingForm(request.user, request.POST)
        if form.is_valid():
            obj = form.save(commit=False)
            obj.user = request.user
            obj.save()
            request.session["msg"] = _('"%s" is added.') % obj
            return HttpResponseRedirect(redirect_url_to_calendar_setting_list)

    template = 'frontend/appointment/calendar_setting/change.html'
    data = {
        'form': form,
        'action': 'add',
        'error_msg': error_msg,
        'AMD': settings.AMD,
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    return render_to_response(template, data,
                              context_instance=RequestContext(request))
Example #5
0
def phonebook_add(request):
    """Add new Phonebook for the logged in user

    **Attributes**:

        * ``form`` - PhonebookForm
        * ``template`` - frontend/phonebook/change.html

    **Logic Description**:

        * Add a new phonebook which will belong to the logged in user
          via the phonebookForm & get redirected to the phonebook list
    """
    form = PhonebookForm()
    if request.method == "POST":
        form = PhonebookForm(request.POST)
        if form.is_valid():
            obj = form.save(commit=False)
            obj.user = request.user
            obj.save()
            request.session["msg"] = _('"%(name)s" added.') % {"name": request.POST["name"]}
            return HttpResponseRedirect("/phonebook/")
    template = "frontend/phonebook/change.html"
    data = {"form": form, "action": "add", "dialer_setting_msg": user_dialer_setting_msg(request.user)}
    return render_to_response(template, data, context_instance=RequestContext(request))
Example #6
0
def voipapp_add(request):
    """Add new VoIP App for logged in user

    **Attributes**:

        * ``form`` - VoipAppForm
        * ``template`` - frontend/voipapp/change.html

    **Logic Description**:

        * Add new voip app which will belong to logged in user
          via VoipAppForm form & get redirect to voipapp list
    """
    form = VoipAppForm()
    if request.method == 'POST':
        form = VoipAppForm(request.POST)
        if form.is_valid():
            obj = form.save(commit=False)
            obj.user = User.objects.get(username=request.user)
            obj.save()
            request.session["msg"] = _('"%(name)s" is added successfully.') %\
            request.POST
            return HttpResponseRedirect('/voipapp/')
    template = 'frontend/voipapp/change.html'
    data = {
       'module': current_view(request),
       'form': form,
       'action': 'add',
       'notice_count': notice_count(request),
       'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    return render_to_response(template, data,
           context_instance=RequestContext(request))
Example #7
0
def tier_list(request):
    """Tier list for the logged in Manager

    **Attributes**:

        * ``template`` - frontend/tier/list.html

    **Logic Description**:

        * List all tier which belong to the logged in manager.
    """
    sort_col_field_list = ['agent', 'queue', 'level', 'position', 'updated_date']
    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']

    tier_list = Tier.objects\
        .filter(manager=request.user).order_by(sort_order)

    template = 'frontend/tier/list.html'
    data = {
        'msg': request.session.get('msg'),
        'tier_list': tier_list,
        'total_tier': tier_list.count(),
        'PAGE_SIZE': PAGE_SIZE,
        'TIER_COLUMN_NAME': TIER_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))
Example #8
0
def dnc_contact_export_view(request):
    """Export CSV file of dnc contact form view

    **Attributes**:

        * ``form`` - DNCContact_fileExport
        * ``template`` - frontend/dnc_contact/export_dnc_contact.html

    **Logic Description**:

        * DNC contacts export form will be redirected to ``/dnc_contact/export/`` view
          with format & dnc_list_id parameters
    """
    form = DNCContact_fileExport(request.user, initial={'export_to': EXPORT_CHOICE.CSV})
    if request.method == 'POST':
        dnc_list_id = request.POST['dnc_list']
        export_to = request.POST['export_to']
        return HttpResponseRedirect('/dnc_contact/export/?format=' + export_to + '&dnc_list_id=' + dnc_list_id)

    template = 'frontend/dnc_contact/export_dnc_contact.html'
    data = {
        'module': current_view(request),
        'form': form,
        'action': 'update',
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    return render_to_response(template, data,
                              context_instance=RequestContext(request))
Example #9
0
def dnc_list(request):
    """DNC list for the logged in user

    **Attributes**:

        * ``template`` - frontend/dnc_list/list.html

    **Logic Description**:

        * List all dnc which belong to the logged in user.
    """
    sort_col_field_list = ['id', 'name', 'updated_date']
    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']

    dnc_list = DNC.objects.filter(user=request.user).order_by(sort_order)

    template = 'frontend/dnc_list/list.html'
    data = {
        'msg': request.session.get('msg'),
        'dnc_list': dnc_list,
        'total_dnc': dnc_list.count(),
        'PAGE_SIZE': PAGE_SIZE,
        'DNC_COLUMN_NAME': DNC_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))
Example #10
0
def dnc_add(request):
    """Add new DNC for the logged in user

    **Attributes**:

        * ``form`` - DNCForm
        * ``template`` - frontend/dnc_list/change.html

    **Logic Description**:

        * Add a new DNC which will belong to the logged in user
          via the DNCForm & get redirected to the dnc list
    """
    form = DNCForm()
    if request.method == 'POST':
        form = DNCForm(request.POST)
        if form.is_valid():
            obj = form.save(commit=False)
            obj.user = request.user
            obj.save()
            request.session["msg"] = _('"%(name)s" added.') %\
                {'name': request.POST['name']}
            return HttpResponseRedirect('/dnc_list/')
    template = 'frontend/dnc_list/change.html'
    data = {
        'module': current_view(request),
        'form': form,
        'action': 'add',
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    return render_to_response(template, data,
                              context_instance=RequestContext(request))
Example #11
0
def dnc_contact_export_view(request):
    """Export CSV file of dnc contact form view

    **Attributes**:

        * ``form`` - DNCContact_fileExport
        * ``template`` - frontend/dnc_contact/export_dnc_contact.html

    **Logic Description**:

        * DNC contacts export form will be redirected to ``/dnc_contact/export/`` view
          with format & dnc_list_id parameters
    """
    form = DNCContact_fileExport(request.user,
                                 initial={'export_to': EXPORT_CHOICE.CSV})
    if request.method == 'POST':
        dnc_list_id = request.POST['dnc_list']
        export_to = request.POST['export_to']
        return HttpResponseRedirect('/dnc_contact/export/?format=' +
                                    export_to + '&dnc_list_id=' + dnc_list_id)

    template = 'frontend/dnc_contact/export_dnc_contact.html'
    data = {
        'module': current_view(request),
        'form': form,
        'action': 'update',
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    return render_to_response(template,
                              data,
                              context_instance=RequestContext(request))
Example #12
0
def dnc_add(request):
    """Add new DNC for the logged in user

    **Attributes**:

        * ``form`` - DNCForm
        * ``template`` - frontend/dnc_list/change.html

    **Logic Description**:

        * Add a new DNC which will belong to the logged in user
          via the DNCForm & get redirected to the dnc list
    """
    form = DNCForm()
    if request.method == 'POST':
        form = DNCForm(request.POST)
        if form.is_valid():
            obj = form.save(commit=False)
            obj.user = request.user
            obj.save()
            request.session["msg"] = _('"%(name)s" added.') %\
                {'name': request.POST['name']}
            return HttpResponseRedirect('/dnc_list/')
    template = 'frontend/dnc_list/change.html'
    data = {
        'module': current_view(request),
        'form': form,
        'action': 'add',
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    return render_to_response(template,
                              data,
                              context_instance=RequestContext(request))
Example #13
0
def voiceapp_add(request):
    """Add new Voice App for logged in user

    **Attributes**:

        * ``form`` - VoiceAppForm
        * ``template`` - frontend/voiceapp/change.html

    **Logic Description**:

        * Add new voice app which will belong to logged in user
          via VoiceAppForm form & get redirect to voiceapp list
    """
    form = VoiceAppForm()
    if request.method == 'POST':
        form = VoiceAppForm(request.POST)
        if form.is_valid():
            obj = form.save(commit=False)
            obj.user = User.objects.get(username=request.user)
            obj.save()
            request.session["msg"] = _('"%(name)s" is added.') %\
                request.POST
            return HttpResponseRedirect('/voiceapp/')
    template = 'frontend/voiceapp/change.html'
    data = {
       'module': current_view(request),
       'form': form,
       'action': 'add',
       'notice_count': notice_count(request),
       'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    return render_to_response(template, data,
           context_instance=RequestContext(request))
Example #14
0
def queue_add(request):
    """Add new queue for the logged in manager

    **Attributes**:

        * ``form`` - QueueFrontEndForm
        * ``template`` - frontend/queue/change.html

    **Logic Description**:

        * Add a new queue which will belong to the logged in manager
          via the UserCreationForm & get redirected to the queue list
    """
    form = QueueFrontEndForm()
    if request.method == 'POST':
        form = QueueFrontEndForm(request.POST)
        if form.is_valid():
            obj = form.save(commit=False)
            obj.manager = Manager.objects.get(username=request.user)
            obj.save()

            request.session["msg"] = _('"%(name)s" queue is added.') %\
                {'name': obj.name}
            return HttpResponseRedirect(redirect_url_to_queue_list)

    template = 'frontend/queue/change.html'
    data = {
        'form': form,
        'action': 'add',
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    return render_to_response(template, data,
                              context_instance=RequestContext(request))
Example #15
0
def phonebook_change(request, object_id):
    """Update/Delete Phonebook for the logged in user

    **Attributes**:

        * ``object_id`` - Selected phonebook object
        * ``form`` - PhonebookForm
        * ``template`` - frontend/phonebook/change.html

    **Logic Description**:

        * Update/delete selected phonebook from the phonebook list
          via PhonebookForm & get redirected to phonebook list
    """
    phonebook = get_object_or_404(Phonebook, pk=object_id, user=request.user)
    form = PhonebookForm(instance=phonebook)
    if request.method == "POST":
        if request.POST.get("delete"):
            return HttpResponseRedirect("/phonebook/del/%s/" % object_id)
        else:
            form = PhonebookForm(request.POST, instance=phonebook)
            if form.is_valid():
                form.save()
                request.session["msg"] = _('"%(name)s" is updated.') % {"name": request.POST["name"]}
                return HttpResponseRedirect("/phonebook/")

    template = "frontend/phonebook/change.html"
    data = {"form": form, "action": "update", "dialer_setting_msg": user_dialer_setting_msg(request.user)}
    return render_to_response(template, data, context_instance=RequestContext(request))
def newfies_common_template_variable(request):
    """Return common_template_variable"""
    newfies_page_size = settings.PAGE_SIZE if settings.PAGE_SIZE else 10
    return {
        'newfies_page_size': newfies_page_size,
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
        'AUDIO_DEBUG': settings.AUDIO_DEBUG,
        'AMD': settings.AMD
    }
Example #17
0
def sms_campaign_add(request):
    """Add a new sms campaign for the logged in user

    **Attributes**:

        * ``form`` - SMSCampaignForm
        * ``template`` - frontend/sms_campaign/change.html

    **Logic Description**:

        * Before adding a sms campaign, check dialer setting limit if
          applicable to the user.
        * Add the new sms campaign which will belong to the logged in user
          via SMSCampaignForm & get redirected to sms campaign list
    """
    # If dialer setting is not attached with user, redirect to sms campaign list
    if not user_dialer_setting(request.user):
        request.session['error_msg'] = \
            _("in order to add a sms campaign, you need to have your \
               settings configured properly, please contact the admin.")
        return HttpResponseRedirect(redirect_url_to_smscampaign_list)

    # Check dialer setting limit
    if request.user and request.method != 'POST':
        # check Max Number of running campaign
        if check_sms_dialer_setting(request, check_for="smscampaign"):
            msg = _("you have too many sms campaigns. Max allowed %(limit)s")\
                % {'limit': dialer_setting_limit(request, limit_for="smscampaign")}
            request.session['msg'] = msg

            # sms campaign limit reached
            frontend_send_notification(
                request, SMS_NOTIFICATION_NAME.sms_campaign_limit_reached)
            return HttpResponseRedirect(redirect_url_to_smscampaign_list)

    form = SMSCampaignForm(request.user)
    # Add sms campaign
    if request.method == 'POST':
        form = SMSCampaignForm(request.user, request.POST)
        if form.is_valid():
            obj = form.save(commit=False)
            obj.user = User.objects.get(username=request.user)
            obj.save()
            form.save_m2m()

            request.session["msg"] = _('"%(name)s" is added.') %\
                {'name': request.POST['name']}
            return HttpResponseRedirect(redirect_url_to_smscampaign_list)

    template = 'frontend/sms_campaign/change.html'
    data = {
        'form': form,
        'action': 'add',
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    return render_to_response(
        template, data, context_instance=RequestContext(request))
Example #18
0
def contact_add(request):
    """Add a new contact into the selected phonebook for the logged in user

    **Attributes**:

        * ``form`` - ContactForm
        * ``template`` - frontend/contact/change.html

    **Logic Description**:

        * Before adding a contact, check dialer setting limit if applicable
          to the user.
        * Add new contact belonging to the logged in user
          via ContactForm & get redirected to the contact list
    """
    # Check dialer setting limit
    if request.user and request.method == 'POST':
        # check  Max Number of subscriber per campaign
        if check_dialer_setting(request, check_for="contact"):
            request.session['msg'] = \
                _("you have too many contacts per campaign. you are allowed a maximum of %(limit)s") % \
                {'limit': dialer_setting_limit(request, limit_for="contact")}

            # contact limit reached
            frontend_send_notification(request,
                                       NOTIFICATION_NAME.contact_limit_reached)
            return HttpResponseRedirect("/contact/")

    form = ContactForm(request.user)
    error_msg = False
    # Add contact
    if request.method == 'POST':
        form = ContactForm(request.user, request.POST)
        if form.is_valid():
            form.save()
            request.session["msg"] = _(
                '"%s" is added.') % request.POST['contact']
            return HttpResponseRedirect('/contact/')
        else:
            if len(request.POST['contact']) > 0:
                error_msg = _(
                    '"%s" cannot be added.') % request.POST['contact']

    phonebook_count = Phonebook.objects.filter(user=request.user).count()
    template = 'frontend/contact/change.html'
    data = {
        'module': current_view(request),
        'form': form,
        'action': 'add',
        'error_msg': error_msg,
        'phonebook_count': phonebook_count,
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    return render_to_response(template,
                              data,
                              context_instance=RequestContext(request))
Example #19
0
def contact_add(request):
    """Add a new contact into the selected phonebook for the logged in user

    **Attributes**:

        * ``form`` - ContactForm
        * ``template`` - frontend/contact/change.html

    **Logic Description**:

        * Before adding a contact, check dialer setting limit if applicable
          to the user.
        * Add new contact belonging to the logged in user
          via ContactForm & get redirected to the contact list
    """
    # Check dialer setting limit
    if request.user and request.method == 'POST':
        # check  Max Number of subscriber per campaign
        if check_dialer_setting(request, check_for="contact"):
            request.session['msg'] = \
                _("you have too many contacts per campaign. you are allowed a maximum of %(limit)s") % \
                {'limit': dialer_setting_limit(request, limit_for="contact")}

            # contact limit reached
            frontend_send_notification(request, NOTIFICATION_NAME.contact_limit_reached)
            return HttpResponseRedirect("/contact/")

    form = ContactForm(request.user)
    error_msg = False
    # Add contact
    if request.method == 'POST':
        form = ContactForm(request.user, request.POST)
        if form.is_valid():
            form.save()
            request.session["msg"] = _('"%(name)s" added.') %\
                {'name': request.POST['contact']}
            return HttpResponseRedirect('/contact/')
        else:
            if len(request.POST['contact']) > 0:
                error_msg = _('"%(name)s" cannot be added.') %\
                    {'name': request.POST['contact']}

    phonebook_count = Phonebook.objects.filter(user=request.user).count()
    template = 'frontend/contact/change.html'
    data = {
        'module': current_view(request),
        'form': form,
        'action': 'add',
        'error_msg': error_msg,
        'phonebook_count': phonebook_count,
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    return render_to_response(template, data,
                              context_instance=RequestContext(request))
Example #20
0
def agent_change(request, object_id):
    """Update/Delete Agent for the logged in manager

    **Attributes**:

        * ``object_id`` - Selected agent object
        * ``form`` - AgentChangeDetailExtendForm, AgentNameChangeForm
        * ``template`` - frontend/agent/change.html

    **Logic Description**:

        * Update/delete selected agent from the agent list
          via AgentChangeDetailExtendForm & get redirected to agent list
    """
    agent_profile = get_object_or_404(AgentProfile, pk=object_id, manager_id=request.user.id)
    agent_userdetail = get_object_or_404(Agent, pk=agent_profile.user_id)

    form = AgentChangeDetailExtendForm(request.user, instance=agent_profile)
    agent_username_form = AgentNameChangeForm(initial={
        'username': agent_userdetail.username,
        'password': agent_userdetail.password})

    if request.method == 'POST':
        if request.POST.get('delete'):
            agent_del(request, object_id)
            return HttpResponseRedirect(redirect_url_to_agent_list)
        else:
            form = AgentChangeDetailExtendForm(request.user, request.POST,
                                               instance=agent_profile)

            agent_username_form = AgentNameChangeForm(
                request.POST, initial={'password': agent_userdetail.password},
                instance=agent_userdetail)

            # Save agent username
            if agent_username_form.is_valid():
                agent_username_form.save()

                if form.is_valid():
                    form.save()
                    request.session["msg"] = _('"%(name)s" is updated.') \
                        % {'name': agent_profile.user}
                    return HttpResponseRedirect(redirect_url_to_agent_list)

    template = 'frontend/agent/change.html'
    data = {
        'form': form,
        'agent_username_form': agent_username_form,
        'action': 'update',
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    return render_to_response(template, data,
                              context_instance=RequestContext(request))
Example #21
0
def calendar_user_change(request, object_id):
    """Update/Delete calendar user for the logged in manager

    **Attributes**:

        * ``object_id`` - Selected calendar_user object
        * ``form`` - CalendarUserChangeDetailExtendForm, CalendarUserNameChangeForm
        * ``template`` - frontend/appointment/calendar_user/change.html

    **Logic Description**:

        * Update/delete selected calendar user from the calendar_user list
          via CalendarUserChangeDetailExtendForm & get redirected to calendar_user list
    """
    calendar_user_profile = get_object_or_404(CalendarUserProfile, pk=object_id, manager_id=request.user.id)
    calendar_user_userdetail = get_object_or_404(CalendarUser, pk=calendar_user_profile.user_id)

    form = CalendarUserChangeDetailExtendForm(request.user, instance=calendar_user_profile)
    calendar_user_username_form = CalendarUserNameChangeForm(
        initial={'username': calendar_user_userdetail.username,
                 'password': calendar_user_userdetail.password})

    if request.method == 'POST':
        if request.POST.get('delete'):
            calendar_user_del(request, object_id)
            return HttpResponseRedirect(redirect_url_to_calendar_user_list)
        else:
            form = CalendarUserChangeDetailExtendForm(request.user, request.POST, instance=calendar_user_profile)

            calendar_user_username_form = CalendarUserNameChangeForm(request.POST,
                initial={'password': calendar_user_userdetail.password},
                instance=calendar_user_userdetail)

            # Save calendar_user username
            if calendar_user_username_form.is_valid():
                calendar_user_username_form.save()

                if form.is_valid():
                    form.save()
                    request.session["msg"] = _('"%(name)s" is updated.') \
                        % {'name': calendar_user_profile.user}
                    return HttpResponseRedirect(redirect_url_to_calendar_user_list)

    template = 'frontend/appointment/calendar_user/change.html'
    data = {
        'form': form,
        'calendar_user_username_form': calendar_user_username_form,
        'action': 'update',
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    return render_to_response(template, data,
                              context_instance=RequestContext(request))
Example #22
0
def login_view(request):
    """Check User credentials

    **Attributes**:

        * ``form`` - LoginForm
        * ``template`` - frontend/index.html

    **Logic Description**:

        * Submitted user credentials need to be checked. If it is not valid
          then the system will redirect to the login page.
        * If submitted user credentials are valid then system will redirect to
          the dashboard.
    """
    template = 'frontend/index.html'
    errorlogin = ''

    if request.method == 'POST':
        loginform = LoginForm(request.POST)
        if loginform.is_valid():
            cd = loginform.cleaned_data
            user = authenticate(username=cd['user'],
                                password=cd['password'])
            if user is not None:
                if user.is_active:
                    login(request, user)
                    request.session['has_notified'] = False
                    # Redirect to a success page (dashboard).
                    return HttpResponseRedirect('/dashboard/')
                else:
                    # Return a 'disabled account' error message
                    errorlogin = _('disabled account')
            else:
                # Return an 'invalid login' error message.
                errorlogin = _('invalid login.')
        else:
            # Return an 'Valid User Credentials' error message.
            errorlogin = _('enter valid user credentials.')
    else:
        loginform = LoginForm()

    data = {
        'module': current_view(request),
        'loginform': loginform,
        'errorlogin': errorlogin,
        'is_authenticated': request.user.is_authenticated(),
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }

    return render_to_response(template, data,
           context_instance=RequestContext(request))
Example #23
0
def login_view(request):
    """Check User credentials

    **Attributes**:

        * ``form`` - LoginForm
        * ``template`` - frontend/index.html

    **Logic Description**:

        * Submitted user credentials need to be checked. If it is not valid
          then the system will redirect to the login page.
        * If submitted user credentials are valid then system will redirect to
          the dashboard.
    """
    template = 'frontend/index.html'
    errorlogin = ''

    if request.method == 'POST':
        loginform = LoginForm(request.POST)
        if loginform.is_valid():
            cd = loginform.cleaned_data
            user = authenticate(username=cd['user'], password=cd['password'])
            if user is not None:
                if user.is_active:
                    login(request, user)
                    request.session['has_notified'] = False
                    # Redirect to a success page (dashboard).
                    return HttpResponseRedirect('/dashboard/')
                else:
                    # Return a 'disabled account' error message
                    errorlogin = _('disabled account')
            else:
                # Return an 'invalid login' error message.
                errorlogin = _('invalid login.')
        else:
            # Return an 'Valid User Credentials' error message.
            errorlogin = _('enter valid user credentials.')
    else:
        loginform = LoginForm()

    data = {
        'module': current_view(request),
        'loginform': loginform,
        'errorlogin': errorlogin,
        'is_authenticated': request.user.is_authenticated(),
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }

    return render_to_response(template,
                              data,
                              context_instance=RequestContext(request))
Example #24
0
def contact_add(request):
    """Add a new contact into the selected phonebook for the logged in user

    **Attributes**:

        * ``form`` - ContactForm
        * ``template`` - frontend/contact/change.html

    **Logic Description**:

        * Before adding a contact, check dialer setting limit if applicable
          to the user.
        * Add new contact belonging to the logged in user
          via ContactForm & get redirected to the contact list
    """
    # Check dialer setting limit
    if request.user and request.method == "POST":
        if check_dialer_setting(request, check_for="contact"):
            request.session["msg"] = _("you have too many contacts. you are allowed a maximum of %(limit)s") % {
                "limit": dialer_setting_limit(request, limit_for="contact")
            }

            # contact limit reached
            frontend_send_notification(request, NOTIFICATION_NAME.contact_limit_reached)
            return HttpResponseRedirect("/contact/")

    form = ContactForm(request.user)
    error_msg = False
    # Add contact
    if request.method == "POST":
        form = ContactForm(request.user, request.POST)
        if form.is_valid():
            form.save()
            request.session["msg"] = _('"%s" is added.') % request.POST["contact"]
            return HttpResponseRedirect("/contact/")
        else:
            if len(request.POST["contact"]) > 0:
                error_msg = _('"%s" cannot be added.') % request.POST["contact"]

    phonebook_count = Phonebook.objects.filter(user=request.user).count()
    template = "frontend/contact/change.html"
    data = {
        "form": form,
        "action": "add",
        "error_msg": error_msg,
        "phonebook_count": phonebook_count,
        "dialer_setting_msg": user_dialer_setting_msg(request.user),
    }
    return render_to_response(template, data, context_instance=RequestContext(request))
Example #25
0
def campaign_list(request):
    """List all campaigns for the logged in user

    **Attributes**:

        * ``template`` - frontend/campaign/list.html

    **Logic Description**:

        * List all campaigns belonging to the logged in user
    """
    request.session['pagination_path'] = request.META[
        'PATH_INFO'] + '?' + request.META['QUERY_STRING']
    sort_col_field_list = [
        'id', 'name', 'startingdate', 'status', 'totalcontact'
    ]
    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']

    campaign_list = Campaign.objects.filter(
        user=request.user).order_by(sort_order)

    template = 'frontend/campaign/list.html'
    data = {
        'module': current_view(request),
        'campaign_list': campaign_list,
        'total_campaign': campaign_list.count(),
        'PAGE_SIZE': PAGE_SIZE,
        'CAMPAIGN_COLUMN_NAME': CAMPAIGN_COLUMN_NAME,
        'col_name_with_order': pagination_data['col_name_with_order'],
        'msg': request.session.get('msg'),
        'error_msg': request.session.get('error_msg'),
        'info_msg': request.session.get('info_msg'),
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    request.session['msg'] = ''
    request.session['error_msg'] = ''
    request.session['info_msg'] = ''
    return render_to_response(template,
                              data,
                              context_instance=RequestContext(request))
Example #26
0
def sms_campaign_change(request, object_id):
    """Update/Delete sms campaign for the logged in user

    **Attributes**:

        * ``object_id`` - Selected campaign object
        * ``form`` - SMSCampaignForm
        * ``template`` - frontend/sms_campaign/change.html

    **Logic Description**:

        * Update/delete selected sms campaign from the sms campaign list
          via SMSCampaignForm & get redirected to the sms campaign list
    """
    # If dialer setting is not attached with user, redirect to sms campaign list
    if not user_dialer_setting(request.user):
        return HttpResponseRedirect(redirect_url_to_smscampaign_list)

    sms_campaign = get_object_or_404(SMSCampaign, pk=object_id, user=request.user)
    form = SMSCampaignForm(request.user, instance=sms_campaign)
    if request.method == 'POST':
        # Delete sms campaign
        if request.POST.get('delete'):
            sms_campaign_del(request, object_id)
            return HttpResponseRedirect(redirect_url_to_smscampaign_list)
        else:
            # Update sms campaign
            form = SMSCampaignForm(
                request.user, request.POST, instance=sms_campaign)

            if form.is_valid():
                obj = form.save()
                obj.save()
                request.session["msg"] = _('"%(name)s" is updated.') \
                    % {'name': request.POST['name']}
                return HttpResponseRedirect(redirect_url_to_smscampaign_list)

    template = 'frontend/sms_campaign/change.html'
    data = {
        'form': form,
        'action': 'update',
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    return render_to_response(
        template, data, context_instance=RequestContext(request))
Example #27
0
def dnc_contact_change(request, object_id):
    """Update/Delete dnc contact for the logged in user

    **Attributes**:

        * ``object_id`` - Selected dnc contact object
        * ``form`` - DNCContactForm
        * ``template`` - frontend/dnc_contact/change.html

    **Logic Description**:

        * Update/delete selected dnc contact from the dnc contact list
          via DNCContactForm & get redirected to the dnc contact list
    """
    dnc_contact = get_object_or_404(DNCContact,
                                    pk=object_id,
                                    dnc__user=request.user)

    form = DNCContactForm(request.user, instance=dnc_contact)
    if request.method == 'POST':
        # Delete dnc contact
        if request.POST.get('delete'):
            return HttpResponseRedirect('/dnc_contact/del/%s/' % object_id)
        else:
            # Update dnc contact
            form = DNCContactForm(request.user,
                                  request.POST,
                                  instance=dnc_contact)
            if form.is_valid():
                form.save()
                request.session["msg"] = _('"%(name)s" is updated.') \
                    % {'name': request.POST['phone_number']}
                return HttpResponseRedirect('/dnc_contact/')

    template = 'frontend/dnc_contact/change.html'
    data = {
        'module': current_view(request),
        'form': form,
        'action': 'update',
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    return render_to_response(template,
                              data,
                              context_instance=RequestContext(request))
Example #28
0
def index(request):
    """Index view of the Customer Interface

    **Attributes**:

        * ``form`` - LoginForm
        * ``template`` - frontend/index.html
    """
    template = 'frontend/index.html'
    errorlogin = ''
    data = {
        'user': request.user,
        'loginform': LoginForm(),
        'errorlogin': errorlogin,
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }

    return render_to_response(template, data,
                              context_instance=RequestContext(request))
Example #29
0
def contact_change(request, object_id):
    """Update/Delete contact for the logged in user

    **Attributes**:

        * ``object_id`` - Selected contact object
        * ``form`` - ContactForm
        * ``template`` - frontend/contact/change.html

    **Logic Description**:

        * Update/delete selected contact from the contact list
          via ContactForm & get redirected to the contact list
    """
    contact = get_object_or_404(
        Contact, pk=object_id, phonebook__user=request.user)

    form = ContactForm(request.user, instance=contact)
    if request.method == 'POST':
        # Delete contact
        if request.POST.get('delete'):
            contact_del(request, object_id)
            return HttpResponseRedirect('/contact/')
        else:
            # Update contact
            form = ContactForm(request.user, request.POST, instance=contact)
            if form.is_valid():
                form.save()
                request.session["msg"] = _('"%(name)s" is updated.') \
                    % {'name': request.POST['contact']}
                return HttpResponseRedirect('/contact/')

    template = 'frontend/contact/change.html'
    data = {
        'module': current_view(request),
        'form': form,
        'action': 'update',
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    return render_to_response(template, data,
                              context_instance=RequestContext(request))
Example #30
0
def index(request):
    """Index view of the Customer Interface

    **Attributes**:

        * ``form`` - LoginForm
        * ``template`` - frontend/index.html
    """
    template = 'frontend/index.html'
    errorlogin = ''
    data = {
        'module': current_view(request),
        'user': request.user,
        'loginform': LoginForm(),
        'errorlogin': errorlogin,
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }

    return render_to_response(template,
                              data,
                              context_instance=RequestContext(request))
Example #31
0
def voiceapp_list(request):
    """Voce App list for logged in user

    **Attributes**:

        * ``template`` - frontend/voiceapp/list.html

    **Logic Description**:

        * List all voice app which are belong to logged in user
    """
    template = 'frontend/voiceapp/list.html'
    data = {
        'module': current_view(request),
        'msg': request.session.get('msg'),
        'notice_count': notice_count(request),
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    request.session['msg'] = ''
    return render_to_response(template, data,
           context_instance=RequestContext(request))
Example #32
0
def voipapp_list(request):
    """VoIP App list for logged in user

    **Attributes**:

        * ``template`` - frontend/voipapp/list.html

    **Logic Description**:

        * List all voip app which are belong to logged in user
    """
    template = 'frontend/voipapp/list.html'
    data = {
        'module': current_view(request),        
        'msg': request.session.get('msg'),
        'notice_count': notice_count(request),
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    request.session['msg'] = ''
    return render_to_response(template, data,
           context_instance=RequestContext(request))
Example #33
0
def tier_change(request, object_id):
    """Update/Delete tier for the logged in manager

    **Attributes**:

        * ``object_id`` - Selected tier object
        * ``form`` - TierFrontEndForm
        * ``template`` - frontend/tier/change.html

    **Logic Description**:

        * Update/delete selected tier from the tier list
          via TierFrontEndForm & get redirected to the tier list
    """
    tier = get_object_or_404(
        Tier, pk=object_id, manager=request.user)

    form = TierFrontEndForm(request.user.id, instance=tier)
    if request.method == 'POST':
        # Delete tier
        if request.POST.get('delete'):
            tier_del(request, object_id)
            return HttpResponseRedirect(redirect_url_to_tier_list)
        else:
            # Update tier
            form = TierFrontEndForm(request.user.id, request.POST, instance=tier)
            if form.is_valid():
                form.save()
                request.session["msg"] = _('"%(id)s" tier is updated.') \
                    % {'id': tier.id}
                return HttpResponseRedirect(redirect_url_to_tier_list)

    template = 'frontend/tier/change.html'
    data = {
        'form': form,
        'action': 'update',
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    return render_to_response(template, data,
                              context_instance=RequestContext(request))
Example #34
0
def dnc_contact_add(request):
    """Add a new dnc contact into the selected dnc for the logged in user

    **Attributes**:

        * ``form`` - DNCContactForm
        * ``template`` - frontend/dnc_contact/change.html

    **Logic Description**:

        * Add new dnc contact belonging to the logged in user
          via DNCContactForm & get redirected to the contact list
    """
    form = DNCContactForm(request.user)
    error_msg = False
    # Add dnc contact
    if request.method == 'POST':
        form = DNCContactForm(request.user, request.POST)
        if form.is_valid():
            form.save()
            request.session["msg"] = _('"%(name)s" added.') %\
                {'name': request.POST['phone_number']}
            return HttpResponseRedirect('/dnc_contact/')
        else:
            if len(request.POST['phone_number']) > 0:
                error_msg = _('"%(name)s" cannot be added.') %\
                    {'name': request.POST['phone_number']}

    #FIXME: dnc_count not used
    dnc_count = DNC.objects.filter(user=request.user).count()
    template = 'frontend/dnc_contact/change.html'
    data = {
        'module': current_view(request),
        'form': form,
        'action': 'add',
        'error_msg': error_msg,
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    return render_to_response(template, data,
                              context_instance=RequestContext(request))
Example #35
0
def dnc_contact_change(request, object_id):
    """Update/Delete dnc contact for the logged in user

    **Attributes**:

        * ``object_id`` - Selected dnc contact object
        * ``form`` - DNCContactForm
        * ``template`` - frontend/dnc_contact/change.html

    **Logic Description**:

        * Update/delete selected dnc contact from the dnc contact list
          via DNCContactForm & get redirected to the dnc contact list
    """
    dnc_contact = get_object_or_404(
        DNCContact, pk=object_id, dnc__user=request.user)

    form = DNCContactForm(request.user, instance=dnc_contact)
    if request.method == 'POST':
        # Delete dnc contact
        if request.POST.get('delete'):
            dnc_contact_del(request, object_id)
            return HttpResponseRedirect(dnc_contact_redirect_url)
        else:
            # Update dnc contact
            form = DNCContactForm(request.user, request.POST, instance=dnc_contact)
            if form.is_valid():
                form.save()
                request.session["msg"] = _('"%(name)s" is updated.') \
                    % {'name': request.POST['phone_number']}
                return HttpResponseRedirect(dnc_contact_redirect_url)

    template = 'frontend/dnc_contact/change.html'
    data = {
        'form': form,
        'action': 'update',
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    return render_to_response(template, data,
                              context_instance=RequestContext(request))
Example #36
0
def queue_change(request, object_id):
    """Update/Delete queue for the logged in manager

    **Attributes**:

        * ``object_id`` - Selected queue object
        * ``form`` - QueueFrontEndForm
        * ``template`` - frontend/queue/change.html

    **Logic Description**:

        * Update/delete selected queue from the queue list
          via QueueFrontEndForm & get redirected to the queue list
    """
    queue = get_object_or_404(
        Queue, pk=object_id, manager=request.user)

    form = QueueFrontEndForm(instance=queue)
    if request.method == 'POST':
        # Delete queue
        if request.POST.get('delete'):
            queue_del(request, object_id)
            return HttpResponseRedirect(redirect_url_to_queue_list)
        else:
            # Update queue
            form = QueueFrontEndForm(request.POST, instance=queue)
            if form.is_valid():
                obj = form.save()
                request.session["msg"] = _('"%(name)s" is updated.') \
                    % {'name': obj.name}
                return HttpResponseRedirect(redirect_url_to_queue_list)

    template = 'frontend/queue/change.html'
    data = {
        'form': form,
        'action': 'update',
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    return render_to_response(template, data,
                              context_instance=RequestContext(request))
Example #37
0
def campaign_list(request):
    """List all campaigns for the logged in user

    **Attributes**:

        * ``template`` - frontend/campaign/list.html

    **Logic Description**:

        * List all campaigns belonging to the logged in user
    """
    request.session['pagination_path'] = request.META['PATH_INFO'] + '?' + request.META['QUERY_STRING']
    sort_col_field_list = ['id', 'name', 'startingdate', 'status', 'totalcontact']
    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']

    campaign_list = Campaign.objects.filter(user=request.user).order_by(sort_order)

    template = 'frontend/campaign/list.html'
    data = {
        'module': current_view(request),
        'campaign_list': campaign_list,
        'total_campaign': campaign_list.count(),
        'PAGE_SIZE': PAGE_SIZE,
        'CAMPAIGN_COLUMN_NAME': CAMPAIGN_COLUMN_NAME,
        'col_name_with_order': pagination_data['col_name_with_order'],
        'msg': request.session.get('msg'),
        'error_msg': request.session.get('error_msg'),
        'info_msg': request.session.get('info_msg'),
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    request.session['msg'] = ''
    request.session['error_msg'] = ''
    request.session['info_msg'] = ''
    return render_to_response(template, data,
                              context_instance=RequestContext(request))
Example #38
0
def voiceapp_change(request, object_id):
    """Update/Delete Voice app for logged in user

    **Attributes**:

        * ``object_id`` - Selected voiceapp object
        * ``form`` - VoiceAppForm
        * ``template`` - frontend/voiceapp/change.html

    **Logic Description**:

        * Update/delete selected voiceapp from voiceapp list
          via VoiceAppForm form & get redirect to voice list
    """
    voiceapp = VoiceApp.objects.get(pk=object_id)
    form = VoiceAppForm(instance=voiceapp)
    if request.method == 'POST':
        if request.POST.get('delete'):
            voiceapp_del(request, object_id)
            return HttpResponseRedirect('/voiceapp/')
        else:
            form = VoiceAppForm(request.POST, instance=voiceapp)
            if form.is_valid():
                form.save()
                request.session["msg"] = _('"%(name)s" is updated.' \
                % {'name': request.POST['name']})
                return HttpResponseRedirect('/voiceapp/')

    template = 'frontend/voiceapp/change.html'
    data = {
        'module': current_view(request),
        'form': form,
        'action': 'update',
        'notice_count': notice_count(request),
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    return render_to_response(template,
                              data,
                              context_instance=RequestContext(request))
Example #39
0
def phonebook_list(request):
    """Phonebook list for the logged in user

    **Attributes**:

        * ``template`` - frontend/phonebook/list.html

    **Logic Description**:

        * List all phonebooks which belong to the logged in user.
    """
    sort_col_field_list = ['id', 'name', 'updated_date']
    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']

    phonebook_list = Phonebook.objects\
        .annotate(contact_count=Count('contact'))\
        .filter(user=request.user).order_by(sort_order)

    template = 'frontend/phonebook/list.html'
    data = {
        'module': current_view(request),
        'msg': request.session.get('msg'),
        'phonebook_list': phonebook_list,
        'total_phonebook': phonebook_list.count(),
        'PAGE_SIZE': PAGE_SIZE,
        'PHONEBOOK_COLUMN_NAME': PHONEBOOK_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))
Example #40
0
def calendar_setting_change(request, object_id):
    """Update/Delete calendar_setting for the logged in user

    **Attributes**:

        * ``object_id`` - Selected calendar_setting object
        * ``form`` - CalendarSettingForm
        * ``template`` - frontend/appointment/calendar_setting/change.html

    **Logic Description**:

        * Update/delete selected calendar_setting from the calendar_setting list
          via CalendarSettingForm & get redirected to the calendar_setting list
    """
    calendar_setting = get_object_or_404(CalendarSetting, pk=object_id)

    form = CalendarSettingForm(request.user, instance=calendar_setting)
    if request.method == 'POST':
        # Delete calendar_setting
        if request.POST.get('delete'):
            calendar_setting_del(request, object_id)
            return HttpResponseRedirect(redirect_url_to_calendar_setting_list)
        else:
            # Update calendar_setting
            form = CalendarSettingForm(request.user, request.POST, instance=calendar_setting)
            if form.is_valid():
                obj = form.save()
                request.session["msg"] = _('"%s" is updated.') % obj
                return HttpResponseRedirect(redirect_url_to_calendar_setting_list)

    template = 'frontend/appointment/calendar_setting/change.html'
    data = {
        'form': form,
        'action': 'update',
        'AMD': settings.AMD,
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    return render_to_response(template, data,
                              context_instance=RequestContext(request))
Example #41
0
def dnc_contact_add(request):
    """Add a new dnc contact into the selected dnc for the logged in user

    **Attributes**:

        * ``form`` - DNCContactForm
        * ``template`` - frontend/dnc_contact/change.html

    **Logic Description**:

        * Add new dnc contact belonging to the logged in user
          via DNCContactForm & get redirected to the contact list
    """
    form = DNCContactForm(request.user)
    error_msg = False
    # Add dnc contact
    if request.method == 'POST':
        form = DNCContactForm(request.user, request.POST)
        if form.is_valid():
            form.save()
            request.session["msg"] = _('"%(name)s" added.') %\
                {'name': request.POST['phone_number']}
            return HttpResponseRedirect('/dnc_contact/')
        else:
            if len(request.POST['phone_number']) > 0:
                error_msg = _('"%(name)s" cannot be added.') %\
                    {'name': request.POST['phone_number']}

    template = 'frontend/dnc_contact/change.html'
    data = {
        'module': current_view(request),
        'form': form,
        'action': 'add',
        'error_msg': error_msg,
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    return render_to_response(template,
                              data,
                              context_instance=RequestContext(request))
Example #42
0
def agent_add(request):
    """Add new Agent for the logged in manager

    **Attributes**:

        * ``form`` - AgentCreationForm
        * ``template`` - frontend/agent/change.html

    **Logic Description**:

        * Add a new agent which will belong to the logged in manager
          via the AgentCreationForm & get redirected to the agent list
    """
    form = AgentCreationForm()
    if request.method == 'POST':
        form = AgentCreationForm(request.POST)
        if form.is_valid():
            new_agent = form.save()

            new_agent_profile = AgentProfile.objects.create(
                user=new_agent,
                manager=Manager.objects.get(username=request.user),
                is_agent=True
            )
            permission = Permission.objects.get(codename='view_agent_dashboard')
            new_agent.user_permissions.add(permission)

            request.session["msg"] = _('"%(name)s" added as agent.') % \
                {'name': request.POST['username']}
            return HttpResponseRedirect(redirect_url_to_agent_list + '%s/' % str(new_agent_profile.id))

    template = 'frontend/agent/change.html'
    data = {
        'form': form,
        'action': 'add',
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    return render_to_response(template, data,
                              context_instance=RequestContext(request))
Example #43
0
def alarm_list(request):
    """Alarm list for the logged in user

    **Attributes**:

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

    **Logic Description**:

        * List all alarms which belong to the logged in user.
    """
    sort_col_field_list = ['id', 'alarm_phonenumber', 'alarm_email', 'daily_start',
                           'daily_stop', 'method', 'survey', 'event',
                           'date_start_notice', 'status']
    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']

    calendar_user_id_list = get_calendar_user_id_list(request.user)
    alarm_list = Alarm.objects.filter(
        event__calendar__user_id__in=calendar_user_id_list).order_by(sort_order)

    template = 'frontend/appointment/alarm/list.html'
    data = {
        'msg': request.session.get('msg'),
        'alarm_list': alarm_list,
        'total_alarm': alarm_list.count(),
        'PAGE_SIZE': PAGE_SIZE,
        'ALARM_COLUMN_NAME': ALARM_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))
Example #44
0
def phonebook_change(request, object_id):
    """Update/Delete Phonebook for the logged in user

    **Attributes**:

        * ``object_id`` - Selected phonebook object
        * ``form`` - PhonebookForm
        * ``template`` - frontend/phonebook/change.html

    **Logic Description**:

        * Update/delete selected phonebook from the phonebook list
          via PhonebookForm & get redirected to phonebook list
    """
    phonebook = get_object_or_404(Phonebook, pk=object_id, user=request.user)
    form = PhonebookForm(instance=phonebook)
    if request.method == 'POST':
        if request.POST.get('delete'):
            return HttpResponseRedirect('/phonebook/del/%s/' % object_id)
        else:
            form = PhonebookForm(request.POST, instance=phonebook)
            if form.is_valid():
                form.save()
                request.session["msg"] = _('"%(name)s" is updated.') \
                    % {'name': request.POST['name']}
                return HttpResponseRedirect('/phonebook/')

    template = 'frontend/phonebook/change.html'
    data = {
        'module': current_view(request),
        'form': form,
        'action': 'update',
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
    }
    return render_to_response(template,
                              data,
                              context_instance=RequestContext(request))
Example #45
0
def contact_list(request):
    """Contact list for the logged in user

    **Attributes**:

        * ``template`` - frontend/contact/list.html
        * ``form`` - ContactSearchForm

    **Logic Description**:

        * List all contacts from phonebooks belonging to the logged in user
    """
    sort_col_field_list = [
        'id', 'phonebook', 'contact', 'status', 'first_name', 'last_name',
        'updated_date'
    ]
    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 = ContactSearchForm(request.user)
    phonebook_id_list = Phonebook.objects.values_list('id', flat=True)\
        .filter(user=request.user)
    search_tag = 1
    contact_no = ''
    contact_name = ''
    phonebook = ''
    contact_status = STATUS_CHOICE.ALL
    if request.method == 'POST':
        form = ContactSearchForm(request.user, request.POST)
        if form.is_valid():
            field_list = [
                'contact_no', 'contact_name', 'contact_status', 'phonebook'
            ]
            unset_session_var(request, field_list)

            contact_no = getvar(request, 'contact_no', setsession=True)
            contact_name = getvar(request, 'contact_name', setsession=True)
            contact_status = getvar(request, 'contact_status', setsession=True)
            phonebook = getvar(request, 'phonebook', setsession=True)

    post_var_with_page = 0
    try:
        if request.GET.get('page') or request.GET.get('sort_by'):
            post_var_with_page = 1
            contact_no = request.session.get('session_contact_no')
            contact_name = request.session.get('session_contact_name')
            contact_status = request.session.get('session_contact_status')
            phonebook = request.session.get('session_phonebook')
            form = ContactSearchForm(request.user,
                                     initial={
                                         'contact_no': contact_no,
                                         'contact_name': contact_name,
                                         'status': contact_status,
                                         'phonebook': phonebook
                                     })
        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 = [
            'contact_no', 'contact_name', 'contact_status', 'phonebook'
        ]
        unset_session_var(request, field_list)

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

    if contact_status and int(contact_status) != STATUS_CHOICE.ALL:
        kwargs['status'] = contact_status

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

    contact_list = []
    all_contact_list = []
    contact_count = 0

    if phonebook_id_list:
        contact_list = Contact.objects.values('id', 'phonebook__name', 'contact',
            'last_name', 'first_name', 'status', 'updated_date')\
            .filter(phonebook__in=phonebook_id_list)

        if kwargs:
            contact_list = contact_list.filter(**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_contact_list = contact_list.order_by(sort_order)
        contact_list = all_contact_list[start_page:end_page]
        contact_count = all_contact_list.count()

    template = 'frontend/contact/list.html'
    data = {
        'module': current_view(request),
        'contact_list': contact_list,
        'all_contact_list': all_contact_list,
        'total_contacts': contact_count,
        'PAGE_SIZE': PAGE_SIZE,
        'CONTACT_COLUMN_NAME': CONTACT_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))
Example #46
0
def dnc_contact_import(request):
    """Import CSV file of DNC Contacts for the logged in user

    **Attributes**:

        * ``form`` - DNCContact_fileImport
        * ``template`` - frontend/dnc/import_contact.html

    **Logic Description**:

        * Add new dnc contacts which will belong to the logged in user
          via csv file & get the result (upload success and failure
          statistics)

    **Important variable**:

        * total_rows - Total no. of records in the CSV file
        * retail_record_count - No. of records imported from the CSV file
    """
    form = DNCContact_fileImport(request.user)
    csv_data = ''
    msg = ''
    error_msg = ''
    success_import_list = []
    type_error_import_list = []
    contact_cnt = 0
    dup_contact_cnt = 0
    bulk_record = []
    if request.method == 'POST':
        form = DNCContact_fileImport(request.user, request.POST, request.FILES)
        if form.is_valid():
            # col_no - field name
            #  0     - contact
            # To count total rows of CSV file
            #Get DNC Obj
            dnc = get_object_or_404(DNC,
                                    pk=request.POST['dnc_list'],
                                    user=request.user)

            records = csv.reader(request.FILES['csv_file'])
            total_rows = len(list(records))
            BULK_SIZE = 1000
            csv_data = csv.reader(request.FILES['csv_file'])

            #Read each Row
            for row in csv_data:
                row = striplist(row)
                if not row or str(row[0]) == 0:
                    continue

                #Check field type
                try:
                    int(row[0])
                except ValueError:
                    error_msg = _("Some of the imported data were invalid!")
                    type_error_import_list.append(row)
                    continue

                bulk_record.append(
                    DNCContact(dnc_id=dnc.id, phone_number=row[0]))
                contact_cnt = contact_cnt + 1
                if contact_cnt < 100:
                    #We want to display only 100 lines of the success import
                    success_import_list.append(row)

                if contact_cnt % BULK_SIZE == 0:
                    #Bulk insert
                    DNCContact.objects.bulk_create(bulk_record)
                    bulk_record = []

            if bulk_record:
                #Remaining record
                DNCContact.objects.bulk_create(bulk_record)
                bulk_record = []

        #check if there is contact imported
        if contact_cnt > 0:
            msg = _('%(contact_cnt)s dnc contact(s) are uploaded successfully out of %(total_rows)s row(s) !!') \
                % {'contact_cnt': contact_cnt,
                   'total_rows': total_rows}

        if dup_contact_cnt > 0:
            error_msg = _('Duplicate dnc contact(s) %(dup_contact_cnt)s are not inserted!!') \
                % {'dup_contact_cnt': dup_contact_cnt}

    data = RequestContext(
        request, {
            'form': form,
            'msg': msg,
            'error_msg': error_msg,
            'success_import_list': success_import_list,
            'type_error_import_list': type_error_import_list,
            'module': current_view(request),
            'dialer_setting_msg': user_dialer_setting_msg(request.user),
        })
    template = 'frontend/dnc_contact/import_dnc_contact.html'
    return render_to_response(template,
                              data,
                              context_instance=RequestContext(request))
Example #47
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))
Example #48
0
def dnc_contact_list(request):
    """DNC Contact list for the logged in user

    **Attributes**:

        * ``template`` - frontend/dnc_contact/list.html
        * ``form`` - ContactSearchForm

    **Logic Description**:

        * List all dnc contacts from dnc lists belonging to the logged in user
    """
    sort_col_field_list = ['id', 'dnc', 'phone_number', 'updated_date']
    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 = DNCContactSearchForm(request.user)
    dnc_id_list = DNC.objects.values_list('id', flat=True)\
        .filter(user=request.user)
    search_tag = 1
    phone_number = ''
    dnc = ''

    if request.method == 'POST':
        form = DNCContactSearchForm(request.user, request.POST)
        if form.is_valid():
            request.session['session_phone_number'] = ''
            request.session['session_dnc'] = ''

            if request.POST.get('phone_number'):
                phone_number = request.POST.get('phone_number')
                request.session['session_phone_number'] = phone_number

            if request.POST.get('dnc'):
                dnc = request.POST.get('dnc')
                request.session['session_dnc'] = dnc

    post_var_with_page = 0
    try:
        if request.GET.get('page') or request.GET.get('sort_by'):
            post_var_with_page = 1
            phone_number = request.session.get('session_phone_number')
            dnc = request.session.get('session_dnc')
            form = DNCContactSearchForm(request.user,
                                        initial={
                                            'phone_number': phone_number,
                                            'dnc': dnc
                                        })
        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
        request.session['session_phone_number'] = ''
        request.session['session_dnc'] = ''

    kwargs = {}
    if dnc and dnc != '0':
        kwargs['dnc_id'] = dnc

    phone_number_type = '1'
    phone_number = type_field_chk(phone_number, phone_number_type,
                                  'phone_number')
    for i in phone_number:
        kwargs[i] = phone_number[i]

    phone_number_list = []
    all_phone_number_list = []
    phone_number_count = 0

    if dnc_id_list:
        phone_number_list = DNCContact.objects.values('id', 'dnc__name',
            'phone_number', 'updated_date')\
            .filter(dnc__in=dnc_id_list)

        if kwargs:
            phone_number_list = phone_number_list.filter(**kwargs)

        all_phone_number_list = phone_number_list.order_by(sort_order)
        phone_number_list = all_phone_number_list[start_page:end_page]
        phone_number_count = all_phone_number_list.count()

    template = 'frontend/dnc_contact/list.html'
    data = {
        'module': current_view(request),
        'phone_number_list': phone_number_list,
        'all_phone_number_list': all_phone_number_list,
        'total_phone_numbers': phone_number_count,
        'PAGE_SIZE': PAGE_SIZE,
        'DNC_CONTACT_COLUMN_NAME': DNC_CONTACT_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))
Example #49
0
def contact_import(request):
    """Import CSV file of Contacts for the logged in user

    **Attributes**:

        * ``form`` - Contact_fileImport
        * ``template`` - frontend/contact/import_contact.html

    **Logic Description**:

        * Before adding contacts, check dialer setting limit if applicable
          to the user.
        * Add new contacts which will belong to the logged in user
          via csv file & get the result (upload success and failure
          statistics)

    **Important variable**:

        * total_rows - Total no. of records in the CSV file
        * retail_record_count - No. of records imported from the CSV file
    """
    # Check dialer setting limit
    if request.user and request.method == 'POST':
        # check  Max Number of contacts
        if check_dialer_setting(request, check_for="contact"):
            request.session['msg'] = \
                _("you have too many contacts. you are allowed a maximum of %(limit)s") % \
                {'limit': dialer_setting_limit(request, limit_for="contact")}

            # contact limit reached
            frontend_send_notification(request,
                                       NOTIFICATION_NAME.contact_limit_reached)
            return HttpResponseRedirect("/contact/")

    form = Contact_fileImport(request.user)
    csv_data = ''
    msg = ''
    error_msg = ''
    success_import_list = []
    type_error_import_list = []
    contact_cnt = 0
    bulk_record = []
    if request.method == 'POST':
        form = Contact_fileImport(request.user, request.POST, request.FILES)
        if form.is_valid():
            # col_no - field name
            #  0     - contact
            #  1     - last_name
            #  2     - first_name
            #  3     - email
            #  4     - description
            #  5     - status
            #  6     - address
            #  7     - city
            #  8     - country
            #  9     - country
            # 10     - unit_number
            # 11     - additional_vars
            # To count total rows of CSV file
            records = csv.reader(request.FILES['csv_file'],
                                 delimiter='|',
                                 quotechar='"')
            total_rows = len(list(records))
            BULK_SIZE = 1000
            csv_data = csv.reader(request.FILES['csv_file'],
                                  delimiter='|',
                                  quotechar='"')
            #Get Phonebook Obj
            phonebook = get_object_or_404(Phonebook,
                                          pk=request.POST['phonebook'],
                                          user=request.user)
            #Read each Row
            for row in csv_data:
                row = striplist(row)
                if not row or str(row[0]) == 0:
                    continue

                #Check field type
                if not int(row[5]):
                    error_msg = _(
                        "invalid value for import! please check the import samples or phonebook is not valid"
                    )
                    type_error_import_list.append(row)
                    break

                if len(row[9]) > 2:
                    error_msg = _(
                        "invalid value for country code, it needs to be a valid ISO 3166-1 alpha-2 codes (http://en.wikipedia.org/wiki/ISO_3166-1)"
                    )
                    type_error_import_list.append(row)
                    break

                row_11 = ''
                if row[11]:
                    try:
                        row_11 = json.loads(row[11])
                    except:
                        row_11 = ''

                bulk_record.append(
                    Contact(
                        phonebook=phonebook,
                        contact=row[0],
                        last_name=row[1],
                        first_name=row[2],
                        email=row[3],
                        description=row[4],
                        status=int(row[5]),
                        address=row[6],
                        city=row[7],
                        state=row[8],
                        country=row[
                            9],  # Note: country needs to be a country code (CA, ES)
                        unit_number=row[10],
                        additional_vars=row_11))

                contact_cnt = contact_cnt + 1

                if contact_cnt < 100:
                    #We want to display only 100 lines of the success import
                    success_import_list.append(row)

                if contact_cnt % BULK_SIZE == 0:
                    #Bulk insert
                    Contact.objects.bulk_create(bulk_record)
                    bulk_record = []

            # remaining record
            Contact.objects.bulk_create(bulk_record)
            bulk_record = []

    #check if there is contact imported
    if contact_cnt > 0:
        msg = _('%(contact_cnt)s contact(s) are uploaded successfully out of %(total_rows)s row(s) !!') \
            % {'contact_cnt': contact_cnt,
               'total_rows': total_rows}

    data = RequestContext(
        request, {
            'form': form,
            'csv_data': csv_data,
            'msg': msg,
            'error_msg': error_msg,
            'success_import_list': success_import_list,
            'type_error_import_list': type_error_import_list,
            'module': current_view(request),
            'dialer_setting_msg': user_dialer_setting_msg(request.user),
        })
    template = 'frontend/contact/import_contact.html'
    return render_to_response(template,
                              data,
                              context_instance=RequestContext(request))
Example #50
0
def customer_detail_change(request):
    """User Detail change on Customer UI

    **Attributes**:

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

    **Logic Description**:

        * User is able to change his/her detail.
    """
    user_detail = get_object_or_404(User, 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)
        #DEMO / Disable
        if not settings.DEMO_MODE:
            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:
        dialer_set = DialerSetting.objects.get(id=request.user.get_profile().dialersetting_id)
    except:
        dialer_set = ''

    msg_detail = ''
    msg_pass = ''
    msg_number = ''

    error_detail = ''
    error_pass = ''
    error_number = ''
    action = ''
    if 'action' in request.GET:
        action = request.GET['action']

    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()):
                #DEMO / Disable
                if not settings.DEMO_MODE:
                    user_detail_form.save()
                    user_detail_extened_form.save()
                msg_detail = _('detail has been changed.')
            else:
                error_detail = _('please correct the errors below.')
        elif request.POST['form-type'] == "check-number":  # check phone no
            action = 'tabs-4'
            check_phone_no_form = CheckPhoneNumberForm(data=request.POST)
            if check_phone_no_form.is_valid():
                if not common_contact_authorization(request.user, request.POST['phone_number']):
                    error_number = _('this phone number is not authorized.')
                else:
                    msg_number = _('this phone number is authorized.')
            else:
                error_number = _('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():
                #DEMO / Disable
                if not settings.DEMO_MODE:
                    user_password_form.save()
                msg_pass = _('your password has been changed.')
            else:
                error_pass = _('please correct the errors below.')

    template = 'frontend/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,
        'check_phone_no_form': check_phone_no_form,
        'msg_detail': msg_detail,
        'msg_pass': msg_pass,
        'msg_number': msg_number,
        'error_detail': error_detail,
        'error_pass': error_pass,
        'error_number': error_number,
        'dialer_set': dialer_set,
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
        'action': action,
    }
    return render_to_response(template, data,
           context_instance=RequestContext(request))
Example #51
0
def customer_detail_change(request):
    """User Detail change on Customer UI

    **Attributes**:

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

    **Logic Description**:

        * User is able to change his/her detail.
    """
    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)
        #DEMO / Disable
        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)
        dialer_set = DialerSetting.objects.get(id=user_ds.dialersetting.id)
    except:
        dialer_set = ''

    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)

    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():
                #DEMO / Disable
                user_detail_form.save()
                user_detail_extened_form.save()
                msg_detail = _('Detail has been changed.')
            else:
                error_detail = _('Please correct the errors below.')
        elif request.POST['form-type'] == "check-number":  # check phone no
            action = 'tabs-5'
            check_phone_no_form = CheckPhoneNumberForm(data=request.POST)
            if check_phone_no_form.is_valid():
                if not common_contact_authorization(
                        request.user, request.POST['phone_number']):
                    error_number = _('This phone number is not authorized.')
                else:
                    msg_number = _('This phone number is authorized.')
            else:
                error_number = _('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():
                #DEMO / Disable
                user_password_form.save()
                msg_pass = _('Your password has been changed.')
            else:
                error_pass = _('Please correct the errors below.')

    template = 'frontend/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,
        'check_phone_no_form': check_phone_no_form,
        'user_notification': user_notification,
        'msg_detail': msg_detail,
        'msg_pass': msg_pass,
        'msg_number': msg_number,
        'msg_note': msg_note,
        'error_detail': error_detail,
        'error_pass': error_pass,
        'error_number': error_number,
        'notice_count': notice_count(request),
        'dialer_set': dialer_set,
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
        'action': action,
    }
    return render_to_response(template,
                              data,
                              context_instance=RequestContext(request))
Example #52
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'] = 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.values('user', 'callid', 'callerid', 'phone_number',
                     'starting_date', 'duration', 'billsec',
                     'disposition', 'hangup_cause', 'hangup_cause_q850',
                     'used_gateway').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)"}
    total_data = ''
    # 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))
Example #53
0
def customer_dashboard(request, on_index=None):
    """Customer dashboard gives the following information

        * No of Campaigns for logged in user
        * Total phonebook contacts
        * Total Campaigns contacts
        * Amount of contact reached today
        * Disposition of calls via pie chart
        * Call records & Duration of calls are shown on graph by days/hours

    **Attributes**:

        * ``template`` - frontend/dashboard.html
        * ``form`` - DashboardForm
    """
    logging.debug('Start Dashboard')
    # All campaign for logged in User
    campaign_id_list = Campaign.objects.values_list('id', flat=True)\
        .filter(user=request.user).order_by('id')
    campaign_count = campaign_id_list.count()

    # Contacts count which are active and belong to those phonebook(s) which is
    # associated with all campaign
    pb_active_contact_count = Contact.objects\
        .filter(phonebook__campaign__in=campaign_id_list, status=CONTACT_STATUS.ACTIVE)\
        .count()

    total_of_phonebook_contacts =\
        Contact.objects.filter(phonebook__user=request.user).count()

    form = DashboardForm(request.user)
    logging.debug('Got Campaign list')

    total_record = dict()
    total_duration_sum = 0
    total_call_count = 0
    total_answered = 0
    total_not_answered = 0
    total_busy = 0
    total_cancel = 0
    total_congestion = 0
    total_failed = 0
    search_type = SEARCH_TYPE.D_Last_24_hours  # default Last 24 hours
    selected_campaign = ''

    if campaign_id_list:
        selected_campaign = campaign_id_list[0]  # default campaign id

    # selected_campaign should not be empty
    if selected_campaign:
        if request.method == 'POST':
            form = DashboardForm(request.user, request.POST)
            selected_campaign = request.POST['campaign']
            search_type = request.POST['search_type']

        end_date = datetime.today()
        start_date = calculate_date(search_type)

        # date_length is used to do group by starting_date
        if int(search_type
               ) >= SEARCH_TYPE.B_Last_7_days:  # all options except 30 days
            date_length = 13
            if int(search_type) == SEARCH_TYPE.C_Yesterday:  # yesterday
                now = datetime.now()
                start_date = datetime(now.year, now.month, now.day, 0, 0, 0,
                                      0) - relativedelta(days=1)
                end_date = datetime(now.year, now.month, now.day, 23, 59, 59,
                                    999999) - relativedelta(days=1)
            if int(search_type) >= SEARCH_TYPE.E_Last_12_hours:
                date_length = 16
        else:
            date_length = 10  # Last 30 days option

        select_data = {
            "starting_date":
            "SUBSTR(CAST(starting_date as CHAR(30)),1,%s)" % str(date_length)
        }

        # This calls list is used by pie chart
        calls = VoIPCall.objects\
            .filter(callrequest__campaign=selected_campaign,
                duration__isnull=False,
                user=request.user,
                starting_date__range=(start_date, end_date))\
            .extra(select=select_data)\
            .values('starting_date', 'disposition')\
            .annotate(Count('starting_date'))\
            .order_by('starting_date')

        logging.debug('Aggregate VoIPCall')

        for i in calls:
            total_call_count += i['starting_date__count']
            if (i['disposition'] == VOIPCALL_DISPOSITION.ANSWER
                    or i['disposition'] == 'NORMAL_CLEARING'):
                total_answered += i['starting_date__count']
            elif (i['disposition'] == VOIPCALL_DISPOSITION.BUSY
                  or i['disposition'] == 'USER_BUSY'):
                total_busy += i['starting_date__count']
            elif (i['disposition'] == VOIPCALL_DISPOSITION.NOANSWER
                  or i['disposition'] == 'NO_ANSWER'):
                total_not_answered += i['starting_date__count']
            elif (i['disposition'] == VOIPCALL_DISPOSITION.CANCEL
                  or i['disposition'] == 'ORIGINATOR_CANCEL'):
                total_cancel += i['starting_date__count']
            elif (i['disposition'] == VOIPCALL_DISPOSITION.CONGESTION
                  or i['disposition'] == 'NORMAL_CIRCUIT_CONGESTION'):
                total_congestion += i['starting_date__count']
            else:
                #VOIP CALL FAILED
                total_failed += i['starting_date__count']

        # following calls list is without disposition & group by call date
        calls = VoIPCall.objects\
            .filter(callrequest__campaign=selected_campaign,
                duration__isnull=False,
                user=request.user,
                starting_date__range=(start_date, end_date))\
            .extra(select=select_data)\
            .values('starting_date').annotate(Sum('duration'))\
            .annotate(Avg('duration'))\
            .annotate(Count('starting_date'))\
            .order_by('starting_date')

        logging.debug('Aggregate VoIPCall (2)')

        mintime = start_date
        maxtime = end_date
        calls_dict = {}
        calls_dict_with_min = {}

        for data in calls:
            if int(search_type) >= SEARCH_TYPE.B_Last_7_days:
                ctime = datetime(int(data['starting_date'][0:4]),
                                 int(data['starting_date'][5:7]),
                                 int(data['starting_date'][8:10]),
                                 int(data['starting_date'][11:13]), 0, 0, 0)
                if int(search_type) >= SEARCH_TYPE.E_Last_12_hours:
                    ctime = datetime(int(data['starting_date'][0:4]),
                                     int(data['starting_date'][5:7]),
                                     int(data['starting_date'][8:10]),
                                     int(data['starting_date'][11:13]),
                                     int(data['starting_date'][14:16]), 0, 0)
            else:
                ctime = datetime(int(data['starting_date'][0:4]),
                                 int(data['starting_date'][5:7]),
                                 int(data['starting_date'][8:10]), 0, 0, 0, 0)
            if ctime > maxtime:
                maxtime = ctime
            elif ctime < mintime:
                mintime = ctime

            # all options except 30 days
            if int(search_type) >= SEARCH_TYPE.B_Last_7_days:
                calls_dict[int(ctime.strftime("%Y%m%d%H"))] =\
                    {
                        'call_count': data['starting_date__count'],
                        'duration_sum': data['duration__sum'],
                        'duration_avg': float(data['duration__avg']),
                    }

                calls_dict_with_min[int(ctime.strftime("%Y%m%d%H%M"))] =\
                    {
                        'call_count': data['starting_date__count'],
                        'duration_sum': data['duration__sum'],
                        'duration_avg': float(data['duration__avg']),
                    }
            else:
                # Last 30 days option
                calls_dict[int(ctime.strftime("%Y%m%d"))] =\
                    {
                        'call_count': data['starting_date__count'],
                        'duration_sum': data['duration__sum'],
                        'duration_avg': float(data['duration__avg']),
                    }

        logging.debug('After Call Loops')

        dateList = date_range(mintime, maxtime, q=search_type)

        for date in dateList:
            inttime = int(date.strftime("%Y%m%d"))

            # last 7 days | yesterday | last 24 hrs
            if int(search_type) == SEARCH_TYPE.B_Last_7_days \
                or int(search_type) == SEARCH_TYPE.C_Yesterday \
                    or int(search_type) == SEARCH_TYPE.D_Last_24_hours:

                for option in range(0, 24):
                    day_time = int(str(inttime) + str(option).zfill(2))

                    graph_day = datetime(int(date.strftime("%Y")),
                                         int(date.strftime("%m")),
                                         int(date.strftime("%d")),
                                         int(str(option).zfill(2)))

                    dt = int(1000 * time.mktime(graph_day.timetuple()))
                    total_record[dt] = {
                        'call_count': 0,
                        'duration_sum': 0,
                        'duration_avg': 0.0,
                    }

                    if day_time in calls_dict.keys():
                        total_record[dt]['call_count'] += calls_dict[day_time][
                            'call_count']
                        total_record[dt]['duration_sum'] += calls_dict[
                            day_time]['duration_sum']
                        total_record[dt]['duration_avg'] += float(
                            calls_dict[day_time]['duration_avg'])

            # last 12 hrs | last 6 hrs | last 1 hrs
            elif (int(search_type) == SEARCH_TYPE.E_Last_12_hours
                  or int(search_type) == SEARCH_TYPE.F_Last_6_hours
                  or int(search_type) == SEARCH_TYPE.G_Last_hour):

                for hour in range(0, 24):
                    for minute in range(0, 60):
                        hr_time = int(
                            str(inttime) + str(hour).zfill(2) +
                            str(minute).zfill(2))

                        graph_day = datetime(int(date.strftime("%Y")),
                                             int(date.strftime("%m")),
                                             int(date.strftime("%d")),
                                             int(str(hour).zfill(2)),
                                             int(str(minute).zfill(2)))

                        dt = int(1000 * time.mktime(graph_day.timetuple()))
                        total_record[dt] = {
                            'call_count': 0,
                            'duration_sum': 0,
                            'duration_avg': 0.0,
                        }

                        if hr_time in calls_dict_with_min.keys():
                            total_record[dt][
                                'call_count'] += calls_dict_with_min[hr_time][
                                    'call_count']
                            total_record[dt][
                                'duration_sum'] += calls_dict_with_min[
                                    hr_time]['duration_sum']
                            total_record[dt]['duration_avg'] += float(
                                calls_dict_with_min[hr_time]['duration_avg'])
            else:
                # Last 30 days option
                graph_day = datetime(int(date.strftime("%Y")),
                                     int(date.strftime("%m")),
                                     int(date.strftime("%d")))
                dt = int(1000 * time.mktime(graph_day.timetuple()))
                total_record[dt] = {
                    'call_count': 0,
                    'duration_sum': 0,
                    'duration_avg': 0,
                }
                if inttime in calls_dict.keys():
                    total_record[dt]['call_count'] += calls_dict[inttime][
                        'call_count']
                    total_record[dt]['duration_sum'] += calls_dict[inttime][
                        'duration_sum']
                    total_record[dt]['duration_avg'] += float(
                        calls_dict[inttime]['duration_avg'])

    logging.debug('After dateList Loops')

    # sorting on date col
    total_record = total_record.items()
    total_record = sorted(total_record, key=lambda k: k[0])

    # lineWithFocusChart
    final_charttype = "lineWithFocusChart"
    xdata = []
    ydata = []
    ydata2 = []
    for i in total_record:
        xdata.append(i[0])
        ydata.append(i[1]['call_count'])
        ydata2.append(i[1]['duration_sum'])

    tooltip_date = "%d %b %y %H:%M %p"
    extra_serie1 = {
        "tooltip": {
            "y_start": "",
            "y_end": " calls"
        },
        "date_format": tooltip_date
    }
    extra_serie2 = {
        "tooltip": {
            "y_start": "",
            "y_end": " sec"
        },
        "date_format": tooltip_date
    }

    final_chartdata = {
        'x': xdata,
        'name1': 'Calls',
        'y1': ydata,
        'extra1': extra_serie1,
        'name2': 'Duration',
        'y2': ydata2,
        'extra2': extra_serie2,
    }

    # Contacts which are successfully called for running campaign
    reached_contact = 0
    if campaign_id_list:
        now = datetime.now()
        start_date = datetime(now.year, now.month, now.day, 0, 0, 0, 0)
        end_date = datetime(now.year, now.month, now.day, 23, 59, 59, 999999)
        reached_contact = Subscriber.objects\
            .filter(campaign_id__in=campaign_id_list,  # status=5,
                    updated_date__range=(start_date, end_date))\
            .count()

    # PieChart
    hangup_analytic_charttype = "pieChart"
    xdata = []
    ydata = []
    hangup_analytic_chartdata = {'x': xdata}
    if total_call_count != 0:
        for i in VOIPCALL_DISPOSITION:
            xdata.append(i[0])

        # Y-axis order depend upon VOIPCALL_DISPOSITION
        # 'ANSWER', 'BUSY', 'CANCEL', 'CONGESTION', 'FAILED', 'NOANSWER'
        ydata = [
            percentage(total_answered, total_call_count),
            percentage(total_busy, total_call_count),
            percentage(total_cancel, total_call_count),
            percentage(total_congestion, total_call_count),
            percentage(total_failed, total_call_count),
            percentage(total_not_answered, total_call_count),
        ]

        color_list = [
            COLOR_DISPOSITION['ANSWER'],
            COLOR_DISPOSITION['BUSY'],
            COLOR_DISPOSITION['CANCEL'],
            COLOR_DISPOSITION['CONGESTION'],
            COLOR_DISPOSITION['FAILED'],
            COLOR_DISPOSITION['NOANSWER'],
        ]
        extra_serie = {
            "tooltip": {
                "y_start": "",
                "y_end": " %"
            },
            "color_list": color_list
        }
        hangup_analytic_chartdata = {
            'x': xdata,
            'y1': ydata,
            'extra1': extra_serie
        }

    template = 'frontend/dashboard.html'
    data = {
        'module': current_view(request),
        'form': form,
        'dialer_setting_msg': user_dialer_setting_msg(request.user),
        'campaign_count': campaign_count,
        'total_of_phonebook_contacts': total_of_phonebook_contacts,
        'campaign_phonebook_active_contact_count': pb_active_contact_count,
        'reached_contact': reached_contact,
        'total_duration_sum': total_duration_sum,
        'total_call_count': total_call_count,
        'total_answered': total_answered,
        'total_not_answered': total_not_answered,
        'total_busy': total_busy,
        'total_cancel': total_cancel,
        'total_congestion': total_congestion,
        'total_failed': total_failed,
        'answered_color': COLOR_DISPOSITION['ANSWER'],
        'busy_color': COLOR_DISPOSITION['BUSY'],
        'not_answered_color': COLOR_DISPOSITION['NOANSWER'],
        'cancel_color': COLOR_DISPOSITION['CANCEL'],
        'congestion_color': COLOR_DISPOSITION['CONGESTION'],
        'failed_color': COLOR_DISPOSITION['FAILED'],
        'VOIPCALL_DISPOSITION': VOIPCALL_DISPOSITION,
        'hangup_analytic_chartdata': hangup_analytic_chartdata,
        'hangup_analytic_charttype': hangup_analytic_charttype,
        'final_chartdata': final_chartdata,
        'final_charttype': final_charttype,
    }
    if on_index == 'yes':
        return data
    return render_to_response(template,
                              data,
                              context_instance=RequestContext(request))