????
Current Path : C:/inetpub/vhost/sdoc.gdtsolutions.vn/package/app/controllers/dichvu/ |
Current File : C:/inetpub/vhost/sdoc.gdtsolutions.vn/package/app/controllers/dichvu/yeucau.js |
var Database = require('../../models/Database'); var mailCtrl = require('./mail'); var { exportRequest } = require('../baocao/WordController'); var moment = require('moment'); class RequestController extends Database { constructor(params) { super(params); } static create(params) { return new RequestController(params); } // Kiểm tra thông tin người yêu cầu async checkInfo(user, idnumber) { if (user) { return { IdNumber: user['IdNumber'], FullName: user['FullName'], Birthday: user['Birthday'], login: true } } else if (idnumber) { let reqInfo = (await this.select('SELECT Top 1 FullName,IdNumber,Birthday FROM DocReq WHERE IdNumber = @idnumber ORDER BY DateCreated desc', { idnumber: idnumber }))[0]; return reqInfo || null; } else { return null } } // Xử lý yêu cầu tài liệu async checkout(reqInfo, user) { let input = { createdBy: user ? user.UUID : null, fullname: reqInfo['fullname'], idnumber: reqInfo['idnumber'], birthday: moment.utc(reqInfo['birthday'], 'DD/MM/YYYY').isValid() ? moment.utc(reqInfo['birthday'], 'DD/MM/YYYY').toDate() : null, phone: reqInfo['phone'], address: reqInfo['address'] || null, // email: reqInfo['email'] || null, organ: reqInfo['organ'] || null, uses: reqInfo['uses'] } let reqId = (await this.select('INSERT INTO DocReq(FullName,IdNumber,Birthday,Telephone,Address,OrganName,Uses,CreatedBy) OUTPUT inserted.UUID VALUES (@fullname,@idnumber,@birthday,@phone,@address,@organ,@uses,@createdBy)', input))[0]['UUID']; let cart = JSON.parse(reqInfo['cart']); for (let i = 0; i < cart.length; i++) { var reqItem = cart[i]; reqItem.reqId = reqId; await this.query('INSERT INTO ReqContent(ReqId,DocId,CopiedNumber,CertifiedNumber,Description,Price) VALUES (@reqId,@docId,@copiedNum,@certifiedNum,@desc,@price)', reqItem); } await this.exportPDF(reqId); return reqId; } getRequests(reqInfo) { let condition = []; if (typeof reqInfo['account'] != 'undefined') condition.push('DocReq.CreatedBy = @account'); if (typeof reqInfo['approved'] != 'undefined') condition.push(`DocReq.ApprovedBy is ${reqInfo['approved'] ? 'not ' : ''}NULL`); let query = 'SELECT DocReq.UUID,DocReq.FullName,DocReq.Telephone,DocReq.CreatedBy,DocReq.ApprovedBy,DocReq.IdNumber,DocReq.DateCreated,DocReq.[State],ReqNumber,aAcc.FullName as aAccName,bAcc.FullName as bAccName, (SELECT SUM(Price) FROM ReqContent WHERE ReqContent.ReqId = DocReq.UUID) totalPrice FROM DocReq LEFT JOIN Account aAcc ON DocReq.CreatedBy = aAcc.UUID LEFT JOIN Account bAcc ON DocReq.ApprovedBy = bAcc.UUID' + (condition.length ? ' WHERE ' + condition.join(' AND ') : ''); return this.select(query, { account: reqInfo['account'] }) } async getReqInfo(reqId, isDetail) { let info = (await this.select("SELECT UUID,FullName,IdNumber,FORMAT(Birthday, 'dd/MM/yyyy') Birthday,Telephone,Address,N'Việt Nam' as Nationality,OrganName,DateCreated,Uses,ReqNumber FROM DocReq WHERE UUID = @id", { id: reqId }))[0]; if (info && isDetail) info['Content'] = await this.getRequestDetail(reqId); return info; } getRequestDetail(reqId) { return this.select('SELECT ROW_NUMBER() OVER(ORDER BY Document.IssuedDate) as rowNum,Document.UUID,Fond.FondName,Document.CodeNumber,Document.CodeNotation,Document.Subject,Document.IssuedDate,Document.PageAmount,ReqContent.CopiedNumber,ReqContent.CertifiedNumber,ReqContent.Price,ReqContent.Description FROM ReqContent INNER JOIN Document INNER JOIN [File] ON [File].UUID = Document.FileId INNER JOIN Fond ON Fond.FondCode = [File].FondCode ON ReqContent.DocId = Document.UUID WHERE ReqContent.ReqId = @reqId', { reqId: reqId }) } async approveReq(reqId, approvedId, state) { let input = { approvedId: approvedId, state: state, reqId: reqId }; let result = await this.query('UPDATE DocReq SET ApprovedBy = @approvedId, ApprovedDate = GETDATE(), [State] = @state WHERE UUID = @reqId', input); if (result.rowsAffected[0]) { let req = (await this.select('SELECT FullName,Telephone,IdNumber,DateCreated,ApprovedDate,ReqNumber,COUNT(DocId) countDoc, SUM(Price) totalPrice FROM DocReq LEFT JOIN ReqContent ON DocReq.UUID = ReqContent.ReqId WHERE UUID = @reqId GROUP BY FullName,Telephone,IdNumber,DateCreated,ApprovedDate,ReqNumber', { reqId: reqId }))[0]; mailCtrl.sendApprovedReq(req, state); } return result; } getPrices() { var query = 'SELECT Code, Name, Price, Unit FROM ReqType'; return this.select(query); } updatePrice(reqInfo) { let updates = []; if (typeof reqInfo['reqname'] != 'undefined') updates.push('Name = @reqname') if (typeof reqInfo['price'] != 'undefined') updates.push('Price = @price'); if (typeof reqInfo['unit'] != 'undefined') updates.push('Unit = @unit'); return this.query(`UPDATE ReqType SET ${updates.join(',')} WHERE Code = @code`, reqInfo); } async exportPDF(reqId) { let req = await this.getReqInfo(reqId, true); if (!req) throw new Error('Mã yêu cầu hồ sơ không tồn tại'); await exportRequest(req); } } module.exports = RequestController;