richie-education 3.2.1-dev9 → 3.2.2-dev26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/i18n/locales/ar-SA.json +29 -1
  2. package/i18n/locales/es-ES.json +29 -1
  3. package/i18n/locales/fa-IR.json +29 -1
  4. package/i18n/locales/fr-CA.json +29 -1
  5. package/i18n/locales/fr-FR.json +29 -1
  6. package/i18n/locales/ko-KR.json +29 -1
  7. package/i18n/locales/pt-PT.json +29 -1
  8. package/i18n/locales/ru-RU.json +29 -1
  9. package/i18n/locales/vi-VN.json +29 -1
  10. package/js/api/joanie.ts +144 -0
  11. package/js/components/PaymentInterfaces/types.ts +7 -0
  12. package/js/components/PaymentScheduleGrid/index.tsx +4 -2
  13. package/js/components/SaleTunnel/AddressSelector/index.spec.tsx +9 -2
  14. package/js/components/SaleTunnel/GenericSaleTunnel.tsx +33 -0
  15. package/js/components/SaleTunnel/SaleTunnelInformation/SaleTunnelInformationGroup.tsx +253 -0
  16. package/js/components/SaleTunnel/SaleTunnelInformation/SaleTunnelInformationSingular.tsx +314 -0
  17. package/js/components/SaleTunnel/SaleTunnelInformation/StepContent.tsx +528 -0
  18. package/js/components/SaleTunnel/SaleTunnelInformation/index.tsx +47 -261
  19. package/js/components/SaleTunnel/SaleTunnelSuccess/index.tsx +25 -11
  20. package/js/components/SaleTunnel/SubscriptionButton/index.tsx +54 -6
  21. package/js/components/SaleTunnel/_styles.scss +55 -0
  22. package/js/components/SaleTunnel/index.full-process-b2b.spec.tsx +356 -0
  23. package/js/components/SaleTunnel/{index.full-process.spec.tsx → index.full-process-b2c.spec.tsx} +4 -1
  24. package/js/components/SaleTunnel/index.spec.tsx +130 -1
  25. package/js/hooks/useBatchOrder/index.tsx +36 -0
  26. package/js/hooks/useContractArchive/index.ts +2 -0
  27. package/js/hooks/useOfferingOrganizations/index.tsx +38 -0
  28. package/js/hooks/useOrganizationAgreements.tsx/index.tsx +66 -0
  29. package/js/hooks/useOrganizationQuotes/index.tsx +56 -0
  30. package/js/hooks/usePaymentPlan.tsx +2 -1
  31. package/js/hooks/useTeacherPendingAgreementsCount/index.ts +34 -0
  32. package/js/pages/DashboardBatchOrderLayout/_styles.scss +5 -0
  33. package/js/pages/DashboardBatchOrderLayout/index.spec.tsx +78 -0
  34. package/js/pages/DashboardBatchOrderLayout/index.tsx +45 -0
  35. package/js/pages/DashboardBatchOrders/index.spec.tsx +237 -0
  36. package/js/pages/DashboardBatchOrders/index.tsx +84 -0
  37. package/js/pages/TeacherDashboardContractsLayout/TeacherDashboardCourseContractsLayout/index.tsx +0 -1
  38. package/js/pages/TeacherDashboardContractsLayout/hooks/useDownloadContractArchive/index.tsx +3 -1
  39. package/js/pages/TeacherDashboardOrganizationAgreements/AgreementActionsBar.tsx +49 -0
  40. package/js/pages/TeacherDashboardOrganizationAgreements/BulkAgreementContractButton.tsx +79 -0
  41. package/js/pages/TeacherDashboardOrganizationAgreements/OrganizationAgreementFrame.tsx +71 -0
  42. package/js/pages/TeacherDashboardOrganizationAgreements/SignOrganizationAgreementButton.tsx +60 -0
  43. package/js/pages/TeacherDashboardOrganizationAgreements/hooks/useAgreementsAbilities.tsx +8 -0
  44. package/js/pages/TeacherDashboardOrganizationAgreements/hooks/useHasAgreementToDownload.tsx +27 -0
  45. package/js/pages/TeacherDashboardOrganizationAgreements/hooks/useTeacherAgreementsToSign.tsx +32 -0
  46. package/js/pages/TeacherDashboardOrganizationAgreements/index.spec.tsx +433 -0
  47. package/js/pages/TeacherDashboardOrganizationAgreements/index.tsx +130 -0
  48. package/js/pages/TeacherDashboardOrganizationAgreementsLayout/index.tsx +25 -0
  49. package/js/pages/TeacherDashboardOrganizationCourseLoader/index.spec.tsx +9 -0
  50. package/js/pages/TeacherDashboardOrganizationQuotes/_styles.scss +40 -0
  51. package/js/pages/TeacherDashboardOrganizationQuotes/index.full-process.spec.tsx +194 -0
  52. package/js/pages/TeacherDashboardOrganizationQuotes/index.spec.tsx +144 -0
  53. package/js/pages/TeacherDashboardOrganizationQuotes/index.tsx +521 -0
  54. package/js/pages/TeacherDashboardOrganizationQuotesLayout/index.tsx +26 -0
  55. package/js/translations/ar-SA.json +1 -1
  56. package/js/translations/es-ES.json +1 -1
  57. package/js/translations/fa-IR.json +1 -1
  58. package/js/translations/fr-CA.json +1 -1
  59. package/js/translations/fr-FR.json +1 -1
  60. package/js/translations/ko-KR.json +1 -1
  61. package/js/translations/pt-PT.json +1 -1
  62. package/js/translations/ru-RU.json +1 -1
  63. package/js/translations/vi-VN.json +1 -1
  64. package/js/types/Joanie.ts +216 -1
  65. package/js/utils/AbilitiesHelper/agreementAbilities.ts +14 -0
  66. package/js/utils/AbilitiesHelper/index.ts +7 -0
  67. package/js/utils/AbilitiesHelper/types.ts +12 -3
  68. package/js/utils/ObjectHelper/index.ts +20 -0
  69. package/js/utils/OrderHelper/index.ts +10 -0
  70. package/js/utils/errors/HttpError.ts +1 -0
  71. package/js/utils/test/factories/joanie.ts +156 -1
  72. package/js/widgets/Dashboard/components/DashboardBatchOrderLoader/_styles.scss +14 -0
  73. package/js/widgets/Dashboard/components/DashboardBatchOrderLoader/index.tsx +32 -0
  74. package/js/widgets/Dashboard/components/DashboardCard/index.spec.tsx +18 -0
  75. package/js/widgets/Dashboard/components/DashboardCard/index.stories.tsx +25 -2
  76. package/js/widgets/Dashboard/components/DashboardCard/index.tsx +4 -2
  77. package/js/widgets/Dashboard/components/DashboardItem/BatchOrder/BatchOrderPaymentModal/BatchOrderPaymentManager.tsx +88 -0
  78. package/js/widgets/Dashboard/components/DashboardItem/BatchOrder/BatchOrderPaymentModal/index.tsx +216 -0
  79. package/js/widgets/Dashboard/components/DashboardItem/BatchOrder/DashboardBatchOrderSubItems.tsx +316 -0
  80. package/js/widgets/Dashboard/components/DashboardItem/BatchOrder/index.spec.tsx +27 -0
  81. package/js/widgets/Dashboard/components/DashboardItem/BatchOrder/index.tsx +175 -0
  82. package/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrder.tsx +5 -2
  83. package/js/widgets/Dashboard/components/DashboardItem/Order/OrganizationBlock/index.tsx +4 -1
  84. package/js/widgets/Dashboard/components/DashboardItem/Order/_styles.scss +5 -0
  85. package/js/widgets/Dashboard/components/DashboardItem/_styles.scss +43 -0
  86. package/js/widgets/Dashboard/components/DashboardSidebar/components/AgreementNavLink/index.spec.tsx +214 -0
  87. package/js/widgets/Dashboard/components/DashboardSidebar/components/AgreementNavLink/index.tsx +47 -0
  88. package/js/widgets/Dashboard/components/LearnerDashboardSidebar/index.tsx +1 -0
  89. package/js/widgets/Dashboard/components/TeacherDashboardOrganizationSidebar/index.spec.tsx +21 -3
  90. package/js/widgets/Dashboard/components/TeacherDashboardOrganizationSidebar/index.tsx +9 -0
  91. package/js/widgets/Dashboard/utils/learnerRoutes.tsx +30 -0
  92. package/js/widgets/Dashboard/utils/learnerRoutesPaths.tsx +12 -0
  93. package/js/widgets/Dashboard/utils/teacherDashboardPaths.tsx +12 -0
  94. package/js/widgets/Dashboard/utils/teacherRoutes.tsx +17 -0
  95. package/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/index.spec.tsx +8 -2
  96. package/package.json +4 -1
  97. package/scss/colors/_theme.scss +1 -1
  98. package/scss/components/_index.scss +1 -0
