コード例 #1
0
ファイル: views.py プロジェクト: nol83/ncdc-web
    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')
コード例 #2
0
ファイル: views.py プロジェクト: bschir/ncdc-web
    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)
コード例 #3
0
ファイル: views.py プロジェクト: benjholla/NCDC2013
    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)
コード例 #4
0
ファイル: models.py プロジェクト: bschir/ncdc-web
class TimeRecord(Document):
    """
    A model representing a single day's time info.

    :param username: The username of who the TimeRecord is for.
    :param date: The date the TimeRecord represents.
    :param clock_in: The time representing when the employee clocked in for the day.
    :param clock_out: The time that the employee clocked out.
    :param approved: Records if a TimeRecord is approved by a payroll approver.
    :param approved_by: The username of the person who approved the TimeRecord.
    :param hours: The number of hours worked that day.
    """
    username = StringField(default=None, required=True)
    date = DateTimeField(default=datetime.date.today(), required=True)
    clock_in = DateTimeField(required=False)
    clock_out = DateTimeField(required=False)
    approved = BooleanField(default=False, required=True)
    approved_by = StringField(max_length=255, required=False)
    hours = FloatField()

    def set_hours(self):
        """
        Set the number of hours worked based on the clock_in and clock_out times.

        :returns: The number of hours worked if the TimeRecord contains a clock_in and
        clock_out, else returns None.
        """
        if not self.clock_in or not self.clock_out:
            return

        time_worked = self.clock_out - self.clock_in
        self.hours = time_worked.seconds / 3600.0
        return self.hours

    @classmethod
    def get_current_week(cls, username, today=datetime.date.today()):
        """
        Given a day, this will return a weeks worth of TimeRecords objects, starting with Monday,
        that contains the date passed in as today.

        :param username: The username to lookup
        :param today: The day to use to look up the week.  Defaults to today.
        :returns: A list of TimeRecord objects, for the username given, that is a payroll week
        containing the day given.
        """

        try:
            user = User.objects(username=username).get()
        except DoesNotExist, e:
            return

        last_monday = utils.get_last_monday(today)
        next_monday = last_monday + datetime.timedelta(days=7)
        records = TimeRecord.objects(date__gte=last_monday,
                                     date__lt=next_monday,
                                     username=username).order_by('date')
        if len(records) < 7:
            for day in xrange(7):
                date = last_monday + datetime.timedelta(days=day)
                try:
                    record = TimeRecord.objects(date=date, username=username).get()
                except DoesNotExist, e:
                    TimeRecord(date=date, username=username).save()
            records = TimeRecord.objects(date__gte=last_monday,
                                         date__lt=next_monday,
                                         username=username).order_by('date')