예제 #1
0
파일: nMessage.py 프로젝트: onetera/sp
def getMessage2(msgidx, readStamp=True):
	""" 쪽지를 읽어온다 """
	
	msg_q = Session.query(Msg).filter(Msg.idx == msgidx).first()
	if None == msg_q:
		raise SpartaUserError("존재하지 않는 쪽지번호 입니다")

	outText = msg_q.Content
  
	# 첨부파일 가져오기
	msgAttach_q = Session.query(MsgAttach).filter_by(Msg_IDX = msg_q.idx).all()

	attach_text = []

	if len(msgAttach_q) > 0:
		attach_text.append("<table class=\"filedownBox\">")
		attach_text.append(u"<tr><td rowspan=\"%d\">첨부</td><td>" % len(msgAttach_q))

		for attach_item in msgAttach_q:
			attach_text.append("<a href=\"/getfile/nmessage/%d\">%s</a><br />" % (attach_item.idx, attach_item.OriginalFileName) )

		attach_text.append("</td></tr></table>")

	attach_text = "".join(attach_text)

	return "<p>%s</p>%s" % (outText, attach_text)
예제 #2
0
파일: project.py 프로젝트: onetera/sp
	def listCode(self, id="json"):
		project_q = Session.query(
				mProject.IDX.label("projectNo"),
				mProject.Code.label("projectCode")
			)
		
		return Response(project_q, id)
예제 #3
0
파일: department.py 프로젝트: onetera/sp
	def list(self, id="json"):
		department_q = Session.query(
				mUser_Team.Code.label("deptNo"),
				mUser_Team.Name.label("deptName")
			)
		
		return Response(department_q, id)
예제 #4
0
파일: admin_task.py 프로젝트: onetera/sp
	def available_task(self):
		query = Session.query(
			Task_Type.Code.label("task")
		).order_by("task")
		
		ext = ExtGridStore(query)
		
		return ext.buildStore()
예제 #5
0
파일: getfile.py 프로젝트: onetera/sp
	def nmessage(self, id):
		import paste.fileapp
		import urllib

		attach_q = Session.query(MsgAttach).filter(MsgAttach.idx == id)
		if attach_q.count() > 0:
			attach = attach_q.first()
			receiver_q = Session.query(MsgReceiver).filter(MsgReceiver.Msg_IDX == attach.Msg_IDX).filter(MsgReceiver.ReceiverID == sv.Login.getID())
			if receiver_q.count() == 0:
				return "첨부를 열어볼 권한이 없습니다"

			if not os.path.exists(attach.NewFileName):
				return "해당 파일이 서버에 존재하지 않습니다"

			fapp = paste.fileapp.FileApp(attach.NewFileName, **{"content-disposition": 'attachment; filename="%s"' % attach.OriginalFileName.encode("utf-8")})
			return fapp(request.environ, self.start_response)

		return "access failed to attachments"
예제 #6
0
파일: admin_task.py 프로젝트: onetera/sp
	def listup_unit(self):
		query = Session.query(
			Task_Unit.idx.label("Task_Unit_idx"),
			Task_Unit.unit_name.label("Task_Unit_Name"),
			Task_Unit.unit_kind.label("Task_Unit_Kind")
		).order_by("Task_Unit_Name")
		
		ext = ExtGridStore(query)
		
		return ext.buildStore()
예제 #7
0
파일: __init__.py 프로젝트: onetera/sp
def ExistsCode(TblName, Code):
    task_stat = Session.query("Code").from_statement(
        "select Code from " + TblName + " where Code = :code"
    ).params(code = Code)
            
    first_record = task_stat.first()
    if None == first_record:
        return False
    else:
        return True
예제 #8
0
파일: board.py 프로젝트: onetera/sp
	def getArticleAttach(self, id):
		# 첨부파일 데이터 가져오기
		attach_q = Session.query(BoardAttach)
		attach = attach_q.filter_by(article_idx=id).all()
		
		# { boxLabel: 'Item 1', name:'cb-col-1' },
		attachItem = list()
		
		for row in attach:
			attachItem.append({ "boxLabel": "%s(%s)" % (row.org_path, row.filesize), "name" : "delete_file", "inputValue" : row.id})
		
		return json.dumps(attachItem)
