Single sales order pickup – Item fulfilment

Jira Code: PROT-182
This was an update to the Single sales order pickup. The update was to restrict the user from picking less than the quantity available to pick.

json file :SingleSOPickup

var SOSerachURL = "/app/site/hosting/scriptlet.nl?script=572&deploy=1";
var LotSearchURL = "/app/site/hosting/scriptlet.nl?script=569&deploy=1";
var IFCreateURL = "/app/site/hosting/scriptlet.nl?script=571&deploy=1";
var SOsearchLink = "/app/site/hosting/scriptlet.nl?script=573&deploy=1";
var ITEMS = {};
var LOTS = {};
$(function() {
    $('#LOT').hide();
    $('#Itembutton').hide();
    $('#ItemPage').hide();
    $('#searchbtn').click(function() {
        Swal.showLoading();
        ITEMS = {};
        $('#itemTable').hide();
        $('#ItemPage').hide();
        $('#Itembutton').hide();
        
        
        var SOID = $('#SOID').val().trim();
        if (SOID != '') {
            $.post(SOSerachURL, { so: SOID },
                function(data, status) {
                    if (data == "FAILED")
                        Swal.fire({
                            type: 'info',
                            title: 'No Result Found',
                            text: 'Enter a valid SO#'
                        })
                    else {
                        ITEMS = JSON.parse(data);
                        var status = ITEMS[Object.keys(ITEMS)[0]].status;
                        if (status == "Billed") {
                            Swal.fire({
                                type: 'info',
                                title: 'SO Billed'
                            })
                        } else if (status == "Closed") {
                            Swal.fire({
                                type: 'info',
                                title: 'SO Closed'
                            })
                        } else if (status == "Partially Fulfilled") {
                            Swal.fire({
                                type: 'info',
                                title: 'SO Partially Fulfilled'
                            })
                            createTable(ITEMS);
                        } else
                            createTable(ITEMS);
                        //console.log(ITEMS)
                    }

                });
        } else {
            Swal.fire({
                type: 'error',
                title: 'Oops...',
                text: 'Enter SO#'
            })
        }
    });

    $('#Lotcancel').click(function() {
        var summary = [];
        var LotUsed = {};
        ITEM_ID = $('#itemID').text();
        ITEMS[ITEM_ID].summary = summary;
        ITEMS[ITEM_ID]['Lots'] = LotUsed;
        createTable(ITEMS);
        $('#LOT').hide();
        $('#SOITEMS').show();
    });

    $('#Lotproceed').click(function() {
        var summary = [];
        var LotUsed = {};
        var pick_qty=0;
        ITEM_ID = $('#itemID').text();
        console.log('LOTS',ITEMS[ITEM_ID]);
        for (var key in LOTS) {
            if (Number(LOTS[key].available) != 0) {
               var qty = Number($('#' + key).val());
               pick_qty +=qty

           }

        }
        if(ITEMS[ITEM_ID].qty>pick_qty){
         
            Swal.fire({
           type: 'error',
           title: 'Oops...',
           text: 'Picked Quantity is less than Quantity to Pick'
       })
      
       return false;
        }
         
          
        console.log('pick_qty',pick_qty);
        for (var key in LOTS) {
            if (Number(LOTS[key].available) != 0) {
                var qty = Number($('#' + key).val());
                if (qty != 0) {
                    summary.push(LOTS[key].lot + ': ' + LOTS[key].bin.text + ': ' + '<b>' + qty + '</b>');
                    LotUsed[key] = { LotId: key, BinID: LOTS[key].bin.value, Quantity: qty };
                }
            }
        }
        ITEM_ID = $('#itemID').text();
        ITEMS[ITEM_ID].summary = summary;
        ITEMS[ITEM_ID]['Lots'] = LotUsed;
        //console.log('ITEMS', ITEMS);
        createTable(ITEMS);
        $('#LOT').hide();
        $('#SOITEMS').show();
    });

    $('#proceed').click(function() {
        Swal.showLoading();
        fetch(IFCreateURL, {
                method: 'POST', // or 'PUT'
                body: JSON.stringify(ITEMS), // data can be `string` or {object}!
                headers: { 'Content-Type': 'application/json' }
            }).then(function(res) {
                console.log('res', res);
                return res.json();
            })
            .then(function(response) {
                console.log('Success:', JSON.stringify(response));
                var data = response;
                //   console.log('data', data);
                if (data.text == 'SUCCESS') {
                    Swal.close();
                    Swal.fire({
                        type: 'success',
                        title: 'Item Fulfillment Created: ' + data.value,
                        allowOutsideClick: false
                    }).then(function() {
                        window.location.reload();
                    })
                } else if (data.text == 'FAIL') {
                    Swal.close();
                    Swal.fire({
                        type: 'error',
                        title: 'Pick items & Proceed'
                    });
                } else {
                    Swal.close();
                    Swal.fire({
                        type: 'error',
                        title: 'Error in Creating Item fulfillment'
                    });
                }

            })
            .catch(function(error) {
                console.log('Error:', error)
                Swal.close();
                Swal.fire({
                    type: 'error',
                    title: 'Error in Creating Item fulfillment'
                });
            })
    });
    $('#cancel').click(function() {
        window.location.reload();
    })


});