@@ -1391,6 +1391,34 @@
1391
1391
  "description": "Label for the total amount",
1392
1392
  "message": "Total"
1393
1393
  },
1394
+ "components.SaleTunnel.Information.voucher.delete": {
1395
+ "description": "Delete text for the voucher",
1396
+ "message": "Delete this voucher"
1397
+ },
1398
+ "components.SaleTunnel.Information.voucher.discount": {
1399
+ "description": "Discount description",
1400
+ "message": "Discount applied"
1401
+ },
1402
+ "components.SaleTunnel.Information.voucher.errorInvalid": {
1403
+ "description": "Error when voucher is invalid",
1404
+ "message": "The submitted voucher code is not valid."
1405
+ },
1406
+ "components.SaleTunnel.Information.voucher.errorTooManyRequests": {
1407
+ "description": "Error when user has tried too many vouchers",
1408
+ "message": "Too many attempts. Please try again later."
1409
+ },
1410
+ "components.SaleTunnel.Information.voucher.info": {
1411
+ "description": "Info for the voucher",
1412
+ "message": "If you have a voucher code, please enter it in the field below."
1413
+ },
1414
+ "components.SaleTunnel.Information.voucher.title": {
1415
+ "description": "Title for the voucher",
1416
+ "message": "Voucher code"
1417
+ },
1418
+ "components.SaleTunnel.Information.voucher.validate": {
1419
+ "description": "Validate text for the voucher",
1420
+ "message": "Validate"
1421
+ },
1394
1422
  "components.SaleTunnel.Sponsors.SaleTunnelSponsors.blockTitle": {
1395
1423
  "description": "Title for the universities section in the sale tunnel",
1396
1424
  "message": "University"
@@ -1409,7 +1437,7 @@
1409
1437
  },
