AyulaPOS/views/barang/addproduct.php

510 lines
26 KiB
PHP

<?php
include('../../routes/db_conn.php');
// Function to generate new product code
function generateProductCode($conn) {
// Query the database for the highest product code
$query = "SELECT kode_barang FROM barang WHERE kode_barang LIKE 'BRG%' ORDER BY kode_barang DESC LIMIT 1";
$result = $conn->query($query);
if ($result->num_rows > 0) {
// Extract existing code
$row = $result->fetch_assoc();
$lastCode = $row['kode_barang'];
// Extract the numeric part and increment
$numericPart = intval(substr($lastCode, 3)); // Extract numbers after 'BRG'
$nextNumeric = $numericPart + 1;
// Format with leading zeros (e.g., BRG001, BRG002, etc.)
$newCode = 'BRG' . str_pad($nextNumeric, 3, '0', STR_PAD_LEFT);
} else {
// If no existing codes, start with BRG001
$newCode = 'BRG001';
}
return $newCode;
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Generate new product code
$kode_barang = generateProductCode($conn);
// Get data from form
$nama_barang = isset($_POST['nama_barang']) ? $_POST['nama_barang'] : '';
$id_jenis = isset($_POST['id_jenis']) ? $_POST['id_jenis'] : '';
$stok = isset($_POST['stok']) ? $_POST['stok'] : 0;
$harga = isset($_POST['harga']) ? $_POST['harga'] : '';
// Check if image file was uploaded
if (isset($_FILES['image']) && $_FILES['image']['error'] == 0) {
$image = $_FILES['image'];
// Validate image
$image_name = basename($image['name']);
$target_dir = "image/"; // Target folder to store images
$target_file = $target_dir . $image_name;
$image_file_type = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
// Check if uploaded file is an image
if (in_array($image_file_type, ['jpg', 'jpeg', 'png', 'gif'])) {
// Move file to target folder
if (!move_uploaded_file($image['tmp_name'], $target_file)) {
echo "Error: Failed to upload image!";
exit;
}
} else {
echo "Error: Only images (JPG, JPEG, PNG, GIF) are allowed!";
exit;
}
} else {
$image_name = ''; // If no image was uploaded, set image name to empty
}
// Validate id_jenis
$query_jenis = "SELECT id_jenis FROM jenis_barang WHERE id_jenis = ?";
$stmt_jenis = $conn->prepare($query_jenis);
$stmt_jenis->bind_param("i", $id_jenis);
$stmt_jenis->execute();
$stmt_jenis->store_result();
if ($stmt_jenis->num_rows == 0 && $id_jenis != '') {
echo "Error: Category not found!";
exit;
}
// Validate stock and price must be numbers
if (!preg_match('/^\d+$/', $stok) || !preg_match('/^\d+$/', $harga)) {
die("<script>alert('Stock and price must contain only numbers!'); window.history.back();</script>");
}
// Convert to integers for safety
$stok = intval($stok);
$harga = intval($harga);
// Insert data into database (now including kode_barang)
$sql = "INSERT INTO barang (kode_barang, nama_barang, id_jenis, stok, harga, image)
VALUES (?, ?, ?, ?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ssisis", $kode_barang, $nama_barang, $id_jenis, $stok, $harga, $image_name);
if ($stmt->execute()) {
echo "<script>alert('Product added successfully with code: " . $kode_barang . "'); window.location='productlist.php';</script>";
} else {
echo "Error: " . $stmt->error;
}
$stmt->close();
}
// Fetch categories for the dropdown
$query_categories = "SELECT id_jenis, nama_jenis FROM jenis_barang ORDER BY nama_jenis";
$result_categories = $conn->query($query_categories);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
<meta name="description" content="POS - Bootstrap Admin Template">
<meta name="keywords"
content="admin, estimates, bootstrap, business, corporate, creative, invoice, html5, responsive, Projects">
<meta name="author" content="Dreamguys - Bootstrap Admin Template">
<meta name="robots" content="noindex, nofollow">
<title>Dreams Pos admin template</title>
<link rel="shortcut icon" type="image/x-icon" href="/ayula-store/bootstrap/assets/img/favicon.jpg">
<link rel="stylesheet" href="/ayula-store/bootstrap/assets/css/bootstrap.min.css">
<link rel="stylesheet" href="/ayula-store/bootstrap/assets/css/animate.css">
<link rel="stylesheet" href="/ayula-store/bootstrap/assets/plugins/select2/css/select2.min.css">
<link rel="stylesheet" href="/ayula-store/bootstrap/assets/css/dataTables.bootstrap4.min.css">
<link rel="stylesheet" href="/ayula-store/bootstrap/assets/plugins/fontawesome/css/fontawesome.min.css">
<link rel="stylesheet" href="/ayula-store/bootstrap/assets/plugins/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/ayula-store/bootstrap/assets/css/style.css">
</head>
<body>
<div id="global-loader">
<div class="whirly-loader"> </div>
</div>
<div class="main-wrapper">
<div class="header">
<div class="header-left active">
<a href="index.html" class="logo">
<img src="/ayula-store/bootstrap/assets/img/logo.png" alt="">
</a>
<a href="index.html" class="logo-small">
<img src="/ayula-store/bootstrap/assets/img/logo-small.png" alt="">
</a>
<a id="toggle_btn" href="javascript:void(0);">
</a>
</div>
<a id="mobile_btn" class="mobile_btn" href="#sidebar">
<span class="bar-icon">
<span></span>
<span></span>
<span></span>
</span>
</a>
<ul class="nav user-menu">
<li class="nav-item">
<div class="top-nav-search">
<a href="javascript:void(0);" class="responsive-search">
<i class="fa fa-search"></i>
</a>
<form action="#">
<div class="searchinputs">
<input type="text" placeholder="Search Here ...">
<div class="search-addon">
<span><img src="/ayula-store/bootstrap/assets/img/icons/closes.svg"
alt="img"></span>
</div>
</div>
<a class="btn" id="searchdiv"><img src="/ayula-store/bootstrap/assets/img/icons/search.svg"
alt="img"></a>
</form>
</div>
</li>
<li class="nav-item dropdown">
<a href="javascript:void(0);" class="dropdown-toggle nav-link" data-bs-toggle="dropdown">
<img src="/ayula-store/bootstrap/assets/img/icons/notification-bing.svg" alt="img"> <span
class="badge rounded-pill">4</span>
</a>
<div class="dropdown-menu notifications">
<div class="topnav-dropdown-header">
<span class="notification-title">Notifications</span>
<a href="javascript:void(0)" class="clear-noti"> Clear All </a>
</div>
<div class="noti-content">
<ul class="notification-list">
<li class="notification-message">
<a href="activities.html">
<div class="media d-flex">
<span class="avatar flex-shrink-0">
<img alt=""
src="/ayula-store/bootstrap/assets/img/profiles/avatar-02.jpg">
</span>
<div class="media-body flex-grow-1">
<p class="noti-details"><span class="noti-title">John Doe</span> added
new task <span class="noti-title">Patient appointment booking</span>
</p>
<p class="noti-time"><span class="notification-time">4 mins ago</span>
</p>
</div>
</div>
</a>
</li>
<li class="notification-message">
<a href="activities.html">
<div class="media d-flex">
<span class="avatar flex-shrink-0">
<img alt=""
src="/ayula-store/bootstrap/assets/img/profiles/avatar-03.jpg">
</span>
<div class="media-body flex-grow-1">
<p class="noti-details"><span class="noti-title">Tarah Shropshire</span>
changed the task name <span class="noti-title">Appointment booking
with payment gateway</span></p>
<p class="noti-time"><span class="notification-time">6 mins ago</span>
</p>
</div>
</div>
</a>
</li>
<li class="notification-message">
<a href="activities.html">
<div class="media d-flex">
<span class="avatar flex-shrink-0">
<img alt=""
src="/ayula-store/bootstrap/assets/img/profiles/avatar-06.jpg">
</span>
<div class="media-body flex-grow-1">
<p class="noti-details"><span class="noti-title">Misty Tison</span>
added <span class="noti-title">Domenic Houston</span> and <span
class="noti-title">Claire Mapes</span> to project <span
class="noti-title">Doctor available module</span></p>
<p class="noti-time"><span class="notification-time">8 mins ago</span>
</p>
</div>
</div>
</a>
</li>
<li class="notification-message">
<a href="activities.html">
<div class="media d-flex">
<span class="avatar flex-shrink-0">
<img alt=""
src="/ayula-store/bootstrap/assets/img/profiles/avatar-17.jpg">
</span>
<div class="media-body flex-grow-1">
<p class="noti-details"><span class="noti-title">Rolland Webber</span>
completed task <span class="noti-title">Patient and Doctor video
conferencing</span></p>
<p class="noti-time"><span class="notification-time">12 mins ago</span>
</p>
</div>
</div>
</a>
</li>
<li class="notification-message">
<a href="activities.html">
<div class="media d-flex">
<span class="avatar flex-shrink-0">
<img alt=""
src="/ayula-store/bootstrap/assets/img/profiles/avatar-13.jpg">
</span>
<div class="media-body flex-grow-1">
<p class="noti-details"><span class="noti-title">Bernardo Galaviz</span>
added new task <span class="noti-title">Private chat module</span>
</p>
<p class="noti-time"><span class="notification-time">2 days ago</span>
</p>
</div>
</div>
</a>
</li>
</ul>
</div>
<div class="topnav-dropdown-footer">
<a href="activities.html">View all Notifications</a>
</div>
</div>
</li>
<li class="nav-item dropdown has-arrow main-drop">
<a href="javascript:void(0);" class="dropdown-toggle nav-link userset" data-bs-toggle="dropdown">
<span class="user-img"><img src="/ayula-store/bootstrap/assets/img/profiles/avator1.jpg" alt="">
<span class="status online"></span></span>
</a>
<div class="dropdown-menu menu-drop-user">
<div class="profilename">
<div class="profileset">
<span class="user-img"><img src="/ayula-store/bootstrap/assets/img/profiles/avator1.jpg"
alt="">
<span class="status online"></span></span>
<div class="profilesets">
<h6>John Doe</h6>
<h5>Admin</h5>
</div>
</div>
<hr class="m-0">
<a class="dropdown-item" href="profile.html"> <i class="me-2" data-feather="user"></i> My
Profile</a>
<a class="dropdown-item" href="generalsettings.html"><i class="me-2"
data-feather="settings"></i>Settings</a>
<hr class="m-0">
<a class="dropdown-item logout pb-0" href="signin.html"><img
src="/ayula-store/bootstrap/assets/img/icons/log-out.svg" class="me-2"
alt="img">Logout</a>
</div>
</div>
</li>
</ul>
<div class="dropdown mobile-user-menu">
<a href="javascript:void(0);" class="nav-link dropdown-toggle" data-bs-toggle="dropdown"
aria-expanded="false"><i class="fa fa-ellipsis-v"></i></a>
<div class="dropdown-menu dropdown-menu-right">
<a class="dropdown-item" href="profile.html">My Profile</a>
<a class="dropdown-item" href="generalsettings.html">Settings</a>
<a class="dropdown-item" href="signin.html">Logout</a>
</div>
</div>
</div>
<div class="sidebar" id="sidebar">
<div class="sidebar-inner slimscroll">
<div id="sidebar-menu" class="sidebar-menu">
<ul>
<li>
<a href="/ayula-store/views/reporttt/report.php"><img src="../../bootstrap/assets/img/icons/dashboard.svg" alt="img" /><span>
Dashboard</span>
</a>
</li>
<li class="submenu">
<a href="javascript:void(0);"><img src="../../bootstrap/assets/img/icons/product.svg" alt="img" /><span>
Barang</span>
<span class="menu-arrow"></span></a>
<ul>
<li><a href="/ayula-store/views/barang/productlist.php" >Daftar Barang</a></li>
<li><a href="/ayula-store/views/barang/addproduct.php"class="active">Tambah Barang</a></li>
<li><a href="categorylist.html">Daftar Kategori</a></li>
<li><a href="addcategory.html">Tambah Kategori</a></li>
</ul>
</li>
<li >
<a href="/ayula-store/views/barang/topsis_restock_view.php"><img src="../../bootstrap/assets/img/icons/sales1.svg" alt="img" /><span>
Analisa Barang</span>
</a>
</li>
<li class="submenu">
<a href="javascript:void(0);"><img src="../../bootstrap/assets/img/icons/users1.svg" alt="img" /><span>
Users</span>
<span class="menu-arrow"></span></a>
<ul>
<?php if (isset($userRole) && $userRole == 'admin') { ?>
<li><a href="/ayula-store/views/users/add-user.php">New User </a></li>
<?php } ?>
<li><a href="/ayula-store/views/users/">Users List</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
<div class="page-wrapper">
<div class="content">
<div class="page-header">
<div class="page-title">
<h4>Product Add</h4>
<h6>Create new product</h6>
</div>
</div>
<form action="addproduct.php" method="POST" enctype="multipart/form-data">
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-lg-3 col-sm-6 col-12">
<div class="form-group">
<label>Product Name</label>
<input type="text" name="nama_barang" required>
</div>
</div>
<div class="col-lg-3 col-sm-6 col-12">
<div class="form-group">
<label>Category</label>
<select class="select" name="id_jenis" required>
<option value="">Choose Category</option>
<?php
// Loop through all categories and create option tags
if ($result_categories && $result_categories->num_rows > 0) {
while($category = $result_categories->fetch_assoc()) {
echo '<option value="' . $category['id_jenis'] . '">' . $category['nama_jenis'] . '</option>';
}
}
?>
</select>
</div>
</div>
<div class="col-lg-3 col-sm-6 col-12">
<div class="form-group">
<label>Price</label>
<input type="text" name="harga" required>
</div>
</div>
<div class="col-lg-3 col-sm-6 col-12">
<div class="form-group">
<label>Quantity</label>
<input type="text" name="stok" required>
</div>
</div>
<div class="col-lg-3 col-sm-6 col-12">
<div class="form-group">
<label>Price</label>
<input type="text" name="harga" required>
</div>
</div>
<div class="col-lg-12">
<div class="form-group">
<label> Product Image</label>
<div class="image-upload">
<input type="file" name="image" id="image" accept="image/*">
<div class="image-uploads">
<img src="/ayula-store/bootstrap/assets/img/icons/upload.svg" alt="img">
<h4>Drag and drop a file to upload</h4>
</div>
</div>
</div>
</div>
<div class="col-lg-12">
<button type="submit" class="btn btn-submit">Submit</button>
<a href="productlist.php" class="btn btn-cancel">Cancel</a>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
<script src="/ayula-store/bootstrap/assets/js/jquery-3.6.0.min.js"></script>
<script src="/ayula-store/bootstrap/assets/js/feather.min.js"></script>
<script src="/ayula-store/bootstrap/assets/js/jquery.slimscroll.min.js"></script>
<script src="/ayula-store/bootstrap/assets/js/jquery.dataTables.min.js"></script>
<script src="/ayula-store/bootstrap/assets/js/dataTables.bootstrap4.min.js"></script>
<script src="/ayula-store/bootstrap/assets/js/bootstrap.bundle.min.js"></script>
<script src="/ayula-store/bootstrap/assets/plugins/select2/js/select2.min.js"></script>
<script src="/ayula-store/bootstrap/assets/plugins/sweetalert/sweetalert2.all.min.js"></script>
<script src="/ayula-store/bootstrap/assets/plugins/sweetalert/sweetalerts.min.js"></script>
<script src="/ayula-store/bootstrap/assets/js/script.js"></script>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<script>
document.addEventListener("DOMContentLoaded", function () {
function onlyNumbers(event) {
let charCode = event.which ? event.which : event.keyCode;
if (charCode < 48 || charCode > 57) {
event.preventDefault();
Swal.fire({
icon: "error",
title: "Input Tidak Valid!",
text: "Hanya angka yang diperbolehkan.",
showConfirmButton: false,
timer: 2000
});
}
}
let stokInput = document.querySelector("input[name='stok']");
let hargaInput = document.querySelector("input[name='harga']");
stokInput.addEventListener("keypress", onlyNumbers);
hargaInput.addEventListener("keypress", onlyNumbers);
function validateOnBlur(input) {
input.addEventListener("blur", function () {
if (!/^\d+$/.test(input.value)) {
Swal.fire({
icon: "warning",
title: "Input Tidak Valid!",
text: "Harap masukkan angka saja.",
showConfirmButton: false,
timer: 2000
});
input.value = "";
}
});
}
validateOnBlur(stokInput);
validateOnBlur(hargaInput);
});
</script>
</body>
</html>