-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathmonthly-os-project.js
More file actions
98 lines (90 loc) · 2.68 KB
/
monthly-os-project.js
File metadata and controls
98 lines (90 loc) · 2.68 KB
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
import DefineMap from "can-define/map/";
import DefineList from "can-define/list/";
import Observation from "can-observation";
import ContributionMonth from "./contribution-month";
import OSProject from "../os-project";
const MonthlyOSProject = DefineMap.extend("MonthlyOSProject", { seal: false }, {
_id: {type: "string"},
significance: "number",
commissioned: "boolean",
osProjectRef: OSProject.Ref,
contributionMonth: {
type: (data) => {
if(!data) {
return data;
}
let Constructor = ContributionMonth;
if (Constructor.default) {
Constructor = Constructor.default;
}
if (data instanceof Constructor) {
return data;
}
return new Constructor(data);
},
serialize: false
},
getTotal() {
// should this implementation be hidden and moved to contributionMonth: `contributionMonth.getOSProjectTotal( this )`?
let calculations = this.contributionMonth &&
this.contributionMonth.calculations;
return calculations && calculations.osProjects[this.osProjectRef._id] || 0.0;
},
remove() {
this.contributionMonth.removeMonthlyOSProject( this );
}
});
MonthlyOSProject.List = DefineList.extend("MonthlyOSProjectList", {
"#": {
Type: MonthlyOSProject,
added( items ) {
this.contributionMonth && items.forEach( monthlyOSProject => {
monthlyOSProject.contributionMonth = this.contributionMonth;
} );
return items;
},
removed( items ) {
items.forEach( monthlyOSProject => {
monthlyOSProject.contributionMonth = null;
} );
return items;
}
},
contributionMonth: {
set( contributionMonth ) {
this.forEach( monthlyOSProject => {
monthlyOSProject.contributionMonth = contributionMonth;
});
return contributionMonth;
},
type: (data) => {
let Constructor = ContributionMonth;
if (Constructor.default) {
Constructor = Constructor.default;
}
if (data instanceof Constructor) {
return data;
}
return new Constructor(data);
},
serialize: false
},
has( osProject ){
return osProject._id in this.monthlyOSProjectIdMap;
},
getSignificance( osProjectRef ) {
const monthlyOSProject = this.monthlyOSProjectIdMap[osProjectRef._id];
return monthlyOSProject ? monthlyOSProject.significance : false;
},
get monthlyOSProjectIdMap() {
const map = {};
this.forEach( monthlyOSProject => {
map[monthlyOSProject.osProjectRef._id] = monthlyOSProject;
});
return map;
},
get commissioned() {
return this.filter({ commissioned: true });
}
});
export default MonthlyOSProject;