function payments(){} payments.prototype = { paymentMethod : undefined, modal : undefined, paymendMethod: undefined, paymentType: undefined, formatNumber : function (number) { number = number.toFixed(2) + ''; x = number.split('.'); x1 = x[0]; x2 = x.length > 1 ? ',' + x[1] : ''; var rgx = /(\d+)(\d{3})/; while (rgx.test(x1)) { x1 = x1.replace(rgx, '$1' + '.' + '$2'); } return x1 + x2; }, setPaymentMethod : function (methodId, orderId){ if(methodId == '') return; var thisObject = this; if ($('#card_number').attr("disabled") != 'disabled') thisObject.disableForm(); ajaxLoader.ajaxStart(); $.ajax({ url: '/payment/set-payment-method?order='+orderId, data: {method: methodId}, method: 'post', dataType: 'json', success: function(json) { thisObject.paymendMethod = methodId; ajaxLoader.ajaxStop(); var modal = new Modal({ title: json.title, body : json.body, buttonOK : false, dismissButton : false, cancelText : translate['payment-select-access-method-cancel'], dataKeyboard : false }); thisObject.modal = modal; modal.show(); } }); }, selectAccessMethod: function(methodId, methodName, installments, discount){ $('.bandeiras img').removeClass('focus'); $('#access-method-text').html('

'+methodName+'

'); $('#access_method').val(methodId); $('#payment_method').val(this.paymendMethod); $('.bandeiras img').addClass('new'); $('#payment-method-'+this.paymendMethod).addClass('focus'); if(installments > 0){ this.addInstallments(installments, discount); }else{ this.removeInstallments(installments); } this.showFieldNameByAccessMethod(methodId); this.removeDisabledForm(); this.checkPaymentButton(); this.modal.hide(); $('#card_number').focus(); }, setBoxOffice: function(paymendMethod, event, accessMethod) { ajaxLoader.ajaxStart(); $('.bandeiras img').removeClass('focus'); $('#access-method-text').html('

Retirar ingresso na bilheteria

'); $('#access_method').val(accessMethod); $('#payment_method').val(paymendMethod); $('.bandeiras img').addClass('new'); $('#payment-method-'+paymendMethod).addClass('focus'); let thisObject = this; $.ajax({ url: '/payment/get-installments?method='+paymendMethod+'&event='+event, method: 'get', dataType: 'json', success: function(json) { ajaxLoader.ajaxStop(); if(json.installments > 0){ thisObject.addInstallments(json.installments); } else { thisObject.removeInstallments(); } } }); this.showFieldNameByAccessMethod(1); this.removeDisabledForm(); this.checkPaymentButton(); $('#card_number').focus(); }, checkPaymentButton : function(){ if($('.g-recaptcha-response').val() != "" && $('#payment_method').val() != ""){ $('#payment-submit').removeAttr('disabled'); $('#payment-submit').removeClass('disabled'); } }, removeDisabledForm : function(){ $('#card_number').removeAttr('disabled'); $('#card_name').removeAttr('disabled'); $('#cvv').removeAttr('disabled'); $('#expire').removeAttr('disabled'); }, disableForm : function(){ $('#card_number').prop("disabled", true); $('#card_name').prop("disabled", true); $('#cvv').prop("disabled", true); $('#expire').prop("disabled", true); }, addInstallments : function(installments, discount){ $('#installments').html(''); $('#installments').attr('onChange', 'payments.applyInstallmentsDiscount()'); var totalOrder = $('#total-order').val(); var installmentValue = totalOrder; $('#installments').append(''); for(i = 1; i <= installments; i ++){ installmentValue = totalOrder / i; discountText = '(Desconto à vista)'; if(i===1 && discount > 0){ $('#installments').append(''); }else{ $('#installments').append(''); } } $('#installments').removeAttr('disabled'); $('#installments').parents('div.form-group').show(); }, removeInstallments : function(installments){ $('#installments').attr('disabled', true); $('#installments').parents('div.form-group').hide(); }, applyInstallmentsDiscount : function() { var installmentValue = $('#installments').find(":selected").val(); var orderId = $('#order').val(); var paymentMethod = this.paymendMethod; ajaxLoader.ajaxStart(); $.ajax({ url: '/payment/insert-installments-discount', data: {installment: installmentValue, orderId: orderId, paymentMethod: paymentMethod}, method: 'post', dataType: 'json', success: function(json) { if(json.status) { $('#orderTotalLabel').html('R$ '+ json.data.orderValue); $('#totalDiscountLabel').html(" - " + json.data.totalDiscountValue); $('#payment_method').val(json.data.paymentMethod); $('#totalConvenienceLabel').html(" + " + json.data.totalConvenienceFee); $.each(json.data.tickets, function(index, value){ $('.desc-'+value['ing_codigo']).html(value['discountValue']); $('.total-'+value['ing_codigo']).html(value['ticketValue']); }); } ajaxLoader.ajaxStop(); } }); this.checkPaymentButton(); }, registerDocument : function(ticketId) { var payment = this; var modal = new Modal({ title: translate["payment-js-register-document"], body: this.registerDocumentFields(ticketId), confirm: function(){payment.insertDocument(ticketId, payment.modal)} }); this.modal = modal; this.modal.show(); }, showFieldNameByAccessMethod: function(methodId){ $("input[id^=ticket]").each(function(){ var ticketId = this.id.split("_")[1]; if(methodId == 3){ var document = $("#document"+ticketId).val(); var element = ""; $("#name"+ticketId).html(element); }else{ $("#name"+ticketId).html($("#defaultName"+ticketId).val()); } }); }, registerDocumentFields: function(ticketId){ var modalBody = '
' + '
' + '
' + '' + '
' + '' + '
' + '
' + '
' + '' + '
' + '' + '
' + '
' + '
' + '
'; return modalBody; }, insertDocument: function(ticketId, modal){ var name = $("#icd_nome"+ticketId).val(); var document = $("#icd_rg"+ticketId).val(); if (name.length && document.length) { $.getJSON('/payment/register-document-print-at-home', { name : name, document : document, ticket: ticketId }, function(json) { if (json.success === true) { $('#doc_' + ticketId).html(name + '
' + document); $("#document"+ticketId).val(name + '
' + document); modal.hide(); } else { $.each(json.errors, function(key, value){ //TODO: print error }); } }); } }, ExpireOrder : function (orderId){ ajaxLoader.ajaxStart(); setTimeout(function(){ $.ajax({ url: '/payment/expire-order?order='+orderId, method: 'post', dataType: 'json', success: function(json) { ajaxLoader.ajaxStop(); if(json.success){ window.location.href = json.url; }else{ window.location.reload(); } } }); }, 3000); }, selectWithdrawnMethod: function(withdrawnMethod, orderId){ ajaxLoader.ajaxStart(); // var withdrawnMethod = $('#withdrawnMethod').val(); // var orderId = $('#withdrawnMethod').data('order'); $.ajax({ url: '/payment/set-withdrawn-method?order='+orderId, data: {method: withdrawnMethod}, method: 'post', dataType: 'json', success: function(json) { if(json.success === true){ $('.btn-checkin').css("pointer-events", ""); $('.btn-checkin').removeAttr("disabled"); }else{ $('.btn-checkin').attr("disabled", "disabled"); $('.btn-checkin').css("pointer-events", "none"); } ajaxLoader.ajaxStop(); }, error: function(json){ $('.btn-checkin').attr("disabled", "disabled"); $('.btn-checkin').css("pointer-events", "none"); ajaxLoader.ajaxStop(); } }); }, finishPaymentCheckin: function (orderId, eventId){ ajaxLoader.ajaxStart(); $.ajax({ url: '/payment/finish-payment-checkin', data: {eventId: eventId, orderId: orderId}, method: 'post', dataType: 'json', success: function(json){ ajaxLoader.ajaxStop(); window.location.href = '/order/index?order='+orderId; }, error: function (json){ ajaxLoader.ajaxStop(); alert(json.message); } }); }, finishMemberPaymentCheckin: function (orderId, eventId){ var withdrawnMethod = $('#withdrawnMethod').val(); if (withdrawnMethod === null || withdrawnMethod === '') { alert('Selecione uma forma de retirada'); return; } ajaxLoader.ajaxStart(); $.ajax({ url: '/payment/finish-payment-member-checkin', data: {eventId: eventId, orderId: orderId}, method: 'post', dataType: 'json', success: function(json){ ajaxLoader.ajaxStop(); window.location.href = '/order/index?order='+orderId; }, error: function (json){ ajaxLoader.ajaxStop(); alert(json.message); } }); }, showImage: function(ticketId, productId) { let src = document.getElementById('thumb_' + productId).src; let name = document.getElementById('name' + ticketId); console.log(ticketId); var modal = new Modal({ title: name.dataset.name, body : '', buttonOK : false, dismissButton : false, cancelText : 'OK', dataKeyboard : false }); modal.show(); }, setUserCpfOnSession(link) { let userCpf = document.getElementById('user_cpf').value; $.ajax({ url: '/payment/set-user-cpf', data: {user_cpf: userCpf}, method: 'post', dataType: 'json', success: function(json) { ajaxLoader.ajaxStop(); window.open(link, '_blank'); }, error: function (json){ ajaxLoader.ajaxStop(); alert(json.message); } }); }, fcSelectAccessMethod: function(accessId) { let accessMethodSelected = accessId; let formAccessMethod = document.getElementsByName('access_method')[0]; this.fcToggleFacialTerm(false); this.fcToggleAccessButton(false); formAccessMethod.value = accessMethodSelected; }, fcToggleAccessButton: function(disabled) { let accessButton = document.getElementById('accessMethodButton'); if(disabled) { accessButton.disabled = true; } else { accessButton.disabled = false; } }, fcToggleFacialTerm: function(show) { let facialTerm = document.getElementById('facial-check'); if(facialTerm === null) return; if(show) { facialTerm.classList.remove("d-none"); this.fcToggleAccessButton(true); document.getElementById('agree_check_facial').checked = false; return; } facialTerm.classList.add("d-none"); }, fcCheckFacialTerm: function(accessId) { let checkTerm = document.getElementById('agree_check_facial'); if(checkTerm.checked) { this.fcToggleAccessButton(false); document.getElementsByName('access_method')[0].value = accessId; return; } this.fcToggleAccessButton(true); }, fcChangePaymentMethod: function(event, paymentFlag) { let formPaymentFlag = paymentFlag; let formPaymentButtonList = document.querySelector('.card_payment--types'); let formPaymentButtons = document.querySelectorAll('.card_payment--types button'); let debitCardFlags = document.getElementById('debit-cardFlags'); let creditCardFlags = document.getElementById('credit-cardFlags'); this.paymentType = paymentFlag; $('[name=card_name]').removeAttr('disabled'); $('[name=cvv]').removeAttr('disabled'); $('[name=expire]').removeAttr('disabled'); $('[name=card_number]').removeAttr('disabled'); if (formPaymentFlag === 'debit') { if(debitCardFlags){ debitCardFlags.classList.remove('d-none'); } if(creditCardFlags){ creditCardFlags.classList.add('d-none'); } this.removeInstallments(); } else if (formPaymentFlag === 'credit') { if(creditCardFlags){ creditCardFlags.classList.remove('d-none'); } if(debitCardFlags){ debitCardFlags.classList.add('d-none'); } } formPaymentButtons.forEach((e) => { e.classList.remove('ativo'); }) formPaymentButtonList.classList.add('active'); if( event ) { event.target.classList.add('ativo'); } $('.bandeiras img').removeClass('focus'); $('.bandeiras img').removeClass('fc'); // Atualiza form document.getElementById('card_selected_type').value = formPaymentFlag; // this.disableForm(); // onCheckout(); // // Trigger de bandeira, atualiza detecção ao selecionar outro tipo const inputCardNumber = document.getElementById('card_number'); payments.detectCardType(inputCardNumber.value); }, fcGetInstallments: function(orderId, methodId) { let thisObject = this; this.paymendMethod = methodId $.ajax({ url: '/payment/get-installments?method='+methodId+'&orderId='+orderId, method: 'get', dataType: 'json', success: function(json) { ajaxLoader.ajaxStop(); if(json.installments > 0){ thisObject.addInstallments(json.installments, json.installmentsDiscount); } else { thisObject.removeInstallments(); } } }); }, fcSetPaymentMethod: function(methodId, orderId) { $('.bandeiras img').removeClass('focus'); $('.bandeiras img').addClass('new'); $('#payment-method-'+methodId).addClass('focus'); let thisObject = this; if(methodId == '') return; let formAccessMethod = document.getElementsByName('access_method')[0].value; let formPaymentMethod = document.getElementsByName('payment_method')[0]; if ($('#card_number').attr("disabled") != 'disabled') this.disableForm(); ajaxLoader.ajaxStart(); $.ajax({ url: '/payment/set-payment-method?order='+orderId, data: {method: methodId}, method: 'post', dataType: 'json', success: function(json) { ajaxLoader.ajaxStop(); if (methodId === 44) { window.location.href = `${window.location.origin}/payment/pix?order=${orderId}&access-method=${formAccessMethod}`; } else if (methodId === 48) { window.location.href = `${window.location.origin}/payment/view-cashback?order=${orderId}&access-method=${formAccessMethod}`; } else { formPaymentMethod.value = methodId; thisObject.fcGetInstallments(orderId, methodId); thisObject.removeDisabledForm(); } } }); }, // FC4 change Card Flag allPaymentMethods: undefined, flagElement: undefined, flagDefaultIcon: undefined, baseUrlCdn: undefined, timer: undefined, flags: { credit: [ { id: 5, name: 'amex', regex: /^3[47]\d{13,14}$/, }, { id: 18, name: 'discover', regex: /^(?:6011\d{12})|(?:65\d{14})$/, }, { id: 14, name: 'elo', regex: /^401178|^401179|^431274|^438935|^451416|^457393|^457631|^457632|^504175|^627780|^636297|^636369|^636368|^(506699|5067[0-6]\d|50677[0-8])|^(50900\d|5090[1-9]\d|509[1-9]\d{2})|^65003[1-3]|^(65003[5-9]|65004\d|65005[0-1])|^(65040[5-9]|6504[1-3]\d)|^(65048[5-9]|65049\d|6505[0-2]\d|65053[0-8])|^(65054[1-9]|6505[5-8]\d|65059[0-8])|^(65070\d|65071[0-8])|^65072[0-7]|^(65090[1-9]|65091\d|650920)|^(65165[2-9]|6516[6-7]\d)|^(65500\d|65501\d)|^(65502[1-9]|6550[3-4]\d|65505[0-8])|^(65092[1-9]|65097[0-8])/, }, { id: 36, name: 'hipercard', regex: /^(606282\d{10}(\d{3})?)|(3841\d{15})$/, }, { id: 3, name: 'mastercard', regex: /^5[1-5]\d{14}$|^2(?:2(?:2[1-9]|[3-9]\d)|[3-6]\d\d|7(?:[01]\d|20))\d{12}$/, }, { id: 2, name: 'visa', regex: /^(?!504175|506699|5067|509|6500|6501|4011(78|79)|43(1274|8935)|45(1416|7393|763(1|2))|50(4175|6699|67[0-6][0-9]|677[0-8]|9[0-8][0-9]{2}|99[0-8][0-9]|999[0-9])|627780|63(6297|6368|6369)|65(0(0(3([1-3]|[5-9])|4([0-9])|5[0-1])|4(0[5-9]|[1-3][0-9]|8[5-9]|9[0-9])|5([0-2][0-9]|3[0-8]|4[1-9]|[5-8][0-9]|9[0-8])|7(0[0-9]|1[0-8]|2[0-7])|9(0[1-9]|[1-6][0-9]|7[0-8]))|16(5[2-9]|[6-7][0-9])|50(0[0-9]|1[0-9]|2[1-9]|[3-4][0-9]|5[0-8])))4[0-9]{12}(?:[0-9]{3})?$/ }, ], debit: [ { id: 15, name: 'elo', regex: /^401178|^401179|^431274|^438935|^451416|^457393|^457631|^457632|^504175|^627780|^636297|^636369|^636368|^(506699|5067[0-6]\d|50677[0-8])|^(50900\d|5090[1-9]\d|509[1-9]\d{2})|^65003[1-3]|^(65003[5-9]|65004\d|65005[0-1])|^(65040[5-9]|6504[1-3]\d)|^(65048[5-9]|65049\d|6505[0-2]\d|65053[0-8])|^(65054[1-9]|6505[5-8]\d|65059[0-8])|^(65070\d|65071[0-8])|^65072[0-7]|^(65090[1-9]|65091\d|650920)|^(65165[2-9]|6516[6-7]\d)|^(65500\d|65501\d)|^(65502[1-9]|6550[3-4]\d|65505[0-8])|^(65092[1-9]|65097[0-8])/, }, { id: 7, name: 'maestro', regex: /^(5[1-5]\d{14}|2(?:2(?:2[1-9]|[3-9]\d)|[3-6]\d\d|7(?:[01]\d|20))\d{12}|(?:5[0678]\d\d|6304|6390|67\d\d)\d{8,15}|(5[1-5]\d{4}|677189)\d{10})$/, }, { id: 6, name: 'visaelectron', regex: /^(?!504175|506699|5067|509|6500|6501|4011(78|79)|43(1274|8935)|45(1416|7393|763(1|2))|50(4175|6699|67[0-6][0-9]|677[0-8]|9[0-8][0-9]{2}|99[0-8][0-9]|999[0-9])|627780|63(6297|6368|6369)|65(0(0(3([1-3]|[5-9])|4([0-9])|5[0-1])|4(0[5-9]|[1-3][0-9]|8[5-9]|9[0-9])|5([0-2][0-9]|3[0-8]|4[1-9]|[5-8][0-9]|9[0-8])|7(0[0-9]|1[0-8]|2[0-7])|9(0[1-9]|[1-6][0-9]|7[0-8]))|16(5[2-9]|[6-7][0-9])|50(0[0-9]|1[0-9]|2[1-9]|[3-4][0-9]|5[0-8])))4[0-9]{12}(?:[0-9]{3})?$/ }, ] }, setPaymentMethodsFlags: function(debit, credit, baseUrl) { debit = this.addFlagTypeToMethods('debit', debit); if(credit != null){ credit = this.addFlagTypeToMethods('credit', credit); debit.push(...credit); } this.allPaymentMethods = debit; this.baseUrlCdn = baseUrl; this.flagElement = document.getElementById('flagImg'); this.flagDefaultIcon = document.getElementById('flagDefaultIcon'); thisObject = this; const inputCardNumber = document.getElementById('card_number'); inputCardNumber.addEventListener('keyup', (e) => { clearTimeout(thisObject.timer); thisObject.timer = setTimeout(() => { payments.detectCardType(inputCardNumber.value); }, 1000); }); inputCardNumber.addEventListener('paste', (e) => { clearTimeout(thisObject.timer); thisObject.timer = setTimeout(() => { payments.detectCardType(inputCardNumber.value); }, 500); }); }, addFlagTypeToMethods: function(type, arr) { for (let i = 0; i < arr.length; i++) { if(!arr[i].methods || !Array.isArray(arr[i].methods)) { arr[i].methods = [] } arr[i].methods.push(type) } return arr; }, detectCardType: function(number) { let flags = this.flags; // const tooltip = bootstrap.Tooltip.getOrCreateInstance(document.getElementById('flagDefaultIcon')) if(number.length > 3){ let cardNumber = number.replace(/ /g,''); let flagId = ''; let flagTypeArr = flags[this.paymentType]; for(var key in flagTypeArr) { if(flagTypeArr[key].regex.test(cardNumber)) { flagId = flagTypeArr[key].id; } } if (flagId !== '') { this.setFlagPaymentMethod(flagId); // tooltip.hide(); this.toggleTooltip(false); return; } // tooltip.hide(); this.toggleTooltip(false); if(number.length > 10 && flagId == ''){ console.log('Bandeira não disponível'); // tooltip.show(); this.toggleTooltip(true); $("#submit-payment").attr('disabled', true); } this.toggleFlagImg(false); }else{ // tooltip.hide(); this.toggleTooltip(false); $("#submit-payment").attr('disabled', true); } }, toggleTooltip: function(isShow) { const tooltip = bootstrap.Tooltip.getOrCreateInstance(document.getElementById('flagDefaultIcon')); if (isShow) { tooltip.show(); } else { tooltip.hide(); } }, setFlagPaymentMethod: function(flagId) { $("#submit-payment").attr('disabled', false); let flagTypeObject = this.allPaymentMethods.find(el => el.fop_codigo === `${flagId}`); if(flagTypeObject) { $('#payment_method').val(flagTypeObject.fop_codigo); this.fcGetInstallments($('#order').val(), flagTypeObject.fop_codigo); this.toggleFlagImg(true, flagTypeObject.fop_imagem) } else { $('#payment_method').val('') this.toggleFlagImg(false) this.toggleTooltip(true); } }, toggleFlagImg: function(hasFlag, imgId = '') { if(hasFlag){ this.flagElement.setAttribute('src', `${this.baseUrlCdn}${imgId}`); this.flagElement.classList.remove('d-none'); this.flagDefaultIcon.classList.add('d-none') } else { this.flagElement.classList.add('d-none'); this.flagDefaultIcon.classList.remove('d-none') } }, }; let expire = $('#expire'); expire.on('change', () => { let expVal = expire.val(); let expValues = expVal.split('/'); let date_year = new Date(); let year = date_year.getFullYear().toString(); let yearSliced = year.slice(-2); if(expValues[0] > 12){ toastr.error('Insira um mês valido'); } if(expValues[1] < yearSliced){ toastr.error('Ano menor que o ano atual') } }); var payments = new payments();