Inventory Management System in JavaScript

Inventory Management System in JavaScript Inventory Management System in JavaScript Today we will make a simple Inventory Management System in JavaScript as a web development project. In this tutorial we will try to learn more about Dom manipulation also we will be using bootstrap to further make the task of styling our site much easier.

Introduction

Hello everyone!

Today we will make a simple Inventory Management System in JavaScript as a web development project. In this tutorial we will try to learn more about Dom manipulation also we will be using bootstrap to further make the task of styling our site much easier.

Requirements:

  • Code Editor (VS Code Preferred)
  • Chromium Browser (Chrome Preferred)
  • Basic Knowledge of HTML, CSS, Javascript, and Bootstrap

Features:

  • Good UI for all the pages
  • Adding items to inventory
  • Deleting all items from the inventory
  • Clearing all items from all the fields

Folder structure of project:

folder structure

index.html

  • It will be the barebones structure file that will shape how our contents are on the website

style.css

  • The styles file includes the alignment, aesthetics, and the basic overall look of how our website looks

main.js

  • The javascript files include all the logic, including the login and logout features, the dom-manipulation tricks, and essential functionalities to show the status of the shipment.

Coding Inventory Management System in JavaScript

HTML Code:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Inventory Management</title>
    <link
      href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css"
      rel="stylesheet"
      integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi"
      crossorigin="anonymous"
    />
    <link rel="stylesheet" href="main.css" />
  </head>

  <body>
    <header>
      <nav class="navbar navbar-expand-lg bg-light">
        <div class="container-fluid">
          <a class="navbar-brand" href="#">Inventory Management</a>
          <button
            class="navbar-toggler"
            type="button"
            data-bs-toggle="collapse"
            data-bs-target="#navbarNav"
            aria-controls="navbarNav"
            aria-expanded="false"
            aria-label="Toggle navigation"
          >
            <span class="navbar-toggler-icon"></span>
          </button>
          <div class="collapse navbar-collapse" id="navbarNav">
            <ul class="navbar-nav">
              <li class="nav-item">
                <a class="nav-link active" aria-current="page" href="#">Home</a>
              </li>
              <li class="nav-item">
                <a class="nav-link" href="#">More Info</a>
              </li>
            </ul>
            <ul class="navbar-nav">
              <li class="nav-item">
                <a class="nav-link" href="#">Login</a>
              </li>
              <li class="nav-item">
                <a class="nav-link" href="#">Register</a>
              </li>
            </ul>
          </div>
        </div>
      </nav>
    </header>

    <main>
      <div class="container">
        <div class="heading">
          <h1>
            Inventory Manager
            <button type="button" onclick="clearAll()" class="btn btn-danger">
              Clear All
            </button>
          </h1>
        </div>
        <div class="tabs">
          <ul class="nav nav-tabs" id="myTab" role="tablist">
            <li class="nav-item" role="presentation">
              <button
                class="nav-link active"
                id="home-tab"
                data-bs-toggle="tab"
                data-bs-target="#home-tab-pane"
                type="button"
                role="tab"
                aria-controls="home-tab-pane"
                aria-selected="true"
              >
                Current Inventory
              </button>
            </li>
            <li class="nav-item" role="presentation">
              <button
                class="nav-link"
                id="profile-tab"
                data-bs-toggle="tab"
                data-bs-target="#profile-tab-pane"
                type="button"
                role="tab"
                aria-controls="profile-tab-pane"
                aria-selected="false"
              >
                Incoming Purchase
              </button>
            </li>
            <li class="nav-item" role="presentation">
              <button
                class="nav-link"
                id="contact-tab"
                data-bs-toggle="tab"
                data-bs-target="#contact-tab-pane"
                type="button"
                role="tab"
                aria-controls="contact-tab-pane"
                aria-selected="false"
              >
                Outgoing Orders
              </button>
            </li>
          </ul>
          <div class="tab-content" id="myTabContent">
            <div
              class="tab-pane fade show active"
              id="home-tab-pane"
              role="tabpanel"
              aria-labelledby="home-tab"
              tabindex="0"
            >
              <div class="heading">
                <h4>Current Inventory</h4>
                <button
                  type="button"
                  onclick="clearCurrentInventory()"
                  class="btn btn-danger"
                >
                  Clear Inventory
                </button>
              </div>
              <div class="add-item">
                <form class="form">
                  <div class="mb-3">
                    <label class="form-label">
                      Product Name:
                      <input
                        id="current_order_product_name"
                        class="form-control"
                        type="text"
                        required
                      />
                    </label>
                    <label class="form-label">
                      Product Brand:
                      <input
                        id="current_order_product_brand"
                        class="form-control"
                        type="text"
                        required
                      />
                    </label>
                  </div>
                  <div class="mb-3">
                    <label class="form-label">
                      Quantity:
                      <input
                        id="current_order_product_quantity"
                        class="form-control"
                        type="number"
                        required
                      />
                    </label>
                    <label class="form-label">
                      Product Price:
                      <input
                        id="current_order_product_price"
                        class="form-control"
                        type="number"
                        required
                      />
                    </label>
                  </div>
                  <div class="mb-3">
                    <button
                      class="btn btn-success"
                      onclick="addCurrentInventory()"
                      type="button"
                    >
                      Add
                    </button>
                    <button class="btn btn-danger" type="reset">Reset</button>
                  </div>
                </form>
              </div>
              <table class="table">
                <thead>
                  <tr>
                    <th scope="col">#</th>
                    <th scope="col">Name</th>
                    <th scope="col">Brand</th>
                    <th scope="col">Quantity</th>
                    <th scope="col">Price</th>
                  </tr>
                </thead>
                <tbody id="current_inventory_list">
                  <tr>
                    <th scope="row">1</th>
                    <td>Acer Nitro 7</td>
                    <td>Acer</td>
                    <td>10</td>
                    <td>Rs 30000</td>
                  </tr>
                  <tr>
                    <th scope="row">2</th>
                    <td>Asus Rog 17</td>
                    <td>Asus</td>
                    <td>15</td>
                    <td>Rs 50000</td>
                  </tr>
                  <tr>
                    <th scope="row">3</th>
                    <td>HP Rog 17</td>
                    <td>HP</td>
                    <td>20</td>
                    <td>Rs 45000</td>
                  </tr>
                </tbody>
              </table>
            </div>
            <div
              class="tab-pane fade"
              id="profile-tab-pane"
              role="tabpanel"
              aria-labelledby="profile-tab"
              tabindex="0"
            >
              <div class="heading">
                <h4>Incoming Product</h4>
                <button
                  onclick="clearIncomingOrder()"
                  type="button"
                  class="btn btn-danger"
                >
                  Clear Incoming
                </button>
              </div>
              <div class="add-item">
                <form class="form">
                  <div class="mb-3">
                    <label class="form-label">
                      Product Name:
                      <input
                        id="incoming_order_product_name"
                        class="form-control"
                        type="text"
                        required
                      />
                    </label>
                    <label class="form-label">
                      Product Brand:
                      <input
                        id="incoming_order_product_brand"
                        class="form-control"
                        type="text"
                        required
                      />
                    </label>
                  </div>
                  <div class="mb-3">
                    <label class="form-label">
                      Quantity:
                      <input
                        id="incoming_order_product_quantity"
                        class="form-control"
                        type="number"
                        required
                      />
                    </label>
                    <label class="form-label">
                      Product Price:
                      <input
                        id="incoming_order_product_price"
                        class="form-control"
                        type="number"
                        required
                      />
                    </label>
                  </div>
                  <div class="mb-3">
                    <button
                      class="btn btn-success"
                      onclick="addIncomingOrder()"
                      type="button"
                    >
                      Add
                    </button>
                    <button class="btn btn-danger" type="reset">Reset</button>
                  </div>
                </form>
              </div>
              <table class="table">
                <thead>
                  <tr>
                    <th scope="col">#</th>
                    <th scope="col">Name</th>
                    <th scope="col">Brand</th>
                    <th scope="col">Quantity</th>
                    <th scope="col">Price</th>
                  </tr>
                </thead>
                <tbody id="incoming_inventory_list">
                  <tr>
                    <th scope="row">1</th>
                    <td>Acer Nitro 7</td>
                    <td>Acer</td>
                    <td>30</td>
                    <td>Rs 60000</td>
                  </tr>
                  <tr>
                    <th scope="row">2</th>
                    <td>Asus Rog 17</td>
                    <td>Asus</td>
                    <td>25</td>
                    <td>Rs 90000</td>
                  </tr>
                  <tr>
                    <th scope="row">3</th>
                    <td>HP Rog 17</td>
                    <td>HP</td>
                    <td>40</td>
                    <td>Rs 105000</td>
                  </tr>
                </tbody>
              </table>
            </div>
            <div
              class="tab-pane fade"
              id="contact-tab-pane"
              role="tabpanel"
              aria-labelledby="contact-tab"
              tabindex="0"
            >
              <div class="heading">
                <h4>Outgoing Orders</h4>
                <button
                  type="button"
                  onclick="clearOutgoingOrder()"
                  class="btn btn-danger"
                >
                  Clear Outgoing
                </button>
              </div>
              <div class="add-item">
                <form class="form">
                  <div class="mb-3">
                    <label class="form-label">
                      Product Name:
                      <input
                        id="outgoing_order_product_name"
                        class="form-control"
                        type="text"
                        required
                      />
                    </label>
                    <label class="form-label">
                      Product Brand:
                      <input
                        id="outgoing_order_product_brand"
                        class="form-control"
                        type="text"
                        required
                      />
                    </label>
                  </div>
                  <div class="mb-3">
                    <label class="form-label">
                      Quantity:
                      <input
                        id="outgoing_order_product_quantity"
                        class="form-control"
                        type="number"
                        required
                      />
                    </label>
                    <label class="form-label">
                      Product Price:
                      <input
                        id="outgoing_order_product_price"
                        class="form-control"
                        type="number"
                        required
                      />
                    </label>
                  </div>
                  <div class="mb-3">
                    <button
                      class="btn btn-success"
                      onclick="addOutgoingOrder()"
                      type="button"
                    >
                      Add
                    </button>
                    <button class="btn btn-danger" type="reset">Reset</button>
                  </div>
                </form>
              </div>
              <table class="table">
                <thead>
                  <tr>
                    <th scope="col">#</th>
                    <th scope="col">Name</th>
                    <th scope="col">Brand</th>
                    <th scope="col">Quantity</th>
                    <th scope="col">Price</th>
                  </tr>
                </thead>
                <tbody id="outgoing_inventory_list">
                  <tr>
                    <th scope="row">1</th>
                    <td>Acer Nitro 7</td>
                    <td>Acer</td>
                    <td>5</td>
                    <td>Rs 15000</td>
                  </tr>
                  <tr>
                    <th scope="row">2</th>
                    <td>Asus Rog 17</td>
                    <td>Asus</td>
                    <td>10</td>
                    <td>Rs 25000</td>
                  </tr>
                  <tr>
                    <th scope="row">3</th>
                    <td>HP Rog 17</td>
                    <td>HP</td>
                    <td>15</td>
                    <td>Rs 22500</td>
                  </tr>
                </tbody>
              </table>
            </div>
          </div>
        </div>
      </div>
    </main>

    <script
      src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"
      integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3"
      crossorigin="anonymous"
    ></script>
    <script src="main.js"></script>
  </body>
