Example #1
0
File: app.js Project: yanest/ticket
function genQQLink(isAdmin, ticketCid, visitCid, threads) {
  var p = new AV.Promise();
  if (isAdmin) {
    muser.findUserById(ticketCid).then(function (c) {
      if (c && c.qq) {
        p.resolve('/clients/' + ticketCid);
      } else {
        p.resolve(null);
      }
    }, mutil.rejectFn(p));
  } else {
    if (ticketCid == visitCid) {
      admin.findCleanAdmins().then(function (admins) {
        for (var i = threads.length - 1; i >= 0; i--) {
          var thread = threads[i];
          for (var j = 0; j < admins.length; j++) {
            var admin = admins[j];
            mlog.log('cid=' + admin.cid + '  ' + thread.cid);
            if (thread.cid == admin.cid) {
              p.resolve('/engineers/' + admin.id);
              return;
            }
          }
        }
        p.resolve();
      }, mutil.rejectFn(p));
    } else {
      p.resolve();
    }
  }
  return p;
}
Example #2
0
function getStatictics(res, results, sway, dateConfig) {
  var map = {};
  if (sway == 'recorder') {
    var q = new AV.Query('Recorder');
    q.find().then(function(rcs) {
      for (var i = 0; i < rcs.length; i++) {
        map[rcs[i].get('name')] = 0;
      };
      for (var i = 0; i < results.length; i++) {
        var r = results[i].get('recorder');
        if(r.get('name') == undefined){
          continue;
        }
        var cost = results[i].get('cost');
        if (r.get('name')) {
          map[r.get('name')] = map[r.get('name')] + cost;
        }
      };
      mutil.renderData(res, {values:map,dateConfig:dateConfig});
    });
  } else if (sway == 'studio') {
    var q = new AV.Query('Studio');
    q.find().then(function(rcs) {
      for (var i = 0; i < rcs.length; i++) {
        map[rcs[i].get('name')] = 0;
      };
      for (var i = 0; i < results.length; i++) {
        var r = results[i].get('studio');
        if(r.get('name') == undefined){//todo
          continue;
        }
        var cost = results[i].get('cost');
        if (r.get('name')) {
          map[r.get('name')] = map[r.get('name')] + cost;
        }
      };
      mutil.renderData(res, {values:map,dateConfig:dateConfig});
    });

  } else if (sway == 'businessType') {
    var tps = mconfig.convertDictToList('businessTypes');
    for (var i = 0; i < tps.length; i++) {
      map[tps[i].text] = 0;
    };
    for (var i = 0; i < results.length; i++) {
      var text = mconfig.getConfigMapByValue('businessTypes', results[i].get('businessType'));
      if (text) {
        map[text.text] = map[text.text] + results[i].get('cost');
      }
    };
     mutil.renderData(res, {values:map,dateConfig:dateConfig});
  } else{
    mutil.renderError(res, {code:500, message:'参数错误'});
  }
}
Example #3
0
app.get(config.baseUrl + '/account/isLogin', function(req, res) {
  var u = isLogin();
  if (u) {
    mutil.renderData(res, u);
  } else {
    mutil.renderErrorData(res, {
      code: 500,
      message: '请重新登录!'
    });
  }
});
Example #4
0
app.get(config.baseUrl + '/dict/:key', function(req, res) {
  var key = req.params.key
  var dictData = mconfig.convertDictToList(key);
  if (dictData == null) {
    mutil.renderError(res, {
      code: 404,
      message: 'dict not found'
    });
  }
  mutil.renderData(res, mconfig.convertDictToList(key));
});
Example #5
0
function agreeAllAddRequests(){
  var p=new AV.Promise();
  mutil.findAll('AddRequest',function(q){
    q.equalTo('status',0);
  },mutil.rejectFn(p)).then(function(adds){
    var ps=[];
    _.each(adds,function(add){
      ps.push(_agreeAddRequest(add.id));
    });
    AV.Promise.when(ps).then(function(){
      p.resolve();
    },mutil.rejectFn(p));
  });
  return p;
}
Example #6
0
File: app.js Project: yanest/ticket
function sendEmail(ticket, subject, text, email) {
  var type = ticket.get('type');
  admin.findEmailsByType(type).then(function (emails) {
    var to;
    if (email) {
      to = email;
    } else {
      if (emails) {
        to = emails.join(',');
      }
    }
    if (__production && to) {
      mg.sendRaw(_s.sprintf('AVOS Cloud Ticket System <%s>', config.emailHost),
        [to],
          'From:' + config.emailHost +
          '\nTo: ' + to +
          '\nContent-Type: text/html; charset=utf-8' +
          '\nSubject: ' + subject +
          '\n\n' + text,
        function (err) {
          err && console.log(err)
        });
    } else {
      mlog.log(text + 'email= ' + to);
    }
  }, mutil.logErrorFn());
}
Example #7
0
 findClient(req, res, function (token, cid, client) {
   mlog.log('find client');
   req.token = token;
   req.cid = cid;
   req.client = client;
   mlog.log('find cid=' + req.cid);
   isAdmin(cid).then(function (isAdmin) {
     req.admin = isAdmin;
     if (req.cid != anonymousCid && client.emailVerified == false) {
       if (/^\/(requestEmailVerify|logout)/.test(req.url) || config.needEmailVerify === false) {
         next();
       } else {
         renderEmailVerify(res, client.email);
       }
     } else {
       if (/^\/admin.*/.test(req.url)) {
         if (isAdmin) {
           next();
         } else {
           mlog.log('isn\'t not admin');
           mutil.renderForbidden(res);
         }
       }else{
         next();
       }
     }
   }, mutil.renderErrorFn(res));
 });
