class JSpage {
static ALL = class {
static Config() {
LINKS.defineAll();
LAST.executar();
}
}
static HOME = class {
static ConfigInicial() { }
static Config() {
LINKS.defineAll();
}
}
static EXEMPLO = class {
static ConfigInicial() { }
static Config() { }
static filtraTabela() { }
static afterLoadTabela() { }
static NovoItem() { }
static AfterGetData() { }
static ValidaForm(continua) {
continua();
}
static ClickItem() {
}
static AfterSave(res) {
}
}
static CHECKOUT = class {
static Config() {
CESTO.inicio();
}
static EXPRESS = class {
static Config() {
CESTO_EXPRESS.inicio();
}
}
}
static CONSENT = class {
static ConfigInicial() { }
}
static CONDICOES = class {
static Config() {
FUNCOES.GET('/terms', null, function (res) {
$('#main-content').html(res.texto);
var notas_rodape = {
pt: '',
en: 'The terms and conditions have been automatically translated, with the Portuguese version prevailing over any other language.',
es: 'Los términos y condiciones han sido traducidos automáticamente, prevaleciendo la versión en portugués sobre cualquier otro idioma.'
};
$('#nota').html(notas_rodape[lang] || notas_rodape['pt']);
});
}
}
static TERMOS = class {
static Config() {
FUNCOES.GET('/terms/' + itemID, null, function (res) {
$('.termo').html(res.titulo[lang]);
$('#main-content').html(res.texto);
var nota_topo = {
pt: 'Esta informação é parte integrante da "Informação pré-contratual / Condições gerais de utilização e de venda" que pode consultar na totalidade aqui.',
en: 'This information is an integral part of the "Pre-contractual Information / General Terms of Use and Sale" which can be consulted in full here.',
es: 'Esta información es parte integrante de la "Información precontractual / Condiciones generales de uso y venta" que puede consultar en su totalidad aquí.'
};
$('#nota-topo').html(nota_topo[lang] || nota_topo['pt']);
var notas_rodape = {
pt: '',
en: 'The terms and conditions have been automatically translated, with the Portuguese version prevailing over any other language.',
es: 'Los términos y condiciones han sido traducidos automáticamente, prevaleciendo la versión en portugués sobre cualquier otro idioma.'
};
$('#nota').html(notas_rodape[lang] || notas_rodape['pt']);
});
}
}
static MY = class {
static Config() {
console.log('---> CLIENTS -> Config');
CLIENT_AREA.inicio();
}
static ORDERS = class {
static ConfigInicial() { }
static Config() {
CLIENT_AREA.orders();
}
}
static ORDER = class {
static Config() {
CLIENT_AREA.order();
}
}
static INFO = class {
static Config() {
CLIENT_AREA.info();
}
}
static DOCS = class {
static Config() {
CLIENT_AREA.docs();
}
}
static FAV = class {
static Config() {
CLIENT_AREA.fav();
}
}
static RGPD = class {
static Config() {
CLIENT_AREA.rgpd();
}
}
static MSG = class {
static Config() {
CLIENT_AREA.msgs();
}
}
static POINTS = class {
static Config() {
CLIENT_AREA.points();
}
static DETAILS = class {
static Config() {
POINTS.details();
}
}
static SUBSCRIBE = class {
static Config() {
POINTS.subscribe();
}
}
}
}
static RGPD = class {
static Config() {
RGPD.confirmRGPD();
}
}
static CART = class {
static ConfigInicial() { }
static Config() { }
}
static PRODUCT = class {
static ConfigInicial() {
console.log('---> PRODUCT -> ConfigInicial');
}
static Config() {
console.log('---> PRODUCT -> Config');
}
}
static PRODUCTS = class {
static ConfigInicial() {
console.log('---> CATEGORIA -> ConfigInicial');
}
static Config() {
CATEGORIAS.Carrega();
}
}
static CONTACTS = class {
static Config() {
console.log('---> CONTACTS -> Config');
FUNCOES.GET('/site/conteudo?nome=principal&url=' + link_atual, null, function (res) {
$('#main-content').html(TEMPLATE.MENU.conteudo(res));
});
}
}
static REVIEWS = class {
static ConfigInicial() {
console.log('---> REVIEWS -> ConfigInicial');
}
static Config() {
console.log('---> REVIEWS -> Config');
}
}
static SE = class {
static Config() {
FUNCOES.GET('/site/conteudo?nome=principal&url=' + link_atual, null, function (dados_se) {
let contentudo = TEMPLATE.MENU.conteudo(dados_se);
let nome = TEMPLATE.MENU.nome(dados_se);
$('#main-content').html(contentudo);
let _html_breadcrumb = `
");
return;
}
let dados = {
'direito': $("#direito").val(),
'obs': $("#obs").val(),
'password': $("#confirm_password").val()
};
FUNCOES.POST('/rgpd/send', dados, '#resultado_rgpd', function (res) {
if (res == 'OK') {
$(".direitos").hide();
$("#direito").val("");
$("#confirm_password").val("");
$("#obs").val("");
$(".radio input").removeAttr("checked");
let _msg = {
'pt': 'O seu pedido foi submetido com sucesso! Consulte o seu email para confirmar o seu pedido.',
'en': 'Your request has been successfully submitted! Check your email to confirm your request.',
'es': '¡Su solicitud ha sido enviada con éxito! Consulte su correo electrónico para confirmar su solicitud.'
};
$("#resultado_rgpd").html("
" + _msg[lang] + "
");
}
else {
FUNCOES.MostraErros(null, '#resultado_regpd', res, null);
}
});
}
static confirmRGPD() {
console.log('confirmRGPD');
let c = FUNC.getParameterByName('c');
FUNCOES.GET('/rgpd/confirm?c=' + c, '#erroRGPD', function (res) {
if (res == "OK") {
$('#OK').removeClass('hidden');
}
else {
$('#OK').addClass('hidden');
FUNCOES.MostraErros(null, '#erroRGPD', res, null);
}
});
}
static consentimentoRGPD(c) {
if ($("#rgpd-check").is(':checked')) {
if ($('#news_confirm').val() == 3) {
$("#resultado_rgpd").html('' +
TRADUZ.traduzir('pretende_subscrever_newsletter') + '');
}
else {
RGPD.GravaConsentimentoRGPD(c);
}
}
else {
$("#resultado_rgpd").html('' +
TRADUZ.traduzir('aceitar_politica_e_condicoes') + '');
}
}
static GravaConsentimentoRGPD(c) {
$.ajax({
url: "/rgpd.ashx?accao=gravaRGPD",
data: {
'c': c,
'news': $('#news_confirm').val()
},
type: "POST",
dataType: 'text',
async: false,
success: function (data) {
resultado = data;
if (resultado == "OK") {
//se existir uma query string 'url' de redirecionamento, redireciona para lá
if (location.search.indexOf("url=") > -1) {
var url = location.search.split("url=")[1];
window.location.href = decodeURIComponent(url);
}
$("#form_RGPD").hide();
$("#msg_resultado").show();
}
else {
if (resultado == "NOK") {
$("#resultado_rgpd").html("
Máximo de puntos que puedes utilizar en este pedido: {pontos_que_pode_usar}.
Puntos a canjear
Descuento
- € {desconto_obtido}
`;
let _html1_en = `
Printflow Points
With this order you will earn +{pontos_novos} points.
Available points: {pontos_disponiveis} Redeem points
{destaque}
Printflow Points
Available points
{pontos_disponiveis}
Maximum points you can use in this order: {pontos_que_pode_usar}.
Points to redeem
Discount
- € {desconto_obtido}
`;
let _html2 = `
Pontos Printflow
Com esta encomenda irá ganhar +{pontos_novos} pontos.
Irá descontar: {pontos_usados} pontos
{destaque}
Pontos Printflow
Pontos disponíveis
{pontos_disponiveis}
Máximo de Pontos que pode utilizar nesta encomenda: {pontos_que_pode_usar}.
Pontos a Descontar
Desconto
- € {desconto_obtido}
`;
let _html2_es = `
Puntos Printflow
Con este pedido ganarás +{pontos_novos} puntos.
Vas a canjear: {pontos_usados} puntos
{destaque}
Puntos Printflow
Puntos disponibles
{pontos_disponiveis}
Máximo de puntos que puedes utilizar en este pedido: {pontos_que_pode_usar}.
Puntos a canjear
Descuento
- € {desconto_obtido}
`;
let _html2_en = `
Printflow Points
With this order you will earn +{pontos_novos} points.
You will redeem: {pontos_usados} points
{destaque}
Printflow Points
Available points
{pontos_disponiveis}
Maximum points you can use in this order: {pontos_que_pode_usar}.
Points to redeem
Discount
- € {desconto_obtido}
`;
let destaque = '';
if (dados == null) {
if (lang == 'es') {
_html = _html_es;
}
if (lang == 'en') {
_html = _html_en;
}
_html = FUNC.replaceAll(_html, '{pontos_valor}', 0.05);
_html = FUNC.replaceAll(_html, '{pontos_disponiveis}', 0);
_html = FUNC.replaceAll(_html, '{pontos_que_pode_usar}', 0);
_html = FUNC.replaceAll(_html, '{pontos_usados}', 0);
_html = FUNC.replaceAll(_html, '{pontos_novos}', 0);
_html = FUNC.replaceAll(_html, '{destaque}', destaque);
$('#programa-de-pontos').html(_html);
return;
}
if (dados.aderiu != 1) {
if (lang == 'es') {
_html = _html_es;
}
if (lang == 'en') {
_html = _html_en;
}
}
if (dados.aderiu == 1) {
_html = _html1;
if (lang == 'es') {
_html = _html1_es;
}
if (lang == 'en') {
_html = _html1_en;
}
if (dados.newsletter == 0) {
destaque = 'Subscreva a nossa Newsletter e receba já +' + dados.newsletter_pontos + ' pontos. » Subscrever';
if (lang == 'es') {
destaque = 'Suscríbete a nuestra Newsletter y recibe ya +' + dados.newsletter_pontos + ' puntos. » Suscribirse';
}
if (lang == 'en') {
destaque = 'Subscribe to our Newsletter and get +' + dados.newsletter_pontos + ' points right away. » Subscribe';
}
}
else {
destaque = 'Partilhe já o seu link com amigos e ganhe ' + dados.pontos_recomendar + ' pontos extra por cada recomendação. ' + dados.link +
'» Partilhar';
if (lang == 'es') {
destaque = 'Comparte ya tu enlace con amigos y gana ' + dados.pontos_recomendar + ' puntos extra por cada recomendación. ' + dados.link +
'» Compartir';
}
if (lang == 'en') {
destaque = 'Share your link with friends now and earn ' + dados.pontos_recomendar + ' extra points for each recommendation. ' + dados.link +
'» Share';
}
$('#referralLink').val(dados.link);
let _msg = $('#msg_convite').val();
_msg = FUNC.replaceAll(_msg, '{nome}', dados.nome);
_msg = FUNC.replaceAll(_msg, '{link}', dados.link);
$('#msg_convite').val(_msg);
CESTO.FUNC.sharebuttons();
}
if (dados.pontos_usados > 0) {
_html = _html2;
if (lang == 'es') {
_html = _html2_es;
}
if (lang == 'en') {
_html = _html2_en;
}
}
}
_html = FUNC.replaceAll(_html, '{pontos_valor}', dados.pontos_valor);
_html = FUNC.replaceAll(_html, '{pontos_disponiveis}', dados.pontos_disponiveis);
_html = FUNC.replaceAll(_html, '{pontos_que_pode_usar}', dados.pontos_que_pode_usar);
_html = FUNC.replaceAll(_html, '{pontos_usados}', dados.pontos_usados);
_html = FUNC.replaceAll(_html, '{pontos_novos}', dados.pontos_novos);
_html = FUNC.replaceAll(_html, '{destaque}', destaque);
$('#programa-de-pontos').html(_html);
$("#pontos_a_descontar").on("change paste keyup", function () {
CESTO.Pontos.calcularDesconto();
});
CESTO.Pontos.calcularDesconto();
}
static calcularDesconto() {
var a = $("#pontos_a_descontar").val();
var b = $("#pontos_valor").val();
var c = parseFloat(a * b).toFixed(2);
$("#descontoObtido").html(c);
}
static descontar() {
$("#pontosMSG").html("");
let a = $("#pontos_a_descontar").val();
let _dados = { 'valor': a };
CESTO.FUNC.POST('/points/descontar', _dados, '#pontosMSG', function (res) {
FUNC.fechaModal();
CESTO.Load.reloadCesto();
}, function (res) {
console.log(res);
});
}
static anulardescontos() {
let _dados = { 'valor': 0 };
CESTO.FUNC.POST('/points/descontar', _dados, '#pontosMSG', function (res) {
CESTO.Load.reloadCesto();
}, function (res) {
console.log(res);
});
}
static aderir() {
$("#erro_adesao").html('');
if ($("#termos").is(':checked')) {
CESTO.FUNC.GET('/points/aderir', '#erro_adesao', function (res) {
FUNC.fechaModal();
CESTO.Load.reloadCesto();
});
}
else {
let msg = {
erro: true,
msg: {
pt: 'Para aderir ao Programa de Pontos tem de aceitar os Termos e Condições!',
en: 'To join the Points Program you must accept the Terms and Conditions!',
es: 'Para unirse al Programa de Puntos debe aceptar los Términos y Condiciones!'
}
};
CESTO.FUNC.MostraErros('', '#erro_adesao', msg);
}
}
}
static Cupoes = class {
//cupoes
static validarCupao() {
$("#cupaoMSG").html("");
let _data = {
'valor': $("#cupao").val()
};
CESTO.FUNC.POST('/cesto/cupao/valida', _data, '#cupaoMSG', function (res) {
CESTO.Load.reloadCesto();
});
}
static removeCupao() {
CESTO.FUNC.GET('/cesto/cupao/remove', null, function (res) {
CESTO.Load.reloadCesto();
});
}
}
static Newsletter = class {
static subscrevernewsletter() {
$("#newsletter_results").html('');
if ($("#newssubscribe-check").is(':checked')) {
CESTO.Newsletter.subscrevernewsletter1();
} else {
$("#newsletter_results").html('
Para subscrever tem de dar consentimento ao tratamento de dados.
');
}
}
static subscrevernewsletter1() {
CESTO.FUNC.GET('/cli/newsletter/subscrever', '#newsletter_results', function (res) {
FUNC.fechaModal();
CESTO.Load.reloadCesto();
});
}
}
static Menu = class {
static show() {
CESTO.FUNC.GET('/cesto', null, function (res) {
CESTO.cestoDATA = res;
let cesto_n_itens = CESTO.cestoDATA.itens.reduce((total, item) => total + item.quantidade, 0);
let cesto_total = FUNC.FormatEuro(CESTO.cestoDATA.total, 2);
$('.cesto-n-itens').html(cesto_n_itens);
$('.cesto-total').html(cesto_total);
});
}
}
static eventos_checkout() {
let itens = [];
$('#linhasCesto .CartProduct').each(function () {
let price = parseFloat($(this).parent().find('.item_price').html());
price = FUNC.FormatEuro(price, 2);
let item = {
item_id: $(this).parent().find('.item_id').html(),
item_name: $(this).parent().find('.item_name').html(),
price: price,
currency: 'EUR',
quantity: parseInt($(this).parent().find('.item_qde').html())
};
itens.push(item);
});
if (CESTO.etapa == 1) {
try {
GA4.event.begin_checkout(itens);
} catch (error) {
console.error(error);
}
}
if (CESTO.etapa == 4) {
try {
let forma_entrega_nome = $('#entrega_descricao' + CESTO.cestoDATA.formaentrega).html();
GA4.event.add_shipping_info(itens, CESTO.cestoDATA.portes_total, forma_entrega_nome);
}
catch (err) {
console.log(err);
}
}
}
}
if (document.getElementsByTagName) {
let inputElements = document.getElementsByTagName("input");
for (i = 0; inputElements[i]; i++) {
inputElements[i].setAttribute("autocomplete", "xyz");
}
}
/*
function MostraLOG(titulo, mensagem) {
if (CESTO.ativaLOG) {
console.log(titulo, mensagem);
}
}
if (CESTO.ativaLOG == false) {
if (window.location.hostname !== 'localhost') {
console.log = function () { };
}
}
*/
class CESTO_EXPRESS {
static cestoDATA;
static phoneInput;
static updatetel = false;
static inicio() {
console.log('checkout-EXPRESS');
CESTO_EXPRESS.FUNC.aplicaInputsPhone();
CESTO_EXPRESS.FUNC.FuncoesBotoesEModals();
//carrega dados InitialData
CESTO_EXPRESS.Load.loadDataInicial();
CESTO_EXPRESS.eventos();
}
static Load = class {
static loadDataInicial() {
let _data = localStorage.getItem('cestoDATA1');
if (_data) {
CESTO_EXPRESS.cestoDATA = JSON.parse(_data);
}
else {
CESTO_EXPRESS.cestoDATA = {
fa_nome: '',
fa_pais: 'pt',
fa_morada: '',
fa_codpostal: '',
fa_localidade: '',
fa_nif: '',
entrega_igual: true,
entrega_nome: '',
entrega_pais: '',
entrega_morada: '',
entrega_codpostal: '',
entrega_localidade: '',
entrega_tel: '',
formaentrega: 3,
listaformasdeentrega: [],
obs: '',
email: '',
cod: ''
};
localStorage.setItem('cestoDATA1', JSON.stringify(CESTO_EXPRESS.cestoDATA));
}
if (CESTO_EXPRESS.cestoDATA.fa_pais == null) {
CESTO_EXPRESS.cestoDATA.fa_pais = 'Portugal';
}
if (CESTO_EXPRESS.cestoDATA.entrega_pais == null) {
CESTO_EXPRESS.cestoDATA.entrega_pais = 'Portugal';
}
if (CESTO_EXPRESS.cestoDATA.fa_nome == 'CONSUMIDOR FINAL') {
$('#opcoes_faturacao .well').removeClass('active');
$('#fa_consumidor').addClass('active');
}
if (CESTO_EXPRESS.cestoDATA.entrega_igual == true) {
$('#opcoes_entrega .well').removeClass('active');
$('#entrega_igual').addClass('active');
}
else {
if (CESTO_EXPRESS.cestoDATA.formaentrega == 21) {
$('#opcoes_entrega .well').removeClass('active');
$('#entrega_matecamen').addClass('active');
}
}
console.log('loadData');
console.log(CESTO_EXPRESS.cestoDATA);
CESTO_EXPRESS.Load.reloadCesto();
}
static loadCesto() {
console.log('--> LoadCESTOItens ');
let dados = CESTO_EXPRESS.cestoDATA;
CESTO.FUNC.POST('/cesto/express', dados, null,
function (res) {
MostraLOG('99.1 - não deu erro -->', res);
CESTO_EXPRESS.cestoDATA = res;
if (CESTO_EXPRESS.cestoDATA.itens.length == 0) {
window.location.href = '/cesto';
return;
}
CESTO_EXPRESS.Load.loadForm();
}, function (res) {
MostraLOG('99.2 - deu erro -->', res);
});
}
static loadForm() {
console.log('--> loadForm');
CESTO_EXPRESS.Load.loadPaises();
CESTO_EXPRESS.Load.showFormasEntrega();
$('#fa_nome').val(CESTO_EXPRESS.cestoDATA.fa_nome);
$('#fa_pais').val(CESTO_EXPRESS.cestoDATA.fa_pais);
$('#fa_morada').val(CESTO_EXPRESS.cestoDATA.fa_morada);
$('#fa_codpostal').val(CESTO_EXPRESS.cestoDATA.fa_codpostal);
$('#fa_localidade').val(CESTO_EXPRESS.cestoDATA.fa_localidade);
$('#fa_nif').val(CESTO_EXPRESS.cestoDATA.fa_nif);
$('#entrega_nome').val(CESTO_EXPRESS.cestoDATA.entrega_nome);
$('#entrega_pais').val(CESTO_EXPRESS.cestoDATA.entrega_pais);
$('#entrega_morada').val(CESTO_EXPRESS.cestoDATA.entrega_morada);
$('#entrega_codpostal').val(CESTO_EXPRESS.cestoDATA.entrega_codpostal);
$('#entrega_localidade').val(CESTO_EXPRESS.cestoDATA.entrega_localidade);
$('#entrega_tel').val(CESTO_EXPRESS.cestoDATA.entrega_tel);
$('#observacoes').val(CESTO_EXPRESS.cestoDATA.obs);
$('#entrega_email').val(CESTO_EXPRESS.cestoDATA.email);
console.log('--> loadForm ---> FIM');
CESTO_EXPRESS.Itens.showCestoItens();
}
static loadPaises() {
$('.paises').html('');
CESTO_EXPRESS.cestoDATA.paises.ativos.forEach((el) => {
$('.paises').append('');
});
}
static reloadCesto() {
CESTO_EXPRESS.Load.loadCesto();
}
static showFormasEntrega() {
console.log('--> formas_de_entrega ---> ');
let _html = '';
CESTO_EXPRESS.cestoDATA.listaformasdeentrega.forEach((opcao) => {
_html += CESTO_EXPRESS.Load.makeOpcaoHtml(opcao);
});
$('#formas_de_entrega').html(_html);
if (CESTO_EXPRESS.cestoDATA.formaentrega != 0 && CESTO_EXPRESS.cestoDATA.listaformasdeentrega.length > 0) {
//verificar se a forma de entrega existe na lista
let existe = false;
CESTO_EXPRESS.cestoDATA.listaformasdeentrega.forEach((opcao) => {
if (opcao.id == CESTO_EXPRESS.cestoDATA.formaentrega) {
existe = true;
}
});
if (existe == false) {
CESTO_EXPRESS.cestoDATA.formaentrega = CESTO_EXPRESS.cestoDATA.listaformasdeentrega[0].id;
}
$('#entrega' + CESTO_EXPRESS.cestoDATA.formaentrega).addClass('active');
}
console.log('--> formas_de_entrega ---> FIM');
}
static makeOpcaoHtml(opcao) {
let _logo = 'local.png';
if (opcao.condicoes.toLowerCase().includes('transportadora')) {
_logo = 'transportadora.png';
}
if (opcao.condicoes.toLowerCase().includes('correos')) {
_logo = 'correos.png';
}
if (opcao.condicoes.toLowerCase().includes('ctt')) {
_logo = 'ctt.png';
}
let custo = opcao.valor;
custo = opcao.valor / (1 + (opcao.iva / 100)) * (1 + (CESTO_EXPRESS.cestoDATA.iva / 100));
custo = '€ ' + FUNC.FormatEuro(custo) + '';
if (opcao.valor == 0) {
custo = '' + TRADUZ.traduzir('mediante_orcamento') + '';
}
if (CESTO_EXPRESS.cestoDATA.portes_gratis) {
custo = '' + TRADUZ.traduzir('portes_gratis') + '';
}
let _descricao = opcao.descricao;
let _condicoes = opcao.condicoes;
if (lang.toLowerCase() == 'es') {
_descricao = opcao.descricao_ES;
_condicoes = opcao.condicoes_ES;
}
if (lang.toLowerCase() == 'en') {
_descricao = opcao.descricao_EN;
_condicoes = opcao.condicoes_EN;
}
let _img = '';
let _html = '
' +
'
' + _condicoes + '
' + custo + '
' +
'
' + _descricao + '
' +
'
' + _img + '
' +
'
';
return _html;
}
static changeOpcaoEntrega(id) {
CESTO_EXPRESS.cestoDATA.formaentrega = id;
$('#formas_de_entrega .well').removeClass('active');
$('#entrega' + id).addClass('active');
CESTO_EXPRESS.Load.reloadCesto();
}
}
//Itens do cesto - COMPLETO
static Itens = class {
static showCestoItens() {
MostraLOG('02.02 - showCestoItens -->', CESTO_EXPRESS.cestoDATA.itens);
let res = '';
CESTO_EXPRESS.cestoDATA.itens.forEach((prod) => {
res += CESTO.Itens.makeProdHtml(prod);
});
$('#linhasCesto').html(res);
$('#linhasCesto1').html(res);
$('#total_artigos').html('€ ' + FUNC.FormatEuro(CESTO_EXPRESS.cestoDATA.total_artigos));
$('#total_artigos1').html('€ ' + FUNC.FormatEuro(CESTO_EXPRESS.cestoDATA.total_artigos));
$('#total_portes').html('€ ' + FUNC.FormatEuro(CESTO_EXPRESS.cestoDATA.portes_total));
$('#total_portes1').html('€ ' + FUNC.FormatEuro(CESTO_EXPRESS.cestoDATA.portes_total));
$('#total_descontos').html('€ ' + FUNC.FormatEuro(CESTO_EXPRESS.cestoDATA.total_descontos));
$('#total_descontos1').html('€ ' + FUNC.FormatEuro(CESTO_EXPRESS.cestoDATA.total_descontos));
$('#total').html('€ ' + FUNC.FormatEuro(CESTO_EXPRESS.cestoDATA.total));
$('#total1').html('€ ' + FUNC.FormatEuro(CESTO_EXPRESS.cestoDATA.total));
$('#resumo_total').html('€ ' + FUNC.FormatEuro(CESTO_EXPRESS.cestoDATA.total));
$('.iva-incluido').html(CESTO_EXPRESS.cestoDATA.ivaIncluido[LINGUA.atual()]);
CESTO_EXPRESS.Save.saveData();
}
}
static Save = class {
static saveData() {
CESTO_EXPRESS.cestoDATA.fa_nome = $('#fa_nome').val();
CESTO_EXPRESS.cestoDATA.fa_pais = $('#fa_pais').val();
CESTO_EXPRESS.cestoDATA.fa_morada = $('#fa_morada').val();
CESTO_EXPRESS.cestoDATA.fa_codpostal = $('#fa_codpostal').val();
CESTO_EXPRESS.cestoDATA.fa_localidade = $('#fa_localidade').val();
CESTO_EXPRESS.cestoDATA.fa_nif = $('#fa_nif').val();
CESTO_EXPRESS.cestoDATA.entrega_nome = $('#entrega_nome').val();
CESTO_EXPRESS.cestoDATA.entrega_pais = $('#entrega_pais').val();
CESTO_EXPRESS.cestoDATA.entrega_morada = $('#entrega_morada').val();
CESTO_EXPRESS.cestoDATA.entrega_codpostal = $('#entrega_codpostal').val();
CESTO_EXPRESS.cestoDATA.entrega_localidade = $('#entrega_localidade').val();
if (CESTO_EXPRESS.updatetel) {
let entrega_tel = FUNC.replaceAll(CESTO_EXPRESS.phoneInput.getNumber(), '+351', '');
entrega_tel = FUNC.replaceAll(entrega_tel, ' ', '');
CESTO_EXPRESS.cestoDATA.entrega_tel = entrega_tel;
}
CESTO_EXPRESS.cestoDATA.obs = $('#observacoes').val();
CESTO_EXPRESS.cestoDATA.email = $('#entrega_email').val();
CESTO_EXPRESS.cestoDATA.cod = $('#reg-cod-seguranca').val();
localStorage.setItem('cestoDATA1', JSON.stringify(CESTO_EXPRESS.cestoDATA));
CESTO_EXPRESS.Validar.validarForm();
}
}
static FUNC = class {
static aplicaInputsPhone() {
console.log('vai aplicar InputsPhone');
let phoneInputField2 = document.querySelector("#entrega_tel");
CESTO_EXPRESS.phoneInput = window.intlTelInput(phoneInputField2, {
initialCountry: "pt",
preferredCountries: ["pt", "es"],
utilsScript: "https://cdn.pladon.pt/js/intlTelInput/utils.js",
});
// Adiciona evento input para filtrar apenas algarismos e o sinal de +
phoneInputField2.addEventListener('input', function () {
this.value = this.value.replace(/[^\d+]/g, '');
});
console.log('aplicou InputsPhone');
}
static FuncoesBotoesEModals() {
}
}
static eventos() {
$('#fa_dados').on('click', function () {
$('#opcoes_faturacao .well').removeClass('active');
$('#fa_dados').addClass('active');
if (CESTO_EXPRESS.cestoDATA.fa_nome == 'CONSUMIDOR FINAL') {
CESTO_EXPRESS.cestoDATA.fa_nome = '';
CESTO_EXPRESS.Load.reloadCesto();
$('#fa_nome').focus();
}
});
$('#fa_consumidor').on('click', function () {
$('#opcoes_faturacao .well').removeClass('active');
$('#fa_consumidor').addClass('active');
CESTO_EXPRESS.cestoDATA.fa_nome = 'CONSUMIDOR FINAL';
CESTO_EXPRESS.cestoDATA.fa_pais = 'Portugal';
CESTO_EXPRESS.cestoDATA.fa_morada = '';
CESTO_EXPRESS.cestoDATA.fa_codpostal = '';
CESTO_EXPRESS.cestoDATA.fa_localidade = '';
CESTO_EXPRESS.cestoDATA.fa_nif = '';
$('#opcoes_entrega .well').removeClass('active');
$('#entrega_dados').addClass('active');
if (CESTO_EXPRESS.cestoDATA.entrega_igual) {
CESTO_EXPRESS.cestoDATA.entrega_igual = false;
}
CESTO_EXPRESS.Load.reloadCesto();
});
$('#entrega_dados').on('click', function () {
$('#opcoes_entrega .well').removeClass('active');
$('#entrega_dados').addClass('active');
CESTO_EXPRESS.cestoDATA.formaentrega = -1;
CESTO_EXPRESS.cestoDATA.entrega_igual = false;
CESTO_EXPRESS.Load.reloadCesto();
});
$('#entrega_igual').on('click', function () {
$('#opcoes_entrega .well').removeClass('active');
$('#entrega_igual').addClass('active');
CESTO_EXPRESS.cestoDATA.formaentrega = -1;
CESTO_EXPRESS.cestoDATA.entrega_igual = true;
CESTO_EXPRESS.Load.reloadCesto();
});
$('#entrega_matecamen').on('click', function () {
$('#opcoes_entrega .well').removeClass('active');
$('#entrega_matecamen').addClass('active');
CESTO_EXPRESS.cestoDATA.formaentrega = 21;
CESTO_EXPRESS.cestoDATA.entrega_igual = false;
CESTO_EXPRESS.Load.reloadCesto();
});
$('#area .form-control').on('change keyup click', function () {
if ($(this).attr("id") == 'entrega_tel') {
if ($(this).val() == '00') {
$(this).val('+');
}
CESTO_EXPRESS.updatetel = true;
}
else {
CESTO_EXPRESS.updatetel = false;
}
CESTO_EXPRESS.Save.saveData();
});
$("#signup-check").on('change', function () {
CESTO_EXPRESS.Save.saveData();
});
$('#entrega_pais,#entrega_codpostal').on('change', function () {
CESTO_EXPRESS.Load.reloadCesto();
});
$('#fa_pais,#fa_codpostal,#fa_nif').on('change', function () {
CESTO_EXPRESS.Load.reloadCesto();
});
$('#btcontinuar').on('click', function () {
CESTO_EXPRESS.confirmorder();
});
FUNC.setInputFilter(document.getElementById("fa_codpostal"), function (value) {
return /^\d*\-?\d*$/.test(value);
});
FUNC.setInputFilter(document.getElementById("entrega_codpostal"), function (value) {
return /^\d*\-?\d*$/.test(value);
});
FUNC.setInputFilter(document.getElementById("entrega_tel"), function (value) {
return /^\d*\+?\d*$/.test(value);
});
}
static Validar = class {
static validarCP(cp_in) {
var pattern = /[0-9]{4}\-[0-9]{3}/;
return pattern.test(cp_in);
}
static validarCodigoPostalEspanholPeninsula(codigoPostal) {
// Verificar se o código postal tem 5 dígitos
if (!/^\d{5}$/.test(codigoPostal)) {
return false;
}
// Obter os dois primeiros dígitos
const primeirosDigitos = parseInt(codigoPostal.substring(0, 2));
// Verificar se os dois primeiros dígitos correspondem a províncias da península
if (primeirosDigitos >= 1 && primeirosDigitos <= 52 && primeirosDigitos !== 7 && primeirosDigitos !== 35 && primeirosDigitos !== 38) {
return true; // Código postal válido para a península
} else {
return false; // Código postal inválido (Ilhas Baleares, Canárias ou outras províncias)
}
}
//validar Form
static validarForm() {
let teste = CESTO_EXPRESS.Validar.validar();
console.log('validarForm', teste);
if (teste != 'OK') {
$('#msg_rodape').html('
' + teste[LINGUA.atual()] + '
');
$('#btcontinuar').prop('disabled', true);
}
else {
$('#msg_rodape').html('');
$('#btcontinuar').prop('disabled', false);
}
}
static validar() {
//se consumidor final e sem morada
if (CESTO_EXPRESS.cestoDATA.fa_nome == 'CONSUMIDOR FINAL' && CESTO_EXPRESS.cestoDATA.entrega_igual == true) {
return {
pt: "Tem que definir uma morada de entrega.",
es: "Debe definir una dirección de entrega.",
en: "You must define a delivery address."
};
}
let nif_ok = false;
$('.form-control').removeClass('invalido');
if (CESTO_EXPRESS.cestoDATA.fa_nome != 'CONSUMIDOR FINAL') {
if (CESTO_EXPRESS.cestoDATA.fa_nome.length < 3) {
$('#fa_nome').addClass('invalido');
return {
pt: "Tem que definir o nome de faturação.",
es: "Debe definir el nombre de facturación.",
en: "You must define the billing name."
};
}
if (CESTO_EXPRESS.cestoDATA.fa_morada.length < 3) {
$('#fa_morada').addClass('invalido');
return {
pt: "Tem que definir a morada de faturação.",
es: "Debe definir la dirección de facturación.",
en: "You must define the billing address."
};
}
if (CESTO_EXPRESS.cestoDATA.fa_pais == 'Portugal') {
if (CESTO_EXPRESS.Validar.validarCP(CESTO_EXPRESS.cestoDATA.fa_codpostal) == false) {
$('#fa_codpostal').addClass('invalido');
return {
pt: "Tem que indicar um código postal de faturação.",
es: "Debe indicar un código postal de facturación.",
en: "You must enter a billing postal code."
};
}
}
if (CESTO_EXPRESS.cestoDATA.fa_pais == 'Espanha') {
if (CESTO_EXPRESS.Validar.validarCodigoPostalEspanholPeninsula(CESTO_EXPRESS.cestoDATA.fa_codpostal) == false) {
$('#fa_codpostal').addClass('invalido');
return {
pt: "Tem que indicar um código postal de faturação.",
es: "Debe indicar un código postal de facturación.",
en: "You must enter a billing postal code."
};
}
}
if (CESTO_EXPRESS.cestoDATA.fa_localidade.length < 2) {
$('#fa_localidade').addClass('invalido');
return {
pt: "Tem que definir a localidade de faturação.",
es: "Debe definir la localidad de facturación.",
en: "You must define the billing locality."
};
}
if (CESTO_EXPRESS.cestoDATA.fa_nif != '' && CESTO_EXPRESS.cestoDATA.fa_pais == 'Portugal') {
if (CESTO_EXPRESS.cestoDATA.fa_nif.length != 9) {
$('#fa_nif').addClass('invalido');
return {
pt: "Nº de contribuinte incorreto.",
es: "Número de contribuyente incorrecto.",
en: "Incorrect tax number."
};
}
else {
if (CESTO.FUNC.validaContribuinte(CESTO_EXPRESS.cestoDATA.fa_nif) == false) {
$('#fa_nif').addClass('invalido');
return {
pt: "Nº de contribuinte incorreto.",
es: "Número de contribuyente incorrecto.",
en: "Incorrect tax number."
};
}
else {
$('#fa_nif').removeClass('invalido');
nif_ok = true;
}
}
}
}
if (CESTO_EXPRESS.cestoDATA.entrega_igual == false) {
if (CESTO_EXPRESS.cestoDATA.entrega_nome.length < 3) {
$('#entrega_nome').addClass('invalido');
return {
pt: "Tem que indicar o nome de entrega.",
es: "Debe indicar el nombre de entrega.",
en: "You must enter the delivery name."
};
}
if (CESTO_EXPRESS.cestoDATA.entrega_morada.length < 3) {
$('#entrega_morada').addClass('invalido');
return {
pt: "Tem que definir a morada de entrega.",
es: "Debe definir la dirección de entrega.",
en: "You must define the delivery address."
};
}
if (CESTO_EXPRESS.cestoDATA.entrega_pais == 'Portugal') {
if (CESTO_EXPRESS.Validar.validarCP(CESTO_EXPRESS.cestoDATA.entrega_codpostal) == false) {
$('#entrega_codpostal').addClass('invalido');
return {
pt: "Tem que indicar um código postal de entrega.",
es: "Debe indicar un código postal de entrega.",
en: "You must enter a delivery postal code."
};
}
}
if (CESTO_EXPRESS.cestoDATA.entrega_pais == 'Espanha') {
if (CESTO_EXPRESS.Validar.validarCodigoPostalEspanholPeninsula(CESTO_EXPRESS.cestoDATA.entrega_codpostal) == false) {
$('#entrega_codpostal').addClass('invalido');
return {
pt: "Tem que indicar um código postal de entrega.",
es: "Debe indicar un código postal de entrega.",
en: "You must enter a delivery postal code."
};
}
}
if (CESTO_EXPRESS.cestoDATA.entrega_localidade.length < 2) {
$('#entrega_localidade').addClass('invalido');
return {
pt: "Tem que definir a localidade de entrega.",
es: "Debe definir la localidad de entrega.",
en: "You must define the delivery locality."
};
}
}
if (CESTO_EXPRESS.cestoDATA.entrega_tel.length < 9) {
$('#entrega_tel').addClass('invalido');
return {
pt: "Por favor introduza o seu nº de telemóvel.",
es: "Por favor introduzca su número de móvil.",
en: "Please enter your mobile number."
};
}
let email = $('#entrega_email').val();
if (email.length < 5) {
$('#entrega_email').addClass('invalido');
return {
pt: "Por favor introduza o seu email.",
es: "Por favor introduzca su email.",
en: "Please enter your email."
};
}
const validateEmail = (email) => {
return email.match(
/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
);
};
if (!validateEmail(email)) {
$('#entrega_email').addClass('invalido');
return {
pt: "Por favor introduza um email válido.",
es: "Por favor introduzca un email válido.",
en: "Please enter a valid email."
};
}
if (!$('#signup-check').is(":checked")) {
return {
pt: "Tem que aceitar a nossa política de privacidade e condições gerais.",
es: "Debe aceptar nuestra política de privacidad y condiciones generales.",
en: "You must accept our privacy policy and general conditions."
};
}
if (CESTO_EXPRESS.cestoDATA.cod.length != 5) {
$('#reg-cod-seguranca').addClass('invalido');
return {
pt: "Tem que preencher o código de segurança.",
es: "Debe completar el código de seguridad.",
en: "You must fill in the security code."
};
}
return "OK";
}
}
static confirmorder() {
let validacao = CESTO_EXPRESS.Validar.validar();
if (validacao == 'OK') {
CESTO_EXPRESS.order();
}
else {
CESTO_EXPRESS.erroContinuar(validacao);
}
}
static order() {
$('#load1').addClass('active');
$('#btcontinuar').prop('disabled', true);
let encomenda = CESTO_EXPRESS.cestoDATA;
if (CESTO_EXPRESS.cestoDATA.entrega_igual) {
encomenda.entrega_nome = CESTO_EXPRESS.cestoDATA.fa_nome;
encomenda.entrega_morada = CESTO_EXPRESS.cestoDATA.fa_morada;
encomenda.entrega_codpostal = CESTO_EXPRESS.cestoDATA.fa_codpostal;
encomenda.entrega_localidade = CESTO_EXPRESS.cestoDATA.fa_localidade;
encomenda.entrega_pais = CESTO_EXPRESS.cestoDATA.fa_pais;
}
console.log('encomenda', encomenda);
CESTO.FUNC.POST('/cesto/express/order', encomenda, '#msg_rodape',
function (res) {
let result = JSON.parse(res);
console.log('resultado', result);
if (result.erro == false) {
MostraLOG('99.1 - não deu erro -->', result);
MostraLOG('vai direcionar para a encomenda -->', result.registo.guid);
window.location.href = '/checkout/express/order/' + result.registo.guid;
}
else {
console.log('erro a criar encomenda');
$('#load1').removeClass('active');
$('#btcontinuar').prop('disabled', false);
$('#msg_rodape').html('
' + result.msg[LINGUA.atual()] + '
');
}
},
function (res) {
$('#load1').removeClass('active');
$('#btcontinuar').prop('disabled', false);
});
}
static erroContinuar(texto) {
$('#msg-erro').html(texto);
$('#modal-erro').modal('show');
}
}
class CLIENT_AREA {
static moradas = [];
static phoneInput1;
static morada_a_eliminar;
static inicio() {
console.log('---> CLIENT_AREA -> inicio');
FUNCOES.GET_PAGINADO('/cli/orders?page=1', null, (res) => {
let orders = res;
orders.dados = JSON.parse(res.dados);
//filtrar apenas as 3 últimas encomendas
orders.dados = orders.dados.slice(0, 3);
let html = '';
if (orders.dados.length > 0) {
let pag = FUNCOES.GET_Pagina('template.orders.em_linha.html');
let _template = TRADUZ.traduzirTemplate(pag.Valor);
orders.dados.forEach(order => {
let _html = _template;
_html = _html.replace(/{encomenda}/g, order.encomenda);
_html = _html.replace(/{registada}/g, FUNC.trataData(order.registada));
_html = _html.replace(/{estado}/g, order.estado);
_html = _html.replace(/{estado_id}/g, order.estado_id);
_html = _html.replace(/{total}/g, FUNC.FormatEuro(order.total));
html += _html;
});
}
else {
html = '
-
';
}
document.getElementById('last_orders').innerHTML = html;
},
null);
}
static orders() {
let pagina_atual = FUNC.getParameterByName('page');
if (isNaN(pagina_atual) || pagina_atual == '') { pagina_atual = 1; }
console.log('---> CLIENT_AREA -> orders -> pagina_atual: ' + pagina_atual);
FUNCOES.GET_PAGINADO('/cli/orders?page=' + pagina_atual, null, (res) => {
let orders = res;
orders.dados = JSON.parse(res.dados);
let html = '';
if (orders.dados.length > 0) {
let pag = FUNCOES.GET_Pagina('template.orders.em_linha.html');
let _template = TRADUZ.traduzirTemplate(pag.Valor);
orders.dados.forEach(order => {
let _html = _template;
_html = _html.replace(/{encomenda}/g, order.encomenda);
_html = _html.replace(/{registada}/g, FUNC.trataData(order.registada));
_html = _html.replace(/{estado}/g, order.estado);
_html = _html.replace(/{estado_id}/g, order.estado_id);
_html = _html.replace(/{total}/g, FUNC.FormatEuro(order.total));
html += _html;
});
}
else {
html = '
* Após concluir o registo da sua encomenda deve aguardar a receção de um novo email com o apuramento do valor dos portes.
',
en: '
* After completing the registration of your order, you must wait to receive a new email with the assessment of the value of the shipping costs.
',
es: '
* Después de completar el registro de su pedido, debe esperar a recibir un nuevo correo electrónico con la evaluación del valor de los costos de envío.
'
};
_html_enc_top += _msg[lang];
}
document.getElementById('enc_top').innerHTML = _html_enc_top;
console.log(res);
},
null
);
function carregaLinhas(linhas) {
let _html_linhas = ''
linhas.forEach(linha => {
let pag = FUNCOES.GET_Pagina('template.orders.linha.html');
let _template = TRADUZ.traduzirTemplate(pag.Valor);
let _html = _template;
let _link = '/' + lang + '/p/' + linha.sku;
_link = _link.toLowerCase();
_html = _html.replace(/{img}/g, linha.img);
_html = _html.replace(/{nome}/g, linha.nome);
_html = _html.replace(/{sku}/g, linha.sku);
_html = _html.replace(/{link}/g, _link);
_html = _html.replace(/{qde}/g, linha.qde);
_html = _html.replace(/{pvp}/g, FUNC.FormatEuro(linha.pvp));
_html = _html.replace(/{subtotal}/g, FUNC.FormatEuro(linha.subtotal));
_html_linhas += _html;
});
document.getElementById('enc_linhas').innerHTML = _html_linhas;
}
}
static info() {
//adicionar intlTelInput.css no head do documento
let link = document.createElement('link');
link.rel = 'stylesheet';
link.href = 'https://cdn.pladon.pt/js/intlTelInput/intlTelInput.css';
document.head.appendChild(link);
FUNCOES.GET('/cli', null, (res) => {
console.log(res);
FUNC.popularFormulario(res, 'cli_', '');
document.getElementById('cli_newsletter').checked = res.newsletter;
// Aguardar inicialização do simpleSwitch e sincronizar estado visual
setTimeout(function () {
let $sw = $('#cli_newsletter');
if ($sw.hasClass('simple-switch')) {
let checked = res.newsletter;
$sw.attr('data-switch', checked ? 'true' : 'false');
$sw.parent().removeClass(checked ? 'unchecked' : 'checked').addClass(checked ? 'checked' : 'unchecked');
}
}, 200);
//se res.newsletter_pontos==1 então checar a checkbox cli_newsletter_pontos
document.getElementById('cli_newsletter_pontos').checked = res.newsletter_pontos;
// Aguardar inicialização do simpleSwitch e sincronizar estado visual
setTimeout(function () {
let $sw = $('#cli_newsletter_pontos');
if ($sw.hasClass('simple-switch')) {
let checked = res.newsletter_pontos;
$sw.attr('data-switch', checked ? 'true' : 'false');
$sw.parent().removeClass(checked ? 'unchecked' : 'checked').addClass(checked ? 'checked' : 'unchecked');
}
}, 200);
CLIENT_AREA.Moradas.mostraMoradas();
CLIENT_AREA.Moradas.FuncoesBotoesEModals();
});
}
static gravaInfo() {
let nome = $('#cli_nome').val();
let newsletter = $('#cli_newsletter').prop('checked');
let dados = {
nome: nome,
newsletter: newsletter
};
FUNCOES.POST('/cli/grava', dados, '#resultado', function (res) {
if (res.erro) {
$('#resultado').html('
`;
}
// Determinar o range de páginas a mostrar
let maxPaginas = 5;
let iniciar = Math.max(1, paginaAtual - Math.floor(maxPaginas / 2));
let terminar = Math.min(totalPaginas, iniciar + maxPaginas - 1);
// Ajustar o início se estivermos perto do fim
if (terminar - iniciar + 1 < maxPaginas) {
iniciar = Math.max(1, terminar - maxPaginas + 1);
}
// Páginas numéricas
for (let i = iniciar; i <= terminar; i++) {
if (i === paginaAtual) {
htmlPaginacao += `