Example #1
0
static int resource_set_get_resources(void *data, lua_State *L, int member, mrp_lua_value_t *v)
{
    resource_set_lua_t *rset;
    void *iter = NULL;
    mrp_resource_t *resource;
    mrp_resource_mask_t grant, advice;

    MRP_UNUSED(member);
    MRP_UNUSED(v);

    mrp_debug("> resource_set_get_resources");

    rset = (resource_set_lua_t *) data;

    if (!rset)
        return luaL_error(L, "internal error");

    grant = mrp_get_resource_set_grant(rset->resource_set);
    advice = mrp_get_resource_set_advice(rset->resource_set);

    lua_newtable(L);

    /* push all resource objects to a table and return it */

    while ((resource = mrp_resource_set_iterate_resources(rset->resource_set, &iter))) {
        const char *name = mrp_resource_get_name(resource);
        mrp_resource_mask_t mask = mrp_resource_get_mask(resource);

        /* fetch and update the resource object */

        resource_lua_t *res =
                (resource_lua_t *) mrp_htbl_lookup(rset->resources,
                (void *) name);

        if (!res) {
            mrp_log_error("resources out of sync: %s not found", name);
            continue;
        }

        /* mrp_lua_object_ref_value(res, L, 0); */

        res->acquired = !!(mask & grant);
        res->available = !!(mask & advice);

        /* TODO: update attributes */

        /* push the resource to the table */
        lua_pushstring(L, res->resource_name);
        mrp_lua_push_object(L, res);
        lua_settable(L, -3);
    }

    return 1;
}
Example #2
0
static void
show_view_simul_delete_resource_cb    (PlannerShowView   *view)
{
	GList *tasklist;
	MrpProject *project;

	MrpTask *randomtask;
	gchar *currenttaskname;
	gint delayedtime;
	gint chengeddurationtime;
	gchar *str1;
	gchar *str2;
	PlannerShowViewPriv *priv;
	srand((int) time(0));

	currenttasknumber++;
	priv = view->priv;
	tasklist = getSortedTaskListByView(view);
	//randomtask = getRandomTask(tasklist);
	//deleteRandomResourceFromTask(tasklist);
	randomtask = getRandomTask(tasklist);

	MrpResource *delresource = getDelRandomResourceFromTask(randomtask);

	gchar *s1 = mrp_task_get_name(randomtask);
	gchar *s2 = mrp_resource_get_name(delresource);
	g_printf("the random task is %s,the deleted resource is %s\n",s1,s2);

	MrpAssignment *assignment = mrp_task_get_assignment (randomtask,delresource);
	mrp_object_removed (MRP_OBJECT (assignment));


	if(gtk_toggle_button_get_active(priv->ganttcharttogglebutton)){

		firstduration = totalduration(project);

		priv->firsttotalduration = firstduration;
		gchar *str2 = planner_format_float(firstduration, 2, FALSE);
		gtk_entry_set_text(GTK_ENTRY (priv->currentdurationentry), str2);
	}

	//currenttask = g_list_nth_data(firsttasklist,currenttasknumber);
	//setDelayedDuration(currenttask);
/*
	currenttaskname = mrp_task_get_name(randomtask);
	gtk_entry_set_text (GTK_ENTRY (priv->currenttaskentry), currenttaskname);

	delayedtime = mrp_task_get_duration(randomtask)/(60*60*8*2);
	str1 = planner_format_float (delayedtime, 2, FALSE);
	gtk_entry_set_text (GTK_ENTRY (priv->currentdelayentry), str1);

	project = planner_window_get_project (PLANNER_VIEW (view)->main_window);
	chengeddurationtime = totalduration(project);
	str2 = planner_format_float (chengeddurationtime, 2, FALSE);
	gtk_entry_set_text (GTK_ENTRY (priv->lastdurationentry), str2);

	gchar *a = g_strconcat(s1,"'s",s2,"resource has been deleted!",NULL);
	gtk_button_set_label(priv->deleteresourcebutton, a);

//	can_go_to_next_task = FALSE;
	g_source_remove (timertag);*/
}
Example #3
0
static void
show_view_simul_task_delay_cb    (PlannerShowView   *view)
{
	GList *tasklist;
	MrpProject *project;
	gint probability;
	MrpTask *currenttask;
	gchar *currenttaskname;
	gint delayedtime;
	gint chengeddurationtime;
	gchar *str1;
	gchar *str2;
	PlannerShowViewPriv *priv;
	mrptime duration;
	mrptime delayedduration;
	currenttasknumber++;
	priv = view->priv;
//	tasklist = getSortedTaskListByView(view);
//	currenttask = g_list_nth_data(tasklist,currenttasknumber);
	currenttask = g_list_nth_data(firsttasklist,currenttasknumber);
	//setDelayedDuration(currenttask);
	probability = mrp_task_get_probability(currenttask);
	currenttaskname = mrp_task_get_name(currenttask);
	duration = mrp_task_get_duration(currenttask);
	g_printf("%s, %d",currenttaskname,probability);

	gtk_entry_set_text (GTK_ENTRY (priv->currenttaskentry), currenttaskname);

	project = planner_window_get_project (PLANNER_VIEW (view)->main_window);

//random task delay
	if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->randomtogglebutton))
			&& ((5 == currenttasknumber) || (1 == currenttasknumber)))