예제 #9
0
파일: nMessage.py 프로젝트: onetera/sp
def sendSystemMessage(receiver, subject, content):
	""" 시스템에서 변경사항에 대해 쪽지를 발송 """
	
	TODAY_STR = datetime.datetime.now().strftime("%Y-%m-%d")
	NOW_STR = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
	
	sendCnt = 0		   
  
	receiverTo = getReceiver(receiver) 

	msgReceiver_q = Session.query(MsgReceiver).outerjoin(Msg).add_entity(Msg)
 
	for objReceiver  in receiverTo:
		
		q = msgReceiver_q.filter(Msg.SenderID == "system"). \
			filter(MsgReceiver.ReceiverType == u"0"). \
			filter(MsgReceiver.ReceiverID == objReceiver["UserID"]). \
			filter(Msg.CreateDate > TODAY_STR). \
			order_by(desc(Msg.CreateDate))
		rs = q.first()

		if q.count() > 0 and u"0" == rs[0].IsRead:
			# 쪽지를 읽지 않았다면 보낸 쪽지의 내용을 수정한다.
			modifyContent = rs[1].Content + u"\n %s --------- \n%s\n" % (NOW_STR, unicode(content))
			rs[1].Content = modifyContent

			Session.add(rs[1])
			Session.commit()
		else:
			rowMsg = Msg()
			rowMsg.SenderID = u"system"
			rowMsg.SenderName = u"업데이트"
			rowMsg.Subject = unicode(subject)
			rowMsg.Content = u"\n %s --------- \n%s\n "  % (NOW_STR, unicode(content))
			rowMsg.CreateDate = datetime.datetime.now()

			Session.add(rowMsg)
			Session.commit()

			rowReceiver = MsgReceiver()
			rowReceiver.Msg_IDX = rowMsg.idx
			rowReceiver.ReceiverType = u"0"
			rowReceiver.ReceiverID = objReceiver["UserID"]
			rowReceiver.ReceiverName = objReceiver["Name"]
			rowReceiver.IsRead = u"0"

			Session.add(rowReceiver)
			Session.commit()

			sendCnt += 1
		
	return sendCnt 
예제 #10
0
파일: nMessage.py 프로젝트: onetera/sp
def getReceiverExt(msg_idx, receiver_type):
	msg_receiver_q = Session.query(MsgReceiver).filter(MsgReceiver.Msg_IDX == msg_idx).filter(MsgReceiver.ReceiverType == receiver_type).all()

	receiver_list = []

	for person in msg_receiver_q:
		cssIsRead = ""
		if u"1" == person.IsRead:
			cssIsRead = " style=\"color: red;\""
			
		receiver_list.append("<span%s>\"%s\" &lt;%s&gt;</span>" % (cssIsRead, person.ReceiverName, person.ReceiverID))

	return ", ".join(receiver_list)
예제 #11
0
파일: nMessage.py 프로젝트: onetera/sp
def getMessage(msgReceiver_idx, readStamp=True):
	""" 쪽지를 읽어온다 """

	msgReceiver_q = Session.query(MsgReceiver).outerjoin(Msg).add_entity(Msg)

	msg = msgReceiver_q.filter(MsgReceiver.idx == msgReceiver_idx).first()

	if None == msg:
		raise SpartaUserError("존재하지 않는 쪽지입니다")

	# 로그인 중인 사용자와 메시지를 받은 사용자 ID를 비교하여 일치하지 않으면 권한 오류를 발생시킨다.
	if Login.getID() != msg[0].ReceiverID:
		raise SpartaUserError("메시지를 볼 수 있는 권한이 없습니다")
   
	# 읽음여부 수정
	if u"0" == msg[0].IsRead:
		msg[0].IsRead = u"1"

	Session.commit()

	outText = msg[1].Content

	# 첨부파일 가져오기
	msgAttach_q = Session.query(MsgAttach).filter_by(Msg_IDX = msg[1].idx).all()

	attach_text = []

	if len(msgAttach_q) > 0:
		attach_text.append("<table class=\"filedownBox\">")
		attach_text.append(u"<tr><td rowspan=\"%d\">첨부</td><td>" % len(msgAttach_q))

		for attach_item in msgAttach_q:
			attach_text.append("<a href=\"/getfile/nmessage/%d\">%s</a><br />" % (attach_item.idx, attach_item.OriginalFileName) )

		attach_text.append("</td></tr></table>")

	attach_text = "".join(attach_text)

	return "<p>%s</p>%s" % (outText, attach_text)
예제 #12
0
파일: nMessage.py 프로젝트: onetera/sp
def removeSendMessage(sendidx):

	# 메시지 정보를 가져온다.
	msg_q = Session.query(Msg).filter(Msg.idx == sendidx)
	if msg_q.count() == 0:
		raise SpartaUserError("존재하지 않는 쪽지입니다")

	msg = msg_q.first()

	if msg.SenderID != Login.getID() and (not CheckAdmin()):
		raise SpartaAccessError("메시지를 삭제할 수 있는 권한이 없습니다") 

	# 수신자 지우기
	receiver_q = Session.query(MsgReceiver).filter(MsgReceiver.Msg_IDX == sendidx)
	if receiver_q.count() > 0:
		# 수신자중에 한명이라도 메시지를 읽지 않았다면 쪽지를 삭제하지 못하게 한다.
		for receiver_user in receiver_q.all():
			if receiver_user.IsDelete == u"0":
				return u"%s 사용자가 아직 쪽지를 읽지 않았습니다" % receiver_user.ReceiverID
		
		receiver_q.delete()
		Session.commit()

	# 우선 첨부파일 정보를 가져온다.
	attach_q = Session.query(MsgAttach).filter(MsgAttach.Msg_IDX == sendidx).all()
	if len(attach_q) > 0:
		for attach_info in attach_q:
			# File Exists
			if os.path.exists(attach_info.NewFileName):
				os.unlink(attach_info.NewFileName)
		Session.delete(attach_info)
		Session.commit()

	# 본 메시지 삭제
	msg_q = Session.delete(msg)
	Session.commit()
	
	return 1
