setting up units in an assignement

Xavier Ordoquy <[email protected]> 17 Dec 2002 23:29:22 +0100
Newsgroups gmane.comp.gnome.apps.mr-project.devel
Organization Gnome
Message-ID <1040164162.8615.4.camel@debian>
Hi

You'll find in the attached files the patches against cvs head for being
able to use the units.

Richard, tell me what you think it needs more work.

Regards.

-- 
Xavier Ordoquy <[email protected]>
Chef de projet Sesam-Vitale, Meditrans
Membre de la Gnome Foundation
libmrp.diff (text/plain, 3.8 KB)
? libmrp.diff
? stamp-h1
Index: file-modules/xml/mrp-old-xml.c
===================================================================
RCS file: /cvs/gnome/libmrproject/file-modules/xml/mrp-old-xml.c,v
retrieving revision 1.5
diff -u -r1.5 mrp-old-xml.c
--- file-modules/xml/mrp-old-xml.c	16 Dec 2002 23:20:35 -0000	1.5
+++ file-modules/xml/mrp-old-xml.c	17 Dec 2002 21:33:47 -0000
@@ -408,7 +408,7 @@
 static void
 old_xml_read_assignment (MrpParser *parser, xmlNodePtr tree)
 {
-	gint   task_id, resource_id;
+	gint   task_id, resource_id, assigned_units;
 	MrpAssignment *assignment;
 	MrpTask       *task;
 	MrpResource   *resource;
@@ -420,6 +420,7 @@
 
 	task_id = old_xml_get_int (tree, "task-id");
 	resource_id = old_xml_get_int (tree, "resource-id");
+	assigned_units = old_xml_get_int_with_default (tree, "units",100);
 	
 	task = g_hash_table_lookup (parser->task_hash, 
 				    GINT_TO_POINTER (task_id));
@@ -437,6 +438,7 @@
 	assignment = g_object_new (MRP_TYPE_ASSIGNMENT,
 				   "task", task,
 				   "resource", resource,
+				   "units", assigned_units,
 				   NULL);
 
 	parser->assignments = g_list_prepend (parser->assignments, assignment);
Index: file-modules/xml/mrproject-0.6.dtd
===================================================================
RCS file: /cvs/gnome/libmrproject/file-modules/xml/mrproject-0.6.dtd,v
retrieving revision 1.7
diff -u -r1.7 mrproject-0.6.dtd
--- file-modules/xml/mrproject-0.6.dtd	16 Dec 2002 23:20:35 -0000	1.7
+++ file-modules/xml/mrproject-0.6.dtd	17 Dec 2002 21:33:47 -0000
@@ -86,7 +86,8 @@
 
 <!ELEMENT allocation EMPTY>
 <!ATTLIST allocation task-id          CDATA #REQUIRED
-                     resource-id      CDATA #REQUIRED>
+                     resource-id      CDATA #REQUIRED
+                     units            CDATA #IMPLIED>
 
 <!ELEMENT calendars (day-types,calendar*)>
 
@@ -122,5 +123,4 @@
 <!ATTLIST day date                    CDATA #REQUIRED
               type                    CDATA #REQUIRED
               id                      CDATA #IMPLIED>
-
 
Index: storage-modules/mrproject-1/mrp-parser.c
===================================================================
RCS file: /cvs/gnome/libmrproject/storage-modules/mrproject-1/mrp-parser.c,v
retrieving revision 1.67
diff -u -r1.67 mrp-parser.c
--- storage-modules/mrproject-1/mrp-parser.c	16 Dec 2002 23:20:37 -0000	1.67
+++ storage-modules/mrproject-1/mrp-parser.c	17 Dec 2002 21:33:48 -0000
@@ -444,7 +444,7 @@
 static void
 mpp_read_assignment (MrpParser *parser, xmlNodePtr tree)
 {
-	gint   task_id, resource_id;
+	gint   task_id, resource_id, assigned_units;
 	MrpAssignment *assignment;
 	MrpTask       *task;
 	MrpResource   *resource;
@@ -456,7 +456,8 @@
 
 	task_id = mpp_xml_get_int (tree, "task-id");
 	resource_id = mpp_xml_get_int (tree, "resource-id");
-	
+	assigned_units = mpp_xml_get_int_with_default (tree, "units",100);
+
 	task = g_hash_table_lookup (parser->task_hash, 
 				    GINT_TO_POINTER (task_id));
 	resource = g_hash_table_lookup (parser->resource_hash,
@@ -473,6 +474,7 @@
 	assignment = g_object_new (MRP_TYPE_ASSIGNMENT,
 				   "task", task,
 				   "resource", resource,
+				   "units", assigned_units,
 				   NULL);
 
 	parser->assignments = g_list_prepend (parser->assignments, assignment);
@@ -1290,6 +1292,7 @@
 	MrpResource *resource;
 	NodeEntry   *resource_entry;
 	NodeEntry   *task_entry;
+	gint         assigned_units;
 
 	g_return_if_fail (MRP_IS_ASSIGNMENT (assignment));
 
@@ -1301,6 +1304,7 @@
 	g_object_get (G_OBJECT (assignment),
 		      "task", &task,
 		      "resource", &resource,
+		      "units", &assigned_units,
 		      NULL);
 
 	task_entry = g_hash_table_lookup (parser->task_hash, task);
@@ -1308,6 +1312,7 @@
 
 	mpp_xml_set_int (node, "task-id", task_entry->id);
 	mpp_xml_set_int (node, "resource-id", resource_entry->id);
+	mpp_xml_set_int (node, "units", assigned_units);
 }
 
 static void
mrp.diff (text/plain, 6.2 KB)
? log
? mrp.diff
Index: src/dialogs/task-dialog/mg-assignment-model.c
===================================================================
RCS file: /cvs/gnome/mrproject/src/dialogs/task-dialog/mg-assignment-model.c,v
retrieving revision 1.8
diff -u -r1.8 mg-assignment-model.c
--- src/dialogs/task-dialog/mg-assignment-model.c	8 Jul 2002 21:22:11 -0000	1.8
+++ src/dialogs/task-dialog/mg-assignment-model.c	17 Dec 2002 21:35:03 -0000
@@ -23,6 +23,8 @@
 #include <config.h>
 #include <gtk/gtktreemodel.h>
 #include <libgnome/gnome-i18n.h>
+#include <mrproject/mrp-assignment.h>
+#include <mrproject/mrp-resource.h>
 #include "mg-assignment-model.h"
 
 struct _MgAssignmentModelPriv {
@@ -159,6 +161,8 @@
                 return G_TYPE_FLOAT;
 	case RESOURCE_ASSIGNMENT_COL_ASSIGNED:
 		return G_TYPE_BOOLEAN;
+	case RESOURCE_ASSIGNMENT_COL_ASSIGNED_UNITS:
+		return G_TYPE_INT;
         default:
 		return G_TYPE_INVALID;
         }
@@ -171,6 +175,7 @@
                GValue       *value)
 {	
 	MgAssignmentModel *model;
+	MrpAssignment     *assignment;
 	MrpResource       *resource;
         gchar             *str;
         gint               units;
@@ -216,9 +221,12 @@
 		}
 		break;
 	case RESOURCE_ASSIGNMENT_COL_ASSIGNED_UNITS:
-		/* FIXME: Set correct value here */
 		g_value_init (value, G_TYPE_INT);
-		g_value_set_int (value, 100);
+		if ((assignment = mrp_task_get_assignment (model->priv->task, resource))) {
+			g_value_set_int (value, mrp_assignment_get_units(assignment));
+		} else {
+			g_value_set_int (value, 0);
+		}
 		break;
         default:
                 g_warning ("Bad column %d requested", column);
Index: src/dialogs/task-dialog/mg-task-dialog.c
===================================================================
RCS file: /cvs/gnome/mrproject/src/dialogs/task-dialog/mg-task-dialog.c,v
retrieving revision 1.45
diff -u -r1.45 mg-task-dialog.c
--- src/dialogs/task-dialog/mg-task-dialog.c	15 Dec 2002 00:03:29 -0000	1.45
+++ src/dialogs/task-dialog/mg-task-dialog.c	17 Dec 2002 21:35:05 -0000
@@ -87,6 +87,10 @@
 						     DialogData          *data);
 static void  task_dialog_setup_resource_list        (DialogData          *data); 
 static void  task_dialog_connect_to_task            (DialogData          *data);