1410
1438
  "components.SaleTunnel.SubscriptionButton.walkthroughToSignAndSavePayment": {
1411
1439
  "description": "Message explaining the subscription process with a training agreement to sign and a payment method to set.",
1412
- "message": "To enroll in the training, you will first be invited to sign the training agreement and then to define a payment method."
1440
+ "message": "To enroll in the training, you will first be invited to sign the training agreement and then to define a payment method if required."
1413
1441
  },
1414
1442
  "components.SaleTunnel.WithdrawRightCheckbox.certificate .waiveCheckboxHelperClause2": {
1415
1443
  "description": "Second clause item for the waiver checkbox.",
@@ -1391,6 +1391,34 @@
1391
1391
  "description": "Label for the total amount",
1392
1392
  "message": "Total"
1393
1393
  },
1394
+ "components.SaleTunnel.Information.voucher.delete": {
1395
+ "description": "Delete text for the voucher",
1396
+ "message": "Delete this voucher"
1397
+ },
1398
+ "components.SaleTunnel.Information.voucher.discount": {
1399
+ "description": "Discount description",
1400
+ "message": "Discount applied"
1401
+ },
1402
+ "components.SaleTunnel.Information.voucher.errorInvalid": {
1403
+ "description": "Error when voucher is invalid",
1404
+ "message": "The submitted voucher code is not valid."
1405
+ },
1406
+ "components.SaleTunnel.Information.voucher.errorTooManyRequests": {
1407
+ "description": "Error when user has tried too many vouchers",
1408
+ "message": "Too many attempts. Please try again later."
1409
+ },
1410
+ "components.SaleTunnel.Information.voucher.info": {
1411
+ "description": "Info for the voucher",
1412
+ "message": "If you have a voucher code, please enter it in the field below."
1413
+ },
1414
+ "components.SaleTunnel.Information.voucher.title": {
1415
+ "description": "Title for the voucher",
1416
+ "message": "Voucher code"
1417
+ },
1418
+ "components.SaleTunnel.Information.voucher.validate": {
1419
+ "description": "Validate text for the voucher",
1420
+ "message": "Validate"
1421
+ },
1394
1422
  "components.SaleTunnel.Sponsors.SaleTunnelSponsors.blockTitle": {
1395
1423
  "description": "Title for the universities section in the sale tunnel",
1396
1424
  "message": "University"
@@ -1409,7 +1437,7 @@
1409
1437
  },
1410
1438
  "components.SaleTunnel.SubscriptionButton.walkthroughToSignAndSavePayment": {
1411
1439
  "description": "Message explaining the subscription process with a training agreement to sign and a payment method to set.",
1412
- "message": "To enroll in the training, you will first be invited to sign the training agreement and then to define a payment method."
1440
+ "message": "To enroll in the training, you will first be invited to sign the training agreement and then to define a payment method if required."
1413
1441
  },
1414
1442
  "components.SaleTunnel.WithdrawRightCheckbox.certificate .waiveCheckboxHelperClause2": {
1415
1443
  "description": "Second clause item for the waiver checkbox.",
@@ -1391,6 +1391,34 @@
1391
1391
  "description": "Label for the total amount",
1392
1392
  "message": "Total"
1393
1393
  },
1394
+ "components.SaleTunnel.Information.voucher.delete": {
1395
+ "description": "Delete text for the voucher",
1396
+ "message": "Delete this voucher"
1397
+ },
1398
+ "components.SaleTunnel.Information.voucher.discount": {
1399
+ "description": "Discount description",
1400
+ "message": "Discount applied"
1401
+ },
1402
+ "components.SaleTunnel.Information.voucher.errorInvalid": {
1403
+ "description": "Error when voucher is invalid",
1404
+ "message": "The submitted voucher code is not valid."
1405
+ },
1406
+ "components.SaleTunnel.Information.voucher.errorTooManyRequests": {
1407
+ "description": "Error when user has tried too many vouchers",
1408
+ "message": "Too many attempts. Please try again later."
1409
+ },
1410
+ "components.SaleTunnel.Information.voucher.info": {
1411
+ "description": "Info for the voucher",
1412
+ "message": "If you have a voucher code, please enter it in the field below."
1413
+ },
1414
+ "components.SaleTunnel.Information.voucher.title": {
1415
+ "description": "Title for the voucher",
1416
+ "message": "Voucher code"
1417
+ },
1418
+ "components.SaleTunnel.Information.voucher.validate": {
1419
+ "description": "Validate text for the voucher",
1420
+ "message": "Validate"
1421
+ },
1394
1422
  "components.SaleTunnel.Sponsors.SaleTunnelSponsors.blockTitle": {
1395
1423
  "description": "Title for the universities section in the sale tunnel",
1396
1424
  "message": "University"
@@ -1409,7 +1437,7 @@
1409
1437
  },