예제 #13
0
파일: admin_task.py 프로젝트: onetera/sp
	def unit_load(self):
		unit_idx = request.params["idx"]
		
		if unit_idx != None:
			query = Session.query(
				Task_Unit.idx.label("unit_idx"),
				Task_Unit.unit_name.label("unit_name")
				# Task_Unit.unit_desc.label("unit_desc")
			).filter(Task_Unit.idx == unit_idx)
			
			ext = ExtDataLoadStore(query)
			
			return ext.buildStore()
		return "{success: false, errorMessage: \"None Data\"}"
예제 #14
0
파일: nmessage.py 프로젝트: onetera/sp
	def inbox_listup(self, id=None):
		try:
			msg_q = Session.query(MsgReceiver).outerjoin(Msg).add_entity(Msg).filter(
				MsgReceiver.ReceiverID == session["UserID"]
			).filter(MsgReceiver.IsDelete == u"0").order_by(desc(Msg.CreateDate))
		
			objJson = extJson(msg_q)
			objJson.setColumns(("MsgReceiver.idx", "Msg.SenderID", "Msg.SenderName", "Msg.Subject", "MsgReceiver.IsRead", "Msg.CreateDate"))
			objJson.setOrder_by("Msg_CreateDate DESC")

			return objJson.export()
		except Exception as err:
			traceback.print_exc(file=sys.stdout)
			return errMessage( "쪽지함 조회중 오류가 발생하였습니다 \n\n"+str(err) )
예제 #15
0
파일: board.py 프로젝트: onetera/sp
	def remove(self, id, id2):
		# [SH] -------------------------------
		board_attach_q = Session.query(BoardAttach)
		board_attach = board_attach_q.filter_by(article_idx = id2).all()
		
		# 파일이 있을때만 삭제하도록 변경
		for attach_item in board_attach:
			if os.path.exists(attach_item.new_path):
				os.unlink(attach_item.new_path)
				Session.delete(attach_item)
		
		Session.commit()
		# ---------------------- [SH] 
		Archive("Board").Remove( id2 )
		return okMessage("삭제되었습니다.")
예제 #16
0
파일: getfile.py 프로젝트: onetera/sp
	def board(self, id):
		import paste.fileapp
		import urllib
		
		attach_q = Session.query(BoardAttach).filter(BoardAttach.id == id)
		if attach_q.count() > 0:
			attach = attach_q.first()
				
			if (attach):
				if not os.path.exists(attach.new_path):
					return "해당 파일이 서버에 존재하지 않습니다 "
			
				fapp = paste.fileapp.FileApp(attach.new_path, **{"Content-Type":"application/download","content-disposition": 'attachment; filename="%s"' % attach.org_path.encode("utf-8")})
				return fapp(request.environ, self.start_response)
		return
예제 #17
0
파일: admin_task.py 프로젝트: onetera/sp
	def unit_write(self):
		if ("unit_idx" in request.params) and (request.params["unit_idx"] != ""):
			query = Session.query(Task_Unit).filter(Task_Unit.idx == request.params["unit_idx"])
			unit_record = query.first()
		else:
			unit_record = Task_Unit()
		
		unit_record.unit_name = request.params["unit_name"]
		# todo: unit_desc
		unit_record.unit_kind = ",".join(request.params.getall("usedTask"))
		
		Session.add(unit_record)
		Session.commit()
		
		return "{success: true}"
예제 #18
0
파일: admin_task.py 프로젝트: onetera/sp
	def unit_remove(self):
		unit_idx = request.params["idx"]
		print unit_idx
		
		if unit_idx != None:
			query = Session.query(Task_Unit).filter(Task_Unit.idx == unit_idx)
			
			fetchrow = query.first()
			
			Session.delete(fetchrow)
			Session.commit()
			
			return "{success: true}"
		else:
			return "{success: false, errorMessage: \"none data\"}"
예제 #19
0
파일: admin_task.py 프로젝트: onetera/sp
	def unit_usedtask_load(self):
		unit_idx = request.params["idx"]
		
		if unit_idx != None:
			query = Session.query(
				Task_Unit.unit_kind.label("unit_kind")
			).filter(Task_Unit.idx == unit_idx)
			
			fetchrow = query.first()
			used_task_lst = fetchrow[0].split(",")
			
			ext = ExtArrayLoadStore(used_task_lst)
			
			return ext.buildStore()
		return "[]"
예제 #20
0
파일: project.py 프로젝트: onetera/sp
	def list(self, id="json"):
		
		project_q = Session.query(
				mProject.IDX.label("projectNo"),
				mProject.Name.label("projectName")
			)
		
		# base_columns
		#base_columns = getattr(project_q.statement.columns, "projectNo").base_columns
		#base_columns = project_q.statement.columns["projectNo"].base_columns
		#column = base_columns.pop()
		#print column.name, column.table.name
		
		#assert 1 == 2
		
		return Response(project_q, id)
