Autosave: 20260218-031142

This commit is contained in:
Flatlogic Bot 2026-02-18 03:11:43 +00:00
parent 05f00caf70
commit 7fda017576

100
index.php
View File

@ -457,6 +457,10 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$min_stock = (float)($_POST['min_stock_level'] ?? 0);
$vat_rate = (float)($_POST['vat_rate'] ?? 0);
$expiry = $_POST['expiry_date'] ?: null;
$is_promotion = isset($_POST['is_promotion']) ? 1 : 0;
$promo_start = $_POST['promotion_start'] ?: null;
$promo_end = $_POST['promotion_end'] ?: null;
$promo_percent = (float)($_POST['promotion_percent'] ?? 0);
$image_path = null;
if (isset($_FILES['image']) && $_FILES['image']['error'] === UPLOAD_ERR_OK) {
@ -469,8 +473,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
}
if ($name_en && $name_ar) {
$stmt = db()->prepare("INSERT INTO stock_items (category_id, unit_id, supplier_id, name_en, name_ar, sku, purchase_price, sale_price, stock_quantity, min_stock_level, expiry_date, image_path, vat_rate) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->execute([$cat_id, $unit_id, $supplier_id, $name_en, $name_ar, $sku, $p_price, $s_price, $qty, $min_stock, $expiry, $image_path, $vat_rate]);
$stmt = db()->prepare("INSERT INTO stock_items (category_id, unit_id, supplier_id, name_en, name_ar, sku, purchase_price, sale_price, stock_quantity, min_stock_level, expiry_date, image_path, vat_rate, is_promotion, promotion_start, promotion_end, promotion_percent) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->execute([$cat_id, $unit_id, $supplier_id, $name_en, $name_ar, $sku, $p_price, $s_price, $qty, $min_stock, $expiry, $image_path, $vat_rate, $is_promotion, $promo_start, $promo_end, $promo_percent]);
$message = "Item added successfully!";
}
}
@ -504,6 +508,10 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$min_stock = (float)($_POST['min_stock_level'] ?? 0);
$vat_rate = (float)($_POST['vat_rate'] ?? 0);
$expiry = $_POST['expiry_date'] ?: null;
$is_promotion = isset($_POST['is_promotion']) ? 1 : 0;
$promo_start = $_POST['promotion_start'] ?: null;
$promo_end = $_POST['promotion_end'] ?: null;
$promo_percent = (float)($_POST['promotion_percent'] ?? 0);
$stmt = db()->prepare("SELECT image_path FROM stock_items WHERE id = ?");
$stmt->execute([$id]);
@ -523,8 +531,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
}
if ($name_en && $name_ar) {
$stmt = db()->prepare("UPDATE stock_items SET category_id = ?, unit_id = ?, supplier_id = ?, name_en = ?, name_ar = ?, sku = ?, purchase_price = ?, sale_price = ?, stock_quantity = ?, min_stock_level = ?, expiry_date = ?, image_path = ?, vat_rate = ? WHERE id = ?");
$stmt->execute([$cat_id, $unit_id, $supplier_id, $name_en, $name_ar, $sku, $p_price, $s_price, $qty, $min_stock, $expiry, $image_path, $vat_rate, $id]);
$stmt = db()->prepare("UPDATE stock_items SET category_id = ?, unit_id = ?, supplier_id = ?, name_en = ?, name_ar = ?, sku = ?, purchase_price = ?, sale_price = ?, stock_quantity = ?, min_stock_level = ?, expiry_date = ?, image_path = ?, vat_rate = ?, is_promotion = ?, promotion_start = ?, promotion_end = ?, promotion_percent = ? WHERE id = ?");
$stmt->execute([$cat_id, $unit_id, $supplier_id, $name_en, $name_ar, $sku, $p_price, $s_price, $qty, $min_stock, $expiry, $image_path, $vat_rate, $is_promotion, $promo_start, $promo_end, $promo_percent, $id]);
$message = "Item updated successfully!";
}
}
@ -1772,7 +1780,7 @@ switch ($page) {
ORDER BY q.id DESC");
$stmt->execute($params);
$data['quotations'] = $stmt->fetchAll();
$data['items_list'] = db()->query("SELECT id, name_en, name_ar, sale_price, purchase_price, stock_quantity, vat_rate FROM stock_items ORDER BY name_en ASC")->fetchAll();
$data['items_list'] = db()->query("SELECT id, name_en, name_ar, sale_price, purchase_price, stock_quantity, vat_rate, is_promotion, promotion_start, promotion_end, promotion_percent FROM stock_items ORDER BY name_en ASC")->fetchAll();
$data['customers_list'] = db()->query("SELECT id, name FROM customers WHERE type = 'customer' ORDER BY name ASC")->fetchAll();
break;
case 'payment_methods':
@ -1822,7 +1830,7 @@ switch ($page) {
}
unset($inv);
$data['items_list'] = db()->query("SELECT id, name_en, name_ar, sale_price, purchase_price, stock_quantity, vat_rate FROM stock_items ORDER BY name_en ASC")->fetchAll();
$data['items_list'] = db()->query("SELECT id, name_en, name_ar, sale_price, purchase_price, stock_quantity, vat_rate, is_promotion, promotion_start, promotion_end, promotion_percent FROM stock_items ORDER BY name_en ASC")->fetchAll();
$data['customers_list'] = db()->query("SELECT id, name FROM customers WHERE type = '" . ($type === 'sale' ? 'customer' : 'supplier') . "' ORDER BY name ASC")->fetchAll();
break;
@ -2864,7 +2872,12 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
</td>
<td><?= htmlspecialchars($item['sku']) ?></td>
<td>
<div class="fw-bold"><?= htmlspecialchars($item['name_en']) ?></div>
<div class="fw-bold">
<?= htmlspecialchars($item['name_en']) ?>
<?php if (isset($item['is_promotion']) && $item['is_promotion']): ?>
<span class="badge bg-success ms-1" style="font-size: 0.65rem;" data-en="Promo" data-ar="عرض">Promo</span>
<?php endif; ?>
</div>
<div class="small text-muted"><?= htmlspecialchars($item['name_ar']) ?></div>
</td>
<td><span data-en="<?= htmlspecialchars($item['cat_en']) ?>" data-ar="<?= htmlspecialchars($item['cat_ar']) ?>"><?= htmlspecialchars($item['cat_en']) ?></span></td>
@ -3001,6 +3014,32 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<label class="form-label">Item Picture</label>
<input type="file" name="image" class="form-control" accept="image/*">
</div>
<div class="col-12">
<hr>
<h6 data-en="Promotion Details" data-ar="تفاصيل العرض">Promotion Details</h6>
</div>
<div class="col-md-4">
<div class="form-check form-switch mt-4">
<input class="form-check-input isPromotionToggleEdit" type="checkbox" name="is_promotion" value="1" <?= $item['is_promotion'] ? 'checked' : '' ?> id="isPromotionToggleEdit<?= $item['id'] ?>" data-id="<?= $item['id'] ?>">
<label class="form-check-label" for="isPromotionToggleEdit<?= $item['id'] ?>" data-en="On Promotion?" data-ar="في العرض؟">On Promotion?</label>
</div>
</div>
<div class="col-md-8">
<div class="row g-3 promotionFieldsContainerEdit" id="promotionFieldsContainerEdit<?= $item['id'] ?>" style="display: <?= $item['is_promotion'] ? 'flex' : 'none' ?>;">
<div class="col-md-4">
<label class="form-label">Start Date</label>
<input type="date" name="promotion_start" class="form-control" value="<?= $item['promotion_start'] ?>">
</div>
<div class="col-md-4">
<label class="form-label">End Date</label>
<input type="date" name="promotion_end" class="form-control" value="<?= $item['promotion_end'] ?>">
</div>
<div class="col-md-4">
<label class="form-label">Percent (%)</label>
<input type="number" step="0.01" name="promotion_percent" class="form-control" value="<?= (float)$item['promotion_percent'] ?>">
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
@ -6043,6 +6082,32 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<label class="form-label" data-en="Expiry Date" data-ar="تاريخ الانتهاء">Expiry Date</label>
<input type="date" name="expiry_date" class="form-control">
</div>
<div class="col-12 mt-3">
<hr>
<h6 data-en="Promotion Details" data-ar="تفاصيل العرض">Promotion Details</h6>
</div>
<div class="col-md-4">
<div class="form-check form-switch mt-4">
<input class="form-check-input" type="checkbox" name="is_promotion" id="isPromotionToggle">
<label class="form-check-label" for="isPromotionToggle" data-en="On Promotion?" data-ar="في العرض؟">On Promotion?</label>
</div>
</div>
<div class="col-md-8">
<div class="row g-3" id="promotionFieldsContainer" style="display: none;">
<div class="col-md-4">
<label class="form-label" data-en="Start Date" data-ar="تاريخ البدء">Start Date</label>
<input type="date" name="promotion_start" class="form-control">
</div>
<div class="col-md-4">
<label class="form-label" data-en="End Date" data-ar="تاريخ الانتهاء">End Date</label>
<input type="date" name="promotion_end" class="form-control">
</div>
<div class="col-md-4">
<label class="form-label" data-en="Percent (%)" data-ar="النسبة (%)">Percent (%)</label>
<input type="number" step="0.01" name="promotion_percent" class="form-control" value="0.00">
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
@ -6293,10 +6358,27 @@ document.addEventListener('DOMContentLoaded', function() {
if (hasExpiryToggle && expiryDateContainer) {
hasExpiryToggle.addEventListener('change', function() {
expiryDateContainer.style.display = this.checked ? 'block' : 'none';
if (!this.checked) {
expiryDateContainer.querySelector('input').value = '';
});
}
const isPromotionToggle = document.getElementById('isPromotionToggle');
const promotionFieldsContainer = document.getElementById('promotionFieldsContainer');
if (isPromotionToggle && promotionFieldsContainer) {
isPromotionToggle.addEventListener('change', function() {
promotionFieldsContainer.style.display = this.checked ? 'flex' : 'none';
});
}
document.querySelectorAll('.isPromotionToggleEdit').forEach(toggle => {
toggle.addEventListener('change', function() {
const id = this.getAttribute('data-id');
const container = document.getElementById('promotionFieldsContainerEdit' + id);
if (container) {
container.style.display = this.checked ? 'flex' : 'none';
}
});
});
});
}
// Status change logic for Paid Amount field