|
1 | 1 | import logging |
| 2 | +from datetime import UTC, datetime, timedelta |
2 | 3 |
|
| 4 | +from django.conf import settings |
3 | 5 | from mpt_extension_sdk.flows.pipeline import Step |
4 | 6 | from mpt_extension_sdk.mpt_http.mpt import ( |
5 | 7 | complete_order, |
|
25 | 27 | from ffc.notifications import send_mpt_notification |
26 | 28 | from ffc.parameters import ( |
27 | 29 | PARAM_ADMIN_CONTACT, |
| 30 | + PARAM_BILLED_PERCENTAGE, |
28 | 31 | PARAM_CURRENCY, |
29 | 32 | PARAM_IS_NEW_USER, |
30 | 33 | PARAM_ORGANIZATION_NAME, |
| 34 | + PARAM_TRIAL_END_DATE, |
| 35 | + PARAM_TRIAL_START_DATE, |
31 | 36 | get_due_date, |
32 | 37 | get_fulfillment_parameter, |
33 | 38 | get_ordering_parameter, |
34 | 39 | reset_ordering_parameters_error, |
| 40 | + set_fulfillment_parameter, |
35 | 41 | set_ordering_parameter_error, |
36 | 42 | ) |
37 | 43 |
|
@@ -162,6 +168,54 @@ def __call__(self, client, context, next_step): |
162 | 168 | next_step(client, context) |
163 | 169 |
|
164 | 170 |
|
| 171 | +class SetupFulfillmentParameters(Step): |
| 172 | + """ |
| 173 | + Set fulfillment parameters with default values if they are not provided |
| 174 | + """ |
| 175 | + |
| 176 | + def __call__(self, client, context, next_step): |
| 177 | + order = context.order |
| 178 | + updates = self._get_parameter_updates(order) |
| 179 | + |
| 180 | + if updates: |
| 181 | + for param_name, param_value in updates.items(): |
| 182 | + order = set_fulfillment_parameter( |
| 183 | + order=order, |
| 184 | + parameter=param_name, |
| 185 | + value=param_value, |
| 186 | + ) |
| 187 | + context.order = update_order( |
| 188 | + client, context.order["id"], parameters=order["parameters"] |
| 189 | + ) |
| 190 | + logger.info( |
| 191 | + f"{context}: Updating fulfillment parameters", |
| 192 | + ) |
| 193 | + |
| 194 | + next_step(client, context) |
| 195 | + |
| 196 | + @staticmethod |
| 197 | + def _get_parameter_updates(order): |
| 198 | + updates = {} |
| 199 | + |
| 200 | + if not get_fulfillment_parameter(order, PARAM_BILLED_PERCENTAGE).get("value"): |
| 201 | + updates[PARAM_BILLED_PERCENTAGE] = int( |
| 202 | + settings.EXTENSION_CONFIG.get("DEFAULT_BILLED_PERCENTAGE") |
| 203 | + ) |
| 204 | + |
| 205 | + trial_start_date = get_fulfillment_parameter(order, PARAM_TRIAL_START_DATE).get("value") |
| 206 | + if not trial_start_date: |
| 207 | + trial_start_date = datetime.now(UTC).date().strftime("%Y-%m-%d") |
| 208 | + updates[PARAM_TRIAL_START_DATE] = trial_start_date |
| 209 | + |
| 210 | + if not get_fulfillment_parameter(order, PARAM_TRIAL_END_DATE).get("value"): |
| 211 | + trail_end_date = datetime.strptime(trial_start_date, "%Y-%m-%d").date() + timedelta( |
| 212 | + days=int(settings.EXTENSION_CONFIG.get("DEFAULT_TRIAL_PERIOD_DURATION_DAYS")) |
| 213 | + ) |
| 214 | + updates[PARAM_TRIAL_END_DATE] = trail_end_date.strftime("%Y-%m-%d") |
| 215 | + |
| 216 | + return updates |
| 217 | + |
| 218 | + |
165 | 219 | class ResetOrderErrors(Step): |
166 | 220 | """ |
167 | 221 | Reset order errors and parameter errors. Is used before processing |
|
0 commit comments