예제 #1
0
파일: views.py 프로젝트: vfulco/MyJobs
def partner_get_records(request):
    if request.method == "GET":
        prm_worthy(request)

        dt_range, date_str, records = get_records_from_request(request)
        records = records.exclude(contact_type="job")
        email = records.filter(contact_type="email").count()
        email += records.filter(contact_type="pssemail").count()
        phone = records.filter(contact_type="phone").count()
        meetingorevent = records.filter(contact_type="meetingorevent").count()

        # figure names
        if email != 1:
            email_name = "Emails"
        else:
            email_name = "Email"
        if phone != 1:
            phone_name = "Phone Calls"
        else:
            phone_name = "Phone Call"
        if meetingorevent != 1:
            meetingorevent_name = "Meeting or Event"
        else:
            meetingorevent_name = "Meetings & Events"

        data = SortedDict()

        data["email"] = {"count": email, "name": email_name, "typename": "email"}
        data["phone"] = {"count": phone, "name": phone_name, "typename": "phone"}
        data["meetingorevent"] = {"count": meetingorevent, "name": meetingorevent_name, "typename": "meetingorevent"}

        return HttpResponse(json.dumps(data))
    else:
        raise Http404
예제 #2
0
파일: views.py 프로젝트: vfulco/MyJobs
def partner_get_referrals(request):
    if request.method == "GET":
        prm_worthy(request)
        dt_range, date_str, records = get_records_from_request(request)

        # figure names
        if records.applications != 1:
            app_name = "Applications"
        else:
            app_name = "Application"
        if records.interviews != 1:
            interview_name = "Interviews"
        else:
            interview_name = "Interview"
        if records.hires != 1:
            hire_name = "Hires"
        else:
            hire_name = "Hire"

        data = {
            "applications": {"count": records.applications, "name": app_name, "typename": "job"},
            "interviews": {"count": records.interviews, "name": interview_name, "typename": "job"},
            "hires": {"count": records.hires, "name": hire_name, "typename": "job"},
        }

        return HttpResponse(json.dumps(data))
    else:
        raise Http404
예제 #3
0
파일: views.py 프로젝트: vfulco/MyJobs
def prm_records(request):
    """
    ContactRecord overview and ContactRecord overview from PRM reports.

    """
    company, partner, _ = prm_worthy(request)
    _, _, contact_records = get_records_from_request(request)
    paginated_records = add_pagination(request, contact_records)

    if request.is_ajax():
        ctx = {"partner": partner, "records": paginated_records}
        response = HttpResponse()
        html = render_to_response("mypartners/includes/contact_record_column.html", ctx, RequestContext(request))
        response.content = html.content
        return response

    contact_type_choices = (("all", "All"),) + CONTACT_TYPE_CHOICES

    contact_choices = [
        (c, c) for c in contact_records.order_by("contact__name").distinct().values_list("contact__name", flat=True)
    ]
    contact_choices.insert(0, ("all", "All"))

    ctx = {
        "admin_id": request.REQUEST.get("admin"),
        "company": company,
        "contact_choices": contact_choices,
        "contact_type_choices": contact_type_choices,
        "partner": partner,
        "records": paginated_records,
        "view_name": "PRM",
    }

    return render_to_response("mypartners/main_records.html", ctx, RequestContext(request))
예제 #4
0
    def test_get_records_from_request_with_date(self):
        """ Make sure that the number of days shown in the date drop dwon
            matches the what was selected by user"""

        record_types = ["email", "phone", "meetingorevent"]
        date = ["0", "1", "30", "90", ""]

        params = product(record_types, date)

        for record_type, date in params:
            request = self.request_factory.get(
                'prm/view/reports/details/records/', dict(
                    company=self.company.id,
                    partner=self.partner.id,
                    record_type=record_type,
                    date=date,
                )
            )
            request.user = self.staff_user

            response = helpers.get_records_from_request(request)
            (range_start, range_end), date_str, records = response

            expected = date_str.split()[0].lstrip("-")

            if expected.isdigit():
                days = int(expected)
                if days == 1:
                    self.assertEqual("1 Day", date_str)
                else:
                    self.assertEqual(
                        "%i Days" % (range_end - range_start).days, date_str)
            else:
                self.assertEqual("View All", date_str)
