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'>☆</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'>☆</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'>☆</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