Example #1
0
def student_donation(request, identifier=None):
    c = Context(dict(
        page_title='Donate',
        teachers=Teacher().get_donate_list(),
        make_donation=True,
    ))
    if identifier == 'search':
        c['search'] = True
        if request.GET:
            first_name = request.GET.get('student_first_name') or None
            last_name = request.GET.get('student_last_name') or None
            teacher_name = request.GET.get('teacher_last_name') or None
            if first_name or last_name or teacher_name:
                if first_name and last_name:
                    c['search'] = '{0} {1}'.format(first_name, last_name)
                else:
                    c['search'] = first_name or last_name or teacher_name

                students = Student().find(first_name, last_name, teacher_name)
                if students.count():
                    c['students'] = students
                else:
                    messages.error(request, 'Could not find Records matching: {0}'.format(c['search']))
                    c['error'] = True
            else:
                messages.error(request, 'You must provide a first or last name')
                c['error'] = True
    elif identifier:
        try:
            c['student'] = Student.objects.get(identifier=identifier)
        except:
            messages.error(request, 'Could not find Student for identity: {0}'.format(identifier))
            c['error'] = True
    c['messages'] = messages.get_messages(request)
    return render_to_response('donate.html', c, context_instance=RequestContext(request))
Example #2
0
 def process_students(self, row, teacher):
     if not self.student: return
     first_name = row.get('first_name').strip()
     last_name = row.get('last_name').strip()
     gender = row.get('gender', 'F').strip()
     full_name = "{0}, {1}".format(last_name, first_name)
     if full_name in self.students:
         return self.students[full_name]
     try:
         student = Student.objects.get(first_name=first_name, last_name=last_name, teacher=teacher)
     except ObjectDoesNotExist as err:
         student = Student(
             first_name=first_name,
             last_name=last_name,
             teacher=teacher
         )
     finally:
         student.identifier = student.get_identifier
         student.gender = gender
         if self.save:
             try:
                 student.save()
             except Exception as err:
                 print '==== student.save.err [{0}]'.format(err)
         print '==== student.save [{0}]'.format(student)
     self.students[full_name] = student
     return student
Example #3
0
def student_donation(request, identifier=None):
    c = Context(dict(page_title="Donate", teachers=Teacher().get_donate_list(), make_donation=True))
    if identifier == "search":
        c["search"] = True
        if request.GET:
            first_name = request.GET.get("student_first_name") or None
            last_name = request.GET.get("student_last_name") or None
            teacher_name = request.GET.get("teacher_last_name") or None
            if first_name or last_name or teacher_name:
                if first_name and last_name:
                    c["search"] = "{0} {1}".format(first_name, last_name)
                else:
                    c["search"] = first_name or last_name or teacher_name

                students = Student().find(first_name, last_name, teacher_name)
                if students.count():
                    c["students"] = students
                else:
                    messages.error(request, "Could not find Records matching: {0}".format(c["search"]))
                    c["error"] = True
            else:
                messages.error(request, "You must provide a first or last name")
                c["error"] = True
    elif identifier:
        try:
            c["student"] = Student.objects.get(identifier=identifier)
        except:
            messages.error(request, "Could not find Student for identity: {0}".format(identifier))
            c["error"] = True
    c["messages"] = messages.get_messages(request)
    return render_to_response("donate.html", c, context_instance=RequestContext(request))
    def handle(self, *args, **options):

        for key in ['all', 'save']:
            setattr(self, key, options.get(key, None))

        try:
            count = 0
            for filename in args:
                with open(filename, 'r') as csv_file:
                    reader = csv.DictReader(csv_file)
                    for row in reader:
                        teacher_name = regex.sub(r'\d+', '', row['teacher'])
                        grade = Grade.objects.get(grade=int(row['grade']))
                        try:
                            teacher = Teacher.objects.get(last_name__icontains=teacher_name, grade=grade)
                        except ObjectDoesNotExist as e:
                            print '==== teacher.exist.e [{0}][{1}][{2}]'.format(teacher_name, grade, e)
                            continue

                        try:
                            student = Student.objects.get(first_name=row['first_name'], last_name=row['last_name'], teacher=teacher)
                        except ObjectDoesNotExist as e:
                            student = Student(
                                first_name=row['first_name'],
                                last_name=row['last_name'],
                                gender=row['gender'],
                                teacher=teacher
                            )
                        finally:
                            student.identifier = student.get_identifier
                            student.gender = row['gender']
                            if self.save:
                                try:
                                    student.save()
                                    count += 1
                                except Exception as e:
                                    print '==== student.save.e [{0}]'.format(e)
                            print '==== student.save [{0}]'.format(student)


            self.stdout.write('Successfully Imported {0} Students from "{1}"'.format(count, filename))
        except Exception, e:
            raise CommandError('Could not parse file "{0}"'.format(e))
