A-
A+
Contraste
Acessibilidade
saveTicketsToLocalStorage()"
@load-tickets-from-local-storage.window="event => loadTicketsFromLocalStorage()" x-data="{
seatsIoPublicKey: '8e2451aa-c962-42b0-a3e4-0c29cc653b84',
charts: [],
categoryPrices: [],
selectedTickets: [],
ignoreFirstSelectedSeats: [],
selectedSeats: [],
alertMessages: [],
lastOpenCategoryListIdMap: null,
setMapId: null,
notifications: [],
qtdTickets: 0,
subtotal: 0,
total: 0,
totalDiscount: 0,
lastCategoryPrice: null,
couponCode: null,
isShowBoxCouponCode: false,
setCouponCode(code) {
code = code ?? null;
code = '' + code;
this.couponCode = code;
this.isShowBoxCouponCode = code != null && code.trim().length > 0;
},
showBoxCouponCode() {
this.isShowBoxCouponCode = true;
setTimeout(() => {
this.$refs.couponCode.focus();
}, 130);
},
labelButtonCheckout() {
return this.qtdTickets > 0 ? 'Finalizar compra' : 'Selecione um ingresso';
},
normalizePrices(categoryPrices = []) {
let ticketTypes = [];
const groupByCategoryLabel = categoryPrices.reduce((categoryPrices, categoryPrice) => {
if (categoryPrices.hasOwnProperty(categoryPrice.seatsioCategory) == false) {
categoryPrices[categoryPrice.seatsioCategory] = [];
}
categoryPrices[categoryPrice.seatsioCategory].push(categoryPrice);
return categoryPrices;
}, {});
for (let key in groupByCategoryLabel) {
const categoryPrices = groupByCategoryLabel[key];
ticketTypes.push({
category: key,
ticketTypes: this.getPayloadTicketMap(categoryPrices),
});
}
return ticketTypes;
},
hasDiscountOnCategoryPrice(categoryPrice) {
return categoryPrice.isAppliedCoupon == true && categoryPrice.priceWithDiscount >= 0;
},
calculatePriceWithConvenienceFee(price, convenienceFee) {
return +price + +convenienceFee;
},
getPayloadTicketMap(categoryPrices) {
return categoryPrices.map((categoryPrice) => {
let payloadPrice = {
price: categoryPrice.price,
convenienceFee: categoryPrice.convenienceFee,
};
if (this.hasDiscountOnCategoryPrice(categoryPrice)) {
payloadPrice = {
price: categoryPrice.priceWithDiscount,
convenienceFee: categoryPrice.convenienceFeeWithDiscount,
};
}
return {
ticketType: categoryPrice.name,
price: this.calculatePriceWithConvenienceFee(payloadPrice.price, payloadPrice.convenienceFee),
priceWithoutConvenienceFee: payloadPrice.price,
convenienceFee: payloadPrice.convenienceFee,
seatsQtd: categoryPrice.seatsCapacity,
ticketSku: categoryPrice.id,
description: categoryPrice.description,
category_label: categoryPrice.seatsioLabel,
}
});
},
getPayloadSeat(objectSeat, selectedTicketType) {
return {
selectedSeat: objectSeat.label,
event: objectSeat.chart.config.event,
category: objectSeat.category.label,
objectType: objectSeat.objectType,
ticketType: selectedTicketType.ticketType,
seatsQtd: selectedTicketType.seatsQtd,
}
},
getSelectedSeats(eventKey) {
if (this.selectedSeats.hasOwnProperty(eventKey) == false) {
return [];
}
return this.selectedSeats[eventKey];
},
cleanSelecionMaps() {
if (typeof this.charts !== 'undefined') {
const keys = Object.keys(this.charts);
keys.forEach(key => {
this.charts[key].clearSelection();
});
}
this.selectedSeats = [];
},
setAlertMessage(id, message, type) {
const findAlertMessage = this.alertMessages.find(obj => obj.id == id && obj.type == type);
if (findAlertMessage) {
findAlertMessage.message = message;
} else {
this.alertMessages.push({
id: id,
message: message,
type: type,
});
}
},
removeAlertMessage(id, type) {
this.alertMessages = this.alertMessages.filter(obj => obj.id != id && obj.type != type);
},
getAlertMessage(id, type) {
const findAlert = this.alertMessages.find(obj => obj.id == id && obj.type == type);
if (findAlert) {
return findAlert.message;
}
return null;
},
cleanSelecionMapByEventKey(event) {
if (this.charts.hasOwnProperty(event) == false) {
return false;
}
this.charts[event].clearSelection();
if (this.selectedSeats.hasOwnProperty(event) == false) {
return false;
}
this.selectedSeats[event] = [];
},
cleanCategoryPrices() {
for (let key in this.categoryPrices) {
this.categoryPrices[key].quantity = 0;
this.categoryPrices[key].seats = [];
this.categoryPrices[key].total = 0;
}
},
cleanSelectedTickets() {
for (let key in this.selectedTickets) {
this.selectedTickets[key].quantity = 0;
this.selectedTickets[key].total = 0;
}
},
hasSelectedSeatsByOtherEventKey(eventKey) {
const countSelectedSeats = Object.keys(this.selectedSeats).length;
if (countSelectedSeats == 0) {
return false;
}
return Object.keys(this.selectedSeats).filter(key => key != eventKey).reduce((counter, eventKeyId) => this.selectedSeats[eventKeyId].length > 0 ? counter += 1 : counter, 0) > 0;
},
resizeMapTicketBox() {
if (this.setMapId == null) {
return false;
}
const modal = $('#' + this.setMapId);
if (modal.length == 0) {
return false;
}
const columnItemsMap = modal.find('.col-items-map');
const gridItems = modal.find('.grid-items');
const widthOfWindow = $(window).width();
if (widthOfWindow < 1000) {
columnItemsMap.css('height', 'auto');
gridItems.css('max-height', '260px');
return;
}
const iframe = modal.find('iframe');
if (iframe.length == 0) {
return false;
}
const iframeHeight = iframe.height();
columnItemsMap.css('height', iframeHeight + 'px');
const percentage = 70;
const calculatePercentageHeight = Math.round((iframeHeight * percentage) / 100);
gridItems.css('max-height', calculatePercentageHeight + 'px');
},
openSeatMap(categoryId, categoryListId = 0, chartId, eventKey) {
const hasSelectedSeatsByOtherEventKey = this.hasSelectedSeatsByOtherEventKey(eventKey);
if (hasSelectedSeatsByOtherEventKey) {
this.showNotification('Permitido apenas um mapa por compra. Já foram selecionados assentos em outro mapa.');
return false;
}
this.lastOpenCategoryListIdMap = categoryListId > 0 ? categoryListId : null;
this.setMapId = 'modal-map-' + eventKey + '--' + chartId;
$('#' + this.setMapId).modal('show');
},
findSelectedTicket(categoryPriceId, categoryId, categoryListId = null) {
categoryListId = categoryListId ?? 0;
const findSelectedTicket = this.selectedTickets.find(obj => obj.categoryPriceId == categoryPriceId && obj.categoryId == categoryId && obj.categoryListId == categoryListId);
if (findSelectedTicket) {
return findSelectedTicket;
}
return null;
},
addSelectedTickets(categoryPriceId, categoryId, categoryListId = null) {
categoryListId = categoryListId ?? 0;
const findSelectedTicket = this.findSelectedTicket(categoryPriceId, categoryId, categoryListId);
if (findSelectedTicket) {
return false;
}
this.selectedTickets.push({
categoryListId: categoryListId,
categoryId,
categoryPriceId,
quantity: 0,
total: 0,
});
},
addCategoryPrice(id, categoryId, categoryListIds = [], isBooking, price, convenienceFee, priceWithDiscount, convenienceFeeWithDiscount, perUserLimit, isAppliedCoupon = false) {
this.categoryPrices[id] = {
id: id,
categoryId: categoryId,
quantity: 0,
isBooking,
seats: [],
categoryListIds: categoryListIds,
isAppliedCoupon: isAppliedCoupon,
selectedSeats: [],
price: parseFloat(price),
isAppliedCoupon: isAppliedCoupon,
convenienceFee: parseFloat(convenienceFee),
priceWithDiscount: parseFloat(priceWithDiscount),
convenienceFeeWithDiscount: parseFloat(convenienceFeeWithDiscount),
total: 0,
totalDiscount: 0,
perUserLimit: parseInt(perUserLimit)
};
},
isReservedSeatByOtherBuyer(status) {
return status != 'free';
},
addChart(eventKey, maxSelectedSeats, categoryPrices, notAllowedSeats = '') {
this.charts[eventKey] = new seatsio.SeatingChart({
divId: `seat-map-${eventKey}`,
publicKey: this.seatsIoPublicKey,
event: eventKey,
session: 'none',
selectedObjects: this.getSelectedSeats(eventKey),
objectWithoutPricingSelectable: false,
language: 'pt',
extraConfig: {
notAllowedSeats,
},
isObjectVisible: function(object, extraConfig) {
if (extraConfig.notAllowedSeats !== undefined && extraConfig.notAllowedSeats !== '') {
let naSeats = extraConfig.notAllowedSeats.split(',');
return !naSeats.includes(object.label);
}
return true;
},
objectColor: function(object, defaultColor, extraConfig) {
if (extraConfig.notAllowedSeatsForCustomer !== undefined && extraConfig.notAllowedSeatsForCustomer !== '') {
let nacSeats = extraConfig.notAllowedSeatsForCustomer.split(',');
if (nacSeats.includes(object.label)) {
if (object.status === 'booked')
return '#bd9ce1';
else
return '#8e26ff';
}
}
return defaultColor;
},
maxSelectedObjects: maxSelectedSeats,
pricing: this.normalizePrices(JSON.parse(categoryPrices)),
priceFormatter: (price) => {
return 'R$ ' + number_format(price, 2, ',', '.');
},
onObjectSelected: (object, selectedTicketType) => {
const payloadSeat = this.getPayloadSeat(object, selectedTicketType);
this.incrementQuantity(selectedTicketType.ticketSku, this.lastOpenCategoryListIdMap, payloadSeat);
},
onObjectDeselected: (object, selectedTicketType) => {
if (this.isReservedSeatByOtherBuyer(object.status)) {
this.showNotification(`Assento ${obj.labels.displayedLabel} reservado por outro comprador.`);
}
const payloadSeat = this.getPayloadSeat(object, selectedTicketType);
this.decrementQuantity(selectedTicketType.ticketSku, this.lastOpenCategoryListIdMap, payloadSeat);
},
onChartRendered: (chart) => {
this.resizeMapTicketBox();
window.addEventListener('resize', () => {
this.resizeMapTicketBox();
});
}
}).render();
},
addSelectedSeats(seat) {
if (this.selectedSeats.hasOwnProperty(seat.event) == false) {
this.selectedSeats[seat.event] = [];
}
this.selectedSeats[seat.event].push({
label: seat.selectedSeat,
objectType: seat.objectType,
ticketType: seat.ticketType,
});
},
removeSelectedSeats(seat) {
if (this.selectedSeats.hasOwnProperty(seat.event) == false) {
return false;
}
if (seat.objectType == 'GeneralAdmissionArea') {
if (this.selectedSeats[seat.event].length > 0) {
this.selectedSeats[seat.event].pop();
return false;
}
}
this.selectedSeats[seat.event] = this.selectedSeats[seat.event].filter(s => s.label != seat.selectedSeat);
},
showNotification(msg, timeout = 4000) {
const timestamp = new Date().getTime();
const id = `${timestamp}_${Math.random()}`;
this.notifications.push({
id,
message: msg,
});
setTimeout(() => {
this.removeNotification(id);
}, timeout);
},
removeNotification(id) {
this.notifications = this.notifications.filter(notification => notification.id != id);
},
incrementQuantity(categoryPriceId, categoryListId = null, payloadSeat = null) {
categoryListId = categoryListId ?? 0;
if (this.categoryPrices.hasOwnProperty(categoryPriceId) == false) {
return false;
}
const categoryPrice = this.categoryPrices[categoryPriceId];
const isMap = categoryPrice.isBooking == true && payloadSeat && typeof payloadSeat === 'object';
if (isMap) {
if (this.ignoreFirstSelectedSeats.hasOwnProperty(payloadSeat.event)) {
if (this.ignoreFirstSelectedSeats[payloadSeat.event].count + 1 <= this.ignoreFirstSelectedSeats[payloadSeat.event].quantity) {
this.ignoreFirstSelectedSeats[payloadSeat.event].count++;
return false;
}
}
}
if (isMap && this.categoryPrices[categoryPriceId].seats.length >= 0) {
const seats = this.categoryPrices[categoryPriceId].seats;
if (seats.filter(s => s.objectType != 'GeneralAdmissionArea' && s.selectedSeat == payloadSeat.selectedSeat).length > 0) {
return false;
}
}
if (categoryPrice.isBooking == false) {
if (parseInt(categoryPrice.perUserLimit) < parseInt(categoryPrice.quantity) + 1) {
const message = 'Limite de ingressos por cliente atingido.';
this.showNotification(message);
return false;
}
}
this.lastCategoryPrice = categoryPrice;
this.categoryPrices[categoryPriceId].quantity++;
if (isMap) {
this.categoryPrices[categoryPriceId].seats.push(payloadSeat);
this.categoryPrices[categoryPriceId].selectedSeats = this.categoryPrices[categoryPriceId].seats.map(seat => seat.selectedSeat);
this.addSelectedSeats(payloadSeat);
}
const price = this.getPrice(categoryPrice);
this.categoryPrices[categoryPriceId].total = categoryPrice.quantity * price;
this.incrementSelectedTickets(categoryPriceId, categoryPrice.categoryId, categoryListId, 1, price);
},
decrementQuantity(categoryPriceId, categoryListId = null, payloadSeat = null) {
categoryListId = categoryListId ?? 0;
if (this.categoryPrices.hasOwnProperty(categoryPriceId) == false) {
return false;
}
const categoryPrice = this.categoryPrices[categoryPriceId];
if (categoryPrice.quantity == 0) {
return false;
}
const findSelectedTicket = this.findSelectedTicket(categoryPriceId, categoryPrice.categoryId, categoryListId);
if (!findSelectedTicket) {
return false;
}
if (payloadSeat == null) {
if (parseInt(categoryPrice.perUserLimit) == parseInt(categoryPrice.quantity) && findSelectedTicket.quantity == 0 || (parseInt(categoryPrice.quantity) > 0 && findSelectedTicket.quantity == 0) || parseInt(categoryPrice.quantity) == 0) {
return false;
}
}
this.removeAlertMessage(categoryPriceId, 'category_price');
this.lastCategoryPrice = categoryPrice;
this.categoryPrices[categoryPriceId].quantity--;
let isMap = payloadSeat && typeof payloadSeat === 'object';
if (isMap) {
if (this.categoryPrices[categoryPriceId].seats.filter(s => s.selectedSeat == payloadSeat.selectedSeat).length > 0) {
if (payloadSeat.objectType == 'GeneralAdmissionArea') {
let allSeatsOfCagteoryPrice = this.categoryPrices[categoryPriceId].seats;
allSeatsOfCagteoryPrice.pop();
this.categoryPrices[categoryPriceId].seats = allSeatsOfCagteoryPrice;
this.categoryPrices[categoryPriceId].selectedSeats = allSeatsOfCagteoryPrice.map(seat => seat.selectedSeat);
} else {
this.categoryPrices[categoryPriceId].seats = this.categoryPrices[categoryPriceId].seats.filter(s => s.selectedSeat != payloadSeat.selectedSeat);
this.categoryPrices[categoryPriceId].selectedSeats = this.categoryPrices[categoryPriceId].seats.map(seat => seat.selectedSeat);
}
this.removeSelectedSeats(payloadSeat);
}
}
const price = this.getPrice(categoryPrice);
this.categoryPrices[categoryPriceId].total = categoryPrice.quantity * price;
if (isMap) {
this.decrementSelectedTicketsByCategory(categoryPrice.categoryId, 1, price);
} else {
this.decrementSelectedTickets(categoryPriceId, categoryPrice.categoryId, categoryListId, 1, price);
}
},
getPrice(categoryPrice) {
const { price, convenienceFee, priceWithDiscount, convenienceFeeWithDiscount } = categoryPrice;
if (this.hasDiscountOnCategoryPrice(categoryPrice)) {
return (+priceWithDiscount + +convenienceFeeWithDiscount);
}
return (+price + +convenienceFee);
},
incrementSelectedTickets(categoryPriceId, categoryId, categoryListId = null, quantity = 1, subTotal = 0) {
categoryListId = categoryListId ?? 0;
const findObjectCategoryList = this.findSelectedTicket(categoryPriceId, categoryId, categoryListId);
if (findObjectCategoryList) {
findObjectCategoryList.quantity += quantity;
findObjectCategoryList.total += subTotal;
}
},
decrementSelectedTicketsByCategory(categoryId, quantity = 1, subTotal = 0) {
const findObjectCategoryList = this.selectedTickets.filter(obj => obj.categoryId == categoryId);
for (let i = 0; i < findObjectCategoryList.length; i++) {
const element = findObjectCategoryList[i];
if (element.quantity > 0) {
element.quantity -= quantity;
element.total -= subTotal;
}
}
},
decrementSelectedTickets(categoryPriceId, categoryId, categoryListId = null, quantity = 1, subTotal = 0) {
categoryListId = categoryListId ?? 0;
const findObjectCategoryList = this.findSelectedTicket(categoryPriceId, categoryId, categoryListId);
if (findObjectCategoryList) {
findObjectCategoryList.quantity -= quantity;
findObjectCategoryList.total -= subTotal;
}
},
getQuantityTicketSelectedByCategory(categoryId) {
return this.selectedTickets.filter(obj => obj.categoryId == categoryId).reduce((quantity, item) => {
return quantity + item.quantity;
}, 0);
},
getQuantityTicketsByCategoryAndList(categoryId, categoryListId = 0) {
categoryListId = categoryListId ?? 0;
return this.selectedTickets.filter(obj => obj.categoryId == categoryId && obj.categoryListId == categoryListId).reduce((quantity, item) => {
return quantity + item.quantity;
}, 0);
},
getQuantitySelectedTicketsByList(categoryListId) {
return this.selectedTickets.filter(obj => obj.categoryListId == categoryListId).reduce((quantity, item) => {
return quantity + item.quantity;
}, 0);
},
getQuantityTicketSelected(categoryPriceId, categoryId, categoryListId = 0) {
categoryListId = categoryListId ?? 0;
const findObjectCategoryList = this.findSelectedTicket(categoryPriceId, categoryId, categoryListId);
if (findObjectCategoryList) {
return findObjectCategoryList.quantity;
}
return 0;
},
getLabelQuantityTickets() {
return this.qtdTickets > 1 ? `${this.qtdTickets} ingressos` : `${this.qtdTickets} ingresso`;
},
labelSelectedSeats(categoryPriceId) {
const categoryPrice = this.categoryPrices[categoryPriceId] ?? null;
if (categoryPrice == null) {
return '';
}
const labelSelectedSeats = categoryPrice.seats.reduce((seats, seat) => {
return seats + seat.selectedSeat + ', ';
}, '');
return labelSelectedSeats.substring(0, labelSelectedSeats.length - 2);
},
cleanCart() {
if (!confirm('Deseja realmente limpar o carrinho?')) {
return false;
}
this.cleanSelecionMaps();
this.cleanCategoryPrices();
this.cleanSelectedTickets();
this.lastCategoryPrice = null;
this.notifications = [];
this.ignoreFirstSelectedSeats = [];
this.alertMessages = [];
this.discount = 0;
this.subtotal = 0;
},
saveTicketsToLocalStorage() {
let tickets = JSON.parse(localStorage.getItem('selectedTickets') ?? '[]');
this.selectedTickets.filter(selectedTicket => selectedTicket.quantity > 0).forEach(selectedTicket => {
tickets.push({
categoryPriceId: selectedTicket.categoryPriceId,
categoryId: selectedTicket.categoryId,
categoryListId: selectedTicket.categoryListId ?? 0,
quantity: selectedTicket.quantity,
seats: this.categoryPrices[selectedTicket.categoryPriceId].seats,
selectedSeats: this.categoryPrices[selectedTicket.categoryPriceId].selectedSeats,
});
});
localStorage.setItem('selectedTickets', JSON.stringify(tickets));
},
loadTicketsFromLocalStorage() {
const selectedTickets = JSON.parse(localStorage.getItem('selectedTickets') ? localStorage.getItem('selectedTickets') : '[]');
const allSelectedSeats = [];
let hasIncrementCategoryPrice = [];
this.ignoreFirstSelectedSeats = [];
const groupBooking = selectedTickets.filter(categoryPrice => categoryPrice.seats.length > 0).reduce((groupBooking, categoryPrice) => {
if (groupBooking.hasOwnProperty(categoryPrice.categoryId) == false) {
groupBooking[categoryPrice.categoryId] = [];
}
groupBooking[categoryPrice.categoryId].push(categoryPrice);
return groupBooking;
}, []);
if (groupBooking.length > 0) {
for (let cateogryId in groupBooking) {
if (groupBooking[cateogryId].length > 0) {
const sumQuantity = groupBooking[cateogryId].reduce((sum, categoryPrice) => {
return sum + categoryPrice.quantity;
}, 0);
const getEventKey = groupBooking[cateogryId][0].seats[0].event;
this.ignoreFirstSelectedSeats[getEventKey] = {
count: 0,
quantity: sumQuantity,
};
}
}
}
for (var i = 0; selectedTickets.length > i; i++) {
const selectedTicket = selectedTickets[i];
const categoryPriceId = selectedTicket.categoryPriceId;
const categoryId = selectedTicket.categoryId;
const categoryListId = selectedTicket.categoryListId ?? 0;
const quantity = selectedTicket.quantity;
const seats = selectedTicket.seats;
const selectedSeats = selectedTicket.selectedSeats;
if (this.categoryPrices.hasOwnProperty(categoryPriceId) == false) {
continue;
}
const categoryPrice = this.categoryPrices[categoryPriceId];
const price = this.getPrice(categoryPrice);
const subTotal = parseInt(quantity) * price;
if (hasIncrementCategoryPrice.hasOwnProperty(categoryPriceId) == false) {
categoryPrice.quantity = quantity;
categoryPrice.seats = seats;
categoryPrice.selectedSeats = selectedSeats;
categoryPrice.total = subTotal;
this.incrementSelectedTickets(categoryPriceId, categoryId, categoryListId, quantity, subTotal);
seats.map(seat => {
if (allSelectedSeats.hasOwnProperty(seat.event) == false) {
allSelectedSeats[seat.event] = [];
}
if (seat.objectType == 'GeneralAdmissionArea') {
allSelectedSeats[seat.event].push({
label: seat.selectedSeat,
ticketType: seat.ticketType
});
} else {
if (allSelectedSeats[seat.event].filter(s => s.label == seat.selectedSeat).length == 0) {
allSelectedSeats[seat.event].push({
label: seat.selectedSeat,
ticketType: seat.ticketType
});
}
}
});
const eventKeys = Object.keys(allSelectedSeats);
eventKeys.forEach(eventKey => {
if (this.charts.hasOwnProperty(eventKey) !== false) {
this.charts[eventKey].selectObjects(allSelectedSeats[eventKey]);
}
});
hasIncrementCategoryPrice[categoryPriceId] = true;
}
}
this.cleanLocalStorage();
},
cleanLocalStorage() {
localStorage.removeItem('selectedTickets');
}
}"
x-init="$watch('categoryPrices', value => {
const allCategoryPrices = Object.values(value ?? []);
qtdTickets = allCategoryPrices.reduce((qtd, categoryPrice) => {
return qtd + parseInt(categoryPrice.quantity);
}, 0);
if (lastCategoryPrice && lastCategoryPrice.categoryListId) {
subtotal = allCategoryPrices.reduce((price, categoryPrice) => {
if (categoryPrice.categoryListId == lastCategoryPrice.categoryListId) {
return price + +categoryPrice.total;
}
return price;
}, 0);
}
total = allCategoryPrices.reduce((price, categoryPrice) => {
return price + parseFloat(categoryPrice.total);
}, 0);
})">
EDUCATIVO - CONTO UM CONTO
01 out - 2023 • 09h > 30 dez - 2023 • 20h CCBB SP - São Paulo, São Paulo
Atenção:
- Os ingressos são liberados na sexta-feira da semana anterior de cada final de semana às 12h.
- Todos os visitantes devem possuir ingresso para acessar o prédio.
- Crianças a partir de 3 anos necessitam de validação de ingresso.
- Não é permitido o consumo de alimentos e bebidas no interior das galerias do CCBB.
- Planeje sua visita com pequena quantidade de pertences.
- Van - ida e volta gratuita, saindo da Rua da Consolação, 228. No trajeto de volta, há uma parada no Metrô República.
- Funcionamento a partir das 12 horas.
- Clique aqui e leia atentamente as normas de visitação do CCBB, para a segurança de visitantes e colaboradores.
Sobre o evento:
A tradição popular brasileira de contação de histórias integra a programação do educativo, com um repertório autoral além de uma seleção de obras que são patrimônio nacional. As exposições em cartaz no CCBB, no mês de novembro, são inspirações para sessões em que o “Era uma vez...” surge para encantar e mediar conceitos.
Serviços:
Data: 01 à 30/12/2023
Segundas, sextas, sábados, domingos: 14h às 15h
Local: 1º Andar
Classificação etária: livre
Entrada gratuita
Evento organizado por:
Centro Cultural Banco do Brasil - São Paulo.
Endereço: R. Álvares Penteado, 112 -
Centro Histórico de São Paulo, São Paulo - SP - 01012-000.
Abrir no Google Maps.
Plataforma de venda ticketWORK
A ticketWORK é uma plataforma que facilita a venda de ingressos, inscrição para eventos, cobrança de contribuições para eventos e a gestão de participantes. Todos os eventos publicados na plataforma estão sob responsabilidade de seus organizadores, uma vez que a ticketWORK não produz tais eventos.
A ticketWORK não se responsabiliza por compras efetuadas em canais não oficiais.