Exemple #1
0
func MyManager(w http.ResponseWriter, r *http.Request) {
	var err error
	vars := mux.Vars(r)

	mgr := ""

	// ажилтныг хайж олох
	empCol := db.C("Employee")
	q := empCol.FindId(vars["empId"])
	var emp bson.M
	err = q.One(&emp)

	if err == nil {
		// нэгжийг хайж олох
		deptCol := db.C("Dept")
		q1 := deptCol.FindId(emp["Dept"].(string))
		var dept bson.M
		err = q1.One(&dept)
		if err == nil {
			mgr = dept["Manager"].(string)
		}
	}

	rpc.WriteJson(r, w, mgr, err)
}
Exemple #2
0
func _approveOrReject(approve bool, w http.ResponseWriter, r *http.Request) {
	var err error
	vars := mux.Vars(r)

	// wf хүсэлтийг олох
	c := db.C(colWfAction)
	q := c.FindId(vars["id"])

	var reqObj bson.M
	if err = q.One(&reqObj); err != nil {
		rpc.WriteJson(r, w, nil, errors.New("Буруу хүсэлт !"))
		return
	}

	if reqObj["Active"].(bool) == false {
		rpc.WriteJson(r, w, nil, errors.New("Өмнө нь ашиглагдсан холбоос байна !"))
		return
	}

	state := "зөвшөөрсөн"
	msg := "Чөлөө зөвшөөрөгдлөө"
	if !approve {
		state = "татгалзсан"
		msg = "Чөлөөг татгалзлаа"
	}

	c1 := db.C("Leave")
	if err = c1.UpdateId(reqObj["LeaveId"], bson.M{"$set": bson.M{"State": state}}); err == nil {
		err = c.UpdateId(vars["id"], bson.M{"$set": bson.M{"Active": false}})
	}

	rpc.WriteJson(r, w, msg, err)
}
Exemple #3
0
// ирц бүртгэх функц
func RegAtt(w http.ResponseWriter, r *http.Request) {
	var err error

	obj := bson.M{}
	if err = rpc.ReadJson(r, &obj); err != nil {
		rpc.WriteJson(r, w, nil, err)
		return
	}

	obj["_id"] = bson.NewObjectId().Hex()
	obj["RemoteAddr"] = r.RemoteAddr

	// TODO: орсон, гарсан эсэхийг ялгаж таних

	// Map EnrollNumber into Employee ID, Name
	empC := db.C("Employee")
	q := empC.Find(bson.M{"CardNo": obj["EnrollNumber"]})
	var emp bson.M
	if err = q.One(&emp); err == nil {
		obj["Employee"] = bson.M{"_id": emp["_id"], "Name": emp["Name"]}
	}

	// Баазад оруулах
	c := db.C("Attendance")
	err = c.Insert(obj)

	rpc.WriteJson(r, w, obj["_id"], err)
}
Exemple #4
0
func SaveFeedback(w http.ResponseWriter, r *http.Request) {
	var err error
	vars := mux.Vars(r)

	var obj SurveyFeedback
	if err = rpc.ReadJson(r, &obj); err != nil {
		rpc.WriteJson(r, w, nil, err)
		return
	}

	c := db.C("SurveyFeedback")

	// асуултын тоогоор мөр үүсгэж бичих
	for _, ans := range obj.Answers {
		a := bson.M{}
		a["_id"] = bson.NewObjectId().Hex()
		a["User"] = r.Header.Get("User")
		a["Survey"] = vars["surveyId"]
		a["Question"] = ans["Question"]
		a["Answer"] = ans["Answer"]
		c.Insert(a)
	}

	// OK - амжилттай
	// DUP - давхардсан
	// LIMIT - хариулах хязгаарт хүрсэн
	rpc.WriteJson(r, w, "OK", err)
}
Exemple #5
0
func UnSubscribe(w http.ResponseWriter, r *http.Request) {
	var err error
	vars := mux.Vars(r)

	c := db.C("Event")
	q := c.FindId(vars["eventId"])

	var ev Event
	err = q.One(&ev)

	if err == nil {
		if len(ev.Participants) > 0 {
			for i := 0; i < len(ev.Participants); i++ {
				if ev.Participants[i].Id == r.Header.Get("User") {
					// remove all occurences
					ev.Participants = append(ev.Participants[:i], ev.Participants[i+1:]...)
				}
			}

			err = c.UpdateId(ev.Id, ev)
		}

	}

	rpc.WriteJson(r, w, "OK", nil)
}
Exemple #6
0
func UnfollowGroup(w http.ResponseWriter, r *http.Request) {
	var err error
	vars := mux.Vars(r)

	c := db.C("PlusGroup")
	q := c.FindId(vars["groupId"])

	var pg PlusGroup
	err = q.One(&pg)

	if err == nil {
		if len(pg.Followers) > 0 {
			for i := 0; i < len(pg.Followers); i++ {
				if pg.Followers[i] == r.Header.Get("User") {
					// remove all occurences
					pg.Followers = append(pg.Followers[:i], pg.Followers[i+1:]...)
				}
			}

			err = c.UpdateId(pg.Id, pg)
		}

	}

	rpc.WriteJson(r, w, "OK", nil)
}
Exemple #7
0
/// add comment
func DoComment(w http.ResponseWriter, r *http.Request) {
	var err error
	vars := mux.Vars(r)
	args := bson.M{}
	if err = rpc.ReadJson(r, &args); err != nil {
		rpc.WriteJson(r, w, nil, errors.New("Invalid JSON!"))
	}

	c := db.C("Post")
	q := c.FindId(vars["postId"])

	var post Post
	err = q.One(&post)

	if err == nil {
		aCmt := Comment{User: r.Header.Get("User"), Date: time.Now().String()[:19], Text: args["Text"].(string)}

		if len(post.Comments) == 0 {
			post.Comments = []Comment{aCmt}
		} else {
			post.Comments = append(post.Comments, aCmt)
		}

		err = c.UpdateId(post.Id, post)
	}

	rpc.WriteJson(r, w, "OK", err)
}
Exemple #8
0
// Map attendance
func MapEnrollId(w http.ResponseWriter, r *http.Request) {
	var err error
	vars := mux.Vars(r)

	// ажилтныг олох
	empC := db.C("Employee")
	q := empC.FindId(vars["empId"])

	var emp bson.M
	if err = q.One(&emp); err == nil {
		empRef := bson.M{"_id": emp["_id"], "Name": emp["Name"]}

		// ирцийн өгөгдлийг засах
		c := db.C("Attendance")
		c.UpdateAll(bson.M{"EnrollId": vars["enId"]}, bson.M{"$set": bson.M{"Employee": empRef}})
	}

	rpc.WriteJson(r, w, "OK", err)
}
Exemple #9
0
func Login(w http.ResponseWriter, r *http.Request) {
	var err error
	args := Args{}
	if err = ParseRequest(r, &args); err != nil {
		WriteResponse(r, w, nil, errors.New("Username, password missing!"))
		return
	}

	c := db.C("User")
	q := c.FindId(args.Username)

	var ss Session
	var u User
	err = q.One(&u)

	// TODO: SHA1 encoding
	if err == nil && u.Password == args.Password {
		// create session
		ss.Id, err = GenUUID()
		ss.User = args.Username
		ss.UserName = u.Name
		ss.UserRole = []string{u.Role}
		ss.RemoteAddr = r.RemoteAddr
		ss.Company = u.Company
		ss.Date = time.Now()

		// ss.Perms TODO: эрхүүдийг олох

		c = db.C("UserSession")

		if err = c.Insert(ss); err == nil {
			_sessions[ss.Id] = &ss
		}
	} else {
		err = errors.New("Access denied!")
	}

	WriteResponse(r, w, ss, err)
}
Exemple #10
0
// мэдээ тоолох
// TODO: replace with db.MapReduce
func PostCount(w http.ResponseWriter, r *http.Request) {
	var err error
	args := bson.M{}
	if err = rpc.ReadJson(r, &args); err != nil {
		rpc.WriteJson(r, w, nil, errors.New("Invalid JSON!"))
	}

	c := db.C("Post")

	mr := &mgo.MapReduce{
		Map:    "function() { if (!this.Type) { emit('news', 1) } else { emit(this.Type, 1) } }",
		Reduce: "function(key, values) { return Array.sum(values);   }",
	}
	var result []bson.M
	_, err = c.Find(nil).MapReduce(mr, &result)

	rpc.WriteJson(r, w, result, err)

}
Exemple #11
0
/// Нууц үг солих
func ChangePwd(w http.ResponseWriter, r *http.Request) {
	var err error
	args := Args{}
	if err = ParseRequest(r, &args); err != nil {
		WriteResponse(r, w, nil, errors.New("Username, password missing!"))
		return
	}

	c := db.C("User")
	q := c.FindId(r.Header.Get("User"))

	var u User

	if err = q.One(&u); err == nil {
		u.Password = args.Password
		err = c.UpdateId(r.Header.Get("User"), u)
	}

	WriteResponse(r, w, "OK", err)
}
Exemple #12
0
// Applicant бүртгэх
func RegApp(w http.ResponseWriter, r *http.Request) {
	var err error
	//vars := mux.Vars(r)

	obj := bson.M{}
	if err = rpc.ReadJson(r, &obj); err != nil {
		rpc.WriteJson(r, w, nil, err)
		return
	}

	c := db.C("Applicant")
	if obj["_id"] == nil {
		obj["_id"] = bson.NewObjectId().Hex()
	}
	obj["RemoteAddr"] = r.RemoteAddr

	err = c.Insert(obj)

	rpc.WriteJson(r, w, "OK", err)
}
Exemple #13
0
/// +1 on the post
func Plus1(w http.ResponseWriter, r *http.Request) {
	var err error
	vars := mux.Vars(r)

	c := db.C("Post")
	q := c.FindId(vars["postId"])

	var post Post
	err = q.One(&post)

	aLike := Like{User: r.Header.Get("User"), Date: time.Now().String()[:19]}

	if err == nil {
		if len(post.Likes) == 0 {
			post.Likes = []Like{aLike}
		} else {
			// байхгүй бол нэмэх (like), байгаа бол хасах (dislike)
			var i int = 0
			var exists bool
			for ; i < len(post.Likes); i++ {
				if post.Likes[i].User == r.Header.Get("User") {
					exists = true
					break
				}
			}
			if exists {
				post.Likes = append(post.Likes[:i], post.Likes[i+1:]...)
				aLike.User = "" // notify a dislike
			} else {
				post.Likes = append(post.Likes, aLike)

			}

		}

		err = c.UpdateId(post.Id, post)
	}

	rpc.WriteJson(r, w, aLike, err)
}
Exemple #14
0
func Subscribe(w http.ResponseWriter, r *http.Request) {
	var err error
	vars := mux.Vars(r)

	c := db.C("Event")
	q := c.FindId(vars["eventId"])
	resp := "OK"

	var ev Event
	err = q.One(&ev)

	if err == nil {
		p := IdName{Id: r.Header.Get("User"), Name: r.Header.Get("Name")}
		if len(ev.Participants) == 0 {
			ev.Participants = []IdName{p}
			err = c.UpdateId(ev.Id, ev)
		} else {
			// өмнө бүртгүүлсэн эсэхийг шалгах
			i := 0
			for i < len(ev.Participants) {
				if ev.Participants[i].Id == r.Header.Get("User") {
					break
				}
				i++
			}

			if i >= len(ev.Participants) {
				ev.Participants = append(ev.Participants, p)
				err = c.UpdateId(ev.Id, ev)
			} else {
				// давхардсан
				resp = "Dup"
			}

		}

	}

	rpc.WriteJson(r, w, resp, nil)
}
Exemple #15
0
func FollowGroup(w http.ResponseWriter, r *http.Request) {
	var err error
	vars := mux.Vars(r)

	c := db.C("PlusGroup")
	q := c.FindId(vars["groupId"])

	var pg PlusGroup
	err = q.One(&pg)

	if err == nil {
		if len(pg.Followers) == 0 {
			pg.Followers = []string{r.Header.Get("User")}
		} else {
			pg.Followers = append(pg.Followers, r.Header.Get("User"))
		}

		err = c.UpdateId(pg.Id, pg)
	}

	rpc.WriteJson(r, w, "OK", nil)
}
Exemple #16
0
// wf/leave/start/{id}
func LeaveStart(w http.ResponseWriter, r *http.Request) {
	var err error
	vars := mux.Vars(r)

	c := db.C("Leave")
	q := c.FindId(vars["id"])

	var leaveObj bson.M
	if err = q.One(&leaveObj); err != nil {
		rpc.WriteJson(r, w, nil, errors.New("Чөлөөний мэдээлэл олдсонгүй!"))
		return
	}

	// хүсэлтэд санамсаргүй дугаар үүсгэх
	actionRequestId := bson.NewObjectId().Hex()
	approveUrl := "http://localhost:8000/wf/approve/" + actionRequestId
	rejectUrl := "http://localhost:8000/wf/reject/" + actionRequestId

	c1 := db.C(colWfAction)
	c1.Insert(bson.M{
		"_id":     actionRequestId,
		"LeaveId": vars["id"],
		"Date":    time.Now().String()[:19],
		"Active":  true})

	// Э-мэйл загвар
	msg := fmt.Sprintf(`<p>Танд чөлөөний хүсэлт ирлээ.</p>
	<br/>
	--------------------------
	<br/>
	<strong>Чөлөөний төрөл:</strong> %v <br/>
	<strong>Явах огноо:</strong> %v %v <br/>
	<strong>Хугацаа:</strong> %v цаг <br/>
	<strong>Шалтгаан:</strong> %v <br/>
	<br/>
    <p><a href=%s>Зөвшөөрөх</a> &nbsp;&nbsp;  <a href=%s>Татгалзах</a></p>
    `, leaveObj["Name"], leaveObj["DateFrom"], leaveObj["TimeFrom"],
		leaveObj["Duration"], leaveObj["Notes"],
		approveUrl, rejectUrl)

	// менежерийн э-мэйл хаягийг олох
	var mgr bson.M
	if mgr, err = MyManager(r.Header.Get("User")); err != nil {
		rpc.WriteJson(r, w, nil, errors.New("Таны дээд удирдлага тодорхойгүй байна!"))
		return
	}

	if mgr["WorkEmail"] == nil || mgr["WorkEmail"] == "" {
		rpc.WriteJson(r, w, nil, errors.New("Таны дээд удирдлагын э-мэйл хаяг тодорхойгүй байна!"))
		return
	}

	// э-мэйлийг илгээх
	m := NewMessage("Чөлөөний хүсэлт", msg, mgr["WorkEmail"].(string))
	m.BodyContentType = "text/html"
	m.From = r.Header.Get("Name")

	if err = _sendEmail(m); err == nil {
		// төлөв өөрчлөх
		c.UpdateId(vars["id"], bson.M{"$set": bson.M{"State": "хүсэлт"}})
	}

	rpc.WriteJson(r, w, "OK", err)
}