Newer
Older
Johannes Goderbauer
committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import("system.translate");
/**
* provides methods for interactions with keywords
*/
function KeywordUtils(){
/**
* returns the default case for keyword-arrays (id and translated name)
* @param {String} keywordType specifies the type of the keyword and therefore the list elements; e.g. "COUNTRY"
* @return {Array} a 2D array in form of [["id1", "name1"], ["idN", "nameN"]]
* @example
* var kwdUtils, items;
*
* kwdUtils = new KeywordUtils();
* items = kwdUtils.getStandardArray("ADDRESS.TYPE");
* result.object(items);
*/
this.getStandardArray = function(keywordType){
return this.createKeyword(keywordType).toArray(["id", "name"]);
}
/**
* returns a specific name (translated) - this is normally the view-value - of a given keyword;
* <br/>if the key could not be found an empty string "" is returned
* @param {String} keywordType specifies the type of the keyword and therefore the list elements; e.g. "COUNTRY"
* @param {String} key id value of the keyword where the view-value shall be searched
* @return {String} representation of the translated name of the keyword-key
* @example
* var kwdUtils, histMedium;
* histMedium = vars.get("$field.MEDIUM");
* if (histMedium){
* kwdUtils = new KeywordUtils();
* result.string(vars.get("$field.SUBJECT") + " (" + kwdUtils.getViewValue("HISTORY.MEDIUM", histMedium) + ")");
* }
*/
this.getViewValue = function(keywordType, key){
var k = this.createKeyword(keywordType);
return k.getPropForKey(key, "name") || "";
}
/**
* creates an object with methods for interacting with an specific keyword
* @param {String} keywordType specifies the type of the keyword and therefore the list elements; e.g. "COUNTRY"
* @return {Object} object with the following methods:
* <br/>- toArray
* <br/>- getPropForKey
* <br/>- getPropsForKey
*/
this.createKeyword = function(keywordType){//TODO: rename ot createKeywordObj?
var valueContainer, _toArrayFn, _getPropForKeyFn, _getPropsForKeyFn;
switch (keywordType){
case "RELATION.STATUS":
valueContainer = createKeywordEntriesContainer([
createKeywordEntry("0", translate.text("Inactive"))
,createKeywordEntry("1", translate.text("Active"))
,createKeywordEntry("2", translate.text("In review"))
]);
break;
case "COUNTRY":
valueContainer = createKeywordEntriesContainer([
createKeywordEntry("DE", translate.text("Germany"))
,createKeywordEntry("AT", translate.text("Austria"))
,createKeywordEntry("CH", translate.text("Switzerland"))
,createKeywordEntry("GB", translate.text("United Kingdom"))
,createKeywordEntry("NO", translate.text("Norway"))
]);
break;
case "LANGUAGE":
valueContainer = createKeywordEntriesContainer([
createKeywordEntry("de", translate.text("German"))
,createKeywordEntry("de-DE", translate.text("German (Germany)"))
,createKeywordEntry("de-AT", translate.text("German (Austria)"))
,createKeywordEntry("en", translate.text("English"))
,createKeywordEntry("en-GB", translate.text("English (United Kingdom)"))
,createKeywordEntry("no-NO", translate.text("Norwegian"))
]);
break;
case "HISTORY.DIRECTION":
valueContainer = createKeywordEntriesContainer([
createKeywordEntry("i", translate.text("Incoming"))
,createKeywordEntry("o", translate.text("Outgoing"))
]);
break;
case "HISTORY.MEDIUM":
valueContainer = createKeywordEntriesContainer([
createKeywordEntry("0", translate.text("Visit"))
,createKeywordEntry("1", translate.text("E-Mail"))
,createKeywordEntry("2", translate.text("Phone"))
,createKeywordEntry("3", translate.text("Internal"))
,createKeywordEntry("4", translate.text("Online-Meeting"))
]);
case "COMM.MEDIUM":
valueContainer = createKeywordEntriesContainer([
createKeywordEntry("0", translate.text("Mobile"), null, {category: "PHONE"})
,createKeywordEntry("1", translate.text("E-Mail"), null, {category: "EMAIL"})
,createKeywordEntry("2", translate.text("Phone"), null, {category: "PHONE"})
,createKeywordEntry("3", translate.text("Internet"), null, {category: "OTHER"})
]);
break;
case "ADDRESS.TYPE":
valueContainer = createKeywordEntriesContainer([
createKeywordEntry("1", translate.text("Office address"))
,createKeywordEntry("2", translate.text("Home address"))
,createKeywordEntry("3", translate.text("Delivery address"))
,createKeywordEntry("4", translate.text("Post office box"))
]);
break;
case "ORG.TYPE":
valueContainer = createKeywordEntriesContainer([
createKeywordEntry("0", translate.text("Customer"))
,createKeywordEntry("1", translate.text("Prospect"))
,createKeywordEntry("2", translate.text("Supplier"))
,createKeywordEntry("3", translate.text("Other"))
]);
break;
case "PERS.GENDER":
valueContainer = createKeywordEntriesContainer([
createKeywordEntry("f", translate.text("Female"))
,createKeywordEntry("m", translate.text("Male"))
,createKeywordEntry("o", translate.text("${GENDER_OTHER}"))
]);
break;
case "CONTRACT.CONTRACTTYPE":
valueContainer = createKeywordEntriesContainer([
createKeywordEntry("0", translate.text("Framework contract"))
,createKeywordEntry("1", translate.text("Service contract"))
,createKeywordEntry("2", translate.text("Maintenance contract"))
]);
break;
case "CONTRACT.CONTRACTSTATUS":
valueContainer = createKeywordEntriesContainer([
createKeywordEntry("0", translate.text("Valid, unlimited"))
,createKeywordEntry("1", translate.text("Valid, limited"))
,createKeywordEntry("2", translate.text("Not signed yet"))
,createKeywordEntry("3", translate.text("None, individual count"))
,createKeywordEntry("4", translate.text("Cancelled"))
]);
break;
case "CONTRACT.PAYMENT":
valueContainer = createKeywordEntriesContainer([
createKeywordEntry("0", translate.text("Annually"))
,createKeywordEntry("1", translate.text("Semiannually"))
,createKeywordEntry("2", translate.text("Quarterly"))
]);
break;
case "GROUPCODE":
valueContainer = createKeywordEntriesContainer([
createKeywordEntry("1", translate.text("Commodity group 1"))
,createKeywordEntry("2", translate.text("Commodity group 2"))
,createKeywordEntry("3", translate.text("Commodity group 3"))
,createKeywordEntry("4", translate.text("Discount"))
,createKeywordEntry("5", translate.text("Spare parts"))
,createKeywordEntry("6", translate.text("Service"))
]);
break;
case "UNIT":
valueContainer = createKeywordEntriesContainer([
createKeywordEntry("1", translate.text("Pieces"))
,createKeywordEntry("2", translate.text("Kgs"))
,createKeywordEntry("3", translate.text("Liter"))
,createKeywordEntry("4", translate.text("Hours"))
case "PRICELIST":
valueContainer = createKeywordEntriesContainer([
createKeywordEntry("1", translate.text("${PRICELIST_DEFAULT}"))
,createKeywordEntry("2", translate.text("Key account"))
,createKeywordEntry("3", translate.text("Special price list1"))
,createKeywordEntry("4", translate.text("${PRICELIST_SERVICE}"))
]);
break;
case "CURRENCY":
valueContainer = createKeywordEntriesContainer([
createKeywordEntry("1", translate.text("EUR"))
,createKeywordEntry("2", translate.text("USD"))
,createKeywordEntry("3", translate.text("CND"))
,createKeywordEntry("4", translate.text("CHF"))
]);
break;
case "STOCK.WAREHOUSE":
valueContainer = createKeywordEntriesContainer([
createKeywordEntry("1", translate.text("Warehouse 1"))
,createKeywordEntry("2", translate.text("Warehouse 2"))
,createKeywordEntry("3", translate.text("Warehouse 3"))
]);
break;
case "SALESPROJECT.STATUS":
valueContainer = createKeywordEntriesContainer([
createKeywordEntry("1", translate.text("Open"))
,createKeywordEntry("2", translate.text("Postponed"))
,createKeywordEntry("3", translate.text("Aborted"))
,createKeywordEntry("4", translate.text("Partial order"))
,createKeywordEntry("5", translate.text("Order"))
,createKeywordEntry("6", translate.text("Lost"))
]);
break;
case "SALESPROJECT.PHASE":
valueContainer = createKeywordEntriesContainer([
createKeywordEntry("1", translate.text("Project decision"))
,createKeywordEntry("2", translate.text("Negotiation"))
,createKeywordEntry("3", translate.text("Workshop"))
,createKeywordEntry("4", translate.text("Presentation postprocessing"))
,createKeywordEntry("5", translate.text("Presentation preparation"))
,createKeywordEntry("6", translate.text("Statement given"))
,createKeywordEntry("7", translate.text("Specifications in progress"))
,createKeywordEntry("8", translate.text("Waiting for request"))
,createKeywordEntry("9", translate.text("Lead"))
]);
break;
Johannes Goderbauer
committed
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
default:
throw new Error(translate.withArguments("[%0]the given keyword \"%1\" has no match with the possible keywordlist", [
arguments.callee.name, keywordType
]));
break;
}
_getPropForKeyFn = function(key, field, isCustom) {
var keyObject;
if (isCustom)
keyObject = valueContainer[key]["customProperties"];
else
keyObject = valueContainer[key];
if (keyObject == undefined)
return undefined;
return keyObject[field];
};
_getPropsForKeyFn = function(key, fields) {
var keyObject, i, l, currentRow, currentField;
keyObject = valueContainer[key];
if (keyObject == undefined)
return [];//TODO: throw error instead?
l = fields.length;
currentRow = [];
for (i = 0; i < l; i++){
currentField = fields[i];
//check if the passed fieldnames match the existing fieldnames (<=> properties in the object)
//to prevent errors and unexpected behaviour
if (keyObject[currentField])
currentRow.push(keyObject[currentField]);
else
currentRow.push("");
}
return currentRow;
};
_toArrayFn = function(fields){
var res, id, currentRow;
res = [];
if (!fields)
fields = ["id", "name"];
else if (typeof(fields) == "string"){
for (id in valueContainer){
res.push(_getPropForKeyFn(id, fields));
}
return res;
}
for (id in valueContainer){
currentRow = _getPropsForKeyFn(id, fields);
res.push(currentRow);
}
return res;
};
return {
/**
* toArray
*/
toArray: _toArrayFn
,getPropForKey: _getPropForKeyFn
,getPropsForKey: _getPropsForKeyFn
,filter: function (callbackFn, thisArg){
for (id in valueContainer){
if (false == callbackFn.call(thisArg, valueContainer[id].id, valueContainer[id].name, valueContainer[id].customProperties,
valueContainer[id], valueContainer)){
delete valueContainer[id];
}
}
return this;
}
};
};
/**
* internal function for creating an object that represents a keyword entry
* @param {String} id represents the key of an entry; a KeywordEntriesContainer can contain the same key only once
* @param {String} name represents the translated name of an entry; this is in most cases the view-value
* @param {String} [description=""] description text for describing the keyword
* @param {Object} [customProperties=null] an Object with additional properties; these can be virtually anything
* @return {Object} object that represents a single keyword entry; normally severel entries are cumulated in a "keywordEntriesContainer"
*/
function createKeywordEntry(id, name, description, customProperties){
//TODO: verify if mandatory-checks are really that usefull or can at least be made easier
if (!id)
throw new Error(translate.withArguments("the param \"%0\" in \"%1\" is mandatory and has to be set", [
"id", arguments.callee.name
]));
if (!name)
throw new Error(translate.withArguments("the param \"%0\" in \"%1\" is mandatory and has to be set", [
"name", arguments.callee.name
]));
return {
id: id
,name: name
,description: description || ""
,customProperties: customProperties
};
}
/**
* internal function for creating an object that represents a container of several keywordEntries
* @param {Array} keywordEntries an Array of keywordEntry-objects (as they are created by "createKeywordEntry"
* @return {Object} object that contains several keywordEntries
*/
function createKeywordEntriesContainer(keywordEntries){
var res, i, l, id;
res = {};
for (i = 0, l = keywordEntries.length; i < l; i++){
id = keywordEntries[i].id;
if (res[id] != undefined){
throw new Error("the given id is not unique since it already exists");
}
res[id] = keywordEntries[i];
}
return res;
}