Change 'Rack' to 'Bin'
This commit is contained in:
@@ -59,7 +59,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Advanced mode — zone + aisle range + rack range -->
|
||||
<!-- Advanced mode — zone + aisle range + bin range -->
|
||||
<div id="form_advanced" class="d-none">
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3">
|
||||
@@ -81,16 +81,16 @@
|
||||
<div class="form-text">Must be same type as Aisle From</div>
|
||||
</div>
|
||||
<div class="col-md-3 mb-3">
|
||||
<label for="rack_from" class="form-label" id="label_rack_from">Rack From</label>
|
||||
<input type="text" class="form-control" id="rack_from" placeholder="e.g. 1 or A"
|
||||
<label for="bin_from" class="form-label" id="label_bin_from">Bin From</label>
|
||||
<input type="text" class="form-control" id="bin_from" placeholder="e.g. 1 or A"
|
||||
pattern="^([0-9]+|[A-Za-z])$" title="Number or single letter">
|
||||
<div class="form-text">Number (1–99) or letter (A–Z)</div>
|
||||
</div>
|
||||
<div class="col-md-3 mb-3">
|
||||
<label for="rack_to" class="form-label" id="label_rack_to">Rack To</label>
|
||||
<input type="text" class="form-control" id="rack_to" placeholder="e.g. 10 or J"
|
||||
<label for="bin_to" class="form-label" id="label_bin_to">Bin To</label>
|
||||
<input type="text" class="form-control" id="bin_to" placeholder="e.g. 10 or J"
|
||||
pattern="^([0-9]+|[A-Za-z])$" title="Number or single letter">
|
||||
<div class="form-text">Must be same type as Rack From</div>
|
||||
<div class="form-text">Must be same type as Bin From</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -122,7 +122,7 @@
|
||||
<script>
|
||||
// ── Location config ───────────────────────────────────────────────────────
|
||||
var advanced = false;
|
||||
var label_rack = 'Location';
|
||||
var label_bin = 'Location';
|
||||
var label_zone = 'Zone';
|
||||
var label_aisle = 'Aisle';
|
||||
|
||||
@@ -135,7 +135,7 @@
|
||||
onSuccess: function(res) {
|
||||
var s = res.output;
|
||||
advanced = s.advanced_location == 1;
|
||||
label_rack = s.location_label_rack || (advanced ? 'Rack' : 'Location');
|
||||
label_bin = s.location_label_bin || (advanced ? 'Bin' : 'Location');
|
||||
label_zone = s.location_label_zone || 'Zone';
|
||||
label_aisle = s.location_label_aisle || 'Aisle';
|
||||
apply_location_labels();
|
||||
@@ -150,13 +150,13 @@
|
||||
$('#label_zone').text(label_zone);
|
||||
$('#label_aisle_from').text(label_aisle + ' From');
|
||||
$('#label_aisle_to').text(label_aisle + ' To');
|
||||
$('#label_rack_from').text(label_rack + ' From');
|
||||
$('#label_rack_to').text(label_rack + ' To');
|
||||
$('#label_bin_from').text(label_bin + ' From');
|
||||
$('#label_bin_to').text(label_bin + ' To');
|
||||
} else {
|
||||
$('#form_advanced').addClass('d-none');
|
||||
$('#form_simple').removeClass('d-none');
|
||||
$('#label_location_from').text(label_rack + ' From');
|
||||
$('#label_location_to').text(label_rack + ' To');
|
||||
$('#label_location_from').text(label_bin + ' From');
|
||||
$('#label_location_to').text(label_bin + ' To');
|
||||
$('#location_from').attr('placeholder', 'e.g. Shelf-A or 1');
|
||||
$('#location_to').attr('placeholder', 'e.g. Shelf-E or 5');
|
||||
}
|
||||
@@ -164,14 +164,14 @@
|
||||
|
||||
// ── Save storage ──────────────────────────────────────────────────────────
|
||||
function manage_storage() {
|
||||
var zone, aisle_from, aisle_to, rack_from, rack_to;
|
||||
var zone, aisle_from, aisle_to, bin_from, bin_to;
|
||||
|
||||
if (advanced) {
|
||||
zone = $('#zone').val().trim();
|
||||
aisle_from = $('#aisle_from').val().trim().toUpperCase();
|
||||
aisle_to = $('#aisle_to').val().trim().toUpperCase();
|
||||
rack_from = $('#rack_from').val().trim().toUpperCase();
|
||||
rack_to = $('#rack_to').val().trim().toUpperCase();
|
||||
bin_from = $('#bin_from').val().trim().toUpperCase();
|
||||
bin_to = $('#bin_to').val().trim().toUpperCase();
|
||||
|
||||
var isNumeric = function(v) { return /^[0-9]+$/.test(v); };
|
||||
var isAlpha = function(v) { return /^[A-Z]$/.test(v); };
|
||||
@@ -182,8 +182,8 @@
|
||||
if (!aisle_from || !aisle_to) {
|
||||
alert('Please enter the full ' + label_aisle + ' range.'); return;
|
||||
}
|
||||
if (!rack_from || !rack_to) {
|
||||
alert('Please enter the full ' + label_rack + ' range.'); return;
|
||||
if (!bin_from || !bin_to) {
|
||||
alert('Please enter the full ' + label_bin + ' range.'); return;
|
||||
}
|
||||
|
||||
if (aisle_from && aisle_to) {
|
||||
@@ -197,25 +197,25 @@
|
||||
alert(label_aisle + ' From must be less than or equal to To.'); return;
|
||||
}
|
||||
}
|
||||
if (rack_from && rack_to) {
|
||||
if (isNumeric(rack_from) !== isNumeric(rack_to)) {
|
||||
alert(label_rack + ' From and To must both be numbers or both be letters.'); return;
|
||||
if (bin_from && bin_to) {
|
||||
if (isNumeric(bin_from) !== isNumeric(bin_to)) {
|
||||
alert(label_bin + ' From and To must both be numbers or both be letters.'); return;
|
||||
}
|
||||
if (isAlpha(rack_from) && rack_from.charCodeAt(0) > rack_to.charCodeAt(0)) {
|
||||
alert(label_rack + ' From must be less than or equal to To.'); return;
|
||||
if (isAlpha(bin_from) && bin_from.charCodeAt(0) > bin_to.charCodeAt(0)) {
|
||||
alert(label_bin + ' From must be less than or equal to To.'); return;
|
||||
}
|
||||
if (isNumeric(rack_from) && parseInt(rack_from) > parseInt(rack_to)) {
|
||||
alert(label_rack + ' From must be less than or equal to To.'); return;
|
||||
if (isNumeric(bin_from) && parseInt(bin_from) > parseInt(bin_to)) {
|
||||
alert(label_bin + ' From must be less than or equal to To.'); return;
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
// Simple mode — from/to, same value written to zone/aisle/rack
|
||||
// Simple mode — from/to, same value written to zone/aisle/bin
|
||||
var loc_from = $('#location_from').val().trim();
|
||||
var loc_to = $('#location_to').val().trim();
|
||||
|
||||
if (!loc_from) {
|
||||
alert('Please enter a ' + label_rack + ' From value.'); return;
|
||||
alert('Please enter a ' + label_bin + ' From value.'); return;
|
||||
}
|
||||
// If To is blank, default to same as From (single location)
|
||||
if (!loc_to) loc_to = loc_from;
|
||||
@@ -225,14 +225,14 @@
|
||||
var mf = loc_from.match(prefix_pattern);
|
||||
var mt = loc_to.match(prefix_pattern);
|
||||
if (mf && mt && mf[1] !== mt[1]) {
|
||||
alert(label_rack + ' From and To must share the same prefix (e.g. Shelf-A → Shelf-E).'); return;
|
||||
alert(label_bin + ' From and To must share the same prefix (e.g. Shelf-A → Shelf-E).'); return;
|
||||
}
|
||||
|
||||
zone = loc_from;
|
||||
aisle_from = loc_from;
|
||||
aisle_to = loc_to;
|
||||
rack_from = loc_from;
|
||||
rack_to = loc_to;
|
||||
bin_from = loc_from;
|
||||
bin_to = loc_to;
|
||||
}
|
||||
|
||||
return ajax_request({
|
||||
@@ -245,8 +245,8 @@
|
||||
zone: zone,
|
||||
aisle_from: aisle_from,
|
||||
aisle_to: aisle_to,
|
||||
rack_from: rack_from,
|
||||
rack_to: rack_to,
|
||||
bin_from: bin_from,
|
||||
bin_to: bin_to,
|
||||
description: $('#description').val(),
|
||||
},
|
||||
onSuccess: function() {
|
||||
@@ -287,11 +287,11 @@
|
||||
$('#zone').val(d.zone || '');
|
||||
$('#aisle_from').val(d.aisle_from || '');
|
||||
$('#aisle_to').val(d.aisle_to || '');
|
||||
$('#rack_from').val(d.rack_from || '');
|
||||
$('#rack_to').val(d.rack_to || '');
|
||||
$('#bin_from').val(d.bin_from || '');
|
||||
$('#bin_to').val(d.bin_to || '');
|
||||
} else {
|
||||
$('#location_from').val(d.rack_from || '');
|
||||
$('#location_to').val(d.rack_to || '');
|
||||
$('#location_from').val(d.bin_from || '');
|
||||
$('#location_to').val(d.bin_to || '');
|
||||
}
|
||||
$('button[type=submit]').text('Update Storage');
|
||||
$('button[type=reset]').hide();
|
||||
|
||||
+16
-16
@@ -60,7 +60,7 @@
|
||||
<div class="d-flex flex-column">
|
||||
<span class="fs-2 fw-bold mb-3 d-block">—</span>
|
||||
<span class="fs-5">Total Capacity</span>
|
||||
<small class="text-warning">Rack positions available</small>
|
||||
<small class="text-warning">Bin positions available</small>
|
||||
</div>
|
||||
<div>
|
||||
<span class="text-warning">
|
||||
@@ -87,7 +87,7 @@
|
||||
<div class="d-flex flex-column">
|
||||
<span class="fs-2 fw-bold mb-3 d-block">—</span>
|
||||
<span class="fs-5">Space Used</span>
|
||||
<small class="text-success">Racks occupied</small>
|
||||
<small class="text-success">Bins occupied</small>
|
||||
</div>
|
||||
<div>
|
||||
<span class="text-success">
|
||||
@@ -206,7 +206,7 @@
|
||||
<div class="mb-6 d-flex align-items-center justify-content-between">
|
||||
<div>
|
||||
<h2 class="fs-4 mb-2">Storage Locations</h2>
|
||||
<p id="storage_subtitle">Zones, aisles, and rack assignments</p>
|
||||
<p id="storage_subtitle">Zones, aisles, and bin assignments</p>
|
||||
</div>
|
||||
<div>
|
||||
<a href="<?php echo $server_url?>inventory/manage_storage.php" class="btn btn-secondary" data-min-role="admin">
|
||||
@@ -234,7 +234,7 @@
|
||||
<th class="py-3">Warehouse</th>
|
||||
<th class="py-3" id="th_level1">Zone</th>
|
||||
<th class="py-3" id="th_level2">Aisle Range</th>
|
||||
<th class="py-3" id="th_level3">Rack Range</th>
|
||||
<th class="py-3" id="th_level3">Bin Range</th>
|
||||
<th class="py-3">Items Stored</th>
|
||||
<th>Action</th>
|
||||
</tr>
|
||||
@@ -257,7 +257,7 @@
|
||||
<script>
|
||||
// ── Location config ───────────────────────────────────────────────────────
|
||||
var advanced = false;
|
||||
var label_rack = 'Location';
|
||||
var label_bin = 'Location';
|
||||
var label_zone = 'Zone';
|
||||
var label_aisle = 'Aisle';
|
||||
|
||||
@@ -270,7 +270,7 @@
|
||||
onSuccess: function(res) {
|
||||
var s = res.output;
|
||||
advanced = s.advanced_location == 1;
|
||||
label_rack = s.location_label_rack || (advanced ? 'Rack' : 'Location');
|
||||
label_bin = s.location_label_bin || (advanced ? 'Bin' : 'Location');
|
||||
label_zone = s.location_label_zone || 'Zone';
|
||||
label_aisle = s.location_label_aisle || 'Aisle';
|
||||
apply_location_labels();
|
||||
@@ -280,26 +280,26 @@
|
||||
|
||||
function apply_location_labels() {
|
||||
// Stats card subtitles
|
||||
$('#total_capacity small').text(label_rack + ' positions available');
|
||||
$('#total_space_used small').text(label_rack + 's occupied');
|
||||
$('#total_capacity small').text(label_bin + ' positions available');
|
||||
$('#total_space_used small').text(label_bin + 's occupied');
|
||||
|
||||
// Storage tab subtitle + search
|
||||
$('#storage_subtitle').text(advanced
|
||||
? label_zone + 's, ' + label_aisle + 's, and ' + label_rack + ' assignments'
|
||||
: label_rack + ' assignments');
|
||||
? label_zone + 's, ' + label_aisle + 's, and ' + label_bin + ' assignments'
|
||||
: label_bin + ' assignments');
|
||||
$('#search_storage').attr('placeholder', advanced
|
||||
? 'Search by warehouse or ' + label_zone.toLowerCase() + '…'
|
||||
: 'Search by warehouse or ' + label_rack.toLowerCase() + '…');
|
||||
: 'Search by warehouse or ' + label_bin.toLowerCase() + '…');
|
||||
|
||||
// Table headers
|
||||
if (advanced) {
|
||||
$('#th_level1').text(label_zone).show();
|
||||
$('#th_level2').text(label_aisle + ' Range').show();
|
||||
$('#th_level3').text(label_rack + ' Range');
|
||||
$('#th_level3').text(label_bin + ' Range');
|
||||
} else {
|
||||
$('#th_level1').hide();
|
||||
$('#th_level2').hide();
|
||||
$('#th_level3').text(label_rack + ' Range');
|
||||
$('#th_level3').text(label_bin + ' Range');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -432,7 +432,7 @@
|
||||
alasql(`SELECT * FROM storage
|
||||
WHERE LOWER(warehouse_name) LIKE '%${kw}%'
|
||||
OR LOWER(zone) LIKE '%${kw}%'
|
||||
OR LOWER(rack) LIKE '%${kw}%'`) :
|
||||
OR LOWER(bin) LIKE '%${kw}%'`) :
|
||||
alasql(`SELECT * FROM storage`);
|
||||
|
||||
var page = generate_pagination('storage', filtered.length);
|
||||
@@ -452,8 +452,8 @@
|
||||
var location_cells = advanced
|
||||
? `<td class="py-3">${item['zone']}</td>
|
||||
<td class="py-3">${item['aisle_from']} - ${item['aisle_to']}</td>
|
||||
<td class="py-3">${item['rack_from']} - ${item['rack_to']}</td>`
|
||||
: `<td class="py-3">${item['rack_from']} - ${item['rack_to']}</td>`;
|
||||
<td class="py-3">${item['bin_from']} - ${item['bin_to']}</td>`
|
||||
: `<td class="py-3">${item['bin_from']} - ${item['bin_to']}</td>`;
|
||||
|
||||
body += `<tr>
|
||||
<td class="py-3">${item['warehouse_name']}</td>
|
||||
|
||||
Reference in New Issue
Block a user