+static void  task_dialog_resource_units_cell_edited (GtkCellRendererText *cell, 
+						     gchar               *path_str,
+						     gchar               *new_text, 
+						     DialogData          *data);
 static void  task_dialog_pred_cell_edited           (GtkCellRendererText  *cell,
 						     gchar                *path_str,
 						     gchar                *new_text,
@@ -670,6 +674,39 @@
 }
 
 static void  
+task_dialog_resource_units_cell_edited (GtkCellRendererText *cell, 
+					gchar               *path_str,
+					gchar               *new_text, 
+					DialogData          *data)
+{
+	GtkTreeView  *tree;
+	GtkTreeModel *model;
+	GtkTreePath  *path;
+	GtkTreeIter   iter;
+	MrpResource  *resource;
+	MrpAssignment *assignment;
+
+	tree = GTK_TREE_VIEW (data->resource_list);
+	
+	model = gtk_tree_view_get_model (tree);
+
+	path = gtk_tree_path_new_from_string (path_str);
+	
+	gtk_tree_model_get_iter (model, &iter, path);
+
+	gtk_tree_path_free (path);
+
+	resource = MRP_RESOURCE (((GList *)iter.user_data)->data);
+
+		
+	assignment = mrp_task_get_assignment (data->task, resource);
+
+	if (assignment) {
+		g_object_set(G_OBJECT(assignment),"units",atoi(new_text),NULL);
+	}
+}
+
+static void  
 task_dialog_pred_cell_edited (GtkCellRendererText *cell, 
 			      gchar               *path_str,
 			      gchar               *new_text, 
@@ -1080,6 +1117,23 @@
 							NULL);
 
 	gtk_tree_view_column_set_resizable (col, TRUE);
