Gerenciamento de Vendas

Filtrar Vendas
Modo de Processamento

Para processar cada venda com controle dos resultados em tempo real.

Para processar todas as vendas de uma vez e receber relatório completo.

Para validar cada etapa do processo individualmente com máximo controle.

Resultados

Use o filtro acima para buscar vendas.

}); }); } else { salesResultsElement.innerHTML = `
Nenhuma venda encontrada no período de ${Utils.formatDate(fromDate)} a ${Utils.formatDate(toDate)}.
`; } } else { salesResultsElement.innerHTML = `
Não foi possível carregar as vendas.
`; } } catch (error) { // Hide loading spinner Utils.hideLoading('sales-loading'); // Display error message const salesError = document.getElementById('sales-error'); salesError.textContent = `Erro ao carregar vendas: ${error.message}`; salesError.style.display = 'block'; // Update sales element const salesResultsElement = document.getElementById('sales-results'); salesResultsElement.innerHTML = `
Ocorreu um erro ao carregar as vendas.
`; } } // Generate sample sales data for demonstration function generateSampleSales(count) { const sales = []; const statuses = ['completed', 'pending', 'cancelled']; for (let i = 1; i <= count; i++) { const date = new Date(); date.setDate(date.getDate() - Math.floor(Math.random() * 30)); sales.push({ id: `ML${100000 + i}`, date: date.toISOString(), status: statuses[Math.floor(Math.random() * statuses.length)], total: Math.random() * 1000 + 50 }); } return sales; } // Show sale details async function showSaleDetails(saleId) { // Show the modal const modal = document.getElementById('sale-details-modal'); modal.style.display = 'block'; // Show loading spinner Utils.showLoading('sale-details-loading'); // Hide error message Utils.hideError('sale-details-error'); try { // Fetch sale details from API const saleDetails = await ApiService.getItem(saleId); // Hide loading spinner Utils.hideLoading('sale-details-loading'); // Display sale details const saleDetailsContent = document.getElementById('sale-details-content'); if (!saleDetails) { saleDetailsContent.innerHTML = `
Não foi possível carregar os detalhes da venda ${saleId}.
`; return; } // Get buyer info const buyer = saleDetails.buyer || {}; const buyerName = buyer.nickname || buyer.name || 'Não disponível'; const buyerEmail = buyer.email || 'Não disponível'; // Get items const items = saleDetails.order_items || []; // Get shipping info const shipping = saleDetails.shipping || {}; const shippingStatus = shipping.status || 'Não disponível'; const shippingCost = shipping.cost || 0; const shippingAddress = shipping.address_line || 'Não disponível'; // Get payment info const payment = saleDetails.payments && saleDetails.payments.length > 0 ? saleDetails.payments[0] : {}; const paymentMethod = payment.payment_method_id || 'Não disponível'; const paymentStatus = payment.status || 'Não disponível'; const paymentTotal = payment.total_paid_amount || saleDetails.total_amount || 0; // Display sale details saleDetailsContent.innerHTML = `

Informações da Venda

ID: ${saleDetails.id}

Data: ${Utils.formatDate(saleDetails.date_created || saleDetails.date)}

Status: ${saleDetails.status || 'Não disponível'}

Total: ${Utils.formatCurrency(saleDetails.total_amount || saleDetails.total || 0)}

Informações do Comprador

Nome: ${buyerName}

Email: ${buyerEmail}

Itens

${items.length > 0 ? items.map(item => { const itemTotal = (item.unit_price || 0) * (item.quantity || 0); return ` `; }).join('') : ''}
ID Título Quantidade Preço Total
${item.item_id || item.id || 'N/A'} ${item.title || 'Não disponível'} ${item.quantity || 0} ${Utils.formatCurrency(item.unit_price || 0)} ${Utils.formatCurrency(itemTotal)}
Nenhum item disponível

Informações de Envio

Status: ${shippingStatus}

Custo: ${Utils.formatCurrency(shippingCost)}

Endereço: ${shippingAddress}

Informações de Pagamento

Método: ${paymentMethod}

Status: ${paymentStatus}

Total: ${Utils.formatCurrency(paymentTotal)}

`; } catch (error) { // Hide loading spinner Utils.hideLoading('sale-details-loading'); // Display error message const saleDetailsError = document.getElementById('sale-details-error'); saleDetailsError.textContent = `Erro ao carregar detalhes da venda: ${error.message}`; saleDetailsError.style.display = 'block'; // Update sale details content const saleDetailsContent = document.getElementById('sale-details-content'); saleDetailsContent.innerHTML = `
Ocorreu um erro ao carregar os detalhes da venda.
`; } } // Close the modal function closeModal() { const modal = document.getElementById('sale-details-modal'); modal.style.display = 'none'; } // Initialize the page document.addEventListener('DOMContentLoaded', async function() { // Check authentication status const isAuthenticated = await checkAuthStatus(); // Set default date range setDefaultDateRange(); // Load all sales by default if (isAuthenticated) { // Get a large date range to fetch all sales (past 12 months) const toDate = new Date(); const fromDate = new Date(); fromDate.setFullYear(fromDate.getFullYear() - 1); // 1 year ago loadSales(fromDate.toISOString().split('T')[0], toDate.toISOString().split('T')[0]); } // Add event listener for the form submission (for filtered searches) document.getElementById('sales-filter-form').addEventListener('submit', function(event) { event.preventDefault(); if (!isAuthenticated) { alert('Você precisa estar autenticado para buscar vendas.'); return; } const fromDate = document.getElementById('from-date').value; const toDate = document.getElementById('to-date').value; loadSales(fromDate, toDate); }); // Add event listener for the reset button document.getElementById('reset-filter-button').addEventListener('click', function() { setDefaultDateRange(); }); // Add event listeners for the modal close buttons document.querySelectorAll('.close-modal').forEach(button => { button.addEventListener('click', closeModal); }); // Close the modal when clicking outside of it window.addEventListener('click', function(event) { const modal = document.getElementById('sale-details-modal'); if (event.target === modal) { closeModal(); } }); });