1410
1438
  "components.SaleTunnel.SubscriptionButton.walkthroughToSignAndSavePayment": {
1411
1439
  "description": "Message explaining the subscription process with a training agreement to sign and a payment method to set.",
1412
- "message": "To enroll in the training, you will first be invited to sign the training agreement and then to define a payment method."
1440
+ "message": "To enroll in the training, you will first be invited to sign the training agreement and then to define a payment method if required."
1413
1441
  },
1414
1442
  "components.SaleTunnel.WithdrawRightCheckbox.certificate .waiveCheckboxHelperClause2": {
1415
1443
  "description": "Second clause item for the waiver checkbox.",
@@ -1391,6 +1391,34 @@
1391
1391
  "description": "Label for the total amount",
1392
1392
  "message": "Total"
1393
1393
  },
1394
+ "components.SaleTunnel.Information.voucher.delete": {
1395
+ "description": "Delete text for the voucher",
1396
+ "message": "Delete this voucher"
1397
+ },
1398
+ "components.SaleTunnel.Information.voucher.discount": {
1399
+ "description": "Discount description",
1400
+ "message": "Discount applied"
1401
+ },
1402
+ "components.SaleTunnel.Information.voucher.errorInvalid": {
1403
+ "description": "Error when voucher is invalid",
1404
+ "message": "The submitted voucher code is not valid."
1405
+ },
1406
+ "components.SaleTunnel.Information.voucher.errorTooManyRequests": {
1407
+ "description": "Error when user has tried too many vouchers",
1408
+ "message": "Too many attempts. Please try again later."
1409
+ },
1410
+ "components.SaleTunnel.Information.voucher.info": {
1411
+ "description": "Info for the voucher",
1412
+ "message": "If you have a voucher code, please enter it in the field below."
1413
+ },
1414
+ "components.SaleTunnel.Information.voucher.title": {
1415
+ "description": "Title for the voucher",
1416
+ "message": "Voucher code"
1417
+ },
1418
+ "components.SaleTunnel.Information.voucher.validate": {
1419
+ "description": "Validate text for the voucher",
1420
+ "message": "Validate"
1421
+ },
1394
1422
  "components.SaleTunnel.Sponsors.SaleTunnelSponsors.blockTitle": {
1395
1423
  "description": "Title for the universities section in the sale tunnel",
1396
1424
  "message": "University"
@@ -1409,7 +1437,7 @@
1409
1437
  },
1410
1438
  "components.SaleTunnel.SubscriptionButton.walkthroughToSignAndSavePayment": {
1411
1439
  "description": "Message explaining the subscription process with a training agreement to sign and a payment method to set.",
1412
- "message": "To enroll in the training, you will first be invited to sign the training agreement and then to define a payment method."
1440
+ "message": "To enroll in the training, you will first be invited to sign the training agreement and then to define a payment method if required."
1413
1441
  },
1414
1442
  "components.SaleTunnel.WithdrawRightCheckbox.certificate .waiveCheckboxHelperClause2": {
1415
1443
  "description": "Second clause item for the waiver checkbox.",
@@ -1391,6 +1391,34 @@
1391
1391
  "description": "Label for the total amount",
1392
1392
  "message": "Total"
1393
1393
  },
1394
+ "components.SaleTunnel.Information.voucher.delete": {
1395
+ "description": "Delete text for the voucher",
1396
+ "message": "Supprimer ce coupon"
1397
+ },
1398
+ "components.SaleTunnel.Information.voucher.discount": {
1399
+ "description": "Discount description",
1400
+ "message": "Réduction appliquée"
1401
+ },
1402
+ "components.SaleTunnel.Information.voucher.errorInvalid": {
1403
+ "description": "Error when voucher is invalid",
1404
+ "message": "Le code promo saisi n’est pas valide."
1405
+ },
1406
+ "components.SaleTunnel.Information.voucher.errorTooManyRequests": {
1407
+ "description": "Error when user has tried too many vouchers",
1408
+ "message": "Trop de tentatives. Veuillez réessayer plus tard."
1409
+ },
1410
+ "components.SaleTunnel.Information.voucher.info": {
1411
+ "description": "Info for the voucher",
1412
+ "message": "Si vous avez un coupon ou code promo, veuillez le saisir dans le champ ci-dessous."
1413
+ },
1414
+ "components.SaleTunnel.Information.voucher.title": {
1415
+ "description": "Title for the voucher",
1416
+ "message": "Coupon / Code promo"
1417
+ },
1418
+ "components.SaleTunnel.Information.voucher.validate": {
1419
+ "description": "Validate text for the voucher",
1420
+ "message": "Valider"
1421
+ },
1394
1422
  "components.SaleTunnel.Sponsors.SaleTunnelSponsors.blockTitle": {
1395
1423
  "description": "Title for the universities section in the sale tunnel",
1396
1424
  "message": "Université"
@@ -1409,7 +1437,7 @@
1409
1437
  },