예제 #21
0
파일: nMessage.py 프로젝트: onetera/sp
def removeMessage(msgidx):
	
	msg_receiver_q = Session.query(MsgReceiver).filter_by(idx = msgidx).first()
	
	if None == msg_receiver_q:
		raise SpartaUserError("존재하지 않는 쪽지입니다")

	# 로그인한 사용자가 메시지를 받은 사용자가 아닌 경우 삭제할 수 없다는 메시지를 출력하게 한다.
	if msg_receiver_q.ReceiverID != Login.getID() and (not CheckAdmin()):
		raise SpartaAccessError("메시지를 삭제할 수 있는 권한이 없습니다")

	msg_receiver_q.IsDelete = u"1"

	Session.commit()

	# 항상 1을 반환한다.
	return 1
예제 #22
0
파일: nmessage.py 프로젝트: onetera/sp
	def getMsgHeader(self, id=None, id2="yes"):
		try:
			if "no" == id2:
				# 받은 쪽지함에서 이 메소드를 호출하기 때문에 id 값은 덮어 씌워져야 한다.
				q = Session.query(MsgReceiver).filter(MsgReceiver.idx == id).first()
				id = q.Msg_IDX

			sfReceiverTo = sv.nMessage.getReceiverExt(id, u"0")
			sfReceiverCc = sv.nMessage.getReceiverExt(id, u"1")
			sfReceiverBcc = sv.nMessage.getReceiverExt(id, u"2")

			sfReceiver = u"<br />받는사람: %s" % sfReceiverTo
			if len(sfReceiverCc) != 0:
				sfReceiver += u"<br />참조: %s" % sfReceiverCc
			if "no" != id2 and len(sfReceiverBcc) != 0:
				sfReceiver += u"<br />숨은 참조: %s" % sfReceiverBcc

		except Exception as err:
			traceback.print_exc(file=sys.stdout)
			return errMessage("쪽지 수신자 조회에 실패했습니다")

		return sfReceiver
예제 #23
0
파일: board.py 프로젝트: onetera/sp
	def view(self, id, id2):
		""" 게시물 읽기. 템플릿에 직접 값을 넣는 다 """
		boardID = str( id )		#[NOTE] unicode to string
		tName = None
		
		# 게시판 형태를 맞추기 위한 게시판 설정을 읽어온다.
		rx = Archive("AdminBoard").getRecords("AdminBoard.BCode == " + boardID, "BName,DisplayCate,DisplayStat,DisplayReply,AccessReply", "AdminBoard.SortNumber ASC" )
		
		for board1 in rx:
			tName	= board1["BName"]
			DsCate	= board1["DisplayCate"]
			DsStat	= board1["DisplayStat"]
			DsReply = board1["DisplayReply"]
			AlReply = board1["AccessReply"]
				
		# 게시물 레코드 읽기 
		colStr = "CreateBy,CreateByName,Title,BoardID,Content,ViewCount,CreateDate,UploadName1,UploadLink1"		   
		row = Archive("Board").getValues("Board.IDX == " + id2, colStr )
		
		if not tName: return HTML(u'<font color="red">잘못된 게시판 코드 입니다.</font>')
		if not row: return HTML(u'<font color="red">존재하지 않는 게시물입니다</font>')
		if boardID != row["BoardID"]:  return HTML(u'<font color="red">잘못된 접근 입니다.</font>')
		
		#[TODO] 아래주석 확인
		# 권한 채킹 if CheckLevel("AdminBoard", "AccessRead", "AdminBoard.BCode == " + boardID):
		# else:c.Content = HTML(u'<font color="red">볼수 있는 권한이 없습니다.</font>')
		
		# 여기서부터 게시물 출력
		c.IDX = id2
		c.PNID = "PN_Board_%s" % id2
		c.BoardCode = boardID
		c.BoardName = tName
		c.DisplayCate = DsCate
		c.DisplayStat = DsStat
		c.DisplayReply = DsReply
		c.AllowReply = AlReply
		
		# 첨부파일 개수 가져오기 [SH]
		attach_q = Session.query(BoardAttach)
		c.attach_cnt = attach_q.filter_by(article_idx=id2).count()
		
		if c.attach_cnt > 0:
			c.article_list = self.getArticleAttach(id2)
		else:
			c.article_list = "[]"
		# --------------------------------

		c.WriterName = u"%s (%s)" % ( unicode(row["CreateByName"]), unicode(row["CreateBy"]) )
		c.WriterID = row["CreateBy"] # 삭제할때 사용됨
		
		# Template Pasting
		for cname in colStr.split(","):
			if str( type( row[cname] ) ) == "<type 'datetime.datetime'>":
				setattr( c, cname, row[cname].strftime("%Y-%m-%d %H:%M") )
			else:
				setattr( c, cname, HTML(row[cname]) )
		
		# 첨부 파일 표시, Jpg, png 파일인 경우, 컨텐츠에 직접 디스플레이
		if row["UploadName1"]:
		#	 c.UploadFile1 = HTML('<a href="%s">%s</a>' %( row["UploadLink1"], row["UploadName1"]) )
			if row["UploadName1"][-4:].lower() in (".jpg", ".png"):
				c.Content = HTML('<a href="%s" rel="lightbox"  title="%s"><img src="%s" width="400" /></a><br/><br/>%s' %( row["UploadLink1"], row["UploadName1"], row["UploadLink1"], row["Content"]) )
		#else:
		#	 c.UploadFile1 = u"첨부없음"
			
		# 보기 카운트 증가 ( [TODO] 나중에 이벤트로 처리해야할 부분 )
		if row["CreateBy"] != session["UserID"]:
			# Pass 0은 Archive의 추가이벤트를 발생하지않는 단순 변경하라는 플래그
			newVC = int(row["ViewCount"]) + 1
			dSave = {"IDX": id2, "ViewCount":  newVC,  "_pass_": 0 }
			Archive("Board").New( **dSave )
			c.ViewCount = newVC
			
		return render("Board_View.html")