예제 #5
0
파일: views.py 프로젝트: zeus911/MyJobs
def partner_get_referrals(request):
    if request.method == 'GET':
        prm_worthy(request)
        dt_range, date_str, records = get_records_from_request(request)

        # figure names
        if records.applications != 1:
            app_name = 'Applications'
        else:
            app_name = 'Application'
        if records.interviews != 1:
            interview_name = 'Interviews'
        else:
            interview_name = 'Interview'
        if records.hires != 1:
            hire_name = 'Hires'
        else:
            hire_name = 'Hire'

        data = {
            'applications': {'count': records.applications, 'name': app_name,
                             'typename': 'job'},
            'interviews': {'count': records.interviews, 'name': interview_name,
                           'typename': 'job'},
            'hires': {'count': records.hires, 'name': hire_name,
                      'typename': 'job'},
        }

        return HttpResponse(json.dumps(data))
    else:
        raise Http404
예제 #6
0
    def test_get_records_from_request_with_date(self):
        """ Make sure that the number of days shown in the date drop dwon
            matches the what was selected by user"""

        record_types = ["email", "phone", "meetingorevent"]
        date = ["0", "1", "30", "90", ""]

        params = product(record_types, date)

        for record_type, date in params:
            request = self.request_factory.get(
                'prm/view/reports/details/records/', dict(
                    company=self.company.id,
                    partner=self.partner.id,
                    record_type=record_type,
                    date=date,
                )
            )
            request.user = self.staff_user

            response = helpers.get_records_from_request(request)
            (range_start, range_end), date_str, records = response

            expected = date_str.split()[0].lstrip("-")

            if expected.isdigit():
                days = int(expected)
                if days == 1:
                    self.assertEqual("1 Day", date_str)
                else:
                    self.assertEqual(
                        "%i Days" % (range_end - range_start).days, date_str)
            else:
                self.assertEqual("View All", date_str)
예제 #7
0
파일: views.py 프로젝트: zeus911/MyJobs
def prm_export(request):
    #TODO: investigate using django's builtin serialization for XML
    company, partner, user = prm_worthy(request)
    file_format = request.REQUEST.get('file_format', 'csv')
    fields = retrieve_fields(ContactRecord)
    _, _, records = get_records_from_request(request)

    if file_format == 'xml':
        root = etree.Element("contact_records")
        for record in records:
            xml_record = etree.SubElement(root, "record")
            for field in fields:
                xml = etree.SubElement(xml_record, field)
                value = getattr(record, field, '')

                if hasattr(value, 'all'):
                    value = ', '.join([val.name for val in value.all() if val])

                xml.text = contact_record_val_to_str(value)
        response = HttpResponse(etree.tostring(root, pretty_print=True,
                                               xml_declaration=True),
                                mimetype='application/force-download')
    elif file_format == 'printer_friendly':
        ctx = {
            'company': company,
            'fields': fields,
            'partner': partner,
            'records': records,
        }
        return render_to_response('mypartners/printer_friendly.html', ctx,
                                  RequestContext(request))
    # CSV/XLS
    else:
        response = HttpResponse(content_type='text/csv')
        writer = unicodecsv.writer(response, encoding='utf-8')
        writer.writerow(fields)
        for record in records:
            values = [getattr(record, field, '') for field in fields]
            values = [
                contact_record_val_to_str(v)
                if not hasattr(v, 'all') else
                ', '.join([val.name for val in v.all() if val]) for v in values
            ]
            # Remove the HTML and reformat.
            values = [strip_tags(v) for v in values]
            # replaces multiple occurences of space by a single sapce.
            values = [' '.join(filter(bool, v.split(' '))) for v in values]
            values = [re.sub('\s+\n\s+', '\n', v) for v in values]
            writer.writerow(values)

    response['Content-Disposition'] = 'attachment; ' \
                                      'filename="company_record_report".%s' \
                                      % file_format

    return response
예제 #8
0
    def test_start_date_before_end_date(self):
        request = self.request_factory.get(
            'prm/view/reports/details/records/', dict(
                company=self.company.id,
                partner=self.partner.id,
                range_start='02/15/14',
                range_end='04/15/12'))
        request.user = self.staff_user

        response = helpers.get_records_from_request(request)
        (start_date, end_date), _, _ = response
        self.assertGreaterEqual(end_date, start_date)
