Skip to content

Commit f280ba7

Browse files
marie-jantleblanc
authored andcommitted
feat(pci.project.billing): open monthly confirmation in a modal (#787)
ref: MANAGER-2571
1 parent 89f533e commit f280ba7

File tree

14 files changed

+131
-112
lines changed

14 files changed

+131
-112
lines changed

packages/manager/modules/pci/src/components/project/billing/hourly-resource-list/component.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ export default {
66
controller,
77
bindings: {
88
resources: '<',
9-
showSwitchToMonthlyBillingOption: '<',
9+
switchToMonthlyBilling: '&',
1010
showAdditionalInstanceDetails: '<',
1111
},
1212
};
Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
1+
export default class {
2+
/* @ngInject */
3+
constructor(DetailsPopoverService) {
4+
this.DetailsPopoverService = DetailsPopoverService;
5+
}
16

2-
export default /* @ngInject */ function (
3-
DetailsPopoverService,
4-
) {
5-
const self = this;
7+
$onInit() {
8+
this.toggle = {
9+
accordions: {
10+
instance: false,
11+
objectStorage: false,
12+
archiveStorage: false,
13+
snapshot: false,
14+
volume: false,
15+
},
16+
};
17+
}
618

7-
self.toggle = {
8-
accordions: {
9-
instance: false,
10-
objectStorage: false,
11-
archiveStorage: false,
12-
snapshot: false,
13-
volume: false,
14-
},
15-
};
16-
17-
self.toggleAccordion = function toggleAccordion() {
18-
DetailsPopoverService.reset();
19-
};
19+
toggleAccordion() {
20+
this.DetailsPopoverService.reset();
21+
}
2022
}

packages/manager/modules/pci/src/components/project/billing/hourly-resource-list/template.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
instance-col-name="'cpbc_hourly_instance_col_name'"
44
instance-col-total="'cpbc_hourly_instance_col_consumption'"
55
instance-col-total-tooltip="'cpbc_hourly_instance_col_consumption_tooltip'"
6-
show-switch-to-monthly-billing-option="$ctrl.showSwitchToMonthlyBillingOption"
6+
switch-to-monthly-billing="$ctrl.switchToMonthlyBilling({ instance: instance })"
77
show-additional-instance-details="$ctrl.showAdditionalInstanceDetails"></instance-list>
88
</oui-collapsible>
99
<oui-collapsible class="mx-0" heading="{{ ::'cpbc_snapshot_detail_title' | translate }} ({{ $ctrl.resources.totals.hourly.snapshot.toFixed(2) + ' ' + $ctrl.resources.totals.currencySymbol }})">

packages/manager/modules/pci/src/components/project/billing/instance-list/component.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export default {
99
instanceColName: '<',
1010
instanceColTotal: '<',
1111
instanceColTotalTooltip: '<',
12-
showSwitchToMonthlyBillingOption: '<',
12+
switchToMonthlyBilling: '&',
1313
showAdditionalInstanceDetails: '<',
1414
},
1515
};

packages/manager/modules/pci/src/components/project/billing/instance-list/controller.js

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ export default /* @ngInject */ function BillingInstanceListComponentCtrl(
1010
OvhApiCloudProjectInstance,
1111
OvhApiMe,
1212
CucCloudMessage,
13-
CucPriceHelper,
1413
) {
1514
const self = this;
1615
self.windowsStringPattern = '/^win-/';
@@ -119,47 +118,4 @@ export default /* @ngInject */ function BillingInstanceListComponentCtrl(
119118
self.loaders.instanceList = false;
120119
});
121120
};
122-
123-
self.prepareMonthlyPaymentActivation = function prepareMonthlyPaymentActivation(instance) {
124-
self.instanceToMonthly = instance.instanceId;
125-
self.data.instanceToMonthlyPrice = null;
126-
self.loaders.monthlyBilling = true;
127-
128-
CucPriceHelper.getPrices($stateParams.projectId).then((prices) => {
129-
const monthlyPrice = prices[instance.planCode && instance.planCode.replace('consumption', 'monthly')];
130-
if (!monthlyPrice) {
131-
self.endInstanceToMonthlyConversion();
132-
return $q.reject({ data: { message: 'No monthly price for this instance' } });
133-
}
134-
self.data.instanceToMonthlyPrice = monthlyPrice;
135-
return $.when();
136-
}).catch((err) => {
137-
self.instanceToMonthly = null;
138-
CucCloudMessage.error([$translate.instant('cpbc_hourly_instance_pass_to_monthly_price_error'), (err.data && err.data.message) || ''].join(' '));
139-
return $q.reject(err);
140-
}).finally(() => {
141-
self.loaders.monthlyBilling = false;
142-
});
143-
};
144-
145-
self.confirmMonthlyPaymentActivation = function confirmMonthlyPaymentActivation() {
146-
self.loaders.monthlyBilling = true;
147-
148-
OvhApiCloudProjectInstance.v6().activeMonthlyBilling({
149-
serviceName: $stateParams.projectId,
150-
instanceId: self.instanceToMonthly,
151-
}, {}).$promise.then(() => {
152-
// reset loaders and instance to activate
153-
self.endInstanceToMonthlyConversion();
154-
}).catch((err) => {
155-
CucCloudMessage.error([$translate.instant('cpbc_hourly_instance_pass_to_monthly_error'), (err.data && err.data.message) || ''].join(' '));
156-
return $q.reject(err);
157-
}).finally(() => {
158-
self.loaders.monthlyBilling = false;
159-
});
160-
};
161-
162-
self.endInstanceToMonthlyConversion = function endInstanceToMonthlyConversion() {
163-
self.instanceToMonthly = null;
164-
};
165121
}