+	gtk_tree_view_append_column (tree, col);
+
+	/* Assigned rate */
+	cell = gtk_cell_renderer_text_new ();
+	g_object_set (cell, "editable", TRUE, NULL);
+
+	g_signal_connect (cell,
+			  "edited",
+			  G_CALLBACK (task_dialog_resource_units_cell_edited),
+			  data);
+	
+	col = gtk_tree_view_column_new_with_attributes (_("Rate"),
+							cell,
+							"text", RESOURCE_ASSIGNMENT_COL_ASSIGNED_UNITS,
+							NULL);
+	gtk_tree_view_column_set_resizable (col, TRUE);
+	gtk_tree_view_column_set_min_width (col, 50);
 	gtk_tree_view_append_column (tree, col);
 
 	model = GTK_TREE_MODEL (mg_assignment_model_new (data->task));
Index: src/views/gantt/mg-gantt-row.c
===================================================================
RCS file: /cvs/gnome/mrproject/src/views/gantt/mg-gantt-row.c,v
retrieving revision 1.73
diff -u -r1.73 mg-gantt-row.c
--- src/views/gantt/mg-gantt-row.c	17 Dec 2002 09:37:04 -0000	1.73
+++ src/views/gantt/mg-gantt-row.c	17 Dec 2002 21:35:06 -0000
@@ -23,6 +23,7 @@
 #include <config.h>
 #include <math.h>
 #include <string.h>
+#include <stdio.h>
 #include <mrproject/mrp-project.h>
 #include <mrproject/mrp-resource.h>
 #include <mrproject/mrp-task.h>
@@ -597,12 +598,15 @@
 gantt_row_update_resources (MgGanttRow *row)
 {
 	MgGanttRowPriv *priv;
-	GList          *resources, *l;
+	GList          *l;
+	GList          *assignments;
+	MrpAssignment  *assignment;
 	MrpResource    *resource;
 	gchar          *name, *tmp_str;
 	gchar          *text = NULL;
 	PangoRectangle  rect;
 	gint            spacing, x;
+	gchar           value[256];
 
 	priv = row->priv;
 	
@@ -614,10 +618,11 @@
 	spacing = rect.width / PANGO_SCALE;
 	
 	x = 0;
-	resources = mrp_task_get_assigned_resources (priv->task);
+	assignments = mrp_task_get_assignments (priv->task);
 		
-	for (l = resources; l; l = l->next) {
-		resource = MRP_RESOURCE (l->data);
+	for (l = assignments; l; l = l->next) {
+		assignment = MRP_ASSIGNMENT(l->data);
+		resource = mrp_assignment_get_resource(assignment);
 		
 		g_object_get (resource, "name", &name, NULL);
 
@@ -631,21 +636,22 @@
 		x += spacing;
 			
 		if (text == NULL) { /* First resource */
-			text = g_strdup (name);
+			sprintf(value,"(%i)",mrp_assignment_get_units(assignment));
+			text = g_strconcat (name, value, NULL);
 			g_free (name);
 
 			continue;
 		}
-		
-		tmp_str = g_strconcat (text, ", ", name, NULL);
+		sprintf(value,"(%i)",mrp_assignment_get_units(assignment));
+		tmp_str = g_strconcat (text, ", ", name, value, NULL);
 		
 		g_free (text);
 		g_free (name);
 		text = tmp_str;
 	}
 
-	if (resources) {
-		g_list_free (resources);
+	if (assignments) {
+		g_list_free (assignments);
 	}
 	
 	if (text == NULL) {