[test] contact to setting modules
This commit is contained in:
@@ -131,6 +131,7 @@
|
||||
<!-- Submit -->
|
||||
<div class="mb-3 col-lg-12">
|
||||
<button type="submit" class="btn btn-primary" onclick="manage_stock_transfer();">Transfer Stock</button>
|
||||
<button type="button" class="btn btn-success ms-2 d-none" id="approve_stock_btn" onclick="approve_current_stock();">Approve</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
@@ -171,6 +172,7 @@
|
||||
if (advanced) {
|
||||
$('#group_zone_from, #group_zone_to').show();
|
||||
$('#group_aisle_from, #group_aisle_to').show();
|
||||
$('#zone_from, #zone_to, #aisle_from, #aisle_to').prop('required', true);
|
||||
$('#label_zone_from').text('From ' + label_zone);
|
||||
$('#label_zone_to').text('To ' + label_zone);
|
||||
$('#label_aisle_from').text('From ' + label_aisle);
|
||||
@@ -184,6 +186,7 @@
|
||||
} else {
|
||||
$('#group_zone_from, #group_zone_to').hide();
|
||||
$('#group_aisle_from, #group_aisle_to').hide();
|
||||
$('#zone_from, #zone_to, #aisle_from, #aisle_to').prop('required', false).removeClass('is-invalid is-valid');
|
||||
$('#label_rack_from').text('From ' + label_rack);
|
||||
$('#label_rack_to').text('To ' + label_rack);
|
||||
$('#rack_from, #rack_to').find('option:first').text('Please select ' + label_rack.toLowerCase());
|
||||
@@ -194,10 +197,12 @@
|
||||
// ── Submit ────────────────────────────────────────────────────────────────
|
||||
function manage_stock_transfer() {
|
||||
|
||||
var rack_from_val = $('#rack_from').val();
|
||||
var rack_to_val = $('#rack_to').val();
|
||||
var sku_val = $('#product_sku').attr('secondary') || $('#product_sku').val();
|
||||
|
||||
// Simple mode — mirror rack value to zone and aisle before submit
|
||||
if (!advanced) {
|
||||
var rack_from_val = $('#rack_from').val();
|
||||
var rack_to_val = $('#rack_to').val();
|
||||
$('#zone_from').val(rack_from_val);
|
||||
$('#aisle_from').val(rack_from_val);
|
||||
$('#zone_to').val(rack_to_val);
|
||||
@@ -208,7 +213,18 @@
|
||||
url: '<?php echo $server_url?>ics/api/engine/manage_stock_transfer.php',
|
||||
autoPrepare: true,
|
||||
checkRequired: 1,
|
||||
data: { 'contact_id': $('#contact').attr('data-id') },
|
||||
data: {
|
||||
'contact_id': $('#contact').attr('data-id'),
|
||||
'warehouse_from': $('#warehouse_from').val(),
|
||||
'warehouse_to': $('#warehouse_to').val(),
|
||||
'zone_from': advanced ? $('#zone_from').val() : rack_from_val,
|
||||
'aisle_from': advanced ? $('#aisle_from').val() : rack_from_val,
|
||||
'rack_from': rack_from_val,
|
||||
'zone_to': advanced ? $('#zone_to').val() : rack_to_val,
|
||||
'aisle_to': advanced ? $('#aisle_to').val() : rack_to_val,
|
||||
'rack_to': rack_to_val,
|
||||
'product_sku': sku_val,
|
||||
},
|
||||
action: 'manage',
|
||||
onSuccess: function() {
|
||||
window.location.href = '<?php echo $server_url?>ics/stock_transfer.php';
|
||||
@@ -216,6 +232,30 @@
|
||||
});
|
||||
}
|
||||
|
||||
function approve_current_stock() {
|
||||
bootbox.confirm({
|
||||
message: 'Approve this stock-transfer record?',
|
||||
buttons: { confirm: { label: 'Approve', className: 'btn-success' }, cancel: { label: 'Cancel', className: 'btn-secondary' } },
|
||||
callback: function(result) {
|
||||
if (!result) return;
|
||||
ajax_request({
|
||||
url: '<?php echo $server_url?>ics/api/engine/approve_stock.php',
|
||||
autoPrepare: true,
|
||||
checkRequired: 0,
|
||||
action: 'update',
|
||||
data: {
|
||||
id: '<?php echo $_GET["id"] ?? "";?>',
|
||||
warehouse: '<?php echo $_GET["wh"] ?? "";?>',
|
||||
type: 'transfer'
|
||||
},
|
||||
onSuccess: function() {
|
||||
window.location.reload();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// ── Step 1: Product selected → load active lots + from-warehouses ─────────
|
||||
function retrieve_active_lot() {
|
||||
@@ -273,7 +313,11 @@
|
||||
autoPrepare: true,
|
||||
checkRequired: 0,
|
||||
noLoading: true,
|
||||
data: { 'type': type, 'lot_number': type === 'from' ? $('#lot_number').val() : '' },
|
||||
data: {
|
||||
'type': type,
|
||||
'product_sku': type === 'from' ? ($('#product_sku').attr('secondary') || $('#product_sku').val()) : '',
|
||||
'lot_number': type === 'from' ? $('#lot_number').val() : ''
|
||||
},
|
||||
action: 'read',
|
||||
onSuccess: function(res) {
|
||||
var option = '<option value="">Select warehouse...</option>';
|
||||
@@ -288,13 +332,16 @@
|
||||
|
||||
// ── Zone / Aisle / Rack loaders ───────────────────────────────────────────
|
||||
function retrieve_zone(type, callback) {
|
||||
var extra = {};
|
||||
var extra = {
|
||||
'warehouse_from': $('#warehouse_from').val(),
|
||||
'warehouse_to': $('#warehouse_to').val()
|
||||
};
|
||||
if (type === 'from') {
|
||||
extra = {
|
||||
extra = Object.assign(extra, {
|
||||
'product_sku': $('#product_sku').attr('secondary') || $('#product_sku').val(),
|
||||
'lot_number': $('#lot_number').val(),
|
||||
'serial_number': $('#serial_number').val()
|
||||
};
|
||||
});
|
||||
}
|
||||
return ajax_request({
|
||||
url: '<?php echo $server_url?>ics/api/engine/retrieve_zone.php',
|
||||
@@ -315,13 +362,18 @@
|
||||
}
|
||||
|
||||
function retrieve_aisle(type, callback) {
|
||||
var extra = {};
|
||||
var extra = {
|
||||
'warehouse_from': $('#warehouse_from').val(),
|
||||
'warehouse_to': $('#warehouse_to').val(),
|
||||
'zone_from': $('#zone_from').val(),
|
||||
'zone_to': $('#zone_to').val()
|
||||
};
|
||||
if (type === 'from') {
|
||||
extra = {
|
||||
extra = Object.assign(extra, {
|
||||
'product_sku': $('#product_sku').attr('secondary') || $('#product_sku').val(),
|
||||
'lot_number': $('#lot_number').val(),
|
||||
'serial_number': $('#serial_number').val()
|
||||
};
|
||||
});
|
||||
}
|
||||
return ajax_request({
|
||||
url: '<?php echo $server_url?>ics/api/engine/retrieve_aisle.php',
|
||||
@@ -342,13 +394,20 @@
|
||||
}
|
||||
|
||||
function retrieve_rack(type, callback) {
|
||||
var extra = {};
|
||||
var extra = {
|
||||
'warehouse_from': $('#warehouse_from').val(),
|
||||
'warehouse_to': $('#warehouse_to').val(),
|
||||
'zone_from': $('#zone_from').val(),
|
||||
'zone_to': $('#zone_to').val(),
|
||||
'aisle_from': $('#aisle_from').val(),
|
||||
'aisle_to': $('#aisle_to').val()
|
||||
};
|
||||
if (type === 'from') {
|
||||
extra = {
|
||||
extra = Object.assign(extra, {
|
||||
'product_sku': $('#product_sku').attr('secondary') || $('#product_sku').val(),
|
||||
'lot_number': $('#lot_number').val(),
|
||||
'serial_number': $('#serial_number').val()
|
||||
};
|
||||
});
|
||||
}
|
||||
return ajax_request({
|
||||
url: '<?php echo $server_url?>ics/api/engine/retrieve_rack.php',
|
||||
@@ -400,9 +459,17 @@
|
||||
$('#serial_number').html('<option value="' + (data.serial_number || '') + '">' + (data.serial_number || '—') + '</option>')
|
||||
.val(data.serial_number || '').prop('disabled', true);
|
||||
|
||||
$('#product_name').val(data.product_name);
|
||||
$('#product_sku').attr('secondary', data.product_sku).prop('disabled', true);
|
||||
|
||||
retrieve_warehouse('from').then(function() {
|
||||
return retrieve_warehouse('to');
|
||||
}).then(function() {
|
||||
$('select[name="warehouse"][role="from"]').val(from_wh).prop('disabled', true);
|
||||
$('select[name="warehouse"][role="to"]').val(to_wh).prop('disabled', true);
|
||||
|
||||
if (advanced) {
|
||||
// Full cascade for From
|
||||
$('select[name="warehouse"][role="from"]').val(from_wh).prop('disabled', true);
|
||||
retrieve_zone('from', function() {
|
||||
$('select[name="zone"][role="from"]').val(data.zone).prop('disabled', true);
|
||||
retrieve_aisle('from', function() {
|
||||
@@ -415,7 +482,6 @@
|
||||
});
|
||||
} else {
|
||||
// Simple mode — skip zone/aisle cascade, load rack directly
|
||||
$('select[name="warehouse"][role="from"]').val(from_wh).prop('disabled', true);
|
||||
retrieve_rack('from', function() {
|
||||
$('select[name="rack"][role="from"]').val(data.rack).prop('disabled', true);
|
||||
populate_to_side_simple(data, to_wh);
|
||||
@@ -432,16 +498,17 @@
|
||||
$('#contact').val(data.contact_name)
|
||||
.attr('secondary', data.contact_name)
|
||||
.attr('data-id', data.contact_id);
|
||||
$('#product_name').val(data.product_name);
|
||||
$('#product_sku').attr('secondary', data.product_sku).prop('disabled', true);
|
||||
$('button[type=submit]').text('Update');
|
||||
$('button[type=reset]').hide();
|
||||
if (data.status == 0) {
|
||||
$('#approve_stock_btn').removeClass('d-none');
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function populate_to_side(data, to_wh) {
|
||||
$('select[name="warehouse"][role="to"]').val(to_wh).prop('disabled', true);
|
||||
retrieve_zone('to', function() {
|
||||
$('select[name="zone"][role="to"]').val(data.ref.zone).prop('disabled', true);
|
||||
retrieve_aisle('to', function() {
|
||||
@@ -454,7 +521,6 @@
|
||||
}
|
||||
|
||||
function populate_to_side_simple(data, to_wh) {
|
||||
$('select[name="warehouse"][role="to"]').val(to_wh).prop('disabled', true);
|
||||
retrieve_rack('to', function() {
|
||||
$('select[name="rack"][role="to"]').val(data.ref.rack).prop('disabled', true);
|
||||
});
|
||||
@@ -465,7 +531,9 @@
|
||||
$(async function() {
|
||||
try {
|
||||
await load_location_config(apply_location_labels);
|
||||
<?php if(empty($_GET['id'])){ ?>
|
||||
await retrieve_warehouse('to');
|
||||
<?php } ?>
|
||||
await retrieve_for_edit();
|
||||
} catch(e) {
|
||||
console.log(e);
|
||||
@@ -526,4 +594,4 @@
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user