123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- const HttpException = require('../../utils/HttpException.js');
- const prisma = require('../../prisma/PrismaClient.js');
- const { createLog } = require('../../utils/LogActivity.js');
- const StatusHistoryRepository = require('../../repository/sales/StatusHistoryRepository.js');
- exports.getAllStatusHistoryService = async ({ page, limit, search, sortBy, orderBy }, req) => {
- const skip = (page - 1) * limit;
- const userId = req.tokenData.sub;
- const hospitalId = req.params.id;
- const hospital = await prisma.hospital.findFirst({
- where: {
- id: hospitalId
- }
- })
- if (!hospital) {
- throw new HttpException("Hospital not found", 404)
- }
- const userAreas = await prisma.userArea.findMany({
- where: { user_id: userId },
- select: { province_id: true }
- });
- const userProvinceIds = userAreas.map(ua => ua.province_id);
- if (!userProvinceIds.includes(hospital.province_id)) {
- throw new HttpException("This hospital is not your area", 403);
- }
- const where = {
- hospital_id: req.params.id,
- deletedAt: null
- };
- const [status_histories, total] = await Promise.all([
- StatusHistoryRepository.findAll({ skip, take: limit, where, orderBy: { [sortBy]: orderBy } }),
- StatusHistoryRepository.countAll(where)
- ]);
- return { status_histories, total };
- };
- const validProgressStatuses = ['cari_data', 'dihubungi', 'negosiasi', 'follow_up', 'mou', 'onboarded', 'tidak_berminat'];
- exports.storeStatusHistoryService = async (validateData, req) => {
- const hospitalId = req.params.id;
- const userId = req.tokenData.sub;
- const hospital = await prisma.hospital.findFirst({
- where: {
- id: hospitalId
- }
- })
- if (!hospital) {
- throw new HttpException("Hospital not found", 404)
- }
- const userAreas = await prisma.userArea.findMany({
- where: { user_id: userId },
- select: { province_id: true }
- });
- const userProvinceIds = userAreas.map(ua => ua.province_id);
- if (!userProvinceIds.includes(hospital.province_id)) {
- throw new HttpException("This hospital is not your area", 403);
- }
- if (validateData.new_status && !validProgressStatuses.includes(validateData.new_status)) {
- throw new HttpException(
- `Invalid new_status. Allowed values are: ${validProgressStatuses.join(', ')}`,
- 422
- );
- }
- if (validateData.new_status === hospital.progress_status) {
- throw new HttpException("New status change is the same as old status", 400)
- }
- const payload = {
- hospital_id: hospitalId,
- user_id: userId,
- old_status: hospital.progress_status,
- new_status: validateData.new_status,
- note: validateData.note,
- };
- const data = await StatusHistoryRepository.create(payload);
- await prisma.hospital.update({
- where: { id: hospitalId },
- data: {
- progress_status: validateData.new_status
- }
- });
- await createLog(req, data);
- };
|