+
+ Shenior Kurir
+
+
- List User
+ List
+ User
- List Penghantaran
+ List
+ Penghantaran
diff --git a/routes/admin_ui/list.html b/routes/admin_ui/list.html
new file mode 100644
index 0000000..0849650
--- /dev/null
+++ b/routes/admin_ui/list.html
@@ -0,0 +1,895 @@
+
+
+
+
+
+
+
+
+
+
+ Shenior Kurir | List Penghantaran
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Shenior Kurir | List User
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- Log Penghantaran
@@ -269,6 +272,9 @@
+
+
+
@@ -292,7 +298,6 @@
img2.height = 200;
document.getElementById('preview-gambar-kurir').appendChild(img2);
- document.getElementById('h5-title').innerHTML = global_data.nama;
$("#nama").val(global_data.nama);
$("#no_telpon").val(global_data.no_telpon);
@@ -300,6 +305,7 @@
$("#jenis-kelamin").val(global_data.jenis_kelamin);
$("#dd-motor").val(global_data.dd_motor);
+
+
+
-
-
-
-
-
-
Admin
+Admin
-
+
+
+
+
+
+
+
-
-
-
-Navigasi
-
@@ -57,19 +67,20 @@
- List Kurir + class="menu-icon ico mdi mdi-motorbike">List Kurir
- - List User + List + User
- - List Penghantaran + List + Penghantaran - +
- Logout @@ -77,128 +88,337 @@
-
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
-
+
\ No newline at end of file
diff --git a/routes/admin_ui/kurir.html b/routes/admin_ui/kurir.html
index 9a2b9c5..bbc4f50 100644
--- a/routes/admin_ui/kurir.html
+++ b/routes/admin_ui/kurir.html
@@ -64,13 +64,13 @@
-
+
+
+
+
+
+
-
-
-
-
-
-
- Jumlah Kurir
- - - -
-
-
-
-
-
-
-
-
-
-
- 
-
-
-
-
-
-
- Orang
- -
-
-
-
-
- Jumlah User
- - - -
-
-
-
-
-
-
-
-
-
- 
-
-
-
-
-
-
- Orang
- -
-
+
-
-
- Jumlah Kiriman
- - - -
-
-
-
-
-
-
-
-
-
- 
-
-
-
-
-
-
- Orang
- -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Jumlah Kurir
+ + + +
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+ Orang
+ +
+
+
+
+
+ Jumlah User
+ + + +
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+ Orang
+ +
+
+
+
+
+ Jumlah Kiriman
+ + + +
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+ Orang
+ +
+
+
+
+
+ Form Pengiriman Paket Berjalan
+ +
+
+
+
+ Tidak ada pengiriman baru
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Modal title
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+ Modal title
+
+
+
+
+
+ Shenior Kurir
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Navigasi
+ +-
+
- + Halaman + Utama + + +
- + List Kurir + + +
- + List + User + + +
- + List Penghantaran + + + +
- + Logout + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form List Penghantaran
+ +
+
+
+
+ Tidak ada list penghantaran
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Modal title
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/routes/admin_ui/user.html b/routes/admin_ui/user.html
new file mode 100644
index 0000000..b7e3764
--- /dev/null
+++ b/routes/admin_ui/user.html
@@ -0,0 +1,322 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Modal title
+
+
+
+
+
+ Shenior Kurir
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Navigasi
+ +-
+
- + Halaman + Utama + + +
- + List Kurir + + +
- + List + User + + +
- + List Penghantaran + + + +
- + Logout + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form User
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/routes/kurir_router.ts b/routes/kurir_router.ts
index 9be32aa..e377dce 100644
--- a/routes/kurir_router.ts
+++ b/routes/kurir_router.ts
@@ -5,6 +5,10 @@ import KurirModel from '../models/kurir_model';
import type { UploadedFile } from 'express-fileupload';
import path from 'path';
import fs from 'fs';
+import UserModel from '../models/user_model';
+import KirimanModel from '../models/kiriman_model';
+import axios from 'axios';
+import { socket_client } from '../index';
const router = express.Router();
@@ -12,6 +16,10 @@ router.get('/', (req: Request, res: Response) => {
res.sendFile(__dirname + '/kurir_ui/index.html');
});
+router.get('/penghantaran', (req: Request, res: Response) => {
+ res.sendFile(__dirname + '/kurir_ui/penghantaran.html');
+})
+
router.get('/login', (req: Request, res: Response) => {
res.sendFile(__dirname + '/kurir_ui/login.html');
});
@@ -28,11 +36,11 @@ router.post('/login', async (req: Request, res: Response) => {
res.status(400).json('Nomor Telpon atau Password Salah');
return;
} catch (error) {
- console.log("error di kurir login",error);
+ console.log("error di kurir login", error);
res.status(500).json('Terjadi Kesalahan Server');
return;
}
-
+
});
router.get('/:jenis/:gambar', (req: Request, res: Response) => {
@@ -44,7 +52,19 @@ router.get('/:jenis/:gambar', (req: Request, res: Response) => {
} else {
res.status(404).send('Image not found');
}
-
+
+})
+
+router.get('/gambar-paket/:id/:gambar', (req: Request, res: Response) => {
+ const { id, gambar } = req.params;
+ const imagePath = path.join(__dirname, `../images/kiriman/${id}/${gambar}`);
+
+ if (fs.existsSync(imagePath)) {
+ res.sendFile(imagePath);
+ } else {
+ res.status(404).send('Image not found');
+ }
+
})
router.post('/check', async (req: Request, res: Response) => {
@@ -53,7 +73,7 @@ router.post('/check', async (req: Request, res: Response) => {
return;
}
const { _id, no_telpon, password, createdAt } = req.body;
- console.log(_id , no_telpon , password , createdAt);
+ console.log(_id, no_telpon, password, createdAt);
// console.log(_id , no_telpon , password , createdAt);
try {
@@ -74,6 +94,224 @@ router.post('/check', async (req: Request, res: Response) => {
})
+router.get('/paket/:id/:status', async (req: Request, res: Response) => {
+ const { id, status } = req.params;
+ try {
+ const kirimanDoc = status == "ongoing" ? await KirimanModel.find({
+ id_kurir: id,
+ status: {
+ $nin: ['Dibatalkan Oleh Admin', 'Paket Telah Diterima Penerima',"Diterima Terverifikasi"],
+ $type: 'string'
+ }
+ }) : await KirimanModel.find({ id_kurir: id });
+ console.log(kirimanDoc);
+ res.status(200).json(kirimanDoc);
+ } catch (error) {
+ console.log(error);
+ res.status(500).json([]);
+ }
+})
+router.get('/user/:id', async (req: Request, res: Response) => {
+ const { id } = req.params;
+
+ try {
+ const user = await UserModel.findOne({ _id: id });
+ res.status(200).json(user);
+ } catch (error) {
+ console.log(error);
+ res.status(500).json();
+ }
+
+})
+
+router.delete('/batalkan-pengiriman/:id_kurir', async (req: Request, res: Response) => {
+ const { id_kurir } = req.params;
+ const { id, alasan } = req.body;
+ // console.log(id_kurir , id , alasan);
+
+ try {
+ const updatedDoc = await KirimanModel.findByIdAndUpdate(
+ id,
+ {
+ $set: {
+ status: 'Dibatalkan Oleh Kurir , Admin mencari kurir baru',
+ id_kurir: null
+ },
+ $push: {
+ timeline: {
+ status: 'Dibatalkan Oleh Kurir , Admin mencari kurir baru',
+ waktu: new Date(),
+ alasan: alasan || null,
+ id_kurir
+ }
+ }
+ },
+ { new: true } // Return the updated document
+
+ );
+
+ await KurirModel.findByIdAndUpdate(
+ id_kurir,
+ {
+ $set: {
+ status: 'Tersedia'
+ }
+ },
+ { new: true } // Return the updated document
+ )
+ // console.log(updatedDoc);
+ const userData = await UserModel.findById(updatedDoc?.id_pengirim);
+ // const kurirData = await KurirModel.findById(id_kurir);
+
+ socket_client.emit('pembatalan_paket_kurir', updatedDoc);
+
+ try {
+ await axios.post('http://localhost:3012/send-message', { number: userData?.no_telpon, message: `🛵*_Kurir Shenior 🛵_*\nPengiriman anda dengan nomor resi ${updatedDoc?._id} telah dibatalkan oleh kurir\nAdmin akan menugaskan kurir yang baru\nHarap Bersabar'}* 🔄🔄` })
+ } catch (error) {
+ console.log(error)
+ }
+
+ } catch (error) {
+ console.log(error)
+ res.status(500).json();
+ }
+
+
+})
+
+
+// kurir menyetujui pengambilan pengiriman
+router.put('/mengambil-pengiriman/:id', async (req: Request, res: Response) => {
+ const { id: id_kiriman } = req.params;
+ const { id_kurir } = req.body;
+ console.log(id_kiriman, id_kurir);
+
+ // sini nnt berlaku update data
+ // const kirimanData = await KirimanModel.findById(id_kiriman);
+ const kirimanDoc = await KirimanModel.findByIdAndUpdate(
+ id_kiriman,
+ {
+ $set: {
+ id_kurir: id_kurir,
+ status: 'Kurir Dalam Perjalanan',
+ },
+ $push: {
+ timeline: {
+ status: 'Kurir Dalam Perjalanan',
+ waktu: new Date(),
+ alasan: null,
+ id_kurir
+ }
+ }
+ },
+ { new: true } // Return the updated document
+ );
+
+ const userData = await UserModel.findById(kirimanDoc?.id_pengirim);
+ const kurirData = await KurirModel.findById(id_kurir);
+
+
+ try {
+ await axios.post('http://localhost:3012/send-message', { number: userData?.no_telpon, message: `🛵*_Kurir Shenior_* 🛵 \nPengiriman anda dengan nomor resi *${id_kiriman}* telash disetujui oleh kurir.\n Kurir sekarang berangkat ke alamat pengirim untuk mengambil paket, Silakan menunggu} ➡️➡️` })
+ await axios.post('http://localhost:3012/send-message', { number: kurirData?.no_telpon, message: `🛵*_Kurir Shenior_* 🛵 \nAnda telah ditugaskan untuk mengambil paket dengan nomor resi *${id_kiriman}* \nAlamat Pengirim : *${kirimanDoc?.alamat_pengirim}* \nNama Pengirim: *${kirimanDoc?.nama_pengirim}*` })
+ } catch (error) {
+ console.log("Error Mengambil Pengiriman | Kurir");
+ console.log(error);
+ }
+
+
+
+ // notifikasi ke aplikasi (admin dan user)
+ socket_client.emit('kurir_mengambil_pengiriman', kirimanDoc);
+
+
+ res.status(200).json("ini mengambil pengiriman");
+
+})
+
+router.post('/mengambil-pengiriman-dari-pengirim-ke-penerima/:id', async (req: Request, res: Response) => {
+ const { id: id_kiriman } = req.params;
+ const { id_kurir, status } = req.body;
+
+ const { foto_paket } = req.files as {
+ foto_paket: UploadedFile;
+
+ };
+
+ // console.log(id_kiriman, id_kurir);
+ // console.log(foto_paket);
+
+ const random_5_char = Math.random().toString(36).substring(2, 7);
+ const nama_foto = `${random_5_char}-${foto_paket.name}`;
+
+ const paketDir = path.join(__dirname, `../images/kiriman/${id_kiriman}`);
+ const paketPath = path.join(paketDir, `${nama_foto}`);
+
+ console.log(paketPath);
+ fs.mkdirSync(paketDir, { recursive: true });
+
+ // move photo
+ await foto_paket.mv(paketPath);
+
+
+ // const kirimanDoc = await KirimanModel.findById(id_kiriman);
+ const kirimanDoc = await KirimanModel.findByIdAndUpdate(
+ id_kiriman,
+ {
+ $set: {
+ id_kurir: id_kurir,
+ status: status == "mengirim" ? 'Mengirim Paket Ke Alamat Penerima' : 'Paket Telah Diterima Penerima',
+ },
+ $push: {
+ timeline: {
+ status: status == "mengirim" ? 'Mengirim Paket Ke Alamat Penerima' : 'Paket Telah Diterima Penerima',
+ waktu: new Date(),
+ alasan: null,
+ id_kurir,
+ gambar: nama_foto
+ }
+ }
+ },
+ { new: true } // Return the updated document
+ );
+
+
+ const userData = await UserModel.findById(kirimanDoc?.id_pengirim);
+ // const kurirData = await KurirModel.findById(id_kurir);
+ if (status == "menerima") {
+ await KurirModel.findByIdAndUpdate(
+ id_kurir,
+ {
+ $set: {
+ status: 'Tersedia'
+ }
+ }
+ )
+ }
+
+
+ // console.log(kirimanDoc);
+ // console.log(userData);
+ // console.log(kurirData);
+
+ try {
+ const mes = status == "mengirim" ? `🛵*_Kurir Shenior_* 🛵 \nPengiriman anda dengan nomor resi *${id_kiriman}* telah diambil oleh kurir.\nSilakan menunggu kurir mengantarkan paket ke alamat penerima di *${kirimanDoc?.alamat_penerima}*` : `🛵*_Kurir Shenior_* 🛵 \nPengiriman anda dengan nomor resi *${id_kiriman}* telah diterima oleh penerima.`
+ await axios.post('http://localhost:3012/send-message', { number: userData?.no_telpon, message: mes, img_stat: true, foto_paket: paketPath, foto_name: foto_paket.name })
+ // await axios.post('http://localhost:3012/send-message', { number: kurirData?.no_telpon, message: `🛵*_Kurir Shenior_* 🛵 \nAnda telah mengambil paket dengan nomor resi *${id_kiriman}* di alamat pengirim dan akan menghantar ke \nAlamat Penerima : *${kirimanDoc?.alamat_penerima}* \nNama Penerima: *${kirimanDoc?.nama_penerima}*` ,img_stat:true , foto_paket : paketPath, foto_name : foto_paket.name})
+ } catch (error) {
+ console.log("Error Mengambil Pengiriman di pengirim | Kurir");
+ console.log(error);
+ }
+
+ socket_client.emit('kurir_menghantar_ke_penerima', kirimanDoc);
+
+ res.status(200).json("sukses");
+})
+
+// log penghantaran menu
+router.get('/log', async (req: Request, res: Response) => {
+ res.sendFile(__dirname + '/kurir_ui/log.html');
+})
export default router;
\ No newline at end of file
diff --git a/routes/kurir_ui/index.html b/routes/kurir_ui/index.html
index 5dc53fa..ee15c2e 100644
--- a/routes/kurir_ui/index.html
+++ b/routes/kurir_ui/index.html
@@ -24,6 +24,9 @@
+
+
+
@@ -66,7 +69,7 @@
-->
+
+
+
+
+
+
+
+ Modal title
+
+
+
+
+