function createTable(items) {
    var create = false;
    for (var key in items) {
        if (Number(items[key].qty) > 0) {
            create = true;
            break;
        }
    }

    if (create) {
        $('#ItemPage').html('');
        var table_body = '<table id="ItemTable" class="table table-bordered table-striped table-condensed table-hover table-sm" data-show-toggle="true" data-expand-first="false" data-paging="true" data-paging-size="3">';
        table_body += "<thead>";
        table_body += "<tr>";
        table_body += " <th>Item</th>";
        table_body += "<th>Qty to Pick</th>";
        table_body += " <th data-breakpoints=\"xs sm\">Summary</th>";
        table_body += " <th>Action</th>";
        table_body += "</tr>";
        table_body += "</thead>";
        table_body += "</tbody>";

        for (var key in items) {

            if (items[key].type == 'InvtPart' && Number(items[key].qty) != 0) {
                table_body += '<tr>';
                table_body += '<td>';
                table_body += items[key].name;
                table_body += '</td>';
                table_body += '<td>';
                table_body += items[key].qty;
                table_body += '</td>';
                table_body += '<td>';
                table_body += createList(items[key].summary);
                table_body += '</td>';
                table_body += '<td>';
                if (createList(items[key].summary) == '---')
                    table_body += '<div><button class="btn btn-primary btn-sm" onclick="pickItem(' + items[key].id + ',' + items[key].qty + ',' + '\'' + items[key].name + '\'' + ')">Pick</button></div>';
                else

                    table_body += '<div><button class="btn btn-danger btn-sm" onclick="pickItem(' + items[key].id + ',' + items[key].qty + ',' + '\'' + items[key].name + '\'' + ')">Picked</button></div>';

                table_body += '</td>';
                table_body += '</tr>';
            }
        }
        table_body += '</tbody>';
        table_body += '</table>';

        $('#itemTable').html(table_body);
        $('#ItemTable').footable({
            "columns": [{
                    "type": "text"
                },
                {
                    "type": "text"
                },
                {
                    "type": "html"
                }, {
                    "type": "html"
                }
            ]
        });

        Swal.close();
        $('#itemTable').show();
        $('#Itembutton').show();
         var SOID = $('#SOID').val().trim();
        var url=SOsearchLink+'&so='+SOID;
        $('#downloadBtn').attr('href',url);
    } else {
        Swal.close();
        Swal.fire({
            type: 'info',
            title: 'All items picked'
        });
    }
}

function pickItem(ITEM_ID, ITEM_QTY, ITEM_NAME) {
    Swal.showLoading();
    $.post(LotSearchURL, { itemId: ITEM_ID },
        function(data, status) {
            if (data == "")
                Swal.fire({
                    type: 'error',
                    title: 'Oops...',
                    text: 'Something went wrong!!'
                })
            else if (data == 'FAILED')
                Swal.fire({
                    type: 'info',
                    title: 'Item Not Available'
                })
            else {
                LOTS = JSON.parse(data);
                createLotTable(LOTS, ITEM_ID, ITEM_QTY, ITEM_NAME);
            }
        });
}

