diff --git a/components/admin/TheSidebar.vue b/components/admin/TheSidebar.vue index 0edc61d..61bc26f 100644 --- a/components/admin/TheSidebar.vue +++ b/components/admin/TheSidebar.vue @@ -353,6 +353,8 @@ name="دستگاه های ثبت شده" :to="{ name: 'admin-gps-installed-device', query: { filter: 'all' } }" font-icon="fal fa-map" + :badge="newInstallDeviceRequest ? { text: newInstallDeviceRequest, color: 'danger' } : null" + :exact="false" /> diff --git a/mixins/WS_Admin.js b/mixins/WS_Admin.js index 3e3a71a..02dd882 100644 --- a/mixins/WS_Admin.js +++ b/mixins/WS_Admin.js @@ -67,6 +67,47 @@ export default { }) socket.on(`admin:notify`, data => { + if (data.type === 'newAwardRequest') { + // update store + this.$store.commit('admin/set', ['newAwardRequest', data.newAwardRequest]) + + // update DOM + if (this.$route.name === 'admin-gps-award-req') { + this.$nuxt.refresh() + } + } + + if (data.type === 'newInstallDeviceRequest') { + // update store + this.$store.commit('admin/set', ['newInstallDeviceRequest', data.newInstallDeviceRequest]) + + // update DOM + if (this.$route.name === 'admin-gps-installed-device') { + this.$nuxt.refresh() + } + } + + if (data.type === 'newWithdrawRequest') { + // update store + this.$store.commit('admin/set', ['newWithdrawRequest', data.newWithdrawRequest]) + + // update DOM + if (this.$route.name === 'admin-gps-withdraw') { + this.$nuxt.refresh() + } + } + + if (data.type === 'updateNewCustomers') { + // update store + this.$store.commit('admin/set', ['updateNewCustomers', data.updateNewCustomers]) + + // update DOM + if (this.$route.name === 'admin-gps-users') { + this.$nuxt.refresh() + } + } + + if (data.type === 'updateUnreadCuMsgs') { // update store this.$store.commit('admin/set', ['unreadCuMsgs', data.unreadCuMsgs]) diff --git a/pages/admin/gps/award-req/index.vue b/pages/admin/gps/award-req/index.vue new file mode 100644 index 0000000..347cf5b --- /dev/null +++ b/pages/admin/gps/award-req/index.vue @@ -0,0 +1,206 @@ + + + + diff --git a/server/WebSocket/controllers/admin_EventsController.js b/server/WebSocket/controllers/admin_EventsController.js index fab02ec..6427760 100644 --- a/server/WebSocket/controllers/admin_EventsController.js +++ b/server/WebSocket/controllers/admin_EventsController.js @@ -96,6 +96,27 @@ module.exports.notifyAdmin = async type => { const admin = io.of('/admin') const data = { type } + if (type === 'newAwardRequest') { + const newCustomers = await AwardRequest.countDocuments({ status: 0 }) + + data.newCustomers = newCustomers.length + } + if (type === 'newInstallDeviceRequest') { + const newCustomers = await InstalledDevice.countDocuments({ status: 0 }) + + data.newCustomers = newCustomers.length + } + + if (type === 'newWithdrawRequest') { + const newCustomers = await Withdraw.countDocuments({ status: 0 }) + + data.newCustomers = newCustomers.length + } + if (type === 'pendingUsers') { + const newCustomers = await UserGPS.countDocuments({ active: false }) + + data.newCustomers = newCustomers.length + } if (type === 'updateNewCustomers') { const newCustomers = await User.find({ scope: ['user'], seenByAdmin: false }) data.newCustomers = newCustomers.length diff --git a/server/controllers/GPS.AwardRequest.js b/server/controllers/GPS.AwardRequest.js index d23e63b..6e68f09 100644 --- a/server/controllers/GPS.AwardRequest.js +++ b/server/controllers/GPS.AwardRequest.js @@ -4,6 +4,7 @@ const { checkValidations } = require('../plugins/controllersHelperFunctions') const User = require('../models/GPS.User') const Award = require('../models/GPS.Award'); const AwardRequest = require('../models/GPS.AwardRequest'); +const { notifyAdmin } = require('../WebSocket/controllers/admin_EventsController') module.exports.sendRequest = [ @@ -27,6 +28,7 @@ module.exports.sendRequest = [ userId:req.user_id }) // res.status(200).json({ msg:_sr.fa.response.success_save, data}) + notifyAdmin('newAwardRequest') res.status(200).json(data) }else{ @@ -45,7 +47,7 @@ module.exports.findAllUser = async(req, res)=>{ } module.exports.findAllAdmin = async(req, res)=>{ - const data = await AwardRequest.find().populate('awardId','-created_at -updated_at').populate('userId', 'first_name last_name shopName shopNumber shopAddress national_code mobile_number') + const data = await AwardRequest.find().populate('awardId','-created_at -updated_at').populate('userId', 'first_name last_name shopName national_code mobile_number') res.status(200).json(data) } @@ -55,7 +57,7 @@ module.exports.findOne = [ ], checkValidations(validationResult), async (req, res) => { - const data = await AwardRequest.findById(req.params.id).populate('awardId','-created_at -updated_at').populate('userId', 'first_name last_name shopName shopNumber shopAddress national_code mobile_number') + const data = await AwardRequest.findById(req.params.id).populate('awardId','-created_at -updated_at').populate('userId', 'first_name last_name shopName national_code mobile_number') if (!data) { res.status(404).json({ msg: _sr.fa.not_found.item_id }) } else { @@ -79,14 +81,16 @@ module.exports.update = [ if (!data) { res.status(404).json({ msg: _sr.fa.not_found.item_id }) } else { - await AwardRequest.updateOne( - {id:req.params.id}, + await AwardRequest.findByIdAndUpdate( + req.params.id, { status, desc, metaData } ) + notifyAdmin('newAwardRequest') + res.status(200).json({ msg: _sr.fa.response.success_save }) } diff --git a/server/controllers/GPS.InstalledDevice.js b/server/controllers/GPS.InstalledDevice.js index 66fbbed..e8efcaa 100644 --- a/server/controllers/GPS.InstalledDevice.js +++ b/server/controllers/GPS.InstalledDevice.js @@ -1,10 +1,11 @@ const { body, param, validationResult } = require('express-validator'); const { checkValidations } = require('../plugins/controllersHelperFunctions'); -const User = require('../models/User'); +const User = require('../models/GPS.User'); const InstalledDevice = require('../models/GPS.InstalledDevice'); const Device = require('../models/GPS.Device'); const Score = require('../models/GPS.Score'); const { _sr } = require('../plugins/serverResponses'); +const { notifyAdmin } = require('../WebSocket/controllers/admin_EventsController') module.exports.deviceRegistration = [ [ @@ -30,6 +31,8 @@ module.exports.deviceRegistration = [ const newRequest = await InstalledDevice.create(data); device.status = 1; device.save() + notifyAdmin('newInstallDeviceRequest') + // res.status(201).json({ msg: _sr.fa.response.success_save, data: newRequest }) res.status(201).json(newRequest) @@ -121,9 +124,9 @@ module.exports.updateInstalled = [ installedDevice.installationDate = new Date(); device.status = 1; - - user.walletBalance = device.profit - user.dollarBalance = device.dollarProfit + + user.walletBalance += device.profit + user.dollarBalance += device.dollarProfit user.score = device.score @@ -136,8 +139,10 @@ module.exports.updateInstalled = [ user.save() device.save() installedDevice.save() + notifyAdmin('newInstallDeviceRequest') + res.status(201).json({ msg: _sr.fa.response.success_save, data: installedDevice }) - + break; } @@ -146,6 +151,8 @@ module.exports.updateInstalled = [ installedDevice.save() device.status = 0; device.save() + notifyAdmin('newInstallDeviceRequest') + res.status(201).json({ msg: _sr.fa.response.success_save, data: installedDevice }) diff --git a/server/controllers/GPS.User.js b/server/controllers/GPS.User.js index d5814c2..6062a79 100644 --- a/server/controllers/GPS.User.js +++ b/server/controllers/GPS.User.js @@ -16,6 +16,7 @@ const { generateRandomDigits } = require('../plugins/controllersHelperFunctions') const _faSr = _sr.fa +const { notifyAdmin } = require('../WebSocket/controllers/admin_EventsController') @@ -158,6 +159,8 @@ module.exports.register_user = [ const user = new User(data) await user.save() + notifyAdmin('pendingUsers') + return res.json({ message: _faSr.response.success_save }) } catch (err) { const registerFailurMsg = 'مشکلی در ثبت نام پیش آمده، لطفا مجددا تلاش کنید' @@ -295,7 +298,7 @@ module.exports.send_otp = [ const user = await User.findOne({ mobile_number }) if (!user) throw new Error(_sr.fa.not_found.user_id) await sendConfirmationSMS(user.id) - res.status(200).json({msg:"ok"}) + res.status(200).json({ msg: "ok" }) } catch (err) { if (err) return res500(res, err) } @@ -373,14 +376,14 @@ module.exports.getUsersForAdmin = async (req, res) => { res.status(200).json(user) } module.exports.getPendingUsersForAdmin = async (req, res) => { - const user = await User.find({active:false}).sort({ active: 1, created_at: -1 }).select('-password -token -otp -seenByAdmin -cardBank') + const user = await User.find({ active: false }).sort({ active: 1, created_at: -1 }).select('-password -token -otp -seenByAdmin -cardBank') res.status(200).json(user) } module.exports.getUserForAdmin = async (req, res) => { const user = await User.findById(req.params.id).select('-password -token -otp -seenByAdmin') if (!user) { return res.status(404).json({ msg: _sr.fa.not_found.user_id }) - }else { + } else { user.seenByAdmin = true user.save() res.status(200).json(user) @@ -401,6 +404,7 @@ module.exports.activeUser = [ { new: true }).select('-password -token -otp -seenByAdmin') if (!data) return res.status(404).json({ msg: _sr.fa.not_found.user_id }) + notifyAdmin('pendingUsers') res.status(200).json(data) diff --git a/server/controllers/GPS.Withdraw.js b/server/controllers/GPS.Withdraw.js index b48abbd..70fe129 100644 --- a/server/controllers/GPS.Withdraw.js +++ b/server/controllers/GPS.Withdraw.js @@ -3,6 +3,7 @@ const { _sr } = require('../plugins/serverResponses'); const { checkValidations } = require('../plugins/controllersHelperFunctions'); const User = require('../models/GPS.User'); const Withdraw = require('../models/GPS.Withdraw'); +const { notifyAdmin } = require('../WebSocket/controllers/admin_EventsController') module.exports.createRequest = [ @@ -12,35 +13,36 @@ module.exports.createRequest = [ checkValidations(validationResult), async (req, res) => { try { - const withdraw = await Withdraw.findOne({userId: req.user_id, status:0}) - if(withdraw){ - res.status(400).json({ msg: 'شما درخواست درحال بررسی دارید' }) - }else{ - const user = await User.findById(req.user_id) - if(user.walletBalance < 50000){ - const data = { - card: req.body.card, - userId: req.user_id, - amount: user.walletBalance, - dollarAmount: user.dollarBalance, - status: 0 - } - - const request = await Withdraw.create(data) - user.dollarBalance = 0; - user.walletBalance = 0; - user.save() - // res.status(201).json({ msg: _sr.fa.response.success_save, data: request }) - res.status(201).json(request) - }else{ - res.status(400).json({ msg: 'حداقل موجودی باید 50 هزار تومان باشد' }) - } + const withdraw = await Withdraw.findOne({ userId: req.user_id, status: 0 }) + if (withdraw) { + res.status(400).json({ msg: 'شما درخواست درحال بررسی دارید' }) + } else { + const user = await User.findById(req.user_id) + if (user.walletBalance < 50000) { + const data = { + card: req.body.card, + userId: req.user_id, + amount: user.walletBalance, + dollarAmount: user.dollarBalance, + status: 0 + } - } + const request = await Withdraw.create(data) + user.dollarBalance = 0; + user.walletBalance = 0; + user.save() + // res.status(201).json({ msg: _sr.fa.response.success_save, data: request }) + notifyAdmin('newWithdrawRequest') + res.status(201).json(request) + } else { + res.status(400).json({ msg: 'حداقل موجودی باید 50 هزار تومان باشد' }) + } + + } } catch (error) { res.status(500).json({ msg: error }) - + } } ] @@ -67,14 +69,14 @@ module.exports.getAllForUser = async (req, res) => { // const search = req.query?.search ? req.query.search : 0 - const data = await Withdraw.find({ + const data = await Withdraw.find({ userId: req.user_id, // $or: [ // { amount: { $regex: search } }, // { dollarAmount: { $regex: search } }, // { trackingNumber: { $regex: search } }, // ], - }).skip(page).limit(rows).sort({ created_at: -1 }); + }).skip(page).limit(rows).sort({ created_at: -1 }); const total = Math.ceil((await Withdraw.countDocuments({ userId: req.user_id }))) res.status(200).json({ data, total }) } @@ -119,8 +121,10 @@ module.exports.updateReq = [ case "accept": { request.status = 1; request.save() + notifyAdmin('newWithdrawRequest') + res.status(201).json({ msg: _sr.fa.response.success_save, data: request }) - + break; } case "deposit": { @@ -128,8 +132,10 @@ module.exports.updateReq = [ request.depositDate = new Date(); request.trackingNumber = req.body.trackingNumber || 0; request.save() + notifyAdmin('newWithdrawRequest') + res.status(201).json({ msg: _sr.fa.response.success_save, data: request }) - + break; } default: {