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
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
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)
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
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)
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
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)