Example #5
0
    def process_all(self, row):
        teacher_name = regex.sub(r'\d+', '', row.get('teacher'))
        try:
            grade = Grade.objects.get(grade=int(row.get('grade', '0')))
        except ObjectDoesNotExist as err:
            print '==== grade.exist.err [{0}][{1}]'.format(teacher_name, err)
            try:
                teacher = Teacher.objects.get(last_name=teacher_name)
            except:
                print '==== teacher.exist.err [{0}][{1}]'.format(teacher_name, err)
        else:
            try:
                teacher = Teacher.objects.get(last_name__icontains=teacher_name, grade=grade)
            except ObjectDoesNotExist as err:
                print '==== teacher.exist.err [{0}][{1}][{2}]'.format(teacher_name, grade, err)
                try:
                    teacher = Teacher.objects.get(last_name=teacher_name)
                except:
                    print '==== teacher.exist.err [{0}][{1}]'.format(teacher_name, err)

        try:
            student = Student.objects.get(first_name=row.get('first_name'), last_name=row.get('last_name'), teacher=teacher)
        except ObjectDoesNotExist as err:
            student = Student(
                first_name=row.get('first_name'),
                last_name=row.get('last_name'),
                gender=row.get('gender', 'F'),
                teacher=teacher
            )
        finally:
            student.identifier = student.get_identifier
            student.gender = row.get('gender', 'F')
            if self.save:
                try:
                    student.save()
                    count += 1
                except Exception as err:
                    print '==== student.save.err [{0}]'.format(err)
            print '==== student.save [{0}]'.format(student)
Example #6
0
def donate_direct(request):
    make_donation = None
    teacher_donation = None
    c = Context(dict(
        page_title='Donator',
        donate=True,
        reply_to=settings.EMAIL_HOST_USER,
    ))
    if request.POST:
        make_donation = request.POST.get('make_donation')
        teacher_donation = request.POST.get('teacher_donation')
        form = DonationForm(request.POST)
        if form.is_valid():
            teacher = Teacher.objects.get(pk=request.POST.get('student_teacher_id'))
            first_name = request.POST.get('student_first_name').strip()
            last_name = request.POST.get('student_last_name').strip()
            per_lap = request.POST.get('per_lap')
            identifier = '{0}-{1}-{2}'.format(replace_space(first_name), replace_space(last_name), teacher.room_number)
            try:
                student = Student.objects.get(identifier=identifier)
            except Exception, e:
                student = Student(
                    first_name=first_name,
                    last_name=last_name,
                    date_added=date.datetime.now(pytz.utc),
                    identifier=identifier,
                    teacher=teacher,
                )
                student.save()
            try:
                donation = Donation.objects.create(
                    first_name=request.POST.get('first_name'),
                    last_name=request.POST.get('last_name'),
                    email_address=request.POST.get('email_address'),
                    phone_number=request.POST.get('phone_number'),
                    per_lap=per_lap and int(per_lap) or 0,
                    donation=request.POST.get('donation'),
                    date_added=date.datetime.now(pytz.utc),
                    student=student,
                )
                messages.success(request, 'Thank you for making a pledge to {0}'.format(teacher_donation and donation.first_name or student.full_name()))
                # add to cart
                add_to_cart(request, 'donation', donation.id, 1)
                # update totals
                donation.calculate_totals(donation.id)