packages/manager/modules/pci/src/components/project/billing/instance-list/template.html

Lines changed: 8 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
<span data-ng-if="$ctrl.instanceConsumptionDetails.length === 0" data-translate="cpbc_no_consumption_data" class="cloud-billing-resource-no-data"></span>
2-
32
<div data-ng-if="$ctrl.instanceConsumptionDetails.length > 0" class="instanceList overflow-scroll">
43
<div class="oui-datagrid-responsive-container">
54
<div class="oui-datagrid-responsive-container__sticky-container">
@@ -37,7 +36,7 @@
3736
<td class="oui-datagrid__cell" data-title="{{ :: $ctrl.instanceColTotal | translate }}">
3837
<span data-ng-bind=" :: instanceConsumption.total"></span>
3938
</td>
40-
<td data-ng-if="$ctrl.showSwitchToMonthlyBillingOption || $ctrl.showAdditionalInstanceDetails" class="oui-datagrid__cell text-right no-space vertical-middle right-space-p4">
39+
<td data-ng-if="$ctrl.switchToMonthlyBilling || $ctrl.showAdditionalInstanceDetails" class="oui-datagrid__cell text-right no-space vertical-middle right-space-p4">
4140
<span data-ng-if="instanceConsumption.monthlyBilling && instanceConsumption.monthlyBilling.status === 'ok'"
4241
data-translate="cpbc_hourly_instance_monthly_billing_since"
4342
data-translate-values="{ since : (instanceConsumption.monthlyBilling.since | date:'shortDate') }">
@@ -48,48 +47,14 @@
4847
</span>
4948
<span class="opacity6" data-ng-if="!instanceConsumption.monthlyBilling && instanceConsumption.isDeleted" data-translate="cpbc_hourly_instance_deleted"></span>
5049