1410
1438
  "components.SaleTunnel.SubscriptionButton.walkthroughToSignAndSavePayment": {
1411
1439
  "description": "Message explaining the subscription process with a training agreement to sign and a payment method to set.",
1412
- "message": "Pour vous inscrire, vous serez d'abord invité à signer le contrat de formation, puis à définir un moyen de paiement."
1440
+ "message": "Pour vous inscrire à la formation, vous serez dabord invité à signer la convention de formation, puis à définir un mode de paiement si nécessaire."
1413
1441
  },
1414
1442
  "components.SaleTunnel.WithdrawRightCheckbox.certificate .waiveCheckboxHelperClause2": {
1415
1443
  "description": "Second clause item for the waiver checkbox.",
@@ -1391,6 +1391,34 @@
1391
1391
  "description": "Label for the total amount",
1392
1392
  "message": "Total"
1393
1393
  },
1394
+ "components.SaleTunnel.Information.voucher.delete": {
1395
+ "description": "Delete text for the voucher",
1396
+ "message": "Delete this voucher"
1397
+ },
1398
+ "components.SaleTunnel.Information.voucher.discount": {
1399
+ "description": "Discount description",
1400
+ "message": "Discount applied"
1401
+ },
1402
+ "components.SaleTunnel.Information.voucher.errorInvalid": {
1403
+ "description": "Error when voucher is invalid",
1404
+ "message": "The submitted voucher code is not valid."
1405
+ },
1406
+ "components.SaleTunnel.Information.voucher.errorTooManyRequests": {
1407
+ "description": "Error when user has tried too many vouchers",
1408
+ "message": "Too many attempts. Please try again later."
1409
+ },
1410
+ "components.SaleTunnel.Information.voucher.info": {
1411
+ "description": "Info for the voucher",
1412
+ "message": "If you have a voucher code, please enter it in the field below."
1413
+ },
1414
+ "components.SaleTunnel.Information.voucher.title": {
1415
+ "description": "Title for the voucher",
1416
+ "message": "Voucher code"
1417
+ },
1418
+ "components.SaleTunnel.Information.voucher.validate": {
1419
+ "description": "Validate text for the voucher",
1420
+ "message": "Validate"
1421
+ },
1394
1422
  "components.SaleTunnel.Sponsors.SaleTunnelSponsors.blockTitle": {
1395
1423
  "description": "Title for the universities section in the sale tunnel",
1396
1424
  "message": "University"
@@ -1409,7 +1437,7 @@
1409
1437
  },
1410
1438
  "components.SaleTunnel.SubscriptionButton.walkthroughToSignAndSavePayment": {
1411
1439
  "description": "Message explaining the subscription process with a training agreement to sign and a payment method to set.",
1412
- "message": "To enroll in the training, you will first be invited to sign the training agreement and then to define a payment method."
1440
+ "message": "To enroll in the training, you will first be invited to sign the training agreement and then to define a payment method if required."
1413
1441
  },
1414
1442
  "components.SaleTunnel.WithdrawRightCheckbox.certificate .waiveCheckboxHelperClause2": {
1415
1443
  "description": "Second clause item for the waiver checkbox.",
@@ -1391,6 +1391,34 @@
1391
1391
  "description": "Label for the total amount",
1392
1392
  "message": "Total"
1393
1393
  },
1394
+ "components.SaleTunnel.Information.voucher.delete": {
1395
+ "description": "Delete text for the voucher",
1396
+ "message": "Apagar este voucher"
1397
+ },
1398
+ "components.SaleTunnel.Information.voucher.discount": {
1399
+ "description": "Discount description",
1400
+ "message": "Desconto aplicado"
1401
+ },
1402
+ "components.SaleTunnel.Information.voucher.errorInvalid": {
1403
+ "description": "Error when voucher is invalid",
1404
+ "message": "O código do voucher enviado não é válido."
1405
+ },
1406
+ "components.SaleTunnel.Information.voucher.errorTooManyRequests": {
1407
+ "description": "Error when user has tried too many vouchers",
1408
+ "message": "Tentativas excessivas. Por favor, tente novamente mais tarde."
1409
+ },
1410
+ "components.SaleTunnel.Information.voucher.info": {
1411
+ "description": "Info for the voucher",
1412
+ "message": "Se tiver um código promocional, insira-o no campo abaixo."
1413
+ },
1414
+ "components.SaleTunnel.Information.voucher.title": {
1415
+ "description": "Title for the voucher",
1416
+ "message": "Código promocional"
1417
+ },
1418
+ "components.SaleTunnel.Information.voucher.validate": {
1419
+ "description": "Validate text for the voucher",
1420
+ "message": "Validar"
1421
+ },
1394
1422
  "components.SaleTunnel.Sponsors.SaleTunnelSponsors.blockTitle": {
1395
1423
  "description": "Title for the universities section in the sale tunnel",
1396
1424
  "message": "Universidade"
@@ -1409,7 +1437,7 @@
1409
1437
  },
