Exemple #1
0
    def get(self, payroll_user=None, week=None):
        if self.user is not None:
          start_date = utils.get_last_monday(datetime.date.today())
          end_date = start_date + datetime.timedelta(days=6)
          if week:
              start_date = utils.get_last_monday(datetime.date.fromtimestamp(float(week)))
              end_date = start_date + datetime.timedelta(days=6)
              records = TimeRecord.get_current_week(payroll_user or self.user.username, start_date)
          else:
              records = TimeRecord.get_current_week(payroll_user or self.user.username)
          if not records:
              return abort(404)

          next_date = start_date + datetime.timedelta(days=7)
          prev_date = start_date - datetime.timedelta(days=7)
          context = {
              'nav':  'payroll',
              'user': self.user,
              'table_rows': records,
              'payroll_username': payroll_user or self.user.username,
              'start_date': start_date,
              'end_date': end_date,
              'prev_timestamp': time.mktime(prev_date.timetuple()),
              'next_timestamp': time.mktime(next_date.timetuple()),
          }
          return render_template('payroll.html', **context)
        else:
	  flash("Please log in before accessing the payroll system")
	  return render_template('index.html')
Exemple #2
0
    def get(self, payroll_user=None, week=None):
        start_date = utils.get_last_monday(datetime.date.today())
        end_date = start_date + datetime.timedelta(days=6)
        if week:
            start_date = utils.get_last_monday(
                datetime.date.fromtimestamp(float(week)))
            end_date = start_date + datetime.timedelta(days=6)
            records = TimeRecord.get_current_week(
                payroll_user or self.user.username, start_date)
        else:
            records = TimeRecord.get_current_week(payroll_user
                                                  or self.user.username)
        if not records:
            return abort(404)

        next_date = start_date + datetime.timedelta(days=7)
        prev_date = start_date - datetime.timedelta(days=7)
        context = {
            'nav': 'payroll',
            'user': self.user,
            'table_rows': records,
            'payroll_username': payroll_user or self.user.username,
            'start_date': start_date,
            'end_date': end_date,
            'prev_timestamp': time.mktime(prev_date.timetuple()),
            'next_timestamp': time.mktime(next_date.timetuple()),
        }
        return render_template('payroll.html', **context)
Exemple #3
0
    def get(self, username):
        days = int(request.args.get('days', 14))

        user = User.get_user_by_username(username)
        if not user:
            abort(404)

        records = TimeRecord.get_approved_records_by_username(username, num_days=days)
        record_list = []
        for record in records:
            record_list.append({
                'date': record.date.strftime('%B %d'),
                'clock-in': record.clock_in.strftime('%I:%M %p'),
                'clock-out': record.clock_out.strftime('%I:%M %p'),
                'approved': record.approved,
                'approved-by': record.approved_by
            })

        response = {
            'username': user.username,
            'ssn': user.ssn,
            'wage': user.wage,
            'records': record_list
        }

        return json.dumps(response)
Exemple #4
0
    def get(self, username):
        days = int(request.args.get('days', 14))

        user = User.get_user_by_username(username)
        if not user:
            abort(404)

        records = TimeRecord.get_approved_records_by_username(username,
                                                              num_days=days)
        record_list = []
        for record in records:
            record_list.append({
                'date':
                record.date.strftime('%B %d'),
                'clock-in':
                record.clock_in.strftime('%I:%M %p'),
                'clock-out':
                record.clock_out.strftime('%I:%M %p'),
                'approved':
                record.approved,
                'approved-by':
                record.approved_by
            })

        response = {
            'username': user.username,
            'ssn': user.ssn,
            'wage': user.wage,
            'records': record_list
        }

        return json.dumps(response)
Exemple #5
0
    def post(self, payroll_user=None, week=None):
      if self.user is not None:
        for input, value in request.form.iteritems():
            if value:
                punch_type, input_id = input.split('-')
                current_record = TimeRecord.objects(id=input_id).get()

                try:
                    time = datetime.datetime.strptime(value, '%I:%M %p')
                    day = current_record.date
                    timestamp = datetime.datetime.combine(day, time.time())
                except ValueError, e:
                    pass

                if punch_type == 'clockin':
                    current_record.clock_in = timestamp
                else:
                    current_record.clock_out = timestamp

                if current_record.clock_in and current_record.clock_out:
                    current_record.set_hours()

                current_record.save()
        if payroll_user and week:
            return redirect((url_for('payroll',
                                     payroll_user=payroll_user,
                                     week=week)))

        return redirect(url_for('payroll'))