51-
<!-- CONFIRM PASSING TO MONTHLY PAYMENT -->
52-
<div data-ng-show="instanceConsumption.instanceId === $ctrl.instanceToMonthly"
53-
class="text-right animate-fadeInRight-enter animate-fadeOutLeft-leave full-width cell-confirm">
54-
55-
<button class="btn btn-default"
56-
type="reset"
57-
data-ng-click="$ctrl.endInstanceToMonthlyConversion()"
58-
data-ng-disabled="$ctrl.loaders.monthlyBilling">
59-
<i class="glyphicon glyphicon-remove right-space-m8"></i>
60-
<span data-translate="common_cancel"></span>
61-
</button>
62-
63-
<button class="btn btn-primary"
64-
data-uib-tooltip="{{ :: 'cpbc_hourly_instance_pass_to_monthly_info' | translate }}"
65-
type="submit"
66-
data-ng-click="$ctrl.confirmMonthlyPaymentActivation()"
67-
data-ng-disabled="$ctrl.loaders.monthlyBilling">
68-
<i class="fa fa-check right-space-m8"></i>
69-
<span data-translate="cpbc_hourly_instance_pass_to_monthly_button"
70-
data-translate-values="{ price: $ctrl.data.instanceToMonthlyPrice.price.text }"></span>
71-
<spinner data-ng-if="$ctrl.loaders.monthlyBilling">
72-
</spinner>
73-
</button>
74-
75-
</div>
76-
7750
<!-- CONFIRM MONTHLY PAYMENT BUTTON -->
78-
<div data-ng-if="$ctrl.showSwitchToMonthlyBillingOption"
79-
data-ng-class="{
80-
'opacity2-leave' : instanceConsumption.instanceId === $ctrl.instanceToMonthly,
81-
'opacity2-enter' : instanceConsumption.instanceId !== $ctrl.instanceToMonthly
82-
}">
83-
<button type="button"
84-
data-uib-tooltip="{{ :: 'cpbc_hourly_instance_pass_to_monthly_info' | translate }}"
85-
data-ng-if="instanceConsumption.monthlyBilling === null && !instanceConsumption.isDeleted"
86-
class="btn btn-default"
87-
data-ng-click="$ctrl.prepareMonthlyPaymentActivation(instanceConsumption)"
88-
data-ng-disabled="$ctrl.loaders.monthlyBilling"
89-
write-right-required>
90-
{{ :: 'cpbc_hourly_instance_pass_to_monthly' | translate }}
91-
</button>
92-
</div>
51+
<button type="button"
52+
data-ng-if="$ctrl.switchToMonthlyBilling && instanceConsumption.monthlyBilling === null && !instanceConsumption.isDeleted"
53+
class="oui-button oui-button_secondary"
54+
data-ng-click="$ctrl.switchToMonthlyBilling({ instance: instanceConsumption })"
55+
data-write-right-required>
56+
<span data-translate="cpbc_hourly_instance_pass_to_monthly"></span>
57+
</button>
9358
</td>
9459
</tr>
9560
</tbody>

packages/manager/modules/pci/src/components/project/billing/monthly-resource-list/template.html

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
instances="$ctrl.resources.monthlyInstances"
44
instance-col-name="'cpbc_monthly_instance_col_name'"
55
instance-col-total="'cpbc_monthly_instance_col_total'"
6-
instance-col-total-tooltip="'cpbc_monthly_instance_col_total_tooltip'"
7-
show-switch-to-monthly-billing-option="false">
6+
instance-col-total-tooltip="'cpbc_monthly_instance_col_total_tooltip'">
87
</instance-list>
98
</oui-collapsible>

packages/manager/modules/pci/src/projects/project/billing/billing.controller.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,11 @@ export default class CloudProjectBillingConsumptionCurrentCtrl {
5050
refreshMessages() {
5151
this.messages = this.messageHandler.getMessages();
5252
}
53+
54+
switchToMonthly({ instanceId }) {
55+
return this.$state.go('pci.projects.project.billing.monthly', {
56+
projectId: this.projectId,
57+
instanceId,
58+
});
59+
}
5360
}

packages/manager/modules/pci/src/projects/project/billing/billing.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,10 @@ <h2 data-translate="cpbc_tab_consumption"></h2>
5959
<span data-translate="cpbc_hourly_header_description"></span>
6060
&nbsp;(<span data-ng-bind="BillingCtrl.data.totals.hourly.total.toFixed(2) + ' ' + BillingCtrl.data.totals.currencySymbol"></span>)
6161
</p>
62-
<hourly-resource-list resources="BillingCtrl.data" show-switch-to-monthly-billing-option="true"></hourly-resource-list>
62+
<hourly-resource-list
63+
data-resources="BillingCtrl.data"
64+
data-switch-to-monthly-billing="BillingCtrl.switchToMonthly(instance)">
65+
</hourly-resource-list>
6366
</oui-tile>
6467
</div>
6568
</div>

packages/manager/modules/pci/src/projects/project/billing/billing.module.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@ import 'angular-translate';
66

77
import estimate from './estimate';
88
import history from './history';
9+
import activateMonthly from './monthly';
910
import routing from './billing.routing';
1011
import service from './billing.service';
1112

1213
const moduleName = 'ovhManagerPciProjectBilling';
1314

1415
angular
1516
.module(moduleName, [
17+
activateMonthly,
1618
estimate,
1719
history,
1820
'ngTranslateAsyncLoader',

0 commit comments

Comments
 (0)