</html>

JavaScript Code:

let current_inventory = {
    1: {
        name: "Acer Nitro 7",
        brand: "Acer",
        price: 1000,
        quantity: 10,
    },
    2: {
        name: "Asus ROG Strix",
        brand: "Asus",
        price: 1200,
        quantity: 5,
    },
    3: {
        name: "MSI GL65 Leopard",
        brand: "MSI",
        price: 1500,
        quantity: 3,
    },
    4: {
        name: "Lenovo Legion Y540",
        brand: "Lenovo",
        price: 1300,
        quantity: 7,
    },
    5: {
        name: "HP Omen 15",
        brand: "HP",
        price: 1100,
        quantity: 8,
    },
};

let incoming_purchase = {
    1: {
        name: "Acer Nitro 7",
        brand: "Acer",
        price: 1000,
        quantity: 5,
    },
    2: {
        name: "Asus ROG Strix",
        brand: "Asus",
        price: 1200,
        quantity: 5,
    },
    3: {
        name: "MSI GL65 Leopard",
        brand: "MSI",
        price: 1500,
        quantity: 3,
    },
    4: {
        name: "Lenovo Legion Y540",
        brand: "Lenovo",
        price: 1300,
        quantity: 7,
    },
    5: {
        name: "HP Omen 15",
        brand: "HP",
        price: 1100,
        quantity: 8,
    },
    6: {
        name: "Dell G3",
        brand: "Dell",
        price: 900,
        quantity: 10,
    },
};

