Commit 9bcf9aac authored by Project Open's avatar Project Open

- Fixed issues after copy-paste-modify

- Implemented parsing of roles instead of percentages
parent efef7100
......@@ -18,7 +18,7 @@ Ext.define('PO.view.field.POObjectMembers', {
requires: ['Ext.grid.Panel'],
alias: 'widget.poobjectmembers',
debug: true,
debug: false,
memberStore: null, // Config: Store with users as candidates for members
groupStore: null,
......@@ -37,13 +37,12 @@ Ext.define('PO.view.field.POObjectMembers', {
var names = value.split(";");
for(var i = 0; i < names.length; i++) {
var name = names[i]; // BB[20%]
var memberObject = this.parseMembers(me, name);
var memberObject = this.parseMember(me, name);
if (!Ext.isString(memberObject) && null != memberObject) {
result.push(memberObject);
}
}
// if (0 == result.length) return null;
if (me.debug) console.log('POObjectMembers.parseMembers: Finished');
return result;
},
......@@ -52,8 +51,8 @@ Ext.define('PO.view.field.POObjectMembers', {
* Returns a member object if it can successfully parse a value like "BB[PM]".
* Returns a string with an error message if it can't parse the value.
*/
parseMembers: function(me, value) {
if (me.debug) console.log('POObjectMembers.parseMembers: Starting: value='+value);
parseMember: function(me, value) {
if (me.debug) console.log('POObjectMember.parseMembers: Starting: value='+value);
if (!Ext.isString(value)) {
return "Value='"+value+"' is not a string but a "+typeof value;
......@@ -64,16 +63,16 @@ Ext.define('PO.view.field.POObjectMembers', {
return "Value='"+value+"' should contain of at least two characters";
}
var initials = "";
var percentString = value;
var roleString = value;
// Split the value into the "initials" part possibly including
// numbers and the remaining part hopefully containing "[80%]"
while (/^[a-zA-Z0-9]/.test(percentString.substr(0,1))) {
while (/^[a-zA-Z0-9]/.test(roleString.substr(0,1))) {
initials = initials + value.substr(0,1);
percentString = percentString.substring(1,value.length);
roleString = roleString.substring(1,value.length);
}
var percent = this.parseMembersPercent(me, percentString.trim()); // Number indicating percent or an error
if (Ext.isString(percent)) { return percent; } // Return an error string
var role = this.parseMembersRole(me, roleString.trim()); // FullMember = 1300
if (Ext.isString(role)) { return role; } // Return an error string
// ToDo: Sort the user store alphabetically in order to create
// deterministic results
......@@ -92,10 +91,10 @@ Ext.define('PO.view.field.POObjectMembers', {
if (letters[0] == firstNamesInitial && letters[1] == lastNameInitial) { found = true; }
if (found) {
// {id:123456, user_id:8864, percent:0.0}
// {id:123456, user_id:8864, role:1300}
var user_id = parseInt(user.get('user_id'));
var rel_id = Math.floor((Math.random() * 10000000000000.0));
result = [{id:rel_id, user_id:user_id, percent:percent}];
result = {id:rel_id, user_id:user_id, role:role};
}
});
......@@ -106,40 +105,41 @@ Ext.define('PO.view.field.POObjectMembers', {
return result;
},
/**
* Parse a string like "[80%]" into the number 80.
* Returns 100 for an empty or invalid string.
* Parse a string like "[M]" into the number 1310 (=Budget Item Manager)
* Returns 1300 (=Full Member) for an empty string or a string object
* with an error message in case of an error.
*/
parseMembersPercent: function(me, percentString) {
if (me.debug) console.log('POObjectMembers.parseMembersPercent: Starting: str='+percentString);
if (!Ext.isString(percentString) || 0 == percentString.length) { return 100.0; }
parseMembersRole: function(me, roleString) {
if (me.debug) console.log('POObjectMembers.parseMembersRole: Starting: str='+roleString);
if (!Ext.isString(roleString) || 0 == roleString.length) { return 1300; }
var str = percentString;
var str = roleString;
if (!/^\[.+\]$/.test(str)) {
return "Percent specification '"+str+"' does not consist of a brackets enclosing a number.";
return "Role specification '"+str+"' does not consist of a brackets enclosing a character.";
}
var str = str.substr(1,str.length - 2);
if (!/^[0-9\.]+%$/.test(str)) {
return "Percent specification '"+str+"' does not include in it's brackets a number followed by '%'.";
if (!/^[a-zA-Z]$/.test(str)) {
return "Role specification '"+str+"' does not include in it's brackets a single letter.";
}
var str = str.substr(0,str.length - 1);
var number = parseFloat(str);
if (NaN == number) {
return "Percent specification '"+str+"' does not include a valid number between it's brackets.";
}
return number;
switch (str.toLowerCase()) {
case "m": role = 1310; break;
default: role = 1300; break
}
if (me.debug) console.log('POObjectMembers.parseMembersRole: Finished: str='+roleString+' -> '+role);
return role;
},
/**
* Format membership list to a String
*/
formatMembers: function(me, memberExpr) {
if (me.debug) console.log('POObjectMembers.formatMembers: Starting: memberExpr='+memberExpr);
if (me.debug) console.log(me);
if (me.debug) console.log(memberExpr);
if (Ext.isString(memberExpr)) { return memberExpr; }
var projectMemberStore = me.memberStore;
var groupStore = me.groupStore;
......@@ -161,8 +161,13 @@ Ext.define('PO.view.field.POObjectMembers', {
result = result + groupModel.get('group_name');
}
}
if (100 != member.percent) {
result = result + '['+member.percent+'%]';
if (!!member.role && 1300 != member.role) {
var roleString = ""
switch (member.role) {
case 1310: roleString = "M"; break;
default: roleString = "#"+member.role;
}
result = result + '['+roleString+']';
}
});
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment