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();