예제 #24
0
파일: task.py 프로젝트: onetera/sp
	def list(self, id="json"):
		# Request Varialble
		client_request_key = request.params.keys()
		
		# 필수 지정 필드 검사
		
		# projectNo : 프로젝트 고유번호
		if "projectNo" not in client_request_key:
			response.status_int = 403
			return "Required variable Not Exists - projectNo"
		
		# assignUser : 사용자 ID(할당된 사용자)
		if "assignUser" not in client_request_key:
			response.status_int = 403
			return "Required variable Not Exists - assignUser"
		
		projectNo = request.params['projectNo']
		assignUser = request.params['assignUser']
		
		extract_column = ["projectNo", "seqNo", "taskNo", "taskName", "taskType", "assignUser", "taskStatus", "taskThumb"]
		
		task_sql = """
			select
				Parent1 as projectNo,
				Parent2 as seqNo,
				IDX as taskNo,
				Name as taskName,
				TypeCode as taskType,
				AssignUser as assignUser,
				StatCode as taskStatus,
				Thumb as taskThumb
			from Task 
			where Parent1=:projectNo
			and AssignUser=:assignUser
		"""
		
		task_req_params = {
			"projectNo" : projectNo,
			"assignUser" : assignUser
		}
		
		# taskStatus : 태스크 상태
		# taskSrchStrtDay : 태스크 시작일(YYYY-MM-DD)
		# taskSrchEndDay : 태스크 종료일(YYYY-MM-DD)
		taskStatus = None
		taskSrchStrtDay = None
		taskSrchEndDay = None
		
		if "taskStatus" in client_request_key:
			taskStatus	= request.params['taskStatus']
			
			# taskStatus값이 실제 데이터베이스에 존재하는지 확인하여 없으면 에러를 발생시킨다.
			task_stat = ExistsCode("Task_Stat", taskStatus)
			if not task_stat:
				response.status_int = 403
				return "An invalid status code."
			
			task_sql += " and StatCode = :StatCode"
			task_req_params["StatCode"] = taskStatus
		
		import re
		srchday_pattern = re.compile("\d{4}-\d{2}-\d{2}")
		
		if "taskSrchStrtDay" in client_request_key:
			taskSrchStrtDay = request.params['taskSrchStrtDay']
			
			# 잘못된 날짜 형식이 들어오면 에러를 발생시킨다.
			if None == srchday_pattern.match(taskSrchStrtDay):
				response.status_int = 403
				return "The date format is incorrect"
		
		if "taskSrchEndDay" in client_request_key:
			taskSrchEndDay = request.params['taskSrchEndDay']
			
			# 잘못된 날짜 형식이 들어오면 에러를 발생시킨다.
			if None == srchday_pattern.match(taskSrchEndDay):
				response.status_int = 403
				return "The date format is incorrect"
		
		# 검색 시작일자와 종료일자가 어느한쪽이라도 None인 경우 날짜에 따른 검색을
		# 수행하면 안된다.
		if None != taskSrchStrtDay or None != taskSrchEndDay:
			task_sql += " and DATE(EstStart) >= :EstStart and "
			task_sql += " DATE_ADD(EstStart, INTERVAL EstDay Day) "
			task_sql += " <= DATE(:EstDue)"
			task_req_params["EstStart"] = taskSrchStrtDay
			task_req_params["EstDue"] = taskSrchEndDay
		
		task_result = Session.query(*extract_column).from_statement(
			task_sql
		).params(task_req_params)
		
		# Output Variable
		# Name			type		Description
		# projectNo		number		프로젝트 고유번호
		# seqNo			number		시퀀스 고유번호
		# taskNo		number		태스크 고유번호
		# taskName		string		태스크명
		# takeType		string		태스크 타입
		# assignUser	string		태스크에 할당된 사용자 ID
		# taskStatus	string		태스크 상태
		# taskThumb		string		태스크 썸네일 이미지
		
		return Response(task_result, id)