#                 calculate_totals_signal.send(sender=None, donation=donation)
                c['success'] = True
                c['donate_url'] = student.donate_url()
                c['student_full_name'] = student.full_name()
                c['student_identifier'] = student.identifier
                c['amount'] = donation.donation
                c['full_name'] = donation.full_name()
                c['is_per_lap'] = donation.per_lap
                c['payment_url'] = donation.payment_url()
                c['email_address'] = donation.email_address
                c['subject'] = 'Hicks Canyon Jog-A-Thon: Thank you for making a Pledge'
                c['domain'] = Site.objects.get_current().domain
                if not teacher_donation:
                    _send_email_teamplate('donate', c)
            except Exception, e:
                messages.error(request, str(e))
    def handle(self, *args, **options):

        for key in ['all', 'save']:
            option = options.get(key, None)
            if option:
                setattr(self, key, option)

        for filename in args:
            try:
                soup = BeautifulSoup(open(filename))
                teacher = None
                student = None
                temp    = None
                start_student = False
                count = 0
                for div in soup.find_all('div'):
                    span_1 = div.find('span')
                    if span_1 and span_1['class'][0] not in ['cls_005', 'cls_006', 'cls_007', 'cls_008']:
                        start_student = False
                        continue
                    if span_1 and span_1['class'][0] in ['cls_007', 'cls_008']:
                        start_student = True
                    if span_1 and span_1['class'][0] == 'cls_005':
                        match = regex.compile(r'(?P<total>(\d+)) Total (?P<type>(Males|Females|Students))')
                        match_total = match.match(span_1.string)
                        if match_total:
                            print '==== Total {1} [{0}]'.format(match_total.group('total'), match_total.group('type'))

                    ## Save Teacher Information ##
                    if span_1 and not start_student:
                        span_2 = span_1.next_sibling
                        if span_2 and span_2['class'][0] == 'cls_006':
                            teacher = self.create_teacher(teacher, span_2)
                            count = 1
                            continue
                        elif span_1['class'][0] == 'cls_006':
                            temp = self.create_teacher(None, span_1)
                            temp.room_number = temp.room_number
                            temp.grade = temp.grade
                            temp.save()
                            teacher = temp
                            continue
                        elif span_1.string == 'Teacher#':
                            if teacher:
                                print '==== Total Added [{0}]'.format(teacher.students.count())
                            teacher = Teacher()
                            count = -2
                        if count == 1:
                            room = div.find('span').string
                            match = regex.compile(r'Room#\s*(?P<room>(\d+))')
                            match_room = match.match(room)
                            if match_room:
                                teacher.room_number = match_room.group('room')
                            count = 2
                        if count == 4:
                            grade_number = div.find('span')
                            grade = Grade.objects.get(grade=grade_number.string)
                            teacher.grade = grade
                            if not temp:
                                teacher.save()
                        count += 1

                    if teacher and start_student:
                        ## Save Student Information ##
                        match = regex.compile('^\d+$')
                        if match.match(span_1.string):
                            count = 1
                        if count == 2:
                            student = Student()
                            student.last_name = span_1.string
                            student.teacher = teacher
                        if count == 3:
                            student.first_name = span_1.string
                            student.identifier = '{0}-{1}-{2}'.format(replace_space(student.first_name), replace_space(student.last_name), teacher.room_number)
                        if count == 4:
                            if len(span_1.string) == 1:
                                student.gender = span_1.string
                                if self.save:
                                    student.save()
                        if count == 5:
                            student.gender = span_1.string
                            if self.save:
                                student.save()
                            print '==== student [{0}][{1}]'.format(student, student.gender)
                        count += 1
                print '==== Total Added [{0}]'.format(teacher.students.count())
                self.stdout.write('Successfully Imported Data for "{0}"'.format(filename))
            except Exception, e:
                raise CommandError('Could not parse file "{0}"'.format(e))
Example #8
0
def donate_direct(request):
    make_donation = None
    teacher_donation = None
    c = Context(dict(page_title="Donator", donate=True, reply_to=settings.EMAIL_HOST_USER))
    if request.POST:
        make_donation = request.POST.get("make_donation")
        teacher_donation = request.POST.get("teacher_donation")
        form = DonationForm(request.POST)
        if form.is_valid():
            teacher = Teacher.objects.get(pk=request.POST.get("student_teacher_id"))
            first_name = request.POST.get("student_first_name").strip()
            last_name = request.POST.get("student_last_name").strip()
            per_lap = request.POST.get("per_lap")
            identifier = "{0}-{1}-{2}".format(replace_space(first_name), replace_space(last_name), teacher.room_number)
            try:
                student = Student.objects.get(identifier=identifier)
            except Exception, e:
                student = Student(
                    first_name=first_name,
                    last_name=last_name,
                    date_added=date.datetime.now(pytz.utc),
                    identifier=identifier,
                    teacher=teacher,
                )
                student.save()
            try:
                donation = Donation.objects.create(
                    first_name=request.POST.get("first_name"),
                    last_name=request.POST.get("last_name"),
                    email_address=request.POST.get("email_address"),
                    phone_number=request.POST.get("phone_number"),
                    per_lap=per_lap and int(per_lap) or 0,
                    donation=request.POST.get("donation"),
                    date_added=date.datetime.now(pytz.utc),
                    student=student,
                )
                messages.success(
                    request,
                    "Thank you for making a pledge to {0}".format(
                        teacher_donation and donation.first_name or student.full_name()
                    ),
                )
                # add to cart
                add_to_cart(request, "donation", donation.id, 1)
                # update totals
                donation.calculate_totals(donation.id)
                #                 calculate_totals_signal.send(sender=None, donation=donation)
                c["success"] = True
                c["donate_url"] = student.donate_url()
                c["student_full_name"] = student.full_name()
                c["student_identifier"] = student.identifier
                c["amount"] = donation.donation
                c["full_name"] = donation.full_name()
                c["is_per_lap"] = donation.per_lap
                c["payment_url"] = donation.payment_url()
                c["email_address"] = donation.email_address
                c["subject"] = "Hicks Canyon Jog-A-Thon: Thank you for making a Pledge"
                c["domain"] = Site.objects.get_current().domain
                if not teacher_donation:
                    _send_email_teamplate("donate", c)
            except Exception, e:
                messages.error(request, str(e))