Initial commit

This commit is contained in:
meusinfirmary
2025-04-22 14:31:37 +07:00
commit b7e852126c
115 changed files with 23188 additions and 0 deletions

80
models/DanaModels.js Normal file
View File

@ -0,0 +1,80 @@
const db = require(`../config/dbMysqlConn`);
const MysqlHelpers = require(`../library/LibMysqlHelper`);
class DanaModels {
static PK_ID = 1;
static MINIMUM_AMT = 1000000; // 9M
static list(filter = {}) {
return new Promise(async (resolve, reject) => {
let params = [], select = '', where = '', join = '', order_by = '', group_by = '', limit = '';
if (filter['id']) {
where += ' AND dana.id = ?';
params.push(filter['id']);
}
if (filter['group_by']) {
group_by = filter['group_by'];
}
if (filter['limit']) {
limit = ' LIMIT ' + filter['limit'];
}
let query = `SELECT
dana.*
${select}
FROM t_dana as dana
${join}
WHERE dana.id is not null
${where}
${group_by}
${order_by}
${limit}
;`;
try {
const conn = await MysqlHelpers.createConnection();
const result = await MysqlHelpers.query(conn, query, params);
await MysqlHelpers.releaseConnection(conn);
resolve(result);
} catch (e) {
reject(e);
}
// db.query(query, params, function (err, resp) {
// if (err) {
// reject(err);
// return false;
// }
// resolve(resp);
// return true;
// });
});
}
static bundleUpdt (updtDana = {}) {
return new Promise(async (resolve, reject) => {
try {
const conn = await MysqlHelpers.createConnection();
await MysqlHelpers.createTrx(conn);
let result = undefined;
if (Object.keys(updtDana).length > 0) result = await MysqlHelpers.queryTrx(conn, `UPDATE t_dana SET ? WHERE id = ?;`, [updtDana, updtDana.id]);
await MysqlHelpers.commit(conn);
resolve({
type: 'success',
result,
})
} catch (err) {
reject(err);
}
})
}
}
module.exports = DanaModels;

295
models/DriversModels.js Normal file
View File

@ -0,0 +1,295 @@
const db = require(`../config/dbMysqlConn`);
const MysqlHelpers = require(`../library/LibMysqlHelper`);
class DriversModels {
static DEFAULT_PHONE_CODE = 62;
// t_drivers
static IS_INACTIVE = 0;
static IS_ACTIVE = 1;
static IN_ORD_YES = 1;
static IN_ORD_NO = 2;
// t_phone_devices
static IS_LOGOUT = 0;
static IS_LOGIN = 1;
// start t_drivers
static all() {
return new Promise(async (resolve, reject) => {
const query = `SELECT * FROM t_drivers;`;
try {
const conn = await MysqlHelpers.createConnection();
const result = await MysqlHelpers.query(conn, query);
await MysqlHelpers.releaseConnection(conn);
resolve(result);
} catch (e) {
reject(e);
}
// db.query(query, (err, results) => {
// if (err) {
// reject(err);
// return false;
// }
// resolve(results);
// });
});
}
static find(id) {
return new Promise(async (resolve, reject) => {
const query = `SELECT * FROM t_drivers WHERE id = ? LIMIT 1;`;
try {
const conn = await MysqlHelpers.createConnection();
const result = await MysqlHelpers.query(conn, query, [id]);
await MysqlHelpers.releaseConnection(conn);
resolve(result);
} catch (e) {
reject(e);
}
// db.query(query, [id], (err, results) => {
// if (err) {
// reject(err);
// return false;
// }
// resolve(results);
// });
});
}
static findPhone(phone) {
return new Promise(async (resolve, reject) => {
const query = `SELECT * FROM t_drivers WHERE dlt is null AND phone = ? LIMIT 1;`;
try {
const conn = await MysqlHelpers.createConnection();
const result = await MysqlHelpers.query(conn, query, [phone]);
await MysqlHelpers.releaseConnection(conn);
resolve(result);
} catch (e) {
reject(e);
}
// db.query(query, [phone], (err, results) => {
// if (err) {
// reject(err);
// return false;
// }
// resolve(results);
// });
});
}
static create(data) {
return new Promise(async (resolve, reject) => {
const query = `INSERT INTO t_drivers SET ?;`;
db.query(query, data, (err, results) => {
if (err) {
reject(err);
return false;
}
resolve(results);
});
});
}
static update(data, id) {
return new Promise(async (resolve, reject) => {
const query = `UPDATE t_drivers SET ? WHERE id = ?;`;
db.query(query, [data, id], (err, results) => {
if (err) {
reject(err);
return false;
}
resolve(results);
});
});
}
static delete(id) {
return new Promise(async (resolve, reject) => {
const query = `DELETE FROM t_drivers WHERE id = ?;`;
db.query(query, [id], (err, results) => {
if (err) {
reject(err);
return false;
}
resolve(results);
});
});
}
static bundleUpdtOrdDrvVhc (updtDrv = {}, updtVhc = {}) {
return new Promise(async (resolve, reject) => {
try {
const conn = await MysqlHelpers.createConnection();
await MysqlHelpers.createTrx(conn);
let result = undefined;
if (Object.keys(updtDrv).length > 0) result = await MysqlHelpers.queryTrx(conn, `UPDATE t_drivers SET ? WHERE id = ?;`, [updtDrv, updtDrv.id]);
if (Object.keys(updtVhc).length > 0) result = await MysqlHelpers.queryTrx(conn, `UPDATE t_vehicles SET ? WHERE id = ?;`, [updtVhc, updtVhc.id]);
await MysqlHelpers.commit(conn);
resolve({
type: 'success',
result,
})
} catch (err) {
reject(err);
}
})
}
// end t_drivers
// start t_phone_devices
static getDeviceByDid(did) {
return new Promise(async (resolve, reject) => {
const query = `SELECT * FROM t_phone_devices WHERE dlt is null AND did = ? LIMIT 1;`;
try {
const conn = await MysqlHelpers.createConnection();
const result = await MysqlHelpers.query(conn, query, [did]);
await MysqlHelpers.releaseConnection(conn);
resolve(result);
} catch (e) {
reject(e);
}
// db.query(query, [did], (err, results) => {
// if (err) {
// reject(err);
// return false;
// }
// resolve(results);
// });
});
}
static getDeviceByImei(device_id) {
return new Promise(async (resolve, reject) => {
const query = `SELECT * FROM t_phone_devices WHERE dlt is null AND device_id = ? LIMIT 1;`;
try {
const conn = await MysqlHelpers.createConnection();
const result = await MysqlHelpers.query(conn, query, [device_id]);
await MysqlHelpers.releaseConnection(conn);
resolve(result);
} catch (e) {
reject(e);
}
// db.query(query, [device_id], (err, results) => {
// if (err) {
// reject(err);
// return false;
// }
// resolve(results);
// });
});
}
static getDriversLogin(is_login) {
return new Promise(async (resolve, reject) => {
const query = `SELECT * FROM t_phone_devices WHERE dlt is null AND is_login = ?;`;
try {
const conn = await MysqlHelpers.createConnection();
const result = await MysqlHelpers.query(conn, query, [is_login]);
await MysqlHelpers.releaseConnection(conn);
resolve(result);
} catch (e) {
reject(e);
}
// db.query(query, [device_id], (err, results) => {
// if (err) {
// reject(err);
// return false;
// }
// resolve(results);
// });
});
}
static insPhoneDevice(data) {
return new Promise(async (resolve, reject) => {
const query = `INSERT INTO t_phone_devices SET ?;`;
db.getConnection(function (err, conn) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.beginTransaction(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.query(query, data, function (err, resp) {
if (err) {
conn.rollback(async function () {
conn.release();
reject(err.message);
});
return false;
}
// Number(resp.insertId);
conn.commit(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.release();
resolve(resp);
return true;
});
});
});
});
});
}
static updtPhoneDevice(data, id) {
return new Promise(async (resolve, reject) => {
const query = `UPDATE t_phone_devices SET ? WHERE id = ?;`;
db.getConnection(function (err, conn) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.beginTransaction(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.query(query, [data, id], function (err, resp) {
if (err) {
conn.rollback(async function () {
conn.release();
reject(err.message);
});
return false;
}
conn.commit(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.release();
resolve(resp);
return true;
});
});
});
});
});
}
// end t_phone_devices
}
module.exports = DriversModels;

214
models/DummyModels.js Normal file
View File

@ -0,0 +1,214 @@
const db = require(`../config/dbMysqlConn`);
class DummyModels {
static DEFAULT_COUNTRY_ID = 1;
static TYPE_ADDR_OSM = 1;
static STTS_REVERSE_GEO_SC = 1;
static STTS_REVERSE_GEO_NOT = 2;
static STTS_REVERSE_GEO_ER = 3;
static STTS_REVERSE_GEO_LOST = 4;
static async create(data) {
return new Promise((resolve, reject) => {
const query = `INSERT INTO t_dummy_gps SET ?;`;
db.getConnection(function (err, conn) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.beginTransaction(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.query(query, data, function (err, resp) {
if (err) {
conn.rollback(async function () {
conn.release();
reject(err.message);
});
return false;
}
// Number(resp.insertId);
conn.commit(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.release();
resolve(resp);
return true;
});
});
});
});
});
}
static async create2(data) {
return new Promise((resolve, reject) => {
const query = `INSERT INTO t_dummy_gps2 SET ?;`;
db.getConnection(function (err, conn) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.beginTransaction(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.query(query, data, function (err, resp) {
if (err) {
conn.rollback(async function () {
conn.release();
reject(err.message);
});
return false;
}
// Number(resp.insertId);
conn.commit(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.release();
resolve(resp);
return true;
});
});
});
});
});
}
static async get2() {
return new Promise((resolve, reject) => {
let params = [];
let query = 'SELECT * FROM t_dummy_gps2 ORDER BY id DESC LIMIT 1000';
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async get2ForReverseGeo(limit) {
return new Promise((resolve, reject) => {
let params = [];
let query = 'SELECT * FROM t_dummy_gps2 WHERE latitude is not null AND longitude is not null AND stts_reverse_geo = ? ORDER BY id ASC LIMIT ?';
params.push(DummyModels.STTS_REVERSE_GEO_NOT, limit);
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async update2(id, data) {
return new Promise((resolve, reject) => {
const query = `UPDATE t_dummy_gps2 SET ? WHERE id = ?;`;
db.getConnection(function (err, conn) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.beginTransaction(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.query(query, [data, id], function (err, resp) {
if (err) {
conn.rollback(async function () {
conn.release();
reject(err.message);
});
return false;
}
conn.commit(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.release();
resolve(resp);
return true;
});
});
});
});
});
}
static async create2Address(data) {
return new Promise((resolve, reject) => {
const query = `INSERT INTO t_dummy_gps2_address SET ?;`;
db.getConnection(function (err, conn) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.beginTransaction(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.query(query, data, function (err, resp) {
if (err) {
conn.rollback(async function () {
conn.release();
reject(err.message);
});
return false;
}
// Number(resp.insertId);
conn.commit(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.release();
resolve(resp);
return true;
});
});
});
});
});
}
}
module.exports = DummyModels;

596
models/GpsTracksModels.js Normal file
View File

