Revert "Merge branch '457-cmb-add-telephone-number-to-search' into 'master'"
This reverts merge request !536
This commit is contained in:
parent
030a3655b3
commit
df950006c1
50 changed files with 477 additions and 4911 deletions
|
|
@ -74,6 +74,3 @@ MAPTILER_API_KEY=map_tiler_api_key
|
||||||
|
|
||||||
# API version
|
# API version
|
||||||
API_VERSION=insert_api_version_here
|
API_VERSION=insert_api_version_here
|
||||||
|
|
||||||
# SSL
|
|
||||||
SSL_ENABLE=true_or_false
|
|
||||||
|
|
|
||||||
14
composer.lock
generated
14
composer.lock
generated
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"_readme": [
|
"_readme": [
|
||||||
"This file locks the dependencies of your project to a known state",
|
"This file locks the dependencies of your project to a known state",
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "f03b92d48946e8b2ee19466f931c826f",
|
"content-hash": "f03b92d48946e8b2ee19466f931c826f",
|
||||||
|
|
@ -3214,20 +3214,20 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/filesystem",
|
"name": "symfony/filesystem",
|
||||||
"version": "v4.4.10",
|
"version": "v4.4.4",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/filesystem.git",
|
"url": "https://github.com/symfony/filesystem.git",
|
||||||
"reference": "b27f491309db5757816db672b256ea2e03677d30"
|
"reference": "266c9540b475f26122b61ef8b23dd9198f5d1cfd"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/filesystem/zipball/b27f491309db5757816db672b256ea2e03677d30",
|
"url": "https://api.github.com/repos/symfony/filesystem/zipball/266c9540b475f26122b61ef8b23dd9198f5d1cfd",
|
||||||
"reference": "b27f491309db5757816db672b256ea2e03677d30",
|
"reference": "266c9540b475f26122b61ef8b23dd9198f5d1cfd",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.1.3",
|
"php": "^7.1.3",
|
||||||
"symfony/polyfill-ctype": "~1.8"
|
"symfony/polyfill-ctype": "~1.8"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
|
|
@ -3260,7 +3260,7 @@
|
||||||
],
|
],
|
||||||
"description": "Symfony Filesystem Component",
|
"description": "Symfony Filesystem Component",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"time": "2020-05-30T18:50:54+00:00"
|
"time": "2020-01-21T08:20:44+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/finder",
|
"name": "symfony/finder",
|
||||||
|
|
|
||||||
|
|
@ -270,8 +270,6 @@ access_keys:
|
||||||
label: Autoassign Test
|
label: Autoassign Test
|
||||||
- id: jo_hub.list
|
- id: jo_hub.list
|
||||||
label: Hub View
|
label: Hub View
|
||||||
- id: jo_behind_schedule.list
|
|
||||||
label: View Behind Schedule
|
|
||||||
|
|
||||||
- id: support
|
- id: support
|
||||||
label: Customer Support Access
|
label: Customer Support Access
|
||||||
|
|
|
||||||
|
|
@ -118,10 +118,6 @@ main_menu:
|
||||||
acl: jo_all.list
|
acl: jo_all.list
|
||||||
label: View All
|
label: View All
|
||||||
parent: joborder
|
parent: joborder
|
||||||
- id: jo_behind_schedule
|
|
||||||
acl: jo_behind_schedule.list
|
|
||||||
label: View Behind Schedule
|
|
||||||
parent: joborder
|
|
||||||
|
|
||||||
- id: support
|
- id: support
|
||||||
acl: support.menu
|
acl: support.menu
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ parameters:
|
||||||
latitude: 14.6091
|
latitude: 14.6091
|
||||||
longitude: 121.0223
|
longitude: 121.0223
|
||||||
image_upload_directory: '%kernel.project_dir%/public/uploads'
|
image_upload_directory: '%kernel.project_dir%/public/uploads'
|
||||||
jo_extra_upload_directory: '%kernel.project_dir%/public/uploads/jo_extra'
|
|
||||||
job_order_refresh_interval: 300000
|
job_order_refresh_interval: 300000
|
||||||
api_acl_file: 'api_acl.yaml'
|
api_acl_file: 'api_acl.yaml'
|
||||||
api_access_key: 'api_access_keys'
|
api_access_key: 'api_access_keys'
|
||||||
|
|
@ -13,7 +12,6 @@ parameters:
|
||||||
app_access_key: 'access_keys'
|
app_access_key: 'access_keys'
|
||||||
cvu_brand_id: "%env(CVU_BRAND_ID)%"
|
cvu_brand_id: "%env(CVU_BRAND_ID)%"
|
||||||
country_code: "%env(COUNTRY_CODE)%"
|
country_code: "%env(COUNTRY_CODE)%"
|
||||||
api_version: "%env(API_VERSION)%"
|
|
||||||
|
|
||||||
services:
|
services:
|
||||||
# default configuration for services in *this* file
|
# default configuration for services in *this* file
|
||||||
|
|
@ -75,7 +73,6 @@ services:
|
||||||
$pass: "%env(RT_PASS)%"
|
$pass: "%env(RT_PASS)%"
|
||||||
$usage_type: "%env(RT_USAGE_TYPE)%"
|
$usage_type: "%env(RT_USAGE_TYPE)%"
|
||||||
$shortcode: "%env(RT_SHORTCODE)%"
|
$shortcode: "%env(RT_SHORTCODE)%"
|
||||||
$dr_url: "https://resqaws.jankstudio.com/sms/delivery_receipt"
|
|
||||||
|
|
||||||
App\Service\MQTTClient:
|
App\Service\MQTTClient:
|
||||||
arguments:
|
arguments:
|
||||||
|
|
@ -193,8 +190,8 @@ services:
|
||||||
App\Service\RiderAPIHandler\CMBRiderAPIHandler:
|
App\Service\RiderAPIHandler\CMBRiderAPIHandler:
|
||||||
arguments:
|
arguments:
|
||||||
$country_code: "%env(COUNTRY_CODE)%"
|
$country_code: "%env(COUNTRY_CODE)%"
|
||||||
$upload_dir: "%jo_extra_upload_directory%"
|
|
||||||
|
|
||||||
|
# rider API interface
|
||||||
App\Service\RiderAPIHandlerInterface: "@App\\Service\\RiderAPIHandler\\CMBRiderAPIHandler"
|
App\Service\RiderAPIHandlerInterface: "@App\\Service\\RiderAPIHandler\\CMBRiderAPIHandler"
|
||||||
|
|
||||||
# map manager
|
# map manager
|
||||||
|
|
@ -232,14 +229,6 @@ services:
|
||||||
$loc_key: "%env(LOCATION_RIDER_ACTIVE_KEY)%"
|
$loc_key: "%env(LOCATION_RIDER_ACTIVE_KEY)%"
|
||||||
$status_key: "%env(STATUS_RIDER_KEY)%"
|
$status_key: "%env(STATUS_RIDER_KEY)%"
|
||||||
|
|
||||||
# inventory manager
|
|
||||||
App\Service\InventoryManager:
|
|
||||||
arguments:
|
|
||||||
$api_url: "%env(INVENTORY_API_URL)%"
|
|
||||||
$api_ocp_key: "%env(INVENTORY_API_OCP)%"
|
|
||||||
$api_auth_prefix: "%env(INVENTORY_API_AUTH_TOKEN_PREFIX)%"
|
|
||||||
$api_auth_token: "%env(INVENTORY_API_AUTH_TOKEN)%"
|
|
||||||
|
|
||||||
# API logging
|
# API logging
|
||||||
App\EventSubscriber\LogSubscriber:
|
App\EventSubscriber\LogSubscriber:
|
||||||
arguments:
|
arguments:
|
||||||
|
|
|
||||||
|
|
@ -37,10 +37,6 @@ main_menu:
|
||||||
acl: rider.list
|
acl: rider.list
|
||||||
label: Riders
|
label: Riders
|
||||||
parent: logistics
|
parent: logistics
|
||||||
- id: service_charge_list
|
|
||||||
acl: service_charge.list
|
|
||||||
label: Service Charges
|
|
||||||
parent: logistics
|
|
||||||
|
|
||||||
- id: battery
|
- id: battery
|
||||||
acl: battery.menu
|
acl: battery.menu
|
||||||
|
|
@ -102,13 +98,21 @@ main_menu:
|
||||||
acl: joborder.menu
|
acl: joborder.menu
|
||||||
label: Job Order
|
label: Job Order
|
||||||
icon: flaticon-calendar-3
|
icon: flaticon-calendar-3
|
||||||
- id: jo_onestep_form
|
- id: jo_in
|
||||||
acl: jo_onestep.form
|
acl: jo_in.list
|
||||||
label: One-step Process
|
label: Incoming
|
||||||
parent: joborder
|
parent: joborder
|
||||||
- id: jo_walkin_form
|
- id: jo_proc
|
||||||
acl: jo_walkin.form
|
acl: jo_proc.list
|
||||||
label: Walk-in
|
label: Dispatch
|
||||||
|
parent: joborder
|
||||||
|
- id: jo_assign
|
||||||
|
acl: jo_assign.list
|
||||||
|
label: Rider Assignment
|
||||||
|
parent: joborder
|
||||||
|
- id: jo_fulfill
|
||||||
|
acl: jo_fulfill.list
|
||||||
|
label: Fulfillment
|
||||||
parent: joborder
|
parent: joborder
|
||||||
- id: jo_open
|
- id: jo_open
|
||||||
acl: jo_open.list
|
acl: jo_open.list
|
||||||
|
|
@ -118,9 +122,9 @@ main_menu:
|
||||||
acl: jo_all.list
|
acl: jo_all.list
|
||||||
label: View All
|
label: View All
|
||||||
parent: joborder
|
parent: joborder
|
||||||
- id: jo_behind_schedule
|
- id: jo_hub_view
|
||||||
acl: jo_behind_schedule.list
|
acl: jo_hub.list
|
||||||
label: View Behind Schedule
|
label: Hub View
|
||||||
parent: joborder
|
parent: joborder
|
||||||
|
|
||||||
- id: support
|
- id: support
|
||||||
|
|
@ -181,3 +185,12 @@ main_menu:
|
||||||
acl: review.list
|
acl: review.list
|
||||||
label: Reviews
|
label: Reviews
|
||||||
parent: partner
|
parent: partner
|
||||||
|
|
||||||
|
- id: analytics
|
||||||
|
acl: analytics.menu
|
||||||
|
label: Analytics
|
||||||
|
icon: flaticon-graphic
|
||||||
|
- id: analytics_forecast_form
|
||||||
|
acl: analytics.forecast
|
||||||
|
label: Forecasting
|
||||||
|
parent: analytics
|
||||||
|
|
|
||||||
|
|
@ -46,10 +46,6 @@ security:
|
||||||
provider: api_key_user_provider
|
provider: api_key_user_provider
|
||||||
user_checker: Catalyst\AuthBundle\Service\UserChecker
|
user_checker: Catalyst\AuthBundle\Service\UserChecker
|
||||||
|
|
||||||
cmb_rider_api:
|
|
||||||
pattern: ^\/cmbrapi\/
|
|
||||||
security: false
|
|
||||||
|
|
||||||
main:
|
main:
|
||||||
provider: user_provider
|
provider: user_provider
|
||||||
form_login:
|
form_login:
|
||||||
|
|
|
||||||
|
|
@ -8,4 +8,3 @@ twig:
|
||||||
mqtt_host: "%env(MQTT_WS_HOST)%"
|
mqtt_host: "%env(MQTT_WS_HOST)%"
|
||||||
mqtt_port: "%env(MQTT_WS_PORT)%"
|
mqtt_port: "%env(MQTT_WS_PORT)%"
|
||||||
dashboard_enable: "%env(DASHBOARD_ENABLE)%"
|
dashboard_enable: "%env(DASHBOARD_ENABLE)%"
|
||||||
ssl_enable: "%env(SSL_ENABLE)%"
|
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,6 @@ services:
|
||||||
$pass: "%env(RT_PASS)%"
|
$pass: "%env(RT_PASS)%"
|
||||||
$usage_type: "%env(RT_USAGE_TYPE)%"
|
$usage_type: "%env(RT_USAGE_TYPE)%"
|
||||||
$shortcode: "%env(RT_SHORTCODE)%"
|
$shortcode: "%env(RT_SHORTCODE)%"
|
||||||
$dr_url: "https://resqaws.jankstudio.com/sms/delivery_receipt"
|
|
||||||
|
|
||||||
App\Service\MQTTClient:
|
App\Service\MQTTClient:
|
||||||
arguments:
|
arguments:
|
||||||
|
|
|
||||||
|
|
@ -1,156 +0,0 @@
|
||||||
# rider app api
|
|
||||||
|
|
||||||
cmb_rapi_register:
|
|
||||||
path: /cmbrapi/register
|
|
||||||
controller: App\Controller\CMBRAPIController::register
|
|
||||||
methods: [POST]
|
|
||||||
|
|
||||||
cmb_rapi_login:
|
|
||||||
path: /cmbrapi/login
|
|
||||||
controller: App\Controller\CMBRAPIController::login
|
|
||||||
methods: [POST]
|
|
||||||
|
|
||||||
cmb_rapi_logout:
|
|
||||||
path: /cmbrapi/logout
|
|
||||||
controller: App\Controller\CMBRAPIController::logout
|
|
||||||
methods: [POST]
|
|
||||||
|
|
||||||
cmb_rapi_jo_get:
|
|
||||||
path: /cmbrapi/joborder
|
|
||||||
controller: App\Controller\CMBRAPIController::getJobOrder
|
|
||||||
methods: [GET]
|
|
||||||
|
|
||||||
cmb_rapi_jo_accept:
|
|
||||||
path: /cmbrapi/joaccept
|
|
||||||
controller: App\Controller\CMBRAPIController::acceptJobOrder
|
|
||||||
methods: [POST]
|
|
||||||
|
|
||||||
cmb_rapi_jo_cancel:
|
|
||||||
path: /cmbrapi/jocancel
|
|
||||||
controller: App\Controller\CMBRAPIController::cancelJobOrder
|
|
||||||
methods: [POST]
|
|
||||||
|
|
||||||
cmb_rapi_arrive:
|
|
||||||
path: /cmbrapi/arrive
|
|
||||||
controller: App\Controller\CMBRAPIController::arrive
|
|
||||||
methods: [POST]
|
|
||||||
|
|
||||||
cmb_rapi_performed:
|
|
||||||
path: /cmbrapi/joperform
|
|
||||||
controller: App\Controller\CMBRAPIController::performJobOrder
|
|
||||||
methods: [POST]
|
|
||||||
|
|
||||||
cmb_rapi_payment:
|
|
||||||
path: /cmbrapi/jopayment
|
|
||||||
controller: App\Controller\CMBRAPIController::payment
|
|
||||||
methods: [POST]
|
|
||||||
|
|
||||||
cmb_rapi_hub_arrive:
|
|
||||||
path: /cmbrapi/hub_arrive
|
|
||||||
controller: App\Controller\CMBRAPIController::hubArrive
|
|
||||||
methods: [POST]
|
|
||||||
|
|
||||||
cmb_rapi_promos:
|
|
||||||
path: /cmbrapi/promos
|
|
||||||
controller: App\Controller\CMBRAPIController::getPromos
|
|
||||||
methods: [GET]
|
|
||||||
|
|
||||||
cmb_rapi_batteries:
|
|
||||||
path: /cmbrapi/batteries
|
|
||||||
controller: App\Controller\CMBRAPIController::getBatteries
|
|
||||||
methods: [GET]
|
|
||||||
|
|
||||||
cmb_rapi_change_service:
|
|
||||||
path: /cmbrapi/service
|
|
||||||
controller: App\Controller\CMBRAPIController::changeService
|
|
||||||
methods: [POST]
|
|
||||||
|
|
||||||
cmb_rapi_available:
|
|
||||||
path: /cmbrapi/available
|
|
||||||
controller: App\Controller\CMBRAPIController::available
|
|
||||||
methods: [POST]
|
|
||||||
|
|
||||||
cmb_rapi_jo_history:
|
|
||||||
path: /cmbrapi/johistory/{period}
|
|
||||||
controller: App\Controller\CMBRAPIController::getJobOrderHistory
|
|
||||||
methods: [GET]
|
|
||||||
|
|
||||||
cmb_rapi_assigned_jo_get:
|
|
||||||
path: /cmbrapi/assignedjos
|
|
||||||
controller: App\Controller\CMBRAPIController::getAssignedJobOrders
|
|
||||||
methods: [GET]
|
|
||||||
|
|
||||||
cmb_rapi_jo_in_transit:
|
|
||||||
path: /cmbrapi/jotransit
|
|
||||||
controller: App\Controller\CMBRAPIController::setJobOrderInTransit
|
|
||||||
methods: [POST]
|
|
||||||
|
|
||||||
cmb_rapi_invoice_generate:
|
|
||||||
path: /cmbrapi/generateinvoice
|
|
||||||
controller: App\Controller\CMBRAPIController::generateInvoice
|
|
||||||
methods: [GET]
|
|
||||||
|
|
||||||
cmb_rapi_online:
|
|
||||||
path: /cmbrapi/online
|
|
||||||
controller: App\Controller\CMBRAPIController::goOnline
|
|
||||||
methods: [POST]
|
|
||||||
|
|
||||||
cmb_rapi_offline:
|
|
||||||
path: /cmbrapi/offline
|
|
||||||
controller: App\Controller\CMBRAPIController::goOffline
|
|
||||||
methods: [POST]
|
|
||||||
|
|
||||||
cmb_rapi_jo_start:
|
|
||||||
path: /cmbrapi/jostart
|
|
||||||
controller: App\Controller\CMBRAPIController::startJobOrder
|
|
||||||
methods: [POST]
|
|
||||||
|
|
||||||
cmb_rapi_jo_complete:
|
|
||||||
path: /cmbrapi/jocomplete
|
|
||||||
controller: App\Controller\CMBRAPIController::completeJobOrder
|
|
||||||
methods: [POST]
|
|
||||||
|
|
||||||
cmb_rapi_jo_set_active:
|
|
||||||
path: /cmbrapi/joactive
|
|
||||||
controller: App\Controller\CMBRAPIController::setActiveJobOrder
|
|
||||||
methods: [POST]
|
|
||||||
|
|
||||||
cmb_rapi_jo_reject:
|
|
||||||
path: /cmbrapi/joreject
|
|
||||||
controller: App\Controller\CMBRAPIController::rejectJobOrder
|
|
||||||
methods: [POST]
|
|
||||||
|
|
||||||
cmb_rapi_jo_odometer:
|
|
||||||
path: /cmbrapi/odometer
|
|
||||||
controller: App\Controller\CMBRAPIController::setOdometer
|
|
||||||
methods: [POST]
|
|
||||||
|
|
||||||
cmb_rapi_jo_finish_photos_upload:
|
|
||||||
path: /cmbrapi/uploadfinishphotos
|
|
||||||
controller: App\Controller\CMBRAPIController::uploadFinishPhotos
|
|
||||||
methods: [POST]
|
|
||||||
|
|
||||||
cmb_rapi_status:
|
|
||||||
path: /cmbrapi/status
|
|
||||||
controller: App\Controller\CMBRAPIController::getStatus
|
|
||||||
methods: [GET]
|
|
||||||
|
|
||||||
cmb_rapi_jo_ongoing:
|
|
||||||
path: /cmbrapi/joongoing
|
|
||||||
controller: App\Controller\CMBRAPIController::getOngoingJobOrder
|
|
||||||
methods: [GET]
|
|
||||||
|
|
||||||
cmb_rapi_payment_methods:
|
|
||||||
path: /cmbrapi/paymentmethods
|
|
||||||
controller: App\Controller\CMBRAPIController::getPaymentMethods
|
|
||||||
methods: [GET]
|
|
||||||
|
|
||||||
cmb_rapi_cancel_reasons:
|
|
||||||
path: /cmbrapi/cancelreasons
|
|
||||||
controller: App\Controller\CMBRAPIController::getCancelReasons
|
|
||||||
methods: [GET]
|
|
||||||
|
|
||||||
cmb_rapi_jo_verify:
|
|
||||||
path: /cmbrapi/joverify
|
|
||||||
controller: App\Controller\CMBRAPIController::verifyJobOrder
|
|
||||||
methods: [GET]
|
|
||||||
|
|
@ -253,14 +253,3 @@ jo_hub_view_form:
|
||||||
controller: App\Controller\JobOrderController::hubViewForm
|
controller: App\Controller\JobOrderController::hubViewForm
|
||||||
methods: [GET]
|
methods: [GET]
|
||||||
|
|
||||||
jo_behind_schedule:
|
|
||||||
path: /job-order/behind-schedule
|
|
||||||
controller: App\Controller\JobOrderController::listBehindSchedule
|
|
||||||
methods: [GET]
|
|
||||||
|
|
||||||
jo_behind_schedule_rows:
|
|
||||||
path: /job-order/behind-schedule-rows
|
|
||||||
controller: App\Controller\JobOrderController::getRows
|
|
||||||
methods: [POST]
|
|
||||||
defaults:
|
|
||||||
tier: "behind_schedule"
|
|
||||||
|
|
|
||||||
|
|
@ -56,13 +56,3 @@ rider_priority_down_jo:
|
||||||
path: /riders/{id}/priority_down/{jo_id}
|
path: /riders/{id}/priority_down/{jo_id}
|
||||||
controller: App\Controller\RiderController::priorityDownJO
|
controller: App\Controller\RiderController::priorityDownJO
|
||||||
methods: [GET]
|
methods: [GET]
|
||||||
|
|
||||||
rider_ajax_avialable:
|
|
||||||
path: /riders/{id}/available
|
|
||||||
controller: App\Controller\RiderController::ajaxAvailable
|
|
||||||
methods: [GET]
|
|
||||||
|
|
||||||
rider_ajax_rider_name:
|
|
||||||
path: /riders/rider_name
|
|
||||||
controller: App\Controller\RiderController::ajaxRiderName
|
|
||||||
methods: [GET]
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ parameters:
|
||||||
latitude: 14.6091
|
latitude: 14.6091
|
||||||
longitude: 121.0223
|
longitude: 121.0223
|
||||||
image_upload_directory: '%kernel.project_dir%/public/uploads'
|
image_upload_directory: '%kernel.project_dir%/public/uploads'
|
||||||
jo_extra_upload_directory: '%kernel.project_dir%/public/uploads/jo_extra'
|
|
||||||
job_order_refresh_interval: 300000
|
job_order_refresh_interval: 300000
|
||||||
api_acl_file: 'api_acl.yaml'
|
api_acl_file: 'api_acl.yaml'
|
||||||
api_access_key: 'api_access_keys'
|
api_access_key: 'api_access_keys'
|
||||||
|
|
@ -162,40 +161,39 @@ services:
|
||||||
- { name: kernel.event_listener, event: kernel.controller, method: onKernelController }
|
- { name: kernel.event_listener, event: kernel.controller, method: onKernelController }
|
||||||
|
|
||||||
# invoice generator
|
# invoice generator
|
||||||
App\Service\InvoiceGenerator\CMBInvoiceGenerator: ~
|
App\Service\InvoiceGenerator\ResqInvoiceGenerator: ~
|
||||||
|
|
||||||
# invoice generator interface
|
# invoice generator interface
|
||||||
App\Service\InvoiceGeneratorInterface: "@App\\Service\\InvoiceGenerator\\CMBInvoiceGenerator"
|
App\Service\InvoiceGeneratorInterface: "@App\\Service\\InvoiceGenerator\\ResqInvoiceGenerator"
|
||||||
|
|
||||||
# job order generator
|
# job order generator
|
||||||
App\Service\JobOrderHandler\CMBJobOrderHandler:
|
App\Service\JobOrderHandler\ResqJobOrderHandler:
|
||||||
arguments:
|
arguments:
|
||||||
$country_code: "%env(COUNTRY_CODE)%"
|
$country_code: "%env(COUNTRY_CODE)%"
|
||||||
|
|
||||||
#job order generator interface
|
#job order generator interface
|
||||||
App\Service\JobOrderHandlerInterface: "@App\\Service\\JobOrderHandler\\CMBJobOrderHandler"
|
App\Service\JobOrderHandlerInterface: "@App\\Service\\JobOrderHandler\\ResqJobOrderHandler"
|
||||||
|
|
||||||
# customer generator
|
# customer generator
|
||||||
App\Service\CustomerHandler\CMBCustomerHandler:
|
App\Service\CustomerHandler\ResqCustomerHandler:
|
||||||
arguments:
|
arguments:
|
||||||
$country_code: "%env(COUNTRY_CODE)%"
|
$country_code: "%env(COUNTRY_CODE)%"
|
||||||
|
|
||||||
# customer generator interface
|
# customer generator interface
|
||||||
App\Service\CustomerHandlerInterface: "@App\\Service\\CustomerHandler\\CMBCustomerHandler"
|
App\Service\CustomerHandlerInterface: "@App\\Service\\CustomerHandler\\ResqCustomerHandler"
|
||||||
|
|
||||||
# rider assignment
|
# rider assignment
|
||||||
App\Service\RiderAssignmentHandler\CMBRiderAssignmentHandler: ~
|
App\Service\RiderAssignmentHandler\ResqRiderAssignmentHandler: ~
|
||||||
|
|
||||||
# rider assignment interface
|
# rider assignment interface
|
||||||
App\Service\RiderAssignmentHandlerInterface: "@App\\Service\\RiderAssignmentHandler\\CMBRiderAssignmentHandler"
|
App\Service\RiderAssignmentHandlerInterface: "@App\\Service\\RiderAssignmentHandler\\ResqRiderAssignmentHandler"
|
||||||
|
|
||||||
# rider API service
|
# rider API service
|
||||||
App\Service\RiderAPIHandler\CMBRiderAPIHandler:
|
App\Service\RiderAPIHandler\ResqRiderAPIHandler:
|
||||||
arguments:
|
arguments:
|
||||||
$country_code: "%env(COUNTRY_CODE)%"
|
$country_code: "%env(COUNTRY_CODE)%"
|
||||||
$upload_dir: "%jo_extra_upload_directory%"
|
|
||||||
|
|
||||||
App\Service\RiderAPIHandlerInterface: "@App\\Service\\RiderAPIHandler\\CMBRiderAPIHandler"
|
App\Service\RiderAPIHandlerInterface: "@App\\Service\\RiderAPIHandler\\ResqRiderAPIHandler"
|
||||||
|
|
||||||
# map manager
|
# map manager
|
||||||
#App\Service\GISManager\Bing: ~
|
#App\Service\GISManager\Bing: ~
|
||||||
|
|
|
||||||
|
|
@ -155,29 +155,6 @@ span.has-danger,
|
||||||
color: #fff !important;
|
color: #fff !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.m-table__row--is_in_progress td {
|
|
||||||
background-color: #FFA500 !important;
|
|
||||||
color: #fff !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.m-table__row--is_in_progress td > span,
|
|
||||||
.m-table__row--is_in_progress td > span a,
|
|
||||||
.m-table__row--is_in_progress td > span a i {
|
|
||||||
color: #fff !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.m-table__row--is_assigned td {
|
|
||||||
background-color: #0000ff !important;
|
|
||||||
color: #fff !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.m-table__row--is_assigned td > span,
|
|
||||||
.m-table__row--is_assigned td > span a,
|
|
||||||
.m-table__row--is_assigned td > span a i {
|
|
||||||
color: #fff !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.m-datatable.m-datatable--default > .m-datatable__table {
|
.m-datatable.m-datatable--default > .m-datatable__table {
|
||||||
min-height: 0 !important;
|
min-height: 0 !important;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ class DashboardMap {
|
||||||
this.options = options;
|
this.options = options;
|
||||||
this.rider_markers = rider_markers;
|
this.rider_markers = rider_markers;
|
||||||
this.cust_markers = cust_markers;
|
this.cust_markers = cust_markers;
|
||||||
this.rider_availability = {};
|
|
||||||
|
|
||||||
// layer groups
|
// layer groups
|
||||||
this.layer_groups = {
|
this.layer_groups = {
|
||||||
|
|
@ -147,49 +146,6 @@ class DashboardMap {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
putMarkerWithLabel(id, lat, lng, markers, icon, layer_group, popup_url, name) {
|
|
||||||
var my = this;
|
|
||||||
// existing marker
|
|
||||||
if (markers.hasOwnProperty(id)) {
|
|
||||||
markers[id].setLatLng(L.latLng(lat, lng));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// new marker
|
|
||||||
// add label
|
|
||||||
markers[id] = L.marker(
|
|
||||||
[lat, lng],
|
|
||||||
{ icon: icon }
|
|
||||||
);
|
|
||||||
|
|
||||||
var marker_label = id + ' - ' + name;
|
|
||||||
|
|
||||||
markers[id].bindTooltip(marker_label,
|
|
||||||
{
|
|
||||||
permanent: true,
|
|
||||||
direction: 'right'
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
markers[id].addTo(layer_group);
|
|
||||||
|
|
||||||
if (my.options.enable_popup) {
|
|
||||||
markers[id].bindPopup('Loading...');
|
|
||||||
|
|
||||||
// bind ajax for popup
|
|
||||||
markers[id].on('click', function(e) {
|
|
||||||
var popup = e.target.getPopup();
|
|
||||||
var url = popup_url.replace('[id]', id);
|
|
||||||
console.log(url);
|
|
||||||
$.get(url).done(function(data) {
|
|
||||||
popup.setContent(data);
|
|
||||||
popup.update();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
putCustomerMarker(id, lat, lng) {
|
putCustomerMarker(id, lat, lng) {
|
||||||
this.putMarker(
|
this.putMarker(
|
||||||
id,
|
id,
|
||||||
|
|
@ -214,8 +170,6 @@ class DashboardMap {
|
||||||
|
|
||||||
this.layer_groups.customer.removeLayer(markers[id]);
|
this.layer_groups.customer.removeLayer(markers[id]);
|
||||||
this.layer_groups.mobile_customer.removeLayer(markers[id]);
|
this.layer_groups.mobile_customer.removeLayer(markers[id]);
|
||||||
|
|
||||||
delete markers[id];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
putMobileCustomerMarker(id, lat, lng) {
|
putMobileCustomerMarker(id, lat, lng) {
|
||||||
|
|
@ -230,29 +184,27 @@ class DashboardMap {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
putRiderAvailableMarker(id, lat, lng, name) {
|
putRiderAvailableMarker(id, lat, lng) {
|
||||||
this.putMarkerWithLabel(
|
this.putMarker(
|
||||||
id,
|
id,
|
||||||
lat,
|
lat,
|
||||||
lng,
|
lng,
|
||||||
this.rider_markers,
|
this.rider_markers,
|
||||||
this.options.icons.rider_available,
|
this.options.icons.rider_available,
|
||||||
this.layer_groups.rider_available,
|
this.layer_groups.rider_available,
|
||||||
this.options.rider_popup_url,
|
this.options.rider_popup_url
|
||||||
name
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
putRiderActiveJOMarker(id, lat, lng, name) {
|
putRiderActiveJOMarker(id, lat, lng) {
|
||||||
this.putMarkerWithLabel(
|
this.putMarker(
|
||||||
id,
|
id,
|
||||||
lat,
|
lat,
|
||||||
lng,
|
lng,
|
||||||
this.rider_markers,
|
this.rider_markers,
|
||||||
this.options.icons.rider_active_jo,
|
this.options.icons.rider_active_jo,
|
||||||
this.layer_groups.rider_active_jo,
|
this.layer_groups.rider_active_jo,
|
||||||
this.options.rider_popup_url,
|
this.options.rider_popup_url
|
||||||
name
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -267,8 +219,6 @@ class DashboardMap {
|
||||||
|
|
||||||
this.layer_groups.rider_active_jo.removeLayer(markers[id]);
|
this.layer_groups.rider_active_jo.removeLayer(markers[id]);
|
||||||
this.layer_groups.rider_available.removeLayer(markers[id]);
|
this.layer_groups.rider_available.removeLayer(markers[id]);
|
||||||
|
|
||||||
delete markers[id];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
loadLocations(location_url) {
|
loadLocations(location_url) {
|
||||||
|
|
@ -302,12 +252,11 @@ class DashboardMap {
|
||||||
$.each(riders, function(id, data) {
|
$.each(riders, function(id, data) {
|
||||||
var lat = data.latitude;
|
var lat = data.latitude;
|
||||||
var lng = data.longitude;
|
var lng = data.longitude;
|
||||||
var name = data.name;
|
|
||||||
|
|
||||||
if (data.has_jo)
|
if (data.has_jo)
|
||||||
my.putRiderActiveJOMarker(id, lat, lng, name);
|
my.putRiderActiveJOMarker(id, lat, lng);
|
||||||
else
|
else
|
||||||
my.putRiderAvailableMarker(id, lat, lng, name);
|
my.putRiderAvailableMarker(id, lat, lng);
|
||||||
});
|
});
|
||||||
|
|
||||||
// console.log(rider_markers);
|
// console.log(rider_markers);
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,7 @@
|
||||||
class MapEventHandler {
|
class MapEventHandler {
|
||||||
constructor(options, dashmap, ssl) {
|
constructor(options, dashmap) {
|
||||||
this.options = options;
|
this.options = options;
|
||||||
this.dashmap = dashmap;
|
this.dashmap = dashmap;
|
||||||
this.ssl = ssl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
connect(user_id, host, port) {
|
connect(user_id, host, port) {
|
||||||
|
|
@ -12,7 +11,7 @@ class MapEventHandler {
|
||||||
|
|
||||||
this.mqtt = new Paho.MQTT.Client(host, port, client_id);
|
this.mqtt = new Paho.MQTT.Client(host, port, client_id);
|
||||||
var options = {
|
var options = {
|
||||||
useSSL: this.ssl,
|
// useSSL: true,
|
||||||
timeout: 3,
|
timeout: 3,
|
||||||
invocationContext: this,
|
invocationContext: this,
|
||||||
onSuccess: this.onConnect.bind(this),
|
onSuccess: this.onConnect.bind(this),
|
||||||
|
|
@ -36,10 +35,6 @@ class MapEventHandler {
|
||||||
// subscribe to rider status
|
// subscribe to rider status
|
||||||
console.log('subscribing to ' + my.options.channels.rider_status);
|
console.log('subscribing to ' + my.options.channels.rider_status);
|
||||||
my.mqtt.subscribe(my.options.channels.rider_status);
|
my.mqtt.subscribe(my.options.channels.rider_status);
|
||||||
|
|
||||||
// subscribe to rider availability
|
|
||||||
console.log('subscribing to ' + my.options.channels.rider_availability);
|
|
||||||
my.mqtt.subscribe(my.options.channels.rider_availability);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (my.options.track_jo) {
|
if (my.options.track_jo) {
|
||||||
|
|
@ -60,7 +55,7 @@ class MapEventHandler {
|
||||||
|
|
||||||
onMessage(msg) {
|
onMessage(msg) {
|
||||||
// console.log(msg);
|
// console.log(msg);
|
||||||
// console.log('received message');
|
console.log('received message');
|
||||||
|
|
||||||
var channel = msg.destinationName;
|
var channel = msg.destinationName;
|
||||||
var chan_split = channel.split('/');
|
var chan_split = channel.split('/');
|
||||||
|
|
@ -78,58 +73,12 @@ class MapEventHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
handleRider(chan_split, payload) {
|
handleRider(chan_split, payload) {
|
||||||
// console.log("rider message");
|
console.log("rider message");
|
||||||
// get rider name using chan_split[1] which is rider id
|
|
||||||
var rider_id = chan_split[1];
|
|
||||||
$.ajax({
|
|
||||||
method: "GET",
|
|
||||||
url: "{{ url('rider_ajax_rider_name') }}",
|
|
||||||
data: {id: rider_id}
|
|
||||||
}).done(function(response) {
|
|
||||||
var name = response.rider_name;
|
|
||||||
console.log('rider_name ' + name);
|
|
||||||
switch (chan_split[2]) {
|
switch (chan_split[2]) {
|
||||||
case "availability":
|
|
||||||
console.log("got availability for rider " + chan_split[1] + " - " + payload);
|
|
||||||
var obj = JSON.parse(payload);
|
|
||||||
|
|
||||||
var status = obj.status;
|
|
||||||
console.log("status " + status);
|
|
||||||
switch (status) {
|
|
||||||
case 'rider_offline':
|
|
||||||
this.dashmap.rider_availability[chan_split[1]] = false;
|
|
||||||
this.dashmap.removeRiderMarker(chan_split[1]);
|
|
||||||
break;
|
|
||||||
case 'rider_online':
|
|
||||||
this.dashmap.rider_availability[chan_split[1]] = true;
|
|
||||||
var lat = parseFloat(obj.latitude);
|
|
||||||
var lng = parseFloat(obj.longitude);
|
|
||||||
|
|
||||||
// cheeck if rider is available / unavailable
|
|
||||||
// TODO: make url not hardcoded
|
|
||||||
var dashmap = this.dashmap;
|
|
||||||
$.get('https://cmbdev.wildcard.cc/riders/' + chan_split[1] + '/available').done(function(data) {
|
|
||||||
console.log('rider availability - ' + data);
|
|
||||||
switch (data) {
|
|
||||||
case 'available':
|
|
||||||
console.log('putting available marker ' + chan_split[1] + ' ' + lat + ':' + lng);
|
|
||||||
dashmap.switchRiderStatus(chan_split[1], 'available');
|
|
||||||
dashmap.putRiderAvailableMarker(chan_split[1], lat, lng, name);
|
|
||||||
break;
|
|
||||||
case 'unavailable':
|
|
||||||
console.log('putting active jo marker ' + chan_split[1] + ' ' + lat + ':' + lng);
|
|
||||||
dashmap.switchRiderStatus(chan_split[1], 'jo');
|
|
||||||
dashmap.putRiderActiveJOMarker(chan_split[1], lat, lng, name);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "location":
|
case "location":
|
||||||
// console.log("got location for rider " + chan_split[1] + " - " + payload);
|
console.log("got location for rider " + chan_split[1] + " - " + payload);
|
||||||
var pl_split = payload.split(':');
|
var pl_split = payload.split(':');
|
||||||
// console.log(pl_split);
|
console.log(pl_split);
|
||||||
|
|
||||||
// check for correct format
|
// check for correct format
|
||||||
if (pl_split.length != 2)
|
if (pl_split.length != 2)
|
||||||
|
|
@ -138,21 +87,8 @@ class MapEventHandler {
|
||||||
var lat = parseFloat(pl_split[0]);
|
var lat = parseFloat(pl_split[0]);
|
||||||
var lng = parseFloat(pl_split[1]);
|
var lng = parseFloat(pl_split[1]);
|
||||||
|
|
||||||
var display_marker = true;
|
// TODO: check if available or not
|
||||||
if (this.dashmap.rider_availability.hasOwnProperty(chan_split[1])) {
|
this.dashmap.putRiderAvailableMarker(chan_split[1], lat, lng);
|
||||||
if (!this.dashmap.rider_availability[chan_split[1]]) {
|
|
||||||
console.log('NOT displaying marker for inactive rider');
|
|
||||||
display_marker = false;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
console.log('rider not in availability check');
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: cache rider availability (available vs active jo) status and check before displaying icon
|
|
||||||
// NOTE: we really should fix our terms since available can mean many things
|
|
||||||
if (display_marker) {
|
|
||||||
this.dashmap.putRiderAvailableMarker(chan_split[1], lat, lng, name);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case "status":
|
case "status":
|
||||||
console.log("got status for rider " + chan_split[1] + " - " + payload);
|
console.log("got status for rider " + chan_split[1] + " - " + payload);
|
||||||
|
|
@ -170,7 +106,6 @@ class MapEventHandler {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
handleJobOrder(chan_split, payload) {
|
handleJobOrder(chan_split, payload) {
|
||||||
|
|
|
||||||
|
|
@ -1,179 +0,0 @@
|
||||||
main_menu:
|
|
||||||
- id: home
|
|
||||||
acl: dashboard.menu
|
|
||||||
label: Dashboard
|
|
||||||
icon: flaticon-line-graph
|
|
||||||
- id: user
|
|
||||||
acl: user.menu
|
|
||||||
label: User
|
|
||||||
icon: flaticon-users
|
|
||||||
- id: user_list
|
|
||||||
acl: user.list
|
|
||||||
label: Users
|
|
||||||
parent: user
|
|
||||||
- id: role_list
|
|
||||||
acl: role.list
|
|
||||||
label: Roles
|
|
||||||
parent: user
|
|
||||||
|
|
||||||
- id: apiuser
|
|
||||||
acl: apiuser.menu
|
|
||||||
label: API User
|
|
||||||
icon: flaticon-users
|
|
||||||
- id: api_user_list
|
|
||||||
acl: apiuser.list
|
|
||||||
label: API Users
|
|
||||||
parent: apiuser
|
|
||||||
- id: api_role_list
|
|
||||||
acl: apirole.list
|
|
||||||
label: API Roles
|
|
||||||
parent: apiuser
|
|
||||||
|
|
||||||
- id: logistics
|
|
||||||
acl: logistics.menu
|
|
||||||
label: Logistics
|
|
||||||
icon: fa fa-truck
|
|
||||||
- id: rider_list
|
|
||||||
acl: rider.list
|
|
||||||
label: Riders
|
|
||||||
parent: logistics
|
|
||||||
- id: service_charge_list
|
|
||||||
acl: service_charge.list
|
|
||||||
label: Service Charges
|
|
||||||
parent: logistics
|
|
||||||
|
|
||||||
- id: battery
|
|
||||||
acl: battery.menu
|
|
||||||
label: Battery
|
|
||||||
icon: fa fa-battery-3
|
|
||||||
- id: battery_list
|
|
||||||
acl: battery.list
|
|
||||||
label: Batteries
|
|
||||||
parent: battery
|
|
||||||
- id: bmfg_list
|
|
||||||
acl: bmfg.list
|
|
||||||
label: Manufacturers
|
|
||||||
parent: battery
|
|
||||||
- id: bmodel_list
|
|
||||||
acl: bmodel.list
|
|
||||||
label: Models
|
|
||||||
parent: battery
|
|
||||||
- id: bsize_list
|
|
||||||
acl: bsize.list
|
|
||||||
label: Sizes
|
|
||||||
parent: battery
|
|
||||||
- id: promo_list
|
|
||||||
acl: promo.list
|
|
||||||
label: Promos
|
|
||||||
parent: battery
|
|
||||||
|
|
||||||
- id: vehicle
|
|
||||||
acl: vehicle.menu
|
|
||||||
label: Vehicle
|
|
||||||
icon: fa fa-car
|
|
||||||
- id: vehicle_list
|
|
||||||
acl: vehicle.list
|
|
||||||
label: Vehicles
|
|
||||||
parent: vehicle
|
|
||||||
- id: vmfg_list
|
|
||||||
acl: vmfg.list
|
|
||||||
label: Manufacturers
|
|
||||||
parent: vehicle
|
|
||||||
|
|
||||||
- id: location
|
|
||||||
acl: location.menu
|
|
||||||
label: Location
|
|
||||||
icon: fa fa-home
|
|
||||||
- id: outlet_list
|
|
||||||
acl: outlet.menu
|
|
||||||
label: Outlet
|
|
||||||
parent: location
|
|
||||||
- id: hub_list
|
|
||||||
acl: hub.menu
|
|
||||||
label: Hub
|
|
||||||
parent: location
|
|
||||||
- id: geofence_list
|
|
||||||
acl: geofence.menu
|
|
||||||
label: Geofence
|
|
||||||
parent: location
|
|
||||||
|
|
||||||
|
|
||||||
- id: joborder
|
|
||||||
acl: joborder.menu
|
|
||||||
label: Job Order
|
|
||||||
icon: flaticon-calendar-3
|
|
||||||
- id: jo_onestep_form
|
|
||||||
acl: jo_onestep.form
|
|
||||||
label: One-step Process
|
|
||||||
parent: joborder
|
|
||||||
- id: jo_walkin_form
|
|
||||||
acl: jo_walkin.form
|
|
||||||
label: Walk-in
|
|
||||||
parent: joborder
|
|
||||||
- id: jo_open
|
|
||||||
acl: jo_open.list
|
|
||||||
label: Open
|
|
||||||
parent: joborder
|
|
||||||
- id: jo_all
|
|
||||||
acl: jo_all.list
|
|
||||||
label: View All
|
|
||||||
parent: joborder
|
|
||||||
|
|
||||||
- id: support
|
|
||||||
acl: support.menu
|
|
||||||
label: Customer Support
|
|
||||||
icon: flaticon-support
|
|
||||||
- id: customer_list
|
|
||||||
acl: customer.list
|
|
||||||
label: Customers
|
|
||||||
parent: support
|
|
||||||
- id: ticket_list
|
|
||||||
acl: ticket.list
|
|
||||||
label: Tickets
|
|
||||||
parent: support
|
|
||||||
- id: general_search
|
|
||||||
acl: general.search
|
|
||||||
label: Search
|
|
||||||
parent: support
|
|
||||||
- id: warranty_search
|
|
||||||
acl: warranty.search
|
|
||||||
label: Customer Battery Search
|
|
||||||
parent: support
|
|
||||||
- id: privacy_policy_list
|
|
||||||
acl: privacy_policy.list
|
|
||||||
label: Privacy Policy
|
|
||||||
parent: support
|
|
||||||
- id: warranty_list
|
|
||||||
acl: warranty.list
|
|
||||||
label: Warranty
|
|
||||||
parent: support
|
|
||||||
- id: warranty_upload
|
|
||||||
acl: warranty.upload
|
|
||||||
label: Warranty Upload
|
|
||||||
parent: support
|
|
||||||
- id: static_content_list
|
|
||||||
acl: static_content.list
|
|
||||||
label: Static Content
|
|
||||||
parent: support
|
|
||||||
|
|
||||||
- id: service
|
|
||||||
acl: service.menu
|
|
||||||
label: Other Services
|
|
||||||
icon: flaticon-squares
|
|
||||||
- id: service_list
|
|
||||||
acl: service.list
|
|
||||||
label: Services
|
|
||||||
parent: service
|
|
||||||
|
|
||||||
- id: partner
|
|
||||||
acl: partner.menu
|
|
||||||
label: Partners
|
|
||||||
icon: flaticon-network
|
|
||||||
- id: partner_list
|
|
||||||
acl: partner.list
|
|
||||||
label: Partners
|
|
||||||
parent: partner
|
|
||||||
- id: review_list
|
|
||||||
acl: review.list
|
|
||||||
label: Reviews
|
|
||||||
parent: partner
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
||||||
# 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: 'CarFix Details'
|
|
||||||
|
|
||||||
# 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
|
|
||||||
|
|
@ -1,246 +0,0 @@
|
||||||
# Put parameters here that don't need to change on each machine where the app is deployed
|
|
||||||
# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
|
|
||||||
parameters:
|
|
||||||
map_default:
|
|
||||||
latitude: 14.6091
|
|
||||||
longitude: 121.0223
|
|
||||||
image_upload_directory: '%kernel.project_dir%/public/uploads'
|
|
||||||
jo_extra_upload_directory: '%kernel.project_dir%/public/uploads/jo_extra'
|
|
||||||
job_order_refresh_interval: 300000
|
|
||||||
api_acl_file: 'api_acl.yaml'
|
|
||||||
api_access_key: 'api_access_keys'
|
|
||||||
app_acl_file: 'acl.yaml'
|
|
||||||
app_access_key: 'access_keys'
|
|
||||||
cvu_brand_id: "%env(CVU_BRAND_ID)%"
|
|
||||||
country_code: "%env(COUNTRY_CODE)%"
|
|
||||||
api_version: "%env(API_VERSION)%"
|
|
||||||
|
|
||||||
services:
|
|
||||||
# default configuration for services in *this* file
|
|
||||||
_defaults:
|
|
||||||
autowire: true # Automatically injects dependencies in your services.
|
|
||||||
autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
|
|
||||||
public: false # Allows optimizing the container by removing unused services; this also means
|
|
||||||
# fetching services directly from the container via $container->get() won't work.
|
|
||||||
# The best practice is to be explicit about your dependencies anyway.
|
|
||||||
|
|
||||||
# makes classes in src/ available to be used as services
|
|
||||||
# this creates a service per class whose id is the fully-qualified class name
|
|
||||||
App\:
|
|
||||||
resource: '../src/*'
|
|
||||||
exclude: '../src/{Entity,Migrations,Tests,Menu,Access}'
|
|
||||||
|
|
||||||
# controllers are imported separately to make sure services can be injected
|
|
||||||
# as action arguments even if you don't extend any base controller class
|
|
||||||
App\Controller\:
|
|
||||||
resource: '../src/Controller'
|
|
||||||
tags: ['controller.service_arguments']
|
|
||||||
|
|
||||||
# add more service definitions when explicit configuration is needed
|
|
||||||
# please note that last definitions always *replace* previous ones
|
|
||||||
App\Menu\Generator:
|
|
||||||
arguments:
|
|
||||||
$router: "@router.default"
|
|
||||||
$cache_dir: "%kernel.cache_dir%"
|
|
||||||
$config_dir: "%kernel.root_dir%/../config"
|
|
||||||
|
|
||||||
Catalyst\AuthBundle\Service\ACLGenerator:
|
|
||||||
arguments:
|
|
||||||
$router: "@router.default"
|
|
||||||
$cache_dir: "%kernel.cache_dir%"
|
|
||||||
$config_dir: "%kernel.root_dir%/../config"
|
|
||||||
$acl_file: "%app_acl_file%"
|
|
||||||
|
|
||||||
Catalyst\AuthBundle\Service\ACLVoter:
|
|
||||||
arguments:
|
|
||||||
$user_class: "App\\Entity\\User"
|
|
||||||
tags: ['security.voter']
|
|
||||||
|
|
||||||
Catalyst\AuthBundle\Service\UserChecker:
|
|
||||||
|
|
||||||
App\Service\FileUploader:
|
|
||||||
arguments:
|
|
||||||
$target_dir: '%image_upload_directory%'
|
|
||||||
|
|
||||||
App\Service\MapTools:
|
|
||||||
arguments:
|
|
||||||
$em: "@doctrine.orm.entity_manager"
|
|
||||||
$gmaps_api_key: "%env(GMAPS_API_KEY)%"
|
|
||||||
$cust_dist_limit: "%env(CUST_DISTANCE_LIMIT)%"
|
|
||||||
|
|
||||||
App\Service\RisingTideGateway:
|
|
||||||
arguments:
|
|
||||||
$em: "@doctrine.orm.entity_manager"
|
|
||||||
$user: "%env(RT_USER)%"
|
|
||||||
$pass: "%env(RT_PASS)%"
|
|
||||||
$usage_type: "%env(RT_USAGE_TYPE)%"
|
|
||||||
$shortcode: "%env(RT_SHORTCODE)%"
|
|
||||||
$dr_url: "https://resqaws.jankstudio.com/sms/delivery_receipt"
|
|
||||||
|
|
||||||
App\Service\MQTTClient:
|
|
||||||
arguments:
|
|
||||||
$redis_client: "@App\\Service\\RedisClientProvider"
|
|
||||||
$key: "mqtt_events"
|
|
||||||
|
|
||||||
App\Service\APNSClient:
|
|
||||||
arguments:
|
|
||||||
$redis_client: "@App\\Service\\RedisClientProvider"
|
|
||||||
|
|
||||||
App\Service\RedisClientProvider:
|
|
||||||
arguments:
|
|
||||||
$scheme: "%env(REDIS_CLIENT_SCHEME)%"
|
|
||||||
$host: "%env(REDIS_CLIENT_HOST)%"
|
|
||||||
$port: "%env(REDIS_CLIENT_PORT)%"
|
|
||||||
$password: "%env(REDIS_CLIENT_PASSWORD)%"
|
|
||||||
|
|
||||||
App\Service\GeofenceTracker:
|
|
||||||
arguments:
|
|
||||||
$geofence_flag: "%env(GEOFENCE_ENABLE)%"
|
|
||||||
|
|
||||||
App\Service\WarrantyHandler:
|
|
||||||
arguments:
|
|
||||||
$em: "@doctrine.orm.entity_manager"
|
|
||||||
|
|
||||||
App\Command\SetCustomerPrivacyPolicyCommand:
|
|
||||||
arguments:
|
|
||||||
$policy_promo: "%env(POLICY_PROMO)%"
|
|
||||||
$policy_third_party: "%env(POLICY_THIRD_PARTY)%"
|
|
||||||
$policy_mobile: "%env(POLICY_MOBILE)%"
|
|
||||||
|
|
||||||
App\Command\CreateCustomerFromWarrantyCommand:
|
|
||||||
arguments:
|
|
||||||
$cvu_mfg_id: "%env(CVU_MFG_ID)%"
|
|
||||||
$cvu_brand_id: "%env(CVU_BRAND_ID)%"
|
|
||||||
|
|
||||||
# rider tracker service
|
|
||||||
App\Service\RiderTracker:
|
|
||||||
arguments:
|
|
||||||
$redis_client: "@App\\Service\\RedisClientProvider"
|
|
||||||
|
|
||||||
Catalyst\APIBundle\Security\APIKeyUserProvider:
|
|
||||||
arguments:
|
|
||||||
$em: "@doctrine.orm.entity_manager"
|
|
||||||
|
|
||||||
Catalyst\APIBundle\Security\APIKeyAuthenticator:
|
|
||||||
arguments:
|
|
||||||
$em: "@doctrine.orm.entity_manager"
|
|
||||||
|
|
||||||
Catalyst\APIBundle\Command\UserCreateCommand:
|
|
||||||
arguments:
|
|
||||||
$em: "@doctrine.orm.entity_manager"
|
|
||||||
tags: ['console.command']
|
|
||||||
|
|
||||||
Catalyst\APIBundle\Command\TestCommand:
|
|
||||||
tags: ['console.command']
|
|
||||||
|
|
||||||
Catalyst\APIBundle\Command\TestAPICommand:
|
|
||||||
tags: ['console.command']
|
|
||||||
|
|
||||||
Catalyst\APIBundle\Access\Voter:
|
|
||||||
arguments:
|
|
||||||
$acl_gen: "@Catalyst\\APIBundle\\Access\\Generator"
|
|
||||||
$user_class: "Catalyst\\APIBundle\\Entity\\User"
|
|
||||||
tags: ['security.voter']
|
|
||||||
|
|
||||||
Catalyst\APIBundle\Access\Generator:
|
|
||||||
arguments:
|
|
||||||
$router: "@router.default"
|
|
||||||
$cache_dir: "%kernel.cache_dir%"
|
|
||||||
$config_dir: "%kernel.root_dir%/../config"
|
|
||||||
$acl_file: "%api_acl_file%"
|
|
||||||
|
|
||||||
Catalyst\MenuBundle\Menu\Generator:
|
|
||||||
arguments:
|
|
||||||
$router: "@router.default"
|
|
||||||
$cache_dir: "%kernel.cache_dir%"
|
|
||||||
$config_dir: "%kernel.root_dir%/../config"
|
|
||||||
|
|
||||||
Catalyst\MenuBundle\Listener\MenuAnnotationListener:
|
|
||||||
arguments:
|
|
||||||
$menu_name: "main_menu"
|
|
||||||
tags:
|
|
||||||
- { name: kernel.event_listener, event: kernel.controller, method: onKernelController }
|
|
||||||
|
|
||||||
# invoice generator
|
|
||||||
App\Service\InvoiceGenerator\CMBInvoiceGenerator: ~
|
|
||||||
|
|
||||||
# invoice generator interface
|
|
||||||
App\Service\InvoiceGeneratorInterface: "@App\\Service\\InvoiceGenerator\\CMBInvoiceGenerator"
|
|
||||||
|
|
||||||
# job order generator
|
|
||||||
App\Service\JobOrderHandler\CMBJobOrderHandler:
|
|
||||||
arguments:
|
|
||||||
$country_code: "%env(COUNTRY_CODE)%"
|
|
||||||
|
|
||||||
#job order generator interface
|
|
||||||
App\Service\JobOrderHandlerInterface: "@App\\Service\\JobOrderHandler\\CMBJobOrderHandler"
|
|
||||||
|
|
||||||
# customer generator
|
|
||||||
App\Service\CustomerHandler\CMBCustomerHandler:
|
|
||||||
arguments:
|
|
||||||
$country_code: "%env(COUNTRY_CODE)%"
|
|
||||||
|
|
||||||
# customer generator interface
|
|
||||||
App\Service\CustomerHandlerInterface: "@App\\Service\\CustomerHandler\\CMBCustomerHandler"
|
|
||||||
|
|
||||||
# rider assignment
|
|
||||||
App\Service\RiderAssignmentHandler\CMBRiderAssignmentHandler: ~
|
|
||||||
|
|
||||||
# rider assignment interface
|
|
||||||
App\Service\RiderAssignmentHandlerInterface: "@App\\Service\\RiderAssignmentHandler\\CMBRiderAssignmentHandler"
|
|
||||||
|
|
||||||
# rider API service
|
|
||||||
App\Service\RiderAPIHandler\CMBRiderAPIHandler:
|
|
||||||
arguments:
|
|
||||||
$country_code: "%env(COUNTRY_CODE)%"
|
|
||||||
$upload_dir: "%jo_extra_upload_directory%"
|
|
||||||
|
|
||||||
App\Service\RiderAPIHandlerInterface: "@App\\Service\\RiderAPIHandler\\CMBRiderAPIHandler"
|
|
||||||
|
|
||||||
# map manager
|
|
||||||
#App\Service\GISManager\Bing: ~
|
|
||||||
App\Service\GISManager\OpenStreet: ~
|
|
||||||
#App\Service\GISManager\Google: ~
|
|
||||||
|
|
||||||
#App\Service\GISManagerInterface: "@App\\Service\\GISManager\\Bing"
|
|
||||||
App\Service\GISManagerInterface: "@App\\Service\\GISManager\\OpenStreet"
|
|
||||||
#App\Service\GISManagerInterface: "@App\\Service\\GISManager\\Google"
|
|
||||||
|
|
||||||
App\EventListener\JobOrderActiveCacheListener:
|
|
||||||
arguments:
|
|
||||||
$jo_cache: "@App\\Service\\JobOrderCache"
|
|
||||||
$mqtt: "@App\\Service\\MQTTClient"
|
|
||||||
tags:
|
|
||||||
- name: 'doctrine.orm.entity_listener'
|
|
||||||
event: 'postUpdate'
|
|
||||||
entity: 'App\Entity\JobOrder'
|
|
||||||
- name: 'doctrine.orm.entity_listener'
|
|
||||||
event: 'postRemove'
|
|
||||||
entity: 'App\Entity\JobOrder'
|
|
||||||
- name: 'doctrine.orm.entity_listener'
|
|
||||||
event: 'postPersist'
|
|
||||||
entity: 'App\Entity\JobOrder'
|
|
||||||
|
|
||||||
App\Service\JobOrderCache:
|
|
||||||
arguments:
|
|
||||||
$redis_prov: "@App\\Service\\RedisClientProvider"
|
|
||||||
$active_jo_key: "%env(LOCATION_JO_ACTIVE_KEY)%"
|
|
||||||
|
|
||||||
App\Service\RiderCache:
|
|
||||||
arguments:
|
|
||||||
$redis_prov: "@App\\Service\\RedisClientProvider"
|
|
||||||
$loc_key: "%env(LOCATION_RIDER_ACTIVE_KEY)%"
|
|
||||||
$status_key: "%env(STATUS_RIDER_KEY)%"
|
|
||||||
|
|
||||||
# inventory manager
|
|
||||||
App\Service\InventoryManager:
|
|
||||||
arguments:
|
|
||||||
$api_url: "%env(INVENTORY_API_URL)%"
|
|
||||||
$api_ocp_key: "%env(INVENTORY_API_OCP)%"
|
|
||||||
$api_auth_prefix: "%env(INVENTORY_API_AUTH_TOKEN_PREFIX)%"
|
|
||||||
$api_auth_token: "%env(INVENTORY_API_AUTH_TOKEN)%"
|
|
||||||
|
|
||||||
# API logging
|
|
||||||
App\EventSubscriber\LogSubscriber:
|
|
||||||
arguments:
|
|
||||||
$api_log_flag: "%env(API_LOGGING)%"
|
|
||||||
|
|
@ -1,186 +0,0 @@
|
||||||
main_menu:
|
|
||||||
- id: home
|
|
||||||
acl: dashboard.menu
|
|
||||||
label: Dashboard
|
|
||||||
icon: flaticon-line-graph
|
|
||||||
- id: user
|
|
||||||
acl: user.menu
|
|
||||||
label: User
|
|
||||||
icon: flaticon-users
|
|
||||||
- id: user_list
|
|
||||||
acl: user.list
|
|
||||||
label: Users
|
|
||||||
parent: user
|
|
||||||
- id: role_list
|
|
||||||
acl: role.list
|
|
||||||
label: Roles
|
|
||||||
parent: user
|
|
||||||
|
|
||||||
- id: apiuser
|
|
||||||
acl: apiuser.menu
|
|
||||||
label: API User
|
|
||||||
icon: flaticon-users
|
|
||||||
- id: api_user_list
|
|
||||||
acl: apiuser.list
|
|
||||||
label: API Users
|
|
||||||
parent: apiuser
|
|
||||||
- id: api_role_list
|
|
||||||
acl: apirole.list
|
|
||||||
label: API Roles
|
|
||||||
parent: apiuser
|
|
||||||
|
|
||||||
- id: logistics
|
|
||||||
acl: logistics.menu
|
|
||||||
label: Logistics
|
|
||||||
icon: fa fa-truck
|
|
||||||
- id: rider_list
|
|
||||||
acl: rider.list
|
|
||||||
label: Riders
|
|
||||||
parent: logistics
|
|
||||||
|
|
||||||
- id: battery
|
|
||||||
acl: battery.menu
|
|
||||||
label: Battery
|
|
||||||
icon: fa fa-battery-3
|
|
||||||
- id: battery_list
|
|
||||||
acl: battery.list
|
|
||||||
label: Batteries
|
|
||||||
parent: battery
|
|
||||||
- id: bmfg_list
|
|
||||||
acl: bmfg.list
|
|
||||||
label: Manufacturers
|
|
||||||
parent: battery
|
|
||||||
- id: bmodel_list
|
|
||||||
acl: bmodel.list
|
|
||||||
label: Models
|
|
||||||
parent: battery
|
|
||||||
- id: bsize_list
|
|
||||||
acl: bsize.list
|
|
||||||
label: Sizes
|
|
||||||
parent: battery
|
|
||||||
- id: promo_list
|
|
||||||
acl: promo.list
|
|
||||||
label: Promos
|
|
||||||
parent: battery
|
|
||||||
|
|
||||||
- id: vehicle
|
|
||||||
acl: vehicle.menu
|
|
||||||
label: Vehicle
|
|
||||||
icon: fa fa-car
|
|
||||||
- id: vehicle_list
|
|
||||||
acl: vehicle.list
|
|
||||||
label: Vehicles
|
|
||||||
parent: vehicle
|
|
||||||
- id: vmfg_list
|
|
||||||
acl: vmfg.list
|
|
||||||
label: Manufacturers
|
|
||||||
parent: vehicle
|
|
||||||
|
|
||||||
- id: location
|
|
||||||
acl: location.menu
|
|
||||||
label: Location
|
|
||||||
icon: fa fa-home
|
|
||||||
- id: outlet_list
|
|
||||||
acl: outlet.menu
|
|
||||||
label: Outlet
|
|
||||||
parent: location
|
|
||||||
- id: hub_list
|
|
||||||
acl: hub.menu
|
|
||||||
label: Hub
|
|
||||||
parent: location
|
|
||||||
- id: geofence_list
|
|
||||||
acl: geofence.menu
|
|
||||||
label: Geofence
|
|
||||||
parent: location
|
|
||||||
|
|
||||||
|
|
||||||
- id: joborder
|
|
||||||
acl: joborder.menu
|
|
||||||
label: Job Order
|
|
||||||
icon: flaticon-calendar-3
|
|
||||||
- id: jo_in
|
|
||||||
acl: jo_in.list
|
|
||||||
label: Incoming
|
|
||||||
parent: joborder
|
|
||||||
- id: jo_proc
|
|
||||||
acl: jo_proc.list
|
|
||||||
label: Dispatch
|
|
||||||
parent: joborder
|
|
||||||
- id: jo_assign
|
|
||||||
acl: jo_assign.list
|
|
||||||
label: Rider Assignment
|
|
||||||
parent: joborder
|
|
||||||
- id: jo_fulfill
|
|
||||||
acl: jo_fulfill.list
|
|
||||||
label: Fulfillment
|
|
||||||
parent: joborder
|
|
||||||
- id: jo_open
|
|
||||||
acl: jo_open.list
|
|
||||||
label: Open
|
|
||||||
parent: joborder
|
|
||||||
- id: jo_all
|
|
||||||
acl: jo_all.list
|
|
||||||
label: View All
|
|
||||||
parent: joborder
|
|
||||||
- id: jo_hub.view
|
|
||||||
label: Hub View
|
|
||||||
parent: joborder
|
|
||||||
|
|
||||||
- id: support
|
|
||||||
acl: support.menu
|
|
||||||
label: Customer Support
|
|
||||||
icon: flaticon-support
|
|
||||||
- id: customer_list
|
|
||||||
acl: customer.list
|
|
||||||
label: Customers
|
|
||||||
parent: support
|
|
||||||
- id: ticket_list
|
|
||||||
acl: ticket.list
|
|
||||||
label: Tickets
|
|
||||||
parent: support
|
|
||||||
- id: general_search
|
|
||||||
acl: general.search
|
|
||||||
label: Search
|
|
||||||
parent: support
|
|
||||||
- id: warranty_search
|
|
||||||
acl: warranty.search
|
|
||||||
label: Customer Battery Search
|
|
||||||
parent: support
|
|
||||||
- id: privacy_policy_list
|
|
||||||
acl: privacy_policy.list
|
|
||||||
label: Privacy Policy
|
|
||||||
parent: support
|
|
||||||
- id: warranty_list
|
|
||||||
acl: warranty.list
|
|
||||||
label: Warranty
|
|
||||||
parent: support
|
|
||||||
- id: warranty_upload
|
|
||||||
acl: warranty.upload
|
|
||||||
label: Warranty Upload
|
|
||||||
parent: support
|
|
||||||
- id: static_content_list
|
|
||||||
acl: static_content.list
|
|
||||||
label: Static Content
|
|
||||||
parent: support
|
|
||||||
|
|
||||||
- id: service
|
|
||||||
acl: service.menu
|
|
||||||
label: Other Services
|
|
||||||
icon: flaticon-squares
|
|
||||||
- id: service_list
|
|
||||||
acl: service.list
|
|
||||||
label: Services
|
|
||||||
parent: service
|
|
||||||
|
|
||||||
- id: partner
|
|
||||||
acl: partner.menu
|
|
||||||
label: Partners
|
|
||||||
icon: flaticon-network
|
|
||||||
- id: partner_list
|
|
||||||
acl: partner.list
|
|
||||||
label: Partners
|
|
||||||
parent: partner
|
|
||||||
- id: review_list
|
|
||||||
acl: review.list
|
|
||||||
label: Reviews
|
|
||||||
parent: partner
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
||||||
# text
|
|
||||||
title_login: Motolite Res-Q | Login
|
|
||||||
block_title: Motolite Res-Q
|
|
||||||
control_panel_sign_in: Sign-in to Control Panel
|
|
||||||
alt_image_logo_login: Res-Q
|
|
||||||
alt_image_dashboard: Motolite
|
|
||||||
copyright: Motolite Res-Q
|
|
||||||
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'
|
|
||||||
delivery_instructions_label: Delivery Instructions
|
|
||||||
|
|
||||||
# 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
|
|
||||||
|
|
||||||
# default point for maps
|
|
||||||
default_lat: 14.6091
|
|
||||||
default_long: 121.0223
|
|
||||||
default_region: ph
|
|
||||||
|
|
@ -1,244 +0,0 @@
|
||||||
# Put parameters here that don't need to change on each machine where the app is deployed
|
|
||||||
# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
|
|
||||||
parameters:
|
|
||||||
map_default:
|
|
||||||
latitude: 14.6091
|
|
||||||
longitude: 121.0223
|
|
||||||
image_upload_directory: '%kernel.project_dir%/public/uploads'
|
|
||||||
job_order_refresh_interval: 300000
|
|
||||||
api_acl_file: 'api_acl.yaml'
|
|
||||||
api_access_key: 'api_access_keys'
|
|
||||||
app_acl_file: 'acl.yaml'
|
|
||||||
app_access_key: 'access_keys'
|
|
||||||
cvu_brand_id: "%env(CVU_BRAND_ID)%"
|
|
||||||
country_code: "%env(COUNTRY_CODE)%"
|
|
||||||
api_version: "%env(API_VERSION)%"
|
|
||||||
|
|
||||||
services:
|
|
||||||
# default configuration for services in *this* file
|
|
||||||
_defaults:
|
|
||||||
autowire: true # Automatically injects dependencies in your services.
|
|
||||||
autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
|
|
||||||
public: false # Allows optimizing the container by removing unused services; this also means
|
|
||||||
# fetching services directly from the container via $container->get() won't work.
|
|
||||||
# The best practice is to be explicit about your dependencies anyway.
|
|
||||||
|
|
||||||
# makes classes in src/ available to be used as services
|
|
||||||
# this creates a service per class whose id is the fully-qualified class name
|
|
||||||
App\:
|
|
||||||
resource: '../src/*'
|
|
||||||
exclude: '../src/{Entity,Migrations,Tests,Menu,Access}'
|
|
||||||
|
|
||||||
# controllers are imported separately to make sure services can be injected
|
|
||||||
# as action arguments even if you don't extend any base controller class
|
|
||||||
App\Controller\:
|
|
||||||
resource: '../src/Controller'
|
|
||||||
tags: ['controller.service_arguments']
|
|
||||||
|
|
||||||
# add more service definitions when explicit configuration is needed
|
|
||||||
# please note that last definitions always *replace* previous ones
|
|
||||||
App\Menu\Generator:
|
|
||||||
arguments:
|
|
||||||
$router: "@router.default"
|
|
||||||
$cache_dir: "%kernel.cache_dir%"
|
|
||||||
$config_dir: "%kernel.root_dir%/../config"
|
|
||||||
|
|
||||||
Catalyst\AuthBundle\Service\ACLGenerator:
|
|
||||||
arguments:
|
|
||||||
$router: "@router.default"
|
|
||||||
$cache_dir: "%kernel.cache_dir%"
|
|
||||||
$config_dir: "%kernel.root_dir%/../config"
|
|
||||||
$acl_file: "%app_acl_file%"
|
|
||||||
|
|
||||||
Catalyst\AuthBundle\Service\ACLVoter:
|
|
||||||
arguments:
|
|
||||||
$user_class: "App\\Entity\\User"
|
|
||||||
tags: ['security.voter']
|
|
||||||
|
|
||||||
Catalyst\AuthBundle\Service\UserChecker:
|
|
||||||
|
|
||||||
App\Service\FileUploader:
|
|
||||||
arguments:
|
|
||||||
$target_dir: '%image_upload_directory%'
|
|
||||||
|
|
||||||
App\Service\MapTools:
|
|
||||||
arguments:
|
|
||||||
$em: "@doctrine.orm.entity_manager"
|
|
||||||
$gmaps_api_key: "%env(GMAPS_API_KEY)%"
|
|
||||||
$cust_dist_limit: "%env(CUST_DISTANCE_LIMIT)%"
|
|
||||||
|
|
||||||
App\Service\RisingTideGateway:
|
|
||||||
arguments:
|
|
||||||
$em: "@doctrine.orm.entity_manager"
|
|
||||||
$user: "%env(RT_USER)%"
|
|
||||||
$pass: "%env(RT_PASS)%"
|
|
||||||
$usage_type: "%env(RT_USAGE_TYPE)%"
|
|
||||||
$shortcode: "%env(RT_SHORTCODE)%"
|
|
||||||
$dr_url: "https://resqaws.jankstudio.com/sms/delivery_receipt"
|
|
||||||
|
|
||||||
App\Service\MQTTClient:
|
|
||||||
arguments:
|
|
||||||
$redis_client: "@App\\Service\\RedisClientProvider"
|
|
||||||
$key: "mqtt_events"
|
|
||||||
|
|
||||||
App\Service\APNSClient:
|
|
||||||
arguments:
|
|
||||||
$redis_client: "@App\\Service\\RedisClientProvider"
|
|
||||||
|
|
||||||
App\Service\RedisClientProvider:
|
|
||||||
arguments:
|
|
||||||
$scheme: "%env(REDIS_CLIENT_SCHEME)%"
|
|
||||||
$host: "%env(REDIS_CLIENT_HOST)%"
|
|
||||||
$port: "%env(REDIS_CLIENT_PORT)%"
|
|
||||||
$password: "%env(REDIS_CLIENT_PASSWORD)%"
|
|
||||||
|
|
||||||
App\Service\GeofenceTracker:
|
|
||||||
arguments:
|
|
||||||
$geofence_flag: "%env(GEOFENCE_ENABLE)%"
|
|
||||||
|
|
||||||
App\Service\WarrantyHandler:
|
|
||||||
arguments:
|
|
||||||
$em: "@doctrine.orm.entity_manager"
|
|
||||||
|
|
||||||
App\Command\SetCustomerPrivacyPolicyCommand:
|
|
||||||
arguments:
|
|
||||||
$policy_promo: "%env(POLICY_PROMO)%"
|
|
||||||
$policy_third_party: "%env(POLICY_THIRD_PARTY)%"
|
|
||||||
$policy_mobile: "%env(POLICY_MOBILE)%"
|
|
||||||
|
|
||||||
App\Command\CreateCustomerFromWarrantyCommand:
|
|
||||||
arguments:
|
|
||||||
$cvu_mfg_id: "%env(CVU_MFG_ID)%"
|
|
||||||
$cvu_brand_id: "%env(CVU_BRAND_ID)%"
|
|
||||||
|
|
||||||
# rider tracker service
|
|
||||||
App\Service\RiderTracker:
|
|
||||||
arguments:
|
|
||||||
$redis_client: "@App\\Service\\RedisClientProvider"
|
|
||||||
|
|
||||||
Catalyst\APIBundle\Security\APIKeyUserProvider:
|
|
||||||
arguments:
|
|
||||||
$em: "@doctrine.orm.entity_manager"
|
|
||||||
|
|
||||||
Catalyst\APIBundle\Security\APIKeyAuthenticator:
|
|
||||||
arguments:
|
|
||||||
$em: "@doctrine.orm.entity_manager"
|
|
||||||
|
|
||||||
Catalyst\APIBundle\Command\UserCreateCommand:
|
|
||||||
arguments:
|
|
||||||
$em: "@doctrine.orm.entity_manager"
|
|
||||||
tags: ['console.command']
|
|
||||||
|
|
||||||
Catalyst\APIBundle\Command\TestCommand:
|
|
||||||
tags: ['console.command']
|
|
||||||
|
|
||||||
Catalyst\APIBundle\Command\TestAPICommand:
|
|
||||||
tags: ['console.command']
|
|
||||||
|
|
||||||
Catalyst\APIBundle\Access\Voter:
|
|
||||||
arguments:
|
|
||||||
$acl_gen: "@Catalyst\\APIBundle\\Access\\Generator"
|
|
||||||
$user_class: "Catalyst\\APIBundle\\Entity\\User"
|
|
||||||
tags: ['security.voter']
|
|
||||||
|
|
||||||
Catalyst\APIBundle\Access\Generator:
|
|
||||||
arguments:
|
|
||||||
$router: "@router.default"
|
|
||||||
$cache_dir: "%kernel.cache_dir%"
|
|
||||||
$config_dir: "%kernel.root_dir%/../config"
|
|
||||||
$acl_file: "%api_acl_file%"
|
|
||||||
|
|
||||||
Catalyst\MenuBundle\Menu\Generator:
|
|
||||||
arguments:
|
|
||||||
$router: "@router.default"
|
|
||||||
$cache_dir: "%kernel.cache_dir%"
|
|
||||||
$config_dir: "%kernel.root_dir%/../config"
|
|
||||||
|
|
||||||
Catalyst\MenuBundle\Listener\MenuAnnotationListener:
|
|
||||||
arguments:
|
|
||||||
$menu_name: "main_menu"
|
|
||||||
tags:
|
|
||||||
- { name: kernel.event_listener, event: kernel.controller, method: onKernelController }
|
|
||||||
|
|
||||||
# invoice generator
|
|
||||||
App\Service\InvoiceGenerator\ResqInvoiceGenerator: ~
|
|
||||||
|
|
||||||
# invoice generator interface
|
|
||||||
App\Service\InvoiceGeneratorInterface: "@App\\Service\\InvoiceGenerator\\ResqInvoiceGenerator"
|
|
||||||
|
|
||||||
# job order generator
|
|
||||||
App\Service\JobOrderHandler\ResqJobOrderHandler:
|
|
||||||
arguments:
|
|
||||||
$country_code: "%env(COUNTRY_CODE)%"
|
|
||||||
|
|
||||||
#job order generator interface
|
|
||||||
App\Service\JobOrderHandlerInterface: "@App\\Service\\JobOrderHandler\\ResqJobOrderHandler"
|
|
||||||
|
|
||||||
# customer generator
|
|
||||||
App\Service\CustomerHandler\ResqCustomerHandler:
|
|
||||||
arguments:
|
|
||||||
$country_code: "%env(COUNTRY_CODE)%"
|
|
||||||
|
|
||||||
# customer generator interface
|
|
||||||
App\Service\CustomerHandlerInterface: "@App\\Service\\CustomerHandler\\ResqCustomerHandler"
|
|
||||||
|
|
||||||
# rider assignment
|
|
||||||
App\Service\RiderAssignmentHandler\ResqRiderAssignmentHandler: ~
|
|
||||||
|
|
||||||
# rider assignment interface
|
|
||||||
App\Service\RiderAssignmentHandlerInterface: "@App\\Service\\RiderAssignmentHandler\\ResqRiderAssignmentHandler"
|
|
||||||
|
|
||||||
# rider API service
|
|
||||||
App\Service\RiderAPIHandler\ResqRiderAPIHandler:
|
|
||||||
arguments:
|
|
||||||
$country_code: "%env(COUNTRY_CODE)%"
|
|
||||||
|
|
||||||
App\Service\RiderAPIHandlerInterface: "@App\\Service\\RiderAPIHandler\\ResqRiderAPIHandler"
|
|
||||||
|
|
||||||
# map manager
|
|
||||||
#App\Service\GISManager\Bing: ~
|
|
||||||
App\Service\GISManager\OpenStreet: ~
|
|
||||||
#App\Service\GISManager\Google: ~
|
|
||||||
|
|
||||||
#App\Service\GISManagerInterface: "@App\\Service\\GISManager\\Bing"
|
|
||||||
App\Service\GISManagerInterface: "@App\\Service\\GISManager\\OpenStreet"
|
|
||||||
#App\Service\GISManagerInterface: "@App\\Service\\GISManager\\Google"
|
|
||||||
|
|
||||||
App\EventListener\JobOrderActiveCacheListener:
|
|
||||||
arguments:
|
|
||||||
$jo_cache: "@App\\Service\\JobOrderCache"
|
|
||||||
$mqtt: "@App\\Service\\MQTTClient"
|
|
||||||
tags:
|
|
||||||
- name: 'doctrine.orm.entity_listener'
|
|
||||||
event: 'postUpdate'
|
|
||||||
entity: 'App\Entity\JobOrder'
|
|
||||||
- name: 'doctrine.orm.entity_listener'
|
|
||||||
event: 'postRemove'
|
|
||||||
entity: 'App\Entity\JobOrder'
|
|
||||||
- name: 'doctrine.orm.entity_listener'
|
|
||||||
event: 'postPersist'
|
|
||||||
entity: 'App\Entity\JobOrder'
|
|
||||||
|
|
||||||
App\Service\JobOrderCache:
|
|
||||||
arguments:
|
|
||||||
$redis_prov: "@App\\Service\\RedisClientProvider"
|
|
||||||
$active_jo_key: "%env(LOCATION_JO_ACTIVE_KEY)%"
|
|
||||||
|
|
||||||
App\Service\RiderCache:
|
|
||||||
arguments:
|
|
||||||
$redis_prov: "@App\\Service\\RedisClientProvider"
|
|
||||||
$loc_key: "%env(LOCATION_RIDER_ACTIVE_KEY)%"
|
|
||||||
$status_key: "%env(STATUS_RIDER_KEY)%"
|
|
||||||
|
|
||||||
# inventory manager
|
|
||||||
App\Service\InventoryManager:
|
|
||||||
arguments:
|
|
||||||
$api_url: "%env(INVENTORY_API_URL)%"
|
|
||||||
$api_ocp_key: "%env(INVENTORY_API_OCP)%"
|
|
||||||
$api_auth_prefix: "%env(INVENTORY_API_AUTH_TOKEN_PREFIX)%"
|
|
||||||
$api_auth_token: "%env(INVENTORY_API_AUTH_TOKEN)%"
|
|
||||||
|
|
||||||
# API logging
|
|
||||||
App\EventSubscriber\LogSubscriber:
|
|
||||||
arguments:
|
|
||||||
$api_log_flag: "%env(API_LOGGING)%"
|
|
||||||
|
|
@ -1,55 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Command;
|
|
||||||
|
|
||||||
use Symfony\Component\Console\Command\Command;
|
|
||||||
use Symfony\Component\Console\Input\InputArgument;
|
|
||||||
use Symfony\Component\Console\Input\InputInterface;
|
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
|
||||||
|
|
||||||
use Symfony\Component\Filesystem\Exception\IOExceptionInterface;
|
|
||||||
use Symfony\Component\Filesystem\Filesystem;
|
|
||||||
|
|
||||||
class ConfigureResqCommand extends Command
|
|
||||||
{
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function configure()
|
|
||||||
{
|
|
||||||
$this->setName('resq:configure')
|
|
||||||
->setDescription('Copies the configuration files, depending on environment.')
|
|
||||||
->setHelp('Copies the configuration files, depending on environment.')
|
|
||||||
->addArgument('dir_name', InputArgument::REQUIRED, 'Name of source subdirectory.');
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function execute(InputInterface $input, OutputInterface $output)
|
|
||||||
{
|
|
||||||
$dir_name = $input->getArgument('dir_name');
|
|
||||||
|
|
||||||
$filesystem = new Filesystem();
|
|
||||||
$current_dir = getcwd();
|
|
||||||
|
|
||||||
$source_dir = $current_dir . '/resq_settings/' . $dir_name . '/';
|
|
||||||
$config_dir = $current_dir . '/config/';
|
|
||||||
$translations_dir = $current_dir . '/translations/';
|
|
||||||
|
|
||||||
// copy services.yaml file
|
|
||||||
error_log('Copying services.yaml file...');
|
|
||||||
$filesystem->copy($source_dir . 'services.yaml', $config_dir . 'services.yaml', true);
|
|
||||||
|
|
||||||
// copy menu.yaml file
|
|
||||||
error_log('Copying menu.yaml file...');
|
|
||||||
$filesystem->copy($source_dir . 'menu.yaml', $config_dir . 'menu.yaml', true);
|
|
||||||
|
|
||||||
// copy messages.en.yaml file
|
|
||||||
error_log('Copying messages.en.yaml file...');
|
|
||||||
$filesystem->copy($source_dir . 'messages.en.yaml', $translations_dir . 'messages.en.yaml', true);
|
|
||||||
|
|
||||||
error_log('Done copying files.');
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,173 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Command;
|
|
||||||
|
|
||||||
use Symfony\Component\Console\Command\Command;
|
|
||||||
use Symfony\Component\Console\Input\InputArgument;
|
|
||||||
use Symfony\Component\Console\Input\InputInterface;
|
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
|
||||||
|
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
|
||||||
|
|
||||||
use CrEOF\Spatial\PHP\Types\Geometry\Point;
|
|
||||||
|
|
||||||
use DateTime;
|
|
||||||
use DateInterval;
|
|
||||||
|
|
||||||
use App\Entity\JobOrder;
|
|
||||||
use App\Entity\Rider;
|
|
||||||
use App\Entity\CustomerVehicle;
|
|
||||||
use App\Entity\Invoice;
|
|
||||||
use App\Entity\InvoiceItem;
|
|
||||||
use App\Entity\Battery;
|
|
||||||
|
|
||||||
use App\Ramcar\CMBServiceType;
|
|
||||||
use App\Ramcar\TransactionOrigin;
|
|
||||||
use App\Ramcar\WarrantyClass;
|
|
||||||
use App\Ramcar\ModeOfPayment;
|
|
||||||
use App\Ramcar\JOStatus;
|
|
||||||
use App\Ramcar\InvoiceStatus;
|
|
||||||
|
|
||||||
class CreateJOTestDataCommand extends Command
|
|
||||||
{
|
|
||||||
protected $em;
|
|
||||||
|
|
||||||
public function __construct(EntityManagerInterface $em)
|
|
||||||
{
|
|
||||||
$this->em = $em;
|
|
||||||
|
|
||||||
parent::__construct();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function configure()
|
|
||||||
{
|
|
||||||
$this->setName('joborder:create_testdata')
|
|
||||||
->setDescription('Create JO test data, given a rider id.')
|
|
||||||
->setHelp('Create JO test data, given a rider id.')
|
|
||||||
->addArgument('rider_id', InputArgument::REQUIRED, 'Rider id.');
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function execute(InputInterface $input, OutputInterface $output)
|
|
||||||
{
|
|
||||||
$rider_id = $input->getArgument('rider_id');
|
|
||||||
|
|
||||||
$rider = $this->em->getRepository(Rider::class)->find($rider_id);
|
|
||||||
|
|
||||||
// get customer vehicles where plate number is not null
|
|
||||||
$cv_query = $this->em->createQuery('SELECT cv FROM App\Entity\CustomerVehicle cv WHERE cv.plate_number is not null');
|
|
||||||
$cv_results = $cv_query->getResult();
|
|
||||||
|
|
||||||
// get the first customer vehicle
|
|
||||||
$cv = current($cv_results);
|
|
||||||
|
|
||||||
// get batteries
|
|
||||||
$battery_results = $this->em->getRepository(Battery::class)->findAll();
|
|
||||||
|
|
||||||
// get the first battery
|
|
||||||
$battery = current($battery_results);
|
|
||||||
|
|
||||||
error_log($cv->getPlateNumber());
|
|
||||||
error_log($battery->getID());
|
|
||||||
|
|
||||||
if (empty($rider))
|
|
||||||
{
|
|
||||||
error_log('Rider not found.');
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// get current date
|
|
||||||
$current_date = new DateTime();
|
|
||||||
|
|
||||||
// for this month JO
|
|
||||||
$current_year = $current_date->format('Y');
|
|
||||||
$current_month = $current_date->format('M');
|
|
||||||
|
|
||||||
// for last month JO
|
|
||||||
$date_interval = new DateInterval('P1M');
|
|
||||||
$last_month_date = $current_date->sub($date_interval);
|
|
||||||
|
|
||||||
$last_month_year = $last_month_date->format('Y');
|
|
||||||
$last_month_month = $last_month_date->format('M');
|
|
||||||
|
|
||||||
$time_schedule = $current_date->format('h:i A');
|
|
||||||
|
|
||||||
$this->createJobOrders($rider, $cv, $battery, $last_month_year, $last_month_month, $time_schedule);
|
|
||||||
$this->createJobOrders($rider, $cv, $battery, $current_year, $current_month, $time_schedule);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function createJobOrders(Rider $rider, CustomerVehicle $cv, Battery $battery, $year, $month, $time)
|
|
||||||
{
|
|
||||||
// insert 15 JOs for last month
|
|
||||||
for ($i = 1; $i <= 15; $i++)
|
|
||||||
{
|
|
||||||
$jo = new JobOrder();
|
|
||||||
|
|
||||||
// set customer data
|
|
||||||
$jo->setCustomerVehicle($cv);
|
|
||||||
$jo->setCustomer($cv->getCustomer());
|
|
||||||
|
|
||||||
// set hub and rider data
|
|
||||||
$jo->setRider($rider);
|
|
||||||
$jo->setHub($rider->getHub());
|
|
||||||
|
|
||||||
// set JO details
|
|
||||||
$point = new Point(121.0223, 14.6091);
|
|
||||||
$s_type = CMBServiceType::BATTERY_REPLACEMENT_NEW;
|
|
||||||
$source = TransactionOrigin::CALL;
|
|
||||||
$advance_order = true;
|
|
||||||
$warranty_class = WarrantyClass::WTY_PRIVATE;
|
|
||||||
$status = JOStatus::FULFILLED;
|
|
||||||
$delivery_address = '#1234 Moogle Lane';
|
|
||||||
$mode_of_payment = ModeOfPayment::CASH;
|
|
||||||
|
|
||||||
// set invoice details
|
|
||||||
$invoice = new Invoice();
|
|
||||||
$invoice_item = new InvoiceItem();
|
|
||||||
|
|
||||||
// set invoice item details
|
|
||||||
$invoice_item->setBattery($battery)
|
|
||||||
->setTitle($battery->getModel()->getName() . ' ' . $battery->getSize()->getName())
|
|
||||||
->setQuantity(1)
|
|
||||||
->setPrice($battery->getSellingPrice())
|
|
||||||
->setInvoice($invoice);
|
|
||||||
|
|
||||||
$invoice->addItem($invoice_item);
|
|
||||||
|
|
||||||
$this->em->persist($invoice_item);
|
|
||||||
|
|
||||||
// set invoice details
|
|
||||||
$invoice->setTotalPrice($battery->getSellingPrice())
|
|
||||||
->setStatus(InvoiceStatus::DRAFT)
|
|
||||||
->setVATExclusivePrice($battery->getSellingPrice())
|
|
||||||
->setDiscount(0.0)
|
|
||||||
->setTradeIn(0.0)
|
|
||||||
->setVAT(0.00);
|
|
||||||
|
|
||||||
$this->em->persist($invoice);
|
|
||||||
|
|
||||||
$jo->setInvoice($invoice);
|
|
||||||
|
|
||||||
// for last month
|
|
||||||
$date_schedule_date = $i . ' ' . $month . ' ' . $year . ' ' . $time;
|
|
||||||
error_log('Adding JO with date schedule ' . $date_schedule_date);
|
|
||||||
$date_schedule = DateTime::createFromFormat("d M Y h:i A", $date_schedule_date);
|
|
||||||
|
|
||||||
$jo->setDateSchedule($date_schedule)
|
|
||||||
->setCoordinates($point)
|
|
||||||
->setAdvanceOrder($advance_order)
|
|
||||||
->setServiceType($s_type)
|
|
||||||
->setWarrantyClass($warranty_class)
|
|
||||||
->setSource($source)
|
|
||||||
->setStatus($status)
|
|
||||||
->setDeliveryAddress($delivery_address);
|
|
||||||
|
|
||||||
$this->em->persist($jo);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->em->flush();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,317 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Controller;
|
|
||||||
|
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
|
||||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
|
||||||
|
|
||||||
use App\Ramcar\NewAPIResult;
|
|
||||||
|
|
||||||
use App\Service\RiderAPIHandlerInterface;
|
|
||||||
|
|
||||||
// Rider API controller for CMB
|
|
||||||
class CMBRAPIController extends Controller
|
|
||||||
{
|
|
||||||
public function register(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->register($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function login(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->login($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function logout(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->logout($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getJobOrder(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->getJobOrder($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function acceptJobOrder(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->acceptJobOrder($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function cancelJobOrder(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->cancelJobOrder($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function arrive(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->arrive($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function performJobOrder(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->performJobOrder($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function hubArrive(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->hubArrive($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function payment(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->payment($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function available(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->available($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getPromos(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->getPromos($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getBatteries(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->getBatteries($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function changeService(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->changeService($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getJobOrderHistory(Request $req, $period, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->getJobOrderHistory($req, $period);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getAssignedJobOrders(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->getAssignedJobOrders($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setJobOrderInTransit(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->setJobOrderInTransit($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function generateInvoice(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->generateInvoice($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function goOnline(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->goOnline($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function goOffline(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->goOffline($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function startJobOrder(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->startJobOrder($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function completeJobOrder(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->completeJobOrder($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setActiveJobOrder(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->setActiveJobOrder($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function rejectJobOrder(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->rejectJobOrder($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setOdometer(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->setOdometer($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function uploadFinishPhotos(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->uploadFinishPhotos($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStatus(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->getStatus($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getOngoingJobOrder(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->getOngoingJobOrder($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getPaymentMethods(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->getPaymentMethods($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getCancelReasons(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->getCancelReasons($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function verifyJobOrder(Request $req, RiderAPIHandlerInterface $rapi_handler)
|
|
||||||
{
|
|
||||||
$data = $rapi_handler->verifyJobOrder($req);
|
|
||||||
|
|
||||||
$res = $this->generateResultFromHandler($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function generateResultFromHandler($data)
|
|
||||||
{
|
|
||||||
$res = new NewAPIResult();
|
|
||||||
|
|
||||||
if (isset($data['error']))
|
|
||||||
{
|
|
||||||
$message = $data['error'];
|
|
||||||
$title = $data['title'];
|
|
||||||
|
|
||||||
$res->setError(true)
|
|
||||||
->setErrorTitle($title)
|
|
||||||
->setErrorMessage($message);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$res->setData($data);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $res;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -58,10 +58,6 @@ class HomeController extends Controller
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// get full name of rider
|
|
||||||
$name = $rider->getFullName();
|
|
||||||
$riders[$rider_id]['name'] = $name;
|
|
||||||
|
|
||||||
$jo = $rider->getActiveJobOrder();
|
$jo = $rider->getActiveJobOrder();
|
||||||
if ($jo == null)
|
if ($jo == null)
|
||||||
$riders[$rider_id]['has_jo'] = false;
|
$riders[$rider_id]['has_jo'] = false;
|
||||||
|
|
|
||||||
|
|
@ -286,11 +286,6 @@ class JobOrderController extends Controller
|
||||||
$rows[$key]['meta']['edit_url'] = $this->generateUrl($jo_handler->getEditRoute($jo_id, $tier_params['edit_route']), ['id' => $jo_id]);
|
$rows[$key]['meta']['edit_url'] = $this->generateUrl($jo_handler->getEditRoute($jo_id, $tier_params['edit_route']), ['id' => $jo_id]);
|
||||||
$rows[$key]['meta']['onestep_edit_url'] = $this->generateUrl('jo_onestep_edit_form', ['id' => $jo_id]);
|
$rows[$key]['meta']['onestep_edit_url'] = $this->generateUrl('jo_onestep_edit_form', ['id' => $jo_id]);
|
||||||
}
|
}
|
||||||
else if ($tier == 'behind_schedule')
|
|
||||||
{
|
|
||||||
$rows[$key]['meta']['edit_url'] = $this->generateUrl($jo_handler->getEditRoute($jo_id, $tier_params['edit_route']), ['id' => $jo_id]);
|
|
||||||
$rows[$key]['meta']['onestep_edit_url'] = $this->generateUrl('jo_onestep_edit_form', ['id' => $jo_id]);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// $rows[$key]['meta']['update_url'] = $this->generateUrl($tier_params['edit_route'], ['id' => $jo_id]);
|
// $rows[$key]['meta']['update_url'] = $this->generateUrl($tier_params['edit_route'], ['id' => $jo_id]);
|
||||||
|
|
@ -769,10 +764,7 @@ class JobOrderController extends Controller
|
||||||
|
|
||||||
// use invoice object values in a json friendly array
|
// use invoice object values in a json friendly array
|
||||||
$invoice = [
|
$invoice = [
|
||||||
// TODO: CMB needs to have no decimal places for discount.
|
'discount' => number_format($iobj->getDiscount(), 2),
|
||||||
// Resq requires the two decimal places since discount is computed.
|
|
||||||
//'discount' => number_format($iobj->getDiscount(), 2),
|
|
||||||
'discount' => number_format($iobj->getDiscount(), 0),
|
|
||||||
'trade_in' => number_format($iobj->getTradeIn(), 2), // TODO: computations not done yet for this on invoice creator
|
'trade_in' => number_format($iobj->getTradeIn(), 2), // TODO: computations not done yet for this on invoice creator
|
||||||
'price' => number_format($iobj->getVATExclusivePrice(), 2),
|
'price' => number_format($iobj->getVATExclusivePrice(), 2),
|
||||||
'vat' => number_format($iobj->getVAT(), 2),
|
'vat' => number_format($iobj->getVAT(), 2),
|
||||||
|
|
@ -875,14 +867,14 @@ class JobOrderController extends Controller
|
||||||
return $this->render($template, $params);
|
return $this->render($template, $params);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function oneStepSubmit(Request $req, JobOrderHandlerInterface $jo_handler, MQTTClient $mclient)
|
public function oneStepSubmit(Request $req, JobOrderHandlerInterface $jo_handler)
|
||||||
{
|
{
|
||||||
$this->denyAccessUnlessGranted('jo_onestep.form', null, 'No access.');
|
$this->denyAccessUnlessGranted('jo_onestep.form', null, 'No access.');
|
||||||
|
|
||||||
// initialize error list
|
// initialize error list
|
||||||
$error_array = [];
|
$error_array = [];
|
||||||
$id = -1;
|
$id = -1;
|
||||||
$error_array = $jo_handler->processOneStepJobOrder($req, $id, $mclient);
|
$error_array = $jo_handler->processOneStepJobOrder($req, $id);
|
||||||
|
|
||||||
// check if any errors were found
|
// check if any errors were found
|
||||||
if (!empty($error_array)) {
|
if (!empty($error_array)) {
|
||||||
|
|
@ -921,12 +913,12 @@ class JobOrderController extends Controller
|
||||||
return $this->render($template, $params);
|
return $this->render($template, $params);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function oneStepEditSubmit(Request $req, JobOrderHandlerInterface $jo_handler, $id, MQTTClient $mclient)
|
public function oneStepEditSubmit(Request $req, JobOrderHandlerInterface $jo_handler, $id)
|
||||||
{
|
{
|
||||||
$this->denyAccessUnlessGranted('jo_onestep.edit', null, 'No access.');
|
$this->denyAccessUnlessGranted('jo_onestep.edit', null, 'No access.');
|
||||||
|
|
||||||
$error_array = [];
|
$error_array = [];
|
||||||
$error_array = $jo_handler->processOneStepJobOrder($req, $id, $mclient);
|
$error_array = $jo_handler->processOneStepJobOrder($req, $id);
|
||||||
|
|
||||||
// check if any errors were found
|
// check if any errors were found
|
||||||
if (!empty($error_array)) {
|
if (!empty($error_array)) {
|
||||||
|
|
@ -1217,21 +1209,6 @@ class JobOrderController extends Controller
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @Menu(selected="jo_behind_schedule")
|
|
||||||
*/
|
|
||||||
public function listBehindSchedule(JobOrderHandlerInterface $jo_handler)
|
|
||||||
{
|
|
||||||
$this->denyAccessUnlessGranted('jo_behind_schedule.list', null, 'No access.');
|
|
||||||
|
|
||||||
$template = $jo_handler->getTwigTemplate('jo_behind_schedule');
|
|
||||||
|
|
||||||
$params = $jo_handler->getOtherParameters();
|
|
||||||
$params['table_refresh_rate'] = $this->container->getParameter('job_order_refresh_interval');
|
|
||||||
|
|
||||||
return $this->render($template, $params);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function autoAssignHubAndRider($jo, EntityManagerInterface $em,
|
protected function autoAssignHubAndRider($jo, EntityManagerInterface $em,
|
||||||
MapTools $map_tools, InventoryManager $im)
|
MapTools $map_tools, InventoryManager $im)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -596,37 +596,4 @@ class RiderController extends Controller
|
||||||
|
|
||||||
return $this->redirecttoRoute('rider_update', ['id' => $rider->getID()]);
|
return $this->redirecttoRoute('rider_update', ['id' => $rider->getID()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @ParamConverter("rider", class="App\Entity\Rider")
|
|
||||||
*/
|
|
||||||
public function ajaxAvailable(EntityManagerInterface $em, Rider $rider)
|
|
||||||
{
|
|
||||||
$jo = $rider->getRiderActiveJobOrder();
|
|
||||||
if ($jo == null || $jo->isClosed())
|
|
||||||
$avail = 'available';
|
|
||||||
else
|
|
||||||
$avail = 'unavailable';
|
|
||||||
|
|
||||||
$response = new Response(
|
|
||||||
$avail,
|
|
||||||
Response::HTTP_OK,
|
|
||||||
['content-type' => 'text/plain']
|
|
||||||
);
|
|
||||||
return $response;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function ajaxRiderName(EntityManagerInterface $em, Request $req)
|
|
||||||
{
|
|
||||||
$rider_id = $req->query->get('id');
|
|
||||||
|
|
||||||
$rider = $em->getRepository(Rider::class)->find($rider_id);
|
|
||||||
$rider_name = '';
|
|
||||||
if ($rider != null)
|
|
||||||
$rider_name = $rider->getFullName();
|
|
||||||
|
|
||||||
return $this->json([
|
|
||||||
'rider_name' => $rider_name,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,140 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Entity;
|
|
||||||
|
|
||||||
use Doctrine\ORM\Mapping as ORM;
|
|
||||||
use Doctrine\Common\Collections\ArrayCollection;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @ORM\Entity
|
|
||||||
* @ORM\Table(name="jo_extra")
|
|
||||||
*/
|
|
||||||
class JOExtra
|
|
||||||
{
|
|
||||||
// unique id
|
|
||||||
/**
|
|
||||||
* @ORM\Id
|
|
||||||
* @ORM\Column(type="integer")
|
|
||||||
* @ORM\GeneratedValue(strategy="AUTO")
|
|
||||||
*/
|
|
||||||
protected $id;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @ORM\Column(type="string", nullable=true)
|
|
||||||
*/
|
|
||||||
protected $image_1_filename;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @ORM\Column(type="string", nullable=true)
|
|
||||||
*/
|
|
||||||
protected $image_2_filename;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @ORM\Column(type="string", nullable=true)
|
|
||||||
*/
|
|
||||||
protected $image_3_filename;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @ORM\Column(type="string", nullable=true)
|
|
||||||
*/
|
|
||||||
protected $image_4_filename;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @ORM\Column(type="array", nullable=true)
|
|
||||||
*/
|
|
||||||
protected $other_images;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @ORM\Column(type="string", nullable=true)
|
|
||||||
*/
|
|
||||||
protected $cust_signature;
|
|
||||||
|
|
||||||
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
$this->other_images = new ArrayCollection();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getID()
|
|
||||||
{
|
|
||||||
return $this->id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setImage1Filename($image_filename)
|
|
||||||
{
|
|
||||||
$this->image_1_filename = $image_filename;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getImage1Filename()
|
|
||||||
{
|
|
||||||
return $this->image_1_filename;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setImage2Filename($image_filename)
|
|
||||||
{
|
|
||||||
$this->image_2_filename = $image_filename;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getImage2Filename()
|
|
||||||
{
|
|
||||||
return $this->image_2_filename;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setImage3Filename($image_filename)
|
|
||||||
{
|
|
||||||
$this->image_3_filename = $image_filename;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getImage3Filename()
|
|
||||||
{
|
|
||||||
return $this->image_3_filename;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setImage4Filename($image_filename)
|
|
||||||
{
|
|
||||||
$this->image_4_filename = $image_filename;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getImage4Filename()
|
|
||||||
{
|
|
||||||
return $this->image_4_filename;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getOtherImages()
|
|
||||||
{
|
|
||||||
return $this->other_images;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setOtherImages(array $images)
|
|
||||||
{
|
|
||||||
$this->other_images = new ArrayCollection();
|
|
||||||
|
|
||||||
foreach ($images as $image_filename)
|
|
||||||
{
|
|
||||||
$this->other_images->add($image_filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function clearOtherImages()
|
|
||||||
{
|
|
||||||
$this->other_images = new ArrayCollection();
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setCustomerSignature($sig_file)
|
|
||||||
{
|
|
||||||
$this->cust_signature = $sig_file;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getCustomerSignature()
|
|
||||||
{
|
|
||||||
return $this->cust_signature;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -334,24 +334,6 @@ class JobOrder
|
||||||
*/
|
*/
|
||||||
protected $phone_mobile;
|
protected $phone_mobile;
|
||||||
|
|
||||||
// link to JOExtra
|
|
||||||
/**
|
|
||||||
* @ORM\OneToOne(targetEntity="JOExtra")
|
|
||||||
*/
|
|
||||||
protected $jo_extra;
|
|
||||||
|
|
||||||
// date that the status last changed
|
|
||||||
/**
|
|
||||||
* @ORM\Column(type="datetime", nullable=true)
|
|
||||||
*/
|
|
||||||
protected $date_status_change;
|
|
||||||
|
|
||||||
// insurer/responsible party handling the onsite job
|
|
||||||
/**
|
|
||||||
* @ORM\Column(type="string", length=80, nullable=true)
|
|
||||||
*/
|
|
||||||
protected $responsible_party;
|
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->date_create = new DateTime();
|
$this->date_create = new DateTime();
|
||||||
|
|
@ -601,7 +583,6 @@ class JobOrder
|
||||||
{
|
{
|
||||||
// TODO: validate status
|
// TODO: validate status
|
||||||
$this->status = $status;
|
$this->status = $status;
|
||||||
$this->date_status_change = new DateTime();
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -615,11 +596,6 @@ class JobOrder
|
||||||
return JOStatus::getName($this->status);
|
return JOStatus::getName($this->status);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getDateStatusChange()
|
|
||||||
{
|
|
||||||
return $this->date_status_change;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setDeliveryInstructions($delivery_instructions)
|
public function setDeliveryInstructions($delivery_instructions)
|
||||||
{
|
{
|
||||||
$this->delivery_instructions = $delivery_instructions;
|
$this->delivery_instructions = $delivery_instructions;
|
||||||
|
|
@ -820,11 +796,6 @@ class JobOrder
|
||||||
$this->makeRiderAvailable();
|
$this->makeRiderAvailable();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function perform()
|
|
||||||
{
|
|
||||||
$this->setStatus(JOStatus::PERFORMED);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function fulfill()
|
public function fulfill()
|
||||||
{
|
{
|
||||||
$this->setStatus(JOStatus::FULFILLED)
|
$this->setStatus(JOStatus::FULFILLED)
|
||||||
|
|
@ -991,26 +962,5 @@ class JobOrder
|
||||||
return $this->phone_mobile;
|
return $this->phone_mobile;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setJOExtra(JOExtra $jo_extra)
|
|
||||||
{
|
|
||||||
$this->jo_extra = $jo_extra;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getJOExtra()
|
|
||||||
{
|
|
||||||
return $this->jo_extra;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setResponsibleParty($responsible_party)
|
|
||||||
{
|
|
||||||
$this->responsible_party = $responsible_party;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getResponsibleParty()
|
|
||||||
{
|
|
||||||
return $this->responsible_party;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -347,11 +347,6 @@ class Rider
|
||||||
return $this->job_orders->matching($criteria)[0];
|
return $this->job_orders->matching($criteria)[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getRiderActiveJobOrder()
|
|
||||||
{
|
|
||||||
return $this->active_job_order;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getOpenJobOrders()
|
public function getOpenJobOrders()
|
||||||
{
|
{
|
||||||
$active_status = [
|
$active_status = [
|
||||||
|
|
|
||||||
|
|
@ -1,22 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Ramcar;
|
|
||||||
|
|
||||||
class CMBCancelReason extends NameValue
|
|
||||||
{
|
|
||||||
const ACCIDENT = 'accident';
|
|
||||||
const BREAKDOWN = 'breakdown';
|
|
||||||
const FUEL_RUNOUT = 'fuel_runout';
|
|
||||||
const WRONG_BATTERY_SIZE = 'wrong_battery_size';
|
|
||||||
const CUSTOMER_CANCEL = 'customer_cancel';
|
|
||||||
const OTHERS = 'others';
|
|
||||||
|
|
||||||
const COLLECTION = [
|
|
||||||
'accident' => 'Accident',
|
|
||||||
'breakdown' => 'Breakdown',
|
|
||||||
'fuel_runout' => 'Fuel Runout',
|
|
||||||
'wrong_battery_size' => 'Wrong Battery Size',
|
|
||||||
'customer_cancel' => 'Cancelled by Customer',
|
|
||||||
'others' => 'Others'
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
@ -1,42 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Ramcar;
|
|
||||||
|
|
||||||
class CMBJOEventType extends NameValue
|
|
||||||
{
|
|
||||||
const CREATE = 'create';
|
|
||||||
const HUB_ASSIGN = 'hub_assign';
|
|
||||||
const RIDER_ASSIGN = 'rider_assign';
|
|
||||||
const CANCEL = 'cancel';
|
|
||||||
const FULFILL = 'fulfill';
|
|
||||||
const OPEN_EDIT = 'open_edit';
|
|
||||||
const REQUEUE = 'requeue';
|
|
||||||
const RIDER_ACCEPT = 'accept';
|
|
||||||
const RIDER_IN_TRANSIT = 'rider_in_transit';
|
|
||||||
const RIDER_ARRIVE = 'arrive';
|
|
||||||
const RIDER_START = 'rider_start';
|
|
||||||
const RIDER_EDIT = 'rider_edit';
|
|
||||||
const PAID = 'paid';
|
|
||||||
const PERFORM = 'perform';
|
|
||||||
const RIDER_FINISH = 'finish';
|
|
||||||
const RIDER_UPLOAD_PHOTO = 'rider_upload_photo';
|
|
||||||
|
|
||||||
const COLLECTION = [
|
|
||||||
'create' => 'Created',
|
|
||||||
'hub_assign' => 'Assigned to Hub',
|
|
||||||
'rider_assign' => 'Assigned Rider',
|
|
||||||
'cancel' => 'Cancelled',
|
|
||||||
'fulfill' => 'Fulfilled',
|
|
||||||
'open_edit' => 'Open Edit',
|
|
||||||
'requeue' => 'Requeue',
|
|
||||||
'accept' => 'Rider Accept',
|
|
||||||
'rider_in_transit' => 'Rider in Transit',
|
|
||||||
'arrive' => 'Rider Arrive',
|
|
||||||
'rider_start' => 'Rider Start',
|
|
||||||
'rider_edit' => 'Rider Edit',
|
|
||||||
'paid' => 'Paid',
|
|
||||||
'perform' => 'Perform',
|
|
||||||
'finish' => 'Finish',
|
|
||||||
'rider_upload_photo' => 'Rider Upload Photo',
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
@ -5,18 +5,12 @@ namespace App\Ramcar;
|
||||||
class CMBModeOfPayment extends NameValue
|
class CMBModeOfPayment extends NameValue
|
||||||
{
|
{
|
||||||
const CASH = 'cash';
|
const CASH = 'cash';
|
||||||
const SHOPEE = 'shopee';
|
|
||||||
const LAZADA = 'lazada';
|
|
||||||
const CREDIT_CARD = 'credit_card';
|
const CREDIT_CARD = 'credit_card';
|
||||||
const ONLINE_TRANSFER = 'online_transfer';
|
const BANK_TRANSFER = 'bank_transfer';
|
||||||
const E_WALLET = 'e_wallet';
|
|
||||||
|
|
||||||
const COLLECTION = [
|
const COLLECTION = [
|
||||||
'cash' => 'Cash',
|
'cash' => 'Cash',
|
||||||
'shopee' => 'Shopee',
|
|
||||||
'lazada' => 'Lazada',
|
|
||||||
'credit_card' => 'Credit Card',
|
'credit_card' => 'Credit Card',
|
||||||
'online_transfer' => 'Online Transfer',
|
'bank_transfer' => 'Bank Transfer',
|
||||||
'e_wallet' => 'E-Wallet',
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Ramcar;
|
|
||||||
|
|
||||||
class CMBTransactionOrigin extends NameValue
|
|
||||||
{
|
|
||||||
const CALL = 'call';
|
|
||||||
const ONLINE = 'online';
|
|
||||||
const FACEBOOK = 'facebook';
|
|
||||||
const VIP = 'vip';
|
|
||||||
const MOBILE_APP = 'mobile_app';
|
|
||||||
const WALK_IN = 'walk_in';
|
|
||||||
const WHATSAPP = 'whatsapp';
|
|
||||||
|
|
||||||
// TODO: for now, resq also gets the walk-in option
|
|
||||||
const COLLECTION = [
|
|
||||||
'call' => 'Hotline',
|
|
||||||
'online' => 'Online',
|
|
||||||
'facebook' => 'Facebook',
|
|
||||||
'vip' => 'VIP',
|
|
||||||
'mobile_app' => 'Mobile App',
|
|
||||||
'walk_in' => 'Walk-in',
|
|
||||||
'whatsapp' => 'Whatsapp',
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
@ -4,15 +4,13 @@ namespace App\Ramcar;
|
||||||
|
|
||||||
class JOStatus extends NameValue
|
class JOStatus extends NameValue
|
||||||
{
|
{
|
||||||
const PENDING = 'pending'; // JO has no hub assigned
|
const PENDING = 'pending'; // NOTE: JO has no hub assigned
|
||||||
const RIDER_ASSIGN = 'rider_assign'; // JO has hub assigned but no rider assigned
|
const RIDER_ASSIGN = 'rider_assign'; // NOTE: JO has hub assigned but no rider assigned
|
||||||
const ASSIGNED = 'assigned'; // JO has hub and rider assigned
|
const ASSIGNED = 'assigned'; // NOTE: JO has hub and rider assigned
|
||||||
const IN_TRANSIT = 'in_transit'; // Rider is on his way
|
const IN_TRANSIT = 'in_transit'; // NOTE: JO's rider is on his way
|
||||||
const IN_PROGRESS = 'in_progress'; // Rider has arrived at customer's location and fulfillment is in progress
|
const IN_PROGRESS = 'in_progress'; // NOTE: JO fulfillment in progress
|
||||||
const PERFORMED = 'performed'; // Rider has finished performing JO task / service
|
const CANCELLED = 'cancelled'; // NOTE: JO is cancelled
|
||||||
const PAID = 'paid'; // Rider has finished collecting payment for JO
|
const FULFILLED = 'fulfilled'; // NOTE: JO is fulfilled
|
||||||
const CANCELLED = 'cancelled'; // JO is cancelled
|
|
||||||
const FULFILLED = 'fulfilled'; // JO is fulfilled
|
|
||||||
|
|
||||||
const COLLECTION = [
|
const COLLECTION = [
|
||||||
'pending' => 'For Dispatch',
|
'pending' => 'For Dispatch',
|
||||||
|
|
@ -20,8 +18,6 @@ class JOStatus extends NameValue
|
||||||
'assigned' => 'Assigned',
|
'assigned' => 'Assigned',
|
||||||
'in_transit' => 'In Transit',
|
'in_transit' => 'In Transit',
|
||||||
'in_progress' => 'In Progress',
|
'in_progress' => 'In Progress',
|
||||||
'performed' => 'Service Performed',
|
|
||||||
'paid' => 'Customer Paid',
|
|
||||||
'cancelled' => 'Cancelled',
|
'cancelled' => 'Cancelled',
|
||||||
'fulfilled' => 'Completed',
|
'fulfilled' => 'Completed',
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -1,92 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Ramcar;
|
|
||||||
|
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
|
||||||
|
|
||||||
class NewAPIResult
|
|
||||||
{
|
|
||||||
protected $err_title;
|
|
||||||
protected $err_flag;
|
|
||||||
protected $err_message;
|
|
||||||
protected $data;
|
|
||||||
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
$this->err_title = '';
|
|
||||||
$this->err_flag = false;
|
|
||||||
$this->err_message = '';
|
|
||||||
$this->data = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setError($flag = true)
|
|
||||||
{
|
|
||||||
$this->err_flag = $flag;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function isError()
|
|
||||||
{
|
|
||||||
return $this->err_flag;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setErrorMessage($message)
|
|
||||||
{
|
|
||||||
$this->err_message = $message;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getErrorMessage()
|
|
||||||
{
|
|
||||||
return $this->err_message;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setData($data)
|
|
||||||
{
|
|
||||||
$this->data = $data;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getData()
|
|
||||||
{
|
|
||||||
return $this->data;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setErrorTitle($title)
|
|
||||||
{
|
|
||||||
$this->err_title = $title;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getErrorTitle()
|
|
||||||
{
|
|
||||||
return $this->err_title;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function getReturnResponse()
|
|
||||||
{
|
|
||||||
if ($this->isError())
|
|
||||||
$status = 'error';
|
|
||||||
else
|
|
||||||
$status = 'success';
|
|
||||||
|
|
||||||
if (count($this->data) == 0)
|
|
||||||
$this->data = new \stdClass();
|
|
||||||
|
|
||||||
$return_data = [
|
|
||||||
'error' => [
|
|
||||||
'title' => $this->err_title,
|
|
||||||
'status' => $status,
|
|
||||||
'message' => $this->err_message
|
|
||||||
],
|
|
||||||
'data' => $this->data
|
|
||||||
];
|
|
||||||
|
|
||||||
// $json_data = json_encode($return_data, JSON_NUMERIC_CHECK);
|
|
||||||
$json_data = json_encode($return_data);
|
|
||||||
$json = new Response($json_data);
|
|
||||||
|
|
||||||
return $json;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -189,7 +189,7 @@ class CMBCustomerHandler implements CustomerHandlerInterface
|
||||||
$cust_vehicle = new CustomerVehicle();
|
$cust_vehicle = new CustomerVehicle();
|
||||||
$cust_vehicle->setName($vehicle->name)
|
$cust_vehicle->setName($vehicle->name)
|
||||||
->setVehicle($vobj)
|
->setVehicle($vobj)
|
||||||
->setPlateNumber(trim($vehicle->plate_number))
|
->setPlateNumber($vehicle->plate_number)
|
||||||
->setModelYear($vehicle->model_year)
|
->setModelYear($vehicle->model_year)
|
||||||
->setColor('')
|
->setColor('')
|
||||||
->setStatusCondition('')
|
->setStatusCondition('')
|
||||||
|
|
@ -416,14 +416,8 @@ class CMBCustomerHandler implements CustomerHandlerInterface
|
||||||
|
|
||||||
// add filters to count query
|
// add filters to count query
|
||||||
if (!empty($term)) {
|
if (!empty($term)) {
|
||||||
//$tquery->where('q.plate_number like :search')
|
$tquery->where('q.plate_number like :search')
|
||||||
// ->setParameter('search', $term . '%');
|
->setParameter('search', $term . '%');
|
||||||
// TODO: this is really slow. Need to optimize
|
|
||||||
$tquery->innerJoin('q.customer', 'c')
|
|
||||||
->where('q.plate_number like :search')
|
|
||||||
->orWhere('c.phone_mobile = :number')
|
|
||||||
->setParameter('search', $term . '%')
|
|
||||||
->setParameter('number', $term);
|
|
||||||
/*
|
/*
|
||||||
$tquery->where('match_against (q.plate_number, :search \'in boolean mode\') > 0.1')
|
$tquery->where('match_against (q.plate_number, :search \'in boolean mode\') > 0.1')
|
||||||
->setParameter('search', $term . '*');
|
->setParameter('search', $term . '*');
|
||||||
|
|
@ -454,14 +448,8 @@ class CMBCustomerHandler implements CustomerHandlerInterface
|
||||||
|
|
||||||
// add filters if needed
|
// add filters if needed
|
||||||
if (!empty($term)) {
|
if (!empty($term)) {
|
||||||
// TODO: this is really slow. Need to optimize
|
$query->where('q.plate_number like :search')
|
||||||
$query->innerJoin('q.customer', 'cust')
|
->setParameter('search', $term . '%');
|
||||||
->where('q.plate_number like :search')
|
|
||||||
->orWhere('cust.phone_mobile = :number')
|
|
||||||
->setParameter('search', $term . '%')
|
|
||||||
->setParameter('number', $term);
|
|
||||||
//$query->where('q.plate_number like :search')
|
|
||||||
// ->setParameter('search', $term . '%');
|
|
||||||
/*
|
/*
|
||||||
$query->where('match_against (q.plate_number, :search \'in boolean mode\') > 0.1')
|
$query->where('match_against (q.plate_number, :search \'in boolean mode\') > 0.1')
|
||||||
->setParameter('search', $term . '*');
|
->setParameter('search', $term . '*');
|
||||||
|
|
@ -606,7 +594,7 @@ class CMBCustomerHandler implements CustomerHandlerInterface
|
||||||
protected function generateYearOptions()
|
protected function generateYearOptions()
|
||||||
{
|
{
|
||||||
$start_year = 1950;
|
$start_year = 1950;
|
||||||
return range($start_year, date("Y"));
|
return range($start_year, date("Y") + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -270,7 +270,7 @@ class CMBInvoiceGenerator implements InvoiceGeneratorInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if discount is greater than 50 or negative number
|
// check if discount is greater than 50 or negative number
|
||||||
if (($discount > 60) || ($discount < 0))
|
if (($discount > 50) || ($discount < 0))
|
||||||
return 'Invalid discount specified';
|
return 'Invalid discount specified';
|
||||||
|
|
||||||
$criteria->setDiscount($discount);
|
$criteria->setDiscount($discount);
|
||||||
|
|
@ -363,10 +363,9 @@ class CMBInvoiceGenerator implements InvoiceGeneratorInterface
|
||||||
if (!isset($con_batts[$batt_id]))
|
if (!isset($con_batts[$batt_id]))
|
||||||
$con_batts[$batt->getID()] = [
|
$con_batts[$batt->getID()] = [
|
||||||
'batt' => $batt,
|
'batt' => $batt,
|
||||||
'qty' => $qty
|
'qty' => 0
|
||||||
];
|
];
|
||||||
else
|
$con_batts[$batt_id]['qty']++;
|
||||||
$con_batts[$batt_id]['qty'] += $qty;
|
|
||||||
|
|
||||||
|
|
||||||
// no trade-in
|
// no trade-in
|
||||||
|
|
|
||||||
|
|
@ -31,12 +31,12 @@ use App\Entity\ServiceCharge;
|
||||||
use App\Ramcar\InvoiceCriteria;
|
use App\Ramcar\InvoiceCriteria;
|
||||||
use App\Ramcar\CMBServiceType;
|
use App\Ramcar\CMBServiceType;
|
||||||
use App\Ramcar\CMBTradeInType;
|
use App\Ramcar\CMBTradeInType;
|
||||||
use App\Ramcar\CMBJOEventType;
|
use App\Ramcar\JOEventType;
|
||||||
use App\Ramcar\JOStatus;
|
use App\Ramcar\JOStatus;
|
||||||
use App\Ramcar\CMBWarrantyClass;
|
use App\Ramcar\CMBWarrantyClass;
|
||||||
use App\Ramcar\DiscountApply;
|
use App\Ramcar\DiscountApply;
|
||||||
use App\Ramcar\CMBModeOfPayment;
|
use App\Ramcar\CMBModeOfPayment;
|
||||||
use App\Ramcar\CMBTransactionOrigin;
|
use App\Ramcar\TransactionOrigin;
|
||||||
use App\Ramcar\FacilitatedType;
|
use App\Ramcar\FacilitatedType;
|
||||||
use App\Ramcar\JORejectionReason;
|
use App\Ramcar\JORejectionReason;
|
||||||
|
|
||||||
|
|
@ -177,35 +177,13 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
// get rider information
|
// get rider information
|
||||||
$rider_name = '';
|
$rider_name = '';
|
||||||
$rider_plate_number = '';
|
$rider_plate_number = '';
|
||||||
$rider_id = '';
|
|
||||||
$rider = $orow->getRider();
|
$rider = $orow->getRider();
|
||||||
if (!empty($rider))
|
if (!empty($rider))
|
||||||
{
|
{
|
||||||
$rider_id = $rider->getID();
|
|
||||||
$rider_name = $rider->getFullName();
|
$rider_name = $rider->getFullName();
|
||||||
$rider_plate_number = $rider->getPlateNumber();
|
$rider_plate_number = $rider->getPlateNumber();
|
||||||
}
|
}
|
||||||
|
|
||||||
// get time when JO was started by rider
|
|
||||||
$start_event_type = CMBJOEventType::RIDER_START;
|
|
||||||
$date_start = '';
|
|
||||||
$start_results = $this->em->getRepository(JOEvent::class)->findby(['type_id' => $start_event_type, 'rider' => $rider_id, 'job_order' => $orow->getID()], ['date_happen' => 'DESC']);
|
|
||||||
if ($start_results != null)
|
|
||||||
{
|
|
||||||
$jo_event = current($start_results);
|
|
||||||
$date_start = $jo_event->getDateHappen()->format('d M Y g:i A');
|
|
||||||
}
|
|
||||||
|
|
||||||
// get time when JO was finished by rider
|
|
||||||
$finish_event_type = CMBJOEventType::RIDER_FINISH;
|
|
||||||
$date_finish = '';
|
|
||||||
$finish_results = $this->em->getRepository(JOEvent::class)->findby(['type_id' => $finish_event_type, 'rider' => $rider_id, 'job_order' => $orow->getID()], ['date_happen' => 'DESC']);
|
|
||||||
if ($finish_results != null)
|
|
||||||
{
|
|
||||||
$jo_event = current($finish_results);
|
|
||||||
$date_finish = $jo_event->getDateHappen()->format('d M Y g:i A');
|
|
||||||
}
|
|
||||||
|
|
||||||
// add row data
|
// add row data
|
||||||
$row['id'] = $orow->getID();
|
$row['id'] = $orow->getID();
|
||||||
$row['customer_name'] = $orow->getCustomer()->getFirstName() . ' ' . $orow->getCustomer()->getLastName();
|
$row['customer_name'] = $orow->getCustomer()->getFirstName() . ' ' . $orow->getCustomer()->getLastName();
|
||||||
|
|
@ -216,12 +194,10 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
$row['status'] = $statuses[$orow->getStatus()];
|
$row['status'] = $statuses[$orow->getStatus()];
|
||||||
$row['flag_advance'] = $orow->isAdvanceOrder();
|
$row['flag_advance'] = $orow->isAdvanceOrder();
|
||||||
$row['plate_number'] = $orow->getCustomerVehicle()->getPlateNumber();
|
$row['plate_number'] = $orow->getCustomerVehicle()->getPlateNumber();
|
||||||
$row['is_mobile'] = $orow->getSource() == CMBTransactionOrigin::MOBILE_APP;
|
$row['is_mobile'] = $orow->getSource() == TransactionOrigin::MOBILE_APP;
|
||||||
$row['car_model'] = $car_model;
|
$row['car_model'] = $car_model;
|
||||||
$row['rider_name'] = $rider_name;
|
$row['rider_name'] = $rider_name;
|
||||||
$row['rider_plate_number'] = $rider_plate_number;
|
$row['rider_plate_number'] = $rider_plate_number;
|
||||||
$row['date_start'] = $date_start;
|
|
||||||
$row['date_finish'] = $date_finish;
|
|
||||||
|
|
||||||
$processor = $orow->getProcessedBy();
|
$processor = $orow->getProcessedBy();
|
||||||
if ($processor == null)
|
if ($processor == null)
|
||||||
|
|
@ -374,7 +350,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
->setTier2Notes($req->request->get('tier2_notes'))
|
->setTier2Notes($req->request->get('tier2_notes'))
|
||||||
->setDeliveryAddress($req->request->get('delivery_address'))
|
->setDeliveryAddress($req->request->get('delivery_address'))
|
||||||
->setORName($req->request->get('or_name'))
|
->setORName($req->request->get('or_name'))
|
||||||
->setPromoDetail($req->request->get('promo_detail', ''))
|
->setPromoDetail($req->request->get('promo_detail'))
|
||||||
->setModeOfPayment($req->request->get('mode_of_payment'))
|
->setModeOfPayment($req->request->get('mode_of_payment'))
|
||||||
->setLandmark($req->request->get('landmark'));
|
->setLandmark($req->request->get('landmark'));
|
||||||
|
|
||||||
|
|
@ -424,7 +400,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
// the event
|
// the event
|
||||||
$event = new JOEvent();
|
$event = new JOEvent();
|
||||||
$event->setDateHappen(new DateTime())
|
$event->setDateHappen(new DateTime())
|
||||||
->setTypeID(CMBJOEventType::CREATE)
|
->setTypeID(JOEventType::CREATE)
|
||||||
->setJobOrder($jo);
|
->setJobOrder($jo);
|
||||||
|
|
||||||
if ($user != null)
|
if ($user != null)
|
||||||
|
|
@ -440,7 +416,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
return $error_array;
|
return $error_array;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function processOneStepJobOrder(Request $req, $id, MQTTClient $mclient)
|
public function processOneStepJobOrder(Request $req, $id)
|
||||||
{
|
{
|
||||||
// initialize error list
|
// initialize error list
|
||||||
$error_array = [];
|
$error_array = [];
|
||||||
|
|
@ -448,17 +424,11 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
$em = $this->em;
|
$em = $this->em;
|
||||||
|
|
||||||
$jo = $em->getRepository(JobOrder::class)->find($id);
|
$jo = $em->getRepository(JobOrder::class)->find($id);
|
||||||
$old_jo_status = null;
|
|
||||||
if (empty($jo))
|
if (empty($jo))
|
||||||
{
|
{
|
||||||
// new job order
|
// new job order
|
||||||
$jo = new JobOrder();
|
$jo = new JobOrder();
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
//$old_rider = $jo->getRider();
|
|
||||||
$old_jo_status = $jo->getStatus();
|
|
||||||
}
|
|
||||||
|
|
||||||
// check if lat and lng are provided
|
// check if lat and lng are provided
|
||||||
if (empty($req->request->get('coord_lng')) || empty($req->request->get('coord_lat'))) {
|
if (empty($req->request->get('coord_lng')) || empty($req->request->get('coord_lat'))) {
|
||||||
|
|
@ -468,14 +438,19 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
// check if new customer
|
// check if new customer
|
||||||
if ($req->request->get('new_customer', false))
|
if ($req->request->get('new_customer', false))
|
||||||
{
|
{
|
||||||
|
if (empty($req->request->get('customer_customer_notes')))
|
||||||
|
{
|
||||||
|
$error_array['customer_customer_notes'] = 'Customer notes cannot be null.';
|
||||||
|
}
|
||||||
|
|
||||||
// validate mobile phone
|
// validate mobile phone
|
||||||
$valid_mobile = $this->cust_handler->validateMobileNumber($req->request->get('phone_mobile'));
|
$valid_mobile = $this->cust_handler->validateMobileNumber($req->request->get('customer_phone_mobile'));
|
||||||
if (!($valid_mobile))
|
if (!($valid_mobile))
|
||||||
$error_array['phone_mobile'] = 'Invalid mobile phone number.';
|
$error_array['customer_phone_mobile'] = 'Invalid mobile phone number.';
|
||||||
|
|
||||||
// check if plate number is in request
|
// check if plate number is in request
|
||||||
if (empty(trim($req->request->get('plate_number'))))
|
if (empty($req->request->get('cv_plate')))
|
||||||
$error_array['plate_number'] = 'Plate number is required.';
|
$error_array['cv_plate'] = 'Plate number is required.';
|
||||||
|
|
||||||
// find the vehicle using vid
|
// find the vehicle using vid
|
||||||
$new_vehicle = $em->getRepository(Vehicle::class)->find($req->request->get('vid'));
|
$new_vehicle = $em->getRepository(Vehicle::class)->find($req->request->get('vid'));
|
||||||
|
|
@ -489,17 +464,17 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
$new_cust = new Customer();
|
$new_cust = new Customer();
|
||||||
$new_cv = new CustomerVehicle();
|
$new_cv = new CustomerVehicle();
|
||||||
|
|
||||||
$new_cust->setLastName($req->request->get('last_name'))
|
$new_cust->setLastName($req->request->get('customer_last_name'))
|
||||||
->setFirstName($req->request->get('first_name'))
|
->setFirstName($req->request->get('customer_first_name'))
|
||||||
->setPhoneMobile($req->request->get('phone_mobile'))
|
->setPhoneMobile($req->request->get('customer_phone_mobile'))
|
||||||
->setPhoneLandline($req->request->get('phone_landline'))
|
->setPhoneLandline($req->request->get('customer_phone_landline'))
|
||||||
->setPhoneOffice($req->request->get('phone_office'))
|
->setPhoneOffice($req->request->get('customer_phone_office'))
|
||||||
->setPhoneFax($req->request->get('phone_fax'))
|
->setPhoneFax($req->request->get('customer_phone_fax'))
|
||||||
->setCustomerNotes($req->request->get('customer_notes'));
|
->setCustomerNotes($req->request->get('customer_customer_notes'));
|
||||||
|
|
||||||
$new_cv->setCustomer($new_cust)
|
$new_cv->setCustomer($new_cust)
|
||||||
->setVehicle($new_vehicle)
|
->setVehicle($new_vehicle)
|
||||||
->setPlateNumber(trim($req->request->get('plate_number')))
|
->setPlateNumber($req->request->get('cv_plate'))
|
||||||
->setModelYear($req->request->get('cv_year'))
|
->setModelYear($req->request->get('cv_year'))
|
||||||
->setColor('')
|
->setColor('')
|
||||||
->setStatusCondition('')
|
->setStatusCondition('')
|
||||||
|
|
@ -569,28 +544,11 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
|
|
||||||
if (empty($rider)) {
|
if (empty($rider)) {
|
||||||
$error_array['rider'] = 'Invalid rider specified.';
|
$error_array['rider'] = 'Invalid rider specified.';
|
||||||
} else {
|
|
||||||
// check if rider is still available
|
|
||||||
if (!($rider->isAvailable()))
|
|
||||||
$error_array['rider'] = 'Selected rider is unavailable.';
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// get discount and set to meta
|
|
||||||
$discount = $req->request->get('invoice_discount');
|
|
||||||
|
|
||||||
if (($discount > 60) || ($discount < 0))
|
|
||||||
{
|
|
||||||
$error_array['invoice_discount'] = 'Invalid discount specified';
|
|
||||||
}
|
|
||||||
|
|
||||||
// get list of service charges
|
|
||||||
$service_charges = $req->request->get('service_charges', []);
|
|
||||||
|
|
||||||
if (empty($error_array))
|
|
||||||
{
|
|
||||||
// set priority based on rider's existing open job orders
|
// set priority based on rider's existing open job orders
|
||||||
$rider_jos = $rider->getOpenJobOrders();
|
$rider_jos = $rider->getOpenJobOrders();
|
||||||
|
|
||||||
|
|
@ -604,6 +562,18 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
$priority = $rider_jo->getPriority() + 1;
|
$priority = $rider_jo->getPriority() + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get discount and set to meta
|
||||||
|
$discount = $req->request->get('invoice_discount', []);
|
||||||
|
|
||||||
|
// check if discount is greater than 50 or negative number
|
||||||
|
if (($discount > 50) || ($discount < 0))
|
||||||
|
$error_array['invoice_discount'] = 'Invalid discount specified';
|
||||||
|
|
||||||
|
// get list of service charges
|
||||||
|
$service_charges = $req->request->get('service_charges', []);
|
||||||
|
|
||||||
|
if (empty($error_array))
|
||||||
|
{
|
||||||
// get current user
|
// get current user
|
||||||
$user = $this->security->getUser();
|
$user = $this->security->getUser();
|
||||||
|
|
||||||
|
|
@ -619,31 +589,22 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
->setServiceType($stype)
|
->setServiceType($stype)
|
||||||
->setWarrantyClass($req->request->get('warranty_class'))
|
->setWarrantyClass($req->request->get('warranty_class'))
|
||||||
->setSource($req->request->get('source'))
|
->setSource($req->request->get('source'))
|
||||||
|
->setStatus(JOStatus::ASSIGNED)
|
||||||
->setDeliveryInstructions($req->request->get('delivery_instructions'))
|
->setDeliveryInstructions($req->request->get('delivery_instructions'))
|
||||||
->setTier1Notes($req->request->get('tier1_notes'))
|
->setTier1Notes($req->request->get('tier1_notes'))
|
||||||
->setTier2Notes($req->request->get('tier2_notes'))
|
->setTier2Notes($req->request->get('tier2_notes'))
|
||||||
->setDeliveryAddress($req->request->get('delivery_address'))
|
->setDeliveryAddress($req->request->get('delivery_address'))
|
||||||
->setORName($req->request->get('or_name'))
|
->setORName($req->request->get('or_name'))
|
||||||
->setPromoDetail($req->request->get('promo_detail', ''))
|
->setPromoDetail($req->request->get('promo_detail'))
|
||||||
->setModeOfPayment($req->request->get('mode_of_payment'))
|
->setModeOfPayment($req->request->get('mode_of_payment'))
|
||||||
->setLandmark($req->request->get('landmark'))
|
->setLandmark($req->request->get('landmark'))
|
||||||
->setHub($hub)
|
->setHub($hub)
|
||||||
->setRider($rider)
|
->setRider($rider)
|
||||||
->setPriority($priority)
|
->setPriority($priority);
|
||||||
->setResponsibleParty($req->request->get('responsible_party', ''));
|
|
||||||
|
|
||||||
$jo->addMeta('discount', $discount);
|
$jo->addMeta('discount', $discount);
|
||||||
$jo->addMeta('service_charges', $service_charges);
|
$jo->addMeta('service_charges', $service_charges);
|
||||||
|
|
||||||
// TODO: what happens if hub and rider are changed
|
|
||||||
// and JO is already in_transit or in_progress?
|
|
||||||
|
|
||||||
// retain old jo status if it's an update JO
|
|
||||||
if ($old_jo_status != null)
|
|
||||||
$jo->setStatus($old_jo_status);
|
|
||||||
else
|
|
||||||
$jo->setStatus(JOStatus::ASSIGNED);
|
|
||||||
|
|
||||||
// check if user is null, meaning call to create came from API
|
// check if user is null, meaning call to create came from API
|
||||||
if ($user != null)
|
if ($user != null)
|
||||||
{
|
{
|
||||||
|
|
@ -690,7 +651,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
// the event
|
// the event
|
||||||
$event = new JOEvent();
|
$event = new JOEvent();
|
||||||
$event->setDateHappen(new DateTime())
|
$event->setDateHappen(new DateTime())
|
||||||
->setTypeID(CMBJOEventType::CREATE)
|
->setTypeID(JOEventType::CREATE)
|
||||||
->setJobOrder($jo);
|
->setJobOrder($jo);
|
||||||
|
|
||||||
if ($user != null)
|
if ($user != null)
|
||||||
|
|
@ -700,21 +661,6 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
|
|
||||||
$em->persist($event);
|
$em->persist($event);
|
||||||
$em->flush();
|
$em->flush();
|
||||||
|
|
||||||
// check if JO has been reassigned
|
|
||||||
//if ($old_rider != $rider)
|
|
||||||
if ($old_jo_status != $jo->getStatus())
|
|
||||||
{
|
|
||||||
error_log('JO has been reassigned');
|
|
||||||
// TODO: refactor later
|
|
||||||
$channel = 'rider/' . $rider->getID() . '/events';
|
|
||||||
$payload = [
|
|
||||||
'event' => 'new_jo',
|
|
||||||
'jo_id' => $jo->getID(),
|
|
||||||
];
|
|
||||||
|
|
||||||
$mclient->publish($channel, json_encode($payload));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -829,7 +775,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
// the event
|
// the event
|
||||||
$event = new JOEvent();
|
$event = new JOEvent();
|
||||||
$event->setDateHappen(new DateTime())
|
$event->setDateHappen(new DateTime())
|
||||||
->setTypeID(CMBJOEventType::HUB_ASSIGN)
|
->setTypeID(JOEventType::HUB_ASSIGN)
|
||||||
->setJobOrder($obj);
|
->setJobOrder($obj);
|
||||||
|
|
||||||
if ($user != null)
|
if ($user != null)
|
||||||
|
|
@ -928,7 +874,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
// the event
|
// the event
|
||||||
$event = new JOEvent();
|
$event = new JOEvent();
|
||||||
$event->setDateHappen(new DateTime())
|
$event->setDateHappen(new DateTime())
|
||||||
->setTypeID(CMBJOEventType::RIDER_ASSIGN)
|
->setTypeID(JOEventType::RIDER_ASSIGN)
|
||||||
->setJobOrder($obj);
|
->setJobOrder($obj);
|
||||||
|
|
||||||
if ($user != null)
|
if ($user != null)
|
||||||
|
|
@ -999,7 +945,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
// the event
|
// the event
|
||||||
$event = new JOEvent();
|
$event = new JOEvent();
|
||||||
$event->setDateHappen(new DateTime())
|
$event->setDateHappen(new DateTime())
|
||||||
->setTypeID(CMBJOEventType::FULFILL)
|
->setTypeID(JOEventType::FULFILL)
|
||||||
->setJobOrder($obj);
|
->setJobOrder($obj);
|
||||||
|
|
||||||
// get current user
|
// get current user
|
||||||
|
|
@ -1097,7 +1043,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
// the event
|
// the event
|
||||||
$event = new JOEvent();
|
$event = new JOEvent();
|
||||||
$event->setDateHappen(new DateTime())
|
$event->setDateHappen(new DateTime())
|
||||||
->setTypeID(CMBJOEventType::CANCEL)
|
->setTypeID(JOEventType::CANCEL)
|
||||||
->setJobOrder($obj);
|
->setJobOrder($obj);
|
||||||
|
|
||||||
// get current user
|
// get current user
|
||||||
|
|
@ -1207,7 +1153,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
// add event
|
// add event
|
||||||
$event = new JOEvent();
|
$event = new JOEvent();
|
||||||
$event->setDateHappen(new DateTime())
|
$event->setDateHappen(new DateTime())
|
||||||
->setTypeID(CMBJOEventType::HUB_ASSIGN)
|
->setTypeID(JOEventType::HUB_ASSIGN)
|
||||||
->setJobOrder($obj);
|
->setJobOrder($obj);
|
||||||
|
|
||||||
if ($user != null)
|
if ($user != null)
|
||||||
|
|
@ -1407,7 +1353,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
// add event
|
// add event
|
||||||
$event = new JOEvent();
|
$event = new JOEvent();
|
||||||
$event->setDateHappen(new DateTime())
|
$event->setDateHappen(new DateTime())
|
||||||
->setTypeID(CMBJOEventType::RIDER_ASSIGN)
|
->setTypeID(JOEventType::RIDER_ASSIGN)
|
||||||
->setJobOrder($obj);
|
->setJobOrder($obj);
|
||||||
|
|
||||||
if ($user != null)
|
if ($user != null)
|
||||||
|
|
@ -1479,19 +1425,9 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
|
|
||||||
public function initializeOneStepForm()
|
public function initializeOneStepForm()
|
||||||
{
|
{
|
||||||
$new_jo = new JobOrder();
|
$params['obj'] = new JobOrder();
|
||||||
|
|
||||||
// set time schedule
|
|
||||||
$date_schedule = new DateTime();
|
|
||||||
|
|
||||||
// add 45 minutes to time
|
|
||||||
$date_schedule->add(new DateInterval('PT45M'));
|
|
||||||
$new_jo->setDateSchedule($date_schedule);
|
|
||||||
|
|
||||||
$params['obj'] = $new_jo;
|
|
||||||
$params['mode'] = 'onestep';
|
$params['mode'] = 'onestep';
|
||||||
$params['jo_service_charges'] = [];
|
$params['jo_service_charges'] = [];
|
||||||
$params['current_date'] = new DateTime();
|
|
||||||
|
|
||||||
$this->fillDropdownParameters($params);
|
$this->fillDropdownParameters($params);
|
||||||
$this->fillFormTags($params);
|
$this->fillFormTags($params);
|
||||||
|
|
@ -1512,7 +1448,6 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
$params['mode'] = 'onestep-edit';
|
$params['mode'] = 'onestep-edit';
|
||||||
$params['cvid'] = $obj->getCustomerVehicle()->getID();
|
$params['cvid'] = $obj->getCustomerVehicle()->getID();
|
||||||
$params['vid'] = $obj->getCustomerVehicle()->getVehicle()->getID();
|
$params['vid'] = $obj->getCustomerVehicle()->getVehicle()->getID();
|
||||||
$params['current_date'] = new DateTime();
|
|
||||||
|
|
||||||
// get service charges
|
// get service charges
|
||||||
$sc_array = [];
|
$sc_array = [];
|
||||||
|
|
@ -1530,53 +1465,6 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
|
|
||||||
$params['jo_service_charges'] = $sc_array;
|
$params['jo_service_charges'] = $sc_array;
|
||||||
|
|
||||||
// get odometer
|
|
||||||
$odometer = $obj->getMeta('odometer');
|
|
||||||
|
|
||||||
$params['odometer'] = $odometer;
|
|
||||||
|
|
||||||
// get customer email used in JO
|
|
||||||
$email = $obj->getMeta('customer_email');
|
|
||||||
|
|
||||||
$params['email'] = $email;
|
|
||||||
|
|
||||||
// get images if any
|
|
||||||
$jo_extra = $obj->getJOExtra();
|
|
||||||
$pic_array = [];
|
|
||||||
$params['signature'] = null;
|
|
||||||
if ($jo_extra != null)
|
|
||||||
{
|
|
||||||
$img_1 = $jo_extra->getImage1Filename();
|
|
||||||
$img_2 = $jo_extra->getImage2Filename();
|
|
||||||
$img_3 = $jo_extra->getImage3Filename();
|
|
||||||
$img_4 = $jo_extra->getImage4Filename();
|
|
||||||
|
|
||||||
$other_images = $jo_extra->getOtherImages();
|
|
||||||
|
|
||||||
$cust_signature = $jo_extra->getCustomerSignature();
|
|
||||||
|
|
||||||
if ($img_1 != null)
|
|
||||||
$pic_array['image_1'] = $img_1;
|
|
||||||
if ($img_2 != null)
|
|
||||||
$pic_array['image_2'] = $img_2;
|
|
||||||
if ($img_3 != null)
|
|
||||||
$pic_array['image_3'] = $img_3;
|
|
||||||
if ($img_4 != null)
|
|
||||||
$pic_array['image_4'] = $img_4;
|
|
||||||
|
|
||||||
if ($other_images != null)
|
|
||||||
{
|
|
||||||
foreach ($other_images as $img)
|
|
||||||
{
|
|
||||||
$pic_array['other_images'][] = $img;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$params['signature'] = $cust_signature;
|
|
||||||
}
|
|
||||||
|
|
||||||
$params['jo_pictures'] = $pic_array;
|
|
||||||
|
|
||||||
$this->fillDropdownParameters($params);
|
$this->fillDropdownParameters($params);
|
||||||
$this->fillFormTags($params);
|
$this->fillFormTags($params);
|
||||||
|
|
||||||
|
|
@ -1699,7 +1587,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
|
|
||||||
// get template to display
|
// get template to display
|
||||||
// check transaction origin if walkin
|
// check transaction origin if walkin
|
||||||
if ($obj->getSource() == CMBTransactionOrigin::WALK_IN)
|
if ($obj->getSource() == TransactionOrigin::WALK_IN)
|
||||||
$params['template'] = $this->getTwigTemplate('jo_walkin_form');
|
$params['template'] = $this->getTwigTemplate('jo_walkin_form');
|
||||||
else
|
else
|
||||||
$params['template'] = $this->getTwigTemplate('jo_onestep_form');
|
$params['template'] = $this->getTwigTemplate('jo_onestep_form');
|
||||||
|
|
@ -2539,19 +2427,8 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
|
|
||||||
public function initializeWalkinForm()
|
public function initializeWalkinForm()
|
||||||
{
|
{
|
||||||
$new_jo = new JobOrder();
|
$params['obj'] = new JobOrder();
|
||||||
|
|
||||||
// set time schedule
|
|
||||||
$date_schedule = new DateTime();
|
|
||||||
|
|
||||||
// add 45 minutes to time
|
|
||||||
$date_schedule->add(new DateInterval('PT45M'));
|
|
||||||
$new_jo->setDateSchedule($date_schedule);
|
|
||||||
|
|
||||||
$params['obj'] = $new_jo;
|
|
||||||
$params['mode'] = 'walk-in';
|
$params['mode'] = 'walk-in';
|
||||||
$params['discounts'] = $this->generateDiscountOptions();
|
|
||||||
$params['current_date'] = new DateTime();
|
|
||||||
|
|
||||||
$this->fillDropdownParameters($params);
|
$this->fillDropdownParameters($params);
|
||||||
$this->fillFormTags($params);
|
$this->fillFormTags($params);
|
||||||
|
|
@ -2580,14 +2457,19 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
// check if new customer
|
// check if new customer
|
||||||
if ($req->request->get('new_customer', false))
|
if ($req->request->get('new_customer', false))
|
||||||
{
|
{
|
||||||
|
if (empty($req->request->get('customer_customer_notes')))
|
||||||
|
{
|
||||||
|
$error_array['customer_customer_notes'] = 'Customer notes cannot be null.';
|
||||||
|
}
|
||||||
|
|
||||||
// validate mobile phone
|
// validate mobile phone
|
||||||
$valid_mobile = $this->cust_handler->validateMobileNumber($req->request->get('phone_mobile'));
|
$valid_mobile = $this->cust_handler->validateMobileNumber($req->request->get('customer_phone_mobile'));
|
||||||
if (!($valid_mobile))
|
if (!($valid_mobile))
|
||||||
$error_array['phone_mobile'] = 'Invalid mobile phone number.';
|
$error_array['customer_phone_mobile'] = 'Invalid mobile phone number.';
|
||||||
|
|
||||||
// check if plate number is in request
|
// check if plate number is in request
|
||||||
if (empty(trim($req->request->get('plate_number'))))
|
if (empty($req->request->get('cv_plate')))
|
||||||
$error_array['plate_number'] = 'Plate number is required.';
|
$error_array['cv_plate'] = 'Plate number is required.';
|
||||||
|
|
||||||
// find the vehicle using vid
|
// find the vehicle using vid
|
||||||
$new_vehicle = $em->getRepository(Vehicle::class)->find($req->request->get('vid'));
|
$new_vehicle = $em->getRepository(Vehicle::class)->find($req->request->get('vid'));
|
||||||
|
|
@ -2602,17 +2484,17 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
$new_cust = new Customer();
|
$new_cust = new Customer();
|
||||||
$new_cv = new CustomerVehicle();
|
$new_cv = new CustomerVehicle();
|
||||||
|
|
||||||
$new_cust->setLastName($req->request->get('last_name'))
|
$new_cust->setLastName($req->request->get('customer_last_name'))
|
||||||
->setFirstName($req->request->get('first_name'))
|
->setFirstName($req->request->get('customer_first_name'))
|
||||||
->setPhoneMobile($req->request->get('phone_mobile'))
|
->setPhoneMobile($req->request->get('customer_phone_mobile'))
|
||||||
->setPhoneLandline($req->request->get('phone_landline'))
|
->setPhoneLandline($req->request->get('customer_phone_landline'))
|
||||||
->setPhoneOffice($req->request->get('phone_office'))
|
->setPhoneOffice($req->request->get('customer_phone_office'))
|
||||||
->setPhoneFax($req->request->get('phone_fax'))
|
->setPhoneFax($req->request->get('customer_phone_fax'))
|
||||||
->setCustomerNotes($req->request->get('customer_notes'));
|
->setCustomerNotes($req->request->get('customer_customer_notes'));
|
||||||
|
|
||||||
$new_cv->setCustomer($new_cust)
|
$new_cv->setCustomer($new_cust)
|
||||||
->setVehicle($new_vehicle)
|
->setVehicle($new_vehicle)
|
||||||
->setPlateNumber(trim($req->request->get('plate_number')))
|
->setPlateNumber($req->request->get('cv_plate'))
|
||||||
->setModelYear($req->request->get('cv_year'))
|
->setModelYear($req->request->get('cv_year'))
|
||||||
->setColor('')
|
->setColor('')
|
||||||
->setStatusCondition('')
|
->setStatusCondition('')
|
||||||
|
|
@ -2681,8 +2563,8 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
// get discount and set to meta
|
// get discount and set to meta
|
||||||
$discount = $req->request->get('invoice_discount');
|
$discount = $req->request->get('invoice_discount');
|
||||||
|
|
||||||
// check if discount is greater than 60 or negative number
|
// check if discount is greater than 50 or negative number
|
||||||
if (($discount > 60) || ($discount < 0))
|
if (($discount > 50) || ($discount < 0))
|
||||||
$error_array['invoice_discount'] = 'Invalid discount specified';
|
$error_array['invoice_discount'] = 'Invalid discount specified';
|
||||||
|
|
||||||
if (empty($error_array))
|
if (empty($error_array))
|
||||||
|
|
@ -2702,14 +2584,13 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
->setTier1Notes($req->request->get('tier1_notes'))
|
->setTier1Notes($req->request->get('tier1_notes'))
|
||||||
->setTier2Notes($req->request->get('tier2_notes'))
|
->setTier2Notes($req->request->get('tier2_notes'))
|
||||||
->setORName($req->request->get('or_name'))
|
->setORName($req->request->get('or_name'))
|
||||||
->setPromoDetail($req->request->get('promo_detail', ''))
|
->setPromoDetail($req->request->get('promo_detail'))
|
||||||
->setModeOfPayment($req->request->get('mode_of_payment'))
|
->setModeOfPayment($req->request->get('mode_of_payment'))
|
||||||
->setLandmark($req->request->get('landmark'))
|
->setLandmark($req->request->get('landmark'))
|
||||||
->setDeliveryAddress('Walk-in')
|
->setDeliveryAddress('Walk-in')
|
||||||
->setLandmark('Walk-in')
|
->setLandmark('Walk-in')
|
||||||
->setCoordinates($hub_coordinates)
|
->setCoordinates($hub_coordinates)
|
||||||
->setHub($hub)
|
->setHub($hub);
|
||||||
->setResponsibleParty($req->request->get('responsible_party', ''));
|
|
||||||
|
|
||||||
$jo->addMeta('discount', $discount);
|
$jo->addMeta('discount', $discount);
|
||||||
|
|
||||||
|
|
@ -2759,7 +2640,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
// the event
|
// the event
|
||||||
$event = new JOEvent();
|
$event = new JOEvent();
|
||||||
$event->setDateHappen(new DateTime())
|
$event->setDateHappen(new DateTime())
|
||||||
->setTypeID(CMBJOEventType::CREATE)
|
->setTypeID(JOEventType::CREATE)
|
||||||
->setJobOrder($jo);
|
->setJobOrder($jo);
|
||||||
|
|
||||||
if ($user != null)
|
if ($user != null)
|
||||||
|
|
@ -2838,7 +2719,6 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
$params['mode'] = 'walk-in-edit';
|
$params['mode'] = 'walk-in-edit';
|
||||||
$params['cvid'] = $obj->getCustomerVehicle()->getID();
|
$params['cvid'] = $obj->getCustomerVehicle()->getID();
|
||||||
$params['vid'] = $obj->getCustomerVehicle()->getVehicle()->getID();
|
$params['vid'] = $obj->getCustomerVehicle()->getVehicle()->getID();
|
||||||
$params['current_date'] = new DateTime();
|
|
||||||
|
|
||||||
$this->fillDropdownParameters($params);
|
$this->fillDropdownParameters($params);
|
||||||
$this->fillFormTags($params);
|
$this->fillFormTags($params);
|
||||||
|
|
@ -2876,10 +2756,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
$params['trade_in_types'] = CMBTradeInType::getCollection();
|
$params['trade_in_types'] = CMBTradeInType::getCollection();
|
||||||
$params['facilitated_types'] = FacilitatedType::getCollection();
|
$params['facilitated_types'] = FacilitatedType::getCollection();
|
||||||
$params['facilitated_hubs'] = $fac_hubs;
|
$params['facilitated_hubs'] = $fac_hubs;
|
||||||
$params['sources'] = CMBTransactionOrigin::getCollection();
|
$params['sources'] = TransactionOrigin::getCollection();
|
||||||
|
|
||||||
$params['model_years'] = $this->generateYearOptions();
|
|
||||||
$params['discounts'] = $this->generateDiscountOptions();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function initFormTags(&$params)
|
protected function initFormTags(&$params)
|
||||||
|
|
@ -2966,7 +2843,6 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
$this->template_hash['jo_walkin_form'] = 'job-order/cmb.form.walkin.html.twig';
|
$this->template_hash['jo_walkin_form'] = 'job-order/cmb.form.walkin.html.twig';
|
||||||
$this->template_hash['jo_walkin_edit_form'] = 'job-order/cmb.form.walkin.html.twig';
|
$this->template_hash['jo_walkin_edit_form'] = 'job-order/cmb.form.walkin.html.twig';
|
||||||
$this->template_hash['jo_popup'] = 'job-order/cmb.popup.html.twig';
|
$this->template_hash['jo_popup'] = 'job-order/cmb.popup.html.twig';
|
||||||
$this->template_hash['jo_behind_schedule'] = 'job-order/cmb.list.behindschedule.html.twig';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function checkTier($tier)
|
protected function checkTier($tier)
|
||||||
|
|
@ -3022,14 +2898,6 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
$unlock_route = '';
|
$unlock_route = '';
|
||||||
$jo_status = '';
|
$jo_status = '';
|
||||||
break;
|
break;
|
||||||
case 'behind_schedule':
|
|
||||||
$tier_key = 'jo_behind_schedule';
|
|
||||||
$tier_name = 'Behind Schedule';
|
|
||||||
$rows_route = 'jo_behind_schedule_rows';
|
|
||||||
$edit_route = '';
|
|
||||||
$unlock_route = '';
|
|
||||||
$jo_status = JOStatus::ASSIGNED;
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
throw new AccessDeniedHttpException('No access.');
|
throw new AccessDeniedHttpException('No access.');
|
||||||
}
|
}
|
||||||
|
|
@ -3160,53 +3028,6 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
->setParameter('date_start', $date_start)
|
->setParameter('date_start', $date_start)
|
||||||
->setParameter('date_end', $date_end);
|
->setParameter('date_end', $date_end);
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
case 'behind_schedule':
|
|
||||||
if (isset($datatable['query']['data-rows-search']))
|
|
||||||
{
|
|
||||||
$query->innerJoin('q.cus_vehicle', 'cv')
|
|
||||||
->innerJoin('q.customer', 'c')
|
|
||||||
->where('cv.plate_number like :filter')
|
|
||||||
->orWhere('c.phone_mobile like :filter')
|
|
||||||
->orWhere('c.first_name like :filter or c.last_name like :filter')
|
|
||||||
->setParameter('filter', $datatable['query']['data-rows-search'] . '%');
|
|
||||||
}
|
|
||||||
if (isset($datatable['query']['rider']))
|
|
||||||
{
|
|
||||||
$query->innerJoin('q.rider', 'r')
|
|
||||||
->andWhere('r.id = :rider_id')
|
|
||||||
->setParameter('rider_id', $datatable['query']['rider']);
|
|
||||||
}
|
|
||||||
if (isset($datatable['query']['schedule_date']))
|
|
||||||
{
|
|
||||||
$start = $datatable['query']['schedule_date'][0] . ' ' . '00:00:00';
|
|
||||||
$end = $datatable['query']['schedule_date'][1] . ' ' . '23:59:00';
|
|
||||||
|
|
||||||
$date_start = DateTime::createFromFormat('m/d/Y H:i:s', $start);
|
|
||||||
$date_end = DateTime::createFromFormat('m/d/Y H:i:s', $end);
|
|
||||||
|
|
||||||
$query->andWhere('q.date_schedule >= :date_start')
|
|
||||||
->andWhere('q.date_schedule <= :date_end')
|
|
||||||
->setParameter('date_start', $date_start)
|
|
||||||
->setParameter('date_end', $date_end);
|
|
||||||
}
|
|
||||||
// status should be assigned
|
|
||||||
$query->andWhere('q.status = :status')
|
|
||||||
->setParameter('status', $status);
|
|
||||||
|
|
||||||
$current_datetime = new DateTime();
|
|
||||||
$other_date = new DateTime();
|
|
||||||
|
|
||||||
$interval = new DateInterval('PT15M');
|
|
||||||
$other_date->add($interval);
|
|
||||||
|
|
||||||
//error_log('current datetime ' . $current_datetime->format('Y-m-d H:i:s'));
|
|
||||||
//error_log('other_date ' . $other_date->format('Y-m-d H:i:s'));
|
|
||||||
|
|
||||||
$query->andWhere('q.date_schedule < :current_datetime OR q.date_schedule <= :other_date')
|
|
||||||
->setParameter('current_datetime', $current_datetime)
|
|
||||||
->setParameter('other_date', $other_date);
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
$query->where('q.status = :status')
|
$query->where('q.status = :status')
|
||||||
|
|
@ -3221,21 +3042,9 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
throw new NotFoundHttpException('The item does not exist');
|
throw new NotFoundHttpException('The item does not exist');
|
||||||
|
|
||||||
// check transaction origin
|
// check transaction origin
|
||||||
if ($jo->getSource() == CMBTransactionOrigin::WALK_IN)
|
if ($jo->getSource() == TransactionOrigin::WALK_IN)
|
||||||
return 'jo_walkin_edit_form';
|
return 'jo_walkin_edit_form';
|
||||||
else
|
else
|
||||||
return 'jo_onestep_edit_form';
|
return 'jo_onestep_edit_form';
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function generateDiscountOptions()
|
|
||||||
{
|
|
||||||
$discount_start = 0;
|
|
||||||
return range($discount_start, 60);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function generateYearOptions()
|
|
||||||
{
|
|
||||||
$start_year = 1950;
|
|
||||||
return range($start_year, date("Y"));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ interface JobOrderHandlerInterface
|
||||||
public function generateJobOrder(Request $req, int $id);
|
public function generateJobOrder(Request $req, int $id);
|
||||||
|
|
||||||
// process one step job order
|
// process one step job order
|
||||||
//public function processOneStepJobOrder(Request $req, int $id, MQTTClient $mclient);
|
public function processOneStepJobOrder(Request $req, int $id);
|
||||||
|
|
||||||
// dispatch job order
|
// dispatch job order
|
||||||
public function dispatchJobOrder(Request $req, int $id, MQTTClient $mclient);
|
public function dispatchJobOrder(Request $req, int $id, MQTTClient $mclient);
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -663,18 +663,9 @@
|
||||||
|
|
||||||
// display create vehicle form
|
// display create vehicle form
|
||||||
$("#add-vehicle").click(function() {
|
$("#add-vehicle").click(function() {
|
||||||
// check if there are already 2 vehicles in list
|
|
||||||
if (vehicleRows.length == 2)
|
|
||||||
{
|
|
||||||
swal({
|
|
||||||
text: 'Customer is limited to only 2 vehicles..',
|
|
||||||
type: 'info',
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
$("#vehicle-form").data('mode', 'create');
|
$("#vehicle-form").data('mode', 'create');
|
||||||
$("#vehicle-form-title").html("Add Vehicle");
|
$("#vehicle-form-title").html("Add Vehicle");
|
||||||
$("#vehicle-form-modal").modal('show');
|
$("#vehicle-form-modal").modal('show');
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// find vehicle row by index
|
// find vehicle row by index
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ function initMap(r_markers, c_markers, icons) {
|
||||||
return dashmap;
|
return dashmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
function initEventHandler(dashmap, icons, ssl) {
|
function initEventHandler(dashmap) {
|
||||||
var options = {
|
var options = {
|
||||||
'track_jo': true,
|
'track_jo': true,
|
||||||
'track_rider': true,
|
'track_rider': true,
|
||||||
|
|
@ -54,12 +54,11 @@ function initEventHandler(dashmap, icons, ssl) {
|
||||||
'rider_status': 'rider/+/status',
|
'rider_status': 'rider/+/status',
|
||||||
'jo_location': 'jo/+/location',
|
'jo_location': 'jo/+/location',
|
||||||
'jo_status': 'jo/+/status',
|
'jo_status': 'jo/+/status',
|
||||||
'jo_origin': 'jo/+/origin',
|
'jo_origin': 'jo/+/origin'
|
||||||
'rider_availability': 'rider/+/availability'
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
var event_handler = new MapEventHandler(options, dashmap, ssl);
|
var event_handler = new MapEventHandler(options, dashmap);
|
||||||
event_handler.connect('{{ app.user.getID }}', '{{ mqtt_host }}', {{ mqtt_port }});
|
event_handler.connect('{{ app.user.getID }}', '{{ mqtt_host }}', {{ mqtt_port }});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -95,13 +94,8 @@ var icons = {
|
||||||
var r_markers = {};
|
var r_markers = {};
|
||||||
var c_markers = {};
|
var c_markers = {};
|
||||||
|
|
||||||
var ssl = false;
|
|
||||||
{% if ssl_enable == 'true' %}
|
|
||||||
ssl = true;
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
var dashmap = initMap(r_markers, c_markers, icons);
|
var dashmap = initMap(r_markers, c_markers, icons);
|
||||||
initEventHandler(dashmap, icons, ssl);
|
initEventHandler(dashmap, icons);
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -92,57 +92,57 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group m-form__group row">
|
<div class="form-group m-form__group row">
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<label data-field="first_name">First Name</label>
|
<label data-field="customer_first_name">First Name</label>
|
||||||
<input type="text" name="first_name" id="customer-first-name" class="form-control m-input cust_field" value="{{ obj.getCustomer.getFirstName|default('') }}" data-vehicle-field="1" disabled>
|
<input type="text" name="customer_first_name" id="customer-first-name" class="form-control m-input cust_field" value="{{ obj.getCustomer.getFirstName|default('') }}" data-vehicle-field="1" disabled>
|
||||||
<div class="form-control-feedback hide" data-field="first_name"></div>
|
<div class="form-control-feedback hide" data-field="customer_first_name"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<label data-field="last_name">Last Name</label>
|
<label data-field="customer_last_name">Last Name</label>
|
||||||
<input type="text" name="last_name" id="customer-last-name" class="form-control m-input cust_field" value="{{ obj.getCustomer.getLastName|default('') }}" data-vehicle-field="1" disabled>
|
<input type="text" name="customer_last_name" id="customer-last-name" class="form-control m-input cust_field" value="{{ obj.getCustomer.getLastName|default('') }}" data-vehicle-field="1" disabled>
|
||||||
<div class="form-control-feedback hide" data-field="last_name"></div>
|
<div class="form-control-feedback hide" data-field="customer_last_name"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group m-form__group row">
|
<div class="form-group m-form__group row">
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<label data-field="phone_mobile">Mobile Phone</label>
|
<label data-field="customer_phone_mobile">Mobile Phone</label>
|
||||||
<div class="input-group m-input-group">
|
<div class="input-group m-input-group">
|
||||||
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span>
|
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span>
|
||||||
<input type="text" name="phone_mobile" id="customer-phone-mobile" class="form-control m-input cust_field" value="{{ obj.getCustomer.getPhoneMobile|default('') }}" data-vehicle-field="1" disabled>
|
<input type="text" name="customer_phone_mobile" id="customer-phone-mobile" class="form-control m-input cust_field" value="{{ obj.getCustomer.getPhoneMobile|default('') }}" data-vehicle-field="1" disabled>
|
||||||
<div class="form-control-feedback hide" data-field="phone_mobile"></div>
|
<div class="form-control-feedback hide" data-field="customer_phone_mobile"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<label data-field="phone_landline">Landline</label>
|
<label data-field="customer_phone_landline">Landline</label>
|
||||||
<div class="input-group m-input-group">
|
<div class="input-group m-input-group">
|
||||||
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span>
|
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span>
|
||||||
<input type="text" name="phone_landline" id="customer-phone-landline" class="form-control m-input cust_field" value="{{ obj.getCustomer.getPhoneLandline|default('') }}" data-vehicle-field="1" disabled>
|
<input type="text" name="customer_phone_landline" id="customer-phone-landline" class="form-control m-input cust_field" value="{{ obj.getCustomer.getPhoneLandline|default('') }}" data-vehicle-field="1" disabled>
|
||||||
<div class="form-control-feedback hide" data-field="phone_landline"></div>
|
<div class="form-control-feedback hide" data-field="customer_phone_landline"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group m-form__group row">
|
<div class="form-group m-form__group row">
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<label data-field="phone_office">Office Phone</label>
|
<label data-field="customer_phone_office">Office Phone</label>
|
||||||
<div class="input-group m-input-group">
|
<div class="input-group m-input-group">
|
||||||
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span>
|
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span>
|
||||||
<input type="text" name="phone_office" id="customer-phone-office" class="form-control m-input cust_field" value="{{ obj.getCustomer.getPhoneOffice|default('') }}" data-vehicle-field="1" disabled>
|
<input type="text" name="customer_phone_office" id="customer-phone-office" class="form-control m-input cust_field" value="{{ obj.getCustomer.getPhoneOffice|default('') }}" data-vehicle-field="1" disabled>
|
||||||
<div class="form-control-feedback hide" data-field="phone_office"></div>
|
<div class="form-control-feedback hide" data-field="customer_phone_office"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<label data-field="phone_fax">Fax</label>
|
<label data-field="customer_phone_fax">Fax</label>
|
||||||
<div class="input-group m-input-group">
|
<div class="input-group m-input-group">
|
||||||
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span>
|
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span>
|
||||||
<input type="text" name="phone_fax" id="customer-phone-fax" class="form-control m-input cust_field" value="{{ obj.getCustomer.getPhoneFax|default('') }}" data-vehicle-field="1" disabled>
|
<input type="text" name="customer_phone_fax" id="customer-phone-fax" class="form-control m-input cust_field" value="{{ obj.getCustomer.getPhoneFax|default('') }}" data-vehicle-field="1" disabled>
|
||||||
<div class="form-control-feedback hide" data-field="phone_fax"></div>
|
<div class="form-control-feedback hide" data-field="customer_phone_fax"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group m-form__group row">
|
<div class="form-group m-form__group row">
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<label data-field="customer_notes">Customer Notes</label>
|
<label data-field="customer_customer_notes">Customer Notes</label>
|
||||||
<textarea name="customer_notes" id="customer-customer-notes" class="form-control m-input cust_field" data-vehicle-field="1" rows="4" disabled>{{ obj.getCustomer ? obj.getCustomer.getCustomerNotes }}</textarea>
|
<textarea name="customer_customer_notes" id="customer-customer-notes" class="form-control m-input cust_field" data-vehicle-field="1" rows="4" disabled>{{ obj.getCustomer ? obj.getCustomer.getCustomerNotes }}</textarea>
|
||||||
<div class="form-control-feedback hide" data-field="customer_notes"></div>
|
<div class="form-control-feedback hide" data-field="customer_customer_notes"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -178,26 +178,17 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-3">
|
<div class="col-lg-3">
|
||||||
<label data-field="cv_year">Model Year</label>
|
<label data-field="cv_year">Model Year</label>
|
||||||
<select name="cv_year" class="form-control m-input cv_field" id="cv-year" data-required="0" disabled>
|
<input type="text" name="cv_year" id="cv-year" class="form-control m-input cv_field" value="{{ obj.getCustomerVehicle ? obj.getCustomerVehicle.getModelYear }}" data-vehicle-field="1" disabled>
|
||||||
<option value="">Select a year</option>
|
|
||||||
{% for year in model_years %}
|
|
||||||
{% if obj.getCustomerVehicle %}
|
|
||||||
<option value="{{ year }}"{{ obj.getCustomerVehicle.getModelYear == year ? ' selected' }}>{{ year }}</option>
|
|
||||||
{% else %}
|
|
||||||
<option value="{{ year }}">{{ year }}</option>
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
</select>
|
|
||||||
<div class="form-control-feedback hide" data-field="cv_year"></div>
|
<div class="form-control-feedback hide" data-field="cv_year"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group m-form__group row">
|
<div class="form-group m-form__group row">
|
||||||
<div class="col-lg-3">
|
<div class="col-lg-3">
|
||||||
<label data-field="plate_number">Plate #
|
<label data-field="cv_plate">Plate #
|
||||||
<span style="color:red"> *</span>
|
<span style="color:red"> *</span>
|
||||||
</label>
|
</label>
|
||||||
<input type="text" name="plate_number" id="cv-plate" class="form-control m-input cv_field" value="{{ obj.getCustomerVehicle.getPlateNumber|default('') }}" data-vehicle-field="1" disabled>
|
<input type="text" name="cv_plate" id="cv-plate" class="form-control m-input cv_field" value="{{ obj.getCustomerVehicle.getPlateNumber|default('') }}" data-vehicle-field="1" disabled>
|
||||||
<div class="form-control-feedback hide" data-field="plate_number"></div>
|
<div class="form-control-feedback hide" data-field="cv_plate"></div>
|
||||||
</div>
|
</div>
|
||||||
<!--
|
<!--
|
||||||
<div class="col-lg-3">
|
<div class="col-lg-3">
|
||||||
|
|
@ -287,7 +278,7 @@
|
||||||
<div class="col-lg-3">
|
<div class="col-lg-3">
|
||||||
<label data-field="date_schedule">Scheduled Date</label>
|
<label data-field="date_schedule">Scheduled Date</label>
|
||||||
<div class="input-group date dp">
|
<div class="input-group date dp">
|
||||||
<input type="text" id="date-schedule-date" name="date_schedule_date" class="form-control m-input" data-default-value="{{ obj.getDateSchedule|default("now")|date('Y-m-d') }}" value="{{ obj.getDateSchedule|default("now")|date('d M Y') }}" readonly placeholder="Select a date" disabled>
|
<input type="text" name="date_schedule_date" class="form-control m-input" data-default-value="{{ obj.getDateSchedule|default("now")|date('Y-m-d') }}" value="{{ obj.getDateSchedule|default("now")|date('d M Y') }}" readonly placeholder="Select a date" disabled>
|
||||||
<span class="input-group-addon">
|
<span class="input-group-addon">
|
||||||
<i class="la la-calendar glyphicon-th"></i>
|
<i class="la la-calendar glyphicon-th"></i>
|
||||||
</span>
|
</span>
|
||||||
|
|
@ -297,7 +288,7 @@
|
||||||
<div class="col-lg-3">
|
<div class="col-lg-3">
|
||||||
<label data-field="date_schedule">Scheduled Time</label>
|
<label data-field="date_schedule">Scheduled Time</label>
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input type="text" id="date-schedule-time" name="date_schedule_time" class="form-control m-input tp" data-default-value="{{ obj.getDateSchedule|default("now")|date('g:i A') }}" value="{{ obj.getDateSchedule|default("now")|date('g:i A') }}" readonly placeholder="Select a time" disabled>
|
<input type="text" name="date_schedule_time" class="form-control m-input tp" data-default-value="{{ obj.getDateSchedule|default("now")|date('g:i A') }}" value="{{ obj.getDateSchedule|default("now")|date('g:i A') }}" readonly placeholder="Select a time" disabled>
|
||||||
<span class="input-group-addon">
|
<span class="input-group-addon">
|
||||||
<i class="la la-clock-o glyphicon-th"></i>
|
<i class="la la-clock-o glyphicon-th"></i>
|
||||||
</span>
|
</span>
|
||||||
|
|
@ -335,11 +326,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<div class="col-lg-12 form-group-inner">
|
|
||||||
<label>Responsible Party</label>
|
|
||||||
<input type="text" name="responsible_party" class="form-control m-input" value="{{ obj.getResponsibleParty|default('') }}" >
|
|
||||||
<div class="form-control-feedback hide" data-field="responsible_party"></div>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-12 form-group-inner">
|
<div class="col-lg-12 form-group-inner">
|
||||||
<label>Prepared By</label>
|
<label>Prepared By</label>
|
||||||
<input type="text" name="created_by" class="form-control m-input" value="{{ obj.getCreatedBy.getFullName|default('') }}" disabled>
|
<input type="text" name="created_by" class="form-control m-input" value="{{ obj.getCreatedBy.getFullName|default('') }}" disabled>
|
||||||
|
|
@ -429,6 +415,7 @@
|
||||||
<th>Branch</th>
|
<th>Branch</th>
|
||||||
<th>Contact Numbers</th>
|
<th>Contact Numbers</th>
|
||||||
<th>Distance in KM</th>
|
<th>Distance in KM</th>
|
||||||
|
<th>Action</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody id="nearest_hubs">
|
<tbody id="nearest_hubs">
|
||||||
|
|
@ -438,6 +425,7 @@
|
||||||
<td>{{ hub.hub.getName }}</td>
|
<td>{{ hub.hub.getName }}</td>
|
||||||
<td>{{ hub.hub.getBranch }}</td>
|
<td>{{ hub.hub.getBranch }}</td>
|
||||||
<td>{{ hub.hub.getContactNumbers }}</td>
|
<td>{{ hub.hub.getContactNumbers }}</td>
|
||||||
|
<td></span></td>
|
||||||
<td></td>
|
<td></td>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %} -->
|
{% endif %} -->
|
||||||
|
|
@ -474,13 +462,14 @@
|
||||||
<th>Last Name</th>
|
<th>Last Name</th>
|
||||||
<th>Contact No.</th>
|
<th>Contact No.</th>
|
||||||
<th>Plate Number</th>
|
<th>Plate Number</th>
|
||||||
|
<th>Action</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody id="riders">
|
<tbody id="riders">
|
||||||
{% if mode in ['onestep-edit', 'view-all', 'update-fulfillment'] %}
|
{% if mode in ['onestep-edit', 'view-all', 'update-fulfillment'] %}
|
||||||
{% set avail_riders = obj.getHub.getAvailableRiders|default([]) %}
|
{% set avail_riders = obj.getHub.getAvailableRiders|default([]) %}
|
||||||
<tr class="placeholder-row{{ obj.getHub and avail_riders|length > 0 ? ' hide' }}">
|
<tr class="placeholder-row{{ obj.getHub and avail_riders|length > 0 ? ' hide' }}">
|
||||||
<td colspan="4">
|
<td colspan="5">
|
||||||
No riders available.
|
No riders available.
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
@ -506,73 +495,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% if mode in ['onestep-edit'] %}
|
|
||||||
<div class="m-form__seperator m-form__seperator--dashed"></div>
|
|
||||||
<div class="m-form__section">
|
|
||||||
<div class="m-form__heading">
|
|
||||||
<h3 class="m-form__heading-title">
|
|
||||||
Other Information
|
|
||||||
</h3>
|
|
||||||
</div>
|
|
||||||
<div class="form-group m-form__group row">
|
|
||||||
<div class="col-lg-3">
|
|
||||||
<label data-field="odometer">Odometer Reading</label>
|
|
||||||
<input type="text" name="odometer" id="odometer" class="form-control m-input other_info_field" value="{{ odometer }}" disabled>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-3">
|
|
||||||
<label data-field="email">Email Address</label>
|
|
||||||
<input type="text" name="email" id="email" class="form-control m-input other_info_field" value="{{ email }}" disabled>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-3">
|
|
||||||
<label> Customer Signature </label>
|
|
||||||
<div class="portrait-box" style="background-image: url('{{ signature ? '/uploads/jo_extra/' ~ signature : '/assets/images/user.gif' }}');" ></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group m-form__group row">
|
|
||||||
<div class="col-lg-12">
|
|
||||||
<label> Pictures</label>
|
|
||||||
</div>
|
|
||||||
{% for key, picture in jo_pictures %}
|
|
||||||
{% if key == 'image_1' %}
|
|
||||||
<div class="col-lg-2">
|
|
||||||
<div class="portrait-box" style="background-image: url('{{ '/uploads/jo_extra/' ~ picture }}');" ></div>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
{% if key == 'image_2' %}
|
|
||||||
<div class="col-lg-2">
|
|
||||||
<div class="portrait-box" style="background-image: url('{{ '/uploads/jo_extra/' ~ picture }}');" ></div>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
{% if key == 'image_3' %}
|
|
||||||
<div class="col-lg-2">
|
|
||||||
<div class="portrait-box" style="background-image: url('{{ '/uploads/jo_extra/' ~ picture }}');" ></div>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
{% if key == 'image_4' %}
|
|
||||||
<div class="col-lg-2">
|
|
||||||
<div class="portrait-box" style="background-image: url('{{ '/uploads/jo_extra/' ~ picture }}');" ></div>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% endfor %}
|
|
||||||
</div>
|
|
||||||
<!-- <div class="form-group m-form__group row">
|
|
||||||
<div class="col-lg-12">
|
|
||||||
<label> Other Images</label>
|
|
||||||
</div>
|
|
||||||
{% for key, picture in jo_pictures %}
|
|
||||||
{% if key == 'other_images' %}
|
|
||||||
{% for pic in jo_pictures['other_images'] %}
|
|
||||||
<div class="col-lg-2">
|
|
||||||
<div class="portrait-box" style="background-image: url('{{ '/uploads/jo_extra/' ~ pic }}');" ></div>
|
|
||||||
</div>
|
|
||||||
{% endfor %}
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
</div> -->
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<div class="m-form__seperator m-form__seperator--dashed"></div>
|
<div class="m-form__seperator m-form__seperator--dashed"></div>
|
||||||
<div class="m-form__section" id="sc-section">
|
<div class="m-form__section" id="sc-section">
|
||||||
<div class="m-form__heading">
|
<div class="m-form__heading">
|
||||||
|
|
@ -622,7 +544,7 @@
|
||||||
<input type="text" name="or_name" id="or_name" class="form-control m-input" value="{{ obj.getORName|default('') }}">
|
<input type="text" name="or_name" id="or_name" class="form-control m-input" value="{{ obj.getORName|default('') }}">
|
||||||
<div class="form-control-feedback hide" data-field="or_name"></div>
|
<div class="form-control-feedback hide" data-field="or_name"></div>
|
||||||
</div>
|
</div>
|
||||||
<div style="display:none" class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<label data-field="promo_detail">Employee ID / Card Number / Referred By</label>
|
<label data-field="promo_detail">Employee ID / Card Number / Referred By</label>
|
||||||
<input type="text" name="promo_detail" id="promo_detail" class="form-control m-input" value="{{ obj.getPromoDetail|default('') }}">
|
<input type="text" name="promo_detail" id="promo_detail" class="form-control m-input" value="{{ obj.getPromoDetail|default('') }}">
|
||||||
<div class="form-control-feedback hide" data-field="promo_detail"></div>
|
<div class="form-control-feedback hide" data-field="promo_detail"></div>
|
||||||
|
|
@ -632,29 +554,10 @@
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<label>Discount</label>
|
<label>Discount</label>
|
||||||
{% if ftags.invoice_edit %}
|
{% if ftags.invoice_edit %}
|
||||||
<select class="form-control m-input" id="invoice-discount" name="invoice_discount">
|
<input type="number" id="invoice-discount" name="invoice_discount" class="form-control m-input min = "0" max="50" value="{{ obj.getInvoice ? obj.getInvoice.getDiscount }}">
|
||||||
<option value=""></option>
|
|
||||||
{% for discount in discounts %}
|
|
||||||
{% if obj.getInvoice %}
|
|
||||||
<option value="{{ discount }}"{{ obj.getInvoice.getDiscount|number_format(2) == discount ? ' selected' }}>{{ discount }}</option>
|
|
||||||
{% else %}
|
|
||||||
<option value="{{ discount }}">{{ discount }}</option>
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
</select>
|
|
||||||
<div class="form-control-feedback hide" data-field="invoice_discount"></div>
|
<div class="form-control-feedback hide" data-field="invoice_discount"></div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<select class="form-control m-input" id="invoice-discount" name="invoice_discount">
|
<input type="number" id="invoice-discount" name="invoice_discount" class="form-control m-input min="0" max="50" value="{{ obj.getInvoice ? obj.getInvoice.getDiscount }}" disabled>
|
||||||
<option value=""></option>
|
|
||||||
{% for discount in discounts %}
|
|
||||||
{% if obj.getInvoice %}
|
|
||||||
<option value="{{ discount }}"{{ obj.getInvoice.getDiscount|number_format(2) == discount ? ' selected' }} disabled>{{ discount }}</option>
|
|
||||||
{% else %}
|
|
||||||
<option value="{{ discount }}" disabled>{{ discount }}</option>
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
</select>
|
|
||||||
<div class="form-control-feedback hide" data-field="invoice_discount"></div>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
|
|
@ -850,7 +753,6 @@ $(function() {
|
||||||
{% if mode in ['onestep'] %}
|
{% if mode in ['onestep'] %}
|
||||||
// get nearest hubs ajax
|
// get nearest hubs ajax
|
||||||
var hub_table = '';
|
var hub_table = '';
|
||||||
var rider_table = '';
|
|
||||||
$.getJSON("{{ url('hub_nearest') }}?lat=" + lat + "&long=" + lng, function(data) {
|
$.getJSON("{{ url('hub_nearest') }}?lat=" + lat + "&long=" + lng, function(data) {
|
||||||
var hubs = data['hubs'];
|
var hubs = data['hubs'];
|
||||||
for (i in hubs) {
|
for (i in hubs) {
|
||||||
|
|
@ -863,29 +765,18 @@ $(function() {
|
||||||
hub_table += '<td>' + hub['branch'] + '</td>';
|
hub_table += '<td>' + hub['branch'] + '</td>';
|
||||||
hub_table += '<td>' + hub['cnum'] + '</td>';
|
hub_table += '<td>' + hub['cnum'] + '</td>';
|
||||||
hub_table += '<td>' + hub['distance'] + '</td>';
|
hub_table += '<td>' + hub['distance'] + '</td>';
|
||||||
|
hub_table += '<td></td>';
|
||||||
hub_table += '</tr>';
|
hub_table += '</tr>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$('#nearest_hubs').html(hub_table);
|
$('#nearest_hubs').html(hub_table);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// clear rider table
|
|
||||||
rider_table += '<tr>';
|
|
||||||
rider_table += '<td>' + '</td>';
|
|
||||||
rider_table += '<td>' + '</td>';
|
|
||||||
rider_table += '<td>' + '</td>';
|
|
||||||
rider_table += '<td>' + '</td>';
|
|
||||||
rider_table += '</tr>';
|
|
||||||
|
|
||||||
$('#riders').html(rider_table);
|
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if mode in ['onestep-edit'] %}
|
{% if mode in ['onestep-edit'] %}
|
||||||
// get nearest hubs ajax
|
// get nearest hubs ajax
|
||||||
var hub_table = '';
|
var hub_table = '';
|
||||||
var rider_table = '';
|
|
||||||
$.getJSON("{{ url('hub_nearest') }}?lat=" + lat + "&long=" + lng, function(data) {
|
$.getJSON("{{ url('hub_nearest') }}?lat=" + lat + "&long=" + lng, function(data) {
|
||||||
var hubs = data['hubs'];
|
var hubs = data['hubs'];
|
||||||
for (i in hubs) {
|
for (i in hubs) {
|
||||||
|
|
@ -903,26 +794,13 @@ $(function() {
|
||||||
hub_table += '<td>' + hub['branch'] + '</td>';
|
hub_table += '<td>' + hub['branch'] + '</td>';
|
||||||
hub_table += '<td>' + hub['cnum'] + '</td>';
|
hub_table += '<td>' + hub['cnum'] + '</td>';
|
||||||
hub_table += '<td>' + hub['distance'] + '</td>';
|
hub_table += '<td>' + hub['distance'] + '</td>';
|
||||||
|
hub_table += '<td></td>';
|
||||||
hub_table += '</tr>';
|
hub_table += '</tr>';
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$('#nearest_hubs').html(hub_table);
|
$('#nearest_hubs').html(hub_table);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (selected_rider == '') {
|
|
||||||
// clear rider table
|
|
||||||
rider_table += '<tr>';
|
|
||||||
rider_table += '<td>' + '</td>';
|
|
||||||
rider_table += '<td>' + '</td>';
|
|
||||||
rider_table += '<td>' + '</td>';
|
|
||||||
rider_table += '<td>' + '</td>';
|
|
||||||
rider_table += '</tr>';
|
|
||||||
|
|
||||||
$('#riders').html(rider_table);
|
|
||||||
}
|
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if mode in ['view-all', 'update-fulfillment'] %}
|
{% if mode in ['view-all', 'update-fulfillment'] %}
|
||||||
|
|
@ -942,6 +820,7 @@ $(function() {
|
||||||
hub_table += '<td>' + hub['branch'] + '</td>';
|
hub_table += '<td>' + hub['branch'] + '</td>';
|
||||||
hub_table += '<td>' + hub['cnum'] + '</td>';
|
hub_table += '<td>' + hub['cnum'] + '</td>';
|
||||||
hub_table += '<td>' + hub['distance'] + '</td>';
|
hub_table += '<td>' + hub['distance'] + '</td>';
|
||||||
|
hub_table += '<td></td>';
|
||||||
hub_table += '</tr>';
|
hub_table += '</tr>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -976,9 +855,6 @@ $(function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
osm_map.on('click', function(e) {
|
osm_map.on('click', function(e) {
|
||||||
// clear selected hub and riders
|
|
||||||
selected_hub = '';
|
|
||||||
selected_rider = '';
|
|
||||||
selectPoint(e.latlng.lat, e.latlng.lng);
|
selectPoint(e.latlng.lat, e.latlng.lng);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -1055,6 +931,7 @@ $(function() {
|
||||||
rider_table += '<td>' + rider['last_name'] + '</td>';
|
rider_table += '<td>' + rider['last_name'] + '</td>';
|
||||||
rider_table += '<td>' + rider['contact_num'] + '</td>';
|
rider_table += '<td>' + rider['contact_num'] + '</td>';
|
||||||
rider_table += '<td>' + rider['plate_num'] + '</td>';
|
rider_table += '<td>' + rider['plate_num'] + '</td>';
|
||||||
|
rider_table += '<td></td>';
|
||||||
rider_table += '</tr>';
|
rider_table += '</tr>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1152,7 +1029,6 @@ $(function() {
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
$("#row-form").submit(function(e) {
|
$("#row-form").submit(function(e) {
|
||||||
e.preventDefault();
|
|
||||||
if (form_in_process) {
|
if (form_in_process) {
|
||||||
alert("Cannot submit form twice. First submission still in progress.");
|
alert("Cannot submit form twice. First submission still in progress.");
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -1315,7 +1191,6 @@ $(function() {
|
||||||
} else {
|
} else {
|
||||||
$("#current-battery, #warranty-expiration").val("No current battery").css('color', '#f4516c');
|
$("#current-battery, #warranty-expiration").val("No current battery").css('color', '#f4516c');
|
||||||
}
|
}
|
||||||
$("#or_name").val(vdata.customer.first_name + ' ' + vdata.customer.last_name);
|
|
||||||
})
|
})
|
||||||
}).focus();
|
}).focus();
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
@ -1539,7 +1414,6 @@ $(function() {
|
||||||
|
|
||||||
// update invoice when promo is changed
|
// update invoice when promo is changed
|
||||||
$("#invoice-discount").change(function() {
|
$("#invoice-discount").change(function() {
|
||||||
console.log('discount ' + $("#invoice-discount").val());
|
|
||||||
generateInvoice();
|
generateInvoice();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -1884,53 +1758,6 @@ $(function() {
|
||||||
generateInvoice();
|
generateInvoice();
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#customer-first-name, #customer-last-name").change(function() {
|
|
||||||
// autopopulate OR name with customer name
|
|
||||||
var cust_name = $("#customer-first-name").val() + ' ' + $("#customer-last-name").val();
|
|
||||||
$("#or_name").val(cust_name);
|
|
||||||
});
|
|
||||||
|
|
||||||
$('.dp').on('changeDate', function() {
|
|
||||||
// check date schedule if it's earlier
|
|
||||||
// if so, show an alert to let user know
|
|
||||||
var date_time = $('#date-schedule-date').val() + ' ' + $('#date-schedule-time').val()
|
|
||||||
var date_schedule = new Date(date_time);
|
|
||||||
var current_date = new Date('{{ current_date|date('Y-m-d g:i A') }}');
|
|
||||||
|
|
||||||
// check if date is earlier than current
|
|
||||||
if (date_schedule < current_date)
|
|
||||||
{
|
|
||||||
swal({
|
|
||||||
title: 'Warning!',
|
|
||||||
text: 'Schedule date and time is before today\'s date and time.',
|
|
||||||
type: 'warning',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
$('.tp').on('changeTime.timepicker', function(e) {
|
|
||||||
// set the schedule time what the user selects
|
|
||||||
$('#date-schedule-time').val(e.time.value);
|
|
||||||
});
|
|
||||||
|
|
||||||
$('.tp').on('hide.timepicker', function(e) {
|
|
||||||
// check time schedule along with date if it's earlier than current date
|
|
||||||
var date_time = $('#date-schedule-date').val() + ' ' + $('#date-schedule-time').val()
|
|
||||||
var date_schedule = new Date(date_time);
|
|
||||||
var current_date = new Date('{{ current_date|date('Y-m-d g:i A') }}');
|
|
||||||
|
|
||||||
// check if date is earlier than current
|
|
||||||
if (date_schedule < current_date)
|
|
||||||
{
|
|
||||||
swal({
|
|
||||||
title: 'Warning!',
|
|
||||||
text: 'Schedule date and time is before today\'s date and time.',
|
|
||||||
type: 'warning',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
||||||
|
|
@ -92,57 +92,57 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group m-form__group row">
|
<div class="form-group m-form__group row">
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<label data-field="first_name">First Name</label>
|
<label data-field="customer_first_name">First Name</label>
|
||||||
<input type="text" name="first_name" id="customer-first-name" class="form-control m-input cust_field" value="{{ obj.getCustomer.getFirstName|default('') }}" data-vehicle-field="1" disabled>
|
<input type="text" name="customer_first_name" id="customer-first-name" class="form-control m-input cust_field" value="{{ obj.getCustomer.getFirstName|default('') }}" data-vehicle-field="1" disabled>
|
||||||
<div class="form-control-feedback hide" data-field="first_name"></div>
|
<div class="form-control-feedback hide" data-field="customer_first_name"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<label data-field="last_name">Last Name</label>
|
<label data-field="customer_last_name">Last Name</label>
|
||||||
<input type="text" name="last_name" id="customer-last-name" class="form-control m-input cust_field" value="{{ obj.getCustomer.getLastName|default('') }}" data-vehicle-field="1" disabled>
|
<input type="text" name="customer_last_name" id="customer-last-name" class="form-control m-input cust_field" value="{{ obj.getCustomer.getLastName|default('') }}" data-vehicle-field="1" disabled>
|
||||||
<div class="form-control-feedback hide" data-field="last_name"></div>
|
<div class="form-control-feedback hide" data-field="customer_last_name"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group m-form__group row">
|
<div class="form-group m-form__group row">
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<label data-field="phone_mobile">Mobile Phone</label>
|
<label data-field="customer_phone_mobile">Mobile Phone</label>
|
||||||
<div class="input-group m-input-group">
|
<div class="input-group m-input-group">
|
||||||
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span>
|
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span>
|
||||||
<input type="text" name="phone_mobile" id="customer-phone-mobile" class="form-control m-input cust_field" value="{{ obj.getCustomer.getPhoneMobile|default('') }}" data-vehicle-field="1" disabled>
|
<input type="text" name="customer_phone_mobile" id="customer-phone-mobile" class="form-control m-input cust_field" value="{{ obj.getCustomer.getPhoneMobile|default('') }}" data-vehicle-field="1" disabled>
|
||||||
<div class="form-control-feedback hide" data-field="phone_mobile"></div>
|
<div class="form-control-feedback hide" data-field="customer_phone_mobile"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<label data-field="phone_landline">Landline</label>
|
<label data-field="customer_phone_landline">Landline</label>
|
||||||
<div class="input-group m-input-group">
|
<div class="input-group m-input-group">
|
||||||
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span>
|
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span>
|
||||||
<input type="text" name="phone_landline" id="customer-phone-landline" class="form-control m-input cust_field" value="{{ obj.getCustomer.getPhoneLandline|default('') }}" data-vehicle-field="1" disabled>
|
<input type="text" name="customer_phone_landline" id="customer-phone-landline" class="form-control m-input cust_field" value="{{ obj.getCustomer.getPhoneLandline|default('') }}" data-vehicle-field="1" disabled>
|
||||||
<div class="form-control-feedback hide" data-field="phone_landline"></div>
|
<div class="form-control-feedback hide" data-field="customer_phone_landline"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group m-form__group row">
|
<div class="form-group m-form__group row">
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<label data-field="phone_office">Office Phone</label>
|
<label data-field="customer_phone_office">Office Phone</label>
|
||||||
<div class="input-group m-input-group">
|
<div class="input-group m-input-group">
|
||||||
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span>
|
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span>
|
||||||
<input type="text" name="phone_office" id="customer-phone-office" class="form-control m-input cust_field" value="{{ obj.getCustomer.getPhoneOffice|default('') }}" data-vehicle-field="1" disabled>
|
<input type="text" name="customer_phone_office" id="customer-phone-office" class="form-control m-input cust_field" value="{{ obj.getCustomer.getPhoneOffice|default('') }}" data-vehicle-field="1" disabled>
|
||||||
<div class="form-control-feedback hide" data-field="phone_office"></div>
|
<div class="form-control-feedback hide" data-field="customer_phone_office"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<label data-field="phone_fax">Fax</label>
|
<label data-field="customer_phone_fax">Fax</label>
|
||||||
<div class="input-group m-input-group">
|
<div class="input-group m-input-group">
|
||||||
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span>
|
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span>
|
||||||
<input type="text" name="phone_fax" id="customer-phone-fax" class="form-control m-input cust_field" value="{{ obj.getCustomer.getPhoneFax|default('') }}" data-vehicle-field="1" disabled>
|
<input type="text" name="customer_phone_fax" id="customer-phone-fax" class="form-control m-input cust_field" value="{{ obj.getCustomer.getPhoneFax|default('') }}" data-vehicle-field="1" disabled>
|
||||||
<div class="form-control-feedback hide" data-field="phone_fax"></div>
|
<div class="form-control-feedback hide" data-field="customer_phone_fax"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group m-form__group row">
|
<div class="form-group m-form__group row">
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<label data-field="customer_notes">Customer Notes</label>
|
<label data-field="customer_customer_notes">Customer Notes</label>
|
||||||
<textarea name="customer_notes" id="customer-customer-notes" class="form-control m-input cust_field" data-vehicle-field="1" rows="4" disabled>{{ obj.getCustomer ? obj.getCustomer.getCustomerNotes }}</textarea>
|
<textarea name="customer_customer_notes" id="customer-customer-notes" class="form-control m-input cust_field" data-vehicle-field="1" rows="4" disabled>{{ obj.getCustomer ? obj.getCustomer.getCustomerNotes }}</textarea>
|
||||||
<div class="form-control-feedback hide" data-field="customer_notes"></div>
|
<div class="form-control-feedback hide" data-field="customer_customer_notes"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -178,26 +178,17 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-3">
|
<div class="col-lg-3">
|
||||||
<label data-field="cv_year">Model Year</label>
|
<label data-field="cv_year">Model Year</label>
|
||||||
<select name="cv_year" class="form-control m-input cv_field" id="cv-year" data-required="0" disabled>
|
<input type="text" name="cv_year" id="cv-year" class="form-control m-input cv_field" value="{{ obj.getCustomerVehicle ? obj.getCustomerVehicle.getModelYear }}" data-vehicle-field="1" disabled>
|
||||||
<option value="">Select a year</option>
|
|
||||||
{% for year in model_years %}
|
|
||||||
{% if obj.getCustomerVehicle %}
|
|
||||||
<option value="{{ year }}"{{ obj.getCustomerVehicle.getModelYear == year ? ' selected' }}>{{ year }}</option>
|
|
||||||
{% else %}
|
|
||||||
<option value="{{ year }}">{{ year }}</option>
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
</select>
|
|
||||||
<div class="form-control-feedback hide" data-field="cv_year"></div>
|
<div class="form-control-feedback hide" data-field="cv_year"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group m-form__group row">
|
<div class="form-group m-form__group row">
|
||||||
<div class="col-lg-3">
|
<div class="col-lg-3">
|
||||||
<label data-field="plate_number">Plate #
|
<label data-field="cv_plate">Plate #
|
||||||
<span style="color:red"> *</span>
|
<span style="color:red"> *</span>
|
||||||
</label>
|
</label>
|
||||||
<input type="text" name="plate_number" id="cv-plate" class="form-control m-input cv_field" value="{{ obj.getCustomerVehicle.getPlateNumber|default('') }}" data-vehicle-field="1" disabled>
|
<input type="text" name="cv_plate" id="cv-plate" class="form-control m-input cv_field" value="{{ obj.getCustomerVehicle.getPlateNumber|default('') }}" data-vehicle-field="1" disabled>
|
||||||
<div class="form-control-feedback hide" data-field="plate_number"></div>
|
<div class="form-control-feedback hide" data-field="cv_plate"></div>
|
||||||
</div>
|
</div>
|
||||||
<!--
|
<!--
|
||||||
<div class="col-lg-3">
|
<div class="col-lg-3">
|
||||||
|
|
@ -287,7 +278,7 @@
|
||||||
<div class="col-lg-3">
|
<div class="col-lg-3">
|
||||||
<label data-field="date_schedule">Scheduled Date</label>
|
<label data-field="date_schedule">Scheduled Date</label>
|
||||||
<div class="input-group date dp">
|
<div class="input-group date dp">
|
||||||
<input type="text" id="date-schedule-date" name="date_schedule_date" class="form-control m-input" data-default-value="{{ obj.getDateSchedule|default("now")|date('Y-m-d') }}" value="{{ obj.getDateSchedule|default("now")|date('d M Y') }}" readonly placeholder="Select a date" disabled>
|
<input type="text" name="date_schedule_date" class="form-control m-input" data-default-value="{{ obj.getDateSchedule|default("now")|date('Y-m-d') }}" value="{{ obj.getDateSchedule|default("now")|date('d M Y') }}" readonly placeholder="Select a date" disabled>
|
||||||
<span class="input-group-addon">
|
<span class="input-group-addon">
|
||||||
<i class="la la-calendar glyphicon-th"></i>
|
<i class="la la-calendar glyphicon-th"></i>
|
||||||
</span>
|
</span>
|
||||||
|
|
@ -297,7 +288,7 @@
|
||||||
<div class="col-lg-3">
|
<div class="col-lg-3">
|
||||||
<label data-field="date_schedule">Scheduled Time</label>
|
<label data-field="date_schedule">Scheduled Time</label>
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input type="text" id="date-schedule-time" name="date_schedule_time" class="form-control m-input tp" data-default-value="{{ obj.getDateSchedule|default("now")|date('g:i A') }}" value="{{ obj.getDateSchedule|default("now")|date('g:i A') }}" readonly placeholder="Select a time" disabled>
|
<input type="text" name="date_schedule_time" class="form-control m-input tp" data-default-value="{{ obj.getDateSchedule|default("now")|date('g:i A') }}" value="{{ obj.getDateSchedule|default("now")|date('g:i A') }}" readonly placeholder="Select a time" disabled>
|
||||||
<span class="input-group-addon">
|
<span class="input-group-addon">
|
||||||
<i class="la la-clock-o glyphicon-th"></i>
|
<i class="la la-clock-o glyphicon-th"></i>
|
||||||
</span>
|
</span>
|
||||||
|
|
@ -332,19 +323,13 @@
|
||||||
</select>
|
</select>
|
||||||
<div class="form-control-feedback hide" data-field="mode_of_payment"></div>
|
<div class="form-control-feedback hide" data-field="mode_of_payment"></div>
|
||||||
</div>
|
</div>
|
||||||
<br>
|
</div>
|
||||||
|
<div class="col-lg-6">
|
||||||
<div class="col-lg-12 form-group-inner">
|
<div class="col-lg-12 form-group-inner">
|
||||||
<label>Prepared By</label>
|
<label>Prepared By</label>
|
||||||
<input type="text" name="created_by" class="form-control m-input" value="{{ obj.getCreatedBy.getFullName|default('') }}" disabled>
|
<input type="text" name="created_by" class="form-control m-input" value="{{ obj.getCreatedBy.getFullName|default('') }}" disabled>
|
||||||
<div class="form-control-feedback hide" data-field="date_transaction"></div>
|
<div class="form-control-feedback hide" data-field="date_transaction"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="col-lg-6">
|
|
||||||
<div class="col-lg-12 form-group-inner">
|
|
||||||
<label>Responsible Party</label>
|
|
||||||
<input type="text" name="responsible_party" class="form-control m-input" value="{{ obj.getResponsibleParty|default('') }}" >
|
|
||||||
<div class="form-control-feedback hide" data-field="responsible_party"></div>
|
|
||||||
</div>
|
|
||||||
<br>
|
<br>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -372,6 +357,8 @@
|
||||||
<th>Hub</th>
|
<th>Hub</th>
|
||||||
<th>Branch</th>
|
<th>Branch</th>
|
||||||
<th>Contact Numbers</th>
|
<th>Contact Numbers</th>
|
||||||
|
<th>Distance in KM</th>
|
||||||
|
<th>Action</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody id="nearest_hubs">
|
<tbody id="nearest_hubs">
|
||||||
|
|
@ -380,12 +367,16 @@
|
||||||
<td>{{ obj.getHub.getName }}</td>
|
<td>{{ obj.getHub.getName }}</td>
|
||||||
<td>{{ obj.getHub.getBranch }}</td>
|
<td>{{ obj.getHub.getBranch }}</td>
|
||||||
<td>{{ obj.getHub.getContactNumbers }}</td>
|
<td>{{ obj.getHub.getContactNumbers }}</td>
|
||||||
|
<td></span></td>
|
||||||
|
<td></td>
|
||||||
{% else %}
|
{% else %}
|
||||||
{% for hub in hubs %}
|
{% for hub in hubs %}
|
||||||
<tr data-id="{{ hub.getID }}"{{ obj.getHub and obj.getHub.getID == hub.getID ? ' class="m-table__row--primary"' }}>
|
<tr data-id="{{ hub.getID }}"{{ obj.getHub and obj.getHub.getID == hub.getID ? ' class="m-table__row--primary"' }}>
|
||||||
<td>{{ hub.getName }}</td>
|
<td>{{ hub.getName }}</td>
|
||||||
<td>{{ hub.getBranch }}</td>
|
<td>{{ hub.getBranch }}</td>
|
||||||
<td>{{ hub.getContactNumbers }}</td>
|
<td>{{ hub.getContactNumbers }}</td>
|
||||||
|
<td></span></td>
|
||||||
|
<td></td>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
@ -407,7 +398,7 @@
|
||||||
<input type="text" name="or_name" id="or_name" class="form-control m-input" value="{{ obj.getORName|default('') }}">
|
<input type="text" name="or_name" id="or_name" class="form-control m-input" value="{{ obj.getORName|default('') }}">
|
||||||
<div class="form-control-feedback hide" data-field="or_name"></div>
|
<div class="form-control-feedback hide" data-field="or_name"></div>
|
||||||
</div>
|
</div>
|
||||||
<div style="display:none" class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<label data-field="promo_detail">Employee ID / Card Number / Referred By</label>
|
<label data-field="promo_detail">Employee ID / Card Number / Referred By</label>
|
||||||
<input type="text" name="promo_detail" id="promo_detail" class="form-control m-input" value="{{ obj.getPromoDetail|default('') }}">
|
<input type="text" name="promo_detail" id="promo_detail" class="form-control m-input" value="{{ obj.getPromoDetail|default('') }}">
|
||||||
<div class="form-control-feedback hide" data-field="promo_detail"></div>
|
<div class="form-control-feedback hide" data-field="promo_detail"></div>
|
||||||
|
|
@ -417,28 +408,10 @@
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<label>Discount</label>
|
<label>Discount</label>
|
||||||
{% if ftags.invoice_edit %}
|
{% if ftags.invoice_edit %}
|
||||||
<select class="form-control m-input" id="invoice-discount" name="invoice_discount">
|
<input type="number" id="invoice-discount" name="invoice_discount" class="form-control m-input min = "0" max="50" value="{{ obj.getInvoice ? obj.getInvoice.getDiscount }}">
|
||||||
<option value=""></option>
|
|
||||||
{% for discount in discounts %}
|
|
||||||
{% if obj.getInvoice %}
|
|
||||||
<option value="{{ discount }}"{{ obj.getInvoice.getDiscount|number_format(0) == discount ? ' selected' }}>{{ discount }}</option>
|
|
||||||
{% else %}
|
|
||||||
<option value="{{ discount }}">{{ discount }}</option>
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
</select>
|
|
||||||
<div class="form-control-feedback hide" data-field="invoice_discount"></div>
|
<div class="form-control-feedback hide" data-field="invoice_discount"></div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<select class="form-control m-input" id="invoice-discount" name="invoice_discount">
|
<input type="number" id="invoice-discount" name="invoice_discount" class="form-control m-input min="0" max="50" value="{{ obj.getInvoice ? obj.getInvoice.getDiscount }}" disabled>
|
||||||
<option value=""></option>
|
|
||||||
{% for discount in discounts %}
|
|
||||||
{% if obj.getInvoice %}
|
|
||||||
<option value="{{ discount }}"{{ obj.getInvoice.getDiscount == discount ? ' selected' }} disabled>{{ discount }}</option>
|
|
||||||
{% else %}
|
|
||||||
<option value="{{ discount }}" disabled>{{ discount }}</option>
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
</select>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
|
|
@ -754,8 +727,6 @@ var vdata = false;
|
||||||
} else {
|
} else {
|
||||||
$("#current-battery, #warranty-expiration").val("No current battery").css('color', '#f4516c');
|
$("#current-battery, #warranty-expiration").val("No current battery").css('color', '#f4516c');
|
||||||
}
|
}
|
||||||
|
|
||||||
$("#or_name").val(vdata.customer.first_name + ' ' + vdata.customer.last_name);
|
|
||||||
})
|
})
|
||||||
}).focus();
|
}).focus();
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
@ -1122,54 +1093,6 @@ var vdata = false;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#customer-first-name, #customer-last-name").change(function() {
|
|
||||||
// autopopulate OR name with customer name
|
|
||||||
var cust_name = $("#customer-first-name").val() + ' ' + $("#customer-last-name").val();
|
|
||||||
$("#or_name").val(cust_name);
|
|
||||||
});
|
|
||||||
|
|
||||||
$('.dp').on('changeDate', function() {
|
|
||||||
// check date schedule if it's earlier
|
|
||||||
// if so, show an alert to let user know
|
|
||||||
var date_time = $('#date-schedule-date').val() + ' ' + $('#date-schedule-time').val()
|
|
||||||
var date_schedule = new Date(date_time);
|
|
||||||
var current_date = new Date('{{ current_date|date('Y-m-d g:i A') }}');
|
|
||||||
|
|
||||||
// check if date is earlier than current
|
|
||||||
if (date_schedule < current_date)
|
|
||||||
{
|
|
||||||
swal({
|
|
||||||
title: 'Warning!',
|
|
||||||
text: 'Schedule date and time is before today\'s date and time.',
|
|
||||||
type: 'warning',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
$('.tp').on('changeTime.timepicker', function(e) {
|
|
||||||
// set the schedule time what the user selects
|
|
||||||
$('#date-schedule-time').val(e.time.value);
|
|
||||||
});
|
|
||||||
|
|
||||||
$('.tp').on('hide.timepicker', function(e) {
|
|
||||||
// check time schedule along with date if it's earlier than current date
|
|
||||||
var date_time = $('#date-schedule-date').val() + ' ' + $('#date-schedule-time').val()
|
|
||||||
var date_schedule = new Date(date_time);
|
|
||||||
var current_date = new Date('{{ current_date|date('Y-m-d g:i A') }}');
|
|
||||||
|
|
||||||
// check if date is earlier than current
|
|
||||||
if (date_schedule < current_date)
|
|
||||||
{
|
|
||||||
swal({
|
|
||||||
title: 'Warning!',
|
|
||||||
text: 'Schedule date and time is before today\'s date and time.',
|
|
||||||
type: 'warning',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
||||||
|
|
@ -94,12 +94,8 @@
|
||||||
},
|
},
|
||||||
rows: {
|
rows: {
|
||||||
beforeTemplate: function (row, data, index) {
|
beforeTemplate: function (row, data, index) {
|
||||||
if (data.status == 'In Progress') {
|
if (data.flag_advance) {
|
||||||
$(row).addClass('m-table__row--is_in_progress');
|
$(row).addClass('m-table__row--danger');
|
||||||
}
|
|
||||||
|
|
||||||
if (data.status == 'Assigned') {
|
|
||||||
$(row).addClass('m-table__row--is_assigned');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -136,14 +132,6 @@
|
||||||
field: 'date_schedule',
|
field: 'date_schedule',
|
||||||
title: 'Scheduled Date'
|
title: 'Scheduled Date'
|
||||||
},
|
},
|
||||||
{
|
|
||||||
field: 'date_start',
|
|
||||||
title: 'Start Date'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'date_finish',
|
|
||||||
title: 'Finish Date'
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
field: 'rider_name',
|
field: 'rider_name',
|
||||||
title: 'Rider'
|
title: 'Rider'
|
||||||
|
|
|
||||||
|
|
@ -1,199 +0,0 @@
|
||||||
{% extends 'base.html.twig' %}
|
|
||||||
|
|
||||||
{% block body %}
|
|
||||||
<!-- BEGIN: Subheader -->
|
|
||||||
<div class="m-subheader">
|
|
||||||
<div class="d-flex align-items-center">
|
|
||||||
<div class="mr-auto">
|
|
||||||
<h3 class="m-subheader__title">
|
|
||||||
Job Orders (Behind Schedule)
|
|
||||||
</h3>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!-- END: Subheader -->
|
|
||||||
<div class="m-content">
|
|
||||||
<!--Begin::Section-->
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-xl-12">
|
|
||||||
<div class="m-portlet m-portlet--mobile">
|
|
||||||
<div class="m-portlet__body">
|
|
||||||
<div class="m-form m-form--label-align-right m--margin-top-20 m--margin-bottom-30">
|
|
||||||
<div class="row align-items-center">
|
|
||||||
<div class="col-xl-12">
|
|
||||||
<div class="form-group m-form__group row align-items-center">
|
|
||||||
<div class="col-md-4">
|
|
||||||
<div class="m-input-icon m-input-icon--left">
|
|
||||||
<input type="text" class="form-control m-input m-input--solid" placeholder="Search..." id="data-rows-search">
|
|
||||||
<span class="m-input-icon__icon m-input-icon__icon--left">
|
|
||||||
<span><i class="la la-search"></i></span>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-4">
|
|
||||||
<div class="m-input-icon m-input-icon--left">
|
|
||||||
<div>
|
|
||||||
<select class="form-control m-input" id="rider_list" name="rider_list">
|
|
||||||
<option value="">All Riders</option>
|
|
||||||
{% for rider in riders %}
|
|
||||||
<option value="{{ rider.getID }}">{{ rider.getFirstName ~ ' ' ~ rider.getLastName }} </option>
|
|
||||||
{% endfor %}
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-4">
|
|
||||||
<div class="m-input-icon m-input-icon--left">
|
|
||||||
<div class="input-daterange input-group" id="date-range">
|
|
||||||
<input role="presentation" type="text" class="form-control m-input" id="date_start" name="date_start" placeholder="Start date" />
|
|
||||||
<div class="input-group-append">
|
|
||||||
<span class="input-group-text"><i class="la la-ellipsis-h"></i></span>
|
|
||||||
</div>
|
|
||||||
<input role="presentation" type="text" class="form-control" id="date_end" name="date_end" placeholder="End date" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!--begin: Datatable -->
|
|
||||||
<div id="data-rows"></div>
|
|
||||||
<!--end: Datatable -->
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block scripts %}
|
|
||||||
<script>
|
|
||||||
$(function() {
|
|
||||||
$("#date-range").datepicker({
|
|
||||||
orientation: "bottom"
|
|
||||||
});
|
|
||||||
var options = {
|
|
||||||
data: {
|
|
||||||
type: 'remote',
|
|
||||||
source: {
|
|
||||||
read: {
|
|
||||||
url: '{{ url('jo_behind_schedule_rows') }}',
|
|
||||||
method: 'POST'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
saveState: {
|
|
||||||
cookie: false,
|
|
||||||
webstorage: false
|
|
||||||
},
|
|
||||||
pageSize: 10,
|
|
||||||
serverPaging: true,
|
|
||||||
serverFiltering: true,
|
|
||||||
serverSorting: true
|
|
||||||
},
|
|
||||||
columns: [
|
|
||||||
{
|
|
||||||
field: 'id',
|
|
||||||
title: 'JO #'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'plate_number',
|
|
||||||
title: 'Plate #'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'car_model',
|
|
||||||
title: 'Car Model'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'customer_name',
|
|
||||||
title: 'Customer'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'service_type',
|
|
||||||
title: 'Service Type',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'delivery_address',
|
|
||||||
title: 'Area'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'type',
|
|
||||||
title: 'Schedule'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'date_start',
|
|
||||||
title: 'Start Date'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'date_schedule',
|
|
||||||
title: 'Scheduled Date'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'rider_name',
|
|
||||||
title: 'Rider'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'rider_plate_number',
|
|
||||||
title: 'Rider Plate #'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'status',
|
|
||||||
title: 'Status'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'processor',
|
|
||||||
title: 'Dispatcher'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'Actions',
|
|
||||||
width: 110,
|
|
||||||
title: 'Actions',
|
|
||||||
sortable: false,
|
|
||||||
overflow: 'visible',
|
|
||||||
template: function (row, index, datatable) {
|
|
||||||
{% if is_granted('jo_onestep.edit') %}
|
|
||||||
var actions = '<a href="' + row.meta.onestep_edit_url + '" class="m-portlet__nav-link btn m-btn m-btn--hover-accent m-btn--icon m-btn--icon-only m-btn--pill btn-reassign-hub" title="Edit"><i class="fa fa-file"></i></a>';
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
return actions;
|
|
||||||
},
|
|
||||||
}
|
|
||||||
],
|
|
||||||
search: {
|
|
||||||
onEnter: false,
|
|
||||||
input: $('#data-rows-search'),
|
|
||||||
delay: 400
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
var table = $("#data-rows").mDatatable(options);
|
|
||||||
|
|
||||||
// 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");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
@ -93,12 +93,12 @@
|
||||||
},
|
},
|
||||||
rows: {
|
rows: {
|
||||||
beforeTemplate: function (row, data, index) {
|
beforeTemplate: function (row, data, index) {
|
||||||
if (data.status == 'In Progress') {
|
if (data.flag_advance) {
|
||||||
$(row).addClass('m-table__row--is_in_progress');
|
$(row).addClass('m-table__row--danger');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.status == 'Assigned') {
|
if (data.is_mobile) {
|
||||||
$(row).addClass('m-table__row--is_assigned');
|
$(row).addClass('m-table__row--is_mobile');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -131,10 +131,6 @@
|
||||||
field: 'type',
|
field: 'type',
|
||||||
title: 'Schedule'
|
title: 'Schedule'
|
||||||
},
|
},
|
||||||
{
|
|
||||||
field: 'date_start',
|
|
||||||
title: 'Start Date'
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
field: 'date_schedule',
|
field: 'date_schedule',
|
||||||
title: 'Scheduled Date'
|
title: 'Scheduled Date'
|
||||||
|
|
|
||||||
|
|
@ -1,27 +1,27 @@
|
||||||
# text
|
# text
|
||||||
title_login: Res-Q for CMB | Login
|
title_login: Motolite Res-Q | Login
|
||||||
block_title: Res-Q for CMB
|
block_title: Motolite Res-Q
|
||||||
control_panel_sign_in: Sign-in to Control Panel
|
control_panel_sign_in: Sign-in to Control Panel
|
||||||
alt_image_logo_login: Res-Q for CMB
|
alt_image_logo_login: Res-Q
|
||||||
alt_image_dashboard: Res-Q for CMB
|
alt_image_dashboard: Motolite
|
||||||
copyright: Res-Q for CMB
|
copyright: Motolite Res-Q
|
||||||
battery_size_tradein_brand: Trade-in Motolite
|
battery_size_tradein_brand: Trade-in Motolite
|
||||||
battery_size_tradein_premium: Trade-in Premium
|
battery_size_tradein_premium: Trade-in Premium
|
||||||
battery_size_tradein_other: Trade-in Other
|
battery_size_tradein_other: Trade-in Other
|
||||||
add_cust_vehicle_battery_info: This vehicle is using a Motolite battery
|
add_cust_vehicle_battery_info: This vehicle is using a Motolite battery
|
||||||
jo_title_pdf: Res-Q for CMB Job Order
|
jo_title_pdf: Motolite Res-Q Job Order
|
||||||
country_code_prefix: '+60'
|
country_code_prefix: '+63'
|
||||||
delivery_instructions_label: 'CarFix Details'
|
delivery_instructions_label: Delivery Instructions
|
||||||
|
|
||||||
# images
|
# images
|
||||||
image_logo_login: /assets/images/black-text-logo-01.png
|
image_logo_login: /assets/images/logo-resq.png
|
||||||
icon_login: /assets/images/battery-assist-bm-logo-32x32.png
|
icon_login: /assets/demo/default/media/img/logo/favicon.ico
|
||||||
icon_base_32x32: /assets/images/black-text-logo-01-32x32.png
|
icon_base_32x32: /assets/images/favicon/favicon-32x32.png
|
||||||
icon_base_16x16: /assets/images/black-text-logo-01-16x16.png
|
icon_base_16x16: /assets/images/favicon/favicon-16x16.png
|
||||||
image_dashboard: /assets/images/century_logo.png
|
image_dashboard: /assets/images/logo-motolite.png
|
||||||
image_jo_pdf: /public/assets/images/black-text-logo-01-115x115.png
|
image_jo_pdf: /public/assets/images/logo-resq.png
|
||||||
|
|
||||||
# default point for maps
|
# default point for maps
|
||||||
default_lat: 3.084216
|
default_lat: 14.6091
|
||||||
default_long: 101.6129996
|
default_long: 121.0223
|
||||||
default_region: my
|
default_region: ph
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue