<!DOCTYPE html>
<html ng-app="myApp">
<head>
    <title>Breakfast POS Demo</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.css" />
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://code.angularjs.org/1.3.0-rc.2/angular.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/js/bootstrap.min.js"></script>
    <link href="style.css" rel="stylesheet" />
    <script src="app.js"></script>
</head>
<body data-ng-controller="PosController">
    <div class="col-md-12">
        <div class="row">
                <nav class="navbar navbar-default" role="navigation">
                    <div class="container-fluid">
                        <!-- Brand and toggle get grouped for better mobile display -->
                        <div class="navbar-header">
                            <a class="navbar-brand" href="#">POS AngularJs - Example - Open in Fullscreen for better user experience</a>
                        </div>
                    </div><!-- /.container-fluid -->
                </nav>
           
        </div>
    </div>
    <div class="col-md-12">
        <div class="row">
            <div class="col-md-6">
                <div class="panel panel-primary">
                    <div class="panel-heading">
                        <div class="row">
                            <div class="col-md-4"><span class="panel-title">Order Summary</span></div>
                            <div class="col-md-4"><span>Today is: {{getDate()}}</span></div>
                            <div class="col-md-3 col-md-push-1"><span>Total Orders - </span><span class="badge">{{totOrders}}</span></div>
                        </div>
                    </div>
                    <div class="panel-body" style="max-height:320px; overflow:auto;">
                        <div class="text-warning" ng-hide="order.length">
                            Nothing ordered yet!
                        </div>
                        <ul class="list-group">
                            <li class="list-group-item" ng-repeat="item in order">
                                <div class="row">
                                    <div class="col-md-1">
                                        <span class="badge badge-left" ng-bind="item.qty"></span>
                                    </div>
                                    <div class="col-md-4">
                                        {{item.name}}
                                    </div>
                                    <div class="col-md-1">
                                        <div class="label label-success">{{item.price * item.qty | currency:"USD$":0}}</div>
                                    </div>
                                    <div class="col-md-1 col-md-push-1">
                                        <div class="label label-warning">{{item.price | currency:"USD$":0}}</div>
                                    </div>
                                    <div class="col-md-2 col-md-push-2">
                                        <button class="btn btn-success btn-xs" ng-click="addToOrder(item,1)">
                                            <span class="glyphicon glyphicon-plus"></span>
                                        </button>
                                        <button class="btn btn-warning btn-xs" ng-click="removeOneEntity(item)">
                                            <span class="glyphicon glyphicon-minus"></span>
                                        </button>
                                    </div>
                                    <div class="col-md-1 col-md-push-2">
                                        <button class="btn btn-danger btn-xs" ng-click="removeItem(item)">
                                            <span class="glyphicon glyphicon-trash"></span>
                                        </button>
                                    </div>
                                </div>
                            </li>
                        </ul>
                    </div>
                    <div class="panel-footer" ng-show="order.length">
                        <h3><span class="label label-primary">Total: {{getTotal() | currency:"USD $ ":0}}</span></h3>
                    </div>
                    <div class="panel-footer" ng-show="order.length">
                        <div>
                            <span class="btn btn-default btn-marginTop" ng-click="clearOrder()" ng-disabled="!order.length">Clear</span>
                            <span class="btn btn-danger btn-marginTop" ng-click="checkout()" ng-disabled="!order.length">Checkout</span>
                        </div>
                    </div>
                </div>
            </div>

            <div class="col-md-6">
                <div class="panel panel-primary">
                    <div class="panel-body">
                        <ul id="myTab" class="nav nav-tabs" role="tablist">
                            <li role="presentation" class="active"><a href="#drink" role="tab" data-toggle="tab">Drinks</a></li>
                            <li role="presentation"><a href="#food" role="tab" data-toggle="tab">Food</a></li>
                            <li role="presentation"><a href="#new" role="tab" data-toggle="tab">New Item</a></li>
                        </ul>
                        <div class="tab-content">
                            <div role="tabpanel" class="tab-pane active" id="drink">
                                <button class="btn btn-primary btn-pos btn-marginTop" data-ng-repeat="item in drinks" data-ng-bind="item.name" data-ng-click="addToOrder(item,1)"></button>
                            </div>
                            <div role="tabpanel" class="tab-pane" id="food">
                                <button class="btn btn-warning btn-pos btn-marginTop" data-ng-repeat="item in foods" data-ng-bind="item.name" data-ng-click="addToOrder(item,1)"></button>
                            </div>
                            <div role="tabpanel" class="tab-pane" id="new">
                                <br />
                                <form class="form" name="formCreate" novalidate>
                                    <div class="col-md-4">
                                        <label>Name*</label>
                                        <input type="text" class="form-control" data-ng-model="new.name" required />
                                    </div>
                                    <div class="col-md-3">
                                        <label>Price*</label>
                                        <input type="number" class="form-control" data-ng-model="new.price" required />
                                    </div>
                                    <div class="col-md-3">
                                        <label>Category*</label>
                                        <select class="form-control" data-ng-model="new.category" required>
                                            <option>Drinks</option>
                                            <option>Foods</option>
                                        </select>
                                    </div>
                                    <div class="col-md-1">
                                        <br />
                                        <button class="btn btn-default btn-marginTop" data-ng-click="addNewItem(new)" data-ng-disabled="formCreate.$invalid">Add</button>
                                    </div>
                                </form>
                            </div>
                        </div>
                    </div>
                    <div class="panel-footer"></div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>
