Exemple #1
0
    def get_schedules_to_somax_spider(cls):
        tasks_records = WorkScheduleDataDAO.get_all_schedules_sync_to_somax()
        if tasks_records.empty:
            return pd.DataFrame()

        tasks_records.sort_values(['worker', 'date'], inplace=True)
        tasks_records['group'] = 0

        group = 0
        worker_last = None
        date_last = None
        for index, row in tasks_records.iterrows():
            worker = row['worker']
            date = row['date']
            if worker_last and date_last:
                if worker == worker_last and date == date_last:
                    tasks_records.set_value(index, ['group'], group)
                else:
                    group += 1
                    worker_last = worker
                    date_last = date
                    tasks_records.set_value(index, ['group'], group)
            else:
                worker_last = worker
                date_last = date
                tasks_records.set_value(index, ['group'], group)

        # print(tasks_records)

        return tasks_records
Exemple #2
0
 def sync_avail_by_id(cls, available_id):
     schedule_hour_by_available_id = WorkScheduleDataDAO.get_schedule_hour_by_available_id(
         available_id)
     available = WorkerAvailable.objects.get(id=available_id)
     balance = available.duration - schedule_hour_by_available_id
     WorkerAvailable.objects.filter(id=available_id).update(balance=balance)
     return True
Exemple #3
0
            def resources(request, *args, **kwargs):
                start = request.GET.get('start')
                end = request.GET.get('end')

                start = UDatetime.datetime_str_init(start)
                end = UDatetime.datetime_str_init(end, start,
                                                  timedelta(days=1))

                start_date = UDatetime.pick_date_by_one_date(start)
                end_date = UDatetime.pick_date_by_one_date(end)

                workers_df = WorkScheduleDataDAO.get_all_include_workers_by_date_range(
                    start_date, end_date)
                response = []

                if not workers_df.empty:
                    workers_df.rename_axis(
                        {
                            'name': 'title',
                            'balance': 'Avail'
                        },
                        axis=1,
                        inplace=True)
                    response = workers_df.to_dict(orient='records')
                    return JsonResponse(response, safe=False)
                else:
                    return JsonResponse(response, safe=False)
Exemple #4
0
 def sync_task_by_id(cls, task_id, current_status=None):
     scheduled_hour_by_task_id = WorkScheduleDataDAO.get_schedule_hour_by_task_id(
         task_id)
     if current_status:
         Tasks.objects.filter(id=task_id).update(
             current_status=current_status,
             scheduled_hour=scheduled_hour_by_task_id,
             sync_to_somax='no')
     else:
         Tasks.objects.filter(id=task_id).update(
             scheduled_hour=scheduled_hour_by_task_id, sync_to_somax='no')
     return True
Exemple #5
0
            def add_worker_workers(request, *args, **kwargs):

                start = request.GET.get('start')
                end = request.GET.get('end')

                start = UDatetime.datetime_str_init(start)
                end = UDatetime.datetime_str_init(end, start,
                                                  timedelta(days=1))

                start_date = UDatetime.pick_date_by_one_date(start)
                end_date = UDatetime.pick_date_by_one_date(end)

                workers_df = WorkScheduleDataDAO.get_all_exclude_workers_by_date_range(
                    start_date, end_date)

                workers_df_contractor = pd.DataFrame(columns=['id', 'text'])
                workers_df_contractor['id'] = workers_df[workers_df['type'] ==
                                                         'contractor']['id']
                workers_df_contractor['text'] = workers_df[
                    workers_df['type'] == 'contractor']['name']
                if not workers_df_contractor.empty:
                    workers_dict_contractor = workers_df_contractor.to_dict(
                        orient='records')
                else:
                    workers_dict_contractor = []

                workers_df_employee = pd.DataFrame(columns=['id', 'text'])
                workers_df_employee['id'] = workers_df[workers_df['type'] ==
                                                       'employee']['id']
                workers_df_employee['text'] = workers_df[workers_df['type'] ==
                                                         'employee']['name']
                if not workers_df_employee.empty:
                    workers_dict_employee = workers_df_employee.to_dict(
                        orient='records')
                else:
                    workers_dict_employee = []

                response = [
                    {
                        'text': 'Contractor',
                        'children': workers_dict_contractor
                    },
                    {
                        'text': 'Employee',
                        'children': workers_dict_employee
                    },
                ]

                return JsonResponse(response, safe=False)
Exemple #6
0
    def set_data(cls, pagination=False, page_size=None, offset=None, filters=None, sort=None, order=None):
        tasks = WorkScheduleDataDAO.get_all_tasks_open(pagination, page_size, offset, filters, sort, order)

        return tasks
Exemple #7
0
            def update(request, *args, **kwargs):

                start = request.GET.get('start')
                end = request.GET.get('end')

                start = UDatetime.datetime_str_init(start)
                end = UDatetime.datetime_str_init(end, start,
                                                  timedelta(days=1))

                start_date = UDatetime.pick_date_by_one_date(start)
                end_date = UDatetime.pick_date_by_one_date(end)
                print(start_date, end_date)

                worker_avail = WorkerAvailable.objects.filter(
                    date__range=[start_date, end_date])
                worker_scheduled = WorkerScheduled.objects.filter(date__range=[start_date, end_date])\
                                                          .exclude(task_id__priority__in=['0', 'T'])
                worker_scheduled_others = WorkerScheduled.objects.filter(
                    date__range=[start_date, end_date],
                    task_id__priority__in=['0', 'T'])

                tasks = WorkScheduleDataDAO.get_all_tasks_open()[0]

                if worker_avail.exists():
                    worker_avail_df = pd.DataFrame.from_records(
                        worker_avail.values('duration', 'deduction'))

                    avail = (worker_avail_df['duration']
                             ).sum().total_seconds() / 3600
                else:
                    avail = 0
                if worker_scheduled.exists():
                    worker_scheduled_df = pd.DataFrame.from_records(
                        worker_scheduled.values('duration'))
                    scheduled = worker_scheduled_df['duration'].sum(
                    ).total_seconds() / 3600
                else:
                    scheduled = 0
                if worker_scheduled_others.exists():
                    worker_scheduled_others_df = pd.DataFrame.from_records(
                        worker_scheduled_others.values('duration'))
                    scheduled_others = worker_scheduled_others_df[
                        'duration'].sum().total_seconds() / 3600
                else:
                    scheduled_others = 0
                if not tasks.empty:
                    tasks_df = tasks[['estimate_hour', 'schedule_hour']]
                    tasks_est = tasks_df['estimate_hour'].sum()
                    tasks_count = len(tasks_df)
                    tasks_scheduled_count = len(
                        tasks_df[tasks_df['schedule_hour'] > 0])
                else:
                    tasks_est = 0
                    tasks_count = 0
                    tasks_scheduled_count = 0
                avail_orig = avail - scheduled_others
                avail_remain = avail - scheduled - scheduled_others
                task_est_remain = tasks_est - scheduled

                response = {
                    'scheduled': scheduled,
                    'avail': avail_orig,
                    'avail_remain': avail_remain,
                    'tasks_est': tasks_est,
                    'task_est_remain': task_est_remain,
                    'tasks_count': tasks_count,
                    'tasks_scheduled_count': tasks_scheduled_count
                }

                return JsonResponse(response)