Exemple #6
0
    def get(self, username):
      if self.user is not None and self.user.is_admin:
        days = int(request.args.get('days', 14))

        user = User.get_user_by_username(username)
        if not user:
            abort(404)

        records = TimeRecord.get_approved_records_by_username(username, num_days=days)
        record_list = []
        for record in records:
            record_list.append({
                'date': record.date.strftime('%B %d'),
                'clock-in': record.clock_in.strftime('%I:%M %p'),
                'clock-out': record.clock_out.strftime('%I:%M %p'),
                'approved': record.approved,
                'approved-by': record.approved_by
            })

        response = {
            'username': user.username,
            'ssn': user.ssn,
            'wage': user.wage,
            'records': record_list
        }
      else:
        response = {
            'msg': 'You are not authenticated, or you do not have permission to use this action'
        }

      return json.dumps(response)
Exemple #7
0
    def get(self):
        context = {'nav': 'approve', 'user': self.user}

        records = TimeRecord.get_unapproved_records()

        context['records'] = records

        return render_template('approve.html', **context)
Exemple #8
0
    def get(self):
        context = {
            'nav': 'approve',
            'user': self.user
        }

        records = TimeRecord.get_unapproved_records()

        context['records'] = records

        return render_template('approve.html', **context)
Exemple #9
0
    def get(self, payroll_user=None, week=None):
        # check logged in
        if not self.user or not self.user.username or not self.user.is_authenticated:
            return redirect('/logout?byebye=yes')

        # if a payroll user is specified, the logged in user must be an approver (or it must be thier own account)
        if payroll_user:
            payroll_user = crypto.encrypt(payroll_user)
            if not self.user.is_approver:
                if not payroll_user == self.user.username:
                    return redirect('/logout?byebye=yes')

        # sanitize input for week parameter
        if week:
            if not utils.sanitize_number_input(week):
                return redirect('/logout?byebye=yes')

        start_date = utils.get_last_monday(datetime.date.today())
        end_date = start_date + datetime.timedelta(days=6)
        if week:
            start_date = utils.get_last_monday(datetime.date.fromtimestamp(float(week)))
            end_date = start_date + datetime.timedelta(days=6)
            records = TimeRecord.get_current_week(payroll_user or self.user.username, start_date)
        else:
            records = TimeRecord.get_current_week(payroll_user or self.user.username)
        if not records:
            return abort(404)

        next_date = start_date + datetime.timedelta(days=7)
        prev_date = start_date - datetime.timedelta(days=7)
        context = {
            'user': self.user,
            'table_rows': records,
            'payroll_username' : payroll_user or self.user.username,
            'start_date': start_date,
            'end_date': end_date,
            'prev_timestamp': time.mktime(prev_date.timetuple()),
            'next_timestamp': time.mktime(next_date.timetuple()),
        }
        return render_template('payroll.html', **context)
Exemple #10
0
    def post(self):
        id = None
        approver = None
        if 'id' in request.form:
            approve, id = request.form['id'].split('-')
        if 'approver' in request.form:
            approver = request.form['approver']
        if not id or not approver:
            return "error"

        time_record = TimeRecord.objects(id=id).get()
        time_record.approved = True
        time_record.approved_by = approver
        time_record.save()

        return approver
Exemple #11
0
    def get(self):
        if self.user is not None:
            if self.user.is_approver:
                context = {'nav': 'approve','user': self.user}

                records = TimeRecord.get_unapproved_records()

                context['records'] = records

                return render_template('approve.html', **context)
      	    else:
	        flash("You are not an approver!")
                return render_template('index.html')
        else:
	    flash("Please log in before accessing the payroll system")
            return render_template('index.html')
Exemple #12
0
    def post(self):
        id = None
        approver = None
        if 'id' in request.form:
            approve, id = request.form['id'].split('-')
        if 'approver' in request.form:
            approver = request.form['approver']
        if not id or not approver:
            return "error"

        time_record = TimeRecord.objects(id=id).get()
        time_record.approved = True
        time_record.approved_by = approver
        time_record.save()

        return approver
Exemple #13
0
    def get(self):
        # check logged in
        if not self.user or not self.user.username or not self.user.is_authenticated:
            return redirect('/logout?byebye=yes')

        # check user is an approver
        if not self.user.is_approver:
            return redirect('/logout?byebye=yes')

        context = {
            'user': self.user
        }

        records = TimeRecord.get_unapproved_records()

        context['records'] = records

        return render_template('approve.html', **context)
Exemple #14
0
    def post(self):
      if self.user is not None and self.user.is_approver:
        id = None
        approver = None
        if 'id' in request.form:
            approve, id = request.form['id'].split('-')
        if 'approver' in request.form:
            approver = request.form['approver']
        if not id or not approver:
            return "error"

        time_record = TimeRecord.objects(id=id).get()
        time_record.approved = True
        time_record.approved_by = approver
        time_record.save()

        return approver
      else:
        flash("You are not an approver!")
        return render_template('index.html')
