diff --git a/src/constants/application-config.js b/src/constants/application-config.js index b4c0d9a1e..91a56ae10 100644 --- a/src/constants/application-config.js +++ b/src/constants/application-config.js @@ -11,12 +11,12 @@ const applicationConfig = { SITE_ENTRY_TRIGGER_VALUE: "FixMyGlass", CASH_PARENT_ACCOUNT_NUMBER: 167132, MY_ACCOUNT: process.env.VUE_APP_MY_ACCOUNT, - PAYPAL_SUCCESS_URL: + PIA_RESPONSE_URL: location.protocol + "//" + location.host + "/fmg/?fmgPage=payment-pia-return&src=concept-funnel", - PAYPAL_CANCEL_URL: + PIA_CANCEL_URL: location.protocol + "//" + location.host + diff --git a/src/constants/query-strings.js b/src/constants/query-strings.js index 1bff7bf46..40f3a2242 100644 --- a/src/constants/query-strings.js +++ b/src/constants/query-strings.js @@ -1,3 +1,4 @@ +// Note: querystring-helper will change all keys to lowercase so make sure they are here as well const queryStrings = { FMG_PAGE: "fmgPage", START_TYPE: "start_type", @@ -6,6 +7,18 @@ const queryStrings = { ERROR: "error", TOKEN: "token", PAYERID: "payerid", + SUBSCRIPTIONID: "subscriptionid", + REFERRAL_SEQ_NUM: "referralseqnum", + CARD_EXPIRATION_MONTH: "card_expirationmonth", + CARD_EXPIRATION_YEAR: "card_expirationyear", + CARD_TYPE: "sgcardtype", + BILL_TO_POSTAL_CODE: "billto_postalcode", + BILL_TO_FIRST_NAME: "billto_firstname", + BILL_TO_LAST_NAME: "billto_lastname", + REFERENCE_NUMBER: "req_reference_number", + AUTH_CODE: "auth_code", + TRANSACTION_ID: "transaction_id", + TRANS_REFERENCE_NUMBER: "auth_trans_ref_no", }; export { queryStrings }; diff --git a/src/constants/store-actions.js b/src/constants/store-actions.js index cc1c90d61..9801ef22e 100644 --- a/src/constants/store-actions.js +++ b/src/constants/store-actions.js @@ -92,6 +92,7 @@ const storeActions = { SAVE_WORK_ORDER_FLAG: "saveWorkOrderFlag", SAVE_PIA_ERROR_CODE: "savePiaErrorCode", SAVE_PIA_WORK_ORDER: "savePiaWorkOrder", + SAVE_CCTOKEN: "saveCCToken", }; export { storeActions }; diff --git a/src/constants/store-mutations.js b/src/constants/store-mutations.js index f5f2ca432..2b2efae64 100644 --- a/src/constants/store-mutations.js +++ b/src/constants/store-mutations.js @@ -1,7 +1,9 @@ const storeMutations = { + // PAYMENT MUTATIONS UPDATE_WORK_ORDER_FLAG: "updateWorkOrderFlag", UPDATE_PIA_ERROR_CODE: "updatePiaErrorCode", UPDATE_PIA_WORK_ORDER: "updatePiaWorkOrder", + UPDATE_CCTOKEN: "updateCCToken", // VEHICLE MUTATIONS UPDATE_YEAR: "updateYear", diff --git a/src/fmg-components/nav-bar/nav-bar.vue b/src/fmg-components/nav-bar/nav-bar.vue index 9cf918785..aba6897cc 100644 --- a/src/fmg-components/nav-bar/nav-bar.vue +++ b/src/fmg-components/nav-bar/nav-bar.vue @@ -16,7 +16,8 @@ @click-event="buttonClick" data-bs-target="#footerModal" data-test-id="nav-bar-main-button" - data-bs-dismiss="modal" /> + data-bs-dismiss="modal" + v-if="!isSubmitHidden" /> @@ -175,8 +175,8 @@ export default { lineItems: [], availableLineItems: [], - displayPaypalAlert: this.getPaypalAlert(), paymentMethodInternalModel: this.getPaymentMethodFromStore(), + displayPiaAlert: this.getPiaAlert(), }; }, methods: { @@ -235,7 +235,7 @@ export default { openModal(modalName) { this.$refs[modalName].openModal(); }, - getPaypalAlert() { + getPiaAlert() { return store.getters.order.payment.piaErrorCode ? true : false; }, getPaymentMethodFromStore() { @@ -338,7 +338,6 @@ export default { }, computed: { damageInfo() { - // console.log("this.$store.getters.damage ", this.$store.getters.damage) return this.$store.getters.damage; }, noPiaDisclaimer() { diff --git a/src/layouts/payment-pia-return/payment-pia-return.vue b/src/layouts/payment-pia-return/payment-pia-return.vue index 8d547cd34..ec2ecd1c0 100644 --- a/src/layouts/payment-pia-return/payment-pia-return.vue +++ b/src/layouts/payment-pia-return/payment-pia-return.vue @@ -9,6 +9,7 @@ import { submitWorkOrder } from "@/helpers/heritage-integration/order-helper.js" import { queryStrings } from "@/constants/query-strings"; import { getQuerystringParameter } from "@/helpers/querystring-helper"; import { storeActions } from "@/constants/store-actions"; +import store from "@/store"; import baseMixin from "@/mixins/base-mixin.js"; import loadingModal from "@/fmg-components/loading-modal/loading-modal.vue"; import { Form } from "vee-validate"; @@ -17,11 +18,16 @@ export default { name: "payment-pia-return", async mounted() { this.$refs.loadingModal.showModal(); + // from paypal const piaError = getQuerystringParameter(queryStrings.ERROR); const token = getQuerystringParameter(queryStrings.TOKEN); const payerId = getQuerystringParameter(queryStrings.PAYERID); + // from credit card + const subscriptionID = getQuerystringParameter(queryStrings.SUBSCRIPTIONID); + if (piaError) { + console.log("Error during payment: " + piaError); baseMixin.methods.dispatchStoreAction( storeActions.SAVE_PIA_ERROR_CODE, piaError, @@ -30,32 +36,24 @@ export default { this.$router.navigateWithoutSaving(this.navigationScenarios.PIA_ERROR, this.$route); } else { if (token && payerId) { - baseMixin.methods.dispatchStoreAction( - storeActions.SAVE_PIA_ERROR_CODE, - null, - false - ); - baseMixin.methods.dispatchStoreAction( - storeActions.SAVE_WORK_ORDER_FLAG, - true, - false - ); - - // Final work order submit after returning from PIA. - await this.dispatchStoreAction(storeActions.RESET_SAVE_SESSION_PROMISE); - await submitWorkOrder({ pageNameToLog: "payment-pia-return" }); - this.$refs.loadingModal.isModalVisible = false; - this.$router.navigateWithoutSaving( - this.navigationScenarios.PIA_SUCCESS, - this.$route - ); + await this.processPaypalResponse(); } else { - baseMixin.methods.dispatchStoreAction( - storeActions.SAVE_PIA_ERROR_CODE, - piaError, - false - ); - this.$router.navigateWithoutSaving(this.navigationScenarios.PIA_ERROR, this.$route); + if (subscriptionID) { + await this.processCreditCardResponse(subscriptionID); + } else { + console.log( + "Error during payment: " + token + " : " + payerId + " : " + subscriptionID + ); + baseMixin.methods.dispatchStoreAction( + storeActions.SAVE_PIA_ERROR_CODE, + piaError, + false + ); + this.$router.navigateWithoutSaving( + this.navigationScenarios.PIA_ERROR, + this.$route + ); + } } } }, @@ -63,6 +61,68 @@ export default { arePagePrerequisitesValid() { return true; }, + async processPaypalResponse() { + baseMixin.methods.dispatchStoreAction(storeActions.SAVE_PIA_ERROR_CODE, null, false); + baseMixin.methods.dispatchStoreAction(storeActions.SAVE_WORK_ORDER_FLAG, true, false); + + await this.saveAndSubmitWorkOrder(); + }, + async processCreditCardResponse(subscriptionID) { + baseMixin.methods.dispatchStoreAction(storeActions.SAVE_PIA_ERROR_CODE, null, false); + baseMixin.methods.dispatchStoreAction(storeActions.SAVE_WORK_ORDER_FLAG, true, false); + + const referralSeqNum = getQuerystringParameter(queryStrings.REFERRAL_SEQ_NUM); + if (referralSeqNum != store.getters.order.referralSequenceNumber) { + console.log( + "error: unknown ref:" + + referralSeqNum + + " " + + store.getters.order.referralSequenceNumber + ); + baseMixin.methods.dispatchStoreAction( + storeActions.SAVE_PIA_ERROR_CODE, + "unknown error", + false + ); + this.$router.navigateWithoutSaving(this.navigationScenarios.PIA_ERROR, this.$route); + } else { + const expMonth = getQuerystringParameter(queryStrings.CARD_EXPIRATION_MONTH); + const expYear = getQuerystringParameter(queryStrings.CARD_EXPIRATION_YEAR); + const cardType = getQuerystringParameter(queryStrings.CARD_TYPE); + const billToPostalCode = getQuerystringParameter(queryStrings.BILL_TO_POSTAL_CODE); + const billToFirstName = getQuerystringParameter(queryStrings.BILL_TO_FIRST_NAME); + const billToLastName = getQuerystringParameter(queryStrings.BILL_TO_LAST_NAME); + const referenceNumber = getQuerystringParameter(queryStrings.REFERENCE_NUMBER); + const authCode = getQuerystringParameter(queryStrings.AUTH_CODE); + const transactionId = getQuerystringParameter(queryStrings.TRANSACTION_ID); + const transReferenceNumber = getQuerystringParameter( + queryStrings.TRANS_REFERENCE_NUMBER + ); + + var ccToken = { + subscriptionId: subscriptionID, + expMonth: expMonth, + expYear: expYear, + cardType: cardType, + billToPostalCode: billToPostalCode, + billToFirstName: billToFirstName, + billToLastName: billToLastName, + referenceNumber: referenceNumber, + authCode: authCode, + transactionId: transactionId, + transReferenceNumber: transReferenceNumber, + }; + baseMixin.methods.dispatchStoreAction(storeActions.SAVE_CCTOKEN, ccToken, false); + await this.saveAndSubmitWorkOrder(); + } + }, + async saveAndSubmitWorkOrder() { + // Final work order submit after returning from PIA. + await this.dispatchStoreAction(storeActions.RESET_SAVE_SESSION_PROMISE); + await submitWorkOrder({ pageNameToLog: "payment-pia-return" }); + this.$refs.loadingModal.isModalVisible = false; + this.$router.navigateWithoutSaving(this.navigationScenarios.PIA_SUCCESS, this.$route); + }, forwardButtonAction() { this.$router.navigateWithoutSaving(this.navigationScenarios.PIA_SUCCESS, this.$route); }, diff --git a/src/layouts/payment/payment.vue b/src/layouts/payment/payment.vue index 6fd6d1511..ddfa7dbe7 100644 --- a/src/layouts/payment/payment.vue +++ b/src/layouts/payment/payment.vue @@ -1,31 +1,35 @@