partial update products

This commit is contained in:
2025-06-04 16:58:50 +07:00
parent 215792ce63
commit 8305e44c42
35 changed files with 179 additions and 707 deletions

View File

@@ -125,8 +125,10 @@ $(document).on("click", ".btn-destroy-product-category", function () {
});
function loadParentCategories(selectedId = null) {
const selectElement = $("#parent_id");
let urlParents = selectElement.data("url");
$.ajax({
url: "/warehouse/categories/parents", // create this route
url: urlParents,
type: "GET",
success: function (data) {
$("#parent_id")

View File

@@ -1,43 +1 @@
document.addEventListener("DOMContentLoaded", function () {
const addBtn = document.getElementById("addDealerRow");
const dealerRows = document.getElementById("dynamicDealerRows");
// Get dealer data from Blade
const dealerDataDiv = document.getElementById("dealerData");
const dealers = JSON.parse(dealerDataDiv.getAttribute("data-dealers")); // 👈 this reads JSON from Blade
let rowCount = 0;
function createDealerRow(index) {
const dealerOptions = dealers
.map((d) => `<option value="${d.id}">${d.name}</option>`)
.join("");
return `
<div class="form-group row align-items-center dealer-row" data-index="${index}">
<div class="col-md-5">
<select name="dealer_stock[${index}][dealer_id]" class="form-control" required>
<option value="">-- Pilih Dealer --</option>
${dealerOptions}
</select>
</div>
<div class="col-md-4">
<input type="number" name="dealer_stock[${index}][quantity]" class="form-control" value="1" min="1" required>
</div>
<div class="col-md-3">
<button type="button" class="btn btn-danger btn-sm removeDealerRow">Hapus</button>
</div>
</div>
`;
}
addBtn.addEventListener("click", function () {
dealerRows.insertAdjacentHTML("beforeend", createDealerRow(rowCount));
rowCount++;
});
dealerRows.addEventListener("click", function (e) {
if (e.target.classList.contains("removeDealerRow")) {
e.target.closest(".dealer-row").remove();
}
});
});
document.addEventListener("DOMContentLoaded", function () {});

View File

@@ -1,48 +1 @@
document.addEventListener("DOMContentLoaded", function () {
let dealerRowContainer = document.getElementById("dynamicDealerRows");
let addDealerButton = document.getElementById("addDealerRow");
// Initial index from existing dealer rows
let rowIndex =
dealerRowContainer.querySelectorAll(".dealer-stock-row").length;
addDealerButton.addEventListener("click", function () {
const newRow = document.createElement("div");
newRow.className = "form-group row align-items-center dealer-stock-row";
newRow.innerHTML = `
<div class="col-md-6">
<select name="dealer_stock[${rowIndex}][dealer_id]" class="form-control">
<option value="">-- Pilih Dealer --</option>
${generateDealerOptions()}
</select>
</div>
<div class="col-md-4">
<input type="number" name="dealer_stock[${rowIndex}][quantity]" class="form-control" value="1" min="1" required placeholder="Jumlah Stok" />
</div>
<div class="col-md-2">
<button type="button" class="btn btn-danger btn-sm remove-dealer-row"> Hapus </button>
</div>
`;
dealerRowContainer.appendChild(newRow);
rowIndex++;
});
// Handle removal of dealer row
dealerRowContainer.addEventListener("click", function (event) {
if (
event.target &&
event.target.classList.contains("remove-dealer-row")
) {
event.target.closest(".dealer-stock-row").remove();
}
});
// Function to generate dealer <option> elements dynamically
function generateDealerOptions() {
const dealerDataDiv = document.getElementById("dealerData");
const dealers = JSON.parse(dealerDataDiv.getAttribute("data-dealers"));
return dealers
.map((d) => `<option value="${d.id}">${d.name}</option>`)
.join("");
}
});
document.addEventListener("DOMContentLoaded", function () {});

View File

@@ -1,20 +0,0 @@
$.ajaxSetup({
headers: {
"X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
},
});
let tableContainer = $("#stock-mutations-table");
let url = tableContainer.data("url");
let table = $("#stock-mutations-table").DataTable({
processing: true,
serverSide: true,
ajax: url,
columns: [
{ data: "product_name", name: "product_name" },
{ data: "dealer_name", name: "dealer_name" },
{ data: "user_name", name: "user_name" },
{ data: "mutation_type_label", name: "mutation_type_label" },
{ data: "quantity", name: "quantity" },
{ data: "created_at", name: "created_at" },
],
});

View File

@@ -1,21 +0,0 @@
$.ajaxSetup({
headers: {
"X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
},
});
let tableContainer = $("#stock-opnames-table");
let url = tableContainer.data("url");
let table = $("#stock-opnames-table").DataTable({
processing: true,
serverSide: true,
ajax: url,
columns: [
{ data: "product_name", name: "product_name" },
{ data: "dealer_name", name: "dealer_name" },
{ data: "user_name", name: "user_name" },
{ data: "system_quantity", name: "system_quantity" },
{ data: "physical_quantity", name: "physical_quantity" },
{ data: "difference", name: "difference" },
{ data: "opname_date", name: "opname_date" },
],
});