Exemple #15
0
    def post(self):
        # check logged in
        if not self.user or not self.user.username or not self.user.is_authenticated:
            return "error: not authenticated"

        # check user is an approver
        if not self.user.is_approver:
            return "error: permission denied"

        id = None
        if 'id' in request.form:
            approve, id = request.form['id'].split('-')
        if not id:
            return "error"

        time_record = TimeRecord.objects(id=id).get()
        time_record.approved = True
        time_record.approved_by = self.user.username
        time_record.save()

        return "success"
Exemple #16
0
    def post(self, payroll_user=None, week=None):
        for input, value in request.form.iteritems():
            if value:
                punch_type, input_id = input.split('-')
                current_record = TimeRecord.objects(id=input_id).get()

                try:
                    time = datetime.datetime.strptime(value, '%I:%M %p')
                    day = current_record.date
                    timestamp = datetime.datetime.combine(day, time.time())
                except ValueError, e:
                    pass

                if punch_type == 'clockin':
                    current_record.clock_in = timestamp
                else:
                    current_record.clock_out = timestamp

                if current_record.clock_in and current_record.clock_out:
                    current_record.set_hours()

                current_record.save()
Exemple #17
0
    def get(self, username):
        # check logged in
        if not self.user or not self.user.username or not self.user.is_authenticated:
            return redirect('/logout?byebye=yes')

        # check user is an admin
        if not self.user.is_admin:
            return redirect('/logout?byebye=yes')

        # set the default user if /export was called
        if not username:
            username = self.user.username
        else:
            username = crypto.encrypt(username)

        days = 14
        user = User.get_user_by_username(username)

        if not user:
            abort(404)

        # create workbook
        wb = xlwt.Workbook()
        ws = wb.add_sheet('Sheet 1')

        # write user
        ws.write(0,0,'User')
        ws.write(0,1,crypto.decrypt(user.username))
       
        # write SSN
        ws.write(1,0,'SSN')
        ws.write(1,1,crypto.decrypt(user.ssn))

        # write table headers
        ws.write(3,0,'Date')
        ws.write(3,1,'Clock In')
        ws.write(3,2,'Clock Out')
        ws.write(3,3,'Approved?')
        ws.write(3,4,'Approved By')

        # write out table entries
        records = TimeRecord.get_approved_records_by_username(username, num_days=days)

        row = 4
        for record in records:
            ws.write(row,0,record.date.strftime('%B %d'))
            ws.write(row,1,record.clock_in.strftime('%I:%M %p'))
            ws.write(row,2,record.clock_out.strftime('%I:%M %p'))
            ws.write(row,3,record.approved)
            ws.write(row,4,crypto.decrypt(record.approved_by))
            row = row + 1

        # create IO buffer
        output = StringIO.StringIO()

        # save workbook into buffer
        wb.save(output)

        # reset buffer pointer and trigger response
        output.seek(0)
        return send_file(output, attachment_filename=crypto.decrypt(user.username) + ".xls", as_attachment=True)
Exemple #18
0
    def post(self, payroll_user=None, week=None):
        # check logged in
        if not self.user or not self.user.username or not self.user.is_authenticated:
            return redirect('/logout?byebye=yes')

        # make sure someone isn't trying to set someone else's payroll info...
        if payroll_user:
            if not payroll_user == crypto.decrypt(self.user.username):
                print "INVALID USER REQUEST: ", payroll_user
                return redirect('/logout?byebye=yes')

        # sanitize input for week parameter
        if week:
            if not utils.sanitize_number_input(week):
                print "INVALID WEEK PARAMETER: ", week
                return redirect('/logout?byebye=yes')

        for input, value in request.form.iteritems():
            if value:
                punch_type, input_id = input.split('-')

                # check punch type
                if not punch_type == 'clockin':
                    if not punch_type == 'clockout':
                        print "INVALID PUNCH TYPE: ", punch_type
                        return redirect('/logout?byebye=yes')

                # check record id input
                if not utils.sanitize_mongo_hash(input_id):
                    print "INVALID RECORD ID: ", input_id
                    return redirect('/logout?byebye=yes')

                current_record = TimeRecord.objects(id=input_id).get()

                # only update the record if the current user actually owns it
                # users can only update their own records...
                if current_record.username == self.user.username:
                    # only let the user update the record if it hasn't been approved (no after the fact modifications)
                    if not current_record.approved:

                        # check time value
                        if not utils.sanitize_time_input(value):
                            print "INVALID TIME ENTRY: ", value
                            return redirect('/logout?byebye=yes')

                        try:
                            time = datetime.datetime.strptime(value, '%I:%M %p')
                            day = current_record.date
                            timestamp = datetime.datetime.combine(day, time.time())
                        except ValueError, e:
                            pass

                        if punch_type == 'clockin':
                            current_record.clock_in = timestamp
                        else:
                            current_record.clock_out = timestamp

                        if current_record.clock_in and current_record.clock_out:
                            current_record.set_hours()

                        current_record.save()