1410
1438
  "components.SaleTunnel.SubscriptionButton.walkthroughToSignAndSavePayment": {
1411
1439
  "description": "Message explaining the subscription process with a training agreement to sign and a payment method to set.",
1412
- "message": "Para se inscrever na formação, será primeiro convidado a assinar o acordo de formação e, em seguida, a definir um método de pagamento."
1440
+ "message": "Para se inscrever na formação, primeiro será convidado a assinar o contrato de formação e, em seguida, a definir um método de pagamento, se necessário."
1413
1441
  },
1414
1442
  "components.SaleTunnel.WithdrawRightCheckbox.certificate .waiveCheckboxHelperClause2": {
1415
1443
  "description": "Second clause item for the waiver checkbox.",
@@ -1391,6 +1391,34 @@
1391
1391
  "description": "Label for the total amount",
1392
1392
  "message": "Total"
1393
1393
  },
1394
+ "components.SaleTunnel.Information.voucher.delete": {
1395
+ "description": "Delete text for the voucher",
1396
+ "message": "Delete this voucher"
1397
+ },
1398
+ "components.SaleTunnel.Information.voucher.discount": {
1399
+ "description": "Discount description",
1400
+ "message": "Discount applied"
1401
+ },
1402
+ "components.SaleTunnel.Information.voucher.errorInvalid": {
1403
+ "description": "Error when voucher is invalid",
1404
+ "message": "The submitted voucher code is not valid."
1405
+ },
1406
+ "components.SaleTunnel.Information.voucher.errorTooManyRequests": {
1407
+ "description": "Error when user has tried too many vouchers",
1408
+ "message": "Too many attempts. Please try again later."
1409
+ },
1410
+ "components.SaleTunnel.Information.voucher.info": {
1411
+ "description": "Info for the voucher",
1412
+ "message": "If you have a voucher code, please enter it in the field below."
1413
+ },
1414
+ "components.SaleTunnel.Information.voucher.title": {
1415
+ "description": "Title for the voucher",
1416
+ "message": "Voucher code"
1417
+ },
1418
+ "components.SaleTunnel.Information.voucher.validate": {
1419
+ "description": "Validate text for the voucher",
1420
+ "message": "Validate"
1421
+ },
1394
1422
  "components.SaleTunnel.Sponsors.SaleTunnelSponsors.blockTitle": {
1395
1423
  "description": "Title for the universities section in the sale tunnel",
1396
1424
  "message": "University"
@@ -1409,7 +1437,7 @@
1409
1437
  },
1410
1438
  "components.SaleTunnel.SubscriptionButton.walkthroughToSignAndSavePayment": {
1411
1439
  "description": "Message explaining the subscription process with a training agreement to sign and a payment method to set.",
1412
- "message": "To enroll in the training, you will first be invited to sign the training agreement and then to define a payment method."
1440
+ "message": "To enroll in the training, you will first be invited to sign the training agreement and then to define a payment method if required."
1413
1441
  },
1414
1442
  "components.SaleTunnel.WithdrawRightCheckbox.certificate .waiveCheckboxHelperClause2": {
1415
1443
  "description": "Second clause item for the waiver checkbox.",
@@ -1391,6 +1391,34 @@
1391
1391
  "description": "Label for the total amount",
1392
1392
  "message": "Total"
1393
1393
  },
1394
+ "components.SaleTunnel.Information.voucher.delete": {
1395
+ "description": "Delete text for the voucher",
1396
+ "message": "Delete this voucher"
1397
+ },
1398
+ "components.SaleTunnel.Information.voucher.discount": {
1399
+ "description": "Discount description",
1400
+ "message": "Discount applied"
1401
+ },
1402
+ "components.SaleTunnel.Information.voucher.errorInvalid": {
1403
+ "description": "Error when voucher is invalid",
1404
+ "message": "The submitted voucher code is not valid."
1405
+ },
1406
+ "components.SaleTunnel.Information.voucher.errorTooManyRequests": {
1407
+ "description": "Error when user has tried too many vouchers",
1408
+ "message": "Too many attempts. Please try again later."
1409
+ },
1410
+ "components.SaleTunnel.Information.voucher.info": {
1411
+ "description": "Info for the voucher",
1412
+ "message": "If you have a voucher code, please enter it in the field below."
1413
+ },
1414
+ "components.SaleTunnel.Information.voucher.title": {
1415
+ "description": "Title for the voucher",
1416
+ "message": "Voucher code"
1417
+ },
1418
+ "components.SaleTunnel.Information.voucher.validate": {
1419
+ "description": "Validate text for the voucher",
1420
+ "message": "Validate"
1421
+ },
1394
1422
  "components.SaleTunnel.Sponsors.SaleTunnelSponsors.blockTitle": {
1395
1423
  "description": "Title for the universities section in the sale tunnel",
1396
1424
  "message": "University"
@@ -1409,7 +1437,7 @@
1409
1437
  },
1410
1438
  "components.SaleTunnel.SubscriptionButton.walkthroughToSignAndSavePayment": {
1411
1439
  "description": "Message explaining the subscription process with a training agreement to sign and a payment method to set.",
1412
- "message": "To enroll in the training, you will first be invited to sign the training agreement and then to define a payment method."
1440
+ "message": "To enroll in the training, you will first be invited to sign the training agreement and then to define a payment method if required."
1413
1441
  },