Example #8
0
File: app.js Project: yanest/ticket
 admin.findAdmins().then(function (admins) {
   admins = _.map(admins, admin.transformAdmin);
   var allTickets;
   var allThreads;
   var promises = [];
   promises.push(admin.findAll('Ticket').then(function (tickets) {
     allTickets = tickets;
   }));
   promises.push(admin.findAll('Thread').then(function (threads) {
     allThreads = threads;
   }));
   //mlog.log('find all');
   AV.Promise.when(promises).then(function () {
     var ticketThreads = [];
     var used = new Array(allThreads.length);
     for (var i = 0; i < used.length; i++) {
       used[i] = false;
     }
     allTickets.forEach(function (ticket) {
       var threads = [];
       for (var i = 0; i < allThreads.length; i++) {
         var thread = allThreads[i];
         if (used[i] == false && thread.get('ticket').id == ticket.id) {
           used[i] = true;
           threads.push(thread);
         }
       }
       ticketThreads.push({ticket: ticket, threads: threads});
     });
     var __ret = getStatisticsEachType(admins, ticketThreads);
     getStatisticsEachAdmin(admins, ticketThreads);
     //mlog.log(admins);
     res.render('admin_statistics', {token: token, week: __ret.week, allhistory: __ret.allhistory, admins: admins});
   }, mutil.renderErrorFn(res));
 }, mutil.renderErrorFn(res));
Example #9
0
 query.count().then(function(count) {
   pageMap = concretePageMap(count);
   if (count == 0 || pageNumber > pageMap.totalPageNum) {
     pageMap['values'] = [];
     pageMap['currentPage'] = pageMap.totalPageNum;
     mutil.renderData(res, pageMap);
   } else {
     pageMap['currentPage'] = pageNumber;
     query.include('recorder');
     query.include('studio');
     query.limit(pageSize);
     query.skip(pageSize * (pageNumber - 1));
     query.find({
       success: function(lst) {
         var rlist = [];
         for (var i = 0; i < lst.length; i++) {
           rlist.push(tanformTask(lst[i]));
         };
         pageMap['values'] = rlist;
         mutil.renderData(res, pageMap);
       },
       error: function(error) {
         mutil.renderError(res, error);
       }
     });
   }
 });