예제 #25
0
파일: take.py 프로젝트: onetera/sp
    def view(self, id="json"):
        # Request Varialble
        client_request_key = request.params.keys()

        # 필수 지정 필드 검사

        # takeNo : 태이크 고유번호
        if "takeNo" not in client_request_key:
            response.status_int = 403
            return "Required variable Not Exists - takeNo"

        takeNo = request.params["takeNo"]

        extract_column = [
            "projectNo",
            "seqNo",
            "taskNo",
            "takeNo",
            "takeName",
            "takeStatus",
            "takeType",
            "takeWorktime",
            "takeContent",
            "takeIndication",
            "takePreview",
            "takeCreateDate",
        ]

        take_sql = """
			select
				Parent1 as projectNo,
				Parent2 as seqNo,
				Parent4 as taskNo,
				IDX as takeNo,
				Take.Name as takeName,
				StatCode as takeStatus,
				TypeCode as takeType,
				Content as takeContent,
				attr1.`Value` AS takeWorktime,
				attr2.`Value` AS takeIndication,
				Preview as takePreview,
				CreateDate as takeCreateDate
			from Take
			LEFT OUTER JOIN `Take_Attr` AS attr1  ON attr1.`ParentIDX` = `Take`.`IDX` AND attr1.`MAttrID` = 'Worktime'
			LEFT OUTER JOIN `Take_Attr` AS attr2  ON attr2.`ParentIDX` = `Take`.`IDX` AND attr2.`MAttrID` = 'Indication'
			where IDX = :takeNo
		"""

        take_req_params = {"takeNo": takeNo}

        take_result = Session.query(*extract_column).from_statement(take_sql).params(take_req_params)

        # Output Variable
        # Name			  type		  Description
        # projectNo		  number	  프로젝트 고유번호
        # seqNo			  number	  시퀀스 고유번호
        # taskNo		  number	  태스크 고유번호
        # takeNo		  number	  태이크 고유번호
        # takeName		  string	  태이크명
        # takeStatus	  string	  태이크 상태
        # takeType		  string	  태이크 타입
        # takeContent	  string	  태이크 내용
        # takeWorktime	  number	  일한 시간
        # takeIndication  string	  지시사항
        # takePreview	  string	  태이크 Preview
        # takeCreateDate  string	  태이크가 생성된 시간

        return Response(take_result, id)
예제 #26
0
파일: take.py 프로젝트: onetera/sp
    def modify(self, id="json"):
        # 필수 입력 인자
        client_request_key = request.params.keys()

        # 태이크 고유 번호
        if "takeNo" not in client_request_key:
            response.status_int = 403
            return "Required variable Not Exists - takeNo"

        takeNo = request.params["takeNo"]

        # 기존에 존재한 Take 정보 가져오기
        take_info = (
            Session.query(
                "takeName", "takeStatus", "takeType", "takeContent", "takeWorktime", "takeIndication", "takePreview"
            )
            .from_statement(
                """
			select
				Take.Name as takeName,
				StatCode as takeStatus,
				TypeCode as takeType,
				Content as takeContent,
				attr1.`Value` AS takeWorktime,
				attr2.`Value` AS takeIndication,
				Preview as takePreview
			from Take
			LEFT OUTER JOIN `Take_Attr` AS attr1  ON attr1.`ParentIDX` = `Take`.`IDX` AND attr1.`MAttrID` = 'Worktime'
			LEFT OUTER JOIN `Take_Attr` AS attr2  ON attr2.`ParentIDX` = `Take`.`IDX` AND attr2.`MAttrID` = 'Indication'
			where IDX = :takeNo
		"""
            )
            .params(takeNo=takeNo)
            .first()
        )

        # 태이크명
        takeName = None
        if "takeName" in client_request_key:
            takeName = request.params["takeName"]

            # 태이크 미리보기(MOV, Directory)
        takePreview = None
        if "takePreview" in client_request_key:
            takePreview = request.params["takePreview"]

            # 태이크 상태
        takeStatus = None
        if "takeStatus" in client_request_key:
            takeStatus = request.params["takeStatus"]

            exiStatus = ExistsCode("Take_Stat", takeStatus)
            if not exiStatus:
                response.status_int = 403
                return "An invalid status code."

                # 태이크 타입
        takeType = None
        if "takeType" in client_request_key:
            takeType = request.params["takeType"]

            exiType = ExistsCode("Take_Type", takeType)
            if not exiType:
                response.status_int = 403
                return "An invalid status code."

                # 일한 시간
        takeWorktime = None
        if "takeWorktime" in client_request_key:
            takeWorktime = request.params["takeWorktime"]

            # 지시사항
        takeIndication = ""
        if "takeIndication" in client_request_key:
            takeIndication = request.params["takeIndication"]

            # 태이크 상세내용
        takeContent = ""
        if "takeContent" in client_request_key:
            takeContent = request.params["takeContent"]

        take_sql = "update Take set "
        take_sql_values = []
        if None != takeName and len(takeName) > 0:
            take_sql_values.append("takeName = '" + takeName + "'")

        if None != takePreview and len(takePreview) > 0:
            take_sql_values.append("takePreview = '" + takePreview + "'")

        if None != takeStatus and len(takeStatus) > 0:
            take_sql_values.append("takeStatus = '" + takeStatus + "'")

        if None != takeType and len(takeType) > 0:
            take_sql_values.append("takeType = '" + takeType + "'")

        if None != takeContent and len(takeContent) > 0:
            take_sql_values.append("takeContent = '" + takeContent + "'")

        modifyDate = time.strftime("%Y-%m-%d %H:%M:%S")

        take_sql_values.append("ModifyDate = '" + modifyDate + "'")

        take_sql += ", ".join(take_sql_values)
        take_sql += " where IDX = %d" % int(takeNo)

        Session.execute(take_sql)

        if None != takeWorktime and len(takeWorktime) > 0:
            take_attr_sql = (
                "update Take_Attr set Value='"
                + takeWorktime
                + "' where ParentIDX=%(ParentIDX)d and MAttrIDX=24" % dict(ParentIDX=takeNo)
            )
            Session.execute(take_attr_sql)

        if None != takeIndication and len(takeIndication) > 0:
            take_attr_sql = (
                "update Take_Attr set Value='"
                + takeIndication
                + "' where ParentIDX=%(ParentIDX)d and MAttrIDX=25" % dict(ParentIDX=takeNo)
            )
            Session.execute(take_attr_sql)

        Session.commit()

        if "json" == id:
            return json.dumps({"takeNo": takeNo, "takeModifyDate": modifyDate})
        else:
            to_xml = "<records><takeNo>" + takeNo
            to_xml += "</takeNo><takeModifyDate>"
            to_xml += modifyDate + "</takeModifyDate></records>"

            return to_xml
