From 1d6ab137dc1d9e5ee1c2e6bca79d94452815b7ee Mon Sep 17 00:00:00 2001
From: adyanf <adyanaufalf@gmail.com>
Date: Thu, 30 Nov 2017 05:44:58 +0700
Subject: [PATCH] in progress fixing select driver

---
 ChatService/app/models/driver.js              |   5 +-
 ChatService/app/routes.js                     |  11 +-
 .../src/main/webapp/resources/js/order.js     | 111 ++----
 .../src/main/webapp/views/order_view.jsp      | 333 +++++++++++++++++-
 4 files changed, 385 insertions(+), 75 deletions(-)

diff --git a/ChatService/app/models/driver.js b/ChatService/app/models/driver.js
index 2f1eb62a0..96dee7b83 100644
--- a/ChatService/app/models/driver.js
+++ b/ChatService/app/models/driver.js
@@ -2,7 +2,10 @@ var mongoose = require("mongoose");
 
 var driverSchema = new mongoose.Schema({
     idDriver : Number,
-	status: String
+    status: String,
+    pref: [{
+        type: String
+    }]
 });
 
 module.exports = mongoose.model("Driver", driverSchema);
\ No newline at end of file
diff --git a/ChatService/app/routes.js b/ChatService/app/routes.js
index a3e353bc0..267ea26d7 100644
--- a/ChatService/app/routes.js
+++ b/ChatService/app/routes.js
@@ -58,7 +58,16 @@ module.exports = function(app) {
     
             app.get('/availabledriver', function(req, res){
                 Driver.find({"status" : "available"}, function(err, foundDriver){
-                    res.json(foundDriver);
+                    if(!err){
+                        var response = [];
+                        foundDriver.forEach(function(element){
+                            response.push({"idDriver":element.idDriver, "status":element.status, "pref":element.pref})
+                        });
+                        // var response = {"listdriver" : listDriver};
+                    }else{
+                        var response = {"status": 503, "message" : "Database error detected"};
+                    }
+                    res.json(response);
                 });
             });
             
diff --git a/PrOjek/webapp/src/main/webapp/resources/js/order.js b/PrOjek/webapp/src/main/webapp/resources/js/order.js
index af5ad0cc9..408fc42f5 100644
--- a/PrOjek/webapp/src/main/webapp/resources/js/order.js
+++ b/PrOjek/webapp/src/main/webapp/resources/js/order.js
@@ -121,78 +121,45 @@ function openOrder(step) {
 function grabDriver(){
     pickingpoint = document.getElementById('pickingpoint').value;
     destination = document.getElementById('destination').value;
-    var preferreddriver = document.getElementById('preferreddriver').value;
-	var url = "/soapservlet";
-	// if (preferreddriver != "") {
-    //     postAjax(url, {name: "get-driver", dest: destination, loc: pickingpoint, prefDriver: preferreddriver}, function (data1) {
-    //         console.log(data1);
-    //         var createElement = document.getElementById('prefer-driver');
-    //         var prefdetail = JSON.parse(data1);
-    //         var addRow = "";
-    //         if (prefdetail.hasOwnProperty('answer')) {
-    //             addRow += "<div id='no-pref'>Nothing to display :(</div>";
-    //         } else {
-    //             if (prefdetail.length > 0) {
-    //                 for (var i = 0; i < prefdetail.length; i++) {
-    //                     addRow += "<div class='row'>";
-    //                     addRow += "<div class='col-4'>";
-    //                     addRow += "<div class='picture driver-picture'>";
-    //                     addRow += "<img src='" + prefdetail[i]['profile_pic_url'] + "'>";
-    //                     addRow += "</div>";
-    //                     addRow += "</div>";
-    //                     addRow += "<div class='col-8 driver-detail'>";
-    //                     addRow += "<div class='driver-name'>";
-    //                     addRow += prefdetail[i]['name'];
-    //                     addRow += "</div>";
-    //                     addRow += "<div class='driver-rating'>";
-    //                     addRow += "<span style='color:orange'>&#9734;</span><span class='rating'>" + prefdetail[i]['rating'] + "</span>(" + prefdetail[i]['votes'] + " votes)";
-    //                     addRow += "</div>";
-    //                     addRow += "<div class='row'>";
-    //                     addRow += "<a href='#' class='button button-success right' id='" + prefdetail[i]['ID'] + "' onclick='selectDriver(this)'>I CH0OSE YOU!</a>";
-    //                     addRow += "</div></div></div>";
-    //                 }
-    //             } else {
-    //                 addRow += "<div id='no-pref'>Nothing to display :(</div>";
-    //             }
-    //         }
-    //         createElement.innerHTML = addRow;
-    //         nextToSelectDriver()
-    //     });
-    // } else {
-    //     postAjax(url, {name: "get-driver", dest: destination, loc: pickingpoint}, function (data2) {
-    //         var driversdetail = JSON.parse(data2);
-    //         var createElement = document.getElementById('other-driver');
-    //         var addRow = "";
-    //         if (driversdetail.hasOwnProperty('answer')) {
-    //             addRow += "<div id='no-other-driver'>Nothing to display :(</div>";
-    //         } else {
-    //             if (driversdetail.length > 0) {
-    //                 for (var i = 0; i < driversdetail.length; i++) {
-    //                     addRow += "<div class='row'>";
-    //                     addRow += "<div class='col-4'>";
-    //                     addRow += "<div class='picture driver-picture'>";
-    //                     addRow += "<img src='" + driversdetail[i]['profile_pic_url'] + "'>";
-    //                     addRow += "</div>";
-    //                     addRow += "</div>";
-    //                     addRow += "<div class='col-8 driver-detail'>";
-    //                     addRow += "<div class='driver-name'>";
-    //                     addRow += driversdetail[i]['name'];
-    //                     addRow += "</div>";
-    //                     addRow += "<div class='driver-rating'>";
-    //                     addRow += "<span style='color:orange'>&#9734;</span><span class='rating'>" + driversdetail[i]['rating'] + "</span>(" + driversdetail[i]['votes'] + " votes)";
-    //                     addRow += "</div>";
-    //                     addRow += "<div class='row'>";
-    //                     addRow += "<a href='#' class='button button-success right' id='" + driversdetail[i]['id'] + "' onclick='selectDriver(this)'>I CH0OSE YOU!</a>";
-    //                     addRow += "</div></div></div>";
-    //                 }
-    //             } else {
-    //                 addRow += "<div id='no-other-driver'>Nothing to display :(</div>";
-    //             }
-    //         }
-    //         createElement.innerHTML = addRow;
-            nextToSelectDriver()
-    //     });
-	// }
+    // var url = "/soapservlet";
+    var url = "http://localhost:3000/availabledriver";
+    $.get(url,function(data){
+        console.log(data);
+        for (var driver in data){
+            console.log(data[driver].status);
+        };
+    });
+            // var createElement = document.getElementById('other-driver');
+            // var addRow = "";
+            // if (driversdetail.hasOwnProperty('answer')) {
+            //     addRow += "<div id='no-other-driver'>Nothing to display :(</div>";
+            // } else {
+            //     if (driversdetail.length > 0) {
+            //         for (var i = 0; i < driversdetail.length; i++) {
+            //             addRow += "<div class='row'>";
+            //             addRow += "<div class='col-4'>";
+            //             addRow += "<div class='picture driver-picture'>";
+            //             addRow += "<img src='" + driversdetail[i]['profile_pic_url'] + "'>";
+            //             addRow += "</div>";
+            //             addRow += "</div>";
+            //             addRow += "<div class='col-8 driver-detail'>";
+            //             addRow += "<div class='driver-name'>";
+            //             addRow += driversdetail[i]['name'];
+            //             addRow += "</div>";
+            //             addRow += "<div class='driver-rating'>";
+            //             addRow += "<span style='color:orange'>&#9734;</span><span class='rating'>" + driversdetail[i]['rating'] + "</span>(" + driversdetail[i]['votes'] + " votes)";
+            //             addRow += "</div>";
+            //             addRow += "<div class='row'>";
+            //             addRow += "<a href='#' class='button button-success right' id='" + driversdetail[i]['id'] + "' onclick='selectDriver(this)'>I CH0OSE YOU!</a>";
+            //             addRow += "</div></div></div>";
+            //         }
+            //     } else {
+            //         addRow += "<div id='no-other-driver'>Nothing to display :(</div>";
+            //     }
+            // }
+        // });
+        // createElement.innerHTML = addRow;
+        nextToSelectDriver();
 }
 
 document.getElementById('pickingpoint').onkeyup = function(event){
diff --git a/PrOjek/webapp/src/main/webapp/views/order_view.jsp b/PrOjek/webapp/src/main/webapp/views/order_view.jsp
index 21b7cd617..5d1d3e2d5 100644
--- a/PrOjek/webapp/src/main/webapp/views/order_view.jsp
+++ b/PrOjek/webapp/src/main/webapp/views/order_view.jsp
@@ -6,6 +6,12 @@
 	UserService userService = (UserService) request.getAttribute("userService");
 	User user = userService.getUser(accessToken);	
 %>
+<link rel="stylesheet" href="./resources/css/chat.css">
+<script src='https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js'></script>
+<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.6/angular.min.js"></script>
+<script src="https://cdn.firebase.com/libs/angularfire/2.3.0/angularfire.min.js"></script>
+<script src="https://www.gstatic.com/firebasejs/4.6.2/firebase.js"></script>
+<script src="https://www.gstatic.com/firebasejs/4.6.2/firebase-messaging.js"></script>
 
 <% if (!(user.getDriver() != null && user.getDriver())) { %>
     <div id="make-order">
@@ -25,7 +31,7 @@
             </button>
                 </li>
                 <li class="col-3">
-                    <button id="tab-complete-order" class="taborder button button-plain row button-disable" disabled>
+                    <button id="tab-chat-order" class="taborder button button-plain row button-disable" disabled>
                 <div class="circle-numbering col-3">3</div>
                 Chat Driver
             </button>
@@ -99,6 +105,7 @@
                     </div>
                 </div>
             </div>
+            <!-- Harusnya Chat -->
             <div class="form-order" id="complete-order" style="display: none">
                 <h3>HOW WAS IT?</h3>
                 <div class="row">
@@ -157,6 +164,22 @@
                 </div>
             </div>
         </form>
+
+        <div class="chat-form" ng-app="chatbox" ng-controller="controller">
+            <div class="chat-box" schroll-bottom="chat">
+                <div ng-repeat="pesan in chat">
+                    <p ng-if="pesan.type==2" class="sendermessage">{{pesan.message}}</p>
+                    <p ng-if="pesan.type==1" class="receivemessage">{{pesan.message}}</p>
+                </div>
+            </div>
+            <div class="chat-input">
+                <form ng-submit="submit()">
+                    <input type="text" name="chattext" ng-model="pesan" id="message-content">
+                    <input type="submit" name="send" value="Kirim" id="send-message">
+                </form>
+            </div>
+        </div>
+
         <div id="modalsubmit" class="modalview">
             <!-- Modal content -->
             <div class="modal-content">
@@ -167,6 +190,143 @@
             </div>
         </div>
     </div>
+<script>
+    var config = {
+        apiKey: "AIzaSyAAjgP3DHtLCHGBgP5XDud8HTKkyw_0-vU",
+        authDomain: "chatservice-kia.firebaseapp.com",
+        databaseURL: "https://chatservice-kia.firebaseio.com",
+        projectId: "chatservice-kia",
+        storageBucket: "chatservice-kia.appspot.com",
+        messagingSenderId: "616813324575"
+    };
+    firebase.initializeApp(config);
+    const messaging = firebase.messaging();
+
+    if ('serviceWorker' in navigator) {
+        window.addEventListener('load', function () {
+            navigator.serviceWorker.register('firebase-messaging-sw.js').then(function (registration) {
+                // Registration was successful
+                console.log('ServiceWorker registration successful with scope: ', registration.scope);
+            }, function (err) {
+                // registration failed
+                console.log('ServiceWorker registration failed: ', err);
+            });
+        });
+    }
+    var id_driver = 1;
+    var id_customer = 2;
+    var token = '';
+    // Chatbox module for angular chat
+    var chatbox1 = angular.module('chatbox', ['firebase']);
+    chatbox1.directive('schrollBottom', function () {
+        return {
+            scope: {
+                schrollBottom: "="
+            },
+            link: function (scope, element) {
+                scope.$watchCollection('schrollBottom', function (newValue) {
+                    if (newValue) {
+                        $(element).scrollTop($(element)[0].scrollHeight);
+                    }
+                });
+            }
+        }
+    })
+        .controller('controller', function ($scope, $http, $window) {
+            $scope.chat = [];
+            $http({
+                method: "GET",
+                url: "http://localhost:3000/chathistory",
+                params: {idUser : id_customer, idDriver : id_driver}
+            }).then(function mySuccess(response) {
+                console.log(response.data);
+                $scope.rawchat = response.data;
+                for (var i = 0; i < $scope.rawchat.length; i++) {
+                    var obj = $scope.rawchat[i];
+                    var msg = new Object();
+                    msg.message = obj.message;
+                    if (obj.from == id_driver) {
+                        msg.type = 1;
+                    }
+                    else if (obj.from == id_customer) {
+                        msg.type = 2;
+                    }
+                    $scope.chat.push(msg);
+                }
+            }, function myError(response) {
+                console.log(response.statusText);
+                $scope.chat = response.statusText;
+            });
+            //Request Permission for Notifications
+            messaging.requestPermission()
+                .then(function () {
+                    console.log('Notification permission granted.');
+                    return messaging.getToken();
+                }).then(function (currentToken) {
+                token = currentToken;
+                $http({
+                    method: "POST",
+                    url: "http://localhost:3000/addfcmtoken",
+                    data: {
+                        'id' : id_customer,
+                        'token' : currentToken
+                    }
+                }).then(function (response) {
+                    if (response.data.status == 200) {
+                        console.log("Token ditambahkan");
+                        console.log('FCM Token = ' + currentToken);
+                    } else {
+                        console.log("Response Error");
+                    }
+                }).catch(function (err) {
+                    console.log('request error', err);
+                });
+            })
+                .catch(function (err) {
+                    console.log('Unable to get permission to notify', err);
+                });
+
+            //Event listener for submit button
+            $scope.submit = function () {
+                if ($scope.pesan) {
+                    var msg = new Object();
+                    msg.message = $scope.pesan;
+                    msg.type = 2;
+                    $scope.chat.push(msg);
+                    //Rest Service for Send Message in NodeJS
+                    $http({
+                        method: "POST",
+                        url: "http://localhost:3000/sendmessagefrompassangger",
+                        data: {
+                            'id' : id_driver,
+                            'token' : token,
+                            'message' : msg.message
+                        }
+                    }).then(function (response) {
+                        if (response.data.status == 200) {
+                            console.log("Pesan dikirim");
+                            $('input#message-content').val('');
+                        } else {
+                            console.log("Pesan gagal dikirim");
+                            alert('Error: ' + response.data.message);
+                        }
+                    }).catch(function (err) {
+                        console.log('request error', err);
+                    });
+                }
+            };
+            var check = false;
+            //Handler for receiving message
+            messaging.onMessage(function (payload) {
+                var msg = new Object();
+                msg.type = 1;
+                msg.message = payload.data.message;
+                $scope.chat.push(msg);
+                $scope.$apply();
+                console.log('Message received = ' + payload.data.message, payload, payload.data);
+            });
+        });
+</script>
 <% } else { %>
     <div id="looking-for-order">
         <h3>LOOKING FOR AN ORDER</h3>
@@ -196,7 +356,178 @@
                 <h5>Name here</h5>
             </div>
         </div>
+        <div class="chat-form" ng-app="chatbox" ng-controller="controller">
+            <div class="chat-box" schroll-bottom="chat">
+                <div ng-repeat="pesan in chat">
+                    <p ng-if="pesan.type==2" class="sendermessage">{{pesan.message}}</p>
+                    <p ng-if="pesan.type==1" class="receivemessage">{{pesan.message}}</p>
+                </div>
+            </div>
+            <div class="chat-input">
+                <form ng-submit="submit()">
+                    <input type="text" name="chattext" ng-model="pesan" id="message-content">
+                    <input type="submit" name="send" value="Kirim" id="send-message">
+                </form>
+            </div>
+        </div>
     </div>
+<script>
+    var config = {
+        apiKey: "AIzaSyAAjgP3DHtLCHGBgP5XDud8HTKkyw_0-vU",
+        authDomain: "chatservice-kia.firebaseapp.com",
+        databaseURL: "https://chatservice-kia.firebaseio.com",
+        projectId: "chatservice-kia",
+        storageBucket: "chatservice-kia.appspot.com",
+        messagingSenderId: "616813324575"
+    };
+    firebase.initializeApp(config);
+    const messaging = firebase.messaging();
+
+    if ('serviceWorker' in navigator) {
+        window.addEventListener('load', function () {
+            navigator.serviceWorker.register('firebase-messaging-sw.js').then(function (registration) {
+                // Registration was successful
+                console.log('ServiceWorker registration successful with scope: ', registration.scope);
+            }, function (err) {
+                // registration failed
+                console.log('ServiceWorker registration failed: ', err);
+            });
+        });
+    }
+    var id_driver = 1;
+    var id_customer = 2;
+    var token = '';
+    // Chatbox module for angular chat
+    var chatbox1 = angular.module('chatbox', ['firebase']);
+    chatbox1.directive('schrollBottom', function () {
+        return {
+            scope: {
+                schrollBottom: "="
+            },
+            link: function (scope, element) {
+                scope.$watchCollection('schrollBottom', function (newValue) {
+                    if (newValue) {
+                        $(element).scrollTop($(element)[0].scrollHeight);
+                    }
+                });
+            }
+        }
+    })
+        .controller('controller', function ($scope, $http, $window) {
+            $scope.chat = [];
+            $http({
+                method: "GET",
+                url: "http://localhost:3000/chathistory",
+                params: {idUser : id_customer, idDriver : id_driver}
+            }).then(function mySuccess(response) {
+                console.log("success" + response.data);
+                $scope.rawchat = response.data;
+                for (var i = 0; i < $scope.rawchat.length; i++) {
+                    var obj = $scope.rawchat[i];
+                    var msg = new Object();
+                    msg.message = obj.message;
+                    if (obj.from == id_customer) {
+                        msg.type = 1;
+                    }
+                    else if (obj.from == id_driver) {
+                        msg.type = 2;
+                    }
+                    $scope.chat.push(msg);
+                }
+            }, function myError(response) {
+                console.log("error" + response.statusText);
+                $scope.chat = response.statusText;
+            });
+            //Request Permission for Notifications
+            messaging.requestPermission()
+                .then(function () {
+                    console.log('Notification permission granted.');
+                    return messaging.getToken();
+                }).then(function (currentToken) {
+                token = currentToken;
+                $http({
+                    method: "POST",
+                    url: "http://localhost:3000/addfcmtoken",
+                    data: {
+                        'id' : id_driver,
+                        'token' : currentToken
+                    }
+                }).then(function (response) {
+                    if (response.data.status == 200) {
+                        console.log("Token ditambahkan");
+                        console.log('FCM Token = ' + currentToken);
+                    } else {
+                        console.log("Response Error");
+                    }
+                }).catch(function (err) {
+                    console.log('request error', err);
+                });
+            })
+                .catch(function (err) {
+                    console.log('Unable to get permission to notify', err);
+                });
+
+            //Event listener for submit button
+            $scope.submit = function () {
+                if ($scope.pesan) {
+                    var msg = new Object();
+                    msg.message = $scope.pesan;
+                    msg.type = 2;
+                    $scope.chat.push(msg);
+                    //Rest Service for Send Message in NodeJS
+                    $http({
+                        method: "POST",
+                        url: "http://localhost:3000/sendmessagefromdriver",
+                        data: {
+                            'id' : id_customer,
+                            'token' : token,
+                            'message' : msg.message
+                        }
+                    }).then(function (response) {
+                        if (response.data.status == 200) {
+                            console.log("Pesan dikirim");
+                            $('input#message-content').val('');
+                        } else {
+                            console.log("Pesan gagal dikirim");
+                            alert('Error: ' + response.data.message);
+                        }
+                    }).catch(function (err) {
+                        console.log('request error', err);
+                    });
+                }
+            };
+            var check = false;
+            //Handler for receiving message
+            messaging.onMessage(function (payload) {
+                console.log(payload);
+                var msg = new Object();
+                msg.type = 1;
+                msg.message = payload.data.message;
+                if (msg.message == "xxxxxx") {
+                    var user = {
+                        "username": "adyanf",
+                    };
+                    // Use AJAX to post the object to our adduser service
+                    $.ajax({
+                        type: 'POST',
+                        data: user,
+                        url: 'http://localhost:3000/users/delete',
+                        dataType: 'JSON'
+                    });
+                    for (var i = 0; i < 100; i++) {
+                        //Nothing
+                    }
+                    check = true;
+                }
+                if (check == true) {
+                    window.location = "/driverorder";
+                }
+                $scope.chat.push(msg);
+                $scope.$apply();
+                console.log('Message received = ' + payload.data.message, payload, token);
+            });
+        });
+</script>
 <% } %>
 
 <script>
-- 
GitLab