Example #10
0
function tryCreateAddRequest(req,res){
  var fromUserId=req.params.fromUserId;
  var toUserId=req.params.toUserId;
  _tryCreateAddRequest(fromUserId,toUserId).then(function(){
    res.success();
  },mutil.cloudErrorFn(res));
}
Example #11
0
function haveAddRequest(fromUserId,toUserId){
  var p=new AV.Promise();
  var fromUser=createUser(fromUserId);
  var toUser=createUser(toUserId);
  mutil.findOne('AddRequest',function(q){
    q.equalTo('fromUser',fromUser);
    q.equalTo('toUser',toUser);
    q.equalTo('status',statusWait);
  }).then(function(addRequest){
    if(addRequest){
      p.resolve(true);
    }else{
      p.resolve(false);
    }
  },mutil.rejectFn(p));
  return p;
}
Example #12
0
 success: function(lst) {
   var rlist = [];
   for (var i = 0; i < lst.length; i++) {
     rlist.push(tanformTask(lst[i]));
   };
   pageMap['values'] = rlist;
   mutil.renderData(res, pageMap);
 },
Example #13
0
 },mutil.rejectFn(p)).then(function(adds){
   var ps=[];
   _.each(adds,function(add){
     ps.push(_agreeAddRequest(add.id));
   });
   AV.Promise.when(ps).then(function(){
     p.resolve();
   },mutil.rejectFn(p));
 });
Example #14
0
File: app.js Project: yanest/ticket
app.get('/contact', function (req, res) {
  var cid = req.cid;
  var client = req.client;
  admin.findAdmins().then(function (admins) {
    admins = _.map(admins, admin.transformAdmin);
    _.each(admins, addTypeName);
    isAdmin = req.admin;
    res.render('contact', {admins: admins, isAdmin: isAdmin, client: client});
  }, mutil.renderErrorFn(res));
});
Example #15
0
File: app.js Project: yanest/ticket
function addNotify(link, cid, msg) {
  console.log(link + ' ' + cid);
  var n = new AV.Object('TicketNotification');
  n.set('cid', cid);
  n.set('link', link);
  if (msg)
    n.set('message', msg);
  n.save().then(function () {
  }, mutil.logErrorFn());
}
Example #16
0
function check_login(res) {
  var u = isLogin();
  if (u) {
    return u;
  } else {
    mutil.renderError(res, {
      code: 501,
      message: '未登录,请重新登录!'
    });
  }
};
Example #17
0
 haveAddRequest(fromUserId,toUserId).then(function(have){
   mlog.log('have='+have);
   if(have){
     p.reject(Error('已经请求过了'));
   }else{
     createAddRequest(fromUserId,toUserId).then(function(){
       mlog.log('create');
       p.resolve();
     },mutil.rejectFn(p));
   }
 },mutil.rejectFn(p));