예제 #27
0
파일: board.py 프로젝트: onetera/sp
	def write(self, id, id2=None):
		""" 게시물 작성 처리 """
		
		dSave = {}
		bData = Archive("AdminBoard").getValues("AdminBoard.BCode == "+str(id), "IDX,AccessWrite" )
		
		if bData:
			if bData["AccessWrite"] == "" or bData["AccessWrite"].find(session["UserType"]) > -1:
				
				CopyDict( srcDic=request.params, destDic=dSave, keyList="IDX,Category,Status")#, prefix="Board.")
				
				dSave["BoardID"] = str(id)
				dSave["BoardIDX"] = bData["IDX"]
				dSave["Title"] = request.params["Title"]
				dSave["Content"] = request.params["Content"]
				
# [SH] 이 아래줄 부터 쭈욱 
				article_id = Archive("Board").New( **dSave )
				
				# File Upload
				objUpload = Upload()
				objUpload.BoardDir(dSave["BoardID"])
				upload_files = request.params.getall("bf_file")
				
				# 업로드한 파일 목록 가져오기(수정 모드일때)
				if dSave.has_key("IDX"):
					
					# File Delete
					selDeletedCheck = request.params.getall("delete_file")
					
					from sqlalchemy import and_
					
					board_attach_q = Session.query(BoardAttach)
					board_attach = board_attach_q.filter(
						and_(
							BoardAttach.article_idx == dSave["IDX"],
							BoardAttach.id.in_(selDeletedCheck)
						)
					).all()
					
					# 파일이 있을때만 삭제하도록 변경
					for attach_item in board_attach:
						if os.path.exists(attach_item.new_path):
							os.unlink(attach_item.new_path)
							Session.delete(attach_item)
					
					Session.commit()
				
				for upload_file in upload_files:
					if type(upload_file) == unicode:
						# 빈 문자열이 넘어온 경우 처리를 건너뛴다.
						continue
					
					# 실제 파일 업로드를 여기에서 수행한다.
					new_file = objUpload.upload_file_move(upload_file)
					
					board_attach_row = BoardAttach()
					board_attach_row.board_code = unicode(dSave["BoardID"])
					if dSave.has_key("IDX"):
						board_attach_row.article_idx = dSave["IDX"]
					else:
						board_attach_row.article_idx = article_id
					board_attach_row.org_path = unicode(new_file["O_PATH"])
					board_attach_row.new_path = new_file["D_PATH"]
					board_attach_row.filesize = unicode(new_file["SIZE"])
					
					Session.add(board_attach_row)
					Session.commit()
# ------------------------------------------------------------				  
				return okMessage("작성되었습니다.")
			else:
				return errMessage("작성 권한이 없습니다.")
		else:
			return errMessage("게시판 구분아이디가 잘못 전달되었습니다")
예제 #28
0
파일: nMessage.py 프로젝트: onetera/sp
def getNoReadCount():
	""" 읽지않은 쪽지 갯수를 반환한다 """
	return Session.query(MsgReceiver).filter(and_(MsgReceiver.IsRead == u'0', MsgReceiver.ReceiverID == Login.getID())).count()
