Ejemplo n.º 1
0
 def get(self, page=1, name=None, date=None):
     if name:
         employee = self.collection.find_one({'name': name})
         return employee
     elif page == 'all':
         employees = self.collection.find(sort=[('name', 1)])
         employees_list = []
         for employee in employees:
             regular = True
             if 'regular' in employee and employee['regular'] == '비상근':
                 regular = False
             if 'email' in employee and employee['email']:
                 email = employee['email']
             else:
                 email = None
             if 'status' in employee and employee['status']:
                 status = employee['status']
             else:
                 status = None
             # 퇴사하지 않은 직원만 포함하기 위해서
             if status != '퇴사':
                 if 'endDate' not in employee:
                     employees_list.append({'name': employee['name'], 'employeeId': employee['employeeId'], 'email': email, 'regular': regular, 'status': status})
                 else:
                     if date and date <= employee['endDate']:
                         employees_list.append({'name': employee['name'], 'employeeId': employee['employeeId'], 'email': email, 'regular': regular, 'status': status})
         return employees_list
     else:
         data_list = self.collection.find(sort=[('department', 1), ('name', 1)])
         get_page = Page(page)
         return get_page.paginate(data_list)
Ejemplo n.º 2
0
def generate_error_pages(error_images: List[Image], skipped_pages: List[Page],
                         list_id: str) -> None:
    page = utils.make_blank_page()
    page.crop(top=int(2 * utils.MARGIN),
              right=int(2 * utils.MARGIN))  # to account for printing

    # calculate the number of error images that can fit on a page
    num_images_per_page = math.floor(page.size.h / error_images[0].size.h)

    # init error pages array
    error_pages = skipped_pages
    images_on_page = 0

    for i, error_image in enumerate(error_images):
        # Create new pages as necessary
        if i % num_images_per_page == 0 and i > 0:
            # save the previous page to the error_pages array
            page.add_border(top=int(2 * utils.MARGIN),
                            right=int(2 * utils.MARGIN))
            error_pages.append(page)
            images_on_page = 0

        # add images to the page
        insert_point = Point(0, images_on_page * error_image.size.h)
        page = Page(page.insert_image(error_image, insert_point))

        # increment the images on page counter
        images_on_page += 1

    # add the last page to the array
    page.add_border(top=int(2 * utils.MARGIN), right=int(2 * utils.MARGIN))
    error_pages.append(page)

    # save out a pdf
    save_error_pages(error_pages, list_id)
Ejemplo n.º 3
0
 def get_device_list(self, page=1, date=None):
     device_list = []
     data_list = self.collection.aggregate([
         {'$match':{'date': date, 'time': {"$gt": WORKING['time']['overNight']}}},
         {'$group':{'_id': '$mac'}}])
     for data in data_list:
         for key in data:
             device_list.append(data[key])
     if page == 'all':
         return device_list
     else:
         get_page = Page(page)
         return get_page.paginate(device_list)
Ejemplo n.º 4
0
 def get(self, page=1, date=None):
     if date is None and page=='all':
         device_list = self.collection.find()
     else:
         if date is None:
             _, _, today, _ = check_time()
             date = today
         date = get_date_several_months_before(date, delta=2)
         device_list = self.collection.find({'endDate': {"$gt": date}})
     if page == 'all':
         return device_list
     else:
         get_page = Page(page)
         return get_page.paginate(device_list)