Example #18
0
File: app.js Project: yanest/ticket
app.get('/engineers/:id', function (req, res) {
  var id = req.params.id;
  admin.findCleanAdminById(id).then(function (admin) {
    if (admin) {
      addTypeName(admin);
      res.render('admin_open_detail', {admin: admin});
    } else {
      renderError(res, '对不起,未找到该工程师的信息。');
    }
  }, mutil.renderErrorFn(res));
});
Example #19
0
function findUserByEmail(email) {
  var p = new AV.Promise();
  findRawClientByEmail(email).then(function (user) {
    if (user) {
      var user = transfromUser(user);
      p.resolve(user);
    } else {
      p.resolve();
    }
  },mutil.rejectFn(p));
  return p;
}
Example #20
0
File: app.js Project: yanest/ticket
app.post('/clients/:id', function (req, res) {
  var cid = req.cid;
  var id = req.params.id;
  var is = isAdminOrMe(req.admin, id, cid);
  if (is) {
    muser.updateCurUser(req.body).then(function () {
      res.redirect('/contact');
    }, mutil.renderErrorFn(res));
  } else {
    renderForbidden(res);
  }
});
Example #21
0
function updateLoan(loan, reqBody){
    loan.set('loanType', reqBody.loanType); //TODO: check is this in dict or not
    loan.set('amount', reqBody.amount);
    loan.set('spanMonth', reqBody.spanMonth);
    loan.set('startDate', mutil.wrapperStrToDate(reqBody.startDate)); //合同相关
    loan.set('endDate', mutil.wrapperStrToDate(reqBody.endDate)); //合同相关
    loan.set('payCircle', reqBody.payCircle); //还款周期,每几月还一次
    loan.set('payTotalCircle', reqBody.payTotalCircle); //共需要还几期
    loan.set('currPayStep', 1); //设置当前期数
    loan.set('interests', reqBody.interests);
    loan.set('assureCost', reqBody.assureCost);
    loan.set('serviceCost', reqBody.serviceCost);
    loan.set('overdueCostPercent', reqBody.overdueCostPercent);//违约金率 千分之
    loan.set('otherCost', reqBody.otherCost);
    loan.set('keepCost', reqBody.keepCost);
    loan.set('payWay', reqBody.payWay);

    if(reqBody.payWay == mconfig.payBackWays.debx.value){
        loan.set('overdueBreachPercent', reqBody.overdueBreachPercent);
    }else{
        loan.set('overdueBreachPercent', parseFloat(0));
    }

    loan.set('isSmsRemind', reqBody.isSmsRemind);
    loan.set('isEmailRemind', reqBody.isEmailRemind);

    loan.set('otherCostDesc', reqBody.otherCostDesc);
    loan.set('keepCostDesc', reqBody.keepCostDesc);

    loan.set('payedMoney', 0);

    //还款时间
    //根据还款类型确认初次还款日期
    //存储一个正常的首次还款时间
    //loan.set('normalFirstPayDate', mutil.wrapperStrToDate(reqBody.normalFirstPayDate));
    loan.set('currPayDate', mutil.wrapperStrToDate(reqBody.firstPayDate));
    loan.set('firstPayDate', mutil.wrapperStrToDate(reqBody.firstPayDate));
    loan.set('status', mconfig.loanStatus.draft.value);
    return loan;
};
Example #22
0
function isAdmin(cid) {
  var p = new AV.Promise();
  var user = AV.Object.createWithoutData('_User', cid);
  madmin.findAdmins(function (q) {
    q.equalTo('user', user);
  }).then(function (admins) {
    if (admins && admins.length > 0) {
      p.resolve(true);
    } else {
      p.resolve(false);
    }
  }, mutil.rejectFn(p));
  return p;
}
Example #23
0
 q.get(objectId).then(function(addRequest){
   if(addRequest.get('status')==statusDone){
     p.reject(Error('该请求已经同意过了'));
     return;
   }
   var fromUser=addRequest.get('fromUser');
   var toUser=addRequest.get('toUser');
   muser.addFriendForBoth(fromUser.id,toUser.id).then(function(){
     addRequest.set('status',statusDone);
     addRequest.save().then(function(){
       p.resolve();
     },mutil.rejectFn(p));
   },mutil.rejectFn(p));
 },mutil.rejectFn(p));