let orders = {
    1: {
        name: "Acer Nitro 7",
        brand: "Acer",
        price: 1000,
        quantity: 5,
    },
};

function is_empty(string) {
    if (string.length == 0) {
        return true;
    }
    return false;
}

function getIndex(tbody) {
    let index = tbody.children.length || 0;
    return index;
}

function clearAll() {
    clearCurrentInventory();
    clearIncomingOrder();
    clearOutgoingOrder();
}

function clearCurrentInventory() {
    document.querySelector("#current_inventory_list").innerHTML = "";
}

function clearIncomingOrder() {
    document.querySelector("#incoming_inventory_list").innerHTML = "";
}

function clearOutgoingOrder() {
    document.querySelector("#outgoing_inventory_list").innerHTML = "";
}

function addCurrentInventory() {
    let productName = document.querySelector("#current_order_product_name").value;
    let productBrand = document.querySelector(
        "#current_order_product_brand"
    ).value;
    let productPrice = document.querySelector(
        "#current_order_product_price"
    ).value;
    let productQuantity = document.querySelector(
        "#current_order_product_quantity"
    ).value;

    if (
        is_empty(productName) ||
        is_empty(productBrand) ||
        is_empty(productPrice) ||
        is_empty(productQuantity)
    ) {
        alert("Please fill out all fields");
        return;
    }

    let tbody = document.querySelector("#current_inventory_list");

    let tr = `<tr>
    <th scope='row'>${getIndex(tbody) + 1}</th>
    <td>${productName}</td>
    <td>${productBrand}</td>
    <td>${productQuantity}</td>
    <td>$${productPrice}</td>`;

    tbody.innerHTML += tr;
}

