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)
def listCode(self, id="json"): project_q = Session.query( mProject.IDX.label("projectNo"), mProject.Code.label("projectCode") ) return Response(project_q, id)
def list(self, id="json"): department_q = Session.query( mUser_Team.Code.label("deptNo"), mUser_Team.Name.label("deptName") ) return Response(department_q, id)
def available_task(self): query = Session.query( Task_Type.Code.label("task") ).order_by("task") ext = ExtGridStore(query) return ext.buildStore()
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"
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()
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
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)
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
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\" <%s></span>" % (cssIsRead, person.ReceiverName, person.ReceiverID)) return ", ".join(receiver_list)
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)
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
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\"}"
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) )
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("삭제되었습니다.")
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
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}"
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\"}"
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 "[]"
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)
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
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
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")
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)
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)
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
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("게시판 구분아이디가 잘못 전달되었습니다")
def getNoReadCount(): """ 읽지않은 쪽지 갯수를 반환한다 """ return Session.query(MsgReceiver).filter(and_(MsgReceiver.IsRead == u'0', MsgReceiver.ReceiverID == Login.getID())).count()
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