1414
1442
  "components.SaleTunnel.WithdrawRightCheckbox.certificate .waiveCheckboxHelperClause2": {
1415
1443
  "description": "Second clause item for the waiver checkbox.",
package/js/api/joanie.ts CHANGED
@@ -101,6 +101,13 @@ export const getRoutes = () => {
101
101
  submit_installment_payment: `${baseUrl}/orders/:id/submit-installment-payment/`,
102
102
  set_payment_method: `${baseUrl}/orders/:id/payment-method/`,
103
103
  },
104
+ batchOrders: {
105
+ get: `${baseUrl}/batch-orders/:id/`,
106
+ create: `${baseUrl}/batch-orders/`,
107
+ submit_for_payment: {
108
+ create: `${baseUrl}/batch-orders/:id/submit-for-payment/`,
109
+ },
110
+ },
104
111
  certificates: {
105
112
  download: `${baseUrl}/certificates/:id/download/`,
106
113
  get: `${baseUrl}/certificates/:id/`,
@@ -136,6 +143,25 @@ export const getRoutes = () => {
136
143
  get: `${baseUrl}/organizations/:organization_id/contracts/:id/`,
137
144
  getSignatureLinks: `${baseUrl}/organizations/:organization_id/contracts-signature-link/`,
138
145
  },
146
+ quotes: {
147
+ get: `${baseUrl}/organizations/:organization_id/quotes/:id/`,
148
+ update: `${baseUrl}/organizations/:organization_id/confirm-quote/`,
149
+ purchase_order: {
150
+ update: `${baseUrl}/organizations/:organization_id/confirm-purchase-order/`,
151
+ },
152
+ bank_transfer: {
153
+ create: `${baseUrl}/organizations/:organization_id/confirm-bank-transfer/`,
154
+ },
155
+ submit_for_signature: {
156
+ create: `${baseUrl}/organizations/:organization_id/submit-for-signature-batch-order/`,
157
+ },
158
+ download_quote: {
159
+ get: `${baseUrl}/organizations/:organization_id/download-quote/`,
160
+ },
161
+ },
162
+ agreements: {
163
+ get: `${baseUrl}/organizations/:organization_id/agreements/:id/`,
164
+ },
139
165
  },
140
166
  courses: {
141
167
  get: `${baseUrl}/courses/:id/`,
@@ -157,6 +183,9 @@ export const getRoutes = () => {
157
183
  },
158
184
  offerings: {
159
185
  get: `${baseUrl}/offerings/:id/`,
186
+ organizations: {
187
+ get: `${baseUrl}/offerings/:id/get-organizations/`,
188
+ },
160
189
  },
161
190
  contractDefinitions: {
162
191
  previewTemplate: `${baseUrl}/contract_definitions/:id/preview_template/`,
@@ -303,6 +332,26 @@ const API = (): Joanie.API => {
303
332
  body: JSON.stringify(payload),
304
333
  }).then(checkStatus),
305
334
  },
335
+ batchOrders: {
336
+ create: async (payload) =>
337
+ fetchWithJWT(ROUTES.user.batchOrders.create, {
338
+ method: 'POST',
339
+ body: JSON.stringify(payload),
340
+ }).then(checkStatus),
341
+ get: async (filters?: Joanie.BatchOrderQueryFilters) => {
342
+ return fetchWithJWT(buildApiUrl(ROUTES.user.batchOrders.get, filters)).then(checkStatus);
343
+ },
344
+ submit_for_payment: {
345
+ create: async (filters) => {
346
+ return fetchWithJWT(
347
+ buildApiUrl(ROUTES.user.batchOrders.submit_for_payment.create, filters),
348
+ {
349
+ method: 'POST',
350
+ },
351
+ ).then(checkStatus);
352
+ },
353
+ },
354
+ },
306
355
  enrollments: {
307
356
  create: async (payload) =>
308
357
  fetchWithJWT(ROUTES.user.enrollments.create, {
@@ -406,6 +455,94 @@ const API = (): Joanie.API => {
406
455
  ).then(checkStatus);
407
456
  },
408
457
  },
458
+ quotes: {
459
+ get: async (filters?: Joanie.OrganizationQuoteQueryFilters) => {
460
+ return fetchWithJWT(buildApiUrl(ROUTES.organizations.quotes.get, filters), {
461
+ method: 'GET',
462
+ }).then(checkStatus);
463
+ },
464
+ update: async (filters: { organization_id: string; payload: any }) => {
465
+ if (filters.organization_id && filters.payload) {
466
+ return fetchWithJWT(
467
+ ROUTES.organizations.quotes.update.replace(
468
+ ':organization_id',
469
+ filters.organization_id,
470
+ ),
471
+ {
472
+ method: 'PATCH',
473
+ body: JSON.stringify(filters.payload),
474
+ },
475
+ ).then(checkStatus);
476
+ }
477
+ },
478
+ purchase_order: {
479
+ update: async (filters: { organization_id: string; payload: any }) => {
480
+ if (filters.organization_id && filters.payload) {
481
+ return fetchWithJWT(
482
+ ROUTES.organizations.quotes.purchase_order.update.replace(
483
+ ':organization_id',
484
+ filters.organization_id,
485
+ ),
486
+ {
487
+ method: 'PATCH',
488
+ body: JSON.stringify(filters.payload),
489
+ },
490
+ ).then(checkStatus);
491
+ }
492
+ },
493
+ },
494
+ bank_transfer: {
495
+ create: async (filters: { organization_id: string; payload: any }) => {
496
+ if (filters.organization_id && filters.payload) {
497
+ return fetchWithJWT(
498
+ ROUTES.organizations.quotes.bank_transfer.create.replace(
499
+ ':organization_id',
500
+ filters.organization_id,
501
+ ),
502
+ {
503
+ method: 'POST',
504
+ body: JSON.stringify(filters.payload),
505
+ },
506
+ ).then(checkStatus);
507
+ }
508
+ },
509
+ },
510
+ submit_for_signature: {
511
+ create: async (filters: { organization_id: string; payload: any }) => {
512
+ if (filters.organization_id && filters.payload) {
513
+ return fetchWithJWT(
514
+ ROUTES.organizations.quotes.submit_for_signature.create.replace(
515
+ ':organization_id',
516
+ filters.organization_id,
517
+ ),
518
+ {
519
+ method: 'POST',
520
+ body: JSON.stringify(filters.payload),
521
+ },
522
+ ).then(checkStatus);
523
+ }
524
+ },
525
+ },
526
+ download_quote: {
527
+ get: async (filters?: Joanie.OrganizationQuoteQueryFilters) => {
528
+ return fetchWithJWT(
529
+ buildApiUrl(ROUTES.organizations.quotes.download_quote.get, filters),
530
+ {
531
+ method: 'GET',
532
+ },
533
+ )
534
+ .then(checkStatus)
535
+ .then(getFileFromResponse);
536
+ },
537
+ },
538
+ },
539
+ agreements: {
540
+ get: async (filters) => {
541
+ return fetchWithJWT(buildApiUrl(ROUTES.organizations.agreements.get, filters), {
542
+ method: 'GET',
543
+ }).then(checkStatus);
544
+ },
545
+ },
409
546
  },
410
547
  courses: {
411
548
  get: (filters?: Joanie.CourseQueryFilters) => {
@@ -477,6 +614,13 @@ const API = (): Joanie.API => {
477
614
  : buildApiUrl(ROUTES.offerings.get, filters),
478
615
  ).then(checkStatus);
479
616
  },
617
+ organizations: {
618
+ get: (filters?: Joanie.OrganizationQuoteQueryFilters) => {
619
+ return fetchWithJWT(buildApiUrl(ROUTES.offerings.organizations.get, filters)).then(
620
+ checkStatus,
621
+ );
622
+ },
623
+ },
480
624
  },
481
625
  contractDefinitions: {
482
626
  previewTemplate(id: string): Promise<File> {
@@ -9,6 +9,7 @@ export enum SubscriptionErrorMessageId {
9
9
  ERROR_DEFAULT = 'errorDefault',
10
10
  ERROR_FULL_PRODUCT = 'errorFullProduct',
11
11
  ERROR_WITHDRAWAL_RIGHT = 'errorWithdrawalRight',
12
+ ERROR_BATCH_ORDER_FORM_INVALID = 'batchOrderFormInvalid',
12
13
  }
13
14
 
14
15
  export enum PaymentProviders {
@@ -17,6 +18,12 @@ export enum PaymentProviders {
17
18
  LYRA = 'lyra',
18
19
  }
19
20
 
21
+ export enum PaymentMethod {
22
+ CARD_PAYMENT = 'card_payment',
23
+ BANK_TRANSFER = 'bank_transfer',
24
+ PURCHASE_ORDER = 'purchase_order',
25
+ }
26
+
20
27
  export interface PaymentWithId {
21
28
  payment_id: string;
22
29
  }
@@ -59,8 +59,8 @@ export const PaymentScheduleGrid = ({ schedule }: Props) => {
59
59
  <DataGrid
60
60
  displayHeader={false}
61
61
  columns={[
62
- { field: 'index', size: 10 },
63
- { field: 'amount', size: 90 },
62
+ { field: 'index', size: 10, enableSorting: false },
63
+ { field: 'amount', size: 90, enableSorting: false },
64
64
  {
65
65
  field: 'date',
66
66
  renderCell: ({ row }) => (
@@ -68,6 +68,7 @@ export const PaymentScheduleGrid = ({ schedule }: Props) => {
68
68
  <FormattedMessage {...messages.withdrawnAt} values={{ date: row.date }} />
69
69
  </span>
70
70
  ),
71
+ enableSorting: false,
71
72
  },
72
73
  {
73
74
  id: 'state',
@@ -79,6 +80,7 @@ export const PaymentScheduleGrid = ({ schedule }: Props) => {
79
80
  ) : (
80
81
  ''
81
82
  ),
83
+ enableSorting: false,
82
84
  },
83
85
  ]}
84
86
  rows={schedule.map((installment, index) => ({