function addIncomingOrder() {
    let productName = document.querySelector(
        "#incoming_order_product_name"
    ).value;
    let productBrand = document.querySelector(
        "#incoming_order_product_brand"
    ).value;
    let productPrice = document.querySelector(
        "#incoming_order_product_price"
    ).value;
    let productQuantity = document.querySelector(
        "#incoming_order_product_quantity"
    ).value;

    if (
        is_empty(productName) ||
        is_empty(productBrand) ||
        is_empty(productPrice) ||
        is_empty(productQuantity)
    ) {
        alert("Please fill out all fields");
        return;
    }

    let tbody = document.querySelector("#incoming_inventory_list");

    let tr = `<tr>
    <th scope='row'>${getIndex(tbody) + 1}</th>
    <td>${productName}</td>
    <td>${productBrand}</td>
    <td>${productQuantity}</td>
    <td>$${productPrice}</td>`;

    tbody.innerHTML += tr;
}

function addOutgoingOrder() {
    let productName = document.querySelector(
        "#outgoing_order_product_name"
    ).value;
    let productBrand = document.querySelector(
        "#outgoing_order_product_brand"
    ).value;
    let productPrice = document.querySelector(
        "#outgoing_order_product_price"
    ).value;
    let productQuantity = document.querySelector(
        "#outgoing_order_product_quantity"
    ).value;

    if (
        is_empty(productName) ||
        is_empty(productBrand) ||
        is_empty(productPrice) ||
        is_empty(productQuantity)
    ) {
        alert("Please fill out all fields");
        return;
    }

    let tbody = document.querySelector("#outgoing_inventory_list");

    let tr = `<tr>
    <th scope='row'>${getIndex(tbody) + 1}</th>
    <td>${productName}</td>
    <td>${productBrand}</td>
    <td>${productQuantity}</td>
    <td>$${productPrice}</td>`;

    tbody.innerHTML += tr;
}

CSS Code:

.collapse {
  display: flex;
  justify-content: space-between;
  flex-direction: row;
}

.form-label {
  margin-right: 100px;
}

.heading {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
}

@media screen and (max-width: 991px) {
  .collapse {
    display: inline;
  }
}

Output:

output for Inventory Management System in JavaScript

Also Read:

Share:

Author: Aman Raj