예제 #9
0
    def test_start_date_before_end_date(self):
        request = self.request_factory.get(
            'prm/view/reports/details/records/', dict(
                company=self.company.id,
                partner=self.partner.id,
                range_start='02/15/14',
                range_end='04/15/12'))
        request.user = self.staff_user

        response = helpers.get_records_from_request(request)
        (start_date, end_date), _, _ = response
        self.assertGreaterEqual(end_date, start_date)
예제 #10
0
파일: views.py 프로젝트: vfulco/MyJobs
def get_records(request):
    """
    Returns a json object containing the records matching the search
    criteria (contact, contact_type, and date_time range) rendered using
    records.html and the date range and date string required to update
    the time_filter.html template to match the search.

    """
    company, partner, user = prm_worthy(request)

    contact = request.REQUEST.get('contact')
    contact_type = request.REQUEST.get('record_type')

    contact = None if contact in ['all', 'undefined'] else contact
    contact_type = None if contact_type in ['all', 'undefined'
                                            ] else contact_type
    dt_range, date_str, records = get_records_from_request(request)

    ctx = {
        'records': records.order_by('-date_time'),
        'company': company,
        'partner': partner,
        'contact_type': None if contact_type == 'all' else contact_type,
        'contact_name': None if contact == 'all' else contact,
        'view_name': 'PRM'
    }

    # Because javascript is going to use this, not a template,
    # convert to localtime here
    date_end = localtime(dt_range[1].replace(tzinfo=pytz.utc))
    date_start = localtime(dt_range[0].replace(tzinfo=pytz.utc))

    data = {
        'month_end':
        date_end.strftime('%m'),
        'day_end':
        date_end.strftime('%d'),
        'year_end':
        date_end.strftime('%Y'),
        'month_start':
        date_start.strftime('%m'),
        'day_start':
        date_start.strftime('%d'),
        'year_start':
        date_start.strftime('%Y'),
        'date_str':
        date_str,
        'html':
        render_to_response('mypartners/records.html', ctx,
                           RequestContext(request)).content,
    }
    return HttpResponse(json.dumps(data))
예제 #11
0
파일: views.py 프로젝트: kepinae/MyJobs
def prm_view_records(request):
    """
    View an individual ContactRecord.

    """
    company, partner, _ = prm_worthy(request)
    _, _, contact_records = get_records_from_request(request)
    page_number = int(request.GET.get('page', 1))
    record_id = int(request.GET.get('id', 0))

    # change number of objects per page
    paginator = Paginator(contact_records, 1)

    if record_id:
        pks = list(contact_records.values_list('pk', flat=True))

        if record_id in pks:
            page_number = pks.index(record_id) + 1
        else:
            page_number = 1
            paginator = Paginator(
                ContactRecord.objects.filter(pk=record_id), 1)

    paginated_records = paginator.page(page_number)
    record = paginated_records.object_list[0]

    attachments = record.prmattachment_set.all()
    record_history = ContactLogEntry.objects.filter(
        object_id=record.pk, content_type_id=ContentType.objects.get_for_model(
            ContactRecord).pk)

    search_params = request.GET.copy()
    navigation_params = search_params.copy()
    navigation_params.pop('id', None)

    ctx = {
        'record': record,
        'records': paginated_records,
        'partner': partner,
        'company': company,
        'attachments': attachments,
        'record_history': record_history,
        'view_name': 'PRM',
        'page': page_number,
        'search_params': urlencode(search_params),
        'navigation_params': urlencode(navigation_params)
    }

    return render_to_response('mypartners/view_record.html', ctx,
                              RequestContext(request))
예제 #12
0
파일: views.py 프로젝트: vfulco/MyJobs
def prm_export(request):
    # TODO: investigate using django's builtin serialization for XML
    company, partner, user = prm_worthy(request)
    file_format = request.REQUEST.get("file_format", "csv")
    fields = retrieve_fields(ContactRecord)
    _, _, records = get_records_from_request(request)

    if file_format == "xml":
        root = etree.Element("contact_records")
        for record in records:
            xml_record = etree.SubElement(root, "record")
            for field in fields:
                xml = etree.SubElement(xml_record, field)
                value = getattr(record, field, "")

                if hasattr(value, "all"):
                    value = ", ".join([val.name for val in value.all() if val])

                xml.text = contact_record_val_to_str(value)
        response = HttpResponse(
            etree.tostring(root, pretty_print=True, xml_declaration=True), mimetype="application/force-download"
        )
    elif file_format == "printer_friendly":
        ctx = {"company": company, "fields": fields, "partner": partner, "records": records}
        return render_to_response("mypartners/printer_friendly.html", ctx, RequestContext(request))
    # CSV/XLS
    else:
        response = HttpResponse(content_type="text/csv")
        writer = unicodecsv.writer(response, encoding="utf-8")
        writer.writerow(fields)
        for record in records:
            values = [getattr(record, field, "") for field in fields]
            values = [
                contact_record_val_to_str(v)
                if not hasattr(v, "all")
                else ", ".join([val.name for val in v.all() if val])
                for v in values
            ]
            # Remove the HTML and reformat.
            values = [strip_tags(v) for v in values]
            # replaces multiple occurences of space by a single sapce.
            values = [" ".join(filter(bool, v.split(" "))) for v in values]
            values = [re.sub("\s+\n\s+", "\n", v) for v in values]
            writer.writerow(values)

    response["Content-Disposition"] = "attachment; " 'filename="company_record_report".%s' % file_format

    return response