//		if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->randomtogglebutton))
//					&& (randomtasknumber == currenttasknumber) && (randomtasknumber+3 == currenttasknumber))

	{
		//srand((int) time(0));
		//MrpTask *randomtask = getRandomTask(firsttasklist);

		delayedduration = duration*1.5;
		g_object_set (currenttask, "sched",1,NULL);
		g_object_set (currenttask, "duration", delayedduration, NULL);

		gtk_widget_set_sensitive(priv->deleteresourcebutton, FALSE);
		gchar *a = g_strconcat(currenttaskname, "当前审计任务被随机设置延迟!", NULL );
		gtk_button_set_label(priv->deleteresourcebutton, a);
	}

	//manual set task delay
	GdkColor color1;
	if(probability)
	{
		if (probability >= 30 && probability <= 60) {
			color1.red = 50000;
			color1.green = 20000;
			color1.blue = 15000;
			gtk_widget_modify_bg(priv->deleteresourcebutton, GTK_STATE_INSENSITIVE,	&color1);
			gtk_widget_modify_fg(priv->currentdelayentry, GTK_STATE_NORMAL,	&color1);
			gtk_widget_set_sensitive(priv->deleteresourcebutton, FALSE);
			gchar *a = g_strconcat(currenttaskname, "当前审计任务被手动设置延迟!延迟小于60%", NULL );
			gtk_button_set_label(priv->deleteresourcebutton, a);
		}
		else{
			if (probability > 60) {
				color1.red = 55000;
				color1.green = 5000;
				color1.blue = 5000;
				gtk_widget_modify_bg(priv->deleteresourcebutton, GTK_STATE_INSENSITIVE, &color1);
				gtk_widget_modify_bg(priv->currentdelayentry, GTK_STATE_NORMAL, &color1);
				gtk_widget_set_sensitive(priv->deleteresourcebutton, FALSE);
				gchar *a = g_strconcat(currenttaskname, "当前审计任务被手动设置延迟!延迟大于60%",
						NULL );
				gtk_button_set_label(priv->deleteresourcebutton, a);
			}
			else{
				color1.red = 5000;
				color1.green = 35000;
				color1.blue = 55000;
				gtk_widget_modify_bg(priv->deleteresourcebutton,	GTK_STATE_INSENSITIVE, &color1);

				gtk_widget_set_sensitive(priv->deleteresourcebutton, FALSE);
				gchar *a = g_strconcat(currenttaskname, "当前审计任务被手动设置延迟!延迟小于30%",NULL );
				gtk_button_set_label(priv->deleteresourcebutton, a);
			}

		}

		delayedduration = duration*(probability*0.01+1);
		g_object_set (currenttask, "sched",1,NULL);
		g_object_set (currenttask, "duration", delayedduration, NULL);
	}

	//set task delayed time
		delayedtime =(delayedduration - duration) / (60 * 60 * 8);
		if(delayedtime >= 0){
		 str1 = planner_format_float(delayedtime, 2, FALSE);
		 gtk_entry_set_text(GTK_ENTRY (priv->currentdelayentry), str1);
		}
		else{
			str1 = planner_format_float(0, 2, FALSE);
			gtk_entry_set_text(GTK_ENTRY (priv->currentdelayentry), str1);
		}


	//delete resource
//	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->deleteresourcetogglebutton))
//			&& (randomresourcenumber == currenttasknumber))
	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->deleteresourcetogglebutton))
				&& (2 == currenttasknumber))
	{
		MrpResource *delresource = getDelRandomResourceFromTask(currenttask);

		gchar *s1 = mrp_task_get_name(currenttask);
		gchar *s2 = mrp_resource_get_name(delresource);
		g_printf("随机选取审计任务为 %s,退出该任务的审计人员为 %s\n", s1, s2);
		gtk_entry_set_text (GTK_ENTRY (priv->deleteresourceentry), s2);
		MrpAssignment *assignment = mrp_task_get_assignment(currenttask,delresource);
		mrp_object_removed(MRP_OBJECT (assignment));
		currenttaskname = mrp_task_get_name(currenttask);

		gtk_widget_set_sensitive(priv->deleteresourcebutton,FALSE);
		gchar *a = g_strconcat("审计任务",s1,"的",s2,"退出该任务执行!",NULL);
		gtk_button_set_label(priv->deleteresourcebutton, a);
	}


	//caculat the duration
	chengeddurationtime = totalduration(project);

	priv->lasttotalduration = chengeddurationtime;
	str2 = planner_format_float(chengeddurationtime, 2, FALSE);
	gtk_entry_set_text(GTK_ENTRY (priv->lastdurationentry), str2);
	displayTotalDuration(view);
	g_source_remove (timertag);
}