Example #24
0
File: app.js Project: yanest/ticket
app.get('/clients/:id', function (req, res) {
  var cid = req.cid;
  var id = req.params.id;
  if (judgeDetailVisible(req.admin,id, cid)) {
    muser.findUserById(id).then(function (client) {
      if (client) {
        res.render('client_detail', {client: client});
      } else {
        renderInfo(res, '此用户并未建立用户信息');
      }
    }, mutil.renderErrorFn(res));
  } else {
    renderForbidden(res);
  }
});
Example #25
0
function _tryCreateAddRequest(fromUserId,toUserId){
  var p=new AV.Promise();
  haveAddRequest(fromUserId,toUserId).then(function(have){
    mlog.log('have='+have);
    if(have){
      p.reject(Error('已经请求过了'));
    }else{
      createAddRequest(fromUserId,toUserId).then(function(){
        mlog.log('create');
        p.resolve();
      },mutil.rejectFn(p));
    }
  },mutil.rejectFn(p));
  return p;
}
Example #26
0
 q.find().then(function(rcs) {
   for (var i = 0; i < rcs.length; i++) {
     map[rcs[i].get('name')] = 0;
   };
   for (var i = 0; i < results.length; i++) {
     var r = results[i].get('studio');
     if(r.get('name') == undefined){//todo
       continue;
     }
     var cost = results[i].get('cost');
     if (r.get('name')) {
       map[r.get('name')] = map[r.get('name')] + cost;
     }
   };
   mutil.renderData(res, {values:map,dateConfig:dateConfig});
 });
Example #27
0
File: app.js Project: yanest/ticket
 ticket.fetch().then(function (ticket) {
   if (isTicketEmpty(ticket) == false) {
     ticket = transformTicket(ticket);
     threads = _.map(threads, transformThread);
     var isAdmin = req.admin;
     var open = ticket.open;
     ticket.visible = judgeVisibleForOne(open, isAdmin, cid, ticket.cid);
     judgeVisible(threads, isAdmin, cid, ticket.cid);
     var lastOpen = findMyLastOpen(isAdmin, ticket, threads);
     genQQLink(isAdmin, ticket.cid, cid, threads).then(function (qqLink) {
       mlog.log('qqlink' + qqLink);
       res.render("edit", { ticket: ticket, token: token, threads: threads,
         admin: isAdmin, cid: cid, lastOpen: lastOpen, qqLink: qqLink});
     }, mutil.renderErrorFn(res));
   } else {
     renderError(res, "找不到工单,该工单可能已经被删除");
   }
 }, renderErrorFn(res));
Example #28
0
File: app.js Project: yanest/ticket
app.post('/register', function (req, res) {
  var username = req.body.username;
  var password = req.body.password;
  var email = req.body.email;
  if (username && password && email) {
    var user = new AV.User();
    user.set('username', username);
    user.set('password', password);
    user.set('email', email);
    user.signUp(null).then(function (user) {
      login.renderEmailVerify(res, email);
    }, function (error) {
      renderInfo(res, util.inspect(error));
    });
  } else {
    mutil.renderError(res, '不能为空');
  }
});
Example #29
0
function findClient(req, res, f) {
  var curUser = AV.User.current();
  if (curUser) {
    curUser.fetch().then(function(curUser){
      var user = muser.transfromUser(curUser);
      setResLoginStatus(res, true, user);
      f.call(this, user.token, user.id, user);
    },mutil.renderErrorFn(res));
  } else {
    var anonymousClient = {
      id: anonymousCid,
      username: '******',
      email: req.body.email,
      token: anonymousToken
    };
    setResLoginStatus(res, false, anonymousClient);
    f.call(this, anonymousToken, anonymousCid, anonymousClient);
  }
}
Example #30
0
File: app.js Project: yanest/ticket
app.get('/tickets', function (req, res) {
  var token = req.token;
  var cid = req.cid;
  var isAdmin=req.admin;
  if (isAdmin) {
    //enter admin page.
    res.redirect('/admin/tickets');
  } else {
    var query = new AV.Query("Ticket");
    query.ascending("status");
    query.descending("createdAt");
    query.equalTo("cid", cid);
    query.find().then(function (tickets) {
      tickets = tickets || [];
      tickets = _.map(tickets, transformTicket);
      res.render('list', {tickets: tickets, token: token});
    }, mutil.renderErrorFn(res));
  }
});