????

Your IP : 3.17.183.238


Current Path : C:/inetpub/vhost/sdoc.gdtsolutions.vn/package/app/controllers/
Upload File :
Current File : C:/inetpub/vhost/sdoc.gdtsolutions.vn/package/app/controllers/danhmuc.old.js

const Database = require('../models/Database');
var moment = require('moment');
const pattern = /[^\p{L}\p{Nd}]+/gu;// /[\/\-\s]+/g

class DanhMucController extends Database {
  constructor(params) {
    super(params);
  }
  static create(params) {
    return new DanhMucController(params);
  }
  async getFonds() {
    var fonds = await this.select('SELECT UUID,FondCode,FondNumber,FondName,FondHistory,PaperDigital,CopyNumber,[Description],State, (SELECT Count(UUID) FROM [File] WHERE [File].FondCode = Fond.FondCode AND [File].[State] = 1 AND [File].EditedBy is not NULL) countFile FROM Fond ORDER BY FondNumber');
    return fonds;
  }
  getFileGroups() {
    return this.select('SELECT Id,GroupName FROM FileGroup')
  }
  getDocTypes() {
    return this.select('SELECT DocType.Id,DocType.TypeName,DocType.TypeGroup,DocTypeGroup.Name as GroupName FROM DocType INNER JOIN DocTypeGroup ON DocType.TypeGroup = DocTypeGroup.Id')
  }
  getOrgans() {
    return this.select('SELECT UUID,OrganId,OrganName FROM Organization')
  }
  getLanguages() {
    return this.select('SELECT LangCode,LangName FROM Language')
  }
  getConfidenceLevels() {
    return this.select('SELECT Id,Name FROM ConfidenceLevel')
  }
  getDocModes() {
    return this.select('SELECT Id,ModeName FROM Mode')
  }
  getLookupTools() {
    return this.select('SELECT Id,ToolName FROM LookupTool')
  }
  async getReqPrices() {
    let prices = await this.select('SELECT Code,Name,Price,Unit FROM ReqType');
    let data = {};
    for (let i = 0; i < prices.length; i++) {
      let { Code, ...value } = prices[i];
      data[Code] = value;
    }
    return data;
  }
  //Danh mục hồ sơ văn bản
  async getDocuments(search) {
    let result = {
      draw: parseInt(search.draw) || 0,
      recordsTotal: 0,
      recordsFiltered: 0
    };
    let condition = [];
    let reqInput = {};
    let order = '(SELECT NULL)';
    let content = search['content'] ? search['content'].split(pattern).filter(x => x) : [];
    if (content.length > 1) reqInput['search'] = `NEAR((${search['content'].split(pattern).filter(x => x).join(',').trim()}), 5,FALSE)`;
    else if (content.length == 1) reqInput['search'] = `"${content.toString()}*"`
    //Tìm kiếm nâng cao
    if (moment.utc(search['startDate'], 'DD/MM/YYYY').isValid()) {
      condition.push('IssuedDate >= @startDate');
      reqInput['startDate'] = moment.utc(search['startDate'], 'DD/MM/YYYY').toDate();
    }
    if (moment.utc(search['endDate'], 'DD/MM/YYYY').isValid()) {
      condition.push('IssuedDate <= @endDate');
      reqInput['endDate'] = moment.utc(search['endDate'], 'DD/MM/YYYY').toDate();
    }
    if (search['type']) { condition.push('(DocType = @type)'); reqInput['type'] = search['type'] }
    if (search['notation']) { condition.push('CONTAINS(SearchDoc.CodeNotation, @notation)'); reqInput['notation'] = search['notation'].split(pattern).join('+').trim() }
    if (search['organ']) { condition.push('CONTAINS(OrganName, @organ)'); reqInput['organ'] = search['organ'].split(pattern).join('+').trim() }
    if (search['subject']) { condition.push('CONTAINS(Subject, @subject)'); reqInput['subject'] = search['subject'].split(pattern).join('+').trim() }
    if (reqInput['search']) order = 'rankSearch.[RANK] desc';
    //Tạo chuỗi truy vấn
    let query = `SELECT ROW_NUMBER() OVER(ORDER BY ${order}) as RowNum,SearchDoc.UUID,FondName,FileCatalog,BoxNumber,FileNumber,DocType.TypeName,CodeNotation,IssuedDate,OrganName,[Subject],PageAmount,SearchDoc.[Description],Autograph,COUNT(SearchDoc.UUID) OVER() as countDocs FROM SearchDoc LEFT JOIN DocType ON SearchDoc.DocType = DocType.Id`;
    if (reqInput['search']) query += ' INNER JOIN CONTAINSTABLE(SearchDoc, *, @search) AS rankSearch ON rankSearch.[KEY] = SearchDoc.UUID';
    if (condition.length) query += ' WHERE ' + condition.join(' AND ');
    query += ' ORDER BY RowNum';
    reqInput['length'] = parseInt(search['length']) || 0;
    reqInput['start'] = parseInt(search['start']) || 0;
    if (reqInput['length']) query += ' OFFSET @start rows FETCH NEXT @length rows ONLY';
    let recordset = await this.select(query, reqInput);
    if (recordset.length) result.recordsFiltered = result.recordsTotal = recordset[0].countDocs;
    result.data = recordset;
    return result;
  }
  async getFiles(search) {
    let result = {
      draw: parseInt(search.draw) || 0,
      recordsTotal: 0,
      recordsFiltered: 0
    };
    let condition = [];
    let reqInput = {};
    let order = 'FondNumber,FileCatalog,BoxNumber,FileNumber';
    let content = search['content'] ? search['content'].split(pattern).filter(x => x) : [];
    if (content.length > 1) reqInput['search'] = `NEAR((${search['content'].split(pattern).filter(x => x).join(',').trim()}), 5, FALSE)`;
    else if (content.length == 1) reqInput['search'] = `"${content.toString()}*"`;
    //Tìm kiếm nâng cao
    if (search['fond']) { condition.push('(SearchFile.FondCode = @fond)'); reqInput['fond'] = search['fond'] }
    if (search['group']) { condition.push('(SearchFile.GroupId = @group)'); reqInput['group'] = search['group'] }
    if (reqInput['search']) order = 'rankedFile.[RANK] desc';
    //Tạo chuỗi truy vấn
    let query = `SELECT ROW_NUMBER() OVER(ORDER BY ${order}) RowNum,SearchFile.*,COUNT(SearchFile.UUID) OVER() as countFile FROM SearchFile`;
    if (reqInput['search']) query += ' INNER JOIN CONTAINSTABLE([File], *, @search) rankedFile ON rankedFile.[KEY] = SearchFile.UUID';
    if (condition.length) query += ' WHERE ' + condition.join(' AND ');
    query += ' ORDER BY RowNum';
    reqInput['length'] = parseInt(search['length']) || 0;
    reqInput['start'] = parseInt(search['start']) || 0;
    if (reqInput['length']) query += ' OFFSET @start rows FETCH NEXT @length rows ONLY';
    let recordset = await this.select(query, reqInput);
    if (recordset.length) result.recordsFiltered = result.recordsTotal = recordset[0].countFile;
    result.data = recordset;
    return result;
  }
  async getFondDetail(reqQuery) {
    var data = { items: [], itemCount: 0 }
    if (!reqQuery.fondCode) return data;
    var input = {
      fond: reqQuery.fondCode,
      skip: parseInt(reqQuery.skip) || 0
    }
    var query = 'WITH AllFile AS (SELECT UUID,FileCatalog,BoxNumber,FileNumber,Title,FileNotation,Maintenance,StartDate,EndDate,[Description],SheetNumber,PageNumber,(SELECT COUNT(Document.UUID) FROM Document WHERE Document.FileId = [File].UUID) as countDoc,EditedBy,ApprovedBy FROM [File] WHERE FondCode = @fond AND EditedBy is not NULL) SELECT *, COUNT(UUID) OVER() as countFile FROM AllFile ORDER BY FileCatalog,BoxNumber,FileNumber';
    if (reqQuery.take) {
      input.take = parseInt(reqQuery.take);
      query += ' OFFSET @skip rows FETCH NEXT @take rows ONLY';
    }
    var files = await this.select(query, input);
    data.items = files;
    if (files.length) data.itemCount = files[0].countFile;
    return data;
  }
}

module.exports = DanhMucController;