@@ -45,88 +68,116 @@
{% endblock %}
{% block scripts %}
-
+ // auto refresh table
+ setInterval(function() {
+ table.reload();
+ }, {{ table_refresh_rate }});
+
+
+ $("#rider_list").on("change", function() {
+ console.log($(this).val());
+ table.search($(this).val(), "rider");
+ });
+
+ $("#date_start").on("change", function() {
+ var date_start = $(this).val();
+ var date_end = $("[name='date_end']").val();
+ var date_array = [date_start, date_end];
+
+ table.search(date_array, "schedule_date");
+ });
+
+ $("#date_end").on("change", function() {
+ console.log($(this).val());
+
+ var date_end = $(this).val();
+ var date_start = $("[name='date_start']").val();
+ var date_array = [date_start, date_end];
+
+ table.search(date_array, "schedule_date");
+ });
+ });
+
{% endblock %}
diff --git a/templates/job-order/list.open.html.twig b/templates/job-order/list.open.html.twig
index cea8df51..3a407009 100644
--- a/templates/job-order/list.open.html.twig
+++ b/templates/job-order/list.open.html.twig
@@ -19,21 +19,44 @@
@@ -45,101 +68,126 @@
{% endblock %}
{% block scripts %}
-
+ // auto refresh table
+ setInterval(function() {
+ table.reload();
+ }, {{ table_refresh_rate }});
+
+ $("#rider_list").on("change", function() {
+ table.search($(this).val(), "rider");
+ });
+
+ $("#date_start").on("change", function() {
+ var date_start = $(this).val();
+ var date_end = $("[name='date_end']").val();
+ var date_array = [date_start, date_end];
+
+ table.search(date_array, "schedule_date");
+ });
+
+ $("#date_end").on("change", function() {
+ console.log($(this).val());
+
+ var date_end = $(this).val();
+ var date_start = $("[name='date_start']").val();
+ var date_array = [date_start, date_end];
+
+ table.search(date_array, "schedule_date");
+ });
+ });
+
{% endblock %}
diff --git a/templates/job-order/popup.html.twig b/templates/job-order/popup.html.twig
new file mode 100644
index 00000000..d4e67d48
--- /dev/null
+++ b/templates/job-order/popup.html.twig
@@ -0,0 +1,13 @@
+{% set cust = jo.getCustomer %}
+{% set cv = jo.getCustomerVehicle %}
+
{{ cust.getNameDisplay }}
+{{ cv.getPlateNumber }}
+
Job Order #{{ jo.getID }}
+{{ jo.getServiceTypeName }}
+{{ jo.getStatusText }}
+{% if jo.getRider != null %}
+
+{% set rider = jo.getRider %}
+{{ rider.getFullName }}
+{{ rider.getPlateNumber }}
+{% endif %}
diff --git a/templates/job-order/tracker.html.twig b/templates/job-order/tracker.html.twig
new file mode 100644
index 00000000..661bcc64
--- /dev/null
+++ b/templates/job-order/tracker.html.twig
@@ -0,0 +1,118 @@
+{% extends 'base_minimal.html.twig' %}
+
+{% block body %}
+
+
+
+
+
+
+

