Это калькулятор предложений, проблема вот в чем.
При расчете вручную все работает, а при выборе шаблона не работает:
- После выбора шаблона он не отображает значения в полях ввода, выбранных из таблицы mysql продукта.
- Показывает только одну выбранную категорию, а не все. (Я не могу выбрать другие категории).
- Показывает только один выбранный товар, а не все, что есть в категории (я не могу выбрать другие товары).
Но только здесь это не работает должным образом. с выбором шаблонов.
Я думаю, это просто перевыбор уже выбранных категорий -> товаров. потому что это.
fetchProducts
в fetchTemplateData, потому что скрипт выбирает, что внутри шаблона, но после выборки, чтобы получить больше категорий для вручную повторный выбор нарушает логику.
Я добавил фотографию для более наглядного объяснения.
Моей логики недостаточно для выполнения этой задачи.
< br />
index.php
Код: Выделить всё
session_start();
include_once 'config/database.php';
include 'languages/language.php';
include 'assets/session.php';
$query = "SELECT * FROM products";
$result = mysqli_query($conn, $query);
$products = array();
if ($result) {
while ($row = mysqli_fetch_assoc($result)) {
$products[] = $row;
}
} else {
echo "Error: " . mysqli_error($conn);
}
$products_json = json_encode($products);
$query = "SELECT DISTINCT template_name FROM proposal_templates";
$templateResult = mysqli_query($conn, $query);
$templates = array();
if ($templateResult) {
while ($row = mysqli_fetch_assoc($templateResult)) {
$templates[] = $row['template_name'];
}
} else {
echo "Error: " . mysqli_error($conn);
}
?>
Proposal calculator
Add
Select template
-
Total Price Without Tax
Total Tax (21%)
Total Price With Tax
Support
Price with support
Total Discount
Discount Percentage
Total Power
$(document).ready(function() {
function storeOriginalSellPrice(row, originalSellPrice) {
row.data('original-sell-price', originalSellPrice);
}
function fetchCategories(categoryDropdown) {
$.ajax({
type: "GET",
url: "fetch_categories.php",
success: function(response) {
categoryDropdown.html(response);
fetchProducts(categoryDropdown);
}
});
}
function fetchProducts(categoryDropdown) {
var category = categoryDropdown.val();
var productDropdown = categoryDropdown.closest('tr').find('select.form-select');
$.ajax({
type: "POST",
url: "fetch_products.php",
data: { category: category },
success: function(response) {
productDropdown.html(response);
productDropdown.prop('disabled', false);
}
});
}
function fetchTemplateData(templateName) {
$.ajax({
type: "POST",
url: "get_template_data.php",
data: { template_name: templateName },
success: function(response) {
console.log(response);
var templateData = JSON.parse(response);
$('#proposal-table tbody').empty();
templateData.forEach(function(data) {
var newRow = '' +
'' +
'' +
'' + data.product_category + '' +
'' +
'' +
'' +
'' +
'' + data.product_name + '' +
'' +
'' +
'' +
'' +
'' +
'' +
'' +
'' +
'' +
'' +
'' +
'' +
'-' +
'' +
'';
$('#proposal-table tbody').append(newRow);
});
fetchCategories($('select[name="product_category"]'));
fetchProducts($('select.form-select'));
}
});
}
function updateProductInfo(selectedOption) {
var row = selectedOption.closest('tr');
var sellPrice = parseFloat(selectedOption.data('sell-price'));
storeOriginalSellPrice(row, sellPrice);
row.find('.product-power-input').val(selectedOption.data('product-power'));
row.find('.buy-price-input').val(selectedOption.data('buy-price'));
row.find('.b2b-price-input').val(selectedOption.data('b2b-price'));
row.find('.special-price-input').val(selectedOption.data('special-price'));
row.find('.sell-price-input').val(sellPrice);
updateTotals(row);
}
function updateTotals(row) {
var quantity = parseInt(row.find('.quantity-input').val()) || 0;
var sellPrice = parseFloat(row.find('.sell-price-input').val()) || 0;
var discount = parseFloat(row.find('.discount-input').val()) || 0;
var originalSellPrice = parseFloat(row.data('original-sell-price'));
var discountedPrice = originalSellPrice - discount;
var totalPriceWithoutTax = quantity * discountedPrice;
var totalPriceWithTax = totalPriceWithoutTax * 1.21;
row.find('.total-price-without-tax-input').val(totalPriceWithoutTax.toFixed(2));
row.find('.total-price-with-tax-input').val(totalPriceWithTax.toFixed(2));
row.find('.sell-price-input').val(discountedPrice.toFixed(2));
updateTotalCalculations();
}
$(document).on('input', '.quantity-input, .discount-input', function() {
var row = $(this).closest('tr');
updateTotals(row);
});
$(document).on("change", "select.form-select", function() {
updateProductInfo($(this).find('option:selected'));
});
$(document).on("change", "select[name='product_category']", function() {
fetchProducts($(this));
});
$(document).on("click", ".delete-row-btn", function() {
$(this).closest("tr").remove();
updateTotalCalculations();
});
$("select[name='product_category']").each(function() {
fetchCategories($(this));
});
updateTotalCalculations();
$(".add-row-btn").click(function() {
var newRow = '' +
'' +
'' +
'' +
'' +
'' +
'' +
'' +
'' +
'' +
'' +
'' +
'' +
'' +
'' +
'' +
'' +
'' +
'' +
'' +
'' +
'-' +
'' +
'';
var newRowElement = $(newRow);
$("#proposal-table tbody").append(newRowElement);
var categoryDropdown = newRowElement.find('select[name="product_category"]');
fetchCategories(categoryDropdown);
var selectedTemplate = $("#template-dropdown").val();
if (selectedTemplate !== '') {
fetchTemplateData(selectedTemplate);
}
});
$(document).on("change", "#template-dropdown", function() {
var selectedTemplate = $(this).val();
if (selectedTemplate !== '') {
fetchTemplateData(selectedTemplate);
}
});
// Update total calculations function
function updateTotalCalculations() {
var totalWithoutTax = 0;
var totalWithTax = 0;
var totalTax = 0;
var totalDiscount = 0;
var totalPower = 0;
var support = 0;
$('#proposal-table tbody tr').each(function() {
var totalPriceWithoutTax = parseFloat($(this).find('.total-price-without-tax-input').val()) || 0;
var totalPriceWithTax = parseFloat($(this).find('.total-price-with-tax-input').val()) || 0;
var discount = parseFloat($(this).find('.discount-input').val()) || 0;
var power = parseFloat($(this).find('.product-power-input').val()) || 0;
var quantity = parseFloat($(this).find('.quantity-input').val()) || 0;
totalWithoutTax += totalPriceWithoutTax;
totalWithTax += totalPriceWithTax;
totalTax += totalPriceWithTax - totalPriceWithoutTax;
totalDiscount += discount * quantity;
totalPower += power * quantity / 1000;
});
support = (totalPower
Источник: [url]https://stackoverflow.com/questions/78116092/does-not-show-values-and-categories[/url]
Мобильная версия