예제 #13
0
파일: views.py 프로젝트: vfulco/MyJobs
def partner_get_records(request):
    if request.method == 'GET':
        prm_worthy(request)

        dt_range, date_str, records = get_records_from_request(request)
        records = records.exclude(contact_type='job')
        email = records.filter(contact_type='email').count()
        email += records.filter(contact_type='pssemail').count()
        phone = records.filter(contact_type='phone').count()
        meetingorevent = records.filter(contact_type='meetingorevent').count()

        # figure names
        if email != 1:
            email_name = 'Emails'
        else:
            email_name = 'Email'
        if phone != 1:
            phone_name = 'Phone Calls'
        else:
            phone_name = 'Phone Call'
        if meetingorevent != 1:
            meetingorevent_name = 'Meeting or Event'
        else:
            meetingorevent_name = 'Meetings & Events'

        data = SortedDict()

        data['email'] = {
            "count": email,
            "name": email_name,
            'typename': 'email'
        }
        data['phone'] = {
            "count": phone,
            "name": phone_name,
            'typename': 'phone'
        }
        data['meetingorevent'] = {
            "count": meetingorevent,
            "name": meetingorevent_name,
            "typename": "meetingorevent"
        }

        return HttpResponse(json.dumps(data))
    else:
        raise Http404
예제 #14
0
파일: views.py 프로젝트: vfulco/MyJobs
def partner_main_reports(request):
    company, partner, user = prm_worthy(request)
    dt_range, date_str, records = get_records_from_request(request)

    ctx = {
        "admin_id": request.REQUEST.get("admin"),
        "partner": partner,
        "company": company,
        "contacts": records.contacts,
        "total_records": records.communication_activity.count(),
        "referral": records.referrals,
        "top_contacts": records.contacts[:3],
        "others": sum(contact["records"] for contact in records.contacts[3:]),
        "view_name": "PRM",
        "date_start": dt_range[0],
        "date_end": dt_range[1],
        "date_display": date_str,
    }
    return render_to_response("mypartners/partner_reports.html", ctx, RequestContext(request))
예제 #15
0
파일: views.py 프로젝트: vfulco/MyJobs
def get_records(request):
    """
    Returns a json object containing the records matching the search
    criteria (contact, contact_type, and date_time range) rendered using
    records.html and the date range and date string required to update
    the time_filter.html template to match the search.

    """
    company, partner, user = prm_worthy(request)

    contact = request.REQUEST.get("contact")
    contact_type = request.REQUEST.get("record_type")

    contact = None if contact in ["all", "undefined"] else contact
    contact_type = None if contact_type in ["all", "undefined"] else contact_type
    dt_range, date_str, records = get_records_from_request(request)

    ctx = {
        "records": records.order_by("-date_time"),
        "company": company,
        "partner": partner,
        "contact_type": None if contact_type == "all" else contact_type,
        "contact_name": None if contact == "all" else contact,
        "view_name": "PRM",
    }

    # Because javascript is going to use this, not a template,
    # convert to localtime here
    date_end = localtime(dt_range[1].replace(tzinfo=pytz.utc))
    date_start = localtime(dt_range[0].replace(tzinfo=pytz.utc))

    data = {
        "month_end": date_end.strftime("%m"),
        "day_end": date_end.strftime("%d"),
        "year_end": date_end.strftime("%Y"),
        "month_start": date_start.strftime("%m"),
        "day_start": date_start.strftime("%d"),
        "year_start": date_start.strftime("%Y"),
        "date_str": date_str,
        "html": render_to_response("mypartners/records.html", ctx, RequestContext(request)).content,
    }
    return HttpResponse(json.dumps(data))