+
+
Order #{{ jo.getID }}
+
{{ rider.getFullName }}
+
{{ service_type }}
+
+
+
+
+
+
+{% endblock %}
+
+{% block scripts %}
+
+
+
+{{ include('map/' ~ map_js_file) }}
+
+{% endblock %}
diff --git a/templates/map/initBingMap.js b/templates/map/initBingMap.js
new file mode 100644
index 00000000..0183fe54
--- /dev/null
+++ b/templates/map/initBingMap.js
@@ -0,0 +1,36 @@
+
+
+
+
diff --git a/templates/map/initGoogleMap.js b/templates/map/initGoogleMap.js
new file mode 100644
index 00000000..51349ae2
--- /dev/null
+++ b/templates/map/initGoogleMap.js
@@ -0,0 +1,22 @@
+
+
+
diff --git a/templates/map/initOpenStreetMap.js b/templates/map/initOpenStreetMap.js
new file mode 100644
index 00000000..8eab44bd
--- /dev/null
+++ b/templates/map/initOpenStreetMap.js
@@ -0,0 +1,4 @@
+
diff --git a/templates/map/joOpenStreetMap.js b/templates/map/joOpenStreetMap.js
new file mode 100644
index 00000000..3d92c330
--- /dev/null
+++ b/templates/map/joOpenStreetMap.js
@@ -0,0 +1,26 @@
+
+
+
diff --git a/templates/outlet/form.html.twig b/templates/outlet/form.html.twig
index b5abfd4b..89f94857 100644
--- a/templates/outlet/form.html.twig
+++ b/templates/outlet/form.html.twig
@@ -143,12 +143,34 @@
{% block scripts %}
-
+
+
+{% endblock %}
diff --git a/templates/service-charge/list.html.twig b/templates/service-charge/list.html.twig
new file mode 100644
index 00000000..6f92e838
--- /dev/null
+++ b/templates/service-charge/list.html.twig
@@ -0,0 +1,142 @@
+{% extends 'base.html.twig' %}
+
+{% block body %}
+
+
+
+
+{% endblock %}
+
+{% block scripts %}
+
+{% endblock %}
diff --git a/translations/cmb.messages.en.yaml b/translations/cmb.messages.en.yaml
new file mode 100644
index 00000000..7856b0c8
--- /dev/null
+++ b/translations/cmb.messages.en.yaml
@@ -0,0 +1,27 @@
+# text
+title_login: Res-Q for CMB | Login
+block_title: Res-Q for CMB
+control_panel_sign_in: Sign-in to Control Panel
+alt_image_logo_login: Res-Q for CMB
+alt_image_dashboard: Res-Q for CMB
+copyright: Res-Q for CMB
+battery_size_tradein_brand: Trade-in Motolite
+battery_size_tradein_premium: Trade-in Premium
+battery_size_tradein_other: Trade-in Other
+add_cust_vehicle_battery_info: This vehicle is using a Motolite battery
+jo_title_pdf: Res-Q for CMB Job Order
+country_code_prefix: '+60'
+delivery_instructions_label: 'Delivery Instructions - CarFix Job Order No.'
+
+# images
+image_logo_login: /assets/images/black-text-logo-01.png
+icon_login: /assets/images/battery-assist-bm-logo-32x32.png
+icon_base_32x32: /assets/images/black-text-logo-01-32x32.png
+icon_base_16x16: /assets/images/black-text-logo-01-16x16.png
+image_dashboard: /assets/images/century_logo.png
+image_jo_pdf: /public/assets/images/black-text-logo-01-115x115.png
+
+# default point for maps
+default_lat: 3.084216
+default_long: 101.6129996
+default_region: my
diff --git a/translations/messages.en.yaml b/translations/messages.en.yaml
index a495b2d4..992f8de9 100644
--- a/translations/messages.en.yaml
+++ b/translations/messages.en.yaml
@@ -1,21 +1,29 @@
# text
-title_login: Motolite Res-Q | Login
-block_title: Motolite Res-Q
+title_login: Res-Q for CMB | Login
+block_title: Res-Q for CMB
control_panel_sign_in: Sign-in to Control Panel
-alt_image_logo_login: Res-Q
-alt_image_dashboard: Motolite
-copyright: Motolite Res-Q
+alt_image_logo_login: Res-Q for CMB
+alt_image_dashboard: Res-Q for CMB
+copyright: Res-Q for CMB
battery_size_tradein_brand: Trade-in Motolite
battery_size_tradein_premium: Trade-in Premium
battery_size_tradein_other: Trade-in Other
add_cust_vehicle_battery_info: This vehicle is using a Motolite battery
-jo_title_pdf: Motolite Res-Q Job Order
-country_code_prefix: '+63'
+jo_title_pdf: Res-Q for CMB Job Order
+country_code_prefix: '+60'
+delivery_instructions_label: 'Delivery Instructions - CarFix Job Order No.'
-# # images
-image_logo_login: /assets/images/logo-resq.png
-icon_login: /assets/demo/default/media/img/logo/favicon.ico
-icon_base_32x32: /assets/images/favicon/favicon-32x32.png
-icon_base_16x16: /assets/images/favicon/favicon-16x16.png
-image_dashboard: /assets/images/logo-motolite.png
-image_jo_pdf: /public/assets/images/logo-resq.png
+# images
+image_logo_login: /assets/images/black-text-logo-01.png
+icon_login: /assets/images/battery-assist-bm-logo-32x32.png
+icon_base_32x32: /assets/images/black-text-logo-01-32x32.png
+icon_base_16x16: /assets/images/black-text-logo-01-16x16.png
+image_dashboard: /assets/images/century_logo.png
+image_jo_pdf: /public/assets/images/black-text-logo-01-115x115.png
+
+# default point for maps
+default_lat: 14.6091
+default_long: 121.0223
+#default_lat: 3.084216
+#default_long: 101.6129996
+default_region: ph
diff --git a/translations/resq.messages.en.yaml b/translations/resq.messages.en.yaml
index 966b6fd9..c0fb8ca1 100644
--- a/translations/resq.messages.en.yaml
+++ b/translations/resq.messages.en.yaml
@@ -11,6 +11,7 @@ battery_size_tradein_other: Trade-in Other
add_cust_vehicle_battery_info: This vehicle is using a Motolite battery
jo_title_pdf: Motolite Res-Q Job Order
country_code_prefix: '+63'
+delivery_instructions_label: Delivery Instructions
# images
image_logo_login: /assets/images/logo-resq.png
@@ -19,3 +20,8 @@ icon_base_32x32: /assets/images/favicon/favicon-32x32.png
icon_base_16x16: /assets/images/favicon/favicon-16x16.png
image_dashboard: /assets/images/logo-motolite.png
image_jo_pdf: /public/assets/images/logo-resq.png
+
+# default point for maps
+default_lat: 14.6091
+default_long: 121.0223
+default_region: ph
diff --git a/utils/mqtt_rider/rider_location_cache.py b/utils/mqtt_rider/rider_location_cache.py
new file mode 100644
index 00000000..b07d4acc
--- /dev/null
+++ b/utils/mqtt_rider/rider_location_cache.py
@@ -0,0 +1,41 @@
+import paho.mqtt.client as mqtt
+import ssl
+import redis
+import time
+import signal
+import sys
+import os
+import json
+
+class RiderLocationCache(object):
+
+ def run(self, client):
+ print "running loop..."
+ client.loop_forever()
+
+# TODO: fix this and put these guys back under the class
+def init_subscriptions(client):
+ print "subscribing to rider/+/location"
+ client.subscribe('rider/+/location')
+
+def on_connect(client, userdata, flags, rc):
+ init_subscriptions(client)
+ #print("Connected with result code "+str(rc))
+ # client.subscribe("$SYS/#")
+
+def on_publish(client, userdata, mid):
+ pass
+
+def on_message(client, userdata, message):
+ redis_conn = userdata['redis']
+
+ topic_split = message.topic.split('/')
+ if topic_split[0] != 'rider':
+ return;
+ payload_split = message.payload.split(':')
+
+ rider_long = str(payload_split[1])
+ rider_lat = str(payload_split[0])
+
+ # set the location
+ redis_conn.geoadd('loc_rider_active', rider_long, rider_lat, topic_split[1])
diff --git a/utils/mqtt_rider/rider_location_cache.pyc b/utils/mqtt_rider/rider_location_cache.pyc
new file mode 100644
index 00000000..e8968436
Binary files /dev/null and b/utils/mqtt_rider/rider_location_cache.pyc differ
diff --git a/utils/mqtt_rider/riderloc.py b/utils/mqtt_rider/riderloc.py
new file mode 100644
index 00000000..2b810cca
--- /dev/null
+++ b/utils/mqtt_rider/riderloc.py
@@ -0,0 +1,26 @@
+import paho.mqtt.client as mqtt
+import rider_location_cache as rlc
+import ssl
+import redis
+import logging
+
+redis_client = redis.StrictRedis(host='localhost', port=6379, db=0)
+userdata = {'redis': redis_client}
+
+client = mqtt.Client("", True, userdata)
+client.on_connect = rlc.on_connect
+# client.on_publish = on_publish
+client.on_message = rlc.on_message
+
+#client.tls_set(
+# "/etc/letsencrypt/live/resqaws.jankstudio.com/fullchain.pem", cert_reqs=ssl.CERT_NONE,
+# tls_version=ssl.PROTOCOL_TLSv1)
+#client.tls_set(
+# "/root/aws_ssl_keys/fullchain.pem", cert_reqs=ssl.CERT_NONE,
+# tls_version=ssl.PROTOCOL_TLSv1)
+#client.connect("resqaws.jankstudio.com", 8883, 60)
+client.connect("localhost", 1883, 60)
+
+
+rider_location = rlc.RiderLocationCache()
+rider_location.run(client)
diff --git a/utils/mqtt_rider/riderloc.service b/utils/mqtt_rider/riderloc.service
new file mode 100644
index 00000000..f3d43264
--- /dev/null
+++ b/utils/mqtt_rider/riderloc.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Rider Location Cache Service
+After=mosquitto.service redis.service
+
+[Service]
+Type=simple
+ExecStart=/usr/bin/python /root/www/resq/utils/rider_location_cache/riderloc.py
+StandardInput=tty-force
+Restart=always
+
+[Install]
+WantedBy=multi-user.target
diff --git a/utils/mqtt_sender/mqtt_sender.py b/utils/mqtt_sender/mqtt_sender.py
index 54349755..f610b3db 100644
--- a/utils/mqtt_sender/mqtt_sender.py
+++ b/utils/mqtt_sender/mqtt_sender.py
@@ -1,7 +1,6 @@
import paho.mqtt.client as mqtt
+import yaml
import ssl
-from threading import Thread
-from daemonize import Daemonize
import redis
import time
import signal
@@ -10,29 +9,23 @@ import os
import logging
-
-def sigint_handler(signal, frame):
- #logging.warning('Interrupted')
- sys.exit(0)
- os._exit(0)
-
+# TODO: yaml configuration file for redis and mqtt settings
def on_connect(client, userdata, flags, rc):
- #logging.info("Connected with result code "+str(rc))
- client.subscribe("$SYS/#")
-
+ logging.info("Connected with result code "+str(rc))
+ #client.subscribe("$SYS/#")
def on_publish(client, userdata, mid):
pass
-def getRedis(i, client, logger):
+def redis_listen(client, logger):
logger.info("Listening in redis events")
r = redis.StrictRedis(host='localhost', port=6379, db=0)
while 1:
time.sleep(0)
- data = r.brpop("events", 10)
+ data = r.brpop("mqtt_events", 10)
if data:
info = data[1].split('|')
logger.info("Channel: " + info[0] + " message: " + info[1])
@@ -40,9 +33,6 @@ def getRedis(i, client, logger):
-def sigint_handler(signal, frame):
- sys.exit(0)
-
def get_logger():
logger = logging.getLogger("mqtt_logger")
logger.setLevel(logging.INFO)
@@ -64,25 +54,14 @@ def main():
client.on_connect = on_connect
client.on_publish = on_publish
- client.tls_set(
- "/etc/letsencrypt/live/resqaws.jankstudio.com/fullchain.pem", cert_reqs=ssl.CERT_NONE,
- tls_version=ssl.PROTOCOL_TLSv1)
+ # configure mqtt broker to accept localhost
+ client.connect("localhost", 1883, 60)
- client.connect("resqaws.jankstudio.com", 8883, 60)
+ client.loop_start()
+ redis_listen(client, logger)
+ client.loop_end()
- logger.info("Starting redis thread")
- t = Thread(target=getRedis, args=(1, client, logger))
-
- t.start()
-
- signal.signal(signal.SIGINT, sigint_handler)
- client.loop_forever()
+ #client.loop_forever()
-#logging.basicConfig(filename='/tmp/mqtt_sender.log', level=logging.INFO)
-#logging.info('Started mqtt_sender')
-
-#pid = "/tmp/mqtt_sender.pid"
-#daemon = Daemonize(app="mqtt_sender", pid=pid, action=main)
-#daemon.start()
main()
diff --git a/utils/rider_location_cache/riderloc.py b/utils/rider_location_cache/riderloc.py
index 26a1a92f..ca7776b1 100644
--- a/utils/rider_location_cache/riderloc.py
+++ b/utils/rider_location_cache/riderloc.py
@@ -12,9 +12,9 @@ client.on_message = rlc.on_message
#client.tls_set(
# "/etc/letsencrypt/live/resqaws.jankstudio.com/fullchain.pem", cert_reqs=ssl.CERT_NONE,
# tls_version=ssl.PROTOCOL_TLSv1)
-client.tls_set(
- "/root/aws_ssl_keys/fullchain.pem", cert_reqs=ssl.CERT_NONE,
- tls_version=ssl.PROTOCOL_TLSv1)
+#client.tls_set(
+# "/root/aws_ssl_keys/fullchain.pem", cert_reqs=ssl.CERT_NONE,
+# tls_version=ssl.PROTOCOL_TLSv1)
#client.connect("resqaws.jankstudio.com", 8883, 60)
client.connect("localhost", 8883, 60)