document.addEventListener('DOMContentLoaded', function () {
const productForm = document.getElementById('productForm');
const productTable = document.getElementById('productTable').getElementsByTagName('tbody')[0];
const searchInput = document.getElementById('searchInput');
const cartTable = document.getElementById('cartTable').getElementsByTagName('tbody')[0];
const totalSoldElement = document.getElementById('totalSold');
const totalRevenueElement = document.getElementById('totalRevenue');
const totalProfitElement = document.getElementById('totalProfit');
let totalSold = 0; // Общее количество проданных товаров
let totalRevenue = 0; // Общая выручка
let totalProfit = 0; // Общая прибыль
let cart = []; // Корзина
// Загрузка данных из localStorage при загрузке страницы
loadProducts();
loadStats();
loadCart();
// Обработка добавления товара
productForm.addEventListener('submit', function (e) {
e.preventDefault();
const productName = document.getElementById('productName').value;
const purchasePrice = parseFloat(document.getElementById('purchasePrice').value);
const salePrice = parseFloat(document.getElementById('salePrice').value);
const quantity = parseInt(document.getElementById('quantity').value);
const itemsPerPack = parseInt(document.getElementById('itemsPerPack').value);
if (productName && !isNaN(purchasePrice) && !isNaN(salePrice) && !isNaN(quantity) && !isNaN(itemsPerPack)) {
addProduct(productName, purchasePrice, salePrice, quantity, itemsPerPack);
productForm.reset(); // Очистка формы после добавления
} else {
alert('Пожалуйста, заполните все поля корректно.');
}
});
// Поиск по товарам
searchInput.addEventListener('input', function () {
const searchTerm = searchInput.value.toLowerCase();
const rows = productTable.getElementsByTagName('tr');
for (let row of rows) {
const name = row.getElementsByTagName('td')[0]?.textContent.toLowerCase();
if (name) {
row.style.display = name.includes(searchTerm) ? '' : 'none';
}
}
});
// Делегирование событий для кнопок в таблице товаров
productTable.addEventListener('click', function (e) {
const target = e.target;
const row = target.closest('tr');
const productId = parseInt(row.getAttribute('data-id'));
if (target.classList.contains('add-to-cart-btn')) {
const quantityInput = row.querySelector('.quantity-input');
const quantity = parseInt(quantityInput.value);
if (quantity && quantity > 0) {
addToCart(productId, quantity);
} else {
alert('Пожалуйста, введите корректное количество.');
}
} else if (target.classList.contains('add-stock-btn')) {
addStock(productId);
} else if (target.classList.contains('delete-btn')) {
deleteProduct(productId);
}
});
// Делегирование событий для кнопок в корзине
cartTable.addEventListener('click', function (e) {
const target = e.target;
if (target.classList.contains('delete-btn')) {
const row = target.closest('tr');
const productId = parseInt(row.getAttribute('data-id'));
removeFromCart(productId);
}
});
// Функция добавления товара
function addProduct(name, purchasePrice, salePrice, quantity, itemsPerPack) {
const product = {
id: Date.now(), // Уникальный ID на основе времени
name,
purchasePrice,
salePrice,
quantity,
itemsPerPack
};
// Получаем текущие товары из localStorage
let products = JSON.parse(localStorage.getItem('products')) || [];
products.push(product); // Добавляем новый товар
localStorage.setItem('products', JSON.stringify(products)); // Сохраняем в localStorage
// Добавляем товар в таблицу
addProductToTable(product);
}
// Функция добавления товара в таблицу
function addProductToTable(product) {
const row = productTable.insertRow();
row.setAttribute('data-id', product.id);
row.innerHTML = `
${product.name} |
${product.purchasePrice} |
${product.salePrice} |
${product.quantity} |
${product.itemsPerPack} |
|
`;
}
// Функция загрузки товаров из localStorage
function loadProducts() {
const products = JSON.parse(localStorage.getItem('products')) || [];
productTable.innerHTML = ''; // Очищаем таблицу перед загрузкой
products.forEach(product => addProductToTable(product));
}
// Функция загрузки статистики из localStorage
function loadStats() {
const stats = JSON.parse(localStorage.getItem('stats')) || { totalSold: 0, totalRevenue: 0, totalProfit: 0 };
totalSold = stats.totalSold;
totalRevenue = stats.totalRevenue;
totalProfit = stats.totalProfit;
updateStatsDisplay();
}
// Функция загрузки корзины из localStorage
function loadCart() {
cart = JSON.parse(localStorage.getItem('cart')) || [];
updateCartDisplay();
}
// Функция обновления отображения статистики
function updateStatsDisplay() {
totalSoldElement.textContent = totalSold;
totalRevenueElement.textContent = totalRevenue.toFixed(2);
totalProfitElement.textContent = totalProfit.toFixed(2);
}
// Функция обновления отображения корзины
function updateCartDisplay() {
cartTable.innerHTML = ''; // Очищаем корзину перед обновлением
cart.forEach(item => {
const row = cartTable.insertRow();
row.setAttribute('data-id', item.id);
row.innerHTML = `
${item.name} |
${item.quantity} |
${item.salePrice} |
${item.quantity * item.salePrice} |
|
`;
});
}
// Функция добавления товара в корзину
function addToCart(productId, quantity) {
const products = JSON.parse(localStorage.getItem('products')) || [];
const product = products.find(p => p.id === productId);
if (product && product.quantity >= quantity) {
const cartItem = cart.find(item => item.id === productId);
if (cartItem) {
cartItem.quantity += quantity;
} else {
cart.push({
id: productId,
name: product.name,
salePrice: product.salePrice,
purchasePrice: product.purchasePrice,
quantity: quantity
});
}
localStorage.setItem('cart', JSON.stringify(cart));
updateCartDisplay();
} else {
alert('Недостаточно товара на складе.');
}
}
// Функция удаления товара из корзины
function removeFromCart(productId) {
cart = cart.filter(item => item.id !== productId);
localStorage.setItem('cart', JSON.stringify(cart));
updateCartDisplay();
}
// Функция продажи товаров из корзины
window.sellCart = function () {
if (cart.length === 0) {
alert('Корзина пуста.');
return;
}
// Получаем сумму скидки
const discountInput = document.getElementById('discountInput');
const discount = parseFloat(discountInput.value) || 0; // Если скидка не указана, считаем её равной 0
// Получаем текущую дату и время по бишкекскому времени
const now = new Date();
const options = { timeZone: 'Asia/Bishkek', year: 'numeric', month: 'long', day: 'numeric', hour: '2-digit', minute: '2-digit', second: '2-digit' };
const receiptDateTime = now.toLocaleString('ru-RU', options);
// Заполняем дату и время в модальном окне
document.getElementById('receiptDateTime').textContent = receiptDateTime;
// Заполняем таблицу товаров в чеке
const receiptTable = document.getElementById('receiptTable').getElementsByTagName('tbody')[0];
receiptTable.innerHTML = ''; // Очищаем таблицу перед заполнением
let totalAmount = 0;
cart.forEach(item => {
const products = JSON.parse(localStorage.getItem('products')) || [];
const product = products.find(p => p.id === item.id);
if (product) {
const row = receiptTable.insertRow();
row.innerHTML = `
${item.name} |
${item.quantity} |
${product.itemsPerPack} |
${item.salePrice} |
${item.quantity * item.salePrice} |
`;
totalAmount += item.quantity * item.salePrice;
}
});
// Отображаем общую сумму, скидку и итоговую сумму
document.getElementById('receiptTotal').textContent = totalAmount.toFixed(2);
document.getElementById('receiptDiscount').textContent = discount.toFixed(2);
document.getElementById('receiptFinalTotal').textContent = (totalAmount - discount).toFixed(2);
// Показываем модальное окно
const modal = document.getElementById('receiptModal');
modal.style.display = 'flex';
// Обработка подтверждения продажи
document.getElementById('confirmSaleBtn').onclick = function () {
const products = JSON.parse(localStorage.getItem('products')) || [];
cart.forEach(cartItem => {
const product = products.find(p => p.id === cartItem.id);
if (product && product.quantity >= cartItem.quantity) {
product.quantity -= cartItem.quantity; // Уменьшаем остаток товара
totalSold += cartItem.quantity;
totalRevenue += cartItem.quantity * cartItem.salePrice;
totalProfit += cartItem.quantity * (cartItem.salePrice - cartItem.purchasePrice);
} else {
alert(`Недостаточно товара "${cartItem.name}" на складе.`);
}
});
// Вычитаем скидку из прибыли
totalProfit -= discount;
// Сохраняем обновленные данные
localStorage.setItem('products', JSON.stringify(products));
localStorage.setItem('stats', JSON.stringify({ totalSold, totalRevenue, totalProfit }));
localStorage.removeItem('cart');
// Очищаем корзину и обновляем отображение
cart = [];
updateCartDisplay();
productTable.innerHTML = '';
loadProducts();
updateStatsDisplay();
// Сбрасываем поле скидки
discountInput.value = '';
// Закрываем модальное окно
modal.style.display = 'none';
};
// Обработка отмены продажи
document.getElementById('cancelSaleBtn').onclick = function () {
modal.style.display = 'none';
};
// Закрытие модального окна при клике на крестик
document.querySelector('.modal .close').onclick = function () {
modal.style.display = 'none';
};
// Закрытие модального окна при клике вне его области
window.onclick = function (event) {
if (event.target === modal) {
modal.style.display = 'none';
}
};
};
// Функция добавления остатков
function addStock(productId) {
const quantityToAdd = prompt('Введите количество для прихода:');
if (quantityToAdd && !isNaN(quantityToAdd) && quantityToAdd > 0) {
let products = JSON.parse(localStorage.getItem('products')) || [];
const productIndex = products.findIndex(p => p.id === productId);
if (productIndex !== -1) {
products[productIndex].quantity += parseInt(quantityToAdd);
localStorage.setItem('products', JSON.stringify(products));
// Обновляем таблицу
productTable.innerHTML = '';
loadProducts();
}
} else {
alert('Пожалуйста, введите корректное количество.');
}
}
// Функция удаления товара
function deleteProduct(productId) {
if (confirm('Вы уверены, что хотите удалить этот товар?')) {
let products = JSON.parse(localStorage.getItem('products')) || [];
products = products.filter(p => p.id !== productId);
localStorage.setItem('products', JSON.stringify(products));
// Обновляем таблицу
productTable.innerHTML = '';
loadProducts();
}
}
// Функция для переключения бургер-меню
window.toggleMenu = function () {
const menuItems = document.querySelector('.menu-items');
menuItems.style.display = menuItems.style.display === 'block' ? 'none' : 'block';
};
// Функция для отображения выбранного раздела
window.showSection = function (sectionId) {
// Скрываем все колонки
document.querySelectorAll('.column').forEach(column => {
column.classList.remove('active');
});
// Показываем выбранную колонку
document.getElementById(sectionId).classList.add('active');
// Скрываем меню после выбора
document.querySelector('.menu-items').style.display = 'none';
};
// Показываем Инвентарь по умолчанию
showSection('inventory');
});