Skip to content

Commit f97e956

Browse files
committed
Merge branch 'effectivity-preview' into dev
2 parents 1906750 + 7680ab6 commit f97e956

File tree

7 files changed

+136
-36
lines changed

7 files changed

+136
-36
lines changed

app/js/common-objects/models/product_instance_iteration.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,12 @@ define(['backbone'
5151
return this.get('configurationItemId');
5252
},
5353
getBasedOnName: function () {
54-
return this.get('basedOn').name;
54+
var basedOn = this.get('basedOn');
55+
return basedOn ? basedOn.name : undefined;
5556
},
5657
getBasedOnId: function () {
57-
return this.get('basedOn').id;
58+
var basedOn = this.get('basedOn');
59+
return basedOn ? basedOn.id : undefined;
5860
},
5961
getUpdateAuthor: function () {
6062
return this.get('updateAuthor');

app/js/localization/nls/common.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ define({
206206
EDIT_REQUEST: 'Edit the request',
207207
EDITION_ERROR: 'An error occurred while editing',
208208
EFFECTIVITY: 'Effectivity',
209+
EFFECTIVITY_BASED: 'Effectivity based',
209210
EFFECTIVITY_DATE: 'Date',
210211
EFFECTIVITY_DESCRIPTION: 'Effectivity description',
211212
EFFECTIVITY_END_DATE: 'End date',

app/js/localization/nls/fr/common.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ define({
205205
EDIT_REQUEST: 'Editer la demande de modification',
206206
EDITION_ERROR: 'Une erreur est survenue pendant l\'édition',
207207
EFFECTIVITY: 'Effectivité',
208+
EFFECTIVITY_BASED: 'Basé sur une effectivité',
208209
EFFECTIVITY_DATE: 'Date',
209210
EFFECTIVITY_DESCRIPTION: 'Description de l\'effectivité',
210211
EFFECTIVITY_END_DATE: 'Date de fin',

app/product-management/js/templates/product-instances/product_instance_modal.html

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,20 +26,24 @@ <h3><span class="icon"></span>
2626
<input type="text" id="inputSerialNUmber" value=" {{model.getSerialNumber}}"
2727
disabled="disabled"/>
2828
</div>
29-
</div>
29+
</div>
3030
<div class="control-group">
31-
<label class="control-label" for="inputConfigurationItemId">{{i18n.PRODUCT}}</label>
32-
<div class="controls">
33-
<input type="text" id="inputConfigurationItemId" value="{{model.getConfigurationItemId}}"
34-
disabled="disabled"/>
35-
</div>
31+
<label class="control-label" for="inputConfigurationItemId">{{i18n.PRODUCT}}</label>
32+
<div class="controls">
33+
<input type="text" id="inputConfigurationItemId" value="{{model.getConfigurationItemId}}"
34+
disabled="disabled"/>
35+
</div>
3636
</div>
3737
<div class="control-group">
38-
<label class="control-label" for="inputBaselineId">{{i18n.BASED_ON}}</label>
39-
<div class="controls">
40-
<input type="text" id="inputBaselineId" value="{{model.getBasedOnName}}"
41-
disabled="disabled"/>
42-
</div>
38+
<label class="control-label" for="inputBaselineId">{{i18n.BASED_ON}}</label>
39+
<div class="controls" show-mode="BASED_ON">
40+
<input type="text" id="inputBaselineId" value="{{model.getBasedOnName}}"
41+
disabled="disabled"/>
42+
</div>
43+
<div class="controls" show-mode="EFFECTIVITY">
44+
<input type="text" value="{{i18n.EFFECTIVITY_BASED}}"
45+
disabled="disabled"/>
46+
</div>
4347
</div>
4448
<div class="control-group">
4549
<label class="control-label">{{i18n.CREATION_DATE}}</label>
@@ -51,19 +55,22 @@ <h3><span class="icon"></span>
5155

5256
<div class="tab-pane" id="tab-products-instances-choices">
5357
<div class="choices-list">
54-
<p><i class="fa fa-check"></i> {{i18n.CHOSEN_SUBSTITUTES}} : <span class="substitutes-count"></span></p>
58+
<p><i class="fa fa-check"></i> {{i18n.CHOSEN_SUBSTITUTES}} : <span
59+
class="substitutes-count"></span></p>
5560
<div class="substitutes-list choices"></div>
56-
<p><i class="fa fa-check"></i> {{i18n.CHOSEN_OPTIONALS}} : <span class="optionals-count"></span></p>
61+
<p><i class="fa fa-check"></i> {{i18n.CHOSEN_OPTIONALS}} : <span class="optionals-count"></span>
62+
</p>
5763
<div class="optionals-list choices"></div>
5864
</div>
5965
</div>
6066

61-
<div id="tab-products-instances-iteration" class="tab-pane iteration iteration-edit" >
67+
<div id="tab-products-instances-iteration" class="tab-pane iteration iteration-edit">
6268
<div class="control-group">
6369
<label class="control-label" for="inputIterationNote">{{i18n.REVISION_NOTE}}</label>
6470

6571
<div class="controls">
66-
<input type="text" id="inputIterationNote" value="{{model.getIterationNote}}" {{^editMode}}disabled="disabled"{{/editMode}} />
72+
<input type="text" id="inputIterationNote" value="{{model.getIterationNote}}"
73+
{{^editMode}}disabled="disabled" {{/editMode}} />
6774
</div>
6875
</div>
6976

@@ -79,7 +86,7 @@ <h3><span class="icon"></span>
7986
<div class="control-group">
8087
<label class="control-label">{{i18n.AUTHOR}}</label>
8188
<div class="controls">
82-
<a class="author-popover">{{iteration.author.name}}</a>
89+
<a class="author-popover">{{iteration.author.name}}</a>
8390
</div>
8491
</div>
8592

@@ -98,7 +105,7 @@ <h3><span class="icon"></span>
98105
</div>
99106

100107
</div>
101-
<div id="tab-products-instances-attributes" class="tab-pane attributes attributes-edit" >
108+
<div id="tab-products-instances-attributes" class="tab-pane attributes attributes-edit">
102109
<div id="attributes-list" class="attributes attributes-edit"></div>
103110

104111
</div>

app/product-management/js/templates/product-instances/product_instances_creation.html

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,44 @@ <h4></h4>
3333
</div>
3434

3535
<div class="control-group">
36-
<label class="control-label" for="inputBaseline">{{i18n.BASELINE}}</label>
36+
<label class="control-label" for="baseline-type">{{i18n.MODE}}</label>
37+
<div class="controls">
38+
<select id="baseline-type" required>
39+
<option value="BASELINE">{{i18n.BASELINE}}</option>
40+
<option value="EFFECTIVE_DATE">{{i18n.EFFECTIVITY_DATE}}</option>
41+
<option value="EFFECTIVE_SERIAL_NUMBER">{{i18n.EFFECTIVITY_SERIAL_NUMBER}}</option>
42+
<option value="EFFECTIVE_LOT_ID">{{i18n.EFFECTIVITY_LOT}}</option>
43+
</select>
44+
</div>
45+
</div>
3746

47+
<div class="control-group" show-mode="BASELINE">
48+
<label class="control-label" for="inputBaseline">{{i18n.BASELINE}}</label>
3849
<div class="controls">
3950
<select id="inputBaseline" required disabled></select>
4051
</div>
4152
</div>
53+
54+
<div class="control-group" show-mode="EFFECTIVE_DATE">
55+
<label class="control-label" for="effectiveDate">{{i18n.EFFECTIVITY_DATE}}</label>
56+
<div class="controls">
57+
<input type="date" id="effectiveDate" />
58+
</div>
59+
</div>
60+
61+
<div class="control-group" show-mode="EFFECTIVE_SERIAL_NUMBER">
62+
<label class="control-label" for="effectiveSerialNumber">{{i18n.EFFECTIVITY_SERIAL_NUMBER}}</label>
63+
<div class="controls">
64+
<input type="text" id ="effectiveSerialNumber" />
65+
</div>
66+
</div>
67+
68+
<div class="control-group" show-mode="EFFECTIVE_LOT_ID">
69+
<label class="control-label" for="effectiveLotId">{{i18n.EFFECTIVITY_LOT}}</label>
70+
<div class="controls">
71+
<input type="text" id ="effectiveLotId" />
72+
</div>
73+
</div>
4274
</div>
4375

4476
<div id="tab-products-instances-attributes" class="tab-pane attributes attributes-edit">

app/product-management/js/views/product-instances/product_instance_modal.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,12 @@ define([
7171
this.initPathDataView();
7272
this.openModal();
7373
this.renderChoices();
74-
7574
var self = this;
7675
this.collection = new ProductBaselines({}, {productId: this.productId});
7776
this.collection.fetch({reset: true}).success(function () {
7877
self.$('.rebase-baseline-select').html('');
7978
_.each(self.collection.models, function (baseline) {
80-
if (self.iteration.getBasedOnId() === baseline.getId()) {
79+
if (self.iteration.getBasedOnId() && self.iteration.getBasedOnId() === baseline.getId()) {
8180
self.$('.rebase-baseline-select').append('<option value="' + baseline.getId() + '" selected="selected">' + baseline.getName() + '</option>');
8281
} else {
8382
self.$('.rebase-baseline-select').append('<option value="' + baseline.getId() + '">' + baseline.getName() + '</option>');
@@ -91,6 +90,13 @@ define([
9190

9291
date.dateHelper(this.$('.date-popover'));
9392

93+
if (!this.iteration.getBasedOnName()) {
94+
this.$('[show-mode]').hide();
95+
this.$('[show-mode=EFFECTIVITY]').show();
96+
} else {
97+
this.$('[show-mode]').hide();
98+
this.$('[show-mode=BASED_ON]').show();
99+
}
94100
return this;
95101
},
96102

app/product-management/js/views/product-instances/product_instances_creation.js

Lines changed: 65 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ define([
55
'text!templates/product-instances/product_instances_creation.html',
66
'common-objects/models/product_instance',
77
'collections/configuration_items',
8+
'models/configuration_item',
89
'common-objects/collections/product_baselines',
910
'common-objects/views/attributes/attributes',
1011
'common-objects/views/security/acl',
11-
'common-objects/views/alert'
12-
], function (Backbone, Mustache, template, ProductInstanceModel, ConfigurationItemCollection, ProductBaselines, AttributesView, ACLView, AlertView) {
12+
'common-objects/views/alert',
13+
'common-objects/utils/date'
14+
], function (Backbone, Mustache, template, ProductInstanceModel, ConfigurationItemCollection, ConfigurationItem, ProductBaselines, AttributesView, ACLView, AlertView, date) {
1315
'use strict';
1416

1517
var ProductInstanceCreationView = Backbone.View.extend({
@@ -19,11 +21,13 @@ define([
1921
events: {
2022
'click .modal-footer .btn-primary': 'interceptSubmit',
2123
'submit #product_instance_creation_form': 'onSubmitForm',
22-
'hidden #product_instance_creation_modal': 'onHidden'
24+
'hidden #product_instance_creation_modal': 'onHidden',
25+
'change #baseline-type': 'onBaselineTypeChange'
2326
},
2427

2528
initialize: function () {
2629
this._subViews = [];
30+
this.mode = 'BASELINE';
2731
_.bindAll(this);
2832
this.$el.on('remove', this.removeSubviews);
2933
},
@@ -48,7 +52,7 @@ define([
4852
} else {
4953
new ConfigurationItemCollection().fetch({success: this.fillConfigurationItemList});
5054
}
51-
55+
this.onBaselineTypeChange();
5256
return this;
5357
},
5458

@@ -83,6 +87,10 @@ define([
8387
this.$inputSerialNumber = this.$('#inputSerialNumber');
8488
this.$inputConfigurationItem = this.$('#inputConfigurationItem');
8589
this.$inputBaseline = this.$('#inputBaseline');
90+
this.$baselineType = this.$('#baseline-type');
91+
this.$effectiveDate = this.$('#effectiveDate');
92+
this.$effectiveSerialNumber = this.$('#effectiveSerialNumber');
93+
this.$effectiveLotId = this.$('#effectiveLotId');
8694
},
8795
bindAttributesView: function () {
8896
this.attributesView = new AttributesView({
@@ -99,23 +107,66 @@ define([
99107
serialNumber: this.$inputSerialNumber.val(),
100108
configurationItemId: this.$inputConfigurationItem.val()
101109
};
102-
data.baselineId = this.$inputBaseline.val();
103-
data.instanceAttributes = this.attributesView.collection.toJSON();
104-
data.acl = this.workspaceMembershipsView.toList();
105-
106-
if (data.serialNumber && data.configurationItemId && data.baselineId) {
107-
this.model.createInstance(data, {
108-
success: this.onProductInstanceCreated.bind(this),
109-
error: this.onError.bind(this)
110-
});
111-
} else {
110+
111+
if (this.mode === 'BASELINE') {
112+
data.baselineId = this.$inputBaseline.val();
113+
data.instanceAttributes = this.attributesView.collection.toJSON();
114+
data.acl = this.workspaceMembershipsView.toList();
115+
116+
if (data.serialNumber && data.configurationItemId && data.baselineId) {
117+
this.model.createInstance(data, {
118+
success: this.onProductInstanceCreated.bind(this),
119+
error: this.onError.bind(this)
120+
});
121+
} else {
122+
// show an error ?
123+
}
124+
125+
}
126+
else if (this.mode === 'EFFECTIVE_DATE') {
127+
data.effectiveDate = date.getDateFromDateInput(this.$effectiveDate.val());
128+
data.type = this.mode;
129+
if (data.effectiveDate && data.configurationItemId) {
130+
this.model.createInstance(data, {
131+
success: this.onProductInstanceCreated.bind(this),
132+
error: this.onError.bind(this)
133+
});
134+
}
135+
}
136+
else if (this.mode === 'EFFECTIVE_SERIAL_NUMBER') {
137+
data.effectiveSerialNumber = this.$effectiveSerialNumber.val();
138+
data.type = this.mode;
139+
if (data.effectiveSerialNumber && data.configurationItemId) {
140+
this.model.createInstance(data, {
141+
success: this.onProductInstanceCreated.bind(this),
142+
error: this.onError.bind(this)
143+
});
144+
}
145+
}
146+
else if (this.mode === 'EFFECTIVE_LOT_ID') {
147+
data.effectiveLotId = this.$effectiveLotId.val();
148+
data.type = this.mode;
149+
if (data.effectiveLotId && data.configurationItemId) {
150+
this.model.createInstance(data, {
151+
success: this.onProductInstanceCreated.bind(this),
152+
error: this.onError.bind(this)
153+
});
154+
}
155+
}
156+
else {
112157
// show an error ?
113158
}
114159
e.preventDefault();
115160
e.stopPropagation();
116161
return false;
117162
},
118163

164+
onBaselineTypeChange: function () {
165+
this.mode = this.$baselineType.val();
166+
this.$('[show-mode]').hide();
167+
this.$('[show-mode=' + this.mode + ']').show();
168+
},
169+
119170
onProductInstanceCreated: function () {
120171
this.trigger('info', App.config.i18n.PRODUCT_INSTANCE_CREATED);
121172

0 commit comments

Comments
 (0)