function createLotTable(lots, ITEM_ID, ITEM_QTY, ITEM_NAME) {
    var create = false;
    for (var key in lots) {
        if (Number(lots[key].available) > 0) {
            create = true;
            break;
        }
    }
    if (create) {
        $('#ItemPage').hide();
        var itemQty = 'Item Name: ' + ITEM_NAME + '(ID: <span id=\"itemID\">' + ITEM_ID + '</span>)' + ', Quantity to Pick: ' + ITEM_QTY;
        var itemPickedMsg = "Quantity Picked: 0";
        $('#itemName').html(itemQty);
        $('#picked').text(itemPickedMsg);
        var table_body = '<table id="lotTable" class="table table-bordered table-striped table-condensed table-hover table-sm">';
        table_body += "<thead>";
        table_body += "<tr>";
        table_body += " <th>Bin</th>";
        table_body += "<th>Lot</th>";
        table_body += " <th>Available Qty</th>";
        table_body += " <th>Pick Qty</th>";
        table_body += "</tr>";
        table_body += "</thead>";
        table_body += "</tbody>";

        for (var key in lots) {
            if (Number(lots[key].available) != 0) {
                var Onchange = "quantityPick(" + key + ",'" + escape(JSON.stringify(lots)) + "'," + ITEM_ID + "," + ITEM_QTY + ")";
                table_body += '<tr>';
                table_body += '<td>';
                table_body += lots[key].bin.text;
                table_body += '</td>';
                table_body += '<td>';
                table_body += lots[key].lot;
                table_body += '</td>';
                table_body += '<td>';
                table_body += lots[key].available;
                table_body += '</td>';
                table_body += '<td>';
                table_body += '<input type="number" id="' + key + '" min="0" max="' + ITEM_QTY + '" value="0" onchange="' + Onchange + '"></input>';
                table_body += '</td>';
                table_body += '</tr>';
            }

        }
        table_body += '</tbody>';
        table_body += '</table>';
        Swal.close();
        $('#SOITEMS').hide();
        $('#LOT').show();
        $('#LotTable').html(table_body);
    } else {
        Swal.close();
        Swal.fire({
            type: 'info',
            title: 'Item Not Available'
        })
    }
}

function quantityPick(ID, lots, ITEM_ID, ITEM_QTY) {
    var PickeQty = 0;
    lots = JSON.parse(unescape(lots));

    var SelectedQty = $('#' + ID).val();
    if (Number(SelectedQty) > Number(lots[ID].available)) {
        Swal.fire({
            type: 'info',
            title: 'Oops...',
            text: 'Selected quantity not available at inventory'
        });
        $('#' + ID).val(0);
    }
    if ((Number(SelectedQty) > Number(ITEM_QTY)) && (Number(SelectedQty) < Number(ITEM_QTY))) {
        $('#' + ID).val(ITEM_QTY);
    }
    for (var key in lots) {
        if (Number(lots[key].available) != 0) {
            var qty = Number($('#' + key).val());
            PickeQty += qty;
        }
    }
    if (Number(PickeQty) > Number(ITEM_QTY)) {
        Swal.fire({
            type: 'error',
            title: 'Oops...',
            text: 'Picked Quantity is greater than Quantity to Pick'
        })
        $('#' + ID).val(0);
        return false;
    }

    var itemPickedMsg = "Quantity Picked: " + PickeQty;
    ITEMS[ITEM_ID]['PICKED'] = PickeQty;
    ITEMS[ITEM_ID]['SetQty'] = PickeQty;
    $('#picked').text(itemPickedMsg);

}

function createList(Summary) {

    if (Summary == '---')
        return Summary;
    else if (Summary.length == 0)
        return '---';
    else {
        var list = '<ul>';
        for (var i = 0; i < Summary.length; i++) {
            list += '<li>' + Summary[i] + '</li>';
        }
        list += '</ul>';
        return list;
    }
}

Leave a comment

Your email address will not be published. Required fields are marked *