<script>
    $(document).ready(function () {
        $("#myTab a").click(function (e) {
            e.preventDefault();
            $(this).tab('show');
        });
    });
</script>

// Code goes here
var app = angular.module('myApp', []);

app.controller('PosController', function ($scope) {

    $scope.drinks = [{
        id: 0,
        name: "Still Water",
        price: "1",
    },
    {
        id: 1,
        name: "Sparkling Water",
        price: "1.10",
    },
    {
        id: 2,
        name: "Espresso",
        price: "1.20",
    },
    {
        id: 3,
        name: "Cappuccino",
        price: "1.30",
    },
    {
        id: 4,
        name: "Tea",
        price: "1.90",
    },
    {
        id: 5,
        name: "Hot Chocolate",
        price: "2.10",
    },
    {
        id: 6,
        name: "Coke",
        price: "2.00",
    },
    {
        id: 7,
        name: "Orange Juice",
        price: "1.90",
    }];

    $scope.foods = [{
        id: 8,
        name: "Waffle",
        price: "1.50",
    },
    {
        id: 9,
        name: "Brioche",
        price: "1.30",
    },
    {
        id: 10,
        name: "Cheesecake",
        price: "1.70",
    },
    {
        id: 11,
        name: "Sandwich",
        price: "2.70",
    },
    {
        id: 12,
        name: "Donuts",
        price: "1.90",
    },
    {
        id: 13,
        name: "Tortilla",
        price: "1.90",
    }];

    $scope.order = [];
    $scope.new = {};
    $scope.totOrders = 0;

    var url = window.location.protocol + "://" + window.location.host + "/" + window.location.pathname;

    $scope.getDate = function () {
        var today = new Date();
        var mm = today.getMonth() + 1;
        var dd = today.getDate();
        var yyyy = today.getFullYear();

        var date = dd + "/" + mm + "/" + yyyy

        return date
    };

    $scope.addToOrder = function (item, qty) {
        var flag = 0;
        if ($scope.order.length > 0) {
            for (var i = 0; i < $scope.order.length; i++) {
                if (item.id === $scope.order[i].id) {
                    item.qty += qty;
                    flag = 1;
                    break;
                }
            }
            if (flag === 0) {
                item.qty = 1;
            }
            if (item.qty < 2) {
                $scope.order.push(item);
            }
        } else {
            item.qty = qty;
            $scope.order.push(item);
        }
    };

    $scope.removeOneEntity = function (item) {
        for (var i = 0; i < $scope.order.length; i++) {
            if (item.id === $scope.order[i].id) {
                item.qty -= 1;
                if (item.qty === 0) {
                    $scope.order.splice(i, 1);
                }
            }
        }
    };

    $scope.removeItem = function (item) {
        for (var i = 0; i < $scope.order.length; i++) {
            if (item.id === $scope.order[i].id) {
                $scope.order.splice(i, 1);
            }
        }
    };

    $scope.getTotal = function () {
        var tot = 0;
        for (var i = 0; i < $scope.order.length; i++) {
            tot += ($scope.order[i].price * $scope.order[i].qty)
        }
        return tot;
    };

    $scope.clearOrder = function () {
        $scope.order = [];
    };

    $scope.checkout = function (index) {
        alert($scope.getDate() + " - Order Number: " + ($scope.totOrders+1) + "\n\nOrder amount: $" + $scope.getTotal().toFixed(2) + "\n\nPayment received. Thanks.");
        $scope.order = [];
        $scope.totOrders += 1;
    };

    $scope.addNewItem = function (item) {
        if (item.category === "Drinks") {
            item.id = $scope.drinks.length + $scope.foods.length
            $scope.drinks.push(item)
            $scope.new = []
            $('#myTab a[href="#drink"]').tab('show')
        } else if (item.category === "Foods") {
            item.id = $scope.drinks.length + $scope.foods.length
            $scope.foods.push(item)
            $scope.new = []
            $('#myTab a[href="#food"]').tab('show')
        }
    };

});
.text-info{border-left-style:solid; border-left-width:5px; border-left-color:blue; padding:5px 5px 5px 10px; font-size:110%;}
.box {border-radius: 5px; box-shadow: 1px 2px 10px silver; padding:10px;}
.buttons{padding: 20px;}
.btn-marginTop{margin-top:5px;}
.container{margin:0 auto;}

.btn-pos{
    padding:20px 31px;
    font-size:20px;
    border-radius:0px;
    margin-right:1px;
}

btn-summary{
    margin-right:5px;
}

btn-marginTop{
    margin-top:5px;
}

.badge-left{
    float:none
}
.list-group-item > .badge{
    float:none;
}

#AngularJS Point of Sale

Author: Giuseppe Pace

Follow me [@giuseppepace89]([https://twitter.com/giuseppepace89)