예제 #16
0
파일: views.py 프로젝트: zeus911/MyJobs
def partner_main_reports(request):
    company, partner, user = prm_worthy(request)
    dt_range, date_str, records = get_records_from_request(request)

    ctx = {
        'admin_id': request.REQUEST.get('admin'),
        'partner': partner,
        'company': company,
        'contacts': records.contacts,
        'total_records': records.communication_activity.count(),
        'referral': records.referrals,
        'top_contacts': records.contacts[:3],
        'others': sum(contact['records'] for contact in records.contacts[3:]),
        'view_name': 'PRM',
        'date_start': dt_range[0],
        'date_end': dt_range[1],
        'date_display': date_str,
    }
    return render_to_response('mypartners/partner_reports.html', ctx,
                              RequestContext(request))
예제 #17
0
파일: views.py 프로젝트: zeus911/MyJobs
def prm_records(request):
    """
    ContactRecord overview and ContactRecord overview from PRM reports.

    """
    company, partner, _ = prm_worthy(request)
    _, _, contact_records = get_records_from_request(request)
    paginated_records = add_pagination(request, contact_records)

    if request.is_ajax():
        ctx = {
            'partner': partner,
            'records': paginated_records
        }
        response = HttpResponse()
        html = render_to_response(
            'mypartners/includes/contact_record_column.html', ctx,
            RequestContext(request))
        response.content = html.content
        return response

    contact_type_choices = (('all', 'All'),) + CONTACT_TYPE_CHOICES

    contact_choices = [
        (c, c) for c in contact_records.order_by(
            'contact__name').distinct().values_list('contact__name', flat=True)]
    contact_choices.insert(0, ('all', 'All'))

    ctx = {
        'admin_id': request.REQUEST.get('admin'),
        'company': company,
        'contact_choices': contact_choices,
        'contact_type_choices': contact_type_choices,
        'partner': partner,
        'records': paginated_records,
        'view_name': 'PRM',
    }

    return render_to_response('mypartners/main_records.html', ctx,
                              RequestContext(request))
예제 #18
0
파일: views.py 프로젝트: zeus911/MyJobs
def prm_view_records(request):
    """
    View an individual ContactRecord.

    """
    company, partner, _ = prm_worthy(request)
    _, _, contact_records = get_records_from_request(request)
    try:
        page = int(request.GET.get('page', 1))
    except ValueError:
        page = 1
    # change number of objects per page
    paginated_records = add_pagination(request, contact_records, 1)

    if len(paginated_records.object_list) > 1:
        record = paginated_records.object_list[page - 1]
    else:
        record = paginated_records.object_list[0]

    attachments = record.prmattachment_set.all()
    record_history = ContactLogEntry.objects.filter(
        object_id=record.pk, content_type_id=ContentType.objects.get_for_model(
            ContactRecord).pk)

    ctx = {
        'record': record,
        'records': paginated_records,
        'partner': partner,
        'company': company,
        'attachments': attachments,
        'record_history': record_history,
        'view_name': 'PRM',
        'page': page
    }

    return render_to_response('mypartners/view_record.html', ctx,
                              RequestContext(request))
예제 #19
0
파일: views.py 프로젝트: vfulco/MyJobs
def prm_view_records(request):
    """
    View an individual ContactRecord.

    """
    company, partner, _ = prm_worthy(request)
    _, _, contact_records = get_records_from_request(request)
    try:
        page = int(request.GET.get("page", 1))
    except ValueError:
        page = 1
    # change number of objects per page
    paginated_records = add_pagination(request, contact_records, 1)

    if len(paginated_records.object_list) > 1:
        record = paginated_records.object_list[page - 1]
    else:
        record = paginated_records.object_list[0]

    attachments = record.prmattachment_set.all()
    record_history = ContactLogEntry.objects.filter(
        object_id=record.pk, content_type_id=ContentType.objects.get_for_model(ContactRecord).pk
    )

    ctx = {
        "record": record,
        "records": paginated_records,
        "partner": partner,
        "company": company,
        "attachments": attachments,
        "record_history": record_history,
        "view_name": "PRM",
        "page": page,
    }

    return render_to_response("mypartners/view_record.html", ctx, RequestContext(request))