Beispiel #1
0
static void
eds_ok_button_clicked (GtkButton     *button,
		       PlannerPlugin *plugin)
{
	GtkTreeIter        iter;
	PlannerPluginPriv *priv = plugin->priv;
	GList             *resources_orig;

	/* We are going to modify the resources. Work with a copy */
	resources_orig = mrp_project_get_resources (plugin->priv->project);

	if (!priv->resources_model) {
		eds_dialog_close (plugin);
		return;
	}

	gtk_tree_model_get_iter_first (priv->resources_model, &iter);

	if (!gtk_list_store_iter_is_valid (GTK_LIST_STORE (priv->resources_model),
					   &iter)) {
		eds_dialog_close (plugin);
		return;
	}

	/* Custom property for e-d-s resource UID */
	if (!mrp_project_has_property (plugin->priv->project,
				       MRP_TYPE_RESOURCE, "eds-uid")) {
		eds_create_uid_property (plugin);
	}

	do {
		EContact *contact;
		gboolean  selected;

		gtk_tree_model_get (priv->resources_model, &iter,
				    COL_RESOURCE_SELECTED, &selected,
				    COL_RESOURCE_OBJECT, &contact,
				    -1);

		if (selected) {
			gchar *name = e_contact_get (contact, E_CONTACT_FULL_NAME);
			gchar *email = e_contact_get (contact, E_CONTACT_EMAIL_1);
			gchar *eds_uid = e_contact_get (contact, E_CONTACT_UID);
			eds_import_resource (name, email, eds_uid, plugin, resources_orig);
			g_free (name);
			g_free (email);
			g_free (eds_uid);
		}
	} while (gtk_tree_model_iter_next (priv->resources_model, &iter));

	eds_dialog_close (plugin);
}
static gboolean
property_cmd_remove_do (PlannerCmd *cmd_base)
{
	PropertyCmdRemove *cmd;

	cmd = (PropertyCmdRemove*) cmd_base;

	if (!mrp_project_has_property (cmd->project, cmd->owner, cmd->name)) {
		return FALSE;
	}

	/* First we need to save the value of the property */
	if (cmd->owner == MRP_TYPE_TASK && g_hash_table_size (cmd->tasks) == 0) {
		GList *l, *tasks = mrp_project_get_all_tasks (cmd->project);

		/* ref tasks */
		for (l = tasks; l; l = l->next) {
			GValue *value = g_new0 (GValue, 1);
			g_value_init (value, G_PARAM_SPEC_VALUE_TYPE (cmd->property));
			mrp_object_get_property (l->data, cmd->property, value);
			g_hash_table_insert (cmd->tasks, g_object_ref (l->data), value);
		}

	}
	else if (cmd->owner == MRP_TYPE_RESOURCE && g_hash_table_size (cmd->resources) == 0) {
		GList *l, *resources = mrp_project_get_resources (cmd->project);

		for (l = resources; l; l = l->next) {
			GValue *value = g_new0 (GValue, 1);
			g_value_init (value, G_PARAM_SPEC_VALUE_TYPE (cmd->property));
			mrp_object_get_property (l->data, cmd->property, value);
			g_hash_table_insert (cmd->resources, g_object_ref (l->data), value);
		}

	}

	mrp_project_remove_property (cmd->project,
				     cmd->owner,
				     cmd->name);

	return TRUE;
}
Beispiel #3
0
static gboolean
mpp_write_project (MrpParser *parser)
{
	xmlNodePtr   node, child, calendars_node;
	GList       *list, *l;
	GList       *assignments = NULL;
	MrpGroup    *default_group = NULL;
	NodeEntry   *entry;
	MrpCalendar *root_calendar;

	node = xmlNewDocNode (parser->doc, NULL, "project", NULL);
	parser->doc->xmlRootNode = node;

	mpp_write_property_specs (parser, node);
	mpp_write_custom_properties (parser, node, MRP_OBJECT (parser->project));

	mpp_write_phases (parser, node);

	/* Write calendars */
	calendars_node = xmlNewChild (node, NULL, "calendars", NULL);
	child = xmlNewChild (calendars_node, NULL, "day-types", NULL);

	mpp_write_day (parser, child, mrp_day_get_work ());
	mpp_write_day (parser, child, mrp_day_get_nonwork ());
	mpp_write_day (parser, child, mrp_day_get_use_base ());

	for (l = mrp_day_get_all (parser->project); l; l = l->next) {
		mpp_write_day (parser, child, MRP_DAY (l->data));
	}

	/* Get the calendars */
	root_calendar = mrp_project_get_root_calendar (parser->project);

	for (l = mrp_calendar_get_children (root_calendar); l; l = l->next) {
		mpp_write_calendar (parser, calendars_node, l->data);
	}

	/* Write project properties now that we have the calendar id. */
	mpp_write_project_properties (parser, node);

	/* Write tasks. */
 	child = xmlNewChild (node, NULL, "tasks",NULL);

	entry = g_new0 (NodeEntry, 1);
	entry->id = 0;
	entry->node = child;

	g_hash_table_insert (parser->task_hash, parser->root_task, entry);

	/* Generate IDs and hash table. */
	parser->last_id = 1;
	mrp_project_task_traverse (parser->project,
				   parser->root_task,
				   (MrpTaskTraverseFunc) mpp_hash_insert_task_cb,
				   parser);

	mrp_project_task_traverse (parser->project,
				   parser->root_task,
				   (MrpTaskTraverseFunc) mpp_write_task_cb,
				   parser);

	/* Write resource groups. */
 	child = xmlNewChild (node, NULL, "resource-groups",NULL);
	list = mrp_project_get_groups (parser->project);

	/* Generate IDs and hash table. */
	parser->last_id = 1;
	for (l = list; l; l = l->next) {
		mpp_hash_insert_group (parser, l->data);
	}

	g_object_get (parser->project, "default-group", &default_group, NULL);

	if (default_group) {
		entry = g_hash_table_lookup (parser->group_hash,
					     default_group);
		mpp_xml_set_int (child, "default_group", entry->id);
	}

	for (l = list; l; l = l->next) {
		mpp_write_group (parser, child, l->data);
	}

	/* Write resources. */
 	child = xmlNewChild (node, NULL, "resources",NULL);
	list = mrp_project_get_resources (parser->project);

	/* Generate IDs and hash table. */
	parser->last_id = 1;
	for (l = list; l; l = l->next) {
		GList *r_list;
		mpp_hash_insert_resource (parser, l->data);
		r_list = mrp_resource_get_assignments (MRP_RESOURCE (l->data));
		assignments = g_list_concat (assignments,
					     g_list_copy (r_list));
	}

	for (l = list; l; l = l->next) {
		mpp_write_resource (parser, child, l->data);
	}

	/* Write assignments. */
 	child = xmlNewChild (node, NULL, "allocations", NULL);

	for (l = assignments; l; l = l->next) {
		mpp_write_assignment (parser, child, l->data);
	}
	g_list_free (assignments);

	return TRUE;
}