Ejemplo n.º 5
0
    def summary(self, page=1, start=None, end=None):

        data_list = None
        summary_list = []
        if start and end:
            data_list = self.collection.find(
                {'date': {
                    "$gte": start,
                    "$lte": end
                }},
                sort=[('name', 1), ('date', -1)])
        if data_list:
            summary = OrderedDict()
            for data in data_list:
                if data['workingHours'] is not None:
                    name = data['name']
                    if name not in summary:
                        summary[name] = {'name': name}
                    if 'totalDay' not in summary[name]:
                        summary[name]['totalDay'] = 0
                    if 'totalWorkingDay' not in summary[name]:
                        summary[name]['totalWorkingDay'] = 0
                    if 'totalWorkingHours' not in summary[name]:
                        summary[name]['totalWorkingHours'] = 0
                    for status in WORKING['inStatus']:
                        if status not in summary[name]:
                            summary[name][status] = 0
                    for status in WORKING['status']:
                        if status not in summary[name]:
                            summary[name][status] = 0

                    summary[name]['totalDay'] = summary[name]['totalDay'] + 1
                    if 'status' in data:
                        if data['status'][0]:
                            summary[name][data['status'][0]] = summary[name][
                                data['status'][0]] + 1
                    if 'reason' in data and data['reason'] and data[
                            'reason'] in summary[name]:
                        summary[name][
                            data['reason']] = summary[name][data['reason']] + 1
                    summary[name]['totalWorkingHours'] = summary[name][
                        'totalWorkingHours'] + data['workingHours']
            for name in summary:
                summary[name] = self.get_summary(summary[name])
                summary_list.append(summary[name])

        get_page = Page(page)
        return get_page.paginate(summary_list)
Ejemplo n.º 6
0
    def attend(self, page=None, name=None, start=None, end=None):
        if page == 'all':
            employee = self.employee.get(name=name)
            if start:
                data_list = self.collection.find({'date': {"$gte": start, "$lte": end}, 'name': name},
                                                 sort=[('name', 1), ('date', 1)])
            else:
                data_list = self.collection.find({'name': name}, sort=[('date', 1)])
            attend_list = []
            for data in data_list:
                if data['begin']:
                    begin = data['begin'][0:2] + ':' + data['begin'][2:4]
                else:
                    begin = ''
                if data['end']:
                    end = data['end'][0:2] + ':' + data['end'][2:4]
                else:
                    end = ''
                if 'reason' in data:
                    reason = data['reason']
                else:
                    reason = ''
                attend_list.append(
                    {'name': data['name'], 'rank': employee['rank'], 'department': employee['department'],
                     'date': data['date'], 'begin': begin, 'end': end, 'reason': reason})
            return attend_list
        else:
            if start and end:
                if name:
                    data_list = self.collection.find({'date': {"$gte": start, "$lte": end}, 'name': name},
                                                     sort=[('name', 1), ('date', -1)])
                else:
                    data_list = self.collection.find({'date': {"$gte": start, "$lte": end}},
                                                     sort=[('name', 1), ('date', -1)])
            else:
                if name:
                    data_list = self.collection.find({'date': self.today, 'name': name}, sort=[('date', -1)])
                else:
                    data_list = self.collection.find({'date': self.today}, sort=[('name', 1)])

            get_page = Page(page)
            paging, data_list = get_page.paginate(data_list)

            summary = OrderedDict()
            if name:
                attend_list = []
                summary['totalDay'] = 0
                summary['totalWorkingDay'] = 0
                summary['totalWorkingHours'] = 0
                for status in WORKING['inStatus']:
                    summary[status] = 0
                for status in WORKING['status']:
                    summary[status] = 0
                for data in data_list:
                    if data['workingHours'] is not None:
                        summary['totalDay'] = summary['totalDay'] + 1
                        del data['_id']
                        if 'status' in data:
                            if data['status'][0]:
                                summary[data['status'][0]] = summary[data['status'][0]] + 1
                        if 'reason' in data and data['reason']:
                            summary[data['reason']] = summary[data['reason']] + 1
                        summary['totalWorkingHours'] = summary['totalWorkingHours'] + data['workingHours']
                    attend_list.append(data)
                summary = self.get_summary(summary)
                return paging, self.today, attend_list, summary
            else:
                return paging, self.today, data_list, summary
Ejemplo n.º 7
0
 def get(self, page=1, start=None, end=None):
     data_list = self.collection.find(sort=[('create_time', -1)])
     get_page = Page(page)
     return get_page.paginate(data_list)
Ejemplo n.º 8
0
def scrape_words(url):
    page = Page(url)
    words = page.css('.podcast_table_home .pod_body b')
    return [word.text_content().lower().strip() for word in words]