예제 #29
0
파일: take.py 프로젝트: onetera/sp
    def write(self, id="json"):
        # 필수 입력 인자
        client_request_key = request.params.keys()

        # 태스크 고유 번호
        if "taskNo" not in client_request_key:
            response.status_int = 403
            return "Required variable Not Exists - taskNo"

        taskNo = request.params["taskNo"]

        # 태이크명
        takeName = None
        if "takeName" not in client_request_key:
            response.status_int = 403
            return "Required variable Not Exists - takeName"

        takeName = request.params["takeName"]

        # 태이크 미리보기(MOV, Directory)
        takePreview = None
        if "takePreview" not in client_request_key:
            response.status_int = 403
            return "Required variable Not Exists - takePreview"

        takePreview = request.params["takePreview"]

        # 선택인자 검사

        # 태이크 상태
        takeStatus = "RDY"
        if "takeStatus" in client_request_key:
            takeStatus = request.params["takeStatus"]

            exiStatus = ExistsCode("Take_Stat", takeStatus)
            if not exiStatus:
                response.status_int = 403
                return "An invalid status code."

                # 태이크 타입
        takeType = "MDL"
        if "takeType" in client_request_key:
            takeType = request.params["takeType"]

            exiType = ExistsCode("Take_Type", takeType)
            if not exiType:
                response.status_int = 403
                return "An invalid status code."

                # 일한 시간
        takeWorktime = "0"
        if "takeWorktime" in client_request_key:
            takeWorktime = request.params["takeWorktime"]

            # 지시사항
        takeIndication = ""
        if "takeIndication" in client_request_key:
            takeIndication = request.params["takeIndication"]

            # 태이크 상세내용
        takeContent = ""
        if "takeContent" in client_request_key:
            takeContent = request.params["takeContent"]

            # Task의 정보를 가져온다.
        task_info = (
            Session.query("IDX", "Parent1", "Parent2", "Parent3", "Confirmer")
            .from_statement(
                " select IDX, Parent1, Parent2, Parent3, Parent4, Confirmer from " " Task where IDX = :taskNo"
            )
            .params(taskNo=taskNo)
            .first()
        )

        import uuid

        # Take 테이블의 최대 IDX 값을 가져온다
        take_max_idx = Session.query("max_no").from_statement("select max(IDX) as max_no from Take").first()

        take_sql = (
            "insert into Take (IDX, UUID, Name, Code, StatCode, "
            " TypeCode, Parent1, Parent2, Parent3, Parent4, Element, `Version`, "
            " Content, Preview, Confirmer, CreateDate, CreateBy, CreateBy2, "
            " ModifyDate, ModifyBy, ModifyBy2, SortNumber, IsPublish, IsStable, "
            " IsApproved) values (%(IDX)d, '%(UUID)s', '%(Name)s', '%(Name)s', '%(StatCode)s', "
            " '%(TypeCode)s', %(Parent1)d, %(Parent2)d, %(Parent3)d, %(Parent4)d, '%(Element)s', %(Version)d, "
            " '%(Content)s', '%(Preview)s', '%(Confirmer)s', timestamp('%(CreateDate)s'), '%(CreateBy)s', '%(CreateBy2)s', "
            " timestamp('%(ModifyDate)s'), '%(ModifyBy)s', '%(ModifyBy2)s', %(SortNumber)d, %(IsPublish)d, %(IsStable)d, %(IsApproved)d)"
        )

        CreateTime = time.strftime("%Y-%m-%d %H:%M:%S")

        take_sql = take_sql % dict(
            IDX=int(take_max_idx.max_no + 1),
            UUID=unicode(uuid.uuid1()),
            Name=unicode(takeName),
            StatCode=takeStatus,
            TypeCode=takeType,
            Parent1=task_info.Parent1,
            Parent2=task_info.Parent2,
            Parent3=task_info.Parent3,
            Parent4=task_info.IDX,
            Element="all",  # 임시고정
            Version=1,  # 임시고정
            Content=takeContent,
            Preview=takePreview,
            Confirmer=unicode(task_info.Confirmer),
            CreateDate=CreateTime,
            CreateBy="broker",
            CreateBy2="시스템".decode("utf-8"),
            ModifyDate=CreateTime,
            ModifyBy="broker",
            ModifyBy2="시스템".decode("utf-8"),
            SortNumber=500,
            IsPublish=0,
            IsStable=0,
            IsApproved=0,
        )

        Session.execute(take_sql)

        Session.commit()

        # Take_Attr Dict
        take_attr_value_dict = {
            0: {"MAttrIDX": 24, "MAttrID": "Worktime", "Name": "작업시간".decode("utf-8"), "Value": takeWorktime},
            1: {"MAttrIDX": 25, "MAttrID": "Indication", "Name": "지시사항".decode("utf-8"), "Value": takeIndication},
        }

        # Take_Attr 테이블의 최대 IDX 값을 가져온다
        for i in range(2):
            take_attr_max_idx = (
                Session.query("max_no").from_statement("select max(AttrIDX) as max_no from Take_Attr").first()
            )
            if None == take_attr_max_idx.max_no:
                take_attr_max_idx = 1
            else:
                take_attr_max_idx = take_attr_max_idx.max_no + 1

            take_attr_sql = (
                "insert into Take_Attr (AttrIDX, ParentIDX, MAttrIDX, MAttrID, Category, Name, Value) values "
            )
            take_attr_sql += (
                " (%(AttrIDX)d, %(ParentIDX)d, %(MAttrIDX)d, '%(MAttrID)s', '%(Category)s', '%(Name)s', '%(Value)s')"
            )

            take_extend_attr = take_attr_value_dict[i]

            take_attr_sql = take_attr_sql % dict(
                AttrIDX=take_attr_max_idx,
                ParentIDX=int(take_max_idx.max_no + 1),
                MAttrIDX=take_extend_attr["MAttrIDX"],
                MAttrID=take_extend_attr["MAttrID"],
                Category="Take",
                Name=take_extend_attr["Name"],
                Value=take_extend_attr["Value"],
            )

            Session.execute(take_attr_sql)
            Session.commit()

        if "json" == id:
            return json.dumps({"takeNo": int(take_max_idx.max_no + 1), "takeCreateDate": CreateTime})
        else:
            to_xml = "<records><takeNo>" + int(take_max_idx.max_no + 1)
            to_xml += "</takeNo><takeCreateDate>"
            to_xml += CreateTime + "</takeCreateDate></records>"

            return to_xml