Untitled

 avatar
user_4058768
plain_text
a year ago
7.8 kB
5
Indexable
module.exports = app => {
  const menu = {
    parentMenu: app.parentMenu.sdh,
    menus: {
      7642: {
        title: 'Quản lý đề tài (2)', link: '/user/sau-dai-hoc/de-tai', parentKey: 7543
      }
    }
  };

  app.permission.add(
    { name: 'sdhDeTai:read', menu },
    'sdhDeTai:write',
    'sdhDeTai:delete',
  );

  app.get('/user/sau-dai-hoc/de-tai', app.permission.check('sdhDeTai:read'), app.templates.admin);
  app.get('/user/sau-dai-hoc/so-quyet-dinh/:mssv', app.permission.check('sdhDeTai:read'), app.templates.admin);

  //APIs----------------------------------------------------------------------------------------------------------------------------------
  app.get('/api/sdh/de-tai', app.permission.check('sdhDeTai:read'), async (req, res) => {
    try {
      const items = await app.model.sdhDeTai.getAll({}, '*', 'ID');
      res.send({ items });
    } catch (error) {
      app.consoleError(req, error);
      res.send({ error });
    }
  });

  app.get('/api/sdh/de-tai/page/:pageNumber/:pageSize', app.permission.check('sdhDeTai:read'), async (req, res) => {
    try {
      const { pageNumber, pageSize } = req.params;
      let { filter = {} } = req.query || {};

      const { rows: list, pagenumber, pagesize, pagetotal, totalitem } = await app.model.sdhDeTai.searchPage(Number(pageNumber), Number(pageSize), app.utils.stringify(filter));

      list.forEach(item => {
        item.canBo = app.utils.parse(item.canBo);
        item.canBo = item.canBo.filter(canBo =>
          !(canBo.mscb === null &&
            canBo.vaiTro === null &&
            canBo.hoTenCanBo === null &&
            canBo.from === null)
        );
      }
      );

      res.send({ page: { list, pageNumber: pagenumber, pageSize: pagesize, pageTotal: pagetotal, totalItem: totalitem } });
    } catch (error) {
      app.consoleError(app, error);
      res.send({ error });
    }
  });

  app.get('/api/sdh/cbhd/page/:pageNumber/:pageSize', app.permission.check('sdhDeTai:read'), async (req, res) => {
    try {
      const { pageNumber, pageSize } = req.params;
      let { filter } = req.query || {};
      filter = filter || {};
      const searchTerm = typeof req.query.condition === 'string' ? req.query.condition : '';

      const { rows: list, pagenumber, pagesize, pagetotal, totalitem } = await app.model.sdhDeTai.sdhCanBoHuongDanSearchPage(Number(pageNumber), Number(pageSize), app.utils.stringify(filter), searchTerm);
      res.send({ page: { list, pageNumber: pagenumber, pageSize: pagesize, pageTotal: pagetotal, totalItem: totalitem } });
    } catch (error) {
      app.consoleError(error);
      res.send({ error });
    }
  });

  app.get('/api/sdh/cbhd/item/:shcc', app.permission.check('sdhDeTai:read'), async (req, res) => {
    try {
      const mscb = req.params.shcc;
      const { belongTo } = req.query;
      const belongToMapper = {
        'CBTT': async () => await app.model.tchcCanBo.get({ shcc: mscb }).then(item => ({ ...item, belongTo: 'CBTT' })),
        'CBNT': async () => await app.model.dtCanBoNgoaiTruong.get({ shcc: mscb }).then(item => ({ ...item, belongTo: 'CBNT' })),
        'CBSDH': async () => await app.model.sdhCanBo.get({ id: mscb }).then(item => ({ ...item, shcc: item.id, belongTo: 'CBSDH' })),
      };

      const canBo = await belongToMapper[belongTo]();
      res.send({
        item: { ...canBo }
      });
    } catch (error) {
      app.consoleError(req, error);
      res.send({ error });
    }
  });



  app.post('/api/sdh/duyet-de-tai', app.permission.check('sdhDeTai:write'), async (req, res) => {
    try {
      const { data, id } = req.body;

      const soQuyetDinhData = {
        ten: data.tenSqd,
        time: Date.now(),
        idDeTai: id,
        soQuyetDinh: data.soQuyetDinh,
        mssv: data.mssv
      };

      const soQuyetDinhItem = await app.model.sdhSoQuyetDinh.create(soQuyetDinhData);

      const [deTai, cbhd] = await Promise.all([
        app.model.sdhDeTai.update({ id }, { isDuyet: 1 }),
        app.model.sdhCbhd.getAll({ mssv: data.mssv })
      ]);

      await Promise.all(cbhd.flatMap(item => [
        app.model.sdhSoQuyetDinhDetail.create({
          soQuyetDinh: soQuyetDinhItem.id,
          tenDeTai: deTai.tenDeTai,
          typeShcc: 0,
          shcc: item.idCanBo,
          vaiTro: item.vaiTro,
        })
      ]));

      const item = {
        soQuyetDinh: soQuyetDinhItem,
      };

      res.send({ item });
    } catch (error) {
      app.consoleError(req, error);
      res.send({ error });
    }
  });

  app.post('/api/sdh/de-tai', app.permission.check('sdhDeTai:write'), async (req, res) => {
    try {
      const { data } = req.body;
      const deTaiData = {
        tenDeTai: data.tenDeTai,
        mssv: data.mssv,
        ghiChu: data.ghiChu,
        noiDung: data.noiDung,
        isDuyet: 0,
      };

      const deTaiItem = await app.model.sdhDeTai.create(deTaiData);

      await Promise.all(data.cbhd.flatMap(item => [
        app.model.sdhCbhd.create({
          vaiTro: item.vaiTro,
          idCanBo: item.shcc,
          mssv: data.mssv,
          belongTo: item.belongTo,
        })
      ]));

      res.send({ item: deTaiItem });
    } catch (error) {
      app.consoleError(req, error);
      res.send({ error });
    }
  });

  app.put('/api/sdh/de-tai', app.permission.check('sdhDeTai:write'), async (req, res) => {
    try {
      const { data, id } = req.body;
      const deTaiData = {
        tenDeTai: data.tenDeTai,
        mssv: data.mssv,
        ghiChu: data.ghiChu,
        noiDung: data.noiDung
      };

      const soQuyetDinhData = {
        ten: data.tenSqd,
        time: Date.now(),
        idDeTai: id,
        soQuyetDinh: data.soQuyetDinh,
        mssv: data.mssv
      };

      const soQuyetDinhItem = await app.model.sdhSoQuyetDinh.create(soQuyetDinhData);

      await app.model.sdhCbhd.delete({ mssv: data.mssv });
      await Promise.all([
        app.model.sdhSoQuyetDinh.update({ idDeTai: id, active: 0 }, { active: 1 }),
        app.model.sdhDeTai.update({ id }, deTaiData),

        app.model.sdhSoQuyetDinh.create(soQuyetDinhData),
        ...data.cbhd.flatMap(item => [
          app.model.sdhCbhd.create({
            vaiTro: item.vaiTro,
            idCanBo: item.shcc,
            belongTo: item.belongTo,
            mssv: data.mssv
          }),
          app.model.sdhSoQuyetDinhDetail.create({
            soQuyetDinh: soQuyetDinhItem.id,
            tenDeTai: data.tenDeTai,
            shcc: item.shcc,
            typeShcc: 0,
            vaiTro: item.vaiTro
          })
        ])
      ]);

      res.send({ 'message': 'success' });
    } catch (error) {
      app.consoleError(req, error);
      res.send({ error });
    }
  });
  app.get('/api/sdh/de-tai-sinh-vien/page/:pageNumber/:pageSize', app.permission.check('sdhDeTai:read'), async (req, res) => {
    try {
      const pagenumber = parseInt(req.params.pageNumber),
        pagesize = parseInt(req.params.pageSize),
        { condition, filter } = req.query,
        searchTerm = typeof condition === 'string' ? condition : '';
      const page = await app.model.sdhDeTai.sinhVienWithDeTaiAdapter(pagenumber, pagesize, searchTerm, app.utils.stringify(filter));
      const { totalitem: totalItem, pagesize: pageSize, pagetotal: pageTotal, pagenumber: pageNumber, rows: list } = page;
      res.send({ page: { totalItem, pageSize, pageTotal, pageNumber, list } });
    } catch (error) {
      app.consoleError(app, error);
      res.send({ error });
    }
  });
};
Editor is loading...
Leave a Comment