@ -0,0 +1,596 @@
const db = require(`../config/dbMysqlConn`);
const MysqlHelpers = require(`../library/LibMysqlHelper`);
class GpsTracksModels {
static DEFAULT_COUNTRY_ID = 1;
static TYPE_ADDR_OSM = 1;
static STTS_REVERSE_GEO_SC = 1;
static STTS_REVERSE_GEO_NOT = 2;
static STTS_REVERSE_GEO_ER = 3;
static STTS_REVERSE_GEO_LOST = 4;
static STTS_EN_DFT = 0;
static STTS_EN_IDLING = 1;
static STTS_EN_MOVING = 2;
static STTS_EN_STOPING = 3;
static STTS_IGNITION_DFT = 0;
static STTS_IGNITION_ON = 1;
static STTS_IGNITION_OFF = 2;
static STTS_IGNITION_LOW = 3;
static STTS_IGNITION_HIGH = 4;
static STTS_GPS_DFT = 0; // default
static STTS_GPS_ON = 1;
static STTS_GPS_OFF = 2;
// realtime GPS or differential positioning
static STTS_POS_TYPE_GPS_DFT = 0; // default
static STTS_POS_TYPE_GPS_DIFF = 1;
static STTS_POS_TYPE_GPS_RLTM = 2;
// GPS has been positioned or not
static STTS_IS_POS_GPS_DFT = 0; // default
static STTS_IS_POS_GPS_NOT = 1; // not positioning
static STTS_IS_POS_GPS_HAS = 2; // positioning
// 1=>no signal, 2=>extremely weak signal 3=>very weak signal, 4=>good signal, 5=>strong signal
static STTS_GSM_DFT = 0; // default
static STTS_GSM_NO_SIGNAL = 1;
static STTS_GSM_BAD_SIGNAL = 2;
static STTS_GSM_WEAK_SIGNAL = 3;
static STTS_GSM_GOOD_SIGNAL = 4;
static STTS_GSM_STRONG_SIGNAL = 5;
static STTS_OIL_ELECTRIC_DFT = 0;
static STTS_OIL_ELECTRIC_ON = 1;
static STTS_OIL_ELECTRIC_OFF = 2;
static STTS_ALARM_DFT = 0;
static STTS_ALARM_NORMAL = 1;
static STTS_ALARM_SHOCK = 2;
static STTS_ALARM_POWER_CUT = 3;
static STTS_ALARM_LOW_BATTERY = 4;
static STTS_ALARM_SOS = 5;
static STTS_CHARGE_DFT = 0;
static STTS_CHARGE_OFF = 1;
static STTS_CHARGE_ON = 2;
static STTS_ACC_DFT = 0;
static STTS_ACC_LOW = 1;
static STTS_ACC_HIGH = 2;
static STTS_VOLT_DFT = 0;
static STTS_VOLT_SHUTDOWN = 1;
static STTS_VOLT_EXTREME_LOW_BATTERY = 2;
static STTS_VOLT_VERY_LOW_BATTERY = 3;
static STTS_VOLT_LOW_BATTERY = 4;
static STTS_VOLT_MEDIUM = 5;
static STTS_VOLT_HIGH = 6;
static STTS_VOLT_VERY_HIGH = 7;
static STTS_SWITCH_DFT = 0;
static STTS_SWITCH_OFF = 1;
static STTS_SWITCH_ON = 2;
static STTS_ENTER_ZONE = 1;
static STTS_LEAVE_ZONE = 2;
// type source
static SOURCE_GPS_TRACKER = 1;
static SOURCE_SMARTPHONE = 2;
static PROTOCOL_SMARTPHONE = 'smartphone';
static ACT_LOGIN = 'login';
static ACT_HEARTBEAT = 'heartbeat';
static ACT_LOCATION = 'location';
static ACT_OTHER = 'other';
static async create2(data) {
return new Promise((resolve, reject) => {
const query = `INSERT INTO t_gps_tracks SET ?;`;
db.getConnection(function (err, conn) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.beginTransaction(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.query(query, data, function (err, resp) {
if (err) {
conn.rollback(async function () {
conn.release();
reject(err.message);
});
return false;
}
// Number(resp.insertId);
conn.commit(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.release();
resolve(resp);
return true;
});
});
});
});
});
}
static bundleCreate2 (logs = {}, rltm = {}) {
return new Promise(async (resolve, reject) => {
try {
const conn = await MysqlHelpers.createConnection();
await MysqlHelpers.createTrx(conn);
let rltmLength = Object.keys(rltm).length;
let resLogs = undefined;
if (Object.keys(logs).length > 0) resLogs = await MysqlHelpers.queryTrx(conn, `INSERT INTO t_gps_tracks SET ?;`, [logs]);
if (rltmLength > 0 && typeof resLogs !== 'undefined') rltm.master_id = resLogs.insertId;
if (rltmLength > 0 && rltm.latitude !== null && rltm.longitude !== null) {
let devices = await MysqlHelpers.queryTrx(conn, `SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.device_id = ?`, [rltm.device_id]);
if (devices.length > 1) await MysqlHelpers.queryTrx(conn, `DELETE from t_gps_tracks_rltm WHERE device_id = ?;`, [rltm.device_id]);
if (rltm.vhc_id != 0) {
let vhcs = await MysqlHelpers.queryTrx(conn, `SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.vhc_id = ?`, [rltm.vhc_id]);
if (vhcs.length > 1) await MysqlHelpers.queryTrx(conn, `DELETE from t_gps_tracks_rltm WHERE vhc_id = ?;`, [rltm.vhc_id]);
}
if (rltm.drv_id != 0) {
let drvs = await MysqlHelpers.queryTrx(conn, `SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.drv_id = ?`, [rltm.drv_id]);
if (drvs.length > 1) await MysqlHelpers.queryTrx(conn, `DELETE from t_gps_tracks_rltm WHERE drv_id = ?;`, [rltm.drv_id]);
}
await MysqlHelpers.queryTrx(conn, `INSERT INTO t_gps_tracks_rltm SET ? ON DUPLICATE KEY UPDATE ?;`, [rltm, rltm]);
}
await MysqlHelpers.commit(conn);
resolve({
type: 'success',
result: resLogs,
})
} catch (err) {
console.log('err');
reject(err);
}
})
}
static async get2() {
return new Promise((resolve, reject) => {
let params = [];
let query = 'SELECT * FROM t_gps_tracks ORDER BY id DESC LIMIT 1000';
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async get2ForReverseGeo(limit) {
return new Promise((resolve, reject) => {
let params = [];
let query = 'SELECT * FROM t_gps_tracks WHERE latitude is not null AND longitude is not null AND stts_reverse_geo = ? ORDER BY id ASC LIMIT ?';
params.push(GpsTracksModels.STTS_REVERSE_GEO_NOT, limit);
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async get2LastDevice(device_id) {
return new Promise((resolve, reject) => {
let params = [];
let query = 'SELECT * FROM t_gps_tracks WHERE device_id = ? ORDER BY id DESC LIMIT 1';
params.push(device_id);
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async get2LastLocByDeviceId(device_id) {
return new Promise((resolve, reject) => {
let params = [];
// let query = 'SELECT * FROM t_gps_tracks WHERE device_id = ? AND latitude is not null AND longitude != 0 ORDER BY id DESC LIMIT 1';
let query = 'SELECT * FROM t_gps_tracks WHERE action IN ("location","alarm") AND device_id = ? AND latitude is not null AND longitude != 0 ORDER BY id DESC LIMIT 1'; // kalo gamau ngambil data heartbeat(idling)
params.push(device_id);
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async get2LastLoc(filter = {}) {
return new Promise((resolve, reject) => {
let params = [], where = '';
if (filter['device_id']) {
where += ' AND device_id = ?';
params.push(filter['device_id']);
} else if (filter['vhc_id']) {
where += ' AND vhc_id = ?';
params.push(filter['vhc_id']);
} else if (filter['drv_id']) {
where += ' AND drv_id = ?';
params.push(filter['drv_id']);
} else {
reject(false);
return false;
}
let query = `SELECT * FROM t_gps_tracks WHERE latitude is not null AND longitude != 0 ${where} ORDER BY id DESC LIMIT 1`;
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async getLastLocAndAddrByDid(filter = {}) {
return new Promise((resolve, reject) => {
let params = [], where = '', limit = '';
if (typeof filter['did'] !== 'undefined') {
where += ' AND tr.drv_id = ?';
params.push(filter['did']);
}
if (typeof filter['limit'] !== 'undefined') {
limit += ' LIMIT ?';
params.push(filter['limit']);
}
let query = `SELECT tr.*,tra.state_text,tra.city_text,tra.district_text,tra.village_text,tra.postcode,tra.streets,tra.fulladdress FROM t_gps_tracks as tr LEFT JOIN t_gps_tracks_address as tra ON tr.id = tra.master_id WHERE latitude is not null AND longitude != 0 ${where} ORDER BY id DESC ${limit}`;
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async checkSttsEngineBetweenDate(device_id, stts_engine, start, end) {
return new Promise((resolve, reject) => {
let params = [];
let query = 'SELECT * FROM t_gps_tracks WHERE device_id = ? AND stts_engine = ? AND crt BETWEEN ? AND ? ORDER BY id ASC LIMIT 1';
params.push(device_id, stts_engine, start, end);
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async get2LastHeartbeatOrAlarm(device_id) {
return new Promise((resolve, reject) => {
let params = [];
let query = 'SELECT * FROM t_gps_tracks WHERE device_id = ? AND action IN ("heartbeat","alarm") AND stts_gps != 0 AND stts_gsm != 0 ORDER BY id DESC LIMIT 1';
params.push(device_id);
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async getLastHeartbeatToDeterminIdling(device_id, lst_pos_crt, now) {
return new Promise((resolve, reject) => {
let params = [];
let query = 'SELECT * FROM t_gps_tracks WHERE device_id = ? AND action IN ("heartbeat") AND stts_gps != 0 AND crt BETWEEN '+lst_pos_crt+' AND '+now+' ORDER BY id DESC;';
params.push(device_id);
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async update2(id, data) {
return new Promise((resolve, reject) => {
const query = `UPDATE t_gps_tracks SET ? WHERE id = ?;`;
db.getConnection(function (err, conn) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.beginTransaction(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.query(query, [data, id], function (err, resp) {
if (err) {
conn.rollback(async function () {
conn.release();
reject(err.message);
});
return false;
}
conn.commit(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.release();
resolve(resp);
return true;
});
});
});
});
});
}
static async select2Address(lat = '', lng = '') {
return new Promise((resolve, reject) => {
let params = [];
let query = 'SELECT * FROM t_gps_tracks_address WHERE stts_reverse_geo = '+GpsTracksModels.STTS_REVERSE_GEO_SC+' AND lat = ? AND lng = ? ORDER BY id DESC LIMIT 1;';
params.push(lat, lng);
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async create2Address(data) {
return new Promise((resolve, reject) => {
const query = `INSERT INTO t_gps_tracks_address SET ?;`;
db.getConnection(function (err, conn) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.beginTransaction(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.query(query, data, function (err, resp) {
if (err) {
conn.rollback(async function () {
conn.release();
reject(err.message);
});
return false;
}
// Number(resp.insertId);
conn.commit(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.release();
resolve(resp);
return true;
});
});
});
});
});
}
static async create2SpawnZone(data) {
return new Promise((resolve, reject) => {
const query = `INSERT INTO t_gps_tracks_spawn SET ?;`;
db.getConnection(function (err, conn) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.beginTransaction(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.query(query, data, function (err, resp) {
if (err) {
conn.rollback(async function () {
conn.release();
reject(err.message);
});
return false;
}
// Number(resp.insertId);
conn.commit(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.release();
resolve(resp);
return true;
});
});
});
});
});
}
static async updt2SpawnZone(data, id) {
return new Promise((resolve, reject) => {
const query = `UPDATE t_gps_tracks_spawn SET ? WHERE id = ?;`;
db.getConnection(function (err, conn) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.beginTransaction(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.query(query, [data, id], function (err, resp) {
if (err) {
conn.rollback(async function () {
conn.release();
reject(err.message);
});
return false;
}
// Number(resp.insertId);
conn.commit(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.release();
resolve(resp);
return true;
});
});
});
});
});
}
static listSpawnZone(filter = {}) {
return new Promise(async (resolve, reject) => {
let params = [], select = '', where = '', join = '', order_by = '', group_by = '', limit = '';
if (filter['zone_id']) {
where += ' AND spawn.zone_id = ?';
params.push(filter['zone_id']);
}
if (filter['ord_id']) {
where += ' AND spawn.ord_id = ?';
params.push(filter['ord_id']);
}
if (filter['ord_pck_drop_id']) {
where += ' AND spawn.ord_pck_drop_id = ?';
params.push(filter['ord_pck_drop_id']);
}
if (filter['drv_id']) {
where += ' AND spawn.drv_id = ?';
params.push(filter['drv_id']);
}
if (filter['vhc_id']) {
where += ' AND spawn.vhc_id = ?';
params.push(filter['vhc_id']);
}
if (filter['source']) {
where += ' AND spawn.source = ?';
params.push(filter['source']);
}
if (typeof filter['leave_at_d'] != undefined) {
where += ' AND spawn.leave_at_d = ?';
params.push(filter['leave_at_d']);
}
if (filter['group_by']) {
group_by = filter['group_by'];
}
if (filter['order_by']) {
order_by = filter['order_by'];
}
if (filter['limit']) {
limit = ' LIMIT ' + filter['limit'];
}
let query = `SELECT
spawn.*
${select}
FROM t_gps_tracks_spawn as spawn
${join}
WHERE spawn.master_id != 0
${where}
${group_by}
${order_by}
${limit}
;`;
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
}
module.exports = GpsTracksModels;

155
models/LogbookKeysModels.js Normal file
View File

@ -0,0 +1,155 @@
// const db = require(`../config/dbMysqlConn`);
const MysqlHelpers = require(`../library/LibMysqlHelper`);
class LogbookKeysModels {
static IS_INACTIVE = 0;
static IS_ACTIVE = 1;
// t_datatypes;
static TEXT = 'string';
static NUMBER = 'int';
static IMG_BASE64 = 'img_base64';
static COMMA = 'double';
static list(filter = {}) {
return new Promise(async (resolve, reject) => {
let params = [], select = '', where = '', join = '', order_by = '', group_by = '', limit = '';
if (filter['lgb_id']) {
where += ' AND lgb_key.id = ?';
params.push(filter['lgb_id']);
}
if (filter['is_active']) {
where += ' AND lgb_key.is_active = ?';
params.push(filter['is_active']);
}
if (filter['join_type']) {
select += ',lgb_type.name as type_name';
join += ' LEFT JOIN t_lgb_types as lgb_type ON lgb_key.type = lgb_type.id';
}
if (filter['group_by']) group_by = ' GROUP BY ' + filter['group_by'];
if (filter['order_by']) order_by = ' ORDER BY ' + filter['order_by'];
if (filter['limit']) limit = ' LIMIT ' + filter['limit'];
let query = `SELECT
lgb_key.*,lgb_key.id as lgb_id
${select}
FROM t_lgb_keys as lgb_key
${join}
WHERE lgb_key.dlt is null
${where}
${group_by}
${order_by}
${limit}
;`;
try {
const conn = await MysqlHelpers.createConnection();
const result = await MysqlHelpers.query(conn, query, params);
await MysqlHelpers.releaseConnection(conn);
resolve(result);
} catch (e) {
reject(e);
}
// db.query(query, params, function (err, resp) {
// if (err) {
// reject(err);
// return false;
// }
// resolve(resp);
// return true;
// });
});
}
static gets() {
return new Promise(async (resolve, reject) => {
let params = [];
let query = 'SELECT * FROM t_lgb_keys WHERE dlt is null;';
try {
const conn = await MysqlHelpers.createConnection();
const result = await MysqlHelpers.query(conn, query, params);
await MysqlHelpers.releaseConnection(conn);
resolve(result);
} catch (e) {
reject(e);
}
// db.query(query, params, function (err, resp) {
// if (err) {
// reject(err);
// return false;
// }
// resolve(resp);
// return true;
// });
});
}
static ins(ins = {}) {
return new Promise(async (resolve, reject) => {
try {
const conn = await MysqlHelpers.createConnection();
await MysqlHelpers.createTrx(conn);
let result = undefined;
if (Object.keys(ins).length > 0) result = await MysqlHelpers.queryTrx(conn, `INSERT t_lgb_keys SET ?;`, [ins]);
await MysqlHelpers.commit(conn);
resolve({
type: 'success',
result,
})
} catch (err) {
reject(err);
}
})
}
static updt(updt = {}) {
return new Promise(async (resolve, reject) => {
try {
const conn = await MysqlHelpers.createConnection();
await MysqlHelpers.createTrx(conn);
let result = undefined;
if (Object.keys(updt).length > 0) result = await MysqlHelpers.queryTrx(conn, `UPDATE t_lgb_keys SET ? WHERE id = ?;`, [updt, updt.id]);
await MysqlHelpers.commit(conn);
resolve({
type: 'success',
result,
})
} catch (err) {
reject(err);
}
})
}
static del(del = {}) {
return new Promise(async (resolve, reject) => {
try {
const conn = await MysqlHelpers.createConnection();
await MysqlHelpers.createTrx(conn);
let result = undefined;
if (Object.keys(del).length > 0) result = await MysqlHelpers.queryTrx(conn, `DELETE t_lgb_keys WHERE id = ?;`, [del.id]);
await MysqlHelpers.commit(conn);
resolve({
type: 'success',
result,
})
} catch (err) {
reject(err);
}
})
}
}
module.exports = LogbookKeysModels;

View File

@ -0,0 +1,144 @@
// const db = require(`../config/dbMysqlConn`);
const MysqlHelpers = require(`../library/LibMysqlHelper`);
class LogbookOrdersModels {
static IS_INACTIVE = 0;
static IS_ACTIVE = 1;
static list(filter = {}) {
return new Promise(async (resolve, reject) => {
let params = [], select = '', where = '', join = '', order_by = '', group_by = '', limit = '';
if (filter['ord_lgb_id']) {
where += ' AND ord_lgb.id = ?';
params.push(filter['ord_lgb_id']);
}
if (filter['is_active']) {
where += ' AND ord_lgb.is_active = ?';
params.push(filter['is_active']);
}
if (filter['group_by']) group_by = ' GROUP BY ' + filter['group_by'];
if (filter['order_by']) order_by = ' ORDER BY ' + filter['order_by'];
if (filter['limit']) limit = ' LIMIT ' + filter['limit'];
let query = `SELECT
ord_lgb.*,ord_lgb.id as ord_lgb_id,COLUMN_JSON(ord_lgb.dy_cols) as dy_cols_json
${select}
FROM t_orders_lgb as ord_lgb
${join}
WHERE ord_lgb.dlt is null
${where}
${group_by}
${order_by}
${limit}
;`;
try {
const conn = await MysqlHelpers.createConnection();
const result = await MysqlHelpers.query(conn, query, params);
await MysqlHelpers.releaseConnection(conn);
resolve(result);
} catch (e) {
reject(e);
}
// db.query(query, params, function (err, resp) {
// if (err) {
// reject(err);
// return false;
// }
// resolve(resp);
// return true;
// });
});
}
static gets() {
return new Promise(async (resolve, reject) => {
let params = [];
let query = 'SELECT * FROM t_orders_lgb WHERE dlt is null;';
try {
const conn = await MysqlHelpers.createConnection();
const result = await MysqlHelpers.query(conn, query, params);
await MysqlHelpers.releaseConnection(conn);
resolve(result);
} catch (e) {
reject(e);
}
// db.query(query, params, function (err, resp) {
// if (err) {
// reject(err);
// return false;
// }
// resolve(resp);
// return true;
// });
});
}
static ins(ins = {}) {
return new Promise(async (resolve, reject) => {
try {
const conn = await MysqlHelpers.createConnection();
await MysqlHelpers.createTrx(conn);
let result = undefined;
if (Object.keys(ins).length > 0) result = await MysqlHelpers.queryTrx(conn, `INSERT t_orders_lgb SET ?;`, ins);
await MysqlHelpers.commit(conn);
resolve({
type: 'success',
result,
})
} catch (err) {
reject(err);
}
})
}
static updt(updt = {}) {
return new Promise(async (resolve, reject) => {
try {
const conn = await MysqlHelpers.createConnection();
await MysqlHelpers.createTrx(conn);
let result = undefined;
if (Object.keys(updt).length > 0) result = await MysqlHelpers.queryTrx(conn, `UPDATE t_orders_lgb SET ? WHERE id = ?;`, [updt, updt.id]);
await MysqlHelpers.commit(conn);
resolve({
type: 'success',
result,
})
} catch (err) {
reject(err);
}
})
}
static del(del = {}) {
return new Promise(async (resolve, reject) => {
try {
const conn = await MysqlHelpers.createConnection();
await MysqlHelpers.createTrx(conn);
let result = undefined;
if (Object.keys(del).length > 0) result = await MysqlHelpers.queryTrx(conn, `DELETE t_orders_lgb WHERE id = ?;`, [del.id]);
await MysqlHelpers.commit(conn);
resolve({
type: 'success',
result,
})
} catch (err) {
reject(err);
}
})
}
}
module.exports = LogbookOrdersModels;

View File

@ -0,0 +1,144 @@
// const db = require(`../config/dbMysqlConn`);
const MysqlHelpers = require(`../library/LibMysqlHelper`);
class LogbookTypesModels {
static IS_INACTIVE = 0;
static IS_ACTIVE = 1;
static list(filter = {}) {
return new Promise(async (resolve, reject) => {
let params = [], select = '', where = '', join = '', order_by = '', group_by = '', limit = '';
if (filter['lgb_type_id']) {
where += ' AND lgb_type.id = ?';
params.push(filter['lgb_type_id']);
}
if (filter['is_active']) {
where += ' AND lgb_type.is_active = ?';
params.push(filter['is_active']);
}
if (filter['group_by']) group_by = ' GROUP BY ' + filter['group_by'];
if (filter['order_by']) order_by = ' ORDER BY ' + filter['order_by'];
if (filter['limit']) limit = ' LIMIT ' + filter['limit'];
let query = `SELECT
lgb_type.*,lgb_type.id as lgb_type_id
${select}
FROM t_lgb_types as lgb_type
${join}
WHERE lgb_type.dlt is null
${where}
${group_by}
${order_by}
${limit}
;`;
try {
const conn = await MysqlHelpers.createConnection();
const result = await MysqlHelpers.query(conn, query, params);
await MysqlHelpers.releaseConnection(conn);
resolve(result);
} catch (e) {
reject(e);
}
// db.query(query, params, function (err, resp) {
// if (err) {
// reject(err);
// return false;
// }
// resolve(resp);
// return true;
// });
});
}
static gets() {
return new Promise(async (resolve, reject) => {
let params = [];
let query = 'SELECT * FROM t_lgb_types WHERE dlt is null;';
try {
const conn = await MysqlHelpers.createConnection();
const result = await MysqlHelpers.query(conn, query, params);
await MysqlHelpers.releaseConnection(conn);
resolve(result);
} catch (e) {
reject(e);
}
// db.query(query, params, function (err, resp) {
// if (err) {
// reject(err);
// return false;
// }
// resolve(resp);
// return true;
// });
});
}
static ins(ins = {}) {
return new Promise(async (resolve, reject) => {
try {
const conn = await MysqlHelpers.createConnection();
await MysqlHelpers.createTrx(conn);
let result = undefined;
if (Object.keys(ins).length > 0) result = await MysqlHelpers.queryTrx(conn, `INSERT t_lgb_types SET ?;`, [ins]);
await MysqlHelpers.commit(conn);
resolve({
type: 'success',
result,
})
} catch (err) {
reject(err);
}
})
}
static updt(updt = {}) {
return new Promise(async (resolve, reject) => {
try {
const conn = await MysqlHelpers.createConnection();
await MysqlHelpers.createTrx(conn);
let result = undefined;
if (Object.keys(updt).length > 0) result = await MysqlHelpers.queryTrx(conn, `UPDATE t_lgb_types SET ? WHERE id = ?;`, [updt, updt.id]);
await MysqlHelpers.commit(conn);
resolve({
type: 'success',
result,
})
} catch (err) {
reject(err);
}
})
}
static del(del = {}) {
return new Promise(async (resolve, reject) => {
try {
const conn = await MysqlHelpers.createConnection();
await MysqlHelpers.createTrx(conn);
let result = undefined;
if (Object.keys(del).length > 0) result = await MysqlHelpers.queryTrx(conn, `DELETE t_lgb_types WHERE id = ?;`, [del.id]);
await MysqlHelpers.commit(conn);
resolve({
type: 'success',
result,
})
} catch (err) {
reject(err);
}
})
}
}
module.exports = LogbookTypesModels;

View File

@ -0,0 +1,91 @@
const MysqlHelpers = require(`../library/LibMysqlHelper`);
class LogsSchNotifModels {
static list(filter = {}) {
return new Promise(async (resolve, reject) => {
let params = [], select = '', join = '', where = '', group_by = '', order_by = '', limit = '';
if (filter['fcm_token']) {
where += ' AND lognot.fcm_token = ?';
params.push(filter['id']);
}
if (filter['device_id']) {
where += ' AND lognot.device_id = ?';
params.push(filter['device_id']);
}
if (filter['drv_id']) {
where += ' AND lognot.drv_id = ?';
params.push(filter['drv_id']);
}
const query = `SELECT lognot.*${select} FROM t_logs_sch_notif as lognot ${join} WHERE lognot.crt != 0 ${where} ${group_by} ${order_by} ${limit};`;
try {
const conn = await MysqlHelpers.getDbMysqlConn();
const result = await MysqlHelpers.query(conn, query, params);
resolve(result);
} catch (e) {
reject(e);
}
});
}
static insLog (insLog = {}) {
return new Promise(async (resolve, reject) => {
try {
const conn = await MysqlHelpers.createConnection();
await MysqlHelpers.createTrx(conn);
let result = undefined;
if (Object.keys(insLog).length > 0) result = await MysqlHelpers.queryTrx(conn, `INSERT INTO t_logs_sch_notif SET ?;`, [insLog]);
await MysqlHelpers.commit(conn);
resolve({
type: 'success',
result,
})
} catch (err) {
reject(err);
}
})
}
static delLogs (condition = {}) {
return new Promise(async (resolve, reject) => {
let params = [], where = '';
if (condition['fcm_token']) {
where += ' AND fcm_token = ?';
params.push(condition['id']);
}
if (condition['device_id']) {
where += ' AND device_id = ?';
params.push(condition['device_id']);
}
if (condition['drv_id']) {
where += ' AND drv_id = ?';
params.push(condition['drv_id']);
}
if (condition['notif_type']) {
where += ' AND notif_type = ?';
params.push(condition['notif_type']);
}
const query = `DELETE from t_logs_sch_notif WHERE crt is not null ${where};`;
try {
const conn = await MysqlHelpers.createConnection();
await MysqlHelpers.createTrx(conn);
const result = await MysqlHelpers.queryTrx(conn, query, params);
await MysqlHelpers.commit(conn);
resolve(result);
} catch (e) {
reject(e);
}
});
}
}
module.exports = LogsSchNotifModels;

View File

@ -0,0 +1,88 @@
// const db = require(`../config/dbMysqlConn`);
// const MysqlHelpers = require(`../library/LibMysqlHelper`);
class OrdersAItemsModels {
static FLOW_TYPE_PAYMENT = 1;
static FLOW_TYPE_BILLING = 2;
static FLOW_TYPE_HYBRID = 3;
static TYPE_CASH_OUT = 1;
static TYPE_CASH_IN = 2;
static TYPE_CASH_HYBRID = 3;
static A_TYPE_PRIMARY = 1;
static A_TYPE_SECONDARY = 2;
static AMT_TYPE_FLAT = 1;
static AMT_TYPE_PERCENT = 2;
// 1=>refer ddln_pay_at, 2=>refer to order finish(pengantaran selesai)
static DDLN_PAY_TYPE_TIME = 1;
static DDLN_PAY_TYPE_ORD_FINISH = 2;
static IS_PAID_NO = 0;
static IS_PAID_YES = 1;
static IS_HIDDEN_NO = 0;
static IS_HIDDEN_YES = 1;
// tax yang berlaku utk 1 row saja
static IS_TAX_NO = 0;
static IS_TAX_YES = 1;
static IS_DISC_NO = 0;
static IS_DISC_YES = 1;
static IS_SUBTRACT_NO = 0;
static IS_SUBTRACT_YES = 1;
// 1=>transfer
static PAID_TYPE_TF = 1;
static INVC_TO_CLIENT_YES = 1;
static INVC_TO_CLIENT_NO = 2;
static CALC_TO_VDR_YES = 1;
static CALC_TO_VDR_NO = 2;
static ONLY_CLIENT_YES = 1;
static ONLY_CLIENT_NO = 2;
static ONLY_VDR_YES = 1;
static ONLY_VDR_NO = 2;
static IS_ADM_PRICE_NO = 0;
static IS_ADM_PRICE_YES = 1;
static IS_APRV_NO = 0;
static IS_APRV_YES = 1;
static IS_ACTIVE_NO = 0;
static IS_ACTIVE_YES = 1;
// tax yang include dengan itemnya
static AMT_TAX_TYPE_WITHOUT = 0; // tanpa pajak
static AMT_TAX_TYPE_INCLUDE = 1; // termasuk pajak || pajak dibayarkan sendiri oleh (client/vendor)
static AMT_TAX_TYPE_EXCLUDE = 2; // belum termasuk pajak || pajak dibayarkan oleh bonceng
static PPN_PERCENT = 1.1;
static PPN_PERCENT_INCLUDE = 1.011;
static PPH_PERCENT = 2;
// merge satuan
static IS_MERGE_NO = 0;
static IS_MERGE_YES = 1;
// merge per trx
static STTS_MERGE_NO = 0;
static STTS_MERGE_TO = 1;
static STTS_MERGE_RESULT = 2;
// 0=>system, 1=>admin, 2=>finance
static CRT_TYPE_SYSTEM = 0;
static CRT_TYPE_ADMIN = 1;
static CRT_TYPE_FINANCE = 2;
}
module.exports = OrdersAItemsModels;

View File

@ -0,0 +1,120 @@
const db = require(`../config/dbMysqlConn`);
const MysqlHelpers = require(`../library/LibMysqlHelper`);
class OrdersCheckpointsModels {
static IS_UNPAID = 0;
static IS_PAID_OFF = 1;
static IS_TF_FAIL = 2;
static TF_METHOD_MANUAL = 1;
static TF_METHOD_DANA = 2;
static list(filter = {}) {
return new Promise(async (resolve, reject) => {
let params = [], select = '', where = '', join = '', order_by = '', group_by = '', limit = '';
if (filter['checkpoint_id']) {
where += ' AND checkpoint.id = ?';
params.push(filter['checkpoint_id']);
}
if (filter['ord_id']) {
where += ' AND checkpoint.ord_id = ?';
params.push(filter['ord_id']);
}
if (filter['ord_pocket_id']) {
where += ' AND checkpoint.ord_pocket_id = ?';
params.push(filter['ord_pocket_id']);
}
if (filter['pck_id']) {
where += ' AND checkpoint.pck_id = ?';
params.push(filter['pck_id']);
}
if (filter['did']) {
where += ' AND ord_drv.drv_id = ?';
params.push(filter['did']);
}
if (filter['is_paid']) {
where += ' AND checkpoint.pocket_is_paid = ?';
params.push(filter['is_paid']);
}
if (filter['select_paid_by']) {
where += ' ,(SELECT first_name FROM t_users WHERE id = checkpoint.pocket_paid_by LIMIT 1) as pocket_paid_by_name';
params.push(filter['is_paid']);
}
if (filter['group_by']) {
group_by = filter['group_by'];
}
if (filter['limit']) {
limit = ' LIMIT ' + filter['limit'];
}
let query = `SELECT
ord.id as ord_id,ord.code as ord_code
,checkpoint.id as checkpoint_id,checkpoint.ord_pocket_id,checkpoint.pocket_sort,checkpoint.pocket_total
,checkpoint.pocket_is_paid,checkpoint.pocket_paid_at,checkpoint.pocket_paid_by
,ord_drv.drv_id,ord_drv.drv_name,ord_drv.drv_phone_code,ord_drv.drv_phone_val,ord_drv.drv_mail,ord_drv.drv_addr
,ord_drv.drv_name2,ord_drv.drv_phone2_code,ord_drv.drv_phone2_val
${select}
FROM t_orders_checkpoints as checkpoint
INNER JOIN t_orders as ord ON checkpoint.ord_id = ord.id
INNER JOIN t_orders_drivers as ord_drv ON checkpoint.ord_id = ord_drv.ord_id
${join}
WHERE checkpoint.dlt is null
${where}
${group_by}
${order_by}
${limit}
;`;
try {
const conn = await MysqlHelpers.createConnection();
const result = await MysqlHelpers.query(conn, query, params);
await MysqlHelpers.releaseConnection(conn);
resolve(result);
} catch (e) {
reject(e);
}
// db.query(query, params, function (err, resp) {
// if (err) {
// reject(err);
// return false;
// }
// resolve(resp);
// return true;
// });
});
}
static bundleUpdt (updtOrdCheckpoint = {}, insOrdAItems = {}, insOrdLogsTf = {}, updtDana = {}) {
return new Promise(async (resolve, reject) => {
try {
const conn = await MysqlHelpers.createConnection();
await MysqlHelpers.createTrx(conn);
let result = undefined;
if (Object.keys(updtOrdCheckpoint).length > 0) result = await MysqlHelpers.queryTrx(conn, `UPDATE t_orders_checkpoints SET ? WHERE id = ?;`, [updtOrdCheckpoint, updtOrdCheckpoint.id]);
if (Object.keys(insOrdAItems).length > 0) result = await MysqlHelpers.queryTrx(conn, `INSERT INTO t_orders_a_items SET ?;`, [insOrdAItems]);
if (Object.keys(insOrdLogsTf).length > 0) result = await MysqlHelpers.queryTrx(conn, `INSERT INTO t_orders_logs_tf SET ?;`, [insOrdLogsTf]);
if (Object.keys(updtDana).length > 0) result = await MysqlHelpers.queryTrx(conn, `UPDATE t_dana SET ? WHERE id = ?;`, [updtDana, updtDana.id]);
await MysqlHelpers.commit(conn);
resolve({
type: 'success',
result,
})
} catch (err) {
reject(err);
}
})
}
}
module.exports = OrdersCheckpointsModels;

View File

@ -0,0 +1,68 @@
const db = require(`../config/dbMysqlConn`);
// const MysqlHelpers = require(`../library/LibMysqlHelper`);
class OrdersDriversUploadsModels {
// t_orders_drivers_uploads
static PHOTO_STATUS_OTW_PICKUP = 1;
static PHOTO_STATUS_ARRIVED_PICKUP = 2;
static PHOTO_STATUS_PROCESS_PICKUP = 3;
static PHOTO_STATUS_FINISH_PICKUP = 4;
static PHOTO_STATUS_TRAVEL_DOCUMENT = 5;
static PHOTO_STATUS_OTW_DROP = 6;
static PHOTO_STATUS_ARRIVED_DROP = 7;
static PHOTO_STATUS_PROCESS_DROP = 8;
static PHOTO_STATUS_FINISH_DROP = 9;
static PHOTO_STATUS_HANDOVER_DOCUMENT = 10;
static PHOTO_STATUS_ACCIDENT = 11;
static IS_INACTIVE = 0;
static IS_ACTIVE = 1;
static list(filter = {}) {
return new Promise(async (resolve, reject) => {
let params = [], select = '', where = '', join = '', limit = '';
if (filter['id']) {
where += ' AND drv_up.id = ?';
params.push(filter['id']);
}
if (filter['ord_id']) {
where += ' AND drv_up.ord_id = ?';
params.push(filter['ord_id']);
}
if (filter['ord_code']) {
where += ' AND drv_up.ord_code = ?';
params.push(filter['ord_code']);
}
if (filter['did']) {
where += ' AND drv_up.did = ?';
params.push(filter['did']);
}
if (filter['pck_id']) {
where += ' AND drv_up.pck_id = ?';
params.push(filter['pck_id']);
}
if (filter['drop_id']) {
where += ' AND drv_up.drop_id = ?';
params.push(filter['drop_id']);
}
if (filter['ord_pck_drop_id']) {
where += ' AND drv_up.ord_pck_drop_id = ?';
params.push(filter['ord_pck_drop_id']);
}
const query = `SELECT drv_up.*${select} FROM t_orders_drivers_uploads as drv_up ${join} WHERE drv_up.dlt is null ${where} ${limit};`;
db.query(query, params, (err, results) => {
if (err) {
reject(err);
return false;
}
resolve(results);
});
});
}
}
module.exports = OrdersDriversUploadsModels;

View File

@ -0,0 +1,36 @@
// const db = require(`../config/dbMysqlConn`);
const MysqlHelpers = require(`../library/LibMysqlHelper`);
class OrdersDropsModels {
// t_orders_drops
static STTS_DROP_WAIT = 1;
static STTS_DROP_DROPPING = 2;
static STTS_DROP_DROPED = 3;
static STTS_DROP_FAIL = 4;
static updt (updtDrop = {}) {
return new Promise(async (resolve, reject) => {
try {
const conn = await MysqlHelpers.createConnection();
await MysqlHelpers.createTrx(conn);
let result = undefined;
if (Object.keys(updtDrop).length > 0) result = await MysqlHelpers.queryTrx(conn, `UPDATE t_orders_drops SET ? WHERE id = ?;`, [updtDrop, updtDrop.id]);
await MysqlHelpers.commit(conn);
resolve({
type: 'success',
result,
})
} catch (err) {
reject(err);
}
})
}
}
module.exports = OrdersDropsModels;

View File

@ -0,0 +1,129 @@
const db = require(`../config/dbMysqlConn`);
const MysqlHelpers = require(`../library/LibMysqlHelper`);
class OrdersLogsTfModels {
static TYPE_TF_CHECKPOINT = 1;
static STTS_UNPAID = 0;
static STTS_PAID = 1;
static STTS_FAIL = 2;
static STTS_PENDING = 3;
static METHOD_MANUAL = 1;
static METHOD_DANA = 2;
static list(filter = {}) {
return new Promise(async (resolve, reject) => {
let params = [], select = '', where = '', join = '', order_by = '', group_by = '', limit = '';
if (filter['log_tf_id']) {
where += ' AND log_tf.id = ?';
params.push(filter['log_tf_id']);
}
if (filter['ord_id']) {
where += ' AND log_tf.ord_id = ?';
params.push(filter['ord_id']);
}
if (filter['ord_code']) {
where += ' AND log_tf.ord_code = ?';
params.push(filter['ord_code']);
}
if (filter['checkpoint_id']) {
where += ' AND log_tf.checkpoint_id = ?';
params.push(filter['checkpoint_id']);
}
if (filter['type']) {
where += ' AND log_tf.type = ?';
params.push(filter['type']);
}
if (filter['method']) {
where += ' AND log_tf.method = ?';
params.push(filter['method']);
}
if (filter['group_by']) {
group_by = filter['group_by'];
}
if (filter['limit']) {
limit = ' LIMIT ' + filter['limit'];
}
let query = `SELECT
log_tf.*
${select}
FROM t_orders_logs_tf as log_tf
${join}
WHERE log_tf.dlt is null
${where}
${group_by}
${order_by}
${limit}
;`;
try {
const conn = await MysqlHelpers.createConnection();
const result = await MysqlHelpers.query(conn, query, params);
await MysqlHelpers.releaseConnection(conn);
resolve(result);
} catch (e) {
reject(e);
}
// db.query(query, params, function (err, resp) {
// if (err) {
// reject(err);
// return false;
// }
// resolve(resp);
// return true;
// });
});
}
static bundleIns (insOrdLogsTf = {}) {
return new Promise(async (resolve, reject) => {
try {
const conn = await MysqlHelpers.createConnection();
await MysqlHelpers.createTrx(conn);
let result = undefined;
if (Object.keys(insOrdLogsTf).length > 0) result = await MysqlHelpers.queryTrx(conn, `INSERT INTO t_orders_logs_tf SET ?;`, [insOrdLogsTf]);
await MysqlHelpers.commit(conn);
resolve({
type: 'success',
result,
})
} catch (err) {
reject(err);
}
})
}
static bundleUpdt (updtOrdLogsTf = {}) {
return new Promise(async (resolve, reject) => {
try {
const conn = await MysqlHelpers.createConnection();
await MysqlHelpers.createTrx(conn);
let result = undefined;
if (Object.keys(updtOrdLogsTf).length > 0) result = await MysqlHelpers.queryTrx(conn, `UPDATE t_orders_logs_tf SET ? WHERE id = ?;`, [updtOrdLogsTf, updtOrdLogsTf.id]);
await MysqlHelpers.commit(conn);
resolve({
type: 'success',
result,
})
} catch (err) {
reject(err);
}
})
}
}
module.exports = OrdersLogsTfModels;

702
models/OrdersModels.js Normal file
View File

@ -0,0 +1,702 @@
const db = require(`../config/dbMysqlConn`);
const MysqlHelpers = require(`../library/LibMysqlHelper`);
const OrdersVendors = require('./OrdersVendorsModels');
const UsersModels = require('./UsersModels');
class OrdersModels {
static ONE_KG_ONE_CBM = 1328;
static TYPE_FCL = 1;
static TYPE_LCL = 2;
static STTS_WAIT = 1;
static STTS_CONFIRM = 21;
static STTS_HAVE_GET_VHC = 22;
static STTS_PCK = 2;
static STTS_GO = 3;
static STTS_ARV = 4;
static STTS_DROP = 5;
static STTS_CLIENT_PAY = 6;
static STTS_VENDOR_PAYED = 8;
static STTS_CLOSE = 10;
static STTS_CANCEL = 11;
static IS_FIX_PRICE_NO = 0;
static IS_FIX_PRICE_YES = 1;
static IS_INACTIVE = 0;
static IS_ACTIVE = 1;
static IS_ACCIDENT = 1;
static CANCEL_TYPE_IGNORE = 1;
static CANCEL_TYPE_CLIENT = 2;
static CANCEL_TYPE_VDR_NOT_READY = 3;
static listOrders(filter = {}) {
return new Promise(async (resolve, reject) => {
let params = [], select_order = '', where_order = '', join_order = '', order_by = '', group_by = '';
if (filter['ord_id']) {
where_order += ' AND ord.id = ?';
params.push(filter['ord_id']);
}
if (filter['pck_id']) {
where_order += ' AND ord_pck.id = ?';
params.push(filter['pck_id']);
}
if (filter['drop_id']) {
where_order += ' AND ord_drop.id = ?';
params.push(filter['drop_id']);
}
if (filter['did']) {
where_order += ' AND ord_drv.drv_id = ?';
params.push(filter['did']);
}
if (filter['is_active']) {
where_order += ' AND ord.is_active = ?';
params.push(filter['is_active']);
}
if (filter['order_status'] && filter['order_status'].length > 0) {
where_order += ' AND ord.status IN (';
for (const order_status of filter['order_status']) {
where_order += '?,';
params.push(order_status);
}
where_order = where_order.slice(0, -1) + ')';
}
if (filter['delivery_statuses'] && filter['delivery_statuses'].length > 0) {
where_order += ' AND ord_pck_drop.stts IN (';
for (const delivery_statuses of filter['delivery_statuses']) {
where_order += '?,';
params.push(delivery_statuses);
}
where_order = where_order.slice(0, -1) + ')';
}
if (filter['center_pck']) {
select_order += ',ST_AsText(ST_Centroid(pck_points)) as pck_center';
}
if (filter['get_prefer_type_truck']) {
select_order += ',tt.name as prefer_truck_type_name';
join_order += ' LEFT JOIN t_vehicles_types as tt ON ord_c.prefer_truck_type = tt.id';
}
if (filter['get_pic_zone']) {
select_order += ',ord_pck.pic_name as pck_pic_name,ord_pck.pic_phone_code as pck_pic_phone_code,ord_pck.pic_phone_val as pck_pic_phone_val,ord_pck.pic_mail as pck_pic_mail';
select_order += ',ord_drop.pic_name as drop_pic_name,ord_drop.pic_phone_code as drop_pic_phone_code,ord_drop.pic_phone_val as drop_pic_phone_val,ord_drop.pic_mail as drop_pic_mail';
}
if (filter['get_client_pt']) {
select_order += ',ord_c.c_pt_id,ord_c.c_pt_name,ord_c.c_pt_phone_code,ord_c.c_pt_phone_val,ord_c.c_pt_mail,ord_c.c_pt_addr';
select_order += ',ord_c.c_pt_pic_name,ord_c.c_pt_pic_phone_code,ord_c.c_pt_pic_phone_val,ord_c.c_pt_pic_mail,ord_c.c_pt_pic_addr';
}
if (filter['get_exp_vendor']) {
select_order += ',ord_vdr.is_exp as vdr_is_exp,ord_vdr.exp_at as vdr_exp_at';
}
if (filter['vdr_id']) {
select_order += ',ord_vdr.find_vhcs';
where_order += ' AND ord_vdr.vdr_id = ?';
params.push(filter['vdr_id']);
join_order += " LEFT JOIN t_orders_vendors as ord_vdr ON ord.id = ord_vdr.ord_id";
} else {
// join_order += `
// LEFT JOIN ( SELECT MIN(respond_at) as respond_at,ord_id,vdr_id FROM t_orders_vendors WHERE status = ${OrdersVendors.STTS_ACC} GROUP BY ord_id ) AS ord_vdr1 ON (ord.id = ord_vdr1.ord_id)
// LEFT JOIN t_orders_vendors as ord_vdr ON ( ord_vdr.respond_at = ord_vdr1.respond_at)
// `;
}
if (filter['get_drv_bank']) {
select += ',ord_drv.drv_bank_id,ord_drv.drv_bank_code,ord_drv.drv_bank_name,ord_drv.drv_bank_short_name,ord_drv.drv_bank_branch_name,ord_drv.drv_bank_acc_number,ord_drv.drv_bank_acc_name';
}
if (filter['couple_pck_drop']) {
select_order += ' ,ord_pck_drop.id as ord_pck_drop_id,ord_pck_drop.stts as stts_delivery,ord_pck_drop.is_aprv_pck,ord_pck_drop.aprv_pck_by,ord_pck_drop.aprv_pck_at,ord_pck_drop.drv_app_lock_menu_otw_drop_at';
join_order += " INNER JOIN t_orders_pck_drop as ord_pck_drop ON ord.id = ord_pck_drop.ord_id";
join_order += " INNER JOIN t_orders_pickups as ord_pck ON ord_pck_drop.pck_id = ord_pck.id";
join_order += " INNER JOIN t_orders_drops as ord_drop ON ord_pck_drop.drop_id = ord_drop.id";
} else {
join_order += " INNER JOIN t_orders_pickups as ord_pck ON ord.id = ord_pck.ord_id";
join_order += " INNER JOIN t_orders_drops as ord_drop ON ord.id = ord_drop.ord_id";
}
if (filter['ord_pck_drop_id']) {
where_order += ' AND ord_pck_drop.id = ?';
params.push(filter['ord_pck_drop_id']);
}
if (filter['get_stts_checker']) {
select_order += ' ,ord_pck.chk_id as pck_chk_id,ord_pck.chk_at as pck_chk_at,ord_pck.chk_stts as pck_chk_stts';
select_order += ' ,ord_drop.chk_id as drop_chk_id,ord_drop.chk_at as drop_chk_at,ord_drop.chk_stts as drop_chk_stts';
}
if (filter['chk_id']) {
if (filter['chk_type'] == UsersModels.CHK_TYPE_PICKUP) {
where_order += ' AND (ord_pck.chk_id = ? OR ord_pck.chk_id = 0) ';
params.push(filter['chk_id']);
} else if (filter['chk_type'] == UsersModels.CHK_TYPE_DROP) {
where_order += ' AND (ord_drop.chk_id = ? OR ord_drop.chk_id = 0) ';
params.push(filter['chk_id']);
}
}
if (filter['get_bid_info']) {
select_order += ' ,ord_vdr.is_mailing_bid,ord_vdr.is_mailing_bid_at,ord_vdr.is_want,ord_vdr.is_want_at';
}
if (filter['inner_join_phone_devices']) {
select_order += ' ,phn_drv.device_id as drv_device_id,phn_drv.fcm_token as drv_fcm_token';
join_order += ' INNER JOIN t_phone_devices as phn_drv ON phn_drv.did = ord_drv.drv_id';
}
if (filter['phone_devices_is_login']) {
where_order += ' AND phn_drv.is_login = ?';
params.push(filter['phone_devices_is_login']);
}
if (filter['last_tracks_phone_drv']) {
// get last updated row from many rows
select_order += ' ,tr.id as tr_id,tr.device_id as tr_device_id,tr.latitude as tr_latitude,tr.longitude as tr_longitude,tr.speed as tr_speed,tr.drv_id as tr_drv_id,tr.crt as tr_crt,tr.crt_d as tr_crt_d';
join_order += ' LEFT JOIN ( SELECT MAX(crt) max_crt, device_id, drv_id FROM t_gps_tracks WHERE latitude is not null AND longitude is not null GROUP BY drv_id ORDER BY crt DESC ) AS tr1 ON (ord_drv.drv_id = tr1.drv_id)';
join_order += ' LEFT JOIN t_gps_tracks AS tr ON (tr.crt = tr1.max_crt)';
}
if (filter['group_by']) {
group_by = filter['group_by'];
}
if (filter['order_by']) {
order_by = filter['order_by'];
}
let query = `SELECT
ord.*
,ord.id as ord_id,ord.code as ord_code
,ord_pck.id as ord_pck_id,ord_pck.pck_id,ord_pck.pck_name,ord_pck.pck_addr,ord_pck.set_pck_at,ord_pck.pck_at,ord_pck.pck_enter_at,ord_pck.pck_leave_at
,ord_drop.id as ord_drop_id,ord_drop.drop_id,ord_drop.drop_name,ord_drop.drop_addr,ord_drop.drop_at,ord_drop.drop_enter_at,ord_drop.drop_leave_at
,ord_c.id as ord_client_id,ord_c.c_id,ord_c.c_name,ord_c.c_phone_code,ord_c.c_phone_val,ord_c.c_mail,ord_c.prefer_truck_type
,ord_vdr.id as ord_vdr_id,ord_vdr.vdr_id,ord_vdr.vdr_name,ord_vdr.vdr_phone_code,ord_vdr.vdr_phone_val,ord_vdr.vdr_mail,ord_vdr.vdr_addr,ord_vdr.status as vdr_status,ord_vdr.respond_at as vdr_respond_at,ord_vdr.crt as vdr_crt
,ord_drv.drv_id,ord_drv.drv_name,ord_drv.drv_phone_code,ord_drv.drv_phone_val,ord_drv.drv_mail,ord_drv.drv_addr
,ord_drv.drv_name2,ord_drv.drv_phone2_code,ord_drv.drv_phone2_val
,ord_vhc.vhc_id,ord_vhc.vhc_name,ord_vhc.vhc_nopol1,ord_vhc.vhc_nopol2,ord_vhc.vhc_nopol3
${select_order}
FROM t_orders as ord
INNER JOIN t_orders_clients as ord_c ON ord.id = ord_c.ord_id
LEFT JOIN ( SELECT MIN(respond_at) as respond_at,ord_id,vdr_id FROM t_orders_vendors WHERE status = ${OrdersVendors.STTS_ACC} GROUP BY ord_id ) AS ord_vdr1 ON (ord.id = ord_vdr1.ord_id)
LEFT JOIN t_orders_vendors as ord_vdr ON ( ord_vdr.respond_at = ord_vdr1.respond_at)
LEFT JOIN t_orders_drivers as ord_drv ON ord.id = ord_drv.ord_id
LEFT JOIN t_orders_vehicles as ord_vhc ON ord.id = ord_vhc.ord_id
${join_order}
WHERE ord.dlt is null
${where_order}
${group_by}
ORDER BY ord.id ASC
;`;
try {
const conn = await MysqlHelpers.createConnection();
const result = await MysqlHelpers.query(conn, query, params);
await MysqlHelpers.releaseConnection(conn);
resolve(result);
} catch (e) {
reject(e);
}
// db.query(query, params, function (err, resp) {
// if (err) {
// reject(err);
// return false;
// }
// resolve(resp);
// return true;
// });
});
}
static listActiveOrdVhc(filter = {}) {
return new Promise(async (resolve, reject) => {
let params = [], select_order = '', where_order = '', join_order = '';
if (filter['did']) {
where_order += ' AND ord_drv.drv_id = ?';
params.push(filter['did']);
}
if (filter['order_status'] && filter['order_status'].length > 0) {
where_order += ' AND ord.status IN (';
for (const order_status of filter['order_status']) {
where_order += '?,';
params.push(order_status);
}
where_order = where_order.slice(0, -1) + ')';
}
let query = `SELECT
ord.*
,ord.id as ord_id,ord.code as ord_code
,ord_vdr.id as ord_vdr_id,ord_vdr.vdr_id,ord_vdr.vdr_name,ord_vdr.vdr_phone_code,ord_vdr.vdr_phone_val,ord_vdr.vdr_mail,ord_vdr.vdr_addr,ord_vdr.status as vdr_status,ord_vdr.respond_at as vdr_respond_at,ord_vdr.crt as vdr_crt
,ord_drv.drv_id,ord_drv.drv_name,ord_drv.drv_phone_code,ord_drv.drv_phone_val,ord_drv.drv_mail,ord_drv.drv_addr
,ord_drv.drv_name2,ord_drv.drv_phone2_code,ord_drv.drv_phone2_val
,ord_vhc.vhc_id,ord_vhc.vhc_name,ord_vhc.vhc_nopol1,ord_vhc.vhc_nopol2,ord_vhc.vhc_nopol3
${select_order}
FROM t_orders as ord
LEFT JOIN t_orders_vendors as ord_vdr ON ord.id = ord_vdr.ord_id
LEFT JOIN t_orders_drivers as ord_drv ON ord.id = ord_drv.ord_id
LEFT JOIN t_orders_vehicles as ord_vhc ON ord.id = ord_vhc.ord_id
${join_order}
WHERE ord.dlt is null
AND ord.is_active = 1
${where_order}
ORDER BY ord.id ASC
;`;
try {
const conn = await MysqlHelpers.createConnection();
const result = await MysqlHelpers.query(conn, query, params);
await MysqlHelpers.releaseConnection(conn);
resolve(result);
} catch (e) {
reject(e);
}
// db.query(query, params, function (err, resp) {
// if (err) {
// reject(err);
// return false;
// }
// resolve(resp);
// return true;
// });
});
}
static showOrder(filter) {
return new Promise(async (resolve, reject) => {
try {
let params = [], select_order = '', where_order = '', join_order = '';
if (filter['id']) {
where_order += ' AND ord.id = ? ';
params.push(filter['id']);
} else if (filter['code']) {
where_order += ' AND ord.code = ? ';
params.push(filter['code']);
} else {
reject(false);
return false;
}
if (filter['is_active']) {
where_order += ' AND ord.is_active = ?';
params.push(filter['is_active']);
}
if (filter['center_pck']) {
select_order += ',ST_AsText(ST_Centroid(pck_points)) as pck_center';
}
if (filter['get_prefer_type_truck']) {
select_order += ',tt.name as prefer_truck_type_name';
join_order += ' LEFT JOIN t_vehicles_types as tt ON ord_c.prefer_truck_type = tt.id';
}
if (filter['get_pic_zone']) {
select_order += ',ord_pck.pic_name as pck_pic_name,ord_pck.pic_phone_code as pck_pic_phone_code,ord_pck.pic_phone_val as pck_pic_phone_val,ord_pck.pic_mail as pck_pic_mail';
select_order += ',ord_drop.pic_name as drop_pic_name,ord_drop.pic_phone_code as drop_pic_phone_code,ord_drop.pic_phone_val as drop_pic_phone_val,ord_drop.pic_mail as drop_pic_mail';
}
if (filter['get_client_pt']) {
select_order += ',ord_c.c_pt_id,ord_c.c_pt_name,ord_c.c_pt_phone_code,ord_c.c_pt_phone_val,ord_c.c_pt_mail,ord_c.c_pt_addr';
select_order += ',ord_c.c_pt_pic_name,ord_c.c_pt_pic_phone_code,ord_c.c_pt_pic_phone_val,ord_c.c_pt_pic_mail,ord_c.c_pt_pic_addr';
}
if (filter['get_exp_vendor']) {
select_order += ',ord_vdr.is_exp as vdr_is_exp,ord_vdr.exp_at as vdr_exp_at';
}
if (filter['vdr_id']) {
select_order += ',ord_vdr.find_vhcs';
where_order += ' AND ord_vdr.vdr_id = ?';
params.push(filter['vdr_id']);
join_order += " LEFT JOIN t_orders_vendors as ord_vdr ON ord.id = ord_vdr.ord_id";
} else {
// join_order += `
// LEFT JOIN ( SELECT MIN(respond_at) as respond_at,ord_id,vdr_id FROM t_orders_vendors WHERE status = ${OrdersVendors.STTS_ACC} GROUP BY ord_id ) AS ord_vdr1 ON (ord.id = ord_vdr1.ord_id)
// LEFT JOIN t_orders_vendors as ord_vdr ON ( ord_vdr.respond_at = ord_vdr1.respond_at)
// `;
}
if (filter['get_stts_checker']) {
select_order += ' ,ord_pck.chk_id as pck_chk_id,ord_pck.chk_at as pck_chk_at,ord_pck.chk_stts as pck_chk_stts';
select_order += ' ,ord_drop.chk_id as drop_chk_id,ord_drop.chk_at as drop_chk_at,ord_drop.chk_stts as drop_chk_stts';
}
if (filter['chk_id']) {
if (filter['chk_type'] == UsersModels.CHK_TYPE_PICKUP) {
where_order += ' AND (ord_pck.chk_id = ? OR ord_pck.chk_id = 0) ';
params.push(filter['chk_id']);
} else if (filter['chk_type'] == UsersModels.CHK_TYPE_DROP) {
where_order += ' AND (ord_drop.chk_id = ? OR ord_drop.chk_id = 0) ';
params.push(filter['chk_id']);
}
}
if (filter['get_bid_info']) {
select_order += ' ,ord_vdr.is_mailing_bid,ord_vdr.is_mailing_bid_at,ord_vdr.is_want,ord_vdr.is_want_at';
}
let query = `SELECT
ord.*
,ord.id as ord_id,ord.code as ord_code
,ord_pck.id as ord_pck_id,ord_pck.pck_id,ord_pck.pck_name,ord_pck.pck_addr,ord_pck.set_pck_at,ord_pck.pck_at,ord_pck.pck_enter_at,ord_pck.pck_leave_at
,ord_drop.id as ord_drop_id,ord_drop.drop_id,ord_drop.drop_name,ord_drop.drop_addr,ord_drop.drop_at,ord_drop.drop_enter_at,ord_drop.drop_leave_at
,ord_c.id as ord_client_id,ord_c.c_id,ord_c.c_name,ord_c.c_phone_code,ord_c.c_phone_val,ord_c.c_mail,ord_c.prefer_truck_type
,ord_vdr.id as ord_vdr_id,ord_vdr.vdr_id,ord_vdr.vdr_name,ord_vdr.vdr_phone_code,ord_vdr.vdr_phone_val,ord_vdr.vdr_mail,ord_vdr.vdr_addr,ord_vdr.status as vdr_status,ord_vdr.respond_at as vdr_respond_at,ord_vdr.crt as vdr_crt
,ord_drv.drv_id,ord_drv.drv_name,ord_drv.drv_phone_code,ord_drv.drv_phone_val,ord_drv.drv_mail,ord_drv.drv_addr
,ord_vhc.vhc_id,ord_vhc.vhc_name,ord_vhc.vhc_nopol1,ord_vhc.vhc_nopol2,ord_vhc.vhc_nopol3
${select_order}
FROM t_orders as ord
INNER JOIN t_orders_clients as ord_c ON ord.id = ord_c.ord_id
INNER JOIN t_orders_pickups as ord_pck ON ord.id = ord_pck.ord_id
INNER JOIN t_orders_drops as ord_drop ON ord.id = ord_drop.ord_id
LEFT JOIN ( SELECT MIN(respond_at) as respond_at,ord_id,vdr_id FROM t_orders_vendors WHERE status = ${OrdersVendors.STTS_ACC} GROUP BY ord_id ) AS ord_vdr1 ON (ord.id = ord_vdr1.ord_id)
LEFT JOIN t_orders_vendors as ord_vdr ON ( ord_vdr.respond_at = ord_vdr1.respond_at)
LEFT JOIN t_orders_drivers as ord_drv ON ord.id = ord_drv.ord_id
LEFT JOIN t_orders_vehicles as ord_vhc ON ord.id = ord_vhc.ord_id
${join_order}
WHERE ord.dlt is null
${where_order}
;`;
try {
const conn = await MysqlHelpers.createConnection();
const result = await MysqlHelpers.query(conn, query, params);
await MysqlHelpers.releaseConnection(conn);
resolve(result);
} catch (e) {
reject(e);
}
// db.query(query, params, function (err, resp) {
// if (err) {
// reject(err);
// return false;
// }
// resolve(resp);
// return true;
// });
} catch (e) {
reject(err);
return false;
}
});
}
static gets() {
return new Promise(async (resolve, reject) => {
let params = [];
let query = 'SELECT * FROM t_orders WHERE dlt is null;';
try {
const conn = await MysqlHelpers.createConnection();
const result = await MysqlHelpers.query(conn, query, params);
await MysqlHelpers.releaseConnection(conn);
resolve(result);
} catch (e) {
reject(e);
}
// db.query(query, params, function (err, resp) {
// if (err) {
// reject(err);
// return false;
// }
// resolve(resp);
// return true;
// });
});
}
static getOrderById(ord_id) {
return new Promise(async (resolve, reject) => {
let params = [];
let query = 'SELECT * FROM t_orders WHERE dlt is null AND id = ? LIMIT 1;';
params.push(ord_id);
try {
const conn = await MysqlHelpers.createConnection();
const result = await MysqlHelpers.query(conn, query, params);
await MysqlHelpers.releaseConnection(conn);
resolve(result);
} catch (e) {
reject(e);
}
// db.query(query, params, function (err, resp) {
// if (err) {
// reject(err);
// return false;
// }
// resolve(resp);
// return true;
// });
});
}
static getOrderByCode(ord_code) {
return new Promise(async (resolve, reject) => {
let params = [];
let query = 'SELECT * FROM t_orders WHERE dlt is null AND code = ? LIMIT 1;';
params.push(ord_code);
try {
const conn = await MysqlHelpers.createConnection();
const result = await MysqlHelpers.query(conn, query, params);
await MysqlHelpers.releaseConnection(conn);
resolve(result);
} catch (e) {
reject(e);
}
// db.query(query, params, function (err, resp) {
// if (err) {
// reject(err);
// return false;
// }
// resolve(resp);
// return true;
// });
});
}
static getOrdersClientActive(client_id) {
return new Promise(async (resolve, reject) => {
let params = [];
let stts = OrdersModels.STTS_WAIT + ',' + OrdersModels.STTS_CONFIRM + ',' + OrdersModels.STTS_HAVE_GET_VHC + ',' + OrdersModels.STTS_PCK + ',' + OrdersModels.STTS_GO + ',' + OrdersModels.STTS_ARV + ',' + OrdersModels.STTS_DROP;
let query = `SELECT
ord.*,ord_c.*
,ord_c.pay_at as client_pay_at,ord_c.is_pay as client_is_pay
FROM t_orders as ord
INNER JOIN t_orders_clients as ord_c ON ord.id = ord_c.ord_id
WHERE ord.dlt is null AND ord.status IN (?) AND ord_c.c_id = ?
;`;
params.push(stts, client_id);
try {
const conn = await MysqlHelpers.createConnection();
const result = await MysqlHelpers.query(conn, query, params);
await MysqlHelpers.releaseConnection(conn);
resolve(result);
} catch (e) {
reject(e);
}
// db.query(query, params, function (err, resp) {
// if (err) {
// reject(err);
// return false;
// }
// resolve(resp);
// return true;
// });
});
}
static getOrdersByClient(client_id, limit = 1000) {
return new Promise(async (resolve, reject) => {
let params = [];
let query = `SELECT
ord.*,ord_c.*
,ord_c.pay_at as client_pay_at,ord_c.is_pay as client_is_pay
FROM t_orders as ord
INNER JOIN t_orders_clients as ord_c ON ord.id = ord_c.ord_id
WHERE ord.dlt is null AND ord_c.c_id = ?
LIMIT ?
;`;
params.push(client_id, limit);
try {
const conn = await MysqlHelpers.createConnection();
const result = await MysqlHelpers.query(conn, query, params);
await MysqlHelpers.releaseConnection(conn);
resolve(result);
} catch (e) {
reject(e);
}
// db.query(query, params, function (err, resp) {
// if (err) {
// reject(err);
// return false;
// }
// resolve(resp);
// return true;
// });
});
}
static add(data) {
return new Promise(async (resolve, reject) => {
const query = `INSERT INTO t_orders SET ?;`;
db.getConnection(function (err, conn) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.beginTransaction(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.query(query, data, function (err, resp) {
if (err) {
conn.rollback(async function () {
conn.release();
reject(err.message);
});
return false;
}
// Number(resp.insertId);
conn.commit(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.release();
resolve(resp);
return true;
});
});
});
});
});
}
static updt(id, data) {
return new Promise(async (resolve, reject) => {
const query = `UPDATE t_orders SET ? WHERE id = ?;`;
db.getConnection(function (err, conn) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.beginTransaction(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.query(query, [data, id], function (err, resp) {
if (err) {
conn.rollback(async function () {
conn.release();
reject(err.message);
});
return false;
}
conn.commit(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.release();
resolve(resp);
return true;
});
});
});
});
});
}
static dlt(id) {
return new Promise(async (resolve, reject) => {
const query = `DELETE t_orders WHERE id = ?;`;
db.getConnection(function (err, conn) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.beginTransaction(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.query(query, [id], function (err, resp) {
if (err) {
conn.rollback(async function () {
conn.release();
reject(err.message);
});
return false;
}
conn.commit(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.release();
resolve(resp);
return true;
});
});
});
});
});
}
static bundleInsDrvUploads (insUploads = [], updtOrd = {}, updtPck = {}, updtDrop = {}, updtPckDrop = {}) {
return new Promise(async (resolve, reject) => {
try {
const conn = await MysqlHelpers.createConnection();
await MysqlHelpers.createTrx(conn);
let result = undefined;
for (const insUpload of insUploads) {
await MysqlHelpers.queryTrx(conn, `INSERT INTO t_orders_drivers_uploads SET ?`, [insUpload]);
}
if (Object.keys(updtOrd).length > 0) result = await MysqlHelpers.queryTrx(conn, `UPDATE t_orders SET ? WHERE id = ?;`, [updtOrd, updtOrd.id]);
if (Object.keys(updtPck).length > 0) result = await MysqlHelpers.queryTrx(conn, `UPDATE t_orders_pickups SET ? WHERE id = ?;`, [updtPck, updtPck.id]);
if (Object.keys(updtDrop).length > 0) result = await MysqlHelpers.queryTrx(conn, `UPDATE t_orders_drops SET ? WHERE id = ?;`, [updtDrop, updtDrop.id]);
if (Object.keys(updtPckDrop).length > 0) result = await MysqlHelpers.queryTrx(conn, `UPDATE t_orders_pck_drop SET ? WHERE id = ?;`, [updtPckDrop, updtPckDrop.id]);
await MysqlHelpers.commit(conn);
resolve({
type: 'success',
result,
})
} catch (err) {
reject(err);
}
})
}
static bundleUpdtTrxDriverAps (updtOrd = {}, updtPck = {}, updtDrop = {}, updtOrdAcdnt = {}, updtPckDrop = {}) {
return new Promise(async (resolve, reject) => {
try {
const conn = await MysqlHelpers.createConnection();
await MysqlHelpers.createTrx(conn);
let result = undefined;
if (Object.keys(updtOrd).length > 0) result = await MysqlHelpers.queryTrx(conn, `UPDATE t_orders SET ? WHERE id = ?;`, [updtOrd, updtOrd.id]);
if (Object.keys(updtPck).length > 0) result = await MysqlHelpers.queryTrx(conn, `UPDATE t_orders_pickups SET ? WHERE id = ?;`, [updtPck, updtPck.id]);
if (Object.keys(updtDrop).length > 0) result = await MysqlHelpers.queryTrx(conn, `UPDATE t_orders_drops SET ? WHERE id = ?;`, [updtDrop, updtDrop.id]);
if (Object.keys(updtOrdAcdnt).length > 0) result = await MysqlHelpers.queryTrx(conn, `UPDATE t_orders_accidents SET ? WHERE id = ?;`, [updtOrdAcdnt, updtOrdAcdnt.id]);
if (Object.keys(updtPckDrop).length > 0) result = await MysqlHelpers.queryTrx(conn, `UPDATE t_orders_pck_drop SET ? WHERE id = ?;`, [updtPckDrop, updtPckDrop.id]);
await MysqlHelpers.commit(conn);
resolve({
type: 'success',
result,
})
} catch (err) {
reject(err);
}
})
}
}
module.exports = OrdersModels;

View File

@ -0,0 +1,90 @@
// const db = require(`../config/dbMysqlConn`);
const MysqlHelpers = require(`../library/LibMysqlHelper`);
class OrdersPckDropsModels {
// t_orders_pck_drop
static STTS_DELIVERY_OTW_PICKUP = 1;
static STTS_DELIVERY_ARRIVED_PICKUP = 2;
static STTS_DELIVERY_PROCESS_PICKUP = 3;
static STTS_DELIVERY_FINISH_PICKUP = 4;
static STTS_DELIVERY_TRAVEL_DOC = 5;
static STTS_DELIVERY_OTW_DROP = 6;
static STTS_DELIVERY_ARRIVED_DROP = 7;
static STTS_DELIVERY_PROCESS_DROP = 8;
static STTS_DELIVERY_FINISH_DROP = 9;
static STTS_DELIVERY_HANDOVER_DOC = 10;
static IS_APRV_NO = 0;
static IS_APRV_YES = 1;
static listOrdPckDrop(filter = {}) {
return new Promise(async (resolve, reject) => {
let params = [], select = '', where = '', join = '', order_by = '', group_by = '';
if (filter['ord_pck_drop_id']) {
where += ' AND ord_pck_drop.id = ?';
params.push(filter['ord_pck_drop_id']);
}
if (filter['ord_id']) {
where += ' AND ord_pck_drop.ord_id = ?';
params.push(filter['ord_id']);
}
if (filter['pck_id']) {
where += ' AND ord_pck_drop.pck_id = ?';
params.push(filter['pck_id']);
}
if (filter['drop_id']) {
where += ' AND ord_pck_drop.drop_id = ?';
params.push(filter['drop_id']);
}
if (filter['stts'] && filter['stts'].length > 0) {
where += ' AND ord_pck_drop.stts IN (';
for (const stts of filter['stts']) {
where += '?,';
params.push(stts);
}
where = where.slice(0, -1) + ')';
}
if (filter['not_stts'] && filter['not_stts'].length > 0) {
where += ' AND ord_pck_drop.stts NOT IN (';
for (const stts of filter['not_stts']) {
where += '?,';
params.push(stts);
}
where = where.slice(0, -1) + ')';
}
if (filter['group_by']) {
group_by = filter['group_by'];
}
if (filter['order_by']) {
order_by = filter['order_by'];
}
let query = `SELECT
ord_pck_drop.*
${select}
FROM t_orders_pck_drop as ord_pck_drop
${join}
WHERE ord_pck_drop.dlt is null
${where}
${group_by}
${order_by}
;`;
try {
const conn = await MysqlHelpers.createConnection();
const result = await MysqlHelpers.query(conn, query, params);
await MysqlHelpers.releaseConnection(conn);
resolve(result);
} catch (e) {
reject(e);
}
});
}
}
module.exports = OrdersPckDropsModels;

View File

@ -0,0 +1,36 @@
// const db = require(`../config/dbMysqlConn`);
const MysqlHelpers = require(`../library/LibMysqlHelper`);
class OrdersPickupsModels {
// t_orders_pickups
static STTS_PCK_WAIT = 1;
static STTS_PCK_PICKING = 2;
static STTS_PCK_PICKED = 3;
static STTS_PCK_FAIL = 4;
static updt(updtPck = {}) {
return new Promise(async (resolve, reject) => {
try {
const conn = await MysqlHelpers.createConnection();
await MysqlHelpers.createTrx(conn);
let result = undefined;
if (Object.keys(updtPck).length > 0) result = await MysqlHelpers.queryTrx(conn, `UPDATE t_orders_pickups SET ? WHERE id = ?;`, [updtPck, updtPck.id]);
await MysqlHelpers.commit(conn);
resolve({
type: 'success',
result,
})
} catch (err) {
reject(err);
}
})
}
}
module.exports = OrdersPickupsModels;

View File

@ -0,0 +1,121 @@
// const db = require(`../config/dbMysqlConn`);
const MysqlHelpers = require(`../library/LibMysqlHelper`);
class OrdersTerminsModels {
static FLOW_TYPE_PAYMENT = 1;
static FLOW_TYPE_BILLING = 2;
static FLOW_TYPE_HYBRID = 3;
static TYPE_CASH_OUT = 1;
static TYPE_CASH_IN = 2;
static TYPE_CASH_HYBRID = 3;
static AMT_TYPE_FLAT = 1;
static AMT_TYPE_PERCENT = 2;
// 1=>refer termin_ddln_at, 2=>refer to order finish(pengantaran selesai)
static DDLN_TERMIN_TYPE_TIME = 1;
static DDLN_TERMIN_TYPE_ORD_FINISH = 2;
static IS_PAID_NO = 0;
static IS_PAID_YES = 1;
// 1=>transfer
static PAID_TYPE_TF = 1;
// 1=>admin, 2=>finance
static CRT_TYPE_SYSTEM = 0;
static CRT_TYPE_ADMIN = 1;
static CRT_TYPE_FINANCE = 2;
static IS_ACTIVE_NO = 0;
static IS_ACTIVE_YES = 1;
// 1=>client, 2=>vendor
static TERMIN_FOR_CLIENT = 1;
static TERMIN_FOR_VENDOR = 2;
// merge per trx
static STTS_MERGE_NO = 0;
static STTS_MERGE_TO = 1;
static STTS_MERGE_RESULT = 2;
static listWithFilter(filter = {}) {
return new Promise(async (resolve, reject) => {
let params = [], select = '', where = '', join = '', order_by = '', group_by = '', limit = '';
if (filter['ord_id']) {
where += ' AND ord_termin.ord_id = ?';
params.push(filter['ord_id']);
} else if (filter['ord_code']) {
where += ' AND ord_code = ?';
params.push(filter['ord_code']);
}
if (filter['termin_for']) {
where += ' AND termin_for = ?';
params.push(filter['termin_for']);
}
if (filter['crt_type']) {
where += ' AND crt_type = ?';
params.push(filter['crt_type']);
}
if (filter['termin_is_paid']) {
where += ' AND termin_is_paid = ?';
params.push(filter['termin_is_paid']);
}
if (filter['in_stts_merge'] && filter['in_stts_merge'].length > 0) {
where += ' AND ord_termin.stts_merge IN (';
for (const in_stts_merge of filter['in_stts_merge']) {
where += '?,';
params.push(in_stts_merge);
}
where = where.slice(0, -1) + ')';
}
if (filter['group_by']) {
group_by = filter['group_by'];
}
if (filter['limit']) {
limit = ' LIMIT ' + filter['limit'];
}
let query = `SELECT
ord_termin.*
${select}
FROM t_orders_termins as ord_termin
${join}
WHERE ord_termin.dlt is null
${where}
${group_by}
${order_by}
${limit}
;`;
try {
const conn = await MysqlHelpers.createConnection();
const result = await MysqlHelpers.query(conn, query, params);
await MysqlHelpers.releaseConnection(conn);
resolve(result);
} catch (e) {
reject(e);
}
// db.query(query, params, function (err, resp) {
// if (err) {
// reject(err);
// return false;
// }
// resolve(resp);
// return true;
// });
});
}
}
module.exports = OrdersTerminsModels;

View File

@ -0,0 +1,277 @@
const db = require(`../config/dbMysqlConn`);
class OrdersVendorsModels {
static STTS_WAIT = 1;
static STTS_ACC = 2;
static STTS_REJECT = 3;
static STTS_IGNORE = 4;
static STTS_NOT_READY = 5; // want order but expired, bcs not fill data
static IS_NOT_PAY = 1;
static IS_PAYED = 2;
static LINK_WILL_EXP = 1;
static LINK_NOT_EXP = 2;
static IS_MAILING_BID_NOT = 0;
static IS_MAILING_BID_SEND = 1;
static IS_WANT_IGNORE = 0;
static IS_WANT_NO = 1;
static IS_WANT_YES = 2;
static async gets() {
return new Promise((resolve, reject) => {
let params = [];
let query = 'SELECT * FROM t_orders_vendors;';
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async getById(id) {
return new Promise((resolve, reject) => {
let params = [];
let query = 'SELECT * FROM t_orders_vendors WHERE id = ? LIMIT 1;';
params.push(id);
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async getByOrdCode(code) {
return new Promise((resolve, reject) => {
let params = [];
let query = 'SELECT * FROM t_orders_vendors WHERE ord_code = ? LIMIT 1;';
params.push(code);
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async getByOrdCodeByStatus(code, status) {
return new Promise((resolve, reject) => {
let params = [];
let query = 'SELECT * FROM t_orders_vendors WHERE ord_code = ? AND status = ? LIMIT 1;';
params.push(code, status);
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async getByOrdIdByStatus(id, status) {
return new Promise((resolve, reject) => {
let params = [];
let query = 'SELECT * FROM t_orders_vendors WHERE ord_id = ? AND status = ? LIMIT 1;';
params.push(id, status);
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async getByOrdId(id) {
return new Promise((resolve, reject) => {
let params = [];
let query = 'SELECT * FROM t_orders_vendors WHERE ord_id = ? LIMIT 1;';
params.push(id);
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async getNextVendorsByOrdId(ord_id) {
return new Promise((resolve, reject) => {
let params = [];
let query = 'SELECT * FROM t_orders_vendors WHERE ord_id = ? AND status = ' + OrdersVendorsModels.STTS_WAIT + ' AND is_want = ' + OrdersVendorsModels.IS_WANT_IGNORE + ' ORDER BY distance ASC;';
params.push(ord_id);
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async getByBidToken(tkn) {
return new Promise((resolve, reject) => {
let params = [];
let query = 'SELECT * FROM t_orders_vendors WHERE bid_token = ? LIMIT 1;';
params.push(tkn);
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async add(data) {
return new Promise((resolve, reject) => {
const query = `INSERT INTO t_orders_vendors SET ?;`;
db.getConnection(function (err, conn) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.beginTransaction(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.query(query, data, function (err, resp) {
if (err) {
conn.rollback(async function () {
conn.release();
reject(err.message);
});
return false;
}
// Number(resp.insertId);
conn.commit(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.release();
resolve(resp);
return true;
});
});
});
});
});
}
static async updt(id, data) {
return new Promise((resolve, reject) => {
const query = `UPDATE t_orders_vendors SET ? WHERE id = ?;`;
db.getConnection(function (err, conn) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.beginTransaction(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.query(query, [data, id], function (err, resp) {
if (err) {
conn.rollback(async function () {
conn.release();
reject(err.message);
});
return false;
}
conn.commit(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.release();
resolve(resp);
return true;
});
});
});
});
});
}
static async dlt(id) {
return new Promise((resolve, reject) => {
const query = `DELETE t_orders_vendors WHERE id = ?;`;
db.getConnection(function (err, conn) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.beginTransaction(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.query(query, [id], function (err, resp) {
if (err) {
conn.rollback(async function () {
conn.release();
reject(err.message);
});
return false;
}
conn.commit(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.release();
resolve(resp);
return true;
});
});
});
});
});
}
}
module.exports = OrdersVendorsModels;

View File

@ -0,0 +1,85 @@
const db = require(`../config/dbMysqlConn`);
class PatientsStatusModels {
static async all() {
return new Promise((resolve, reject) => {
const query = `SELECT * FROM t_patients_status;`;
db.query(query, (err, results) => {
if (err) {
reject(err);
return false;
}
resolve(results);
});
});
}
static async find(id) {
return new Promise((resolve, reject) => {
const query = `SELECT * FROM t_patients_status WHERE id = ? LIMIT 1;`;
db.query(query, [id], (err, results) => {
if (err) {
reject(err);
return false;
}
resolve(results);
});
});
}
static async findName(name) {
return new Promise((resolve, reject) => {
const query = `SELECT * FROM t_patients_status WHERE name = ? LIMIT 1;`;
db.query(query, [name], (err, results) => {
if (err) {
reject(err);
return false;
}
resolve(results);
});
});
}
static async create(data) {
return new Promise((resolve, reject) => {
const query = `INSERT INTO t_patients_status SET ?;`;
db.query(query, data, (err, results) => {
if (err) {
reject(err);
return false;
}
resolve(results);
});
});
}
static async update(data, id) {
return new Promise((resolve, reject) => {
const query = `UPDATE t_patients_status SET ? WHERE id = ?;`;
db.query(query, [data, id], (err, results) => {
if (err) {
reject(err);
return false;
}
resolve(results);
});
});
}
static async delete(id) {
return new Promise((resolve, reject) => {
const query = `DELETE FROM t_patients_status WHERE id = ?;`;
db.query(query, [id], (err, results) => {
if (err) {
reject(err);
return false;
}
resolve(results);
});
});
}
}
module.exports = PatientsStatusModels;

57
models/RegionModels.js Normal file
View File

@ -0,0 +1,57 @@
const db = require(`../config/dbMysqlConn`);
// const MysqlHelpers = require(`../library/LibMysqlHelper`);
class RegionModels {
static whereLike(filter = {}) {
return new Promise(async (resolve, reject) => {
let params = [], select = '', where = '', join = '', limit = '';
if (filter['nmProvinsiKel']) {
where += ' AND region.nmProvinsiKel LIKE ?';
params.push('%'+filter['nmProvinsiKel']+'%');
}
if (filter['nmKotamadyaKel']) {
where += ' AND region.nmKotamadyaKel LIKE ?';
params.push('%'+filter['nmKotamadyaKel']+'%');
}
if (filter['nmKecamatanKel']) {
where += ' AND region.nmKecamatanKel LIKE ?';
params.push('%'+filter['nmKecamatanKel']+'%');
}
if (filter['nmKelurahan']) {
where += ' AND region.nmKelurahan LIKE ?';
params.push('%'+filter['nmKelurahan']+'%');
}
if (filter['kodeProv']) {
where += ' AND region.kodeProv LIKE ?';
params.push('%'+filter['kodeProv']+'%');
}
if (filter['kodeKab']) {
where += ' AND region.kodeKab LIKE ?';
params.push('%'+filter['kodeKab']+'%');
}
if (filter['kodeKec']) {
where += ' AND region.kodeKec LIKE ?';
params.push('%'+filter['kodeKec']+'%');
}
if (filter['kodeKel']) {
where += ' AND region.kodeKel LIKE ?';
params.push('%'+filter['kodeKel']+'%');
}
const query = `SELECT region.*${select} FROM t_region as region ${join} WHERE region.kodeKel is not null ${where} ${limit};`;
db.query(query, params, (err, results) => {
if (err) {
reject(err);
return false;
}
resolve(results);
});
});
}
}
module.exports = RegionModels;

121
models/UsersModels.js Normal file
View File

@ -0,0 +1,121 @@
const db = require(`../config/dbMysqlConn`);
class UsersModels {
static ROLE_SU = 1; // unused
static ROLE_SUPERADMIN = 7;
static ROLE_ADMIN = 2;
static ROLE_VENDOR = 8;
static ROLE_CHECKER = 9;
static ROLE_USER = 3; // unused
static ROLE_CLIENT_ADMIN = 4;
static ROLE_CLIENT_STAFF = 5; // unused
static ROLE_CLIENT_USER = 6; // unused
static ROLE_SPECIAL_TRACKING = 10;
static ROLE_FINANCE = 11;
static STATUS_ACTIVE = 1;
static STATUS_NOT_ACTIVE = 2;
static STATUS_SUSPEND = 3;
static CHK_TYPE_PICKUP = 1;
static CHK_TYPE_DROP = 2;
static DEFAULT_UID = 1; // swanusa account
static DEFAULT_PHONE_CODE = 62;
static async all() {
return new Promise((resolve, reject) => {
const query = `SELECT * FROM t_users;`;
db.query(query, (err, results) => {
if (err) {
reject(err);
return false;
}
resolve(results);
});
});
}
static async getUsersActiveByRole(role) {
return new Promise((resolve, reject) => {
const query = `SELECT * FROM t_users WHERE dlt is null AND status = ${UsersModels.STATUS_ACTIVE} AND role = ?;`;
db.query(query, [role], (err, results) => {
if (err) {
reject(err);
return false;
}
resolve(results);
});
});
}
static async find(id) {
return new Promise((resolve, reject) => {
const query = `SELECT * FROM t_users WHERE id = ? LIMIT 1;`;
db.query(query, [id], (err, results) => {
if (err) {
reject(err);
return false;
}
resolve(results);
});
});
}
static async findEmail(email) {
return new Promise((resolve, reject) => {
const query = `SELECT * FROM t_users WHERE email = ? LIMIT 1;`;
db.query(query, [email], (err, results) => {
if (err) {
reject(err);
return false;
}
resolve(results);
});
});
}
static async create(data) {
return new Promise((resolve, reject) => {
const query = `INSERT INTO t_users SET ?;`;
db.query(query, data, (err, results) => {
if (err) {
reject(err);
return false;
}
resolve(results);
});
});
}
static async update(data, id) {
return new Promise((resolve, reject) => {
const query = `UPDATE t_users SET ? WHERE id = ?;`;
db.query(query, [data, id], (err, results) => {
if (err) {
reject(err);
return false;
}
resolve(results);
});
});
}
static async delete(id) {
return new Promise((resolve, reject) => {
const query = `DELETE FROM t_users WHERE id = ?;`;
db.query(query, [id], (err, results) => {
if (err) {
reject(err);
return false;
}
resolve(results);
});
});
}
}
module.exports = UsersModels;

101
models/VhcModels.js Normal file
View File

@ -0,0 +1,101 @@
const db = require(`../config/dbMysqlConn`);
class VhcModels {
static STTS_ACTIVE = 1;
static STTS_INACTIVE = 2;
static IN_ORD_YES = 1;
static IN_ORD_NO = 2;
static async getVhcByDeviceId(device_id) {
return new Promise((resolve, reject) => {
let params = [];
let query = 'SELECT';
query += ' v.id as vid,v.nopol1,v.nopol2,v.nopol3,v.sum_milleage,vd.speed_limit';
query += ' ,da.fullname as da_name,da.phone as da_phone,da.phone_code as da_phone_code';
query += ' FROM t_vehicles AS v';
query += ' INNER JOIN t_vehicles_detail AS vd ON v.id = vd.vid';
query += ' LEFT JOIN t_drivers AS da ON v.a_did = da.id';
query += ' WHERE v.dlt is null AND v.status = ? AND v.device_id = ?';
params.push(VhcModels.STTS_ACTIVE, device_id);
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async getVhcById(id) {
return new Promise((resolve, reject) => {
let params = [];
let query = 'SELECT';
query += ' v.id as vid,v.nopol1,v.nopol2,v.nopol3,v.sum_milleage,vd.speed_limit';
query += ' ,da.fullname as da_name,da.phone as da_phone,da.phone_code as da_phone_code';
query += ' ,v.is_in_ord,v.ord_id,v.ord_code,v.ord_ids';
query += ' FROM t_vehicles AS v';
query += ' INNER JOIN t_vehicles_detail AS vd ON v.id = vd.vid';
query += ' LEFT JOIN t_drivers AS da ON v.a_did = da.id';
// query += ' WHERE v.dlt is null AND v.status = ? AND v.id = ?';
query += ' WHERE v.dlt is null AND v.id = ?';
query += ' LIMIT 1';
params.push(id);
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async update(id, data) {
return new Promise((resolve, reject) => {
const query = `UPDATE t_vehicles SET ? WHERE id = ?;`;
db.getConnection(function (err, conn) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.beginTransaction(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.query(query, [data, id], function (err, resp) {
if (err) {
conn.rollback(async function () {
conn.release();
reject(err.message);
});
return false;
}
conn.commit(async function (err) {
if (err) {
conn.release();
reject(err);
return false;
}
conn.release();
resolve(resp);
return true;
});
});
});
});
});
}
}
module.exports = VhcModels;

313
models/ZoneModels.js Normal file
View File

@ -0,0 +1,313 @@
const db = require(`../config/dbMysqlConn`);
const defaultSelectGetInZone = `
z.id as zid,z.name,z.desc,z.type,zt.name as type_name,z.workflow_type,zw.name as workflow_type_name
,z.shiptocode,z.fulladdress,z.boundary_type,z.boundary_radius,z.boundary_latlngs,ST_AsText(boundary_points) as points
,z.client_group_id,c.c_name,c_mail,c.pic_name,c.pic_mail
`;
class ZoneModels {
static STTS_ACTIVE = 1;
static STTS_INACTIVE = 2;
static ZONE_BOUNDARY_CIRCLE = 'circle';
static ZONE_BOUNDARY_POLYGON = 'polygon';
static ZONE_BOUNDARY_RECTANGLE = 'rectangle';
static async getNearest(lat, lng, meters) {
return new Promise((resolve, reject) => {
let params = [];
let query = 'SELECT';
query += defaultSelectGetInZone;
query += ` ,ST_Distance_Sphere( ST_GeomFromText('POINT(${lng} ${lat})'), z.boundary_points) AS distance_meters`;
// params.push(lng, lat);
query += ' FROM t_zones AS z';
query += ' INNER JOIN t_zones_types AS zt ON z.type = zt.id';
query += ' INNER JOIN t_zones_workflows AS zw ON z.workflow_type = zw.id';
query += ' LEFT JOIN t_clients AS c ON z.client_group_id = c.id';
query += ' WHERE z.dlt is null AND z.status = ?';
params.push(ZoneModels.STTS_ACTIVE);
query += ' HAVING distance_meters <= ?';
params.push(meters);
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async getInCircle(lat, lng, filter = {}) {
return new Promise((resolve, reject) => {
let params = [];
let query = 'SELECT';
query += defaultSelectGetInZone;
query += ` ,ST_Distance_Sphere( ST_GeomFromText('POINT(${lng} ${lat})'), z.boundary_points) AS distance_meters`;
// params.push(lng, lat);
query += ' FROM t_zones AS z';
query += ' INNER JOIN t_zones_types AS zt ON z.type = zt.id';
query += ' INNER JOIN t_zones_workflows AS zw ON z.workflow_type = zw.id';
query += ' LEFT JOIN t_clients AS c ON z.client_group_id = c.id';
query += ' WHERE z.dlt is null AND z.status = ? AND z.boundary_type = ?';
params.push(ZoneModels.STTS_ACTIVE, ZoneModels.ZONE_BOUNDARY_CIRCLE);
if (filter['zid']) {
query += ' AND z.id = ?';
params.push(filter['zid']);
}
query += ' HAVING boundary_radius >= distance_meters';
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async getInShape(lat, lng, filter = {}) {
return new Promise((resolve, reject) => {
let params = [];
let query = 'SELECT';
query += defaultSelectGetInZone;
query += ` ,ST_Distance_Sphere( ST_GeomFromText('POINT(${lng} ${lat})'), z.boundary_points) AS distance_meters`;
query += ` ,MBRContains( boundary_points, ST_GeomFromText('POINT(${lng} ${lat})') ) as is_contain`;
query += ` ,MBRWithin( ST_GeomFromText('POINT(${lng} ${lat})'), boundary_points ) as is_within`;
// params.push(lng, lat);
query += ' FROM t_zones AS z';
query += ' INNER JOIN t_zones_types AS zt ON z.type = zt.id';
query += ' INNER JOIN t_zones_workflows AS zw ON z.workflow_type = zw.id';
query += ' LEFT JOIN t_clients AS c ON z.client_group_id = c.id';
query += ' WHERE z.dlt is null AND z.status = ? AND z.boundary_type IN (?,?)';
params.push(ZoneModels.STTS_ACTIVE, ZoneModels.ZONE_BOUNDARY_POLYGON, ZoneModels.ZONE_BOUNDARY_RECTANGLE);
if (filter['zid']) {
query += ' AND z.id = ?';
params.push(filter['zid']);
}
query += ' HAVING is_within = 1';
query += ' AND is_contain = 1';
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async getOrdInCircle(lat, lng, filter = {}) {
return new Promise((resolve, reject) => {
let params = [];
let query = 'SELECT';
query += defaultSelectGetInZone;
query += ` ,ST_Distance_Sphere( ST_GeomFromText('POINT(${lng} ${lat})'), z.boundary_points) AS distance_meters`;
// params.push(lng, lat);
query += ' FROM t_zones AS z';
query += ' INNER JOIN t_zones_types AS zt ON z.type = zt.id';
query += ' INNER JOIN t_zones_workflows AS zw ON z.workflow_type = zw.id';
query += ' LEFT JOIN t_clients AS c ON z.client_group_id = c.id';
query += ' WHERE z.boundary_type = ?';
params.push(ZoneModels.ZONE_BOUNDARY_CIRCLE);
if (filter['zid']) {
query += ' AND z.id = ?';
params.push(filter['zid']);
}
query += ' HAVING boundary_radius >= distance_meters';
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async getOrdInShape(lat, lng, filter = {}) {
return new Promise((resolve, reject) => {
let params = [];
let query = 'SELECT';
query += defaultSelectGetInZone;
query += ` ,ST_Distance_Sphere( ST_GeomFromText('POINT(${lng} ${lat})'), z.boundary_points) AS distance_meters`;
query += ` ,MBRContains( boundary_points, ST_GeomFromText('POINT(${lng} ${lat})') ) as is_contain`;
query += ` ,MBRWithin( ST_GeomFromText('POINT(${lng} ${lat})'), boundary_points ) as is_within`;
// params.push(lng, lat);
query += ' FROM t_zones AS z';
query += ' INNER JOIN t_zones_types AS zt ON z.type = zt.id';
query += ' INNER JOIN t_zones_workflows AS zw ON z.workflow_type = zw.id';
query += ' LEFT JOIN t_clients AS c ON z.client_group_id = c.id';
query += ' WHERe z.boundary_type IN (?,?)';
params.push(ZoneModels.ZONE_BOUNDARY_POLYGON, ZoneModels.ZONE_BOUNDARY_RECTANGLE);
if (filter['zid']) {
query += ' AND z.id = ?';
params.push(filter['zid']);
}
query += ' HAVING is_within = 1';
query += ' AND is_contain = 1';
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async testZoning() {
return new Promise((resolve, reject) => {
`
-- in mysql using x,y => longitude,latitude
-- ST_GeomFromText(col) => convert text to blob, ST_AsText(col) convert blob to text
SELECT id,name,boundary_type,boundary_radius,ST_AsText(boundary_points) FROM db_trucking.t_zones;
-- nearest zone from this latLng for circle. if radius less than meters, it mean this loc in this zone
SELECT id,name,boundary_type,boundary_radius as radius,ST_AsText(boundary_points) AS zonasi
,ST_Distance_Sphere( ST_GeomFromText('POINT(106.834916 -6.161736)'), boundary_points) AS meters
FROM db_trucking.t_zones WHERE boundary_type='circle'
HAVING radius >= meters;
-- id:3 => -6.57538126,106.63426234
-- id:5 => -6.244811,106.865669
-- nearest zone from this latLng for polygon,rectangle
SELECT id,name,boundary_type
,MBRContains( boundary_points, ST_GeomFromText('POINT(106.865669 -6.244811)') ) as contain
,MBRWithin( ST_GeomFromText('POINT(106.865669 -6.244811)'), boundary_points ) as within
,ST_AsText(boundary_points) as zonasi
,ST_Distance_Sphere( ST_GeomFromText('POINT(106.865669 -6.244811)'), boundary_points) AS meters
FROM db_trucking.t_zones WHERE boundary_type IN ('polygon','rectangle')
HAVING within >= 1;
`
let params = [];
let query = 'SELECT * FROM t_zones';
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async getCheckpointsInCircle(lat, lng, filter = {}) {
return new Promise((resolve, reject) => {
let params = [];
let where = '';
let query = 'SELECT';
query += defaultSelectGetInZone;
query += `
,ord.id as ord_id,ord.code as ord_code,ord_pck_drop.id as ord_pck_drop_id
,ord.status as stts_order,ord_pck_drop.stts as stts_delivery
,ord.crt as ord_crt,ord_pck_drop.crt as ord_pck_drop_crt
,checkpoint.id as checkpoint_id,checkpoint.pocket_sort,checkpoint.pocket_is_paid,checkpoint.pocket_total
,ord_drv.drv_id,ord_drv.drv_name,ord_drv.drv_bank_id,ord_drv.drv_bank_code,ord_drv.drv_bank_name,ord_drv.drv_bank_short_name,ord_drv.drv_bank_acc_number,ord_drv.drv_bank_acc_name
`;
query += ` ,ST_Distance_Sphere( ST_GeomFromText('POINT(${lng} ${lat})'), z.boundary_points) AS distance_meters`;
// params.push(lng, lat);
query += ' FROM t_zones AS z';
query += ' INNER JOIN t_zones_types AS zt ON z.type = zt.id';
query += ' INNER JOIN t_zones_workflows AS zw ON z.workflow_type = zw.id';
query += ' LEFT JOIN t_clients AS c ON z.client_group_id = c.id';
query += ' INNER JOIN t_orders_checkpoints AS checkpoint ON z.id = checkpoint.pck_id';
query += ' INNER JOIN t_orders AS ord ON checkpoint.ord_id = ord.id';
query += ' INNER JOIN t_orders_pck_drop AS ord_pck_drop ON checkpoint.ord_id = ord_pck_drop.ord_id';
query += ' INNER JOIN t_orders_drivers AS ord_drv ON checkpoint.ord_id = ord_drv.ord_id';
query += ' WHERE ord.dlt is null AND checkpoint.dlt is null AND z.boundary_type = ?';
params.push(ZoneModels.ZONE_BOUNDARY_CIRCLE);
if (typeof filter['pocket_is_paid'] !== 'undefined') query += ' AND checkpoint.pocket_is_paid = ' + filter['pocket_is_paid'];
if (typeof filter['where_not_pocket_is_paid'] !== 'undefined') query += ' AND checkpoint.pocket_is_paid != ' + filter['where_not_pocket_is_paid'];
if (typeof filter['pocket_sort'] !== 'undefined') query += ' AND checkpoint.pocket_sort != 1';
if (typeof filter['drv_id'] !== 'undefined') query += ' AND ord_drv.drv_id = ' + filter['drv_id'];
if (filter['stts_delivery'] && filter['stts_delivery'].length > 0) {
where += ' AND ord_pck_drop.stts IN (';
for (const stts_delivery of filter['stts_delivery']) {
where += '?,';
params.push(stts_delivery);
}
where = where.slice(0, -1) + ')';
}
query += where;
query += ' HAVING boundary_radius >= distance_meters';
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
static async getCheckpointsInShape(lat, lng, filter = {}) {
return new Promise((resolve, reject) => {
let params = [];
let where = '';
let query = 'SELECT';
query += defaultSelectGetInZone;
query += `
,ord.id as ord_id,ord.code as ord_code,ord_pck_drop.id as ord_pck_drop_id
,ord.status as stts_order,ord_pck_drop.stts as stts_delivery
,ord.crt as ord_crt,ord_pck_drop.crt as ord_pck_drop_crt
,checkpoint.id as checkpoint_id,checkpoint.pocket_sort,checkpoint.pocket_is_paid,checkpoint.pocket_total
,ord_drv.drv_id,ord_drv.drv_name,ord_drv.drv_bank_id,ord_drv.drv_bank_code,ord_drv.drv_bank_name,ord_drv.drv_bank_short_name,ord_drv.drv_bank_branch_name,ord_drv.drv_bank_acc_number,ord_drv.drv_bank_acc_name
`;
query += ` ,ST_Distance_Sphere( ST_GeomFromText('POINT(${lng} ${lat})'), z.boundary_points) AS distance_meters`;
query += ` ,MBRContains( boundary_points, ST_GeomFromText('POINT(${lng} ${lat})') ) as is_contain`;
query += ` ,MBRWithin( ST_GeomFromText('POINT(${lng} ${lat})'), boundary_points ) as is_within`;
// params.push(lng, lat);
query += ' FROM t_zones AS z';
query += ' INNER JOIN t_zones_types AS zt ON z.type = zt.id';
query += ' INNER JOIN t_zones_workflows AS zw ON z.workflow_type = zw.id';
query += ' LEFT JOIN t_clients AS c ON z.client_group_id = c.id';
query += ' INNER JOIN t_orders_checkpoints AS checkpoint ON z.id = checkpoint.pck_id';
query += ' INNER JOIN t_orders AS ord ON checkpoint.ord_id = ord.id';
query += ' INNER JOIN t_orders_pck_drop AS ord_pck_drop ON checkpoint.ord_id = ord_pck_drop.ord_id';
query += ' INNER JOIN t_orders_drivers AS ord_drv ON checkpoint.ord_id = ord_drv.ord_id';
query += ' WHERE ord.dlt is null AND checkpoint.dlt is null AND z.boundary_type IN (?,?)';
params.push(ZoneModels.ZONE_BOUNDARY_POLYGON, ZoneModels.ZONE_BOUNDARY_RECTANGLE);
if (typeof filter['pocket_is_paid'] !== 'undefined') query += ' AND checkpoint.pocket_is_paid = ' + filter['pocket_is_paid'];
if (typeof filter['where_not_pocket_is_paid'] !== 'undefined') query += ' AND checkpoint.pocket_is_paid != ' + filter['where_not_pocket_is_paid'];
if (typeof filter['pocket_sort'] !== 'undefined') query += ' AND checkpoint.pocket_sort != 1';
if (typeof filter['drv_id'] !== 'undefined') query += ' AND ord_drv.drv_id = ' + filter['drv_id'];
if (filter['stts_delivery'] && filter['stts_delivery'].length > 0) {
where += ' AND ord_pck_drop.stts IN (';
for (const stts_delivery of filter['stts_delivery']) {
where += '?,';
params.push(stts_delivery);
}
where = where.slice(0, -1) + ')';
}
query += where;
query += ' HAVING is_within = 1';
query += ' AND is_contain = 1';
db.query(query, params, function (err, resp) {
if (err) {
reject(err);
return false;
}
resolve(resp);
return true;
});
});
}
}
module.exports = ZoneModels;