Compare commits

...

62 Commits

Author SHA1 Message Date
7223a9fdbe remove 2025-12-19 17:22:16 +09:00
ChiKyun Kim
ccac7790d3 파일정리 2025-12-19 17:17:51 +09:00
backuppc
116af44965 .. 2025-12-19 16:26:57 +09:00
ChiKyun Kim
b1c3bbac42 toshortstring -> tostring 2025-12-19 08:23:13 +09:00
backuppc
ab46ccb924 휴가신청화면에서 메세지가 날짜에 맞게 자동 변경되게함.
시작일자가 종료일자보다 클때에는 종료일자는 시작일자에 맞추게 함
2025-12-18 15:22:54 +09:00
backuppc
890e6edab4 nr 구매 제한 기능 추가
- 트리거를 이용하여 기존 프로그램 사용자도 오류가 발생하도록 함
2025-12-12 11:06:13 +09:00
backuppc
77f1ddab80 .. 2025-12-05 17:33:12 +09:00
backuppc
8e8d1f91b4 feat: 메뉴 재배치 및 UX 개선
- 메뉴: 즐겨찾기를 할일 좌측으로 이동
- 게시판: 답글 있는 게시글 삭제 방지 (댓글은 허용)
- 즐겨찾기: ESC 키로 다이얼로그 닫기 지원
- 프로젝트: 기본 필터를 검토/진행/완료로 변경 (보류 해제)
2025-12-03 10:32:10 +09:00
backuppc
c1c615fe1b feat: 게시판 댓글/답글 시스템 및 대시보드 개선
주요 변경사항:
- 게시판 계층형 댓글/답글 시스템 구현
  - DB: root_idx, depth, thread_path, is_comment, reply_count 컬럼 추가
  - 트리거: 댓글 개수 자동 업데이트
  - 답글(is_comment=false)은 목록에 표시, 댓글(is_comment=true)은 뷰어에만 표시
  - ESC 키로 모달 닫기 기능

- 업무일지 개선
  - 프로젝트 선택 시 최종 설정 자동 불러오기
  - 복사 시 jobgrp, tag 포함
  - 완료(보고) 상태 프로젝트도 검색 가능하도록 수정

- 대시보드 개선
  - 할일 목록 페이징 추가 (6개씩)
  - 할일에 요청자 정보 표시 (제목 좌측에 괄호로)
2025-12-03 10:10:29 +09:00
backuppc
3d53a5c42f Simplify patch edit layout: hide header, compact category+title in one row 2025-12-03 08:24:56 +09:00
backuppc
40abcde0a9 Change patch category labels to uppercase: PATCH, UPDATE 2025-12-03 08:23:00 +09:00
backuppc
bb66af89ae Change jobreport date buttons from 4x1 to 2x2 grid layout 2025-12-03 08:20:57 +09:00
backuppc
b21b17fb7a Change category input to dropdown: patch/update selection 2025-12-02 17:37:08 +09:00
backuppc
1aad3ee2bf Implement Board CRUD API: Add, Edit, Delete with authorization check 2025-12-02 17:33:39 +09:00
backuppc
ee08dc2e8c Update category colors: update=lime, patch=tomato 2025-12-02 17:30:46 +09:00
backuppc
e53a870893 Change title to white, add authorized-only Add button for patches 2025-12-02 17:29:59 +09:00
backuppc
67c5d2f98d Update patch list: reorder category/header, color-code categories (update=white, patch=skyblue) 2025-12-02 17:28:38 +09:00
backuppc
7732403a0d Improve patch list layout: lightskyblue title, single line with truncate, date only 2025-12-02 17:27:38 +09:00
backuppc
02e718fdb6 Add edit mode for patch list - auto-open edit for developers (level>=9 or id=395552) 2025-12-02 17:26:25 +09:00
backuppc
db076d7135 Add WebSocket handlers for Customs API 2025-12-02 15:38:14 +09:00
backuppc
56cc4ed712 Add MachineBridge.Customs.cs to project file 2025-12-02 15:37:03 +09:00
backuppc
9b2ee87542 Implement Customs API backend and frontend integration 2025-12-02 15:35:28 +09:00
backuppc
2d160ceabb Add Customs page to Common Information menu 2025-12-02 15:27:21 +09:00
backuppc
e82f86191a Add Dashboard todo edit/delete/complete features and Note view count tracking 2025-12-02 15:03:51 +09:00
backuppc
6a2485176b 업무일지 프로젝트 선택 시 이전 기록 기반 기본값 자동 설정 기능 추가
- MachineBridge에 Jobreport_GetLastByProject API 추가 (pidx 또는 projectName 기반 마지막 업무일지 조회)
- WebSocket 서버에 JOBREPORT_GET_LAST_BY_PROJECT 핸들러 추가
- communication.ts에 getLastJobReportByProject 메서드 추가
- JobreportEditModal에서 프로젝트 선택 시 자동으로 이전 기록의 요청부서, 패키지, 업무형태, 공정, 상태 값을 기본값으로 설정
- 윈폼(fJobReport_Add.cs)의 동일한 로직을 웹앱에 구현
2025-12-02 08:30:06 +09:00
backuppc
aa956cf063 근태(Holyday) API 추가 및 일별/업무형태별 집계 다이얼로그 구현, OT 시작/종료시간 필드 추가 2025-12-02 08:26:24 +09:00
backuppc
adcdc40169 feat: 품목정보 상세 패널 추가 및 프로젝트/근태/권한 기능 확장
- Items: 우측에 이미지, 담당자, 입고/발주내역 패널 추가 (fItems 윈폼 동일)
- Project: 목록 및 상세 다이얼로그 구현
- Kuntae: 오류검사/수정 기능 추가
- UserAuth: 사용자 권한 관리 페이지 추가
- UserGroup: 그룹정보 다이얼로그로 전환
- Header: 사용자 메뉴 서브메뉴 방향 수정, 즐겨찾기 기능
- Backend API: Items 상세/담당자/구매내역, 근태 오류검사, 프로젝트 목록 등

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 17:36:20 +09:00
backuppc
c9b5d756e1 feat: React 프론트엔드 기능 대폭 확장
- 월별근무표: 휴일/근무일 관리, 자동 초기화
- 메일양식: 템플릿 CRUD, To/CC/BCC 설정
- 그룹정보: 부서 관리, 비트 연산 기반 권한 설정
- 업무일지: 수정 성공 메시지 제거, 오늘 근무시간 필터링 수정
- 웹소켓 메시지 type 충돌 버그 수정

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 17:25:31 +09:00
backuppc
b57af6dad7 Revert "perf: CDN 대신 로컬 CSS 파일 사용으로 페이지 전환 속도 개선"
This reverts commit faa912532f.
2025-11-25 17:39:01 +09:00
backuppc
faa912532f perf: CDN 대신 로컬 CSS 파일 사용으로 페이지 전환 속도 개선
- 모든 HTML 파일에서 cdn.tailwindcss.com 대신 /lib/css/tailwind.min.css 사용
- 중복되는 인라인 스타일을 /css/common.css로 통합
- 외부 네트워크 의존성 제거로 페이지 로딩 지연 해결

변경된 파일:
- DashBoard/index.html
- Todo/index.html
- Jobreport/index.html
- Kuntae/index.html
- Common.html
- login.html
- Project/index.html

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 17:38:17 +09:00
backuppc
8a0a4ccc4c refactor: OWIN 웹서버 제거, WebView2 VirtualHost 방식으로 전환
- OWIN 관련 패키지 제거 (Microsoft.Owin.*, Microsoft.AspNet.WebApi.*)
- 모든 Web API 컨트롤러 삭제 (Controllers/*.cs)
- Startup.cs 삭제
- 기존 WebView2 Dialog 삭제 (fDashboard, fHolyday, fJobReport, fLogin_WB, fCommon)
- fDashboardNew만 유지 (SetVirtualHostNameToFolderMapping 방식)
- fMain.cs에서 OWIN 서버 시작 코드 제거
- 품목검색/설명서 메뉴 수정 (로컬 파일 참조로 변경)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 17:30:08 +09:00
backuppc
44af041d1a feat: MachineBridge 추가 및 fetch API를 HostObject 호출로 전환
- WebView2 HostObject 기반 MachineBridge 브릿지 클래스 추가
  - MachineBridge.cs (메인), Login, Dashboard, Todo, Common, Jobreport, Kuntae, Project 모듈
- WebSocketServer.cs 추가 (실시간 통신용)
- fDashboardNew 다이얼로그 추가
- Jobreport/index.html, Project/index.html의 fetch API를 machine HostObject 호출로 전환
- DashBoardController.cs의 gcode null 처리 추가
- 사용하지 않는 파일 삭제 (navigation.html, common-nav.js, navigation.js, _add_to_project.py, _project_updater.js)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 16:06:35 +09:00
backuppc
f0d46b7cb1 perf: WebView2 HostObject 프록시 캐싱으로 성능 개선
- 각 HTML 파일에서 machine 프록시를 전역 변수로 한 번만 초기화
- 매 함수 호출마다 hostObjects.machine 접근하던 오버헤드 제거
- 네비게이션 클릭 시 콘솔 로그 추가 (디버깅용)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 15:58:39 +09:00
ChiKyun Kim
3bd7a37b72 .. 2025-11-25 13:10:23 +09:00
ChiKyun Kim
40b3243925 Merge branch 'ReactHosting' of file://k4fs3201n/k4bpartcenter$/Repository/Common/GroupWare into ReactHosting 2025-11-20 15:19:34 +09:00
ChiKyun Kim
7b189f9017 일반구매시 요청자검사 체크가 되지 않는 버그 수정 2025-11-20 15:19:25 +09:00
backuppc
cbbef7a016 로그인 기록에서 사번|부서 추가 AddPrgmUser5 함수 추가 2025-11-13 13:08:22 +09:00
backuppc
d977c9da83 add chatserver & client 2025-11-12 13:57:13 +09:00
backuppc
e19b404580 feat: 업무일지 공용코드 연동 및 UI/UX 개선
- 업무일지 공용코드 동적 로드 (상태, 요청부서, 패키지, 프로세스, 업무형태)
- 업무형태 선택 모달 구현 (프로세스 > 분류 > 항목 3단계 선택)
- ESC 키로 모달 닫기 기능 추가
- 필터 섹션 디자인 개선 및 접기/펼치기 기능 추가
- 프로젝트명 50자 초과 시 말줄임(...) 표시
- 상태 "진행중" 오렌지 색상으로 변경
- 테이블 row height 축소 및 날짜 구분선 제거
- 네비게이션 로고 클릭 시 대시보드 이동 기능 추가
- 대시보드 개인정보 표시 제거 (휴가자 명단)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 13:50:49 +09:00
backuppc
709ca7c85a 개인정보 관련 업데이트 진행
ot 정보는 타인이 못봄
휴가신청 관련건도 타인이 못봄
2025-11-11 11:43:29 +09:00
ChiKyun Kim
e6a39d52e9 .. 2025-11-11 08:39:59 +09:00
backuppc
a966b4a6ab feat: 포트 충돌 방지 - 자동 포트 탐색 및 상대 경로 적용
백엔드 변경사항:
- fMain.cs: 포트 7979~8000 범위에서 자동 탐색 및 fallback 기능 추가
- 성공한 포트를 Pub.WebServiceURL에 자동 저장
- 포트 충돌 시 자동으로 다음 포트 시도

프론트엔드 변경사항:
- login.html: 하드코딩 URL 3곳을 상대 경로로 변경
- Common.html: 하드코딩 URL 4곳을 상대 경로로 변경
- DashBoard/index.html: 하드코딩 URL 10곳을 상대 경로로 변경

효과:
- 포트 충돌 시 사용자 개입 없이 자동 해결
- 포트 변경에 무관하게 프론트엔드 자동 동작
- 다양한 환경에서 안정적인 서비스 제공

🤖 Generated with Claude Code (https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 11:02:28 +09:00
ChiKyun Kim
3f3a2834df 휴가 신청 삭제시 로그파일에 기록되도록 함 2025-10-29 10:43:28 +09:00
ChiKyun Kim
6bd4f84192 feat(service): Console_SendMail을 Windows 서비스로 변환
- MailService.cs 추가: ServiceBase 상속받는 Windows 서비스 클래스
- Program.cs 수정: 서비스/콘솔 모드 지원, 설치/제거 기능 추가
- 프로젝트 설정: System.ServiceProcess 참조 추가
- 배치 파일 추가: 서비스 설치/제거/콘솔실행 스크립트

주요 기능:
- Windows 서비스로 백그라운드 실행
- 명령행 인수로 모드 선택 (-install, -uninstall, -console)
- EventLog를 통한 서비스 로깅
- 안전한 서비스 시작/중지 처리

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-11 09:08:40 +09:00
ChiKyun Kim
777fcd5d89 sfi count 등록 및 추가 2025-09-04 09:19:01 +09:00
ChiKyun Kim
b28fe84e6b 레벨사용자가 0시간,0일을 입력할 경우 입력여부 경고 및 확인창 추가 (임현대s) 2025-08-27 10:06:53 +09:00
ChiKyun Kim
31553af571 refactor(UI): WinForms UI 레이아웃 개선 2025-08-25 09:14:48 +09:00
ChiKyun Kim
1f3a7b57c1 업무일지에서 update, delete 쿼리를 index만 확인하게 함. 2025-08-21 09:39:59 +09:00
ChiKyun Kim
de5a759902 메일서비스 로그 강화 및 오류 처리 2025-08-12 17:10:34 +09:00
ChiKyun Kim
9725ae55d0 프로젝트목록에서 aseemblyid 가 검색되는 현상 수정, 해당 컬럼은 사용하지 않는 컬럼(이지웅) 2025-08-08 09:30:03 +09:00
ChiKyun Kim
d23771039b sendmail 에 프로젝트업데이트하지 않은 대상 메일 발송 기능 추가 (월) 2025-08-05 11:40:49 +09:00
ChiKyun Kim
81f91f0897 프로젝트 시스템 통합 및 전반적인 개선사항
- 솔루션 설정 및 프로젝트 파일 업데이트
- BaseController 최적화 (HtmlAgilityPack 의존성 제거)
- CommonController 네비게이션 메뉴에 프로젝트 추가
- JobreportController 사용자 조회 기능 및 필터링 개선
- 모든 웹 화면 UI/UX 통합 및 일관성 개선
- 프로그램 시작 시 중복 실행 감지 개선
- 각종 폼 및 데이터셋 디자이너 업데이트

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-04 15:23:41 +09:00
ChiKyun Kim
a11780f725 프로젝트 관리 시스템 구현 및 UI 개선
- 새로운 프로젝트 관리 화면 추가 (ProjectController, ProjectModel)
- 로그인된 사용자 기반 필터링 기능 구현
- 프로젝트 CRUD 기능 완성 (생성, 조회, 수정, 삭제)
- 컬럼 표시/숨김 기능으로 사용자 정의 뷰 지원
- 상태별 프로젝트 현황 대시보드
- 엑셀 내보내기 기능
- 반응형 디자인 및 glass-effect UI 적용
- 할일관리/근태관리와 일관된 레이아웃 구조

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-04 15:20:58 +09:00
ChiKyun Kim
5e0337a044 업무일지 목록 및 상세화면 디자인 변경. 2025-07-31 08:59:40 +09:00
ChiKyun Kim
642c204a18 할일 관리 시스템 개선 및 대시보드 UI 향상
- Todo 상태 관리 시스템 추가 (대기, 진행, 보류, 완료, 취소)
- 완료일(okdate) 자동 설정 기능 구현
- 대시보드 할일 목록에서 만료일 지난 항목 적색 배경 강조
- 휴가신청 목록에서 항목별 색상 구분 (대체=노란색, 년차=녹색, 하기=파란색)
- 휴가신청 목록 데이터 매핑 수정 (holydays, holytimes, HolyReason)
- Todo 정렬 순서 개선 (상태별 우선순위 적용)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-30 15:50:21 +09:00
ChiKyun Kim
943fdb2036 ot집계표에 %추가 2025-07-30 11:33:17 +09:00
ChiKyun Kim
c0eb33f60a 실행환경검사 invoke 오류 수정 2025-07-29 08:38:21 +09:00
ChiKyun Kim
e309864262 Todo 관리 시스템 및 공통 네비게이션 구현
- Todo CRUD 기능 구현 (TodoController, TodoModel)
- 서버 기반 공통 네비게이션 시스템 구축
- 모든 웹 페이지에 통일된 네비게이션 적용
- Todo 테이블 행 클릭으로 편집 모달 직접 접근 기능
- 네비게이션 메뉴 서버 설정 및 폴백 시스템

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-28 14:15:08 +09:00
ChiKyun Kim
0c5744c12c update webbase design 2025-07-27 16:25:15 +09:00
ChiKyun Kim
afbac3248e 기타근무자 관련 코드 수정 2025-07-17 14:56:39 +09:00
ChiKyun Kim
2806fb76ba 근태입력화면 관련 작업 2025-07-16 11:05:55 +09:00
ChiKyun Kim
2b322542f1 warn clear 2025-07-15 09:56:28 +09:00
596 changed files with 94204 additions and 106841 deletions

10
.gitignore vendored
View File

@@ -1,8 +1,8 @@
bin
obj
*.suo
/.vs/EETGW/v15/Server/sqlite3
/packages
/.vs/EETGW
/SubProject/FCOMMON/.vs
/DBMigration/.vs/DBMigration
.vs
packages
.vscode
*.tmp
*.zip

View File

@@ -1,3 +0,0 @@
{
"dotnet.preferCSharpExtension": true
}

View File

@@ -1,16 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Data.SqlClient" Version="6.0.1" />
<PackageReference Include="Microsoft.SqlServer.SqlManagementObjects" Version="172.64.0" />
</ItemGroup>
</Project>

View File

@@ -1,14 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Compile Update="Forms\ConnectionForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="Forms\MainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="Forms\ProgressForm.cs">
<SubType>Form</SubType>
</Compile>
</ItemGroup>
</Project>

View File

@@ -1,131 +0,0 @@
using DBMigration.Models;
namespace DBMigration.Forms
{
public partial class ConnectionForm : Form
{
public ConnectionInfo ConnectionInfo { get; private set; }
public ConnectionForm()
{
InitializeComponent();
this.Load += ConnectionForm_Load;
}
private void ConnectionForm_Load(object? sender, EventArgs e)
{
UpdateCredentialsFields();
this.txtServer.Text = "10.131.15.18";
this.txtDatabase.Text = "EE";
this.txtUserId.Text = "eeuser";
this.txtPassword.Text = "Amkor123!";
this.chkWindowsAuth.Checked = false;
}
private void UpdateCredentialsFields()
{
bool isWindowsAuth = chkWindowsAuth.Checked;
txtUserId.Enabled = !isWindowsAuth;
txtPassword.Enabled = !isWindowsAuth;
}
private void InitializeComponent()
{
this.txtServer = new TextBox();
this.txtDatabase = new TextBox();
this.txtUserId = new TextBox();
this.txtPassword = new TextBox();
this.chkWindowsAuth = new CheckBox();
this.btnConnect = new Button();
this.btnCancel = new Button();
this.SuspendLayout();
// txtServer
this.txtServer.Location = new Point(12, 12);
this.txtServer.Size = new Size(200, 23);
this.txtServer.PlaceholderText = "서버 이름";
// txtDatabase
this.txtDatabase.Location = new Point(12, 41);
this.txtDatabase.Size = new Size(200, 23);
this.txtDatabase.PlaceholderText = "데이터베이스 이름";
// txtUserId
this.txtUserId.Location = new Point(12, 70);
this.txtUserId.Size = new Size(200, 23);
this.txtUserId.PlaceholderText = "사용자 ID";
// txtPassword
this.txtPassword.Location = new Point(12, 99);
this.txtPassword.Size = new Size(200, 23);
this.txtPassword.PasswordChar = '*';
this.txtPassword.PlaceholderText = "비밀번호";
// chkWindowsAuth
this.chkWindowsAuth.Location = new Point(12, 128);
this.chkWindowsAuth.Size = new Size(200, 23);
this.chkWindowsAuth.Text = "Windows 인증 사용";
this.chkWindowsAuth.CheckedChanged += (s, e) => UpdateCredentialsFields();
// btnConnect
this.btnConnect.Location = new Point(12, 157);
this.btnConnect.Size = new Size(95, 23);
this.btnConnect.Text = "연결";
this.btnConnect.Click += BtnConnect_Click;
// btnCancel
this.btnCancel.Location = new Point(117, 157);
this.btnCancel.Size = new Size(95, 23);
this.btnCancel.Text = "취소";
this.btnCancel.Click += BtnCancel_Click;
// ConnectionForm
this.ClientSize = new Size(224, 192);
this.Controls.AddRange(new Control[] {
this.txtServer,
this.txtDatabase,
this.txtUserId,
this.txtPassword,
this.chkWindowsAuth,
this.btnConnect,
this.btnCancel
});
this.FormBorderStyle = FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.StartPosition = FormStartPosition.CenterParent;
this.Text = "데이터베이스 연결";
this.ResumeLayout(false);
this.PerformLayout();
}
private void BtnConnect_Click(object? sender, EventArgs e)
{
ConnectionInfo = new ConnectionInfo
{
ServerName = txtServer.Text,
DatabaseName = txtDatabase.Text,
UserId = txtUserId.Text,
Password = txtPassword.Text,
UseWindowsAuthentication = chkWindowsAuth.Checked
};
DialogResult = DialogResult.OK;
Close();
}
private void BtnCancel_Click(object? sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
private TextBox txtServer;
private TextBox txtDatabase;
private TextBox txtUserId;
private TextBox txtPassword;
private CheckBox chkWindowsAuth;
private Button btnConnect;
private Button btnCancel;
}
}

View File

@@ -1,67 +0,0 @@
namespace DBMigration.Forms
{
partial class MainForm
{
private System.ComponentModel.IContainer components = null;
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.treeObjects = new System.Windows.Forms.TreeView();
this.btnConnectSource = new System.Windows.Forms.Button();
this.btnMigrate = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// treeObjects
//
this.treeObjects.Location = new System.Drawing.Point(12, 12);
this.treeObjects.Name = "treeObjects";
this.treeObjects.Size = new System.Drawing.Size(300, 400);
this.treeObjects.TabIndex = 0;
//
// btnConnectSource
//
this.btnConnectSource.Location = new System.Drawing.Point(12, 418);
this.btnConnectSource.Name = "btnConnectSource";
this.btnConnectSource.Size = new System.Drawing.Size(150, 30);
this.btnConnectSource.TabIndex = 1;
this.btnConnectSource.Text = "소스 DB 연결";
this.btnConnectSource.UseVisualStyleBackColor = true;
this.btnConnectSource.Click += new System.EventHandler(this.btnConnectSource_Click);
//
// btnMigrate
//
this.btnMigrate.Location = new System.Drawing.Point(168, 418);
this.btnMigrate.Name = "btnMigrate";
this.btnMigrate.Size = new System.Drawing.Size(144, 30);
this.btnMigrate.TabIndex = 2;
this.btnMigrate.Text = "마이그레이션 시작";
this.btnMigrate.UseVisualStyleBackColor = true;
this.btnMigrate.Click += new System.EventHandler(this.btnMigrate_Click);
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(324, 461);
this.Controls.Add(this.btnMigrate);
this.Controls.Add(this.btnConnectSource);
this.Controls.Add(this.treeObjects);
this.Name = "MainForm";
this.Text = "DB Migration Tool";
this.ResumeLayout(false);
}
private System.Windows.Forms.TreeView treeObjects;
private System.Windows.Forms.Button btnConnectSource;
private System.Windows.Forms.Button btnMigrate;
}
}

View File

@@ -1,184 +0,0 @@
using DBMigration.Models;
using DBMigration.Services;
namespace DBMigration.Forms
{
public partial class MainForm : Form
{
private readonly DatabaseService _databaseService;
private readonly MigrationService _migrationService;
private ConnectionInfo? _sourceConnection;
private ConnectionInfo? _targetConnection;
private List<DatabaseObject>? _databaseObjects;
private readonly CancellationTokenSource _cancellationTokenSource;
public MainForm()
{
InitializeComponent();
_databaseService = new DatabaseService();
_migrationService = new MigrationService();
_cancellationTokenSource = new CancellationTokenSource();
_databaseObjects = new List<DatabaseObject>();
}
private async void btnConnectSource_Click(object sender, EventArgs e)
{
using (var form = new ConnectionForm())
{
if (form.ShowDialog() == DialogResult.OK)
{
_sourceConnection = form.ConnectionInfo;
await LoadDatabaseObjectsAsync();
}
}
}
private async Task LoadDatabaseObjectsAsync()
{
try
{
btnConnectSource.Enabled = false;
treeObjects.Nodes.Clear();
// 테이블, 뷰, 프로시저 노드 생성
var tableNode = treeObjects.Nodes.Add("Tables");
var viewNode = treeObjects.Nodes.Add("Views");
var procNode = treeObjects.Nodes.Add("Stored Procedures");
// 테이블 로드
tableNode.Nodes.Add("Loading...");
treeObjects.ExpandAll();
await LoadTablesAsync(tableNode);
// 뷰 로드
viewNode.Nodes.Add("Loading...");
await LoadViewsAsync(viewNode);
// 프로시저 로드
procNode.Nodes.Add("Loading...");
await LoadProceduresAsync(procNode);
btnConnectSource.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show($"데이터베이스 객체 로드 중 오류 발생: {ex.Message}", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
btnConnectSource.Enabled = true;
}
}
private async Task LoadTablesAsync(TreeNode parentNode)
{
try
{
parentNode.Nodes.Clear();
parentNode.Nodes.Add("Loading...");
await foreach (var table in _databaseService.GetTables(_sourceConnection!))
{
if (_cancellationTokenSource.Token.IsCancellationRequested)
return;
var node = new TreeNode($"{table.Schema}.{table.Name}")
{
Tag = table,
Checked = table.IsSelected
};
parentNode.Nodes.Add(node);
await Task.Yield();
}
}
catch (Exception ex)
{
parentNode.Nodes.Clear();
parentNode.Nodes.Add($"Error: {ex.Message}");
}
}
private async Task LoadViewsAsync(TreeNode parentNode)
{
try
{
parentNode.Nodes.Clear();
parentNode.Nodes.Add("Loading...");
await foreach (var view in _databaseService.GetViews(_sourceConnection!))
{
if (_cancellationTokenSource.Token.IsCancellationRequested)
return;
var node = new TreeNode($"{view.Schema}.{view.Name}")
{
Tag = view,
Checked = view.IsSelected
};
parentNode.Nodes.Add(node);
await Task.Yield();
}
}
catch (Exception ex)
{
parentNode.Nodes.Clear();
parentNode.Nodes.Add($"Error: {ex.Message}");
}
}
private async Task LoadProceduresAsync(TreeNode parentNode)
{
try
{
parentNode.Nodes.Clear();
parentNode.Nodes.Add("Loading...");
await foreach (var proc in _databaseService.GetProcedures(_sourceConnection!))
{
if (_cancellationTokenSource.Token.IsCancellationRequested)
return;
var node = new TreeNode($"{proc.Schema}.{proc.Name}")
{
Tag = proc,
Checked = proc.IsSelected
};
parentNode.Nodes.Add(node);
await Task.Yield();
}
}
catch (Exception ex)
{
parentNode.Nodes.Clear();
parentNode.Nodes.Add($"Error: {ex.Message}");
}
}
protected override void OnFormClosing(FormClosingEventArgs e)
{
_cancellationTokenSource.Cancel();
base.OnFormClosing(e);
}
private void btnMigrate_Click(object sender, EventArgs e)
{
if (_targetConnection == null)
{
MessageBox.Show("대상 데이터베이스 연결 정보를 먼저 설정하세요.", "알림", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
var selectedObjects = _databaseObjects.Where(o => o.IsSelected).ToList();
if (selectedObjects.Count == 0)
{
MessageBox.Show("마이그레이션할 객체를 선택하세요.", "알림", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
using (var form = new ProgressForm(selectedObjects, _sourceConnection, _targetConnection))
{
form.ShowDialog();
}
}
}
}

View File

@@ -1,120 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -1,56 +0,0 @@
namespace DBMigration.Forms
{
partial class ProgressForm
{
private System.ComponentModel.IContainer components = null;
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.progressBar = new System.Windows.Forms.ProgressBar();
this.logTextBox = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// progressBar
//
this.progressBar.Location = new System.Drawing.Point(12, 12);
this.progressBar.Name = "progressBar";
this.progressBar.Size = new System.Drawing.Size(300, 23);
this.progressBar.TabIndex = 0;
//
// logTextBox
//
this.logTextBox.Location = new System.Drawing.Point(12, 41);
this.logTextBox.Multiline = true;
this.logTextBox.Name = "logTextBox";
this.logTextBox.ReadOnly = true;
this.logTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.logTextBox.Size = new System.Drawing.Size(300, 200);
this.logTextBox.TabIndex = 1;
//
// ProgressForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(324, 253);
this.Controls.Add(this.logTextBox);
this.Controls.Add(this.progressBar);
this.Name = "ProgressForm";
this.Text = "마이그레이션 진행 상황";
this.Load += new System.EventHandler(this.ProgressForm_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
private System.Windows.Forms.ProgressBar progressBar;
private System.Windows.Forms.TextBox logTextBox;
}
}

View File

@@ -1,107 +0,0 @@
using DBMigration.Models;
using DBMigration.Services;
using Microsoft.Data.SqlClient;
namespace DBMigration.Forms
{
public partial class ProgressForm : Form
{
private readonly List<DatabaseObject> _objects;
private readonly ConnectionInfo _source;
private readonly ConnectionInfo _target;
private readonly MigrationService _migrationService;
public ProgressForm(List<DatabaseObject> objects, ConnectionInfo source, ConnectionInfo target)
{
InitializeComponent();
_objects = objects;
_source = source;
_target = target;
_migrationService = new MigrationService();
progressBar.Maximum = _objects.Count;
}
private async void ProgressForm_Load(object sender, EventArgs e)
{
await Task.Run(() => MigrateObjects());
}
private void MigrateObjects()
{
foreach (var obj in _objects)
{
try
{
UpdateProgress($"마이그레이션 시작: {obj.Type} {obj.Schema}.{obj.Name}");
if (obj.Type == "TABLE")
{
_migrationService.MigrateTable(obj, _source, _target);
}
else
{
// 뷰나 프로시저의 경우 스크립트만 실행
ExecuteScript(obj.Definition, _target);
}
UpdateProgress($"완료: {obj.Type} {obj.Schema}.{obj.Name}");
UpdateProgressBar();
}
catch (Exception ex)
{
UpdateProgress($"오류 발생: {obj.Type} {obj.Schema}.{obj.Name}");
UpdateProgress($"에러 메시지: {ex.Message}");
if (MessageBox.Show(
$"{obj.Type} {obj.Schema}.{obj.Name} 마이그레이션 중 오류가 발생했습니다.\n계속 진행하시겠습니까?",
"오류",
MessageBoxButtons.YesNo,
MessageBoxIcon.Error) == DialogResult.No)
{
break;
}
}
}
MessageBox.Show("마이그레이션이 완료되었습니다.", "완료", MessageBoxButtons.OK, MessageBoxIcon.Information);
DialogResult = DialogResult.OK;
}
private void UpdateProgress(string message)
{
if (InvokeRequired)
{
Invoke(new Action<string>(UpdateProgress), message);
return;
}
logTextBox.AppendText(message + Environment.NewLine);
logTextBox.SelectionStart = logTextBox.TextLength;
logTextBox.ScrollToCaret();
}
private void UpdateProgressBar()
{
if (InvokeRequired)
{
Invoke(new Action(UpdateProgressBar));
return;
}
progressBar.Value++;
}
private void ExecuteScript(string script, ConnectionInfo connection)
{
using (var conn = new SqlConnection(connection.GetConnectionString()))
{
conn.Open();
using (var cmd = new SqlCommand(script, conn))
{
cmd.ExecuteNonQuery();
}
}
}
}
}

View File

@@ -1,30 +0,0 @@
namespace DBMigration.Models
{
public class ConnectionInfo
{
public string ServerName { get; set; } = string.Empty;
public string DatabaseName { get; set; } = string.Empty;
public string UserId { get; set; } = string.Empty;
public string Password { get; set; } = string.Empty;
public bool UseWindowsAuthentication { get; set; }
public string GetConnectionString()
{
var builder = new Microsoft.Data.SqlClient.SqlConnectionStringBuilder
{
DataSource = ServerName,
InitialCatalog = DatabaseName,
IntegratedSecurity = UseWindowsAuthentication,
TrustServerCertificate = true
};
if (!UseWindowsAuthentication)
{
builder.UserID = UserId;
builder.Password = Password;
}
return builder.ConnectionString;
}
}
}

View File

@@ -1,13 +0,0 @@
namespace DBMigration.Models
{
public class DatabaseObject
{
public string Name { get; set; } = string.Empty;
public string Schema { get; set; } = string.Empty;
public string Type { get; set; } = string.Empty;
public bool IsSelected { get; set; }
public string Definition { get; set; } = string.Empty;
public string FullName => $"[{Schema}].[{Name}]";
}
}

View File

@@ -1,18 +0,0 @@
using DBMigration.Forms;
namespace DBMigration;
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
Application.Run(new MainForm());
}
}

View File

@@ -1,123 +0,0 @@
using Microsoft.Data.SqlClient;
using Microsoft.SqlServer.Management.Smo;
using DBMigration.Models;
using System.Threading.Tasks;
namespace DBMigration.Services
{
public class DatabaseService
{
public async IAsyncEnumerable<DatabaseObject> GetTables(ConnectionInfo connection)
{
await foreach (var obj in GetDatabaseObjectsAsync(connection, "TABLE"))
{
yield return obj;
}
}
public async IAsyncEnumerable<DatabaseObject> GetViews(ConnectionInfo connection)
{
await foreach (var obj in GetDatabaseObjectsAsync(connection, "VIEW"))
{
yield return obj;
}
}
public async IAsyncEnumerable<DatabaseObject> GetProcedures(ConnectionInfo connection)
{
await foreach (var obj in GetDatabaseObjectsAsync(connection, "PROCEDURE"))
{
yield return obj;
}
}
private async IAsyncEnumerable<DatabaseObject> GetDatabaseObjectsAsync(ConnectionInfo connection, string objectType)
{
using (var conn = new SqlConnection(connection.GetConnectionString()))
{
await conn.OpenAsync();
var server = new Server(new Microsoft.SqlServer.Management.Common.ServerConnection(conn));
var database = server.Databases[connection.DatabaseName];
switch (objectType)
{
case "TABLE":
foreach (Table table in database.Tables)
{
if (table.IsSystemObject || table.Name.StartsWith("_")) continue;
yield return CreateDatabaseObject(table);
await Task.Yield();
}
break;
case "VIEW":
foreach (Microsoft.SqlServer.Management.Smo.View view in database.Views)
{
if (view.IsSystemObject) continue;
yield return CreateDatabaseObject(view);
await Task.Yield();
}
break;
case "PROCEDURE":
foreach (StoredProcedure sp in database.StoredProcedures)
{
if (sp.IsSystemObject) continue;
yield return CreateDatabaseObject(sp);
await Task.Yield();
}
break;
}
}
}
private DatabaseObject CreateDatabaseObject(Table table)
{
return new DatabaseObject
{
Name = table.Name,
Schema = table.Schema,
Type = "TABLE",
Definition = GetTableDefinition(table)
};
}
private DatabaseObject CreateDatabaseObject(Microsoft.SqlServer.Management.Smo.View view)
{
return new DatabaseObject
{
Name = view.Name,
Schema = view.Schema,
Type = "VIEW",
Definition = view.TextBody
};
}
private DatabaseObject CreateDatabaseObject(StoredProcedure sp)
{
return new DatabaseObject
{
Name = sp.Name,
Schema = sp.Schema,
Type = "PROCEDURE",
Definition = sp.TextBody
};
}
private string GetTableDefinition(Table table)
{
var options = new ScriptingOptions
{
IncludeIfNotExists = true,
ScriptDrops = false,
WithDependencies = true,
Indexes = true,
Triggers = true,
ClusteredIndexes = true,
NonClusteredIndexes = true
};
return table.Script(options).ToString();
}
}
}

View File

@@ -1,92 +0,0 @@
using Microsoft.Data.SqlClient;
using Microsoft.SqlServer.Management.Smo;
using DBMigration.Models;
namespace DBMigration.Services
{
public class MigrationService
{
private readonly DatabaseService _databaseService;
public MigrationService()
{
_databaseService = new DatabaseService();
}
public void MigrateTable(DatabaseObject table, ConnectionInfo source, ConnectionInfo target)
{
using (var sourceConn = new SqlConnection(source.GetConnectionString()))
using (var targetConn = new SqlConnection(target.GetConnectionString()))
{
sourceConn.Open();
targetConn.Open();
// 1. 테이블 생성 (인덱스 포함)
ExecuteScript(table.Definition, targetConn);
// 2. IDENTITY와 트리거 비활성화
DisableIdentityAndTriggers(table, targetConn);
// 3. 데이터 복사
CopyData(table, sourceConn, targetConn);
// 4. IDENTITY와 트리거 재활성화
EnableIdentityAndTriggers(table, targetConn);
// 5. 통계 업데이트
UpdateStatistics(table, targetConn);
}
}
private void ExecuteScript(string script, SqlConnection connection)
{
using (var cmd = new SqlCommand(script, connection))
{
cmd.ExecuteNonQuery();
}
}
private void DisableIdentityAndTriggers(DatabaseObject table, SqlConnection connection)
{
var disableScript = $@"
-- IDENTITY 비활성화
SET IDENTITY_INSERT {table.FullName} ON;
-- 트리거 비활성화
DISABLE TRIGGER ALL ON {table.FullName};";
ExecuteScript(disableScript, connection);
}
private void EnableIdentityAndTriggers(DatabaseObject table, SqlConnection connection)
{
var enableScript = $@"
-- IDENTITY 활성화
SET IDENTITY_INSERT {table.FullName} OFF;
-- 트리거 활성화
ENABLE TRIGGER ALL ON {table.FullName};";
ExecuteScript(enableScript, connection);
}
private void CopyData(DatabaseObject table, SqlConnection source, SqlConnection target)
{
using (var cmd = new SqlCommand($"SELECT * FROM {table.FullName}", source))
using (var reader = cmd.ExecuteReader())
{
using (var bulkCopy = new SqlBulkCopy(target))
{
bulkCopy.DestinationTableName = table.FullName;
bulkCopy.WriteToServer(reader);
}
}
}
private void UpdateStatistics(DatabaseObject table, SqlConnection connection)
{
var updateStatsScript = $"UPDATE STATISTICS {table.FullName} WITH FULLSCAN;";
ExecuteScript(updateStatsScript, connection);
}
}
}

Binary file not shown.

Binary file not shown.

View File

@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Express 15 for Windows Desktop
VisualStudioVersion = 15.0.36123.18
# Visual Studio Version 17
VisualStudioVersion = 17.14.36310.24 d17.14
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EETGW", "Project\EETGW.csproj", "{65F3E762-800C-499E-862F-A535642EC59F}"
EndProject
@@ -21,30 +21,17 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Project", "Project", "{6C7E
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FBS0000", "SubProject\FBS0000\FBS0000.csproj", "{F6F515C6-6628-47C4-8A94-683BDF9FBB9C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FTPClass", "Sub\arftp\FTPClass.csproj", "{150859D3-1C5D-4E20-B324-F9EBE188D893}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FPM0000", "SubProject\FPM0000\FPM0000.csproj", "{D01A7891-AD0B-489B-8C45-F598C875FE26}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "arControl", "Sub\arCtl\arControl.csproj", "{F31C242C-1B15-4518-9733-48558499FE4B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "arTCPService.Shared", "Sub\tcpservice\arTCPService.Shared\arTCPService.Shared.csproj", "{3CD79316-211A-4B57-A6B4-00FA6091C29D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UMSControl", "SubProject\CMSControl\UMSControl.csproj", "{55EF08A8-6E94-4569-8371-7AAC9DE916AB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebServer", "SubProject\WebServer\WebServer.csproj", "{CAFE5CD0-C055-4C77-9253-8D5EE9558D43}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FED0000", "SubProject\FED0000\FED0000.csproj", "{3869B8C1-1290-4864-B72D-D771475F914D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "솔루션 항목", "솔루션 항목", "{3F107B67-9A59-4767-A20A-07A8AC4299D0}"
ProjectSection(SolutionItems) = preProject
MemoryMap.cs = MemoryMap.cs
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YARTE", "Sub\YARTE\YARTE.csproj", "{DB5EE9C8-EACF-4231-877E-B9DFD7A714DE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Console_SendMail", "Sub\Console_SendMail\Console_SendMail.csproj", "{8C94D335-7468-4964-AA24-1E3313CF7ABA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AmkorRestfulService", "SubProject\AmkorRestfulService\AmkorRestfulService.csproj", "{58CFC90C-5068-46A2-A8DE-0E92EE9E0990}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NoticeServer", "SubProject\ChatServer\NoticeServer.csproj", "{8E9A4B1C-6D5F-4E2A-9F3B-1C8D7E6A5B4F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -98,12 +85,6 @@ Global
{F6F515C6-6628-47C4-8A94-683BDF9FBB9C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F6F515C6-6628-47C4-8A94-683BDF9FBB9C}.Release|Any CPU.Build.0 = Release|Any CPU
{F6F515C6-6628-47C4-8A94-683BDF9FBB9C}.Release|x86.ActiveCfg = Release|Any CPU
{150859D3-1C5D-4E20-B324-F9EBE188D893}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{150859D3-1C5D-4E20-B324-F9EBE188D893}.Debug|Any CPU.Build.0 = Debug|Any CPU
{150859D3-1C5D-4E20-B324-F9EBE188D893}.Debug|x86.ActiveCfg = Debug|Any CPU
{150859D3-1C5D-4E20-B324-F9EBE188D893}.Release|Any CPU.ActiveCfg = Release|Any CPU
{150859D3-1C5D-4E20-B324-F9EBE188D893}.Release|Any CPU.Build.0 = Release|Any CPU
{150859D3-1C5D-4E20-B324-F9EBE188D893}.Release|x86.ActiveCfg = Release|Any CPU
{D01A7891-AD0B-489B-8C45-F598C875FE26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D01A7891-AD0B-489B-8C45-F598C875FE26}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D01A7891-AD0B-489B-8C45-F598C875FE26}.Debug|x86.ActiveCfg = Debug|Any CPU
@@ -112,22 +93,6 @@ Global
{D01A7891-AD0B-489B-8C45-F598C875FE26}.Release|Any CPU.Build.0 = Release|Any CPU
{D01A7891-AD0B-489B-8C45-F598C875FE26}.Release|x86.ActiveCfg = Release|Any CPU
{D01A7891-AD0B-489B-8C45-F598C875FE26}.Release|x86.Build.0 = Release|Any CPU
{F31C242C-1B15-4518-9733-48558499FE4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F31C242C-1B15-4518-9733-48558499FE4B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F31C242C-1B15-4518-9733-48558499FE4B}.Debug|x86.ActiveCfg = Debug|Any CPU
{F31C242C-1B15-4518-9733-48558499FE4B}.Debug|x86.Build.0 = Debug|Any CPU
{F31C242C-1B15-4518-9733-48558499FE4B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F31C242C-1B15-4518-9733-48558499FE4B}.Release|Any CPU.Build.0 = Release|Any CPU
{F31C242C-1B15-4518-9733-48558499FE4B}.Release|x86.ActiveCfg = Release|Any CPU
{F31C242C-1B15-4518-9733-48558499FE4B}.Release|x86.Build.0 = Release|Any CPU
{3CD79316-211A-4B57-A6B4-00FA6091C29D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3CD79316-211A-4B57-A6B4-00FA6091C29D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3CD79316-211A-4B57-A6B4-00FA6091C29D}.Debug|x86.ActiveCfg = Debug|Any CPU
{3CD79316-211A-4B57-A6B4-00FA6091C29D}.Debug|x86.Build.0 = Debug|Any CPU
{3CD79316-211A-4B57-A6B4-00FA6091C29D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3CD79316-211A-4B57-A6B4-00FA6091C29D}.Release|Any CPU.Build.0 = Release|Any CPU
{3CD79316-211A-4B57-A6B4-00FA6091C29D}.Release|x86.ActiveCfg = Release|Any CPU
{3CD79316-211A-4B57-A6B4-00FA6091C29D}.Release|x86.Build.0 = Release|Any CPU
{55EF08A8-6E94-4569-8371-7AAC9DE916AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{55EF08A8-6E94-4569-8371-7AAC9DE916AB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{55EF08A8-6E94-4569-8371-7AAC9DE916AB}.Debug|x86.ActiveCfg = Debug|Any CPU
@@ -136,14 +101,6 @@ Global
{55EF08A8-6E94-4569-8371-7AAC9DE916AB}.Release|Any CPU.Build.0 = Release|Any CPU
{55EF08A8-6E94-4569-8371-7AAC9DE916AB}.Release|x86.ActiveCfg = Release|Any CPU
{55EF08A8-6E94-4569-8371-7AAC9DE916AB}.Release|x86.Build.0 = Release|Any CPU
{CAFE5CD0-C055-4C77-9253-8D5EE9558D43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CAFE5CD0-C055-4C77-9253-8D5EE9558D43}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CAFE5CD0-C055-4C77-9253-8D5EE9558D43}.Debug|x86.ActiveCfg = Debug|Any CPU
{CAFE5CD0-C055-4C77-9253-8D5EE9558D43}.Debug|x86.Build.0 = Debug|Any CPU
{CAFE5CD0-C055-4C77-9253-8D5EE9558D43}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CAFE5CD0-C055-4C77-9253-8D5EE9558D43}.Release|Any CPU.Build.0 = Release|Any CPU
{CAFE5CD0-C055-4C77-9253-8D5EE9558D43}.Release|x86.ActiveCfg = Release|Any CPU
{CAFE5CD0-C055-4C77-9253-8D5EE9558D43}.Release|x86.Build.0 = Release|Any CPU
{3869B8C1-1290-4864-B72D-D771475F914D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3869B8C1-1290-4864-B72D-D771475F914D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3869B8C1-1290-4864-B72D-D771475F914D}.Debug|x86.ActiveCfg = Debug|Any CPU
@@ -168,14 +125,14 @@ Global
{8C94D335-7468-4964-AA24-1E3313CF7ABA}.Release|Any CPU.Build.0 = Release|Any CPU
{8C94D335-7468-4964-AA24-1E3313CF7ABA}.Release|x86.ActiveCfg = Release|Any CPU
{8C94D335-7468-4964-AA24-1E3313CF7ABA}.Release|x86.Build.0 = Release|Any CPU
{58CFC90C-5068-46A2-A8DE-0E92EE9E0990}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{58CFC90C-5068-46A2-A8DE-0E92EE9E0990}.Debug|Any CPU.Build.0 = Debug|Any CPU
{58CFC90C-5068-46A2-A8DE-0E92EE9E0990}.Debug|x86.ActiveCfg = Debug|x86
{58CFC90C-5068-46A2-A8DE-0E92EE9E0990}.Debug|x86.Build.0 = Debug|x86
{58CFC90C-5068-46A2-A8DE-0E92EE9E0990}.Release|Any CPU.ActiveCfg = Release|Any CPU
{58CFC90C-5068-46A2-A8DE-0E92EE9E0990}.Release|Any CPU.Build.0 = Release|Any CPU
{58CFC90C-5068-46A2-A8DE-0E92EE9E0990}.Release|x86.ActiveCfg = Release|x86
{58CFC90C-5068-46A2-A8DE-0E92EE9E0990}.Release|x86.Build.0 = Release|x86
{8E9A4B1C-6D5F-4E2A-9F3B-1C8D7E6A5B4F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8E9A4B1C-6D5F-4E2A-9F3B-1C8D7E6A5B4F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8E9A4B1C-6D5F-4E2A-9F3B-1C8D7E6A5B4F}.Debug|x86.ActiveCfg = Debug|Any CPU
{8E9A4B1C-6D5F-4E2A-9F3B-1C8D7E6A5B4F}.Debug|x86.Build.0 = Debug|Any CPU
{8E9A4B1C-6D5F-4E2A-9F3B-1C8D7E6A5B4F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8E9A4B1C-6D5F-4E2A-9F3B-1C8D7E6A5B4F}.Release|Any CPU.Build.0 = Release|Any CPU
{8E9A4B1C-6D5F-4E2A-9F3B-1C8D7E6A5B4F}.Release|x86.ActiveCfg = Release|Any CPU
{8E9A4B1C-6D5F-4E2A-9F3B-1C8D7E6A5B4F}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -187,15 +144,10 @@ Global
{74836A5F-CB5B-449F-9210-99C9D1A23B97} = {6C7EC99E-7367-4255-A039-EF5E8D75A2F6}
{26982882-C1FF-45F8-861C-D67558725FF1} = {6C7EC99E-7367-4255-A039-EF5E8D75A2F6}
{F6F515C6-6628-47C4-8A94-683BDF9FBB9C} = {6C7EC99E-7367-4255-A039-EF5E8D75A2F6}
{150859D3-1C5D-4E20-B324-F9EBE188D893} = {28105E67-9D33-4627-8E26-FCE67700622F}
{D01A7891-AD0B-489B-8C45-F598C875FE26} = {6C7EC99E-7367-4255-A039-EF5E8D75A2F6}
{F31C242C-1B15-4518-9733-48558499FE4B} = {28105E67-9D33-4627-8E26-FCE67700622F}
{3CD79316-211A-4B57-A6B4-00FA6091C29D} = {28105E67-9D33-4627-8E26-FCE67700622F}
{55EF08A8-6E94-4569-8371-7AAC9DE916AB} = {28105E67-9D33-4627-8E26-FCE67700622F}
{CAFE5CD0-C055-4C77-9253-8D5EE9558D43} = {6C7EC99E-7367-4255-A039-EF5E8D75A2F6}
{3869B8C1-1290-4864-B72D-D771475F914D} = {6C7EC99E-7367-4255-A039-EF5E8D75A2F6}
{DB5EE9C8-EACF-4231-877E-B9DFD7A714DE} = {28105E67-9D33-4627-8E26-FCE67700622F}
{58CFC90C-5068-46A2-A8DE-0E92EE9E0990} = {6C7EC99E-7367-4255-A039-EF5E8D75A2F6}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {B5B1FD72-356F-4840-83E8-B070AC21C8D9}

View File

@@ -1,47 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0.40629.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FTP_DB_Adapt", "FTP_DB_Adapt\FTP_DB_Adapt.csproj", "{BECE73DE-15C8-42B0-9F93-9484D745DF3A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FTPClass", "FTP_DB_Adapt\Sub\arftp\FTPClass.csproj", "{150859D3-1C5D-4E20-B324-F9EBE188D893}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ArLog", "FTP_DB_Adapt\Sub\arLog_CSharp\ArLog.csproj", "{E9E16A98-8F8D-4848-A27E-4571C184FB1A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "arSetting", "FTP_DB_Adapt\Sub\arSetting\arSetting.csproj", "{8870CE55-DF29-4E05-92FA-6D251DE4EC6C}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sub", "Sub", "{97A5415A-4C67-4C76-95E6-4AB406BF67CD}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{BECE73DE-15C8-42B0-9F93-9484D745DF3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BECE73DE-15C8-42B0-9F93-9484D745DF3A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BECE73DE-15C8-42B0-9F93-9484D745DF3A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BECE73DE-15C8-42B0-9F93-9484D745DF3A}.Release|Any CPU.Build.0 = Release|Any CPU
{150859D3-1C5D-4E20-B324-F9EBE188D893}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{150859D3-1C5D-4E20-B324-F9EBE188D893}.Debug|Any CPU.Build.0 = Debug|Any CPU
{150859D3-1C5D-4E20-B324-F9EBE188D893}.Release|Any CPU.ActiveCfg = Release|Any CPU
{150859D3-1C5D-4E20-B324-F9EBE188D893}.Release|Any CPU.Build.0 = Release|Any CPU
{E9E16A98-8F8D-4848-A27E-4571C184FB1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E9E16A98-8F8D-4848-A27E-4571C184FB1A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E9E16A98-8F8D-4848-A27E-4571C184FB1A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E9E16A98-8F8D-4848-A27E-4571C184FB1A}.Release|Any CPU.Build.0 = Release|Any CPU
{8870CE55-DF29-4E05-92FA-6D251DE4EC6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8870CE55-DF29-4E05-92FA-6D251DE4EC6C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8870CE55-DF29-4E05-92FA-6D251DE4EC6C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8870CE55-DF29-4E05-92FA-6D251DE4EC6C}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{150859D3-1C5D-4E20-B324-F9EBE188D893} = {97A5415A-4C67-4C76-95E6-4AB406BF67CD}
{E9E16A98-8F8D-4848-A27E-4571C184FB1A} = {97A5415A-4C67-4C76-95E6-4AB406BF67CD}
{8870CE55-DF29-4E05-92FA-6D251DE4EC6C} = {97A5415A-4C67-4C76-95E6-4AB406BF67CD}
EndGlobalSection
EndGlobal

View File

@@ -1,25 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace FTP_DB_Adapt
{
public class CSetting : arUtil.Setting
{
public string connstr { get; set; }
public string ftphost { get; set; }
public string ftpid { get; set; }
public string ftppw { get; set; }
public override void AfterLoad()
{
if (connstr == "")
connstr = "Data Source=10.131.15.18;Initial Catalog=EE;Persist Security Info=True;User ID=eeuser;Password=Amkor123!";
}
public override void AfterSave()
{
//throw new NotImplementedException();
}
}
}

View File

@@ -1,236 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace FTP_DB_Adapt
{
class Program
{
static System.Data.SqlClient.SqlConnection cn;
static System.Data.SqlClient.SqlCommand cmd;
static System.Data.SqlClient.SqlDataAdapter da;
static arUtil.FTPClient.FTPClient ftp;
static CSetting setting;
static arUtil.Log log;
static string lastfile = "";
static DateTime lasttime = DateTime.Now;
class retdata
{
public int count { get; set; }
public System.Data.DataTable result { get; set; }
public string message { get; set; }
}
static void Main(string[] args)
{
//var jstest = JsonConvert.SerializeObject(retval);
// var jsontest = "{\"count\":1,\"result\":[{\"id\":\"395552\",\"password\":\"B6589FC6AB0DC82CF12099D1C2D40AB994E8410C\",\"nameE\":\"Chikyun.Kim\",\"name\":\"<22><>ġ<EFBFBD><C4A1>\",\"dept\":\"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> K4<4B><34><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>Ʈ\",\"grade\":\"å<><C3A5>\",\"email\":\"Chikyun.Kim@amkor.co.kr\",\"level\":1,\"indate\":\"2018-04-11\",\"outdate\":null";
/// var json = JObject.Parse(jsontest);
// // var cnt = json["count"];
cw("setting load");
setting = new CSetting();
setting.Load();
if (setting.Xml.Exist() == false)
{
setting.Xml.CreateFile();
cw("setting file created");
}
if (setting.ftphost == "")
{
setting.ftphost = "ftp.amkor.co.kr";
setting.ftpid = "k4pcbmgr";
setting.ftppw = "W2$fYiXp";
setting.Save();
cw("setting default");
}
cw(string.Format("ftp info - {0}", setting.ftphost));
Properties.Settings.Default["cs"] = setting.connstr; // "Data Source=10.131.15.18;Initial Catalog=EE;Persist Security Info=True;User ID=eeuser;Password=Amkor123!";
cw("program start v191212-0950" );
cn = new System.Data.SqlClient.SqlConnection(Properties.Settings.Default.cs);
DateTime conntime = DateTime.Now;
//ftp = new arUtil.FTPClient();
while(true)
{
if(cn.State == System.Data.ConnectionState.Open)
{
if(ftp == null)
{
ftp = new arUtil.FTPClient.FTPClient();
ftp.Host = setting.ftphost;
ftp.UserPassword = setting.ftppw;
ftp.UserID = setting.ftpid;
ftp.Port = 21;
cw(string.Format("ftp Initialize {0}",ftp.Host));
}
//monitor file list
string path = "/2D TEST/101369103/Log/QryResult";
var list = ftp.directoryListSimple(path);
var sqllist = list.Where(t => t.ToLower().EndsWith(".sql"));
DateTime findtime = DateTime.Parse("1982-11-23");
foreach(var sqlfile in sqllist)
{
string fn = sqlfile.Substring(0, sqlfile.Length - 3);
string resultfile = fn + "json";
if (list.Contains(resultfile)) continue;
if(lastfile == sqlfile)
{
var ts = DateTime.Now - lasttime;
if (ts.TotalSeconds < 3) continue; //3초이내 연속 실행 불가
}
//다운로드전에 무조건 대기해준다.
System.Threading.Thread.Sleep(200);
// //이파일명에 해당하는 json 파일을 찾는다.
// string rltfile =
var file_local = AppDomain.CurrentDomain.BaseDirectory + sqlfile;
var file_remote = path + "/" + sqlfile;
try
{
if (System.IO.File.Exists(file_local)) System.IO.File.Delete(file_local);
cw(string.Format("Down {0} to {1}",file_remote, file_local));
lastfile = sqlfile;
lasttime = DateTime.Now;
if(ftp.Download(file_remote,file_local))
{
retdata retval = new retdata();
retval.count = 0;
retval.result = null;
retval.message = "";
cw("download ok : " + file_remote);
var jsonStr = "";
var sql = System.IO.File.ReadAllText(file_local, System.Text.Encoding.Default);
if (cmd == null) cmd = new System.Data.SqlClient.SqlCommand(sql);
var downfi = new System.IO.FileInfo(file_local);
if (downfi.Length < 1)
{
retval.message = "0byte File Downaloaded : " + file_local;
}
else if(sql.Trim() == "")
{
retval.message = "No Sql data";
}
else
{
cmd.CommandText = sql;
cmd.Connection = cn;
if (cn.State == System.Data.ConnectionState.Closed) cn.Open();
if (sql.ToLower().StartsWith("select"))
{
cw("select query");
//data table
if (da == null) da = new System.Data.SqlClient.SqlDataAdapter(cmd);
using (var ds = new System.Data.DataSet())
{
try
{
da.Fill(ds);
if (ds != null && ds.Tables.Count > 0)
{
retval.result = ds.Tables[0];
retval.count = retval.result.Rows.Count;
}
}
catch (Exception ex)
{
retval.message = ex.Message + ",sql=" + sql;
}
}
}
else
{
cw("non query");
//insert /update/ delete
cmd.Connection = cn;
try
{
retval.count = cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
retval.message = ex.Message + ",sql=" + sql;
}
}
jsonStr = JsonConvert.SerializeObject(retval);
if (jsonStr != "")
{
file_local = AppDomain.CurrentDomain.BaseDirectory + resultfile;
System.IO.File.WriteAllText(file_local, jsonStr, System.Text.Encoding.Default);
cw("result file save : " + file_local);
file_remote = path + "/" + resultfile;
if (!ftp.Upload(file_remote, file_local))
cw("ftp Upload error remote = " + file_remote + "," + file_local);
}
}
}
else
{
cw("ftp down error remote = " + file_remote);
}
}
catch (Exception ex)
{
cw("conn error:" + ex.Message);
}
}
}
else
{
var ts = DateTime.Now - conntime;
if(ts.TotalSeconds > 5)
{
try
{
cw("Try Database Connect ");
cn.Open();
cw("Database Connected\n\nFTP Monitor ON");
}
catch (Exception ex)
{
cw("conn error:" + ex.Message);
}
finally
{
conntime = DateTime.Now;
}
}
}
System.Threading.Thread.Sleep(1);
}
}
static void cw(string msg,Boolean logon=true)
{
if(log == null)
{
log = new arUtil.Log();
}
if (logon) log.Add(msg);
Console.WriteLine(msg);
}
}
}

View File

@@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 어셈블리의 일반 정보는 다음 특성 집합을 통해 제어됩니다.
// 어셈블리와 관련된 정보를 수정하려면
// 이 특성 값을 변경하십시오.
[assembly: AssemblyTitle("FTP_DB_Adapt")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("FTP_DB_Adapt")]
[assembly: AssemblyCopyright("Copyright © 2019")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
// 해당 형식에 대해 ComVisible 특성을 true로 설정하십시오.
[assembly: ComVisible(false)]
// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
[assembly: Guid("0d606978-0719-4d02-aea0-740db9f2a058")]
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
//
// 주 버전
// 부 버전
// 빌드 번호
// 수정 버전
//
// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 버전이 자동으로
// 지정되도록 할 수 있습니다.
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("19.12.12.0950")]
[assembly: AssemblyFileVersion("19.12.12.0950")]

View File

@@ -1,14 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="FTP_DB_Adapt.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
<Setting Name="cs" Type="(Connection string)" Scope="Application">
<DesignTimeValue Profile="(Default)">&lt;?xml version="1.0" encoding="utf-16"?&gt;
&lt;SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
&lt;ConnectionString&gt;Data Source=10.131.15.18;Initial Catalog=EE;Persist Security Info=True;User ID=eeuser;Password=EEmicro123!&lt;/ConnectionString&gt;
&lt;ProviderName&gt;System.Data.SqlClient&lt;/ProviderName&gt;
&lt;/SerializableConnectionString&gt;</DesignTimeValue>
<Value Profile="(Default)">Data Source=10.131.15.18;Initial Catalog=EE;Persist Security Info=True;User ID=eeuser;Password=EEmicro123!</Value>
</Setting>
</Settings>
</SettingsFile>

Submodule FTP_DB_Adapt/FTP_DB_Adapt/Sub/arLog_CSharp deleted from 106f873d37

Submodule FTP_DB_Adapt/FTP_DB_Adapt/Sub/arSetting deleted from a09d4eb9f8

Submodule FTP_DB_Adapt/FTP_DB_Adapt/Sub/arftp deleted from 0826cbe09b

View File

@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="FTP_DB_Adapt.Properties.Settings.cs" connectionString="Data Source=10.131.15.18;Initial Catalog=EE;Persist Security Info=True;User ID=eeuser;Password=EEmicro123!" providerName="System.Data.SqlClient"/>
</connectionStrings>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup></configuration>

Binary file not shown.

View File

@@ -1,900 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Spread class="FarPoint.Win.Spread.FpSpread">
<!--Settings Section - This section contains the workbook properties, and the sheet objects, properties and selections.-->
<Settings>
<RootWorkbook>
<ActiveSheetIndex>0</ActiveSheetIndex>
<AllowDragDrop>False</AllowDragDrop>
<ShowCellErrors>False</ShowCellErrors>
<ShowRowErrors>False</ShowRowErrors>
<AllowDragFill>False</AllowDragFill>
<EnableDragFillMenu>True</EnableDragFillMenu>
<AllowCellOverflow>False</AllowCellOverflow>
<AllowColumnMove>False</AllowColumnMove>
<AllowColumnMoveMultiple>False</AllowColumnMoveMultiple>
<AllowEditOverflow>False</AllowEditOverflow>
<RangeDragFillMode>Copy</RangeDragFillMode>
<CustomFillSeriesList />
<DragFillDataOnly>True</DragFillDataOnly>
<CellSpanSelectionPolicy>Default</CellSpanSelectionPolicy>
<AllowEditorReservedLocations>True</AllowEditorReservedLocations>
<AllowUserFormulas>False</AllowUserFormulas>
<AllowRowMove>False</AllowRowMove>
<AllowRowMoveMultiple>False</AllowRowMoveMultiple>
<ShowDragBandOnMoving>True</ShowDragBandOnMoving>
<AllowSheetMove>False</AllowSheetMove>
<AllowUndo>True</AllowUndo>
<AllowUserZoom>True</AllowUserZoom>
<AutoClipboard>True</AutoClipboard>
<AutoAdvance>False</AutoAdvance>
<StatusBarVisible>False</StatusBarVisible>
<BackgroundImage type="Image"></BackgroundImage>
<BackgroundImageLayout>Tile</BackgroundImageLayout>
<BorderCollapse>Separate</BorderCollapse>
<RightToLeft>No</RightToLeft>
<TabStripInsertTab>True</TabStripInsertTab>
<UseOptimizedSelectionForTouch>True</UseOptimizedSelectionForTouch>
<TouchSelectionGripperThickness>0</TouchSelectionGripperThickness>
<TouchSelectionGripperLineColor>Empty</TouchSelectionGripperLineColor>
<TouchSelectionGripperBackColor>Empty</TouchSelectionGripperBackColor>
<TapToAddSelection>False</TapToAddSelection>
<ShowGrippersInEditingStatus>True</ShowGrippersInEditingStatus>
<AutoScrollWhenKeyboardShowing>True</AutoScrollWhenKeyboardShowing>
<ResizeZeroIndicator>Default</ResizeZeroIndicator>
<InputScope>Default</InputScope>
<PanningMode>Both</PanningMode>
<BoundaryFeedbackMode>Split</BoundaryFeedbackMode>
<AllowUserToTouchZoom>True</AllowUserToTouchZoom>
<TouchZoomSnapDistance>0.05</TouchZoomSnapDistance>
<TouchDropDownScale>1.5</TouchDropDownScale>
<HeaderIndicatorPositionAdjusting>0</HeaderIndicatorPositionAdjusting>
<PaintSelectionBorder>True</PaintSelectionBorder>
<PaintSelectionHeader>True</PaintSelectionHeader>
<PaintActiveCellInSelection>False</PaintActiveCellInSelection>
<VerticalScrollbarMode>Row</VerticalScrollbarMode>
<HorizontalScrollbarMode>Column</HorizontalScrollbarMode>
<ScrollTipPolicy>Off</ScrollTipPolicy>
<ScrollBarTrackPolicy>Off</ScrollBarTrackPolicy>
<ScrollBarShowMax>True</ScrollBarShowMax>
<ScrollBarMaxAlign>True</ScrollBarMaxAlign>
<BorderStyle>Fixed3D</BorderStyle>
<ButtonDrawMode>Always</ButtonDrawMode>
<CellNoteIndicatorVisible>True</CellNoteIndicatorVisible>
<ClipboardOptions>AllHeaders</ClipboardOptions>
<AutofitColumnOptions>ExcludeSpans</AutofitColumnOptions>
<AutofitRowOptions>ExcludeSpans</AutofitRowOptions>
<ClipboardPasteToFill>False</ClipboardPasteToFill>
<ColumnSplitBoxAlignment>Leading</ColumnSplitBoxAlignment>
<ImeMode>NoControl</ImeMode>
<AutoImeMode>True</AutoImeMode>
<ImeSentenceMode>NoControl</ImeSentenceMode>
<SpreadScaleMode>None</SpreadScaleMode>
<ColumnSplitBoxPolicy>Always</ColumnSplitBoxPolicy>
<EditModePermanent>False</EditModePermanent>
<EditModeReplace>False</EditModeReplace>
<HorizontalScrollBarHeight>-1</HorizontalScrollBarHeight>
<HorizontalScrollBarPolicy>Always</HorizontalScrollBarPolicy>
<HorizontalScrollBarSmallChange>1</HorizontalScrollBarSmallChange>
<AllowRowMoveDataAllowAddNew>False</AllowRowMoveDataAllowAddNew>
<LeftTab>0</LeftTab>
<MoveActiveOnFocus>True</MoveActiveOnFocus>
<RetainSelectionBlock>True</RetainSelectionBlock>
<RightToLeft>No</RightToLeft>
<RowSplitBoxAlignment>Leading</RowSplitBoxAlignment>
<RowSplitBoxPolicy>Always</RowSplitBoxPolicy>
<SelectionBlockOptions>Cells, Rows, Columns, Sheet</SelectionBlockOptions>
<SheetCount>1</SheetCount>
<TabStrip>
<BackColor>Control</BackColor>
<Editable>False</Editable>
<ButtonPolicy>Always</ButtonPolicy>
<ActiveSheetTab />
<DefaultSheetTab />
<Items>
<SheetTab />
</Items>
</TabStrip>
<TabStripPlacement>WithHorizontalScrollBar</TabStripPlacement>
<TabStripPolicy>AsNeeded</TabStripPolicy>
<TabStripRatio>0.5</TabStripRatio>
<TextTipAppearance class="FarPoint.Win.Spread.TipAppearance" assembly="FarPoint.Win.Spread">
<BackColor>Info</BackColor>
<ForeColor>InfoText</ForeColor>
<Font>
<Name>굴림</Name>
<Size>9</Size>
<Bold>False</Bold>
<CharSet>129</CharSet>
<Italic>False</Italic>
<Strikeout>False</Strikeout>
<Underline>False</Underline>
<Unit>Point</Unit>
<Vertical>False</Vertical>
</Font>
</TextTipAppearance>
<TextTipDelay>500</TextTipDelay>
<TextTipPolicy>Off</TextTipPolicy>
<VerticalScrollBarWidth>-1</VerticalScrollBarWidth>
<AllowCellContentFloat>False</AllowCellContentFloat>
<VerticalScrollBarPolicy>Always</VerticalScrollBarPolicy>
<VerticalScrollBarSmallChange>1</VerticalScrollBarSmallChange>
<VisualStyles>Auto</VisualStyles>
<FocusRenderer>
<IFocusRenderer class="FarPoint.Win.Spread.FlatFocusIndicatorRenderer" assembly="FarPoint.Win.Spread, Version=11.40.20177.0, Culture=neutral, PublicKeyToken=327c3516b1b18457">
<Thickness>3</Thickness>
<Color>-16777216</Color>
</IFocusRenderer>
</FocusRenderer>
<InterfaceRenderer>
<IInterfaceRenderer class="FarPoint.Win.Spread.EnhancedInterfaceRenderer" assembly="FarPoint.Win.Spread, Version=11.40.20177.0, Culture=neutral, PublicKeyToken=327c3516b1b18457">
<ScrollBoxStartColor>White</ScrollBoxStartColor>
<ScrollBoxEndColor>White</ScrollBoxEndColor>
<TabStripBackGroundStartColor>White</TabStripBackGroundStartColor>
<TabStripBackGroundEndColor>White</TabStripBackGroundEndColor>
<SheetTabUpperNormalStartColor>White</SheetTabUpperNormalStartColor>
<SheetTabUpperNormalEndColor>White</SheetTabUpperNormalEndColor>
<SheetTabLowerNormalStartColor>White</SheetTabLowerNormalStartColor>
<SheetTabLowerNormalEndColor>White</SheetTabLowerNormalEndColor>
<SheetTabUpperHoverStartColor>#ffbaeafd</SheetTabUpperHoverStartColor>
<SheetTabUpperHoverEndColor>#ffbaeafd</SheetTabUpperHoverEndColor>
<SheetTabLowerHoverStartColor>#ffbaeafd</SheetTabLowerHoverStartColor>
<SheetTabLowerHoverEndColor>#ffbaeafd</SheetTabLowerHoverEndColor>
<SheetTabBorderColor>#ffa6acb3</SheetTabBorderColor>
<ForeColor>Black</ForeColor>
<GrayAreaColor>White</GrayAreaColor>
<TabStripButtonUpperNormalStartColor>White</TabStripButtonUpperNormalStartColor>
<TabStripButtonUpperNormalEndColor>White</TabStripButtonUpperNormalEndColor>
<TabStripButtonLowerNormalStartColor>White</TabStripButtonLowerNormalStartColor>
<TabStripButtonLowerNormalEndColor>White</TabStripButtonLowerNormalEndColor>
<TabStripButtonUpperHoverStartColor>#ffbaeafd</TabStripButtonUpperHoverStartColor>
<TabStripButtonUpperHoverEndColor>#ffbaeafd</TabStripButtonUpperHoverEndColor>
<TabStripButtonLowerHoverStartColor>#ffbaeafd</TabStripButtonLowerHoverStartColor>
<TabStripButtonLowerHoverEndColor>#ffbaeafd</TabStripButtonLowerHoverEndColor>
<TabStripButtonUpperPressedStartColor>#ffbaeafd</TabStripButtonUpperPressedStartColor>
<TabStripButtonUpperPressedEndColor>#ffbaeafd</TabStripButtonUpperPressedEndColor>
<TabStripButtonLowerPressedStartColor>#ffbaeafd</TabStripButtonLowerPressedStartColor>
<TabStripButtonLowerPressedEndColor>#ffbaeafd</TabStripButtonLowerPressedEndColor>
<TabStripButtonBorderColor>#ffa6acb3</TabStripButtonBorderColor>
<SplitBoxBorderColor>#ffd5d5d5</SplitBoxBorderColor>
<SplitBoxBackgroundColor>#ffd5d5d5</SplitBoxBackgroundColor>
<SplitBarBackgroundColor>#ffdfe3f0</SplitBarBackgroundColor>
<SplitBarDarkColor>#ffdfe3f0</SplitBarDarkColor>
<SplitBarLightColor>#ffdfe3f0</SplitBarLightColor>
<ScrollBoxBackgroundColor>White</ScrollBoxBackgroundColor>
<TabStripBackgroundColor>White</TabStripBackgroundColor>
<SheetTabUpperNormalColor>White</SheetTabUpperNormalColor>
<SheetTabLowerNormalColor>White</SheetTabLowerNormalColor>
<SheetTabUpperActiveColor>#ffbaeafd</SheetTabUpperActiveColor>
<SheetTabLowerActiveColor>#ffbaeafd</SheetTabLowerActiveColor>
<TabStripButtonUpperNormalColor>White</TabStripButtonUpperNormalColor>
<TabStripButtonLowerNormalColor>White</TabStripButtonLowerNormalColor>
<TabStripButtonUpperActiveColor>#ffbaeafd</TabStripButtonUpperActiveColor>
<TabStripButtonLowerActiveColor>#ffbaeafd</TabStripButtonLowerActiveColor>
<TabStripButtonUpperPressedColor>#ffbaeafd</TabStripButtonUpperPressedColor>
<TabStripButtonLowerPressedColor>#ffbaeafd</TabStripButtonLowerPressedColor>
<RangeGroupBackColor>White</RangeGroupBackColor>
<RangeGroupButtonBackColor>Empty</RangeGroupButtonBackColor>
<RangeGroupLineColor>#ff666666</RangeGroupLineColor>
<RangeGroupButtonBorderColor>#ff666666</RangeGroupButtonBorderColor>
<ArrowColorEnabled>#ffa6acb3</ArrowColorEnabled>
<ArrowColorDisabled>#ffb2b2b2</ArrowColorDisabled>
<SheetTabShape>Trapezoid</SheetTabShape>
<ButtonStyle>Flat</ButtonStyle>
<FlatStyle>Flat</FlatStyle>
</IInterfaceRenderer>
</InterfaceRenderer>
<SelectionRenderer>
<ISelectionRenderer class="FarPoint.Win.Spread.FlatSelectionRenderer" assembly="FarPoint.Win.Spread, Version=11.40.20177.0, Culture=neutral, PublicKeyToken=327c3516b1b18457">
<ViewportColor>#64c1e0ff</ViewportColor>
<ColumnHeaderColor>#64baeafd</ColumnHeaderColor>
<ColumnFooterColor>#64baeafd</ColumnFooterColor>
<RowHeaderColor>#64baeafd</RowHeaderColor>
<FilterBarHeaderColor>#64baeafd</FilterBarHeaderColor>
<FilterBarColor>#64c1e0ff</FilterBarColor>
</ISelectionRenderer>
</SelectionRenderer>
<CellNoteIndicatorRenderer />
<SuspendAnimations>False</SuspendAnimations>
<HorizontalScrollBar class="FarPoint.Win.Spread.SpreadHScrollBar" assembly="FarPoint.Win.Spread">
<Buttons class="FarPoint.Win.Spread.FpScrollBarButtonCollection">
<Button class="FarPoint.Win.Spread.FpScrollBarButtonBackwardLine">
<ChangeType>SmallChange</ChangeType>
<ChangeValue>-1</ChangeValue>
</Button>
<Button class="FarPoint.Win.Spread.FpScrollBarComboThumb">
<TrackBackward class="FarPoint.Win.Spread.FpScrollBarTrackBackward">
<ChangeType>LargeChange</ChangeType>
<ChangeValue>-1</ChangeValue>
</TrackBackward>
<Thumb class="FarPoint.Win.Spread.FpScrollBarThumb">
<Gripper class="FarPoint.Win.Spread.FpScrollBarGripper" />
</Thumb>
<TrackForward class="FarPoint.Win.Spread.FpScrollBarTrackForward">
<ChangeType>LargeChange</ChangeType>
<ChangeValue>1</ChangeValue>
</TrackForward>
</Button>
<Button class="FarPoint.Win.Spread.FpScrollBarButtonForwardLine">
<ChangeType>SmallChange</ChangeType>
<ChangeValue>1</ChangeValue>
</Button>
</Buttons>
<VisualStyles>Auto</VisualStyles>
<Renderer />
</HorizontalScrollBar>
<VerticalScrollBar class="FarPoint.Win.Spread.SpreadVScrollBar" assembly="FarPoint.Win.Spread">
<Buttons class="FarPoint.Win.Spread.FpScrollBarButtonCollection">
<Button class="FarPoint.Win.Spread.FpScrollBarButtonBackwardLine">
<ChangeType>SmallChange</ChangeType>
<ChangeValue>-1</ChangeValue>
</Button>
<Button class="FarPoint.Win.Spread.FpScrollBarComboThumb">
<TrackBackward class="FarPoint.Win.Spread.FpScrollBarTrackBackward">
<ChangeType>LargeChange</ChangeType>
<ChangeValue>-1</ChangeValue>
</TrackBackward>
<Thumb class="FarPoint.Win.Spread.FpScrollBarThumb">
<Gripper class="FarPoint.Win.Spread.FpScrollBarGripper" />
</Thumb>
<TrackForward class="FarPoint.Win.Spread.FpScrollBarTrackForward">
<ChangeType>LargeChange</ChangeType>
<ChangeValue>1</ChangeValue>
</TrackForward>
</Button>
<Button class="FarPoint.Win.Spread.FpScrollBarButtonForwardLine">
<ChangeType>SmallChange</ChangeType>
<ChangeValue>1</ChangeValue>
</Button>
</Buttons>
<VisualStyles>Auto</VisualStyles>
<Renderer />
</VerticalScrollBar>
<StatusBar class="FarPoint.Win.Spread.FpStatusBar" assembly="FarPoint.Win.Spread">
<Element class="FarPoint.Win.Spread.FpStatusBarAverageElement">
<Visible>True</Visible>
<Text>평균</Text>
<MenuText>평균(&amp;A)</MenuText>
<Align>Right</Align>
</Element>
<Element class="FarPoint.Win.Spread.FpStatusBarCountElement">
<Visible>True</Visible>
<Text>개수</Text>
<MenuText>개수(&amp;C)</MenuText>
<Align>Right</Align>
</Element>
<Element class="FarPoint.Win.Spread.FpStatusBarNumericalCountElement">
<Visible>False</Visible>
<Text>숫자 세기</Text>
<MenuText>숫자세기(&amp;T)</MenuText>
<Align>Right</Align>
</Element>
<Element class="FarPoint.Win.Spread.FpStatusBarMinElement">
<Visible>False</Visible>
<Text>최소값</Text>
<MenuText>최소값(&amp;I)</MenuText>
<Align>Right</Align>
</Element>
<Element class="FarPoint.Win.Spread.FpStatusBarMaxElement">
<Visible>False</Visible>
<Text>최대값</Text>
<MenuText>최대값(&amp;X)</MenuText>
<Align>Right</Align>
</Element>
<Element class="FarPoint.Win.Spread.FpStatusBarSumElement">
<Visible>True</Visible>
<Text>합계</Text>
<MenuText>합계</MenuText>
<Align>Right</Align>
</Element>
<Element class="FarPoint.Win.Spread.ZoomSliderStatusBarElement">
<Visible>True</Visible>
<Text />
<MenuText>확대/축소 슬라이더(&amp;Z)</MenuText>
<Align>Right</Align>
</Element>
<Element class="FarPoint.Win.Spread.ZoomStatusBarElement">
<Visible>True</Visible>
<Text />
<MenuText>확대/축소(&amp;Z)</MenuText>
<Align>Right</Align>
</Element>
<Skin class="FarPoint.Win.Spread.StatusBarSkin">
<name>Default</name>
<backcolor>White</backcolor>
<forecolor>Black</forecolor>
<zoomButtonHoverColor>#ffcdcdcd</zoomButtonHoverColor>
<zoomslidercolor>#ffa6a6a6</zoomslidercolor>
<zoomsliderhovercolor>#ffcdcdcd</zoomsliderhovercolor>
<zoomslidertrackcolor>#ffa6a6a6</zoomslidertrackcolor>
<font>
<Name>Microsoft Sans Serif</Name>
<Size>8.25</Size>
<Bold>False</Bold>
<CharSet>1</CharSet>
<Italic>False</Italic>
<Strikeout>False</Strikeout>
<Underline>False</Underline>
<Unit>Point</Unit>
<Vertical>False</Vertical>
</font>
</Skin>
<EnableContextMenu>True</EnableContextMenu>
</StatusBar>
<TitleInfo class="FarPoint.Win.Spread.TitleInfo" assembly="FarPoint.Win.Spread">
<BackColor>#ffe7eff7</BackColor>
</TitleInfo>
<TabStripInsertTabImage type="Image"></TabStripInsertTabImage>
<DocumentProperties>
<Created>0001-01-01T00:00:00.000</Created>
<LastModified>0001-01-01T00:00:00.000</LastModified>
<Revision>0</Revision>
</DocumentProperties>
</RootWorkbook>
<Sheets>
<Sheet index="0" class="FarPoint.Win.Spread.SheetView">
<SheetName>Sheet1</SheetName>
<TitleInfo class="FarPoint.Win.Spread.TitleInfo">
<BackColor>#ffe7eff7</BackColor>
</TitleInfo>
<Categories>
<Appearance>
<GroupBarInfo class="FarPoint.Win.Spread.GroupBarInfo" />
</Appearance>
<Behavior>
<DataAutoSizeColumns>False</DataAutoSizeColumns>
</Behavior>
<Appearance />
<Behavior />
<Layout>
<ColumnCount>10</ColumnCount>
<RowCount>0</RowCount>
<ActiveColumnIndex>-1</ActiveColumnIndex>
<ActiveRowIndex>-1</ActiveRowIndex>
</Layout>
<Appearance>
<ScrollingContentInfo class="FarPoint.Win.Spread.ScrollingContentInfo" />
<PreviewRowInfo class="FarPoint.Win.Spread.PreviewRowInfo" />
</Appearance>
</Categories>
<SelectionModel class="FarPoint.Win.Spread.Model.DefaultSheetSelectionModel">
<CellRange Row="-1" Column="6" RowCount="-1" ColumnCount="1" />
<AnchorColumn>6</AnchorColumn>
</SelectionModel>
</Sheet>
</Sheets>
</Settings>
<!--Styles Section - This section contains the workbook and sheet named style collections.-->
<Styles>
<NamedStyles class="FarPoint.Win.Spread.NamedStyleCollection" />
</Styles>
<!--Presentation Section - This section contains the column and row properties, cell spans, and the sheet, column, row, and cell styles.-->
<Presentation>
<Font>
<Name>맑은 고딕</Name>
<Size>9</Size>
<Bold>False</Bold>
<CharSet>129</CharSet>
<Italic>False</Italic>
<Strikeout>False</Strikeout>
<Underline>False</Underline>
<Unit>Point</Unit>
<Vertical>False</Vertical>
</Font>
<Sheets>
<Sheet index="0">
<ViewportInfo>
<RowPaneCount>1</RowPaneCount>
<ColumnPaneCount>1</ColumnPaneCount>
<ActiveRowPane>0</ActiveRowPane>
<ActiveColumnPane>0</ActiveColumnPane>
<RowPanes>
<RowPane row="0">
<TopRow>0</TopRow>
<PreferredHeight>-1</PreferredHeight>
<TopOffset>0</TopOffset>
</RowPane>
</RowPanes>
<ColumnPanes>
<ColumnPane column="0">
<LeftColumn>0</LeftColumn>
<PreferredWidth>-1</PreferredWidth>
<LeftOffset>0</LeftOffset>
</ColumnPane>
</ColumnPanes>
</ViewportInfo>
<AxisModels>
<Row class="q1" ignoreCreateWorksheet="True" orientation="Vertical" count="0">
<Items />
</Row>
<Column class="q1" ignoreCreateWorksheet="True" orientation="Horizontal" count="10">
<Items>
<Item startIndex="0" endIndex="0">
<Size>88</Size>
<BooleanProperties>8</BooleanProperties>
<Flags>1</Flags>
</Item>
<Item startIndex="1" endIndex="5">
<Size>113</Size>
<BooleanProperties>8</BooleanProperties>
<Flags>1</Flags>
</Item>
<Item startIndex="6" endIndex="6">
<Size>84</Size>
<BooleanProperties>8</BooleanProperties>
<Flags>1</Flags>
</Item>
<Item startIndex="7" endIndex="8">
<Size>113</Size>
<BooleanProperties>8</BooleanProperties>
<Flags>1</Flags>
</Item>
<Item startIndex="9" endIndex="9">
<Size>84</Size>
<BooleanProperties>8</BooleanProperties>
<Flags>1</Flags>
</Item>
</Items>
</Column>
<RowHeaderColumn class="FarPoint.Win.Spread.Model.DefaultSheetAxisModel" orientation="Horizontal" count="1" defaultSize="35">
<Items>
<Item index="-1">
<_startIndex>-1</_startIndex>
<Resizable>False</Resizable>
<Size>35</Size>
<_endIndex>-1</_endIndex>
</Item>
</Items>
</RowHeaderColumn>
<ColumnHeaderRow class="FarPoint.Win.Spread.Model.DefaultSheetAxisModel" orientation="Vertical" count="1">
<Items>
<Item index="-1">
<_startIndex>-1</_startIndex>
<Resizable>False</Resizable>
<_endIndex>-1</_endIndex>
</Item>
<Item index="0">
<_startIndex>-1</_startIndex>
<Size>42</Size>
<_endIndex>-1</_endIndex>
</Item>
</Items>
</ColumnHeaderRow>
<ColumnFooterRow class="FarPoint.Win.Spread.Model.DefaultSheetAxisModel" orientation="Vertical" count="1">
<Items>
<Item index="-1">
<_startIndex>-1</_startIndex>
<Resizable>False</Resizable>
<_endIndex>-1</_endIndex>
</Item>
</Items>
</ColumnFooterRow>
</AxisModels>
<StyleModels>
<RowHeader class="FarPoint.Win.Spread.Model.DefaultSheetStyleModel" Rows="0" Columns="1">
<AltRowCount>2</AltRowCount>
<DefaultStyle class="FarPoint.Win.Spread.StyleInfo" Parent="RowHeaderDefaultEnhanced" />
<ConditionalFormatCollections />
</RowHeader>
<ColumnHeader class="FarPoint.Win.Spread.Model.DefaultSheetStyleModel" Rows="1" Columns="10">
<AltRowCount>2</AltRowCount>
<DefaultStyle class="FarPoint.Win.Spread.StyleInfo" Parent="ColumnHeaderDefaultEnhanced" />
<ConditionalFormatCollections />
</ColumnHeader>
<ColumnFooter class="FarPoint.Win.Spread.Model.DefaultSheetStyleModel" Rows="1" Columns="10">
<AltRowCount>2</AltRowCount>
<DefaultStyle class="FarPoint.Win.Spread.StyleInfo" Parent="ColumnHeaderDefaultEnhanced" />
<ConditionalFormatCollections />
</ColumnFooter>
<DataArea class="qd" ignoreCreateWorksheet="True" Rows="0" Columns="10">
<AltRowCount>2</AltRowCount>
<DefaultStyle class="FarPoint.Win.Spread.StyleInfo" Parent="DataAreaDefault" />
<NamedStyles class="FarPoint.Win.Spread.NamedStyleCollection">
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="13">
<BackColor>#ffe0e0e0</BackColor>
<CellType class="FarPoint.Win.Spread.CellType.NumberCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<DecimalPlaces>0</DecimalPlaces>
<FixedPoint>True</FixedPoint>
<LeadingZero>Yes</LeadingZero>
<MaximumValue>2147483647</MaximumValue>
<MinimumValue>-2147483648</MinimumValue>
<NegativeFormat>UseRegional</NegativeFormat>
<NegativeRed>False</NegativeRed>
<ShowSeparator>False</ShowSeparator>
<SpinButton>False</SpinButton>
<SpinIntegerIncrement>1</SpinIntegerIncrement>
<SpinDecimalIncrement>0.1</SpinDecimalIncrement>
<FractionMode>False</FractionMode>
<FractionDenominatorPrecision>Auto</FractionDenominatorPrecision>
<FractionDenominatorDigits>3</FractionDenominatorDigits>
<FractionCustomFormat># ???/???</FractionCustomFormat>
<FractionConvertWholeNumbers>False</FractionConvertWholeNumbers>
<FractionRenderOnly>False</FractionRenderOnly>
<SpinWrap>False</SpinWrap>
</CellType>
<HorizontalAlignment>Center</HorizontalAlignment>
<VerticalAlignment>Center</VerticalAlignment>
</NamedStyle>
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="1">
<BackColor>#ffc0ffff</BackColor>
<CellType class="FarPoint.Win.Spread.CellType.TextCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<CharacterCasing>Normal</CharacterCasing>
<MaxLength>255</MaxLength>
<Multiline>False</Multiline>
<ScrollBars>None</ScrollBars>
<CharacterSet>Ascii</CharacterSet>
<HotkeyPrefix>None</HotkeyPrefix>
</CellType>
<HorizontalAlignment>Center</HorizontalAlignment>
<VerticalAlignment>Center</VerticalAlignment>
</NamedStyle>
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="3">
<CellType class="FarPoint.Win.Spread.CellType.TextCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<CharacterCasing>Normal</CharacterCasing>
<MaxLength>255</MaxLength>
<Multiline>False</Multiline>
<ScrollBars>None</ScrollBars>
<CharacterSet>Ascii</CharacterSet>
<HotkeyPrefix>None</HotkeyPrefix>
</CellType>
<HorizontalAlignment>Left</HorizontalAlignment>
<VerticalAlignment>Center</VerticalAlignment>
</NamedStyle>
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="4">
<CellType class="FarPoint.Win.Spread.CellType.TextCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<CharacterCasing>Normal</CharacterCasing>
<MaxLength>255</MaxLength>
<Multiline>False</Multiline>
<ScrollBars>None</ScrollBars>
<CharacterSet>Ascii</CharacterSet>
<HotkeyPrefix>None</HotkeyPrefix>
</CellType>
<HorizontalAlignment>Center</HorizontalAlignment>
<VerticalAlignment>Center</VerticalAlignment>
</NamedStyle>
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="5">
<CellType class="FarPoint.Win.Spread.CellType.TextCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<CharacterCasing>Normal</CharacterCasing>
<MaxLength>255</MaxLength>
<Multiline>False</Multiline>
<ScrollBars>None</ScrollBars>
<CharacterSet>Ascii</CharacterSet>
<HotkeyPrefix>None</HotkeyPrefix>
</CellType>
<HorizontalAlignment>Left</HorizontalAlignment>
<VerticalAlignment>Center</VerticalAlignment>
</NamedStyle>
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="6">
<CellType class="FarPoint.Win.Spread.CellType.TextCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<CharacterCasing>Normal</CharacterCasing>
<MaxLength>255</MaxLength>
<Multiline>False</Multiline>
<ScrollBars>None</ScrollBars>
<CharacterSet>Ascii</CharacterSet>
<HotkeyPrefix>None</HotkeyPrefix>
</CellType>
<HorizontalAlignment>Center</HorizontalAlignment>
<VerticalAlignment>Center</VerticalAlignment>
</NamedStyle>
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="7">
<CellType class="FarPoint.Win.Spread.CellType.NumberCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<DecimalPlaces>0</DecimalPlaces>
<FixedPoint>False</FixedPoint>
<LeadingZero>UseRegional</LeadingZero>
<MaximumValue>999999999999999</MaximumValue>
<MinimumValue>-999999999999999</MinimumValue>
<NegativeFormat>UseRegional</NegativeFormat>
<NegativeRed>True</NegativeRed>
<ShowSeparator>True</ShowSeparator>
<SpinButton>False</SpinButton>
<SpinIntegerIncrement>1</SpinIntegerIncrement>
<SpinDecimalIncrement>0.1</SpinDecimalIncrement>
<FractionMode>False</FractionMode>
<FractionDenominatorPrecision>Auto</FractionDenominatorPrecision>
<FractionDenominatorDigits>3</FractionDenominatorDigits>
<FractionCustomFormat># ???/???</FractionCustomFormat>
<FractionConvertWholeNumbers>False</FractionConvertWholeNumbers>
<FractionRenderOnly>False</FractionRenderOnly>
<SpinWrap>False</SpinWrap>
</CellType>
<HorizontalAlignment>Right</HorizontalAlignment>
<VerticalAlignment>Center</VerticalAlignment>
</NamedStyle>
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="8">
<CellType class="FarPoint.Win.Spread.CellType.TextCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<CharacterCasing>Normal</CharacterCasing>
<MaxLength>255</MaxLength>
<Multiline>False</Multiline>
<ScrollBars>None</ScrollBars>
<CharacterSet>Ascii</CharacterSet>
<HotkeyPrefix>None</HotkeyPrefix>
</CellType>
<HorizontalAlignment>Left</HorizontalAlignment>
<VerticalAlignment>Center</VerticalAlignment>
</NamedStyle>
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="9">
<CellType class="FarPoint.Win.Spread.CellType.TextCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<CharacterCasing>Normal</CharacterCasing>
<MaxLength>255</MaxLength>
<Multiline>False</Multiline>
<ScrollBars>None</ScrollBars>
<CharacterSet>Ascii</CharacterSet>
<HotkeyPrefix>None</HotkeyPrefix>
</CellType>
<HorizontalAlignment>Left</HorizontalAlignment>
<VerticalAlignment>Center</VerticalAlignment>
</NamedStyle>
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="10">
<CellType class="FarPoint.Win.Spread.CellType.NumberCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<DecimalPlaces>-1</DecimalPlaces>
<FixedPoint>True</FixedPoint>
<LeadingZero>UseRegional</LeadingZero>
<MaximumValue>999999999999999</MaximumValue>
<MinimumValue>-999999999999999</MinimumValue>
<NegativeFormat>UseRegional</NegativeFormat>
<NegativeRed>False</NegativeRed>
<ShowSeparator>False</ShowSeparator>
<SpinButton>False</SpinButton>
<SpinIntegerIncrement>1</SpinIntegerIncrement>
<SpinDecimalIncrement>0.1</SpinDecimalIncrement>
<FractionMode>False</FractionMode>
<FractionDenominatorPrecision>Auto</FractionDenominatorPrecision>
<FractionDenominatorDigits>3</FractionDenominatorDigits>
<FractionCustomFormat># ???/???</FractionCustomFormat>
<FractionConvertWholeNumbers>False</FractionConvertWholeNumbers>
<FractionRenderOnly>False</FractionRenderOnly>
<SpinWrap>False</SpinWrap>
</CellType>
<HorizontalAlignment>Center</HorizontalAlignment>
<VerticalAlignment>Center</VerticalAlignment>
</NamedStyle>
</NamedStyles><ColumnStyles><ColumnStyle Index="0" Name="13" /><ColumnStyle Index="1" Name="1" /><ColumnStyle Index="2" Name="3" /><ColumnStyle Index="3" Name="4" /><ColumnStyle Index="4" Name="5" /><ColumnStyle Index="5" Name="6" /><ColumnStyle Index="6" Name="7" /><ColumnStyle Index="7" Name="8" /><ColumnStyle Index="8" Name="9" /><ColumnStyle Index="9" Name="10" /></ColumnStyles><ConditionalFormatCollections /></DataArea>
<SheetCorner class="FarPoint.Win.Spread.Model.DefaultSheetStyleModel" Rows="1" Columns="1">
<AltRowCount>2</AltRowCount>
<DefaultStyle class="FarPoint.Win.Spread.StyleInfo" Parent="CornerDefaultEnhanced" />
<ConditionalFormatCollections />
</SheetCorner>
</StyleModels>
<SheetCornerStyle class="FarPoint.Win.Spread.NamedStyle" Parent="CornerDefaultEnhanced" />
<ColumnFooterSheetCornerStyle class="FarPoint.Win.Spread.NamedStyle" Parent="CornerFooterDefaultEnhanced" />
<Notes class="FarPoint.Win.Spread.DrawingSpace.SpreadNotesContainer">
<Top>0</Top>
<Left>0</Left>
<Height>800</Height>
<Width>904</Width>
<Name>spreadNotesContainer</Name>
<Text />
<ForeColor>ControlText</ForeColor>
<BackColor>Transparent</BackColor>
<AlignHorz>Center</AlignHorz>
<AlignVert>Center</AlignVert>
<AlphaBlendBackColor>255</AlphaBlendBackColor>
<Font />
<PictureTransparencyColor>Empty</PictureTransparencyColor>
<PictureTransparencyTolerance>0</PictureTransparencyTolerance>
<ShapeOutlineColor>Black</ShapeOutlineColor>
<ShapeOutlineThickness>1</ShapeOutlineThickness>
<ShapeOutlineStyle>Solid</ShapeOutlineStyle>
<RotationAngle>0</RotationAngle>
<PictureRotationAngle>0</PictureRotationAngle>
<TextRotationAngle>0</TextRotationAngle>
<Anchor>0</Anchor>
<Locked>False</Locked>
<CanRotate>True</CanRotate>
<CanPrint>True</CanPrint>
<SizeProportional>False</SizeProportional>
<Selectable>True</Selectable>
<FlipHorizontal>False</FlipHorizontal>
<FlipVertical>False</FlipVertical>
<TextOrientation>TextRotateCustom</TextOrientation>
<CanMove>None</CanMove>
<CanSize>None</CanSize>
<Gradient class="FarPoint.Win.Spread.DrawingSpace.PSGradient" assembly="FarPoint.Win.Spread, Version=11.40.20177.0, Culture=neutral, PublicKeyToken=327c3516b1b18457">
<GradientStyle>None</GradientStyle>
<GradientSections>
<GradientSection class="FarPoint.Win.Spread.DrawingSpace.GradientSection">
<Amount>0</Amount>
<Color>#ffffffff</Color>
</GradientSection>
<GradientSection class="FarPoint.Win.Spread.DrawingSpace.GradientSection">
<Amount>0</Amount>
<Color>#ffffffff</Color>
</GradientSection>
</GradientSections>
</Gradient>
<EndOfProps />
<AllowNoteEdit>True</AllowNoteEdit>
</Notes>
<FilterBarHeaderStyle class="FarPoint.Win.Spread.NamedStyle" Parent="RowHeaderDefaultEnhanced" />
<FilterBar class="FarPoint.Win.Spread.FilterBar">
<Height>22</Height>
<Style class="FarPoint.Win.Spread.Model.DefaultSheetStyleModel" Rows="1" Columns="10">
<AltRowCount>2</AltRowCount>
<DefaultStyle class="FarPoint.Win.Spread.StyleInfo" Parent="FilterBarDefaultEnhanced" />
<ConditionalFormatCollections />
</Style>
</FilterBar>
</Sheet>
</Sheets>
</Presentation>
<!--Drawing Section - This section contains the drawing objects and their properties.-->
<Drawing>
<Sheets>
<Sheet index="0">
<DrawingContainer class="FarPoint.Win.Spread.DrawingSpace.SpreadShapesContainer">
<Top>0</Top>
<Left>0</Left>
<Height>800</Height>
<Width>904</Width>
<Name>spreadShapesContainer</Name>
<Text />
<ForeColor>ControlText</ForeColor>
<BackColor>Transparent</BackColor>
<AlignHorz>Center</AlignHorz>
<AlignVert>Center</AlignVert>
<AlphaBlendBackColor>255</AlphaBlendBackColor>
<Font />
<PictureTransparencyColor>Empty</PictureTransparencyColor>
<PictureTransparencyTolerance>0</PictureTransparencyTolerance>
<ShapeOutlineColor>Black</ShapeOutlineColor>
<ShapeOutlineThickness>1</ShapeOutlineThickness>
<ShapeOutlineStyle>Solid</ShapeOutlineStyle>
<RotationAngle>0</RotationAngle>
<PictureRotationAngle>0</PictureRotationAngle>
<TextRotationAngle>0</TextRotationAngle>
<Anchor>0</Anchor>
<Locked>False</Locked>
<CanRotate>True</CanRotate>
<CanPrint>True</CanPrint>
<SizeProportional>False</SizeProportional>
<Selectable>True</Selectable>
<FlipHorizontal>False</FlipHorizontal>
<FlipVertical>False</FlipVertical>
<TextOrientation>TextRotateCustom</TextOrientation>
<CanMove>None</CanMove>
<CanSize>None</CanSize>
<EndOfProps />
</DrawingContainer>
<SparklineContainer class="FarPoint.Win.Spread.DefaultSparklineContainer" />
</Sheet>
</Sheets>
</Drawing>
<!--Data Section - This section contains the sheet data.-->
<Data>
<EnableCrossSheetReference>True</EnableCrossSheetReference>
<Sheets>
<Sheet index="0">
<DataArea class="rc" rows="0" columns="10">
<AutoCalculation>True</AutoCalculation>
<AutoGenerateColumns>False</AutoGenerateColumns>
<ReferenceStyle>A1</ReferenceStyle>
<Iteration>False</Iteration>
<MaximumIterations>1</MaximumIterations>
<MaximumChange>0.001</MaximumChange>
<UnBoundNewRowIndex>-1</UnBoundNewRowIndex>
<SheetName>Sheet1</SheetName>
<Columns>
<Column index="0">
<ColumnInfo>
<ColumnName>idx</ColumnName>
</ColumnInfo>
</Column>
<Column index="1">
<ColumnInfo>
<ColumnName>cate</ColumnName>
</ColumnInfo>
</Column>
<Column index="2">
<ColumnInfo>
<ColumnName>name</ColumnName>
</ColumnInfo>
</Column>
<Column index="3">
<ColumnInfo>
<ColumnName>sid</ColumnName>
</ColumnInfo>
</Column>
<Column index="4">
<ColumnInfo>
<ColumnName>model</ColumnName>
</ColumnInfo>
</Column>
<Column index="5">
<ColumnInfo>
<ColumnName>unit</ColumnName>
</ColumnInfo>
</Column>
<Column index="6">
<ColumnInfo>
<ColumnName>price</ColumnName>
</ColumnInfo>
</Column>
<Column index="7">
<ColumnInfo>
<ColumnName>manu</ColumnName>
</ColumnInfo>
</Column>
<Column index="8">
<ColumnInfo>
<ColumnName>memo</ColumnName>
</ColumnInfo>
</Column>
<Column index="9">
<ColumnInfo>
<ColumnName>scale</ColumnName>
</ColumnInfo>
</Column>
</Columns>
<Cells />
<UnionedChangeCellRange>True</UnionedChangeCellRange>
</DataArea>
<RowHeader class="FarPoint.Win.Spread.Model.DefaultSheetDataModel" rows="0" columns="1">
<AutoCalculation>True</AutoCalculation>
<AutoGenerateColumns>True</AutoGenerateColumns>
<ReferenceStyle>A1</ReferenceStyle>
<Iteration>False</Iteration>
<MaximumIterations>1</MaximumIterations>
<MaximumChange>0.001</MaximumChange>
<UnBoundNewRowIndex>-1</UnBoundNewRowIndex>
<UnionedChangeCellRange>True</UnionedChangeCellRange>
</RowHeader>
<ColumnHeader class="FarPoint.Win.Spread.Model.DefaultSheetDataModel" rows="1" columns="10">
<AutoCalculation>True</AutoCalculation>
<AutoGenerateColumns>True</AutoGenerateColumns>
<ReferenceStyle>A1</ReferenceStyle>
<Iteration>False</Iteration>
<MaximumIterations>1</MaximumIterations>
<MaximumChange>0.001</MaximumChange>
<UnBoundNewRowIndex>-1</UnBoundNewRowIndex>
<UnionedChangeCellRange>True</UnionedChangeCellRange>
</ColumnHeader>
<ColumnFooter class="FarPoint.Win.Spread.Model.AggregationDataModel">
<ModelChangeEventSuspended>False</ModelChangeEventSuspended>
<Model class="rc" rows="1" columns="10">
<AutoCalculation>True</AutoCalculation>
<AutoGenerateColumns>True</AutoGenerateColumns>
<ReferenceStyle>A1</ReferenceStyle>
<Iteration>False</Iteration>
<MaximumIterations>1</MaximumIterations>
<MaximumChange>0.001</MaximumChange>
<UnBoundNewRowIndex>-1</UnBoundNewRowIndex>
<UnionedChangeCellRange>True</UnionedChangeCellRange>
</Model>
</ColumnFooter>
<RangeGroupModel class="r9">
<outlineOptions>SummaryBelow, SummaryRight</outlineOptions>
<ignoreCreateWorksheet>True</ignoreCreateWorksheet>
</RangeGroupModel>
<SheetCornerDataModel class="FarPoint.Win.Spread.Model.DefaultSheetDataModel" rows="1" columns="1">
<AutoCalculation>True</AutoCalculation>
<AutoGenerateColumns>True</AutoGenerateColumns>
<ReferenceStyle>A1</ReferenceStyle>
<Iteration>False</Iteration>
<MaximumIterations>1</MaximumIterations>
<MaximumChange>0.001</MaximumChange>
<UnBoundNewRowIndex>-1</UnBoundNewRowIndex>
<UnionedChangeCellRange>True</UnionedChangeCellRange>
</SheetCornerDataModel>
</Sheet>
</Sheets>
</Data>
</Spread>

View File

@@ -1,896 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Spread class="FarPoint.Win.Spread.FpSpread">
<!--Settings Section - This section contains the workbook properties, and the sheet objects, properties and selections.-->
<Settings>
<RootWorkbook>
<ActiveSheetIndex>0</ActiveSheetIndex>
<AllowDragDrop>False</AllowDragDrop>
<ShowCellErrors>False</ShowCellErrors>
<ShowRowErrors>False</ShowRowErrors>
<AllowDragFill>False</AllowDragFill>
<EnableDragFillMenu>True</EnableDragFillMenu>
<AllowCellOverflow>False</AllowCellOverflow>
<AllowColumnMove>False</AllowColumnMove>
<AllowColumnMoveMultiple>False</AllowColumnMoveMultiple>
<AllowEditOverflow>False</AllowEditOverflow>
<RangeDragFillMode>Copy</RangeDragFillMode>
<CustomFillSeriesList />
<DragFillDataOnly>True</DragFillDataOnly>
<CellSpanSelectionPolicy>Default</CellSpanSelectionPolicy>
<AllowEditorReservedLocations>True</AllowEditorReservedLocations>
<AllowUserFormulas>False</AllowUserFormulas>
<AllowRowMove>False</AllowRowMove>
<AllowRowMoveMultiple>False</AllowRowMoveMultiple>
<ShowDragBandOnMoving>True</ShowDragBandOnMoving>
<AllowSheetMove>False</AllowSheetMove>
<AllowUndo>True</AllowUndo>
<AllowUserZoom>True</AllowUserZoom>
<AutoClipboard>True</AutoClipboard>
<AutoAdvance>False</AutoAdvance>
<StatusBarVisible>False</StatusBarVisible>
<BackgroundImage type="Image"></BackgroundImage>
<BackgroundImageLayout>Tile</BackgroundImageLayout>
<BorderCollapse>Separate</BorderCollapse>
<RightToLeft>No</RightToLeft>
<TabStripInsertTab>True</TabStripInsertTab>
<UseOptimizedSelectionForTouch>True</UseOptimizedSelectionForTouch>
<TouchSelectionGripperThickness>0</TouchSelectionGripperThickness>
<TouchSelectionGripperLineColor>Empty</TouchSelectionGripperLineColor>
<TouchSelectionGripperBackColor>Empty</TouchSelectionGripperBackColor>
<TapToAddSelection>False</TapToAddSelection>
<ShowGrippersInEditingStatus>True</ShowGrippersInEditingStatus>
<AutoScrollWhenKeyboardShowing>True</AutoScrollWhenKeyboardShowing>
<ResizeZeroIndicator>Default</ResizeZeroIndicator>
<InputScope>Default</InputScope>
<PanningMode>Both</PanningMode>
<BoundaryFeedbackMode>Split</BoundaryFeedbackMode>
<AllowUserToTouchZoom>True</AllowUserToTouchZoom>
<TouchZoomSnapDistance>0.05</TouchZoomSnapDistance>
<TouchDropDownScale>1.5</TouchDropDownScale>
<HeaderIndicatorPositionAdjusting>0</HeaderIndicatorPositionAdjusting>
<PaintSelectionBorder>True</PaintSelectionBorder>
<PaintSelectionHeader>True</PaintSelectionHeader>
<PaintActiveCellInSelection>False</PaintActiveCellInSelection>
<VerticalScrollbarMode>Row</VerticalScrollbarMode>
<HorizontalScrollbarMode>Column</HorizontalScrollbarMode>
<ScrollTipPolicy>Off</ScrollTipPolicy>
<ScrollBarTrackPolicy>Off</ScrollBarTrackPolicy>
<ScrollBarShowMax>True</ScrollBarShowMax>
<ScrollBarMaxAlign>True</ScrollBarMaxAlign>
<BorderStyle>Fixed3D</BorderStyle>
<ButtonDrawMode>Always</ButtonDrawMode>
<CellNoteIndicatorVisible>True</CellNoteIndicatorVisible>
<ClipboardOptions>AllHeaders</ClipboardOptions>
<AutofitColumnOptions>ExcludeSpans</AutofitColumnOptions>
<AutofitRowOptions>ExcludeSpans</AutofitRowOptions>
<ClipboardPasteToFill>False</ClipboardPasteToFill>
<ColumnSplitBoxAlignment>Leading</ColumnSplitBoxAlignment>
<ImeMode>NoControl</ImeMode>
<AutoImeMode>True</AutoImeMode>
<ImeSentenceMode>NoControl</ImeSentenceMode>
<SpreadScaleMode>None</SpreadScaleMode>
<ColumnSplitBoxPolicy>Always</ColumnSplitBoxPolicy>
<EditModePermanent>False</EditModePermanent>
<EditModeReplace>False</EditModeReplace>
<HorizontalScrollBarHeight>-1</HorizontalScrollBarHeight>
<HorizontalScrollBarPolicy>Always</HorizontalScrollBarPolicy>
<HorizontalScrollBarSmallChange>1</HorizontalScrollBarSmallChange>
<AllowRowMoveDataAllowAddNew>False</AllowRowMoveDataAllowAddNew>
<LeftTab>0</LeftTab>
<MoveActiveOnFocus>True</MoveActiveOnFocus>
<RetainSelectionBlock>True</RetainSelectionBlock>
<RightToLeft>No</RightToLeft>
<RowSplitBoxAlignment>Leading</RowSplitBoxAlignment>
<RowSplitBoxPolicy>Always</RowSplitBoxPolicy>
<SelectionBlockOptions>Cells, Rows, Columns, Sheet</SelectionBlockOptions>
<SheetCount>1</SheetCount>
<TabStrip>
<BackColor>Control</BackColor>
<Editable>False</Editable>
<ButtonPolicy>Always</ButtonPolicy>
<ActiveSheetTab />
<DefaultSheetTab />
<Items>
<SheetTab />
</Items>
</TabStrip>
<TabStripPlacement>WithHorizontalScrollBar</TabStripPlacement>
<TabStripPolicy>AsNeeded</TabStripPolicy>
<TabStripRatio>0.5</TabStripRatio>
<TextTipAppearance class="FarPoint.Win.Spread.TipAppearance" assembly="FarPoint.Win.Spread">
<BackColor>Info</BackColor>
<ForeColor>InfoText</ForeColor>
<Font>
<Name>굴림</Name>
<Size>9</Size>
<Bold>False</Bold>
<CharSet>129</CharSet>
<Italic>False</Italic>
<Strikeout>False</Strikeout>
<Underline>False</Underline>
<Unit>Point</Unit>
<Vertical>False</Vertical>
</Font>
</TextTipAppearance>
<TextTipDelay>500</TextTipDelay>
<TextTipPolicy>Off</TextTipPolicy>
<VerticalScrollBarWidth>-1</VerticalScrollBarWidth>
<AllowCellContentFloat>False</AllowCellContentFloat>
<VerticalScrollBarPolicy>Always</VerticalScrollBarPolicy>
<VerticalScrollBarSmallChange>1</VerticalScrollBarSmallChange>
<VisualStyles>Auto</VisualStyles>
<FocusRenderer>
<IFocusRenderer class="FarPoint.Win.Spread.FlatFocusIndicatorRenderer" assembly="FarPoint.Win.Spread, Version=11.40.20177.0, Culture=neutral, PublicKeyToken=327c3516b1b18457">
<Thickness>3</Thickness>
<Color>-16777216</Color>
</IFocusRenderer>
</FocusRenderer>
<InterfaceRenderer>
<IInterfaceRenderer class="FarPoint.Win.Spread.EnhancedInterfaceRenderer" assembly="FarPoint.Win.Spread, Version=11.40.20177.0, Culture=neutral, PublicKeyToken=327c3516b1b18457">
<ScrollBoxStartColor>White</ScrollBoxStartColor>
<ScrollBoxEndColor>White</ScrollBoxEndColor>
<TabStripBackGroundStartColor>White</TabStripBackGroundStartColor>
<TabStripBackGroundEndColor>White</TabStripBackGroundEndColor>
<SheetTabUpperNormalStartColor>White</SheetTabUpperNormalStartColor>
<SheetTabUpperNormalEndColor>White</SheetTabUpperNormalEndColor>
<SheetTabLowerNormalStartColor>White</SheetTabLowerNormalStartColor>
<SheetTabLowerNormalEndColor>White</SheetTabLowerNormalEndColor>
<SheetTabUpperHoverStartColor>#ffbaeafd</SheetTabUpperHoverStartColor>
<SheetTabUpperHoverEndColor>#ffbaeafd</SheetTabUpperHoverEndColor>
<SheetTabLowerHoverStartColor>#ffbaeafd</SheetTabLowerHoverStartColor>
<SheetTabLowerHoverEndColor>#ffbaeafd</SheetTabLowerHoverEndColor>
<SheetTabBorderColor>#ffa6acb3</SheetTabBorderColor>
<ForeColor>Black</ForeColor>
<GrayAreaColor>White</GrayAreaColor>
<TabStripButtonUpperNormalStartColor>White</TabStripButtonUpperNormalStartColor>
<TabStripButtonUpperNormalEndColor>White</TabStripButtonUpperNormalEndColor>
<TabStripButtonLowerNormalStartColor>White</TabStripButtonLowerNormalStartColor>
<TabStripButtonLowerNormalEndColor>White</TabStripButtonLowerNormalEndColor>
<TabStripButtonUpperHoverStartColor>#ffbaeafd</TabStripButtonUpperHoverStartColor>
<TabStripButtonUpperHoverEndColor>#ffbaeafd</TabStripButtonUpperHoverEndColor>
<TabStripButtonLowerHoverStartColor>#ffbaeafd</TabStripButtonLowerHoverStartColor>
<TabStripButtonLowerHoverEndColor>#ffbaeafd</TabStripButtonLowerHoverEndColor>
<TabStripButtonUpperPressedStartColor>#ffbaeafd</TabStripButtonUpperPressedStartColor>
<TabStripButtonUpperPressedEndColor>#ffbaeafd</TabStripButtonUpperPressedEndColor>
<TabStripButtonLowerPressedStartColor>#ffbaeafd</TabStripButtonLowerPressedStartColor>
<TabStripButtonLowerPressedEndColor>#ffbaeafd</TabStripButtonLowerPressedEndColor>
<TabStripButtonBorderColor>#ffa6acb3</TabStripButtonBorderColor>
<SplitBoxBorderColor>#ffd5d5d5</SplitBoxBorderColor>
<SplitBoxBackgroundColor>#ffd5d5d5</SplitBoxBackgroundColor>
<SplitBarBackgroundColor>#ffdfe3f0</SplitBarBackgroundColor>
<SplitBarDarkColor>#ffdfe3f0</SplitBarDarkColor>
<SplitBarLightColor>#ffdfe3f0</SplitBarLightColor>
<ScrollBoxBackgroundColor>White</ScrollBoxBackgroundColor>
<TabStripBackgroundColor>White</TabStripBackgroundColor>
<SheetTabUpperNormalColor>White</SheetTabUpperNormalColor>
<SheetTabLowerNormalColor>White</SheetTabLowerNormalColor>
<SheetTabUpperActiveColor>#ffbaeafd</SheetTabUpperActiveColor>
<SheetTabLowerActiveColor>#ffbaeafd</SheetTabLowerActiveColor>
<TabStripButtonUpperNormalColor>White</TabStripButtonUpperNormalColor>
<TabStripButtonLowerNormalColor>White</TabStripButtonLowerNormalColor>
<TabStripButtonUpperActiveColor>#ffbaeafd</TabStripButtonUpperActiveColor>
<TabStripButtonLowerActiveColor>#ffbaeafd</TabStripButtonLowerActiveColor>
<TabStripButtonUpperPressedColor>#ffbaeafd</TabStripButtonUpperPressedColor>
<TabStripButtonLowerPressedColor>#ffbaeafd</TabStripButtonLowerPressedColor>
<RangeGroupBackColor>White</RangeGroupBackColor>
<RangeGroupButtonBackColor>Empty</RangeGroupButtonBackColor>
<RangeGroupLineColor>#ff666666</RangeGroupLineColor>
<RangeGroupButtonBorderColor>#ff666666</RangeGroupButtonBorderColor>
<ArrowColorEnabled>#ffa6acb3</ArrowColorEnabled>
<ArrowColorDisabled>#ffb2b2b2</ArrowColorDisabled>
<SheetTabShape>Trapezoid</SheetTabShape>
<ButtonStyle>Flat</ButtonStyle>
<FlatStyle>Flat</FlatStyle>
</IInterfaceRenderer>
</InterfaceRenderer>
<SelectionRenderer>
<ISelectionRenderer class="FarPoint.Win.Spread.FlatSelectionRenderer" assembly="FarPoint.Win.Spread, Version=11.40.20177.0, Culture=neutral, PublicKeyToken=327c3516b1b18457">
<ViewportColor>#64c1e0ff</ViewportColor>
<ColumnHeaderColor>#64baeafd</ColumnHeaderColor>
<ColumnFooterColor>#64baeafd</ColumnFooterColor>
<RowHeaderColor>#64baeafd</RowHeaderColor>
<FilterBarHeaderColor>#64baeafd</FilterBarHeaderColor>
<FilterBarColor>#64c1e0ff</FilterBarColor>
</ISelectionRenderer>
</SelectionRenderer>
<CellNoteIndicatorRenderer />
<SuspendAnimations>False</SuspendAnimations>
<HorizontalScrollBar class="FarPoint.Win.Spread.SpreadHScrollBar" assembly="FarPoint.Win.Spread">
<Buttons class="FarPoint.Win.Spread.FpScrollBarButtonCollection">
<Button class="FarPoint.Win.Spread.FpScrollBarButtonBackwardLine">
<ChangeType>SmallChange</ChangeType>
<ChangeValue>-1</ChangeValue>
</Button>
<Button class="FarPoint.Win.Spread.FpScrollBarComboThumb">
<TrackBackward class="FarPoint.Win.Spread.FpScrollBarTrackBackward">
<ChangeType>LargeChange</ChangeType>
<ChangeValue>-1</ChangeValue>
</TrackBackward>
<Thumb class="FarPoint.Win.Spread.FpScrollBarThumb">
<Gripper class="FarPoint.Win.Spread.FpScrollBarGripper" />
</Thumb>
<TrackForward class="FarPoint.Win.Spread.FpScrollBarTrackForward">
<ChangeType>LargeChange</ChangeType>
<ChangeValue>1</ChangeValue>
</TrackForward>
</Button>
<Button class="FarPoint.Win.Spread.FpScrollBarButtonForwardLine">
<ChangeType>SmallChange</ChangeType>
<ChangeValue>1</ChangeValue>
</Button>
</Buttons>
<VisualStyles>Auto</VisualStyles>
<Renderer />
</HorizontalScrollBar>
<VerticalScrollBar class="FarPoint.Win.Spread.SpreadVScrollBar" assembly="FarPoint.Win.Spread">
<Buttons class="FarPoint.Win.Spread.FpScrollBarButtonCollection">
<Button class="FarPoint.Win.Spread.FpScrollBarButtonBackwardLine">
<ChangeType>SmallChange</ChangeType>
<ChangeValue>-1</ChangeValue>
</Button>
<Button class="FarPoint.Win.Spread.FpScrollBarComboThumb">
<TrackBackward class="FarPoint.Win.Spread.FpScrollBarTrackBackward">
<ChangeType>LargeChange</ChangeType>
<ChangeValue>-1</ChangeValue>
</TrackBackward>
<Thumb class="FarPoint.Win.Spread.FpScrollBarThumb">
<Gripper class="FarPoint.Win.Spread.FpScrollBarGripper" />
</Thumb>
<TrackForward class="FarPoint.Win.Spread.FpScrollBarTrackForward">
<ChangeType>LargeChange</ChangeType>
<ChangeValue>1</ChangeValue>
</TrackForward>
</Button>
<Button class="FarPoint.Win.Spread.FpScrollBarButtonForwardLine">
<ChangeType>SmallChange</ChangeType>
<ChangeValue>1</ChangeValue>
</Button>
</Buttons>
<VisualStyles>Auto</VisualStyles>
<Renderer />
</VerticalScrollBar>
<StatusBar class="FarPoint.Win.Spread.FpStatusBar" assembly="FarPoint.Win.Spread">
<Element class="FarPoint.Win.Spread.FpStatusBarAverageElement">
<Visible>True</Visible>
<Text>평균</Text>
<MenuText>평균(&amp;A)</MenuText>
<Align>Right</Align>
</Element>
<Element class="FarPoint.Win.Spread.FpStatusBarCountElement">
<Visible>True</Visible>
<Text>개수</Text>
<MenuText>개수(&amp;C)</MenuText>
<Align>Right</Align>
</Element>
<Element class="FarPoint.Win.Spread.FpStatusBarNumericalCountElement">
<Visible>False</Visible>
<Text>숫자 세기</Text>
<MenuText>숫자세기(&amp;T)</MenuText>
<Align>Right</Align>
</Element>
<Element class="FarPoint.Win.Spread.FpStatusBarMinElement">
<Visible>False</Visible>
<Text>최소값</Text>
<MenuText>최소값(&amp;I)</MenuText>
<Align>Right</Align>
</Element>
<Element class="FarPoint.Win.Spread.FpStatusBarMaxElement">
<Visible>False</Visible>
<Text>최대값</Text>
<MenuText>최대값(&amp;X)</MenuText>
<Align>Right</Align>
</Element>
<Element class="FarPoint.Win.Spread.FpStatusBarSumElement">
<Visible>True</Visible>
<Text>합계</Text>
<MenuText>합계</MenuText>
<Align>Right</Align>
</Element>
<Element class="FarPoint.Win.Spread.ZoomSliderStatusBarElement">
<Visible>True</Visible>
<Text />
<MenuText>확대/축소 슬라이더(&amp;Z)</MenuText>
<Align>Right</Align>
</Element>
<Element class="FarPoint.Win.Spread.ZoomStatusBarElement">
<Visible>True</Visible>
<Text />
<MenuText>확대/축소(&amp;Z)</MenuText>
<Align>Right</Align>
</Element>
<Skin class="FarPoint.Win.Spread.StatusBarSkin">
<name>Default</name>
<backcolor>White</backcolor>
<forecolor>Black</forecolor>
<zoomButtonHoverColor>#ffcdcdcd</zoomButtonHoverColor>
<zoomslidercolor>#ffa6a6a6</zoomslidercolor>
<zoomsliderhovercolor>#ffcdcdcd</zoomsliderhovercolor>
<zoomslidertrackcolor>#ffa6a6a6</zoomslidertrackcolor>
<font>
<Name>Microsoft Sans Serif</Name>
<Size>8.25</Size>
<Bold>False</Bold>
<CharSet>1</CharSet>
<Italic>False</Italic>
<Strikeout>False</Strikeout>
<Underline>False</Underline>
<Unit>Point</Unit>
<Vertical>False</Vertical>
</font>
</Skin>
<EnableContextMenu>True</EnableContextMenu>
</StatusBar>
<TitleInfo class="FarPoint.Win.Spread.TitleInfo" assembly="FarPoint.Win.Spread">
<BackColor>#ffe7eff7</BackColor>
</TitleInfo>
<TabStripInsertTabImage type="Image"></TabStripInsertTabImage>
<DocumentProperties>
<Created>0001-01-01T00:00:00.000</Created>
<LastModified>0001-01-01T00:00:00.000</LastModified>
<Revision>0</Revision>
</DocumentProperties>
</RootWorkbook>
<Sheets>
<Sheet index="0" class="FarPoint.Win.Spread.SheetView">
<SheetName>Sheet1</SheetName>
<TitleInfo class="FarPoint.Win.Spread.TitleInfo">
<BackColor>#ffe7eff7</BackColor>
</TitleInfo>
<Categories>
<Appearance>
<GroupBarInfo class="FarPoint.Win.Spread.GroupBarInfo" />
</Appearance>
<Behavior>
<DataAutoSizeColumns>False</DataAutoSizeColumns>
</Behavior>
<Appearance />
<Behavior />
<Layout>
<ColumnCount>9</ColumnCount>
<RowCount>0</RowCount>
<ActiveColumnIndex>-1</ActiveColumnIndex>
<ActiveRowIndex>-1</ActiveRowIndex>
</Layout>
<Appearance>
<ScrollingContentInfo class="FarPoint.Win.Spread.ScrollingContentInfo" />
<PreviewRowInfo class="FarPoint.Win.Spread.PreviewRowInfo" />
</Appearance>
</Categories>
<SelectionModel class="FarPoint.Win.Spread.Model.DefaultSheetSelectionModel">
<CellRange Row="-1" Column="4" RowCount="-1" ColumnCount="1" />
<AnchorColumn>4</AnchorColumn>
</SelectionModel>
</Sheet>
</Sheets>
</Settings>
<!--Styles Section - This section contains the workbook and sheet named style collections.-->
<Styles>
<NamedStyles class="FarPoint.Win.Spread.NamedStyleCollection" />
</Styles>
<!--Presentation Section - This section contains the column and row properties, cell spans, and the sheet, column, row, and cell styles.-->
<Presentation>
<Font>
<Name>맑은 고딕</Name>
<Size>9</Size>
<Bold>False</Bold>
<CharSet>1</CharSet>
<Italic>False</Italic>
<Strikeout>False</Strikeout>
<Underline>False</Underline>
<Unit>Point</Unit>
<Vertical>False</Vertical>
</Font>
<Sheets>
<Sheet index="0">
<ViewportInfo>
<RowPaneCount>1</RowPaneCount>
<ColumnPaneCount>1</ColumnPaneCount>
<ActiveRowPane>0</ActiveRowPane>
<ActiveColumnPane>0</ActiveColumnPane>
<RowPanes>
<RowPane row="0">
<TopRow>0</TopRow>
<PreferredHeight>-1</PreferredHeight>
<TopOffset>0</TopOffset>
</RowPane>
</RowPanes>
<ColumnPanes>
<ColumnPane column="0">
<LeftColumn>0</LeftColumn>
<PreferredWidth>-1</PreferredWidth>
<LeftOffset>0</LeftOffset>
</ColumnPane>
</ColumnPanes>
</ViewportInfo>
<AxisModels>
<Row class="q1" ignoreCreateWorksheet="True" orientation="Vertical" count="0">
<Items />
</Row>
<Column class="q1" ignoreCreateWorksheet="True" orientation="Horizontal" count="9">
<Items>
<Item startIndex="0" endIndex="0">
<Size>58</Size>
<BooleanProperties>8</BooleanProperties>
<Flags>1</Flags>
</Item>
<Item startIndex="1" endIndex="1">
<Size>78</Size>
<BooleanProperties>8</BooleanProperties>
<Flags>1</Flags>
</Item>
<Item startIndex="2" endIndex="2">
<Size>74</Size>
<BooleanProperties>8</BooleanProperties>
<Flags>1</Flags>
</Item>
<Item startIndex="3" endIndex="3">
<Size>109</Size>
<BooleanProperties>8</BooleanProperties>
<Flags>1</Flags>
</Item>
<Item startIndex="4" endIndex="4">
<Size>88</Size>
<BooleanProperties>8</BooleanProperties>
<Flags>1</Flags>
</Item>
<Item startIndex="5" endIndex="5">
<Size>73</Size>
<BooleanProperties>8</BooleanProperties>
<Flags>1</Flags>
</Item>
<Item startIndex="6" endIndex="6">
<Size>34</Size>
<BooleanProperties>8</BooleanProperties>
<Flags>1</Flags>
</Item>
<Item startIndex="7" endIndex="7">
<Size>25</Size>
<BooleanProperties>8</BooleanProperties>
<Flags>1</Flags>
</Item>
<Item startIndex="8" endIndex="8">
<Size>113</Size>
<BooleanProperties>8</BooleanProperties>
<Flags>1</Flags>
</Item>
</Items>
</Column>
<RowHeaderColumn class="FarPoint.Win.Spread.Model.DefaultSheetAxisModel" orientation="Horizontal" count="1" defaultSize="35">
<Items>
<Item index="-1">
<_startIndex>-1</_startIndex>
<Resizable>False</Resizable>
<Size>35</Size>
<_endIndex>-1</_endIndex>
</Item>
</Items>
</RowHeaderColumn>
<ColumnHeaderRow class="FarPoint.Win.Spread.Model.DefaultSheetAxisModel" orientation="Vertical" count="1">
<Items>
<Item index="-1">
<_startIndex>-1</_startIndex>
<Resizable>False</Resizable>
<_endIndex>-1</_endIndex>
</Item>
<Item index="0">
<_startIndex>-1</_startIndex>
<Size>28</Size>
<_endIndex>-1</_endIndex>
</Item>
</Items>
</ColumnHeaderRow>
<ColumnFooterRow class="FarPoint.Win.Spread.Model.DefaultSheetAxisModel" orientation="Vertical" count="1">
<Items>
<Item index="-1">
<_startIndex>-1</_startIndex>
<Resizable>False</Resizable>
<_endIndex>-1</_endIndex>
</Item>
</Items>
</ColumnFooterRow>
</AxisModels>
<StyleModels>
<RowHeader class="FarPoint.Win.Spread.Model.DefaultSheetStyleModel" Rows="0" Columns="1">
<AltRowCount>2</AltRowCount>
<DefaultStyle class="FarPoint.Win.Spread.StyleInfo" Parent="RowHeaderDefaultEnhanced" />
<ConditionalFormatCollections />
</RowHeader>
<ColumnHeader class="FarPoint.Win.Spread.Model.DefaultSheetStyleModel" Rows="1" Columns="9">
<AltRowCount>2</AltRowCount>
<DefaultStyle class="FarPoint.Win.Spread.StyleInfo" Parent="ColumnHeaderDefaultEnhanced" />
<ConditionalFormatCollections />
</ColumnHeader>
<ColumnFooter class="FarPoint.Win.Spread.Model.DefaultSheetStyleModel" Rows="1" Columns="9">
<AltRowCount>2</AltRowCount>
<DefaultStyle class="FarPoint.Win.Spread.StyleInfo" Parent="ColumnHeaderDefaultEnhanced" />
<ConditionalFormatCollections />
</ColumnFooter>
<DataArea class="qd" ignoreCreateWorksheet="True" Rows="0" Columns="9">
<AltRowCount>2</AltRowCount>
<DefaultStyle class="FarPoint.Win.Spread.StyleInfo" Parent="DataAreaDefault" />
<NamedStyles class="FarPoint.Win.Spread.NamedStyleCollection">
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="12">
<CellType class="FarPoint.Win.Spread.CellType.TextCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<CharacterCasing>Normal</CharacterCasing>
<MaxLength>255</MaxLength>
<Multiline>False</Multiline>
<ScrollBars>None</ScrollBars>
<CharacterSet>Ascii</CharacterSet>
<HotkeyPrefix>None</HotkeyPrefix>
</CellType>
</NamedStyle>
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="1">
<CellType class="FarPoint.Win.Spread.CellType.TextCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<CharacterCasing>Normal</CharacterCasing>
<MaxLength>255</MaxLength>
<Multiline>False</Multiline>
<ScrollBars>None</ScrollBars>
<CharacterSet>Ascii</CharacterSet>
<HotkeyPrefix>None</HotkeyPrefix>
</CellType>
</NamedStyle>
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="3">
<BackColor>#ffe0e0e0</BackColor>
<CellType class="FarPoint.Win.Spread.CellType.TextCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<CharacterCasing>Normal</CharacterCasing>
<MaxLength>255</MaxLength>
<Multiline>False</Multiline>
<ScrollBars>None</ScrollBars>
<CharacterSet>Ascii</CharacterSet>
<HotkeyPrefix>None</HotkeyPrefix>
</CellType>
</NamedStyle>
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="10">
<CellType class="FarPoint.Win.Spread.CellType.TextCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<CharacterCasing>Normal</CharacterCasing>
<MaxLength>255</MaxLength>
<Multiline>False</Multiline>
<ScrollBars>None</ScrollBars>
<CharacterSet>Ascii</CharacterSet>
<HotkeyPrefix>None</HotkeyPrefix>
</CellType>
</NamedStyle>
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="5">
<BackColor>#ffe0e0e0</BackColor>
<CellType class="FarPoint.Win.Spread.CellType.NumberCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<DecimalPlaces>0</DecimalPlaces>
<FixedPoint>True</FixedPoint>
<LeadingZero>Yes</LeadingZero>
<MaximumValue>2147483647</MaximumValue>
<MinimumValue>-2147483648</MinimumValue>
<NegativeFormat>UseRegional</NegativeFormat>
<NegativeRed>False</NegativeRed>
<ShowSeparator>False</ShowSeparator>
<SpinButton>False</SpinButton>
<SpinIntegerIncrement>1</SpinIntegerIncrement>
<SpinDecimalIncrement>0.1</SpinDecimalIncrement>
<FractionMode>False</FractionMode>
<FractionDenominatorPrecision>Auto</FractionDenominatorPrecision>
<FractionDenominatorDigits>3</FractionDenominatorDigits>
<FractionCustomFormat># ???/???</FractionCustomFormat>
<FractionConvertWholeNumbers>False</FractionConvertWholeNumbers>
<FractionRenderOnly>False</FractionRenderOnly>
<SpinWrap>False</SpinWrap>
</CellType>
</NamedStyle>
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="6">
<CellType class="FarPoint.Win.Spread.CellType.TextCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<CharacterCasing>Normal</CharacterCasing>
<MaxLength>255</MaxLength>
<Multiline>False</Multiline>
<ScrollBars>None</ScrollBars>
<CharacterSet>Ascii</CharacterSet>
<HotkeyPrefix>None</HotkeyPrefix>
</CellType>
</NamedStyle>
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="7">
<CellType class="FarPoint.Win.Spread.CellType.TextCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<CharacterCasing>Normal</CharacterCasing>
<MaxLength>255</MaxLength>
<Multiline>False</Multiline>
<ScrollBars>None</ScrollBars>
<CharacterSet>Ascii</CharacterSet>
<HotkeyPrefix>None</HotkeyPrefix>
</CellType>
</NamedStyle>
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="8">
<CellType class="FarPoint.Win.Spread.CellType.NumberCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<DecimalPlaces>-1</DecimalPlaces>
<FixedPoint>True</FixedPoint>
<LeadingZero>UseRegional</LeadingZero>
<MaximumValue>999999999999999</MaximumValue>
<MinimumValue>-999999999999999</MinimumValue>
<NegativeFormat>UseRegional</NegativeFormat>
<NegativeRed>False</NegativeRed>
<ShowSeparator>False</ShowSeparator>
<SpinButton>False</SpinButton>
<SpinIntegerIncrement>1</SpinIntegerIncrement>
<SpinDecimalIncrement>0.1</SpinDecimalIncrement>
<FractionMode>False</FractionMode>
<FractionDenominatorPrecision>Auto</FractionDenominatorPrecision>
<FractionDenominatorDigits>3</FractionDenominatorDigits>
<FractionCustomFormat># ???/???</FractionCustomFormat>
<FractionConvertWholeNumbers>False</FractionConvertWholeNumbers>
<FractionRenderOnly>False</FractionRenderOnly>
<SpinWrap>False</SpinWrap>
</CellType>
</NamedStyle>
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="9">
<CellType class="FarPoint.Win.Spread.CellType.TextCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<CharacterCasing>Normal</CharacterCasing>
<MaxLength>255</MaxLength>
<Multiline>False</Multiline>
<ScrollBars>None</ScrollBars>
<CharacterSet>Ascii</CharacterSet>
<HotkeyPrefix>None</HotkeyPrefix>
</CellType>
</NamedStyle>
</NamedStyles><ColumnStyles><ColumnStyle Index="0" Name="12" /><ColumnStyle Index="1" Name="1" /><ColumnStyle Index="2" Name="3" /><ColumnStyle Index="3" Name="10" /><ColumnStyle Index="4" Name="5" /><ColumnStyle Index="5" Name="6" /><ColumnStyle Index="6" Name="7" /><ColumnStyle Index="7" Name="8" /><ColumnStyle Index="8" Name="9" /></ColumnStyles><ConditionalFormatCollections /></DataArea>
<SheetCorner class="FarPoint.Win.Spread.Model.DefaultSheetStyleModel" Rows="1" Columns="1">
<AltRowCount>2</AltRowCount>
<DefaultStyle class="FarPoint.Win.Spread.StyleInfo" Parent="CornerDefaultEnhanced" />
<ConditionalFormatCollections />
</SheetCorner>
</StyleModels>
<SheetCornerStyle class="FarPoint.Win.Spread.NamedStyle" Parent="CornerDefaultEnhanced" />
<ColumnFooterSheetCornerStyle class="FarPoint.Win.Spread.NamedStyle" Parent="CornerFooterDefaultEnhanced" />
<Notes class="FarPoint.Win.Spread.DrawingSpace.SpreadNotesContainer">
<Top>0</Top>
<Left>0</Left>
<Height>800</Height>
<Width>904</Width>
<Name>spreadNotesContainer</Name>
<Text />
<ForeColor>ControlText</ForeColor>
<BackColor>Transparent</BackColor>
<AlignHorz>Center</AlignHorz>
<AlignVert>Center</AlignVert>
<AlphaBlendBackColor>255</AlphaBlendBackColor>
<Font />
<PictureTransparencyColor>Empty</PictureTransparencyColor>
<PictureTransparencyTolerance>0</PictureTransparencyTolerance>
<ShapeOutlineColor>Black</ShapeOutlineColor>
<ShapeOutlineThickness>1</ShapeOutlineThickness>
<ShapeOutlineStyle>Solid</ShapeOutlineStyle>
<RotationAngle>0</RotationAngle>
<PictureRotationAngle>0</PictureRotationAngle>
<TextRotationAngle>0</TextRotationAngle>
<Anchor>0</Anchor>
<Locked>False</Locked>
<CanRotate>True</CanRotate>
<CanPrint>True</CanPrint>
<SizeProportional>False</SizeProportional>
<Selectable>True</Selectable>
<FlipHorizontal>False</FlipHorizontal>
<FlipVertical>False</FlipVertical>
<TextOrientation>TextRotateCustom</TextOrientation>
<CanMove>None</CanMove>
<CanSize>None</CanSize>
<Gradient class="FarPoint.Win.Spread.DrawingSpace.PSGradient" assembly="FarPoint.Win.Spread, Version=11.40.20177.0, Culture=neutral, PublicKeyToken=327c3516b1b18457">
<GradientStyle>None</GradientStyle>
<GradientSections>
<GradientSection class="FarPoint.Win.Spread.DrawingSpace.GradientSection">
<Amount>0</Amount>
<Color>#ffffffff</Color>
</GradientSection>
<GradientSection class="FarPoint.Win.Spread.DrawingSpace.GradientSection">
<Amount>0</Amount>
<Color>#ffffffff</Color>
</GradientSection>
</GradientSections>
</Gradient>
<EndOfProps />
<AllowNoteEdit>True</AllowNoteEdit>
</Notes>
<FilterBarHeaderStyle class="FarPoint.Win.Spread.NamedStyle" Parent="RowHeaderDefaultEnhanced" />
<FilterBar class="FarPoint.Win.Spread.FilterBar">
<Height>22</Height>
<Style class="FarPoint.Win.Spread.Model.DefaultSheetStyleModel" Rows="1" Columns="9">
<AltRowCount>2</AltRowCount>
<DefaultStyle class="FarPoint.Win.Spread.StyleInfo" Parent="FilterBarDefaultEnhanced" />
<ConditionalFormatCollections />
</Style>
</FilterBar>
</Sheet>
</Sheets>
</Presentation>
<!--Drawing Section - This section contains the drawing objects and their properties.-->
<Drawing>
<Sheets>
<Sheet index="0">
<DrawingContainer class="FarPoint.Win.Spread.DrawingSpace.SpreadShapesContainer">
<Top>0</Top>
<Left>0</Left>
<Height>800</Height>
<Width>904</Width>
<Name>spreadShapesContainer</Name>
<Text />
<ForeColor>ControlText</ForeColor>
<BackColor>Transparent</BackColor>
<AlignHorz>Center</AlignHorz>
<AlignVert>Center</AlignVert>
<AlphaBlendBackColor>255</AlphaBlendBackColor>
<Font />
<PictureTransparencyColor>Empty</PictureTransparencyColor>
<PictureTransparencyTolerance>0</PictureTransparencyTolerance>
<ShapeOutlineColor>Black</ShapeOutlineColor>
<ShapeOutlineThickness>1</ShapeOutlineThickness>
<ShapeOutlineStyle>Solid</ShapeOutlineStyle>
<RotationAngle>0</RotationAngle>
<PictureRotationAngle>0</PictureRotationAngle>
<TextRotationAngle>0</TextRotationAngle>
<Anchor>0</Anchor>
<Locked>False</Locked>
<CanRotate>True</CanRotate>
<CanPrint>True</CanPrint>
<SizeProportional>False</SizeProportional>
<Selectable>True</Selectable>
<FlipHorizontal>False</FlipHorizontal>
<FlipVertical>False</FlipVertical>
<TextOrientation>TextRotateCustom</TextOrientation>
<CanMove>None</CanMove>
<CanSize>None</CanSize>
<EndOfProps />
</DrawingContainer>
<SparklineContainer class="FarPoint.Win.Spread.DefaultSparklineContainer" />
</Sheet>
</Sheets>
</Drawing>
<!--Data Section - This section contains the sheet data.-->
<Data>
<EnableCrossSheetReference>True</EnableCrossSheetReference>
<Sheets>
<Sheet index="0">
<DataArea class="rc" rows="0" columns="9">
<AutoCalculation>True</AutoCalculation>
<AutoGenerateColumns>False</AutoGenerateColumns>
<ReferenceStyle>A1</ReferenceStyle>
<Iteration>False</Iteration>
<MaximumIterations>1</MaximumIterations>
<MaximumChange>0.001</MaximumChange>
<UnBoundNewRowIndex>-1</UnBoundNewRowIndex>
<SheetName>Sheet1</SheetName>
<Columns>
<Column index="0">
<ColumnInfo>
<ColumnName>pdate</ColumnName>
</ColumnInfo>
</Column>
<Column index="1">
<ColumnInfo>
<ColumnName>group</ColumnName>
</ColumnInfo>
</Column>
<Column index="2">
<ColumnInfo>
<ColumnName>username</ColumnName>
</ColumnInfo>
</Column>
<Column index="3">
<ColumnInfo>
<ColumnName>project</ColumnName>
<DataType>mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:System.String</DataType>
</ColumnInfo>
</Column>
<Column index="4">
<ColumnInfo>
<ColumnName>projectidx</ColumnName>
<DataType>mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:System.Int32</DataType>
</ColumnInfo>
</Column>
<Column index="5">
<ColumnInfo>
<ColumnName>progress</ColumnName>
</ColumnInfo>
</Column>
<Column index="6">
<ColumnInfo>
<ColumnName>type</ColumnName>
</ColumnInfo>
</Column>
<Column index="7">
<ColumnInfo>
<ColumnName>hrs</ColumnName>
</ColumnInfo>
</Column>
<Column index="8">
<ColumnInfo>
<ColumnName>memo</ColumnName>
</ColumnInfo>
</Column>
</Columns>
<Cells />
<UnionedChangeCellRange>True</UnionedChangeCellRange>
</DataArea>
<RowHeader class="FarPoint.Win.Spread.Model.DefaultSheetDataModel" rows="0" columns="1">
<AutoCalculation>True</AutoCalculation>
<AutoGenerateColumns>True</AutoGenerateColumns>
<ReferenceStyle>A1</ReferenceStyle>
<Iteration>False</Iteration>
<MaximumIterations>1</MaximumIterations>
<MaximumChange>0.001</MaximumChange>
<UnBoundNewRowIndex>-1</UnBoundNewRowIndex>
<UnionedChangeCellRange>True</UnionedChangeCellRange>
</RowHeader>
<ColumnHeader class="FarPoint.Win.Spread.Model.DefaultSheetDataModel" rows="1" columns="9">
<AutoCalculation>True</AutoCalculation>
<AutoGenerateColumns>True</AutoGenerateColumns>
<ReferenceStyle>A1</ReferenceStyle>
<Iteration>False</Iteration>
<MaximumIterations>1</MaximumIterations>
<MaximumChange>0.001</MaximumChange>
<UnBoundNewRowIndex>-1</UnBoundNewRowIndex>
<Cells>
<Cell row="0" column="0">
<Data type="System.String">Date</Data>
</Cell>
<Cell row="0" column="1">
<Data type="System.String">Group</Data>
</Cell>
<Cell row="0" column="2">
<Data type="System.String">User</Data>
</Cell>
<Cell row="0" column="3">
<Data type="System.String">Project</Data>
</Cell>
<Cell row="0" column="4">
<Data type="System.String">*</Data>
</Cell>
<Cell row="0" column="5">
<Data type="System.String">%</Data>
</Cell>
<Cell row="0" column="6">
<Data type="System.String">Type</Data>
</Cell>
</Cells>
<UnionedChangeCellRange>True</UnionedChangeCellRange>
</ColumnHeader>
<ColumnFooter class="FarPoint.Win.Spread.Model.AggregationDataModel">
<ModelChangeEventSuspended>False</ModelChangeEventSuspended>
<Model class="rc" rows="1" columns="9">
<AutoCalculation>True</AutoCalculation>
<AutoGenerateColumns>True</AutoGenerateColumns>
<ReferenceStyle>A1</ReferenceStyle>
<Iteration>False</Iteration>
<MaximumIterations>1</MaximumIterations>
<MaximumChange>0.001</MaximumChange>
<UnBoundNewRowIndex>-1</UnBoundNewRowIndex>
<UnionedChangeCellRange>True</UnionedChangeCellRange>
</Model>
</ColumnFooter>
<RangeGroupModel class="r9">
<outlineOptions>SummaryBelow, SummaryRight</outlineOptions>
<ignoreCreateWorksheet>True</ignoreCreateWorksheet>
</RangeGroupModel>
<SheetCornerDataModel class="FarPoint.Win.Spread.Model.DefaultSheetDataModel" rows="1" columns="1">
<AutoCalculation>True</AutoCalculation>
<AutoGenerateColumns>True</AutoGenerateColumns>
<ReferenceStyle>A1</ReferenceStyle>
<Iteration>False</Iteration>
<MaximumIterations>1</MaximumIterations>
<MaximumChange>0.001</MaximumChange>
<UnBoundNewRowIndex>-1</UnBoundNewRowIndex>
<UnionedChangeCellRange>True</UnionedChangeCellRange>
</SheetCornerDataModel>
</Sheet>
</Sheets>
</Data>
</Spread>

File diff suppressed because it is too large Load Diff

View File

@@ -1,883 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Spread class="FarPoint.Win.Spread.FpSpread">
<!--Settings Section - This section contains the workbook properties, and the sheet objects, properties and selections.-->
<Settings>
<RootWorkbook>
<ActiveSheetIndex>0</ActiveSheetIndex>
<AllowDragDrop>False</AllowDragDrop>
<ShowCellErrors>False</ShowCellErrors>
<ShowRowErrors>False</ShowRowErrors>
<AllowDragFill>False</AllowDragFill>
<EnableDragFillMenu>True</EnableDragFillMenu>
<AllowCellOverflow>False</AllowCellOverflow>
<AllowColumnMove>False</AllowColumnMove>
<AllowColumnMoveMultiple>False</AllowColumnMoveMultiple>
<AllowEditOverflow>False</AllowEditOverflow>
<RangeDragFillMode>Copy</RangeDragFillMode>
<CustomFillSeriesList />
<DragFillDataOnly>True</DragFillDataOnly>
<CellSpanSelectionPolicy>Default</CellSpanSelectionPolicy>
<AllowEditorReservedLocations>True</AllowEditorReservedLocations>
<AllowUserFormulas>False</AllowUserFormulas>
<AllowRowMove>False</AllowRowMove>
<AllowRowMoveMultiple>False</AllowRowMoveMultiple>
<ShowDragBandOnMoving>True</ShowDragBandOnMoving>
<AllowSheetMove>False</AllowSheetMove>
<AllowUndo>True</AllowUndo>
<AllowUserZoom>True</AllowUserZoom>
<AutoClipboard>True</AutoClipboard>
<AutoAdvance>False</AutoAdvance>
<StatusBarVisible>False</StatusBarVisible>
<BackgroundImage type="Image"></BackgroundImage>
<BackgroundImageLayout>Tile</BackgroundImageLayout>
<BorderCollapse>Separate</BorderCollapse>
<RightToLeft>No</RightToLeft>
<TabStripInsertTab>True</TabStripInsertTab>
<UseOptimizedSelectionForTouch>True</UseOptimizedSelectionForTouch>
<TouchSelectionGripperThickness>0</TouchSelectionGripperThickness>
<TouchSelectionGripperLineColor>Empty</TouchSelectionGripperLineColor>
<TouchSelectionGripperBackColor>Empty</TouchSelectionGripperBackColor>
<TapToAddSelection>False</TapToAddSelection>
<ShowGrippersInEditingStatus>True</ShowGrippersInEditingStatus>
<AutoScrollWhenKeyboardShowing>True</AutoScrollWhenKeyboardShowing>
<ResizeZeroIndicator>Default</ResizeZeroIndicator>
<InputScope>Default</InputScope>
<PanningMode>Both</PanningMode>
<BoundaryFeedbackMode>Split</BoundaryFeedbackMode>
<AllowUserToTouchZoom>True</AllowUserToTouchZoom>
<TouchZoomSnapDistance>0.05</TouchZoomSnapDistance>
<TouchDropDownScale>1.5</TouchDropDownScale>
<HeaderIndicatorPositionAdjusting>0</HeaderIndicatorPositionAdjusting>
<PaintSelectionBorder>True</PaintSelectionBorder>
<PaintSelectionHeader>True</PaintSelectionHeader>
<PaintActiveCellInSelection>False</PaintActiveCellInSelection>
<VerticalScrollbarMode>Row</VerticalScrollbarMode>
<HorizontalScrollbarMode>Column</HorizontalScrollbarMode>
<ScrollTipPolicy>Off</ScrollTipPolicy>
<ScrollBarTrackPolicy>Off</ScrollBarTrackPolicy>
<ScrollBarShowMax>True</ScrollBarShowMax>
<ScrollBarMaxAlign>True</ScrollBarMaxAlign>
<BorderStyle>Fixed3D</BorderStyle>
<ButtonDrawMode>Always</ButtonDrawMode>
<CellNoteIndicatorVisible>True</CellNoteIndicatorVisible>
<ClipboardOptions>AllHeaders</ClipboardOptions>
<AutofitColumnOptions>ExcludeSpans</AutofitColumnOptions>
<AutofitRowOptions>ExcludeSpans</AutofitRowOptions>
<ClipboardPasteToFill>False</ClipboardPasteToFill>
<ColumnSplitBoxAlignment>Leading</ColumnSplitBoxAlignment>
<ImeMode>NoControl</ImeMode>
<AutoImeMode>True</AutoImeMode>
<ImeSentenceMode>NoControl</ImeSentenceMode>
<SpreadScaleMode>None</SpreadScaleMode>
<ColumnSplitBoxPolicy>Always</ColumnSplitBoxPolicy>
<EditModePermanent>False</EditModePermanent>
<EditModeReplace>False</EditModeReplace>
<HorizontalScrollBarHeight>-1</HorizontalScrollBarHeight>
<HorizontalScrollBarPolicy>Always</HorizontalScrollBarPolicy>
<HorizontalScrollBarSmallChange>1</HorizontalScrollBarSmallChange>
<AllowRowMoveDataAllowAddNew>False</AllowRowMoveDataAllowAddNew>
<LeftTab>0</LeftTab>
<MoveActiveOnFocus>True</MoveActiveOnFocus>
<RetainSelectionBlock>True</RetainSelectionBlock>
<RightToLeft>No</RightToLeft>
<RowSplitBoxAlignment>Leading</RowSplitBoxAlignment>
<RowSplitBoxPolicy>Always</RowSplitBoxPolicy>
<SelectionBlockOptions>Cells, Rows, Columns, Sheet</SelectionBlockOptions>
<SheetCount>1</SheetCount>
<TabStrip>
<BackColor>Control</BackColor>
<Editable>False</Editable>
<ButtonPolicy>Always</ButtonPolicy>
<ActiveSheetTab />
<DefaultSheetTab />
<Items>
<SheetTab />
</Items>
</TabStrip>
<TabStripPlacement>WithHorizontalScrollBar</TabStripPlacement>
<TabStripPolicy>AsNeeded</TabStripPolicy>
<TabStripRatio>0.5</TabStripRatio>
<TextTipAppearance class="FarPoint.Win.Spread.TipAppearance" assembly="FarPoint.Win.Spread">
<BackColor>Info</BackColor>
<ForeColor>InfoText</ForeColor>
<Font>
<Name>굴림</Name>
<Size>9</Size>
<Bold>False</Bold>
<CharSet>129</CharSet>
<Italic>False</Italic>
<Strikeout>False</Strikeout>
<Underline>False</Underline>
<Unit>Point</Unit>
<Vertical>False</Vertical>
</Font>
</TextTipAppearance>
<TextTipDelay>500</TextTipDelay>
<TextTipPolicy>Off</TextTipPolicy>
<VerticalScrollBarWidth>-1</VerticalScrollBarWidth>
<AllowCellContentFloat>False</AllowCellContentFloat>
<VerticalScrollBarPolicy>Always</VerticalScrollBarPolicy>
<VerticalScrollBarSmallChange>1</VerticalScrollBarSmallChange>
<VisualStyles>Auto</VisualStyles>
<FocusRenderer>
<IFocusRenderer class="FarPoint.Win.Spread.FlatFocusIndicatorRenderer" assembly="FarPoint.Win.Spread, Version=11.40.20177.0, Culture=neutral, PublicKeyToken=327c3516b1b18457">
<Thickness>3</Thickness>
<Color>-16777216</Color>
</IFocusRenderer>
</FocusRenderer>
<InterfaceRenderer>
<IInterfaceRenderer class="FarPoint.Win.Spread.EnhancedInterfaceRenderer" assembly="FarPoint.Win.Spread, Version=11.40.20177.0, Culture=neutral, PublicKeyToken=327c3516b1b18457">
<ScrollBoxStartColor>White</ScrollBoxStartColor>
<ScrollBoxEndColor>White</ScrollBoxEndColor>
<TabStripBackGroundStartColor>White</TabStripBackGroundStartColor>
<TabStripBackGroundEndColor>White</TabStripBackGroundEndColor>
<SheetTabUpperNormalStartColor>White</SheetTabUpperNormalStartColor>
<SheetTabUpperNormalEndColor>White</SheetTabUpperNormalEndColor>
<SheetTabLowerNormalStartColor>White</SheetTabLowerNormalStartColor>
<SheetTabLowerNormalEndColor>White</SheetTabLowerNormalEndColor>
<SheetTabUpperHoverStartColor>#ffbaeafd</SheetTabUpperHoverStartColor>
<SheetTabUpperHoverEndColor>#ffbaeafd</SheetTabUpperHoverEndColor>
<SheetTabLowerHoverStartColor>#ffbaeafd</SheetTabLowerHoverStartColor>
<SheetTabLowerHoverEndColor>#ffbaeafd</SheetTabLowerHoverEndColor>
<SheetTabBorderColor>#ffa6acb3</SheetTabBorderColor>
<ForeColor>Black</ForeColor>
<GrayAreaColor>White</GrayAreaColor>
<TabStripButtonUpperNormalStartColor>White</TabStripButtonUpperNormalStartColor>
<TabStripButtonUpperNormalEndColor>White</TabStripButtonUpperNormalEndColor>
<TabStripButtonLowerNormalStartColor>White</TabStripButtonLowerNormalStartColor>
<TabStripButtonLowerNormalEndColor>White</TabStripButtonLowerNormalEndColor>
<TabStripButtonUpperHoverStartColor>#ffbaeafd</TabStripButtonUpperHoverStartColor>
<TabStripButtonUpperHoverEndColor>#ffbaeafd</TabStripButtonUpperHoverEndColor>
<TabStripButtonLowerHoverStartColor>#ffbaeafd</TabStripButtonLowerHoverStartColor>
<TabStripButtonLowerHoverEndColor>#ffbaeafd</TabStripButtonLowerHoverEndColor>
<TabStripButtonUpperPressedStartColor>#ffbaeafd</TabStripButtonUpperPressedStartColor>
<TabStripButtonUpperPressedEndColor>#ffbaeafd</TabStripButtonUpperPressedEndColor>
<TabStripButtonLowerPressedStartColor>#ffbaeafd</TabStripButtonLowerPressedStartColor>
<TabStripButtonLowerPressedEndColor>#ffbaeafd</TabStripButtonLowerPressedEndColor>
<TabStripButtonBorderColor>#ffa6acb3</TabStripButtonBorderColor>
<SplitBoxBorderColor>#ffd5d5d5</SplitBoxBorderColor>
<SplitBoxBackgroundColor>#ffd5d5d5</SplitBoxBackgroundColor>
<SplitBarBackgroundColor>#ffdfe3f0</SplitBarBackgroundColor>
<SplitBarDarkColor>#ffdfe3f0</SplitBarDarkColor>
<SplitBarLightColor>#ffdfe3f0</SplitBarLightColor>
<ScrollBoxBackgroundColor>White</ScrollBoxBackgroundColor>
<TabStripBackgroundColor>White</TabStripBackgroundColor>
<SheetTabUpperNormalColor>White</SheetTabUpperNormalColor>
<SheetTabLowerNormalColor>White</SheetTabLowerNormalColor>
<SheetTabUpperActiveColor>#ffbaeafd</SheetTabUpperActiveColor>
<SheetTabLowerActiveColor>#ffbaeafd</SheetTabLowerActiveColor>
<TabStripButtonUpperNormalColor>White</TabStripButtonUpperNormalColor>
<TabStripButtonLowerNormalColor>White</TabStripButtonLowerNormalColor>
<TabStripButtonUpperActiveColor>#ffbaeafd</TabStripButtonUpperActiveColor>
<TabStripButtonLowerActiveColor>#ffbaeafd</TabStripButtonLowerActiveColor>
<TabStripButtonUpperPressedColor>#ffbaeafd</TabStripButtonUpperPressedColor>
<TabStripButtonLowerPressedColor>#ffbaeafd</TabStripButtonLowerPressedColor>
<RangeGroupBackColor>White</RangeGroupBackColor>
<RangeGroupButtonBackColor>Empty</RangeGroupButtonBackColor>
<RangeGroupLineColor>#ff666666</RangeGroupLineColor>
<RangeGroupButtonBorderColor>#ff666666</RangeGroupButtonBorderColor>
<ArrowColorEnabled>#ffa6acb3</ArrowColorEnabled>
<ArrowColorDisabled>#ffb2b2b2</ArrowColorDisabled>
<SheetTabShape>Trapezoid</SheetTabShape>
<ButtonStyle>Flat</ButtonStyle>
<FlatStyle>Flat</FlatStyle>
</IInterfaceRenderer>
</InterfaceRenderer>
<SelectionRenderer>
<ISelectionRenderer class="FarPoint.Win.Spread.FlatSelectionRenderer" assembly="FarPoint.Win.Spread, Version=11.40.20177.0, Culture=neutral, PublicKeyToken=327c3516b1b18457">
<ViewportColor>#64c1e0ff</ViewportColor>
<ColumnHeaderColor>#64baeafd</ColumnHeaderColor>
<ColumnFooterColor>#64baeafd</ColumnFooterColor>
<RowHeaderColor>#64baeafd</RowHeaderColor>
<FilterBarHeaderColor>#64baeafd</FilterBarHeaderColor>
<FilterBarColor>#64c1e0ff</FilterBarColor>
</ISelectionRenderer>
</SelectionRenderer>
<CellNoteIndicatorRenderer />
<SuspendAnimations>False</SuspendAnimations>
<HorizontalScrollBar class="FarPoint.Win.Spread.SpreadHScrollBar" assembly="FarPoint.Win.Spread">
<Buttons class="FarPoint.Win.Spread.FpScrollBarButtonCollection">
<Button class="FarPoint.Win.Spread.FpScrollBarButtonBackwardLine">
<ChangeType>SmallChange</ChangeType>
<ChangeValue>-1</ChangeValue>
</Button>
<Button class="FarPoint.Win.Spread.FpScrollBarComboThumb">
<TrackBackward class="FarPoint.Win.Spread.FpScrollBarTrackBackward">
<ChangeType>LargeChange</ChangeType>
<ChangeValue>-1</ChangeValue>
</TrackBackward>
<Thumb class="FarPoint.Win.Spread.FpScrollBarThumb">
<Gripper class="FarPoint.Win.Spread.FpScrollBarGripper" />
</Thumb>
<TrackForward class="FarPoint.Win.Spread.FpScrollBarTrackForward">
<ChangeType>LargeChange</ChangeType>
<ChangeValue>1</ChangeValue>
</TrackForward>
</Button>
<Button class="FarPoint.Win.Spread.FpScrollBarButtonForwardLine">
<ChangeType>SmallChange</ChangeType>
<ChangeValue>1</ChangeValue>
</Button>
</Buttons>
<VisualStyles>Auto</VisualStyles>
<Renderer />
</HorizontalScrollBar>
<VerticalScrollBar class="FarPoint.Win.Spread.SpreadVScrollBar" assembly="FarPoint.Win.Spread">
<Buttons class="FarPoint.Win.Spread.FpScrollBarButtonCollection">
<Button class="FarPoint.Win.Spread.FpScrollBarButtonBackwardLine">
<ChangeType>SmallChange</ChangeType>
<ChangeValue>-1</ChangeValue>
</Button>
<Button class="FarPoint.Win.Spread.FpScrollBarComboThumb">
<TrackBackward class="FarPoint.Win.Spread.FpScrollBarTrackBackward">
<ChangeType>LargeChange</ChangeType>
<ChangeValue>-1</ChangeValue>
</TrackBackward>
<Thumb class="FarPoint.Win.Spread.FpScrollBarThumb">
<Gripper class="FarPoint.Win.Spread.FpScrollBarGripper" />
</Thumb>
<TrackForward class="FarPoint.Win.Spread.FpScrollBarTrackForward">
<ChangeType>LargeChange</ChangeType>
<ChangeValue>1</ChangeValue>
</TrackForward>
</Button>
<Button class="FarPoint.Win.Spread.FpScrollBarButtonForwardLine">
<ChangeType>SmallChange</ChangeType>
<ChangeValue>1</ChangeValue>
</Button>
</Buttons>
<VisualStyles>Auto</VisualStyles>
<Renderer />
</VerticalScrollBar>
<StatusBar class="FarPoint.Win.Spread.FpStatusBar" assembly="FarPoint.Win.Spread">
<Element class="FarPoint.Win.Spread.FpStatusBarAverageElement">
<Visible>True</Visible>
<Text>평균</Text>
<MenuText>평균(&amp;A)</MenuText>
<Align>Right</Align>
</Element>
<Element class="FarPoint.Win.Spread.FpStatusBarCountElement">
<Visible>True</Visible>
<Text>개수</Text>
<MenuText>개수(&amp;C)</MenuText>
<Align>Right</Align>
</Element>
<Element class="FarPoint.Win.Spread.FpStatusBarNumericalCountElement">
<Visible>False</Visible>
<Text>숫자 세기</Text>
<MenuText>숫자세기(&amp;T)</MenuText>
<Align>Right</Align>
</Element>
<Element class="FarPoint.Win.Spread.FpStatusBarMinElement">
<Visible>False</Visible>
<Text>최소값</Text>
<MenuText>최소값(&amp;I)</MenuText>
<Align>Right</Align>
</Element>
<Element class="FarPoint.Win.Spread.FpStatusBarMaxElement">
<Visible>False</Visible>
<Text>최대값</Text>
<MenuText>최대값(&amp;X)</MenuText>
<Align>Right</Align>
</Element>
<Element class="FarPoint.Win.Spread.FpStatusBarSumElement">
<Visible>True</Visible>
<Text>합계</Text>
<MenuText>합계</MenuText>
<Align>Right</Align>
</Element>
<Element class="FarPoint.Win.Spread.ZoomSliderStatusBarElement">
<Visible>True</Visible>
<Text />
<MenuText>확대/축소 슬라이더(&amp;Z)</MenuText>
<Align>Right</Align>
</Element>
<Element class="FarPoint.Win.Spread.ZoomStatusBarElement">
<Visible>True</Visible>
<Text />
<MenuText>확대/축소(&amp;Z)</MenuText>
<Align>Right</Align>
</Element>
<Skin class="FarPoint.Win.Spread.StatusBarSkin">
<name>Default</name>
<backcolor>White</backcolor>
<forecolor>Black</forecolor>
<zoomButtonHoverColor>#ffcdcdcd</zoomButtonHoverColor>
<zoomslidercolor>#ffa6a6a6</zoomslidercolor>
<zoomsliderhovercolor>#ffcdcdcd</zoomsliderhovercolor>
<zoomslidertrackcolor>#ffa6a6a6</zoomslidertrackcolor>
<font>
<Name>Microsoft Sans Serif</Name>
<Size>8.25</Size>
<Bold>False</Bold>
<CharSet>1</CharSet>
<Italic>False</Italic>
<Strikeout>False</Strikeout>
<Underline>False</Underline>
<Unit>Point</Unit>
<Vertical>False</Vertical>
</font>
</Skin>
<EnableContextMenu>True</EnableContextMenu>
</StatusBar>
<TitleInfo class="FarPoint.Win.Spread.TitleInfo" assembly="FarPoint.Win.Spread">
<BackColor>#ffe7eff7</BackColor>
</TitleInfo>
<TabStripInsertTabImage type="Image"></TabStripInsertTabImage>
<DocumentProperties>
<Created>0001-01-01T00:00:00.000</Created>
<LastModified>0001-01-01T00:00:00.000</LastModified>
<Revision>0</Revision>
</DocumentProperties>
</RootWorkbook>
<Sheets>
<Sheet index="0" class="FarPoint.Win.Spread.SheetView">
<SheetName>Sheet1</SheetName>
<TitleInfo class="FarPoint.Win.Spread.TitleInfo">
<BackColor>#ffe7eff7</BackColor>
</TitleInfo>
<Categories>
<Appearance>
<GroupBarInfo class="FarPoint.Win.Spread.GroupBarInfo" />
</Appearance>
<Behavior>
<DataAutoSizeColumns>False</DataAutoSizeColumns>
</Behavior>
<Appearance />
<Behavior />
<Layout>
<ColumnCount>10</ColumnCount>
<RowCount>0</RowCount>
<ActiveColumnIndex>-1</ActiveColumnIndex>
<ActiveRowIndex>-1</ActiveRowIndex>
</Layout>
<Appearance>
<ScrollingContentInfo class="FarPoint.Win.Spread.ScrollingContentInfo" />
<PreviewRowInfo class="FarPoint.Win.Spread.PreviewRowInfo" />
</Appearance>
</Categories>
<SelectionModel class="FarPoint.Win.Spread.Model.DefaultSheetSelectionModel">
<CellRange Row="-1" Column="3" RowCount="-1" ColumnCount="1" />
<AnchorColumn>3</AnchorColumn>
</SelectionModel>
</Sheet>
</Sheets>
</Settings>
<!--Styles Section - This section contains the workbook and sheet named style collections.-->
<Styles>
<NamedStyles class="FarPoint.Win.Spread.NamedStyleCollection" />
</Styles>
<!--Presentation Section - This section contains the column and row properties, cell spans, and the sheet, column, row, and cell styles.-->
<Presentation>
<Font>
<Name>맑은 고딕</Name>
<Size>9</Size>
<Bold>False</Bold>
<CharSet>1</CharSet>
<Italic>False</Italic>
<Strikeout>False</Strikeout>
<Underline>False</Underline>
<Unit>Point</Unit>
<Vertical>False</Vertical>
</Font>
<Sheets>
<Sheet index="0">
<ViewportInfo>
<RowPaneCount>1</RowPaneCount>
<ColumnPaneCount>1</ColumnPaneCount>
<ActiveRowPane>0</ActiveRowPane>
<ActiveColumnPane>0</ActiveColumnPane>
<RowPanes>
<RowPane row="0">
<TopRow>0</TopRow>
<PreferredHeight>-1</PreferredHeight>
<TopOffset>0</TopOffset>
</RowPane>
</RowPanes>
<ColumnPanes>
<ColumnPane column="0">
<LeftColumn>0</LeftColumn>
<PreferredWidth>-1</PreferredWidth>
<LeftOffset>0</LeftOffset>
</ColumnPane>
</ColumnPanes>
</ViewportInfo>
<AxisModels>
<Row class="q1" ignoreCreateWorksheet="True" orientation="Vertical" count="0">
<Items />
</Row>
<Column class="q1" ignoreCreateWorksheet="True" orientation="Horizontal" count="10">
<Items>
<Item startIndex="0" endIndex="2">
<Size>113</Size>
<BooleanProperties>8</BooleanProperties>
<Flags>1</Flags>
</Item>
<Item startIndex="3" endIndex="3">
<Size>70</Size>
<BooleanProperties>8</BooleanProperties>
<Flags>1</Flags>
</Item>
<Item startIndex="4" endIndex="9">
<Size>113</Size>
<BooleanProperties>8</BooleanProperties>
<Flags>1</Flags>
</Item>
</Items>
</Column>
<RowHeaderColumn class="FarPoint.Win.Spread.Model.DefaultSheetAxisModel" orientation="Horizontal" count="1" defaultSize="35">
<Items>
<Item index="-1">
<_startIndex>-1</_startIndex>
<Resizable>False</Resizable>
<Size>35</Size>
<_endIndex>-1</_endIndex>
</Item>
</Items>
</RowHeaderColumn>
<ColumnHeaderRow class="FarPoint.Win.Spread.Model.DefaultSheetAxisModel" orientation="Vertical" count="1">
<Items>
<Item index="-1">
<_startIndex>-1</_startIndex>
<Resizable>False</Resizable>
<_endIndex>-1</_endIndex>
</Item>
<Item index="0">
<_startIndex>-1</_startIndex>
<Size>28</Size>
<_endIndex>-1</_endIndex>
</Item>
</Items>
</ColumnHeaderRow>
<ColumnFooterRow class="FarPoint.Win.Spread.Model.DefaultSheetAxisModel" orientation="Vertical" count="1">
<Items>
<Item index="-1">
<_startIndex>-1</_startIndex>
<Resizable>False</Resizable>
<_endIndex>-1</_endIndex>
</Item>
</Items>
</ColumnFooterRow>
</AxisModels>
<StyleModels>
<RowHeader class="FarPoint.Win.Spread.Model.DefaultSheetStyleModel" Rows="0" Columns="1">
<AltRowCount>2</AltRowCount>
<DefaultStyle class="FarPoint.Win.Spread.StyleInfo" Parent="RowHeaderDefaultEnhanced" />
<ConditionalFormatCollections />
</RowHeader>
<ColumnHeader class="FarPoint.Win.Spread.Model.DefaultSheetStyleModel" Rows="1" Columns="10">
<AltRowCount>2</AltRowCount>
<DefaultStyle class="FarPoint.Win.Spread.StyleInfo" Parent="ColumnHeaderDefaultEnhanced" />
<ConditionalFormatCollections />
</ColumnHeader>
<ColumnFooter class="FarPoint.Win.Spread.Model.DefaultSheetStyleModel" Rows="1" Columns="10">
<AltRowCount>2</AltRowCount>
<DefaultStyle class="FarPoint.Win.Spread.StyleInfo" Parent="ColumnHeaderDefaultEnhanced" />
<ConditionalFormatCollections />
</ColumnFooter>
<DataArea class="qd" ignoreCreateWorksheet="True" Rows="0" Columns="10">
<AltRowCount>2</AltRowCount>
<DefaultStyle class="FarPoint.Win.Spread.StyleInfo" Parent="DataAreaDefault" />
<NamedStyles class="FarPoint.Win.Spread.NamedStyleCollection">
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="12">
<CellType class="FarPoint.Win.Spread.CellType.TextCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<CharacterCasing>Normal</CharacterCasing>
<MaxLength>255</MaxLength>
<Multiline>False</Multiline>
<ScrollBars>None</ScrollBars>
<CharacterSet>Ascii</CharacterSet>
<HotkeyPrefix>None</HotkeyPrefix>
</CellType>
<HorizontalAlignment>Center</HorizontalAlignment>
<VerticalAlignment>Center</VerticalAlignment>
</NamedStyle>
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="1">
<CellType class="FarPoint.Win.Spread.CellType.TextCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<CharacterCasing>Normal</CharacterCasing>
<MaxLength>255</MaxLength>
<Multiline>False</Multiline>
<ScrollBars>None</ScrollBars>
<CharacterSet>Ascii</CharacterSet>
<HotkeyPrefix>None</HotkeyPrefix>
</CellType>
<HorizontalAlignment>Center</HorizontalAlignment>
<VerticalAlignment>Center</VerticalAlignment>
</NamedStyle>
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="3">
<CellType class="FarPoint.Win.Spread.CellType.TextCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<CharacterCasing>Normal</CharacterCasing>
<MaxLength>255</MaxLength>
<Multiline>False</Multiline>
<ScrollBars>None</ScrollBars>
<CharacterSet>Ascii</CharacterSet>
<HotkeyPrefix>None</HotkeyPrefix>
</CellType>
<HorizontalAlignment>Left</HorizontalAlignment>
<VerticalAlignment>Center</VerticalAlignment>
</NamedStyle>
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="10">
<CellType class="FarPoint.Win.Spread.CellType.TextCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<CharacterCasing>Normal</CharacterCasing>
<MaxLength>255</MaxLength>
<Multiline>False</Multiline>
<ScrollBars>None</ScrollBars>
<CharacterSet>Ascii</CharacterSet>
<HotkeyPrefix>None</HotkeyPrefix>
</CellType>
</NamedStyle>
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="4">
<CellType class="FarPoint.Win.Spread.CellType.TextCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<CharacterCasing>Normal</CharacterCasing>
<MaxLength>255</MaxLength>
<Multiline>False</Multiline>
<ScrollBars>None</ScrollBars>
<CharacterSet>Ascii</CharacterSet>
<HotkeyPrefix>None</HotkeyPrefix>
</CellType>
<HorizontalAlignment>Center</HorizontalAlignment>
<VerticalAlignment>Center</VerticalAlignment>
</NamedStyle>
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="5">
<CellType class="FarPoint.Win.Spread.CellType.TextCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<CharacterCasing>Normal</CharacterCasing>
<MaxLength>255</MaxLength>
<Multiline>False</Multiline>
<ScrollBars>None</ScrollBars>
<CharacterSet>Ascii</CharacterSet>
<HotkeyPrefix>None</HotkeyPrefix>
</CellType>
<HorizontalAlignment>Center</HorizontalAlignment>
<VerticalAlignment>Center</VerticalAlignment>
</NamedStyle>
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="6">
<BackColor>#ffe0e0e0</BackColor>
<CellType class="FarPoint.Win.Spread.CellType.TextCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<CharacterCasing>Normal</CharacterCasing>
<MaxLength>255</MaxLength>
<Multiline>False</Multiline>
<ScrollBars>None</ScrollBars>
<CharacterSet>Ascii</CharacterSet>
<HotkeyPrefix>None</HotkeyPrefix>
</CellType>
<HorizontalAlignment>Center</HorizontalAlignment>
<VerticalAlignment>Center</VerticalAlignment>
</NamedStyle>
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="7">
<BackColor>#ffe0e0e0</BackColor>
<CellType class="FarPoint.Win.Spread.CellType.TextCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<CharacterCasing>Normal</CharacterCasing>
<MaxLength>255</MaxLength>
<Multiline>False</Multiline>
<ScrollBars>None</ScrollBars>
<CharacterSet>Ascii</CharacterSet>
<HotkeyPrefix>None</HotkeyPrefix>
</CellType>
<HorizontalAlignment>Center</HorizontalAlignment>
<VerticalAlignment>Center</VerticalAlignment>
</NamedStyle>
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="8">
<BackColor>#ffe0e0e0</BackColor>
<CellType class="FarPoint.Win.Spread.CellType.TextCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<CharacterCasing>Normal</CharacterCasing>
<MaxLength>255</MaxLength>
<Multiline>False</Multiline>
<ScrollBars>None</ScrollBars>
<CharacterSet>Ascii</CharacterSet>
<HotkeyPrefix>None</HotkeyPrefix>
</CellType>
<HorizontalAlignment>Center</HorizontalAlignment>
<VerticalAlignment>Center</VerticalAlignment>
</NamedStyle>
<NamedStyle class="FarPoint.Win.Spread.NamedStyle" Name="9">
<CellType class="FarPoint.Win.Spread.CellType.TextCellType">
<TextAdjustmentSpacing>-1</TextAdjustmentSpacing>
<StringTrim>None</StringTrim>
<CharacterCasing>Normal</CharacterCasing>
<MaxLength>255</MaxLength>
<Multiline>False</Multiline>
<ScrollBars>None</ScrollBars>
<CharacterSet>Ascii</CharacterSet>
<HotkeyPrefix>None</HotkeyPrefix>
</CellType>
<HorizontalAlignment>Left</HorizontalAlignment>
<VerticalAlignment>Center</VerticalAlignment>
</NamedStyle>
</NamedStyles><ColumnStyles><ColumnStyle Index="0" Name="12" /><ColumnStyle Index="1" Name="1" /><ColumnStyle Index="2" Name="3" /><ColumnStyle Index="3" Name="10" /><ColumnStyle Index="4" Name="4" /><ColumnStyle Index="5" Name="5" /><ColumnStyle Index="6" Name="6" /><ColumnStyle Index="7" Name="7" /><ColumnStyle Index="8" Name="8" /><ColumnStyle Index="9" Name="9" /></ColumnStyles><ConditionalFormatCollections /></DataArea>
<SheetCorner class="FarPoint.Win.Spread.Model.DefaultSheetStyleModel" Rows="1" Columns="1">
<AltRowCount>2</AltRowCount>
<DefaultStyle class="FarPoint.Win.Spread.StyleInfo" Parent="CornerDefaultEnhanced" />
<ConditionalFormatCollections />
</SheetCorner>
</StyleModels>
<SheetCornerStyle class="FarPoint.Win.Spread.NamedStyle" Parent="CornerDefaultEnhanced" />
<ColumnFooterSheetCornerStyle class="FarPoint.Win.Spread.NamedStyle" Parent="CornerFooterDefaultEnhanced" />
<Notes class="FarPoint.Win.Spread.DrawingSpace.SpreadNotesContainer">
<Top>0</Top>
<Left>0</Left>
<Height>800</Height>
<Width>904</Width>
<Name>spreadNotesContainer</Name>
<Text />
<ForeColor>ControlText</ForeColor>
<BackColor>Transparent</BackColor>
<AlignHorz>Center</AlignHorz>
<AlignVert>Center</AlignVert>
<AlphaBlendBackColor>255</AlphaBlendBackColor>
<Font />
<PictureTransparencyColor>Empty</PictureTransparencyColor>
<PictureTransparencyTolerance>0</PictureTransparencyTolerance>
<ShapeOutlineColor>Black</ShapeOutlineColor>
<ShapeOutlineThickness>1</ShapeOutlineThickness>
<ShapeOutlineStyle>Solid</ShapeOutlineStyle>
<RotationAngle>0</RotationAngle>
<PictureRotationAngle>0</PictureRotationAngle>
<TextRotationAngle>0</TextRotationAngle>
<Anchor>0</Anchor>
<Locked>False</Locked>
<CanRotate>True</CanRotate>
<CanPrint>True</CanPrint>
<SizeProportional>False</SizeProportional>
<Selectable>True</Selectable>
<FlipHorizontal>False</FlipHorizontal>
<FlipVertical>False</FlipVertical>
<TextOrientation>TextRotateCustom</TextOrientation>
<CanMove>None</CanMove>
<CanSize>None</CanSize>
<Gradient class="FarPoint.Win.Spread.DrawingSpace.PSGradient" assembly="FarPoint.Win.Spread, Version=11.40.20177.0, Culture=neutral, PublicKeyToken=327c3516b1b18457">
<GradientStyle>None</GradientStyle>
<GradientSections>
<GradientSection class="FarPoint.Win.Spread.DrawingSpace.GradientSection">
<Amount>0</Amount>
<Color>#ffffffff</Color>
</GradientSection>
<GradientSection class="FarPoint.Win.Spread.DrawingSpace.GradientSection">
<Amount>0</Amount>
<Color>#ffffffff</Color>
</GradientSection>
</GradientSections>
</Gradient>
<EndOfProps />
<AllowNoteEdit>True</AllowNoteEdit>
</Notes>
<FilterBarHeaderStyle class="FarPoint.Win.Spread.NamedStyle" Parent="RowHeaderDefaultEnhanced" />
<FilterBar class="FarPoint.Win.Spread.FilterBar">
<Height>22</Height>
<Style class="FarPoint.Win.Spread.Model.DefaultSheetStyleModel" Rows="1" Columns="10">
<AltRowCount>2</AltRowCount>
<DefaultStyle class="FarPoint.Win.Spread.StyleInfo" Parent="FilterBarDefaultEnhanced" />
<ConditionalFormatCollections />
</Style>
</FilterBar>
</Sheet>
</Sheets>
</Presentation>
<!--Drawing Section - This section contains the drawing objects and their properties.-->
<Drawing>
<Sheets>
<Sheet index="0">
<DrawingContainer class="FarPoint.Win.Spread.DrawingSpace.SpreadShapesContainer">
<Top>0</Top>
<Left>0</Left>
<Height>800</Height>
<Width>904</Width>
<Name>spreadShapesContainer</Name>
<Text />
<ForeColor>ControlText</ForeColor>
<BackColor>Transparent</BackColor>
<AlignHorz>Center</AlignHorz>
<AlignVert>Center</AlignVert>
<AlphaBlendBackColor>255</AlphaBlendBackColor>
<Font />
<PictureTransparencyColor>Empty</PictureTransparencyColor>
<PictureTransparencyTolerance>0</PictureTransparencyTolerance>
<ShapeOutlineColor>Black</ShapeOutlineColor>
<ShapeOutlineThickness>1</ShapeOutlineThickness>
<ShapeOutlineStyle>Solid</ShapeOutlineStyle>
<RotationAngle>0</RotationAngle>
<PictureRotationAngle>0</PictureRotationAngle>
<TextRotationAngle>0</TextRotationAngle>
<Anchor>0</Anchor>
<Locked>False</Locked>
<CanRotate>True</CanRotate>
<CanPrint>True</CanPrint>
<SizeProportional>False</SizeProportional>
<Selectable>True</Selectable>
<FlipHorizontal>False</FlipHorizontal>
<FlipVertical>False</FlipVertical>
<TextOrientation>TextRotateCustom</TextOrientation>
<CanMove>None</CanMove>
<CanSize>None</CanSize>
<EndOfProps />
</DrawingContainer>
<SparklineContainer class="FarPoint.Win.Spread.DefaultSparklineContainer" />
</Sheet>
</Sheets>
</Drawing>
<!--Data Section - This section contains the sheet data.-->
<Data>
<EnableCrossSheetReference>True</EnableCrossSheetReference>
<Sheets>
<Sheet index="0">
<DataArea class="rc" rows="0" columns="10">
<AutoCalculation>True</AutoCalculation>
<AutoGenerateColumns>False</AutoGenerateColumns>
<ReferenceStyle>A1</ReferenceStyle>
<Iteration>False</Iteration>
<MaximumIterations>1</MaximumIterations>
<MaximumChange>0.001</MaximumChange>
<UnBoundNewRowIndex>-1</UnBoundNewRowIndex>
<SheetName>Sheet1</SheetName>
<Columns>
<Column index="0">
<ColumnInfo>
<ColumnName>pdate</ColumnName>
</ColumnInfo>
</Column>
<Column index="1">
<ColumnInfo>
<ColumnName>statusName</ColumnName>
</ColumnInfo>
</Column>
<Column index="2">
<ColumnInfo>
<ColumnName>name</ColumnName>
</ColumnInfo>
</Column>
<Column index="3">
<ColumnInfo>
<ColumnName>usermain</ColumnName>
<DataType>mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:System.String</DataType>
</ColumnInfo>
</Column>
<Column index="4">
<ColumnInfo>
<ColumnName>request</ColumnName>
</ColumnInfo>
</Column>
<Column index="5">
<ColumnInfo>
<ColumnName>reqstaff</ColumnName>
</ColumnInfo>
</Column>
<Column index="6">
<ColumnInfo>
<ColumnName>sdate</ColumnName>
</ColumnInfo>
</Column>
<Column index="7">
<ColumnInfo>
<ColumnName>edate</ColumnName>
</ColumnInfo>
</Column>
<Column index="8">
<ColumnInfo>
<ColumnName>odate</ColumnName>
</ColumnInfo>
</Column>
<Column index="9">
<ColumnInfo>
<ColumnName>memo</ColumnName>
</ColumnInfo>
</Column>
</Columns>
<Cells />
<UnionedChangeCellRange>True</UnionedChangeCellRange>
</DataArea>
<RowHeader class="FarPoint.Win.Spread.Model.DefaultSheetDataModel" rows="0" columns="1">
<AutoCalculation>True</AutoCalculation>
<AutoGenerateColumns>True</AutoGenerateColumns>
<ReferenceStyle>A1</ReferenceStyle>
<Iteration>False</Iteration>
<MaximumIterations>1</MaximumIterations>
<MaximumChange>0.001</MaximumChange>
<UnBoundNewRowIndex>-1</UnBoundNewRowIndex>
<UnionedChangeCellRange>True</UnionedChangeCellRange>
</RowHeader>
<ColumnHeader class="FarPoint.Win.Spread.Model.DefaultSheetDataModel" rows="1" columns="10">
<AutoCalculation>True</AutoCalculation>
<AutoGenerateColumns>True</AutoGenerateColumns>
<ReferenceStyle>A1</ReferenceStyle>
<Iteration>False</Iteration>
<MaximumIterations>1</MaximumIterations>
<MaximumChange>0.001</MaximumChange>
<UnBoundNewRowIndex>-1</UnBoundNewRowIndex>
<Cells>
<Cell row="0" column="0">
<Data type="System.String">Date</Data>
</Cell>
<Cell row="0" column="1">
<Data type="System.String">Stat</Data>
</Cell>
<Cell row="0" column="2">
<Data type="System.String">Title</Data>
</Cell>
<Cell row="0" column="3">
<Data type="System.String">User</Data>
</Cell>
<Cell row="0" column="4">
<Data type="System.String">Req.Dept</Data>
</Cell>
<Cell row="0" column="5">
<Data type="System.String">Req.Staff</Data>
</Cell>
<Cell row="0" column="6">
<Data type="System.String">Start</Data>
</Cell>
<Cell row="0" column="7">
<Data type="System.String">End</Data>
</Cell>
<Cell row="0" column="8">
<Data type="System.String">Release</Data>
</Cell>
</Cells>
<UnionedChangeCellRange>True</UnionedChangeCellRange>
</ColumnHeader>
<ColumnFooter class="FarPoint.Win.Spread.Model.AggregationDataModel">
<ModelChangeEventSuspended>False</ModelChangeEventSuspended>
<Model class="rc" rows="1" columns="10">
<AutoCalculation>True</AutoCalculation>
<AutoGenerateColumns>True</AutoGenerateColumns>
<ReferenceStyle>A1</ReferenceStyle>
<Iteration>False</Iteration>
<MaximumIterations>1</MaximumIterations>
<MaximumChange>0.001</MaximumChange>
<UnBoundNewRowIndex>-1</UnBoundNewRowIndex>
<UnionedChangeCellRange>True</UnionedChangeCellRange>
</Model>
</ColumnFooter>
<RangeGroupModel class="r9">
<outlineOptions>SummaryBelow, SummaryRight</outlineOptions>
<ignoreCreateWorksheet>True</ignoreCreateWorksheet>
</RangeGroupModel>
<SheetCornerDataModel class="FarPoint.Win.Spread.Model.DefaultSheetDataModel" rows="1" columns="1">
<AutoCalculation>True</AutoCalculation>
<AutoGenerateColumns>True</AutoGenerateColumns>
<ReferenceStyle>A1</ReferenceStyle>
<Iteration>False</Iteration>
<MaximumIterations>1</MaximumIterations>
<MaximumChange>0.001</MaximumChange>
<UnBoundNewRowIndex>-1</UnBoundNewRowIndex>
<UnionedChangeCellRange>True</UnionedChangeCellRange>
</SheetCornerDataModel>
</Sheet>
</Sheets>
</Data>
</Spread>

File diff suppressed because it is too large Load Diff

View File

@@ -1,24 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<connectionStrings>
<add name="JobReportMailService.Properties.Settings.CS" connectionString="Data Source=10.131.15.18;Initial Catalog=EE;Persist Security Info=True;User ID=eeuser;Password=Amkor123!" providerName="System.Data.SqlClient" />
<add name="EEEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=10.131.15.18;initial catalog=EE;persist security info=True;user id=eeuser;password=Amkor123!;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>

View File

@@ -1,24 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace JobReportMailService
{
public class CSetting : arUtil.Setting
{
// public string connstr { get; set; }
public Boolean autoRun { get; set; }
public Boolean autoRunData { get; set; }
public override void AfterLoad()
{
//throw new NotImplementedException();
//if (connstr == "")
// connstr = "Data Source=10.131.15.18;Initial Catalog=EE;Persist Security Info=True;User ID=eeuser;Password=Amkor123!";
}
public override void AfterSave()
{
//throw new NotImplementedException();
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,37 +0,0 @@
namespace JobReportMailService
{
}
namespace JobReportMailService
{
}
namespace JobReportMailService
{
}
namespace JobReportMailService
{
}
namespace JobReportMailService
{
}
namespace JobReportMailService
{
}
namespace JobReportMailService
{
public partial class DataSet1
{
}
}
namespace JobReportMailService {
public partial class DataSet1 {
}
}

View File

@@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--<autogenerated>
This code was generated by a tool.
Changes to this file may cause incorrect behavior and will be lost if
the code is regenerated.
</autogenerated>-->
<DataSetUISetting Version="1.00" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
<TableUISettings />
</DataSetUISetting>

File diff suppressed because it is too large Load Diff

View File

@@ -1,21 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--<autogenerated>
This code was generated by a tool to store the dataset designer's layout information.
Changes to this file may cause incorrect behavior and will be lost if
the code is regenerated.
</autogenerated>-->
<DiagramLayout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ex:showrelationlabel="False" ViewPortX="-13" ViewPortY="-26" xmlns:ex="urn:schemas-microsoft-com:xml-msdatasource-layout-extended" xmlns="urn:schemas-microsoft-com:xml-msdatasource-layout">
<Shapes>
<Shape ID="DesignTable:MailAuto" ZOrder="9" X="308" Y="320" Height="324" Width="252" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="254" />
<Shape ID="DesignTable:MailData" ZOrder="8" X="-3" Y="357" Height="381" Width="300" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="254" />
<Shape ID="DesignTable:MailForm" ZOrder="10" X="311" Y="655" Height="305" Width="253" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="254" />
<Shape ID="DesignTable:vMailingProjectSchedule" ZOrder="4" X="312" Y="0" Height="305" Width="289" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="254" />
<Shape ID="DesignTable:vJobReportForUser" ZOrder="7" X="3" Y="747" Height="153" Width="290" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="102" />
<Shape ID="DesignTable:vJobReportUserList" ZOrder="1" X="635" Y="31" Height="207" Width="158" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="137" />
<Shape ID="DesignTable:JobReport" ZOrder="6" X="0" Y="0" Height="324" Width="300" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="254" />
<Shape ID="DesignTable:HolidayLIst" ZOrder="5" X="1" Y="909" Height="191" Width="295" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="140" />
<Shape ID="DesignTable:vGroupUser" ZOrder="3" X="313" Y="969" Height="172" Width="269" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="121" />
<Shape ID="DesignTable:JobReportDateList" ZOrder="2" X="575" Y="346" Height="115" Width="212" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="64" />
</Shapes>
<Connectors />
</DiagramLayout>

View File

@@ -1,35 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 이 코드는 템플릿에서 생성되었습니다.
//
// 이 파일을 수동으로 변경하면 응용 프로그램에서 예기치 않은 동작이 발생할 수 있습니다.
// 이 파일을 수동으로 변경하면 코드가 다시 생성될 때 변경 내용을 덮어씁니다.
// </auto-generated>
//------------------------------------------------------------------------------
namespace JobReportMailService
{
using System;
using System.Collections.Generic;
public partial class EETGW_ProjectToDo
{
public int idx { get; set; }
public int pidx { get; set; }
public Nullable<int> pseq { get; set; }
public Nullable<int> sw { get; set; }
public Nullable<int> ww { get; set; }
public string sort { get; set; }
public string cate { get; set; }
public string title { get; set; }
public string pdate { get; set; }
public string edate { get; set; }
public Nullable<int> process { get; set; }
public string remark { get; set; }
public string remark2 { get; set; }
public string wuid { get; set; }
public System.DateTime wdate { get; set; }
public string gcode { get; set; }
public Nullable<int> no { get; set; }
}
}

View File

@@ -1,35 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 이 코드는 템플릿에서 생성되었습니다.
//
// 이 파일을 수동으로 변경하면 응용 프로그램에서 예기치 않은 동작이 발생할 수 있습니다.
// 이 파일을 수동으로 변경하면 코드가 다시 생성될 때 변경 내용을 덮어씁니다.
// </auto-generated>
//------------------------------------------------------------------------------
namespace JobReportMailService
{
using System;
using System.Collections.Generic;
public partial class EETGW_ProjectsSchedule
{
public int idx { get; set; }
public string gcode { get; set; }
public Nullable<int> project { get; set; }
public Nullable<int> no { get; set; }
public Nullable<int> seq { get; set; }
public string title { get; set; }
public string cate { get; set; }
public string sw { get; set; }
public string ew { get; set; }
public string swa { get; set; }
public string ewa { get; set; }
public string uid { get; set; }
public string memo { get; set; }
public Nullable<int> appoval { get; set; }
public Nullable<int> progress { get; set; }
public string wuid { get; set; }
public System.DateTime wdate { get; set; }
}
}

View File

@@ -1,24 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 이 코드는 템플릿에서 생성되었습니다.
//
// 이 파일을 수동으로 변경하면 응용 프로그램에서 예기치 않은 동작이 발생할 수 있습니다.
// 이 파일을 수동으로 변경하면 코드가 다시 생성될 때 변경 내용을 덮어씁니다.
// </auto-generated>
//------------------------------------------------------------------------------
namespace JobReportMailService
{
using System;
using System.Collections.Generic;
public partial class HolidayLIst
{
public int idx { get; set; }
public string pdate { get; set; }
public Nullable<bool> free { get; set; }
public string memo { get; set; }
public string wuid { get; set; }
public System.DateTime wdate { get; set; }
}
}

View File

@@ -1,48 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 이 코드는 템플릿에서 생성되었습니다.
//
// 이 파일을 수동으로 변경하면 응용 프로그램에서 예기치 않은 동작이 발생할 수 있습니다.
// 이 파일을 수동으로 변경하면 코드가 다시 생성될 때 변경 내용을 덮어씁니다.
// </auto-generated>
//------------------------------------------------------------------------------
namespace JobReportMailService
{
using System;
using System.Collections.Generic;
public partial class JobReport
{
public int idx { get; set; }
public string gcode { get; set; }
public string pdate { get; set; }
public Nullable<int> pidx { get; set; }
public string projectName { get; set; }
public string uid { get; set; }
public string requestpart { get; set; }
public string package { get; set; }
public string status { get; set; }
public string type { get; set; }
public string process { get; set; }
public string description { get; set; }
public string remark { get; set; }
public Nullable<double> hrs { get; set; }
public Nullable<double> ot { get; set; }
public Nullable<bool> import { get; set; }
public string wuid { get; set; }
public System.DateTime wdate { get; set; }
public string description2 { get; set; }
public string tag { get; set; }
public Nullable<bool> autoinput { get; set; }
public Nullable<System.DateTime> otStart { get; set; }
public Nullable<System.DateTime> otEnd { get; set; }
public string kisullv { get; set; }
public string kisuldiv { get; set; }
public Nullable<decimal> kisulamt { get; set; }
public Nullable<double> ot2 { get; set; }
public string otReason { get; set; }
public string otwuid { get; set; }
public Nullable<System.DateTime> ottime { get; set; }
}
}

View File

@@ -1,252 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{DBE5BD4A-09D3-4437-AD6C-81FE270C6458}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>JobReportMailService</RootNamespace>
<AssemblyName>JobReportMailService</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<StartupObject />
</PropertyGroup>
<ItemGroup>
<Reference Include="ArSetting.Net4">
<HintPath>..\DLL\ArSetting.Net4.dll</HintPath>
</Reference>
<Reference Include="DevExpress.Data.v20.2, Version=20.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Xpo.v20.2, Version=20.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.dll</HintPath>
</Reference>
<Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.SqlServer.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.Security" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="CSetting.cs" />
<Compile Include="DataSet1.cs">
<DependentUpon>DataSet1.xsd</DependentUpon>
</Compile>
<Compile Include="DataSet1.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>DataSet1.xsd</DependentUpon>
</Compile>
<Compile Include="EETGW_ProjectsSchedule.cs">
<DependentUpon>Model1.tt</DependentUpon>
</Compile>
<Compile Include="EETGW_ProjectToDo.cs">
<DependentUpon>Model1.tt</DependentUpon>
</Compile>
<Compile Include="fChildBase.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="fChildBase.Designer.cs">
<DependentUpon>fChildBase.cs</DependentUpon>
</Compile>
<Compile Include="fNoScheduleDayWeek.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="fNoScheduleDayWeek.Designer.cs">
<DependentUpon>fNoScheduleDayWeek.cs</DependentUpon>
</Compile>
<Compile Include="fSendMail.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="fSendMail.Designer.cs">
<DependentUpon>fSendMail.cs</DependentUpon>
</Compile>
<Compile Include="fScheduleDayWeek.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="fScheduleDayWeek.Designer.cs">
<DependentUpon>fScheduleDayWeek.cs</DependentUpon>
</Compile>
<Compile Include="fScheduleDay.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="fScheduleDay.Designer.cs">
<DependentUpon>fScheduleDay.cs</DependentUpon>
</Compile>
<Compile Include="fJobReportWeek.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="fJobReportWeek.Designer.cs">
<DependentUpon>fJobReportWeek.cs</DependentUpon>
</Compile>
<Compile Include="fJobReportDay.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="fJobReportDay.Designer.cs">
<DependentUpon>fJobReportDay.cs</DependentUpon>
</Compile>
<Compile Include="fSetup.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="fSetup.Designer.cs">
<DependentUpon>fSetup.cs</DependentUpon>
</Compile>
<Compile Include="HolidayLIst.cs">
<DependentUpon>Model1.tt</DependentUpon>
</Compile>
<Compile Include="JobReport.cs">
<DependentUpon>Model1.tt</DependentUpon>
</Compile>
<Compile Include="MailData.cs">
<DependentUpon>Model1.tt</DependentUpon>
</Compile>
<Compile Include="MailForm.cs">
<DependentUpon>Model1.tt</DependentUpon>
</Compile>
<Compile Include="MDIParent1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MDIParent1.Designer.cs">
<DependentUpon>MDIParent1.cs</DependentUpon>
</Compile>
<Compile Include="Model1.Context.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Model1.Context.tt</DependentUpon>
</Compile>
<Compile Include="Model1.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Model1.tt</DependentUpon>
</Compile>
<Compile Include="Model1.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Model1.edmx</DependentUpon>
</Compile>
<Compile Include="Program_bak.cs" />
<Compile Include="Program.cs" />
<Compile Include="Projects.cs">
<DependentUpon>Model1.tt</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
<DependentUpon>Settings.settings</DependentUpon>
</Compile>
<Compile Include="Pub.cs" />
<Content Include="ReadMe.txt" />
<Compile Include="ReportUserData.cs" />
<Compile Include="vGroupUser.cs">
<DependentUpon>Model1.tt</DependentUpon>
</Compile>
<Compile Include="vJobReportForUser.cs">
<DependentUpon>Model1.tt</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
<EntityDeploy Include="Model1.edmx">
<Generator>EntityModelCodeGenerator</Generator>
<LastGenOutput>Model1.Designer.cs</LastGenOutput>
</EntityDeploy>
<None Include="DataSet1.xsc">
<DependentUpon>DataSet1.xsd</DependentUpon>
</None>
<None Include="DataSet1.xsd">
<SubType>Designer</SubType>
<Generator>MSDataSetGenerator</Generator>
<LastGenOutput>DataSet1.Designer.cs</LastGenOutput>
</None>
<None Include="DataSet1.xss">
<DependentUpon>DataSet1.xsd</DependentUpon>
</None>
<None Include="Model1.edmx.diagram">
<DependentUpon>Model1.edmx</DependentUpon>
</None>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
<ItemGroup>
<Content Include="Model1.Context.tt">
<Generator>TextTemplatingFileGenerator</Generator>
<LastGenOutput>Model1.Context.cs</LastGenOutput>
<DependentUpon>Model1.edmx</DependentUpon>
</Content>
<Content Include="Model1.tt">
<Generator>TextTemplatingFileGenerator</Generator>
<DependentUpon>Model1.edmx</DependentUpon>
<LastGenOutput>Model1.cs</LastGenOutput>
</Content>
</ItemGroup>
<ItemGroup>
<Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="fChildBase.resx">
<DependentUpon>fChildBase.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="fNoScheduleDayWeek.resx">
<DependentUpon>fNoScheduleDayWeek.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="fSendMail.resx">
<DependentUpon>fSendMail.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="fScheduleDayWeek.resx">
<DependentUpon>fScheduleDayWeek.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="fScheduleDay.resx">
<DependentUpon>fScheduleDay.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="fJobReportWeek.resx">
<DependentUpon>fJobReportWeek.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="fJobReportDay.resx">
<DependentUpon>fJobReportDay.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="fSetup.resx">
<DependentUpon>fSetup.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="MDIParent1.resx">
<DependentUpon>MDIParent1.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
<StartArguments>
</StartArguments>
</PropertyGroup>
</Project>

View File

@@ -1,613 +0,0 @@

namespace JobReportMailService
{
partial class MDIParent1
{
/// <summary>
/// 필수 디자이너 변수입니다.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 사용 중인 모든 리소스를 정리합니다.
/// </summary>
/// <param name="disposing">관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form
/// <summary>
/// 디자이너 지원에 필요한 메서드입니다.
/// 이 메서드의 내용을 코드 편집기로 수정하지 마세요.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MDIParent1));
this.menuStrip = new System.Windows.Forms.MenuStrip();
this.fileMenu = new System.Windows.Forms.ToolStripMenuItem();
this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();
this.printToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.printPreviewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.printSetupToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.editMenu = new System.Windows.Forms.ToolStripMenuItem();
this.undoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.redoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator();
this.cutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.copyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.pasteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator();
this.selectAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.viewMenu = new System.Windows.Forms.ToolStripMenuItem();
this.toolBarToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.statusBarToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolsMenu = new System.Windows.Forms.ToolStripMenuItem();
this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.windowsMenu = new System.Windows.Forms.ToolStripMenuItem();
this.newWindowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.cascadeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.tileVerticalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.tileHorizontalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.closeAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.arrangeIconsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.helpMenu = new System.Windows.Forms.ToolStripMenuItem();
this.contentsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.indexToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.searchToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator();
this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStrip = new System.Windows.Forms.ToolStrip();
this.bt1 = new System.Windows.Forms.ToolStripButton();
this.bt2 = new System.Windows.Forms.ToolStripButton();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.bt3 = new System.Windows.Forms.ToolStripButton();
this.bt4 = new System.Windows.Forms.ToolStripButton();
this.bt5 = new System.Windows.Forms.ToolStripButton();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.bt6 = new System.Windows.Forms.ToolStripButton();
this.statusStrip = new System.Windows.Forms.StatusStrip();
this.toolStripStatusLabel = new System.Windows.Forms.ToolStripStatusLabel();
this.toolTip = new System.Windows.Forms.ToolTip(this.components);
this.menuStrip.SuspendLayout();
this.toolStrip.SuspendLayout();
this.statusStrip.SuspendLayout();
this.SuspendLayout();
//
// menuStrip
//
this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.fileMenu,
this.editMenu,
this.viewMenu,
this.toolsMenu,
this.windowsMenu,
this.helpMenu});
this.menuStrip.Location = new System.Drawing.Point(0, 0);
this.menuStrip.MdiWindowListItem = this.windowsMenu;
this.menuStrip.Name = "menuStrip";
this.menuStrip.Padding = new System.Windows.Forms.Padding(7, 2, 0, 2);
this.menuStrip.Size = new System.Drawing.Size(709, 24);
this.menuStrip.TabIndex = 0;
this.menuStrip.Text = "MenuStrip";
//
// fileMenu
//
this.fileMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.newToolStripMenuItem,
this.openToolStripMenuItem,
this.toolStripSeparator3,
this.saveToolStripMenuItem,
this.saveAsToolStripMenuItem,
this.toolStripSeparator4,
this.printToolStripMenuItem,
this.printPreviewToolStripMenuItem,
this.printSetupToolStripMenuItem,
this.toolStripSeparator5,
this.exitToolStripMenuItem});
this.fileMenu.ImageTransparentColor = System.Drawing.SystemColors.ActiveBorder;
this.fileMenu.Name = "fileMenu";
this.fileMenu.Size = new System.Drawing.Size(57, 20);
this.fileMenu.Text = "파일(&F)";
//
// newToolStripMenuItem
//
this.newToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("newToolStripMenuItem.Image")));
this.newToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black;
this.newToolStripMenuItem.Name = "newToolStripMenuItem";
this.newToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N)));
this.newToolStripMenuItem.Size = new System.Drawing.Size(198, 22);
this.newToolStripMenuItem.Text = "새로 만들기(&N)";
this.newToolStripMenuItem.Click += new System.EventHandler(this.ShowNewForm);
//
// openToolStripMenuItem
//
this.openToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("openToolStripMenuItem.Image")));
this.openToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black;
this.openToolStripMenuItem.Name = "openToolStripMenuItem";
this.openToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O)));
this.openToolStripMenuItem.Size = new System.Drawing.Size(198, 22);
this.openToolStripMenuItem.Text = "열기(&O)";
this.openToolStripMenuItem.Click += new System.EventHandler(this.OpenFile);
//
// toolStripSeparator3
//
this.toolStripSeparator3.Name = "toolStripSeparator3";
this.toolStripSeparator3.Size = new System.Drawing.Size(195, 6);
//
// saveToolStripMenuItem
//
this.saveToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("saveToolStripMenuItem.Image")));
this.saveToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black;
this.saveToolStripMenuItem.Name = "saveToolStripMenuItem";
this.saveToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S)));
this.saveToolStripMenuItem.Size = new System.Drawing.Size(198, 22);
this.saveToolStripMenuItem.Text = "저장(&S)";
//
// saveAsToolStripMenuItem
//
this.saveAsToolStripMenuItem.Name = "saveAsToolStripMenuItem";
this.saveAsToolStripMenuItem.Size = new System.Drawing.Size(198, 22);
this.saveAsToolStripMenuItem.Text = "다른 이름으로 저장(&A)";
this.saveAsToolStripMenuItem.Click += new System.EventHandler(this.SaveAsToolStripMenuItem_Click);
//
// toolStripSeparator4
//
this.toolStripSeparator4.Name = "toolStripSeparator4";
this.toolStripSeparator4.Size = new System.Drawing.Size(195, 6);
//
// printToolStripMenuItem
//
this.printToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("printToolStripMenuItem.Image")));
this.printToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black;
this.printToolStripMenuItem.Name = "printToolStripMenuItem";
this.printToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.P)));
this.printToolStripMenuItem.Size = new System.Drawing.Size(198, 22);
this.printToolStripMenuItem.Text = "인쇄(&P)";
//
// printPreviewToolStripMenuItem
//
this.printPreviewToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("printPreviewToolStripMenuItem.Image")));
this.printPreviewToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black;
this.printPreviewToolStripMenuItem.Name = "printPreviewToolStripMenuItem";
this.printPreviewToolStripMenuItem.Size = new System.Drawing.Size(198, 22);
this.printPreviewToolStripMenuItem.Text = "인쇄 미리 보기(&V)";
//
// printSetupToolStripMenuItem
//
this.printSetupToolStripMenuItem.Name = "printSetupToolStripMenuItem";
this.printSetupToolStripMenuItem.Size = new System.Drawing.Size(198, 22);
this.printSetupToolStripMenuItem.Text = "인쇄 설정";
//
// toolStripSeparator5
//
this.toolStripSeparator5.Name = "toolStripSeparator5";
this.toolStripSeparator5.Size = new System.Drawing.Size(195, 6);
//
// exitToolStripMenuItem
//
this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
this.exitToolStripMenuItem.Size = new System.Drawing.Size(198, 22);
this.exitToolStripMenuItem.Text = "끝내기(&X)";
this.exitToolStripMenuItem.Click += new System.EventHandler(this.ExitToolsStripMenuItem_Click);
//
// editMenu
//
this.editMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.undoToolStripMenuItem,
this.redoToolStripMenuItem,
this.toolStripSeparator6,
this.cutToolStripMenuItem,
this.copyToolStripMenuItem,
this.pasteToolStripMenuItem,
this.toolStripSeparator7,
this.selectAllToolStripMenuItem});
this.editMenu.Name = "editMenu";
this.editMenu.Size = new System.Drawing.Size(57, 20);
this.editMenu.Text = "편집(&E)";
//
// undoToolStripMenuItem
//
this.undoToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("undoToolStripMenuItem.Image")));
this.undoToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black;
this.undoToolStripMenuItem.Name = "undoToolStripMenuItem";
this.undoToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Z)));
this.undoToolStripMenuItem.Size = new System.Drawing.Size(184, 22);
this.undoToolStripMenuItem.Text = "실행 취소(&U)";
//
// redoToolStripMenuItem
//
this.redoToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("redoToolStripMenuItem.Image")));
this.redoToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black;
this.redoToolStripMenuItem.Name = "redoToolStripMenuItem";
this.redoToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Y)));
this.redoToolStripMenuItem.Size = new System.Drawing.Size(184, 22);
this.redoToolStripMenuItem.Text = "다시 실행(&R)";
//
// toolStripSeparator6
//
this.toolStripSeparator6.Name = "toolStripSeparator6";
this.toolStripSeparator6.Size = new System.Drawing.Size(181, 6);
//
// cutToolStripMenuItem
//
this.cutToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("cutToolStripMenuItem.Image")));
this.cutToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black;
this.cutToolStripMenuItem.Name = "cutToolStripMenuItem";
this.cutToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.X)));
this.cutToolStripMenuItem.Size = new System.Drawing.Size(184, 22);
this.cutToolStripMenuItem.Text = "잘라내기(&T)";
this.cutToolStripMenuItem.Click += new System.EventHandler(this.CutToolStripMenuItem_Click);
//
// copyToolStripMenuItem
//
this.copyToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("copyToolStripMenuItem.Image")));
this.copyToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black;
this.copyToolStripMenuItem.Name = "copyToolStripMenuItem";
this.copyToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C)));
this.copyToolStripMenuItem.Size = new System.Drawing.Size(184, 22);
this.copyToolStripMenuItem.Text = "복사(&C)";
this.copyToolStripMenuItem.Click += new System.EventHandler(this.CopyToolStripMenuItem_Click);
//
// pasteToolStripMenuItem
//
this.pasteToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("pasteToolStripMenuItem.Image")));
this.pasteToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black;
this.pasteToolStripMenuItem.Name = "pasteToolStripMenuItem";
this.pasteToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.V)));
this.pasteToolStripMenuItem.Size = new System.Drawing.Size(184, 22);
this.pasteToolStripMenuItem.Text = "붙여넣기(&P)";
this.pasteToolStripMenuItem.Click += new System.EventHandler(this.PasteToolStripMenuItem_Click);
//
// toolStripSeparator7
//
this.toolStripSeparator7.Name = "toolStripSeparator7";
this.toolStripSeparator7.Size = new System.Drawing.Size(181, 6);
//
// selectAllToolStripMenuItem
//
this.selectAllToolStripMenuItem.Name = "selectAllToolStripMenuItem";
this.selectAllToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.A)));
this.selectAllToolStripMenuItem.Size = new System.Drawing.Size(184, 22);
this.selectAllToolStripMenuItem.Text = "모두 선택(&A)";
//
// viewMenu
//
this.viewMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolBarToolStripMenuItem,
this.statusBarToolStripMenuItem});
this.viewMenu.Name = "viewMenu";
this.viewMenu.Size = new System.Drawing.Size(59, 20);
this.viewMenu.Text = "보기(&V)";
//
// toolBarToolStripMenuItem
//
this.toolBarToolStripMenuItem.Checked = true;
this.toolBarToolStripMenuItem.CheckOnClick = true;
this.toolBarToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked;
this.toolBarToolStripMenuItem.Name = "toolBarToolStripMenuItem";
this.toolBarToolStripMenuItem.Size = new System.Drawing.Size(153, 22);
this.toolBarToolStripMenuItem.Text = "도구 모음(&T)";
this.toolBarToolStripMenuItem.Click += new System.EventHandler(this.ToolBarToolStripMenuItem_Click);
//
// statusBarToolStripMenuItem
//
this.statusBarToolStripMenuItem.Checked = true;
this.statusBarToolStripMenuItem.CheckOnClick = true;
this.statusBarToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked;
this.statusBarToolStripMenuItem.Name = "statusBarToolStripMenuItem";
this.statusBarToolStripMenuItem.Size = new System.Drawing.Size(153, 22);
this.statusBarToolStripMenuItem.Text = "상태 표시줄(&S)";
this.statusBarToolStripMenuItem.Click += new System.EventHandler(this.StatusBarToolStripMenuItem_Click);
//
// toolsMenu
//
this.toolsMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.optionsToolStripMenuItem});
this.toolsMenu.Name = "toolsMenu";
this.toolsMenu.Size = new System.Drawing.Size(57, 20);
this.toolsMenu.Text = "도구(&T)";
//
// optionsToolStripMenuItem
//
this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem";
this.optionsToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.optionsToolStripMenuItem.Text = "옵션(&O)";
this.optionsToolStripMenuItem.Click += new System.EventHandler(this.optionsToolStripMenuItem_Click);
//
// windowsMenu
//
this.windowsMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.newWindowToolStripMenuItem,
this.cascadeToolStripMenuItem,
this.tileVerticalToolStripMenuItem,
this.tileHorizontalToolStripMenuItem,
this.closeAllToolStripMenuItem,
this.arrangeIconsToolStripMenuItem});
this.windowsMenu.Name = "windowsMenu";
this.windowsMenu.Size = new System.Drawing.Size(50, 20);
this.windowsMenu.Text = "창(&W)";
//
// newWindowToolStripMenuItem
//
this.newWindowToolStripMenuItem.Name = "newWindowToolStripMenuItem";
this.newWindowToolStripMenuItem.Size = new System.Drawing.Size(195, 22);
this.newWindowToolStripMenuItem.Text = "새 창(&N)";
this.newWindowToolStripMenuItem.Click += new System.EventHandler(this.ShowNewForm);
//
// cascadeToolStripMenuItem
//
this.cascadeToolStripMenuItem.Name = "cascadeToolStripMenuItem";
this.cascadeToolStripMenuItem.Size = new System.Drawing.Size(195, 22);
this.cascadeToolStripMenuItem.Text = "계단식 배열(&C)";
this.cascadeToolStripMenuItem.Click += new System.EventHandler(this.CascadeToolStripMenuItem_Click);
//
// tileVerticalToolStripMenuItem
//
this.tileVerticalToolStripMenuItem.Name = "tileVerticalToolStripMenuItem";
this.tileVerticalToolStripMenuItem.Size = new System.Drawing.Size(195, 22);
this.tileVerticalToolStripMenuItem.Text = "세로 바둑판식 배열(&V)";
this.tileVerticalToolStripMenuItem.Click += new System.EventHandler(this.TileVerticalToolStripMenuItem_Click);
//
// tileHorizontalToolStripMenuItem
//
this.tileHorizontalToolStripMenuItem.Name = "tileHorizontalToolStripMenuItem";
this.tileHorizontalToolStripMenuItem.Size = new System.Drawing.Size(195, 22);
this.tileHorizontalToolStripMenuItem.Text = "가로 바둑판식 배열(&H)";
this.tileHorizontalToolStripMenuItem.Click += new System.EventHandler(this.TileHorizontalToolStripMenuItem_Click);
//
// closeAllToolStripMenuItem
//
this.closeAllToolStripMenuItem.Name = "closeAllToolStripMenuItem";
this.closeAllToolStripMenuItem.Size = new System.Drawing.Size(195, 22);
this.closeAllToolStripMenuItem.Text = "모두 닫기(&L)";
this.closeAllToolStripMenuItem.Click += new System.EventHandler(this.CloseAllToolStripMenuItem_Click);
//
// arrangeIconsToolStripMenuItem
//
this.arrangeIconsToolStripMenuItem.Name = "arrangeIconsToolStripMenuItem";
this.arrangeIconsToolStripMenuItem.Size = new System.Drawing.Size(195, 22);
this.arrangeIconsToolStripMenuItem.Text = "아이콘 정렬(&A)";
this.arrangeIconsToolStripMenuItem.Click += new System.EventHandler(this.ArrangeIconsToolStripMenuItem_Click);
//
// helpMenu
//
this.helpMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.contentsToolStripMenuItem,
this.indexToolStripMenuItem,
this.searchToolStripMenuItem,
this.toolStripSeparator8,
this.aboutToolStripMenuItem});
this.helpMenu.Name = "helpMenu";
this.helpMenu.Size = new System.Drawing.Size(72, 20);
this.helpMenu.Text = "도움말(&H)";
//
// contentsToolStripMenuItem
//
this.contentsToolStripMenuItem.Name = "contentsToolStripMenuItem";
this.contentsToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.F1)));
this.contentsToolStripMenuItem.Size = new System.Drawing.Size(161, 22);
this.contentsToolStripMenuItem.Text = "목차(&C)";
//
// indexToolStripMenuItem
//
this.indexToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("indexToolStripMenuItem.Image")));
this.indexToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black;
this.indexToolStripMenuItem.Name = "indexToolStripMenuItem";
this.indexToolStripMenuItem.Size = new System.Drawing.Size(161, 22);
this.indexToolStripMenuItem.Text = "색인(&I)";
//
// searchToolStripMenuItem
//
this.searchToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("searchToolStripMenuItem.Image")));
this.searchToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black;
this.searchToolStripMenuItem.Name = "searchToolStripMenuItem";
this.searchToolStripMenuItem.Size = new System.Drawing.Size(161, 22);
this.searchToolStripMenuItem.Text = "검색(&S)";
//
// toolStripSeparator8
//
this.toolStripSeparator8.Name = "toolStripSeparator8";
this.toolStripSeparator8.Size = new System.Drawing.Size(158, 6);
//
// aboutToolStripMenuItem
//
this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem";
this.aboutToolStripMenuItem.Size = new System.Drawing.Size(161, 22);
this.aboutToolStripMenuItem.Text = "정보(&A)... ...";
//
// toolStrip
//
this.toolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.bt1,
this.bt2,
this.toolStripSeparator1,
this.bt3,
this.bt4,
this.bt5,
this.toolStripSeparator2,
this.bt6});
this.toolStrip.Location = new System.Drawing.Point(0, 24);
this.toolStrip.Name = "toolStrip";
this.toolStrip.Size = new System.Drawing.Size(709, 25);
this.toolStrip.TabIndex = 1;
this.toolStrip.Text = "ToolStrip";
//
// bt1
//
this.bt1.Image = ((System.Drawing.Image)(resources.GetObject("bt1.Image")));
this.bt1.ImageTransparentColor = System.Drawing.Color.Black;
this.bt1.Name = "bt1";
this.bt1.Size = new System.Drawing.Size(95, 22);
this.bt1.Text = "업무일지(일)";
this.bt1.Click += new System.EventHandler(this.ShowNewForm);
//
// bt2
//
this.bt2.Image = ((System.Drawing.Image)(resources.GetObject("bt2.Image")));
this.bt2.ImageTransparentColor = System.Drawing.Color.Black;
this.bt2.Name = "bt2";
this.bt2.Size = new System.Drawing.Size(95, 22);
this.bt2.Text = "업무일지(주)";
this.bt2.Click += new System.EventHandler(this.OpenFile);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
//
// bt3
//
this.bt3.Image = ((System.Drawing.Image)(resources.GetObject("bt3.Image")));
this.bt3.ImageTransparentColor = System.Drawing.Color.Black;
this.bt3.Name = "bt3";
this.bt3.Size = new System.Drawing.Size(83, 22);
this.bt3.Text = "스케쥴(일)";
this.bt3.Click += new System.EventHandler(this.saveToolStripButton_Click);
//
// bt4
//
this.bt4.Image = ((System.Drawing.Image)(resources.GetObject("bt4.Image")));
this.bt4.ImageTransparentColor = System.Drawing.Color.Black;
this.bt4.Name = "bt4";
this.bt4.Size = new System.Drawing.Size(83, 22);
this.bt4.Text = "스케쥴(주)";
this.bt4.Click += new System.EventHandler(this.printToolStripButton_Click);
//
// bt5
//
this.bt5.Image = ((System.Drawing.Image)(resources.GetObject("bt5.Image")));
this.bt5.ImageTransparentColor = System.Drawing.Color.Black;
this.bt5.Name = "bt5";
this.bt5.Size = new System.Drawing.Size(107, 22);
this.bt5.Text = "스케쥴없음(주)";
this.bt5.Click += new System.EventHandler(this.toolStripButton2_Click);
//
// toolStripSeparator2
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25);
//
// bt6
//
this.bt6.Image = ((System.Drawing.Image)(resources.GetObject("bt6.Image")));
this.bt6.ImageTransparentColor = System.Drawing.Color.Black;
this.bt6.Name = "bt6";
this.bt6.Size = new System.Drawing.Size(111, 22);
this.bt6.Text = "메일생성및전송";
this.bt6.Click += new System.EventHandler(this.toolStripButton1_Click);
//
// statusStrip
//
this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripStatusLabel});
this.statusStrip.Location = new System.Drawing.Point(0, 536);
this.statusStrip.Name = "statusStrip";
this.statusStrip.Padding = new System.Windows.Forms.Padding(1, 0, 16, 0);
this.statusStrip.Size = new System.Drawing.Size(709, 22);
this.statusStrip.TabIndex = 2;
this.statusStrip.Text = "StatusStrip";
//
// toolStripStatusLabel
//
this.toolStripStatusLabel.Name = "toolStripStatusLabel";
this.toolStripStatusLabel.Size = new System.Drawing.Size(31, 17);
this.toolStripStatusLabel.Text = "상태";
//
// MDIParent1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(709, 558);
this.Controls.Add(this.statusStrip);
this.Controls.Add(this.toolStrip);
this.Controls.Add(this.menuStrip);
this.IsMdiContainer = true;
this.MainMenuStrip = this.menuStrip;
this.Name = "MDIParent1";
this.Text = "MDIParent1";
this.Load += new System.EventHandler(this.MDIParent1_Load);
this.menuStrip.ResumeLayout(false);
this.menuStrip.PerformLayout();
this.toolStrip.ResumeLayout(false);
this.toolStrip.PerformLayout();
this.statusStrip.ResumeLayout(false);
this.statusStrip.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.MenuStrip menuStrip;
private System.Windows.Forms.ToolStrip toolStrip;
private System.Windows.Forms.StatusStrip statusStrip;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator4;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator6;
private System.Windows.Forms.ToolStripMenuItem printSetupToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator7;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator8;
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel;
private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem tileHorizontalToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem fileMenu;
private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem saveToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem saveAsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem printToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem printPreviewToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem editMenu;
private System.Windows.Forms.ToolStripMenuItem undoToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem redoToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem cutToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem copyToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem pasteToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem selectAllToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem viewMenu;
private System.Windows.Forms.ToolStripMenuItem toolBarToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem statusBarToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem toolsMenu;
private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem windowsMenu;
private System.Windows.Forms.ToolStripMenuItem newWindowToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem cascadeToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem tileVerticalToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem closeAllToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem arrangeIconsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem helpMenu;
private System.Windows.Forms.ToolStripMenuItem contentsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem indexToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem searchToolStripMenuItem;
private System.Windows.Forms.ToolStripButton bt1;
private System.Windows.Forms.ToolStripButton bt2;
private System.Windows.Forms.ToolStripButton bt3;
private System.Windows.Forms.ToolStripButton bt4;
private System.Windows.Forms.ToolTip toolTip;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
private System.Windows.Forms.ToolStripButton bt6;
private System.Windows.Forms.ToolStripButton bt5;
}
}

View File

@@ -1,159 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace JobReportMailService
{
public partial class MDIParent1 : Form
{
private int childFormNumber = 0;
public MDIParent1()
{
InitializeComponent();
Pub.init();
}
private void ShowNewForm(object sender, EventArgs e)
{
Form childForm = new fJobReportDay();
childForm.MdiParent = this;
//childForm.Text = "창 " + childFormNumber++;
childForm.Show();
}
private void OpenFile(object sender, EventArgs e)
{
Form childForm = new fJobReportWeek();
childForm.MdiParent = this;
//childForm.Text = "창 " + childFormNumber++;
childForm.Show();
}
private void SaveAsToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
saveFileDialog.Filter = "텍스트 파일 (*.txt)|*.txt|모든 파일 (*.*)|*.*";
if (saveFileDialog.ShowDialog(this) == DialogResult.OK)
{
string FileName = saveFileDialog.FileName;
}
}
private void ExitToolsStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}
private void CutToolStripMenuItem_Click(object sender, EventArgs e)
{
}
private void CopyToolStripMenuItem_Click(object sender, EventArgs e)
{
}
private void PasteToolStripMenuItem_Click(object sender, EventArgs e)
{
}
private void ToolBarToolStripMenuItem_Click(object sender, EventArgs e)
{
toolStrip.Visible = toolBarToolStripMenuItem.Checked;
}
private void StatusBarToolStripMenuItem_Click(object sender, EventArgs e)
{
statusStrip.Visible = statusBarToolStripMenuItem.Checked;
}
private void CascadeToolStripMenuItem_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.Cascade);
}
private void TileVerticalToolStripMenuItem_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.TileVertical);
}
private void TileHorizontalToolStripMenuItem_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.TileHorizontal);
}
private void ArrangeIconsToolStripMenuItem_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.ArrangeIcons);
}
private void CloseAllToolStripMenuItem_Click(object sender, EventArgs e)
{
foreach (Form childForm in MdiChildren)
{
childForm.Close();
}
}
private void saveToolStripButton_Click(object sender, EventArgs e)
{
Form childForm = new fScheduleDay();
childForm.MdiParent = this;
//childForm.Text = "창 " + childFormNumber++;
childForm.Show();
}
private void printToolStripButton_Click(object sender, EventArgs e)
{
Form childForm = new fScheduleDayWeek();
childForm.MdiParent = this;
//childForm.Text = "창 " + childFormNumber++;
childForm.Show();
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
Form childForm = new fSendMail();
childForm.MdiParent = this;
//childForm.Text = "창 " + childFormNumber++;
childForm.Show();
}
private void toolStripButton2_Click(object sender, EventArgs e)
{
Form childForm = new fNoScheduleDayWeek();
childForm.MdiParent = this;
//childForm.Text = "창 " + childFormNumber++;
childForm.Show();
}
private void MDIParent1_Load(object sender, EventArgs e)
{
this.Text = "mail service " + Application.ProductVersion.ToString();
if(Pub.setting.autoRun)
{
bt1.PerformClick();
bt2.PerformClick();
bt3.PerformClick();
bt4.PerformClick();
bt5.PerformClick();
bt6.PerformClick();
}
}
private void optionsToolStripMenuItem_Click(object sender, EventArgs e)
{
var f = new fSetup();
f.ShowDialog();
}
}
}

View File

@@ -1,404 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="menuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="newToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAELSURBVDhPrZDJasJQGIXzUvoO9TX0jcQuSulCLUUECwot
KtrSAbQWRDTg0CLBCY1xqmkcYo7c8ItJYy9Z+MHhLu453+IXzkbypY6/SeRriKXLiKaKZqh6Gjb4j+v4
M7y+AF9y/yRS3UkomkbmvcaXxLMVqjsJhh/N8SE0sXP38El1J1t9Z0oOIprYiSQLVLdjGAZUbYOhopoC
z4X/tOAm8UoTO+uNjslcgzSY8wVXsTxNjug7Awt1jb68RFOa8AWXtxmaHdFWW8jTX7R7M1RbMl/APq2w
w81+VugMF6i3FZTEgXuB9XBfnSkqjRHeyl33AuvhxO8xitU+ch+SOwF7eeEK2Keb0OQcCMIe3/X1lqrb
NIsAAAAASUVORK5CYII=
</value>
</data>
<data name="openToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJYSURBVDhPvZFbSBNQHIf30ENPFmlRCEWWhD0MA0Oqh5Ck
m6KUZoWRJpS3LhiKbVPbvE53c+pKh7lN19RptTIMK4RCkQgtdZSYmgVFpZgZKnn7GptokkEP0R9+L+ec
7zs/zhH8l8kpMSPTWriSbyJPZ0WiNDK/9XcTnawjLF7lhC6IKsh0yFKyDUQllyCoN2tYLo218j/ekiAp
JTxRRWh8oUvQ22VkcrTOmR8jFqaHDFhNKmzm7GUlYQlqQuO0BMcWI6irVDMxUr0Env1UyrQ9ieqKfKrK
cjGUZKIvzOC6UkyxPHWptMaoYOKLcQGec8D0isEeu2x+E9wsl/P9o34BbqpXOPPAWkCDRc6dqlyshiws
ehkm3VVuaNMoU4vRKUQuWZU+l7F3Rc7aAy1SbNVqZgdkMJi9NG8da/0S6EmGV4l01kZwKSYEgUGXxbe+
fHiv5G6NiraHStehX6u/jIL2cGZag5h8FMCbSiHnTx9wCcq1Ur6+ljHYmo7NomSuXwrdcS6wM8YBnmCm
LYTJ5v2MNe5huH4HsnhvTgZ6uN6iVJ3OcJeIW2YFHU8dTXqSHIKz0HGKuWdHmHpyiPGmvYzY/Phc40N7
zmoig7zw2+bmEugKxHQ3Z3DbXAB9GfDCUff5MaZaghl/HMBogz9DViEfjFuxK92Rxm7Bd7vn4k8U5aVS
Z8rHfi+Bdo1gIW3KFTTLV3I/cxW1aWsxpHpy7fImIg9vxt9346JAk52CRnqOPFE0kovHnQ9zJiKQowd3
sW+3kJ1Cb3y8PNm4wYN1a9xY7z5f/d+MQPATMS7uX9kMtOAAAAAASUVORK5CYII=
</value>
</data>
<data name="saveToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIvSURBVDhPrZLdS9NRGMd//0L33QRddFtTYzgXq8GvXENZ
Ngwrwl5+kWZpukwTFSvTqPkG2QqXTlqtJuGkIl/AFCkRZSpZmrmiJQ41xSaCwdfznP3yuIouogeem8P5
fM55XqT/Es+fhUHpa11Ci3cRD93zaGoM4a5jGnW1X2C/FcD18kmUloyjsOAt8nJHcP6cHyouSQR2dQK1
NSv4WyyvrMKU2oVDqU95qrgkeZ8scEFlxTf16u9BcGh+GbssL6DRKLAe9AiB+8EcF5SWfFWvR8dP+GNw
ATFmHwouTeGApVkInA0zXHDR9kFFRGyEhydC2CZ7kZM9huQkpxDU3w5yQdbZERWLxK9wnz+IzQY3FGUA
ZrNDCGqqP3OBcmpARf8Md/Z/wqb4Rhw+8gqJiXVCcKNyCh3tYKMEjh1/A+vRXt5tahjVTN+mlyNwN1Ks
LyHLdiG4UjaBNh/YDgDNrh9s7t9Rfm2WN5UaRjVnZvjX4f3JrTAaK4TgcuEYPI+A+85VtjhhmNKyo9KS
bkPamaIInMTgfR4YDGVCYMsbZTBQXRXmLxNE5zE6GYPvZzA6OQsl9yr2mFo4rNvtgl5fJAS0lo47WP82
CQg+nX8T7wJzCEwv4kKxHbEGF4ObEJtwD7r4fCHIzBhidS9xeKvRgy07ZDxu64GvvQ8d3f3ofT2IvWYr
NPoGxDF4u7YeWm1OtODkiR6+nrRhtCQ0ZxoVdZsaRjXTq5QE74zLEoJ/D0laA2xoOmtG+TV7AAAAAElF
TkSuQmCC
</value>
</data>
<data name="printToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIqSURBVDhPrZL7T1JxAMVZP/b/tLa2Wm21mail1YZlRjid
k6JhTApClhGmktrDWlKjK3OBDrLAMWJaY9MZZJbo0umWQIEFXRPQMB6ne788HFpbW322s93d3fM598X5
7xjtUxh0vId5dOaPMY14kL18O6zgrcePrWz8TMIbWMGgbQIlZy6DW31pu4Qts0ml0gjRETjdH0iGHC4Y
LONwz/hQJVITQbZSiN7qxsfPdHYzA7u8Go1jdnEZJruLLP92XWsaB5sks+4LhgvWbc5puDxeVDaocOSs
HBrtM9zps21KFJ1PSHnENZ9fzS0HwzHML4XRa3CglC+Dsqsfj0xjKGVEpNzUpof6/hAoyxs8MDqhf/4a
tyk7rt4yQtyiBb+xA+U1ChSfluLkuevo1lkhUWlRnHuMm49fIBKLk+WtJJIprMcT5E6+0uv49CUKeTuF
OmkXcweyjEB1zwzLq3d46nCDMr/E3b5hqHsGIGvXQdTcA8HFDvAaWnBUIEfRKQnOM+cqhdew/7goI1B2
D8AfCGU3C4msbcAbXMVOcEh2UBzwxW0oqZZi1+GajKC504DpuSUw7ywPe/wtmsCcfw1jszQpW7OCY7UK
7KsQbgqUGgqaXhN8oTjoWBqB72ksLqcwsfADw5NR9DtXSDGXQzwxKecF9ZJWyG7oMDrpJ9/2b1IgYJGo
HqKiTokywRVwmd+0qKoJB3mNOHDiAvaWC7GnrB67ubX5YkH53+BwfgHgHTGbZU7qDAAAAABJRU5ErkJg
gg==
</value>
</data>
<data name="printPreviewToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHXSURBVDhPrZDdS1NhAIf3z4RXXkRqEd5IoCaKROWc6YVN
XMQkMFToZjcpQaatoVuiq+UkTTrFWR/OyuWmNaGoYDLtIkHUKfOjSJxuc0/7OHObx4+bHvjxvhe/33MO
r+K/IDpn2B9hzMOQ/RtW21Q8UvVgYoPD6B3+SF5J3dGSF45pqS6ny2pndNJztGT43Q+pLsfw5G18nIw0
yeTpmy9SPUUouMX45DjGRxZu39NzR99Ffpn6YEG/6JZmCba3txBHRnjvnMDnX2V+2Y9VEFFrm6jR3pJL
zIJLmiZwTLiwO5zxeygMfwO7LK2HMZifoarVyAU9Q2PxcpJus4XFFf/eePl3iNnFIDbXDJXV1XJB98Co
NE3QaexhYWUtMd4IR8c7uGcDPHzu5mJFhVwQe+l0BNGGaHfg24h+eSnI558BXn/dpKFFR2VVFfrWpkxJ
uiASifBrbo67nQb6Bl/x0uXFJLhpaNahVF1m8H4NoulGpiRdsBMMs/4ngMfr5YHRiOa6lqt19VxRXsBw
8xy+x0XsfqrF0tGYkiQFsfOwtLa1c60sh++6XBZMBazZlDRrylOC3PPqY1NYcglN6Sk+tJyhvjgbVelp
+YMeR+wv8k9mUXz2RHSsUPwDd10kHqNu+GEAAAAASUVORK5CYII=
</value>
</data>
<data name="undoToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGmSURBVDhPvZHdS5MBFMb3p3TX6E7c1BTHUIc2xUbEqGUz
LaV5s6ViRvhuul0M9lFshFjmjV/bKLVajRAid6N3KYg3FkHDiWvNmXt3++udDiMd4nthD5ybc57nx+Ec
xbkqGM0TfCcysSgyuyQSlioSFymOT5d/QaRQnjmR4VAO+1SOlx8PASUhnkiKmZXDQSH05E2erkCGBtsK
NV0xKu9EaRz8xlisBKDQGJ7aYeKziD0k8vRtHrN3G51tGc39RdS3X9Fgfc/l9lmM7gzTkq8Y/au+sW16
nu/zYDzHTe8e1XejVHUsSOHwgdkwFKPsxiS6h5s4pnMnAZ3+JM0jaW759hkYT6NsDqBqCx0ZL2gFND1x
dANfcYRLAK45t6jo+86VkdTBJh3eHwiTv/4FWOLohSTOUoC6wQTa3g2qLcuo2j9QZnqNsuXZkbHCPE+t
ZQmD6ye20cRJwHEdv/RFfUBaf5Pu4C4+6b3F9tlVde8T191ZjMIXeWGzfxetdZWrriytj9a5ZHghD9D0
OCGFf9PUv0a5KSJ/dZP01vr+DdRtc/LD/0EKxR+XdBDBXAMPDQAAAABJRU5ErkJggg==
</value>
</data>
<data name="redoToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGVSURBVDhPzZHdK0NhHMf3p7jBknbBNpqbc+FtttrUrBim
LEJeRo0lzMsK2S6M5D3vJjXFJinhZu64WolQu9FaXjrnuf56nrOl5kTIhW99L56e7/dzfuf3yP5MO+cE
/jOCLeqlY4KJgADnioDk9ddiZebFI4KBdQGD2wLcOwJ6VimEOhn7XKw8e0hQ4nxAXt0BNLYQuNYwbD4e
9gUB9sUEZPOCgOuMSIEbpwTm0SeoLcsobAtAVbMrWm3dRz2FNM7yaKGQJZoraAqL0yarCbk2BBR13yKz
bALGvkPxUlXjR65lC9nGeVSMvYqTNM/xUFqD0glcfga4Q4bWizSu/z2grN6GXDcJx0IcFg8P3VAcioo1
KWCYAnQDjzTsSwFMBQmY2Ze1QzGou+4h109LAR0zUZS748ip3E0BsIVp6D8rrSEoTOtiOb14XArw7BE0
+J5R5Lihe5hMCUgW9pnM/Zcwjb4g33byvcJHZdFtG3ojMIy8gGu/Qq33+ecgBtE7r2F08yjtjf5uEiad
K4Yq+mzJ47+WTPYGxTcHtykTmrAAAAAASUVORK5CYII=
</value>
</data>
<data name="cutToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGhSURBVDhPYyAG/AcCKJMwWLlp///ZyzbBNYA033nw9H91
6xTiDJk8d83/nmmL/1e1zgRr+Pb9x//Vm/b8T8mpIt4Vk2av/D95zmqQ5f+fvXjzPy2/5r+YEB8J3ti4
73/X5IX/T5y5+P/gsXP/w+KzSTNg4aod/7unLPrfO23h//LGvv8+QdHEawaBzokL/5c09P1Pzqv7Hxqb
+d/NO4g0A0AgIa/lf1hC4f+QtLb//gktxBsQ3fHuf0Tn6/8hzQ/+e5ed+u9Tfva/X9Xl/z6lp/+7Ze/E
b1BE+6v/kT3v/gc33PlvHT3vv2lQ33+3vH3//auv/ncFaraKmY/fgLD25//D2p7+d0zbANZsGtT737vk
1H//yqv/nTI2/TcJ7sdvQGjLo/9Bjff+O6Vu+m8c0A02IABou2/F2f8WEdP+aztk4TcguOnef/+yS//t
ktf8N/SBBJx3yfH/dkmr/mvaJP+XkdfEb4Bf5cX/9kmrgbZ3/Vc3CwcnHvuUNf+1rBP+q5tH/Df2b8dv
gHPGlv9mIZP+a1jF/jf0qsGvmDqAgQEAkYXpGFtqYpEAAAAASUVORK5CYII=
</value>
</data>
<data name="copyToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHgSURBVDhPvZHdS1pxGMfPn7IKieq63Y/RKw0aFF1ssEEv
dOVFXXUVFQ3Wlg4H2dSo7A21jnUiKiPFylwttMy9GXMNNgUrzinLrGN98zxaVgu7GOwLn5vf+X0/D8/v
MP8cbuEbJFiblzDMuDDAfcQbLYfklfSRyrejn3CirnUID0tr7peYrd5kLZHY2Tm6hudgcXjxrEF5v8Qw
66aixQew64DHL+C9fhrskgDTAg+jnUffLA/V+B7xojNwUzjAOUkg5eQ0BuEgikAoTILbaR/ZQX6tg0jW
GUZnstPHXscpFDMCWtg/aOz3Y3h+l86vp0ETArciIK9qgiCBOr6vtPdRRMQOH8F2YB9f/LvQTQWp1MHG
CM/WPl4qgsitmkROxSiyywcTAmnf46h4NVmu86Fe/RnvjNskuIxwKGLr9zEcmwfQsGuQPelJCYRwFF9/
huD+HoDT8wu2Tz/Q2pv4vc0jYcjVQTx/68PTtg1Cw65CVtqdEuSXVP9Fo2qDBGJ8vRAvYtN/BKtLgHlx
Dx9GncgqUqUe8q7UtK+Q4PrkS7pNy8gsUKQXVDbZETk5g27cBa15DZqxVZosldWGJWQ8fp1eUCS3xF/b
SGSX6yEr0yKruAuZhcp4uQMPHr1KL/hPYZgL78LfVeQiZg4AAAAASUVORK5CYII=
</value>
</data>
<data name="pasteToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJXSURBVDhPtZJdSFNhHMYPdGE3RR/UVVcF0U0UEVQXGYWt
sNlikdii5SK2SckmS9tGas0cunRzadoW+THUprMSpUnREBqOvmdsRh8SOSPXsnY2N+eyeDrn3UaujCDo
gYcD73mf3/+Dl/ovcvZr4bihQW+LCrL8fUgez6+edgPmuqX2CIL+DkT8V+EbqUGJmANDpQKXdWoYK4uJ
k9GE2FCMtiEe6kYs2AlLkwLRyTaUSHh4MaTE2VNcKEWb4Xcew6R9NWTC/b8D2HA8ZEWj9ijcrhrQ7+sx
MaLGW9dx9Jl5kAgy0VG6Ck8NFAoO/zJSd1ttAkBfh65UiHJFHtSFuThTwIdCzINcxIVUkIU62RoCyMvO
TAd0NuswQ3dhJmBCdLwKgeeF8LYtJ/a0LoO7aREeGTNImHXWto3pAItJi+lAC6bHKhB9eRKRZwdB9y+G
vtWOKlMvzl3qglJngVxjhkRlhLCoOh3Q3KDBlM+IyIgYU4+5CN/fhI+3VpBwSvHZbwiGYhibCCJXeh45
+eqfELO+DPSrCoQfchAeXI/QwEr4WilSmVXzTSexyeqAZ9RPwneHvNjDFyUgDdUqfB4+jZBjHejbSxGw
ZWD0GkXa/jr7HV/CTOUPQXje+OEafodsgRwcJrxr7wFkbt8Bqu5CMQIPpEx4CT71LMR4+wJ4GynImJnZ
tlMdXGE6qLcMoG/QS76st25YC+pieRF5IKktpyxmFja38j3XaxK23XHDan+SDtCXnWBeGA8i/m7k7NxC
frDbZmdOVZvPBPAnHWK2zV74m5PX/1UU9QOTNfjZ1V1+MwAAAABJRU5ErkJggg==
</value>
</data>
<data name="indexToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKWSURBVDhPjZJbSNNRHMf3HPRcYu+9Gb32VhAJ9RASlOBb
b2aIFop5GXPeyrmp8zLNec01HbmpqJvabjbndHl3JTmGbk7zroUXKD79N5XMFPzCjwMHPp9zzu/8ROdF
3eChpGSc7OxBsrIcHG1fLCE4VBMT69TVz6J5P4NUekHRMexyrVOumsBqW+OjOUC/eR5tiwdJtvN80Wm4
q3sZh+MnA9YdbNYt+vvW0esXaWqeFm409K/oNNzRGcRi3qKnZ5X2jmXaBLBVN09T4xwqlQe5fIycvKFD
wWlYbwiEQYMhSIt2gcZGLzU1s5SXT6NQjJKfP8KLZDMJz42caNhmGNa2zKPTLaB556O+bo6W9gCy1k1i
S/eJke0gqQkgL58k/pkRffvgoUDbOoVc4aauwcvb6q9UlnlQlkyh1gVJ0kKVFT4vCOWHevsvHuf5aTN7
mPP7EIklNrS6SSRSO7LiYWRFo7wpdFPb7CVRA7phWFzaJqPAxL0n6vBqcO1yJ9FNodKF6GWKEd9yAJNl
jLT0PsRiW/jPc5tWUFkI5xgeGfOH19J6J1LNEnHxJkQZWRqKlb0sbQeZXxXeV2JBmmvnYcEGhrFDQSih
W4QEtx5UUtE8StPAARHXKxC9LhoSTu4XyojZMcXGwXeszi9EiwPoTwh2fuyH4ZQcE3MrQi8se1yJzP87
B5IcO+mZfRSX2fAGF1B1LyLv3D3CwSmcLq9x4RXgKaGZyaUeomPU/09keqaZV4Koy/KNu8njdLkP2PsN
xk9+om4XM7MIFV1rXL6pJE9pOXukM8UWUtN6aWib4UasCXGtD61jj2brLkmKGS5FKUhI/cDAaOBswXFU
1W6KlE7inrYTcS2Xq5EZ3H9UhUxlY2gyKMAi0R+3BHAuvd7mVQAAAABJRU5ErkJggg==
</value>
</data>
<data name="searchToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAALGSURBVDhPldL/T01xHMfx/hczs8VmmC/zg1i7oa6pOXVL
Jbrqlm5fbrluSqV7uynpdq/qtoh7C9Ei3eu0fBnKl6yFmSRkWF93VUZ2Q/Z0P2OuxmZe2/ntvB/nfD7v
V8Dvya2UEY+hwk2+VcZY28n+Cheph86jKWzm52t/T15VBwdtMs6ubq6+7EMe7sA5VESGnIRkOklirhN1
XuPfkQMWGZNDprX/Mg8+PGFgdpScthIsL/JJuaRkg7mcGFMP0YYGEvQn5iN68bs2N3W9VjrGHdyc6qVv
pp8Br4eWERdJdjMK+1PW2NpYW6NGyqxkR1atHxFAsVPG/rCcmiE9jrc2nMNmah87ST3TgqZukpiK1yw9
G8Hi06GsN6YTlVblB7LL2qlzv8EkW9h7fyuZvWHoHAZymnzHOn4Rk7UBQ3kl8dYUAqsVBJaFE6Ep9wMZ
5jbqr8xSWF+P8qyCLXI06lor1Y0urnXdZszzjrfjHpoutBOXp2VBSQjKRJMf0Bpbsbq9HGjyEG9QE1q/
G11TMZ03uhD5Ogcfvd8YnZrD1nCeddoINscX+IG9h1rIrHmF9vhnNNYhwnO1vnUeYWTC82t4/P1XBke+
4Op+RkRcLMHRBj+QUnSO1NJbJB77RIJlimjjHfaXmhiemPwxPD3nG/5Mz6CXutYetkmRBEk6PyAaJkqy
q+QBqsPjKIp6kYw62jtvMDbt+/LoF+4993K5b4Y0fQFh0k6K87P9gIhoWJzeSdTBOyzNNrNMF0uyLosT
zW7augewX+ghbV8BkartNFtiabenU2XKmY+IhqnSq9mUYSVYnYpSY0ZKLkTasYtwSUVM5DZsuo2MnVLw
7W4CjqNZfyKiYaIkYs9iVeK2xYWJM8cog0kOW8GjgpUM24OYdEWyL2nrfOBfEUBS6HKu61ezJ2QJqtBV
/weICGTdskWErF3oGw4I+A4LpgTtu1iCBgAAAABJRU5ErkJggg==
</value>
</data>
<metadata name="toolStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>126, 17</value>
</metadata>
<data name="bt1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAELSURBVDhPrZDJasJQGIXzUvoO9TX0jcQuSulCLUUECwot
KtrSAbQWRDTg0CLBCY1xqmkcYo7c8ItJYy9Z+MHhLu453+IXzkbypY6/SeRriKXLiKaKZqh6Gjb4j+v4
M7y+AF9y/yRS3UkomkbmvcaXxLMVqjsJhh/N8SE0sXP38El1J1t9Z0oOIprYiSQLVLdjGAZUbYOhopoC
z4X/tOAm8UoTO+uNjslcgzSY8wVXsTxNjug7Awt1jb68RFOa8AWXtxmaHdFWW8jTX7R7M1RbMl/APq2w
w81+VugMF6i3FZTEgXuB9XBfnSkqjRHeyl33AuvhxO8xitU+ch+SOwF7eeEK2Keb0OQcCMIe3/X1lqrb
NIsAAAAASUVORK5CYII=
</value>
</data>
<data name="bt2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJYSURBVDhPvZFbSBNQHIf30ENPFmlRCEWWhD0MA0Oqh5Ck
m6KUZoWRJpS3LhiKbVPbvE53c+pKh7lN19RptTIMK4RCkQgtdZSYmgVFpZgZKnn7GptokkEP0R9+L+ec
7zs/zhH8l8kpMSPTWriSbyJPZ0WiNDK/9XcTnawjLF7lhC6IKsh0yFKyDUQllyCoN2tYLo218j/ekiAp
JTxRRWh8oUvQ22VkcrTOmR8jFqaHDFhNKmzm7GUlYQlqQuO0BMcWI6irVDMxUr0Env1UyrQ9ieqKfKrK
cjGUZKIvzOC6UkyxPHWptMaoYOKLcQGec8D0isEeu2x+E9wsl/P9o34BbqpXOPPAWkCDRc6dqlyshiws
ehkm3VVuaNMoU4vRKUQuWZU+l7F3Rc7aAy1SbNVqZgdkMJi9NG8da/0S6EmGV4l01kZwKSYEgUGXxbe+
fHiv5G6NiraHStehX6u/jIL2cGZag5h8FMCbSiHnTx9wCcq1Ur6+ljHYmo7NomSuXwrdcS6wM8YBnmCm
LYTJ5v2MNe5huH4HsnhvTgZ6uN6iVJ3OcJeIW2YFHU8dTXqSHIKz0HGKuWdHmHpyiPGmvYzY/Phc40N7
zmoig7zw2+bmEugKxHQ3Z3DbXAB9GfDCUff5MaZaghl/HMBogz9DViEfjFuxK92Rxm7Bd7vn4k8U5aVS
Z8rHfi+Bdo1gIW3KFTTLV3I/cxW1aWsxpHpy7fImIg9vxt9346JAk52CRnqOPFE0kovHnQ9zJiKQowd3
sW+3kJ1Cb3y8PNm4wYN1a9xY7z5f/d+MQPATMS7uX9kMtOAAAAAASUVORK5CYII=
</value>
</data>
<data name="bt3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIvSURBVDhPrZLdS9NRGMd//0L33QRddFtTYzgXq8GvXENZ
Ngwrwl5+kWZpukwTFSvTqPkG2QqXTlqtJuGkIl/AFCkRZSpZmrmiJQ41xSaCwdfznP3yuIouogeem8P5
fM55XqT/Es+fhUHpa11Ci3cRD93zaGoM4a5jGnW1X2C/FcD18kmUloyjsOAt8nJHcP6cHyouSQR2dQK1
NSv4WyyvrMKU2oVDqU95qrgkeZ8scEFlxTf16u9BcGh+GbssL6DRKLAe9AiB+8EcF5SWfFWvR8dP+GNw
ATFmHwouTeGApVkInA0zXHDR9kFFRGyEhydC2CZ7kZM9huQkpxDU3w5yQdbZERWLxK9wnz+IzQY3FGUA
ZrNDCGqqP3OBcmpARf8Md/Z/wqb4Rhw+8gqJiXVCcKNyCh3tYKMEjh1/A+vRXt5tahjVTN+mlyNwN1Ks
LyHLdiG4UjaBNh/YDgDNrh9s7t9Rfm2WN5UaRjVnZvjX4f3JrTAaK4TgcuEYPI+A+85VtjhhmNKyo9KS
bkPamaIInMTgfR4YDGVCYMsbZTBQXRXmLxNE5zE6GYPvZzA6OQsl9yr2mFo4rNvtgl5fJAS0lo47WP82
CQg+nX8T7wJzCEwv4kKxHbEGF4ObEJtwD7r4fCHIzBhidS9xeKvRgy07ZDxu64GvvQ8d3f3ofT2IvWYr
NPoGxDF4u7YeWm1OtODkiR6+nrRhtCQ0ZxoVdZsaRjXTq5QE74zLEoJ/D0laA2xoOmtG+TV7AAAAAElF
TkSuQmCC
</value>
</data>
<data name="bt4.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIqSURBVDhPrZL7T1JxAMVZP/b/tLa2Wm21mail1YZlRjid
k6JhTApClhGmktrDWlKjK3OBDrLAMWJaY9MZZJbo0umWQIEFXRPQMB6ne788HFpbW322s93d3fM598X5
7xjtUxh0vId5dOaPMY14kL18O6zgrcePrWz8TMIbWMGgbQIlZy6DW31pu4Qts0ml0gjRETjdH0iGHC4Y
LONwz/hQJVITQbZSiN7qxsfPdHYzA7u8Go1jdnEZJruLLP92XWsaB5sks+4LhgvWbc5puDxeVDaocOSs
HBrtM9zps21KFJ1PSHnENZ9fzS0HwzHML4XRa3CglC+Dsqsfj0xjKGVEpNzUpof6/hAoyxs8MDqhf/4a
tyk7rt4yQtyiBb+xA+U1ChSfluLkuevo1lkhUWlRnHuMm49fIBKLk+WtJJIprMcT5E6+0uv49CUKeTuF
OmkXcweyjEB1zwzLq3d46nCDMr/E3b5hqHsGIGvXQdTcA8HFDvAaWnBUIEfRKQnOM+cqhdew/7goI1B2
D8AfCGU3C4msbcAbXMVOcEh2UBzwxW0oqZZi1+GajKC504DpuSUw7ywPe/wtmsCcfw1jszQpW7OCY7UK
7KsQbgqUGgqaXhN8oTjoWBqB72ksLqcwsfADw5NR9DtXSDGXQzwxKecF9ZJWyG7oMDrpJ9/2b1IgYJGo
HqKiTokywRVwmd+0qKoJB3mNOHDiAvaWC7GnrB67ubX5YkH53+BwfgHgHTGbZU7qDAAAAABJRU5ErkJg
gg==
</value>
</data>
<data name="bt5.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIqSURBVDhPrZL7T1JxAMVZP/b/tLa2Wm21mail1YZlRjid
k6JhTApClhGmktrDWlKjK3OBDrLAMWJaY9MZZJbo0umWQIEFXRPQMB6ne788HFpbW322s93d3fM598X5
7xjtUxh0vId5dOaPMY14kL18O6zgrcePrWz8TMIbWMGgbQIlZy6DW31pu4Qts0ml0gjRETjdH0iGHC4Y
LONwz/hQJVITQbZSiN7qxsfPdHYzA7u8Go1jdnEZJruLLP92XWsaB5sks+4LhgvWbc5puDxeVDaocOSs
HBrtM9zps21KFJ1PSHnENZ9fzS0HwzHML4XRa3CglC+Dsqsfj0xjKGVEpNzUpof6/hAoyxs8MDqhf/4a
tyk7rt4yQtyiBb+xA+U1ChSfluLkuevo1lkhUWlRnHuMm49fIBKLk+WtJJIprMcT5E6+0uv49CUKeTuF
OmkXcweyjEB1zwzLq3d46nCDMr/E3b5hqHsGIGvXQdTcA8HFDvAaWnBUIEfRKQnOM+cqhdew/7goI1B2
D8AfCGU3C4msbcAbXMVOcEh2UBzwxW0oqZZi1+GajKC504DpuSUw7ywPe/wtmsCcfw1jszQpW7OCY7UK
7KsQbgqUGgqaXhN8oTjoWBqB72ksLqcwsfADw5NR9DtXSDGXQzwxKecF9ZJWyG7oMDrpJ9/2b1IgYJGo
HqKiTokywRVwmd+0qKoJB3mNOHDiAvaWC7GnrB67ubX5YkH53+BwfgHgHTGbZU7qDAAAAABJRU5ErkJg
gg==
</value>
</data>
<data name="bt6.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIqSURBVDhPrZL7T1JxAMVZP/b/tLa2Wm21mail1YZlRjid
k6JhTApClhGmktrDWlKjK3OBDrLAMWJaY9MZZJbo0umWQIEFXRPQMB6ne788HFpbW322s93d3fM598X5
7xjtUxh0vId5dOaPMY14kL18O6zgrcePrWz8TMIbWMGgbQIlZy6DW31pu4Qts0ml0gjRETjdH0iGHC4Y
LONwz/hQJVITQbZSiN7qxsfPdHYzA7u8Go1jdnEZJruLLP92XWsaB5sks+4LhgvWbc5puDxeVDaocOSs
HBrtM9zps21KFJ1PSHnENZ9fzS0HwzHML4XRa3CglC+Dsqsfj0xjKGVEpNzUpof6/hAoyxs8MDqhf/4a
tyk7rt4yQtyiBb+xA+U1ChSfluLkuevo1lkhUWlRnHuMm49fIBKLk+WtJJIprMcT5E6+0uv49CUKeTuF
OmkXcweyjEB1zwzLq3d46nCDMr/E3b5hqHsGIGvXQdTcA8HFDvAaWnBUIEfRKQnOM+cqhdew/7goI1B2
D8AfCGU3C4msbcAbXMVOcEh2UBzwxW0oqZZi1+GajKC504DpuSUw7ywPe/wtmsCcfw1jszQpW7OCY7UK
7KsQbgqUGgqaXhN8oTjoWBqB72ksLqcwsfADw5NR9DtXSDGXQzwxKecF9ZJWyG7oMDrpJ9/2b1IgYJGo
HqKiTokywRVwmd+0qKoJB3mNOHDiAvaWC7GnrB67ubX5YkH53+BwfgHgHTGbZU7qDAAAAABJRU5ErkJg
gg==
</value>
</data>
<metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>225, 17</value>
</metadata>
<metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>335, 17</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>51</value>
</metadata>
</root>

View File

@@ -1,35 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 이 코드는 템플릿에서 생성되었습니다.
//
// 이 파일을 수동으로 변경하면 응용 프로그램에서 예기치 않은 동작이 발생할 수 있습니다.
// 이 파일을 수동으로 변경하면 코드가 다시 생성될 때 변경 내용을 덮어씁니다.
// </auto-generated>
//------------------------------------------------------------------------------
namespace JobReportMailService
{
using System;
using System.Collections.Generic;
public partial class MailData
{
public int idx { get; set; }
public Nullable<int> project { get; set; }
public string gcode { get; set; }
public string cate { get; set; }
public string pdate { get; set; }
public string subject { get; set; }
public string fromlist { get; set; }
public string tolist { get; set; }
public string bcc { get; set; }
public string cc { get; set; }
public string body { get; set; }
public Nullable<bool> SendOK { get; set; }
public string SendMsg { get; set; }
public Nullable<int> aidx { get; set; }
public string atime { get; set; }
public string wuid { get; set; }
public System.DateTime wdate { get; set; }
}
}

View File

@@ -1,35 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 이 코드는 템플릿에서 생성되었습니다.
//
// 이 파일을 수동으로 변경하면 응용 프로그램에서 예기치 않은 동작이 발생할 수 있습니다.
// 이 파일을 수동으로 변경하면 코드가 다시 생성될 때 변경 내용을 덮어씁니다.
// </auto-generated>
//------------------------------------------------------------------------------
namespace JobReportMailService
{
using System;
using System.Collections.Generic;
public partial class MailForm
{
public int idx { get; set; }
public string gcode { get; set; }
public string cate { get; set; }
public string title { get; set; }
public string tolist { get; set; }
public string bcc { get; set; }
public string cc { get; set; }
public string subject { get; set; }
public string tail { get; set; }
public string body { get; set; }
public Nullable<bool> selfTo { get; set; }
public Nullable<bool> selfCC { get; set; }
public Nullable<bool> selfBCC { get; set; }
public string wuid { get; set; }
public System.DateTime wdate { get; set; }
public string exceptmail { get; set; }
public string exceptmailcc { get; set; }
}
}

View File

@@ -1,38 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 이 코드는 템플릿에서 생성되었습니다.
//
// 이 파일을 수동으로 변경하면 응용 프로그램에서 예기치 않은 동작이 발생할 수 있습니다.
// 이 파일을 수동으로 변경하면 코드가 다시 생성될 때 변경 내용을 덮어씁니다.
// </auto-generated>
//------------------------------------------------------------------------------
namespace JobReportMailService
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
public partial class EEEntities : DbContext
{
public EEEntities()
: base("name=EEEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<JobReport> JobReport { get; set; }
public virtual DbSet<MailData> MailData { get; set; }
public virtual DbSet<vGroupUser> vGroupUser { get; set; }
public virtual DbSet<HolidayLIst> HolidayLIst { get; set; }
public virtual DbSet<MailForm> MailForm { get; set; }
public virtual DbSet<EETGW_ProjectToDo> EETGW_ProjectToDo { get; set; }
public virtual DbSet<Projects> Projects { get; set; }
public virtual DbSet<EETGW_ProjectsSchedule> EETGW_ProjectsSchedule { get; set; }
public virtual DbSet<vJobReportForUser> vJobReportForUser { get; set; }
}
}

View File

@@ -1,636 +0,0 @@
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF6.Utility.CS.ttinclude"#><#@
output extension=".cs"#><#
const string inputFile = @"Model1.edmx";
var textTransform = DynamicTextTransformation.Create(this);
var code = new CodeGenerationTools(this);
var ef = new MetadataTools(this);
var typeMapper = new TypeMapper(code, ef, textTransform.Errors);
var loader = new EdmMetadataLoader(textTransform.Host, textTransform.Errors);
var itemCollection = loader.CreateEdmItemCollection(inputFile);
var modelNamespace = loader.GetModelNamespace(inputFile);
var codeStringGenerator = new CodeStringGenerator(code, typeMapper, ef);
var container = itemCollection.OfType<EntityContainer>().FirstOrDefault();
if (container == null)
{
return string.Empty;
}
#>
//------------------------------------------------------------------------------
// <auto-generated>
// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine1")#>
//
// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine2")#>
// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine3")#>
// </auto-generated>
//------------------------------------------------------------------------------
<#
var codeNamespace = code.VsNamespaceSuggestion();
if (!String.IsNullOrEmpty(codeNamespace))
{
#>
namespace <#=code.EscapeNamespace(codeNamespace)#>
{
<#
PushIndent(" ");
}
#>
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
<#
if (container.FunctionImports.Any())
{
#>
using System.Data.Entity.Core.Objects;
using System.Linq;
<#
}
#>
<#=Accessibility.ForType(container)#> partial class <#=code.Escape(container)#> : DbContext
{
public <#=code.Escape(container)#>()
: base("name=<#=container.Name#>")
{
<#
if (!loader.IsLazyLoadingEnabled(container))
{
#>
this.Configuration.LazyLoadingEnabled = false;
<#
}
foreach (var entitySet in container.BaseEntitySets.OfType<EntitySet>())
{
// Note: the DbSet members are defined below such that the getter and
// setter always have the same accessibility as the DbSet definition
if (Accessibility.ForReadOnlyProperty(entitySet) != "public")
{
#>
<#=codeStringGenerator.DbSetInitializer(entitySet)#>
<#
}
}
#>
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
<#
foreach (var entitySet in container.BaseEntitySets.OfType<EntitySet>())
{
#>
<#=codeStringGenerator.DbSet(entitySet)#>
<#
}
foreach (var edmFunction in container.FunctionImports)
{
WriteFunctionImport(typeMapper, codeStringGenerator, edmFunction, modelNamespace, includeMergeOption: false);
}
#>
}
<#
if (!String.IsNullOrEmpty(codeNamespace))
{
PopIndent();
#>
}
<#
}
#>
<#+
private void WriteFunctionImport(TypeMapper typeMapper, CodeStringGenerator codeStringGenerator, EdmFunction edmFunction, string modelNamespace, bool includeMergeOption)
{
if (typeMapper.IsComposable(edmFunction))
{
#>
[DbFunction("<#=edmFunction.NamespaceName#>", "<#=edmFunction.Name#>")]
<#=codeStringGenerator.ComposableFunctionMethod(edmFunction, modelNamespace)#>
{
<#+
codeStringGenerator.WriteFunctionParameters(edmFunction, WriteFunctionParameter);
#>
<#=codeStringGenerator.ComposableCreateQuery(edmFunction, modelNamespace)#>
}
<#+
}
else
{
#>
<#=codeStringGenerator.FunctionMethod(edmFunction, modelNamespace, includeMergeOption)#>
{
<#+
codeStringGenerator.WriteFunctionParameters(edmFunction, WriteFunctionParameter);
#>
<#=codeStringGenerator.ExecuteFunction(edmFunction, modelNamespace, includeMergeOption)#>
}
<#+
if (typeMapper.GenerateMergeOptionFunction(edmFunction, includeMergeOption))
{
WriteFunctionImport(typeMapper, codeStringGenerator, edmFunction, modelNamespace, includeMergeOption: true);
}
}
}
public void WriteFunctionParameter(string name, string isNotNull, string notNullInit, string nullInit)
{
#>
var <#=name#> = <#=isNotNull#> ?
<#=notNullInit#> :
<#=nullInit#>;
<#+
}
public const string TemplateId = "CSharp_DbContext_Context_EF6";
public class CodeStringGenerator
{
private readonly CodeGenerationTools _code;
private readonly TypeMapper _typeMapper;
private readonly MetadataTools _ef;
public CodeStringGenerator(CodeGenerationTools code, TypeMapper typeMapper, MetadataTools ef)
{
ArgumentNotNull(code, "code");
ArgumentNotNull(typeMapper, "typeMapper");
ArgumentNotNull(ef, "ef");
_code = code;
_typeMapper = typeMapper;
_ef = ef;
}
public string Property(EdmProperty edmProperty)
{
return string.Format(
CultureInfo.InvariantCulture,
"{0} {1} {2} {{ {3}get; {4}set; }}",
Accessibility.ForProperty(edmProperty),
_typeMapper.GetTypeName(edmProperty.TypeUsage),
_code.Escape(edmProperty),
_code.SpaceAfter(Accessibility.ForGetter(edmProperty)),
_code.SpaceAfter(Accessibility.ForSetter(edmProperty)));
}
public string NavigationProperty(NavigationProperty navProp)
{
var endType = _typeMapper.GetTypeName(navProp.ToEndMember.GetEntityType());
return string.Format(
CultureInfo.InvariantCulture,
"{0} {1} {2} {{ {3}get; {4}set; }}",
AccessibilityAndVirtual(Accessibility.ForNavigationProperty(navProp)),
navProp.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many ? ("ICollection<" + endType + ">") : endType,
_code.Escape(navProp),
_code.SpaceAfter(Accessibility.ForGetter(navProp)),
_code.SpaceAfter(Accessibility.ForSetter(navProp)));
}
public string AccessibilityAndVirtual(string accessibility)
{
return accessibility + (accessibility != "private" ? " virtual" : "");
}
public string EntityClassOpening(EntityType entity)
{
return string.Format(
CultureInfo.InvariantCulture,
"{0} {1}partial class {2}{3}",
Accessibility.ForType(entity),
_code.SpaceAfter(_code.AbstractOption(entity)),
_code.Escape(entity),
_code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)));
}
public string EnumOpening(SimpleType enumType)
{
return string.Format(
CultureInfo.InvariantCulture,
"{0} enum {1} : {2}",
Accessibility.ForType(enumType),
_code.Escape(enumType),
_code.Escape(_typeMapper.UnderlyingClrType(enumType)));
}
public void WriteFunctionParameters(EdmFunction edmFunction, Action<string, string, string, string> writeParameter)
{
var parameters = FunctionImportParameter.Create(edmFunction.Parameters, _code, _ef);
foreach (var parameter in parameters.Where(p => p.NeedsLocalVariable))
{
var isNotNull = parameter.IsNullableOfT ? parameter.FunctionParameterName + ".HasValue" : parameter.FunctionParameterName + " != null";
var notNullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", " + parameter.FunctionParameterName + ")";
var nullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", typeof(" + TypeMapper.FixNamespaces(parameter.RawClrTypeName) + "))";
writeParameter(parameter.LocalVariableName, isNotNull, notNullInit, nullInit);
}
}
public string ComposableFunctionMethod(EdmFunction edmFunction, string modelNamespace)
{
var parameters = _typeMapper.GetParameters(edmFunction);
return string.Format(
CultureInfo.InvariantCulture,
"{0} IQueryable<{1}> {2}({3})",
AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction)),
_typeMapper.GetTypeName(_typeMapper.GetReturnType(edmFunction), modelNamespace),
_code.Escape(edmFunction),
string.Join(", ", parameters.Select(p => TypeMapper.FixNamespaces(p.FunctionParameterType) + " " + p.FunctionParameterName).ToArray()));
}
public string ComposableCreateQuery(EdmFunction edmFunction, string modelNamespace)
{
var parameters = _typeMapper.GetParameters(edmFunction);
return string.Format(
CultureInfo.InvariantCulture,
"return ((IObjectContextAdapter)this).ObjectContext.CreateQuery<{0}>(\"[{1}].[{2}]({3})\"{4});",
_typeMapper.GetTypeName(_typeMapper.GetReturnType(edmFunction), modelNamespace),
edmFunction.NamespaceName,
edmFunction.Name,
string.Join(", ", parameters.Select(p => "@" + p.EsqlParameterName).ToArray()),
_code.StringBefore(", ", string.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray())));
}
public string FunctionMethod(EdmFunction edmFunction, string modelNamespace, bool includeMergeOption)
{
var parameters = _typeMapper.GetParameters(edmFunction);
var returnType = _typeMapper.GetReturnType(edmFunction);
var paramList = String.Join(", ", parameters.Select(p => TypeMapper.FixNamespaces(p.FunctionParameterType) + " " + p.FunctionParameterName).ToArray());
if (includeMergeOption)
{
paramList = _code.StringAfter(paramList, ", ") + "MergeOption mergeOption";
}
return string.Format(
CultureInfo.InvariantCulture,
"{0} {1} {2}({3})",
AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction)),
returnType == null ? "int" : "ObjectResult<" + _typeMapper.GetTypeName(returnType, modelNamespace) + ">",
_code.Escape(edmFunction),
paramList);
}
public string ExecuteFunction(EdmFunction edmFunction, string modelNamespace, bool includeMergeOption)
{
var parameters = _typeMapper.GetParameters(edmFunction);
var returnType = _typeMapper.GetReturnType(edmFunction);
var callParams = _code.StringBefore(", ", String.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray()));
if (includeMergeOption)
{
callParams = ", mergeOption" + callParams;
}
return string.Format(
CultureInfo.InvariantCulture,
"return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction{0}(\"{1}\"{2});",
returnType == null ? "" : "<" + _typeMapper.GetTypeName(returnType, modelNamespace) + ">",
edmFunction.Name,
callParams);
}
public string DbSet(EntitySet entitySet)
{
return string.Format(
CultureInfo.InvariantCulture,
"{0} virtual DbSet<{1}> {2} {{ get; set; }}",
Accessibility.ForReadOnlyProperty(entitySet),
_typeMapper.GetTypeName(entitySet.ElementType),
_code.Escape(entitySet));
}
public string DbSetInitializer(EntitySet entitySet)
{
return string.Format(
CultureInfo.InvariantCulture,
"{0} = Set<{1}>();",
_code.Escape(entitySet),
_typeMapper.GetTypeName(entitySet.ElementType));
}
public string UsingDirectives(bool inHeader, bool includeCollections = true)
{
return inHeader == string.IsNullOrEmpty(_code.VsNamespaceSuggestion())
? string.Format(
CultureInfo.InvariantCulture,
"{0}using System;{1}" +
"{2}",
inHeader ? Environment.NewLine : "",
includeCollections ? (Environment.NewLine + "using System.Collections.Generic;") : "",
inHeader ? "" : Environment.NewLine)
: "";
}
}
public class TypeMapper
{
private const string ExternalTypeNameAttributeName = @"http://schemas.microsoft.com/ado/2006/04/codegeneration:ExternalTypeName";
private readonly System.Collections.IList _errors;
private readonly CodeGenerationTools _code;
private readonly MetadataTools _ef;
public static string FixNamespaces(string typeName)
{
return typeName.Replace("System.Data.Spatial.", "System.Data.Entity.Spatial.");
}
public TypeMapper(CodeGenerationTools code, MetadataTools ef, System.Collections.IList errors)
{
ArgumentNotNull(code, "code");
ArgumentNotNull(ef, "ef");
ArgumentNotNull(errors, "errors");
_code = code;
_ef = ef;
_errors = errors;
}
public string GetTypeName(TypeUsage typeUsage)
{
return typeUsage == null ? null : GetTypeName(typeUsage.EdmType, _ef.IsNullable(typeUsage), modelNamespace: null);
}
public string GetTypeName(EdmType edmType)
{
return GetTypeName(edmType, isNullable: null, modelNamespace: null);
}
public string GetTypeName(TypeUsage typeUsage, string modelNamespace)
{
return typeUsage == null ? null : GetTypeName(typeUsage.EdmType, _ef.IsNullable(typeUsage), modelNamespace);
}
public string GetTypeName(EdmType edmType, string modelNamespace)
{
return GetTypeName(edmType, isNullable: null, modelNamespace: modelNamespace);
}
public string GetTypeName(EdmType edmType, bool? isNullable, string modelNamespace)
{
if (edmType == null)
{
return null;
}
var collectionType = edmType as CollectionType;
if (collectionType != null)
{
return String.Format(CultureInfo.InvariantCulture, "ICollection<{0}>", GetTypeName(collectionType.TypeUsage, modelNamespace));
}
var typeName = _code.Escape(edmType.MetadataProperties
.Where(p => p.Name == ExternalTypeNameAttributeName)
.Select(p => (string)p.Value)
.FirstOrDefault())
?? (modelNamespace != null && edmType.NamespaceName != modelNamespace ?
_code.CreateFullName(_code.EscapeNamespace(edmType.NamespaceName), _code.Escape(edmType)) :
_code.Escape(edmType));
if (edmType is StructuralType)
{
return typeName;
}
if (edmType is SimpleType)
{
var clrType = UnderlyingClrType(edmType);
if (!IsEnumType(edmType))
{
typeName = _code.Escape(clrType);
}
typeName = FixNamespaces(typeName);
return clrType.IsValueType && isNullable == true ?
String.Format(CultureInfo.InvariantCulture, "Nullable<{0}>", typeName) :
typeName;
}
throw new ArgumentException("edmType");
}
public Type UnderlyingClrType(EdmType edmType)
{
ArgumentNotNull(edmType, "edmType");
var primitiveType = edmType as PrimitiveType;
if (primitiveType != null)
{
return primitiveType.ClrEquivalentType;
}
if (IsEnumType(edmType))
{
return GetEnumUnderlyingType(edmType).ClrEquivalentType;
}
return typeof(object);
}
public object GetEnumMemberValue(MetadataItem enumMember)
{
ArgumentNotNull(enumMember, "enumMember");
var valueProperty = enumMember.GetType().GetProperty("Value");
return valueProperty == null ? null : valueProperty.GetValue(enumMember, null);
}
public string GetEnumMemberName(MetadataItem enumMember)
{
ArgumentNotNull(enumMember, "enumMember");
var nameProperty = enumMember.GetType().GetProperty("Name");
return nameProperty == null ? null : (string)nameProperty.GetValue(enumMember, null);
}
public System.Collections.IEnumerable GetEnumMembers(EdmType enumType)
{
ArgumentNotNull(enumType, "enumType");
var membersProperty = enumType.GetType().GetProperty("Members");
return membersProperty != null
? (System.Collections.IEnumerable)membersProperty.GetValue(enumType, null)
: Enumerable.Empty<MetadataItem>();
}
public bool EnumIsFlags(EdmType enumType)
{
ArgumentNotNull(enumType, "enumType");
var isFlagsProperty = enumType.GetType().GetProperty("IsFlags");
return isFlagsProperty != null && (bool)isFlagsProperty.GetValue(enumType, null);
}
public bool IsEnumType(GlobalItem edmType)
{
ArgumentNotNull(edmType, "edmType");
return edmType.GetType().Name == "EnumType";
}
public PrimitiveType GetEnumUnderlyingType(EdmType enumType)
{
ArgumentNotNull(enumType, "enumType");
return (PrimitiveType)enumType.GetType().GetProperty("UnderlyingType").GetValue(enumType, null);
}
public string CreateLiteral(object value)
{
if (value == null || value.GetType() != typeof(TimeSpan))
{
return _code.CreateLiteral(value);
}
return string.Format(CultureInfo.InvariantCulture, "new TimeSpan({0})", ((TimeSpan)value).Ticks);
}
public bool VerifyCaseInsensitiveTypeUniqueness(IEnumerable<string> types, string sourceFile)
{
ArgumentNotNull(types, "types");
ArgumentNotNull(sourceFile, "sourceFile");
var hash = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
if (types.Any(item => !hash.Add(item)))
{
_errors.Add(
new CompilerError(sourceFile, -1, -1, "6023",
String.Format(CultureInfo.CurrentCulture, CodeGenerationTools.GetResourceString("Template_CaseInsensitiveTypeConflict"))));
return false;
}
return true;
}
public IEnumerable<SimpleType> GetEnumItemsToGenerate(IEnumerable<GlobalItem> itemCollection)
{
return GetItemsToGenerate<SimpleType>(itemCollection)
.Where(e => IsEnumType(e));
}
public IEnumerable<T> GetItemsToGenerate<T>(IEnumerable<GlobalItem> itemCollection) where T: EdmType
{
return itemCollection
.OfType<T>()
.Where(i => !i.MetadataProperties.Any(p => p.Name == ExternalTypeNameAttributeName))
.OrderBy(i => i.Name);
}
public IEnumerable<string> GetAllGlobalItems(IEnumerable<GlobalItem> itemCollection)
{
return itemCollection
.Where(i => i is EntityType || i is ComplexType || i is EntityContainer || IsEnumType(i))
.Select(g => GetGlobalItemName(g));
}
public string GetGlobalItemName(GlobalItem item)
{
if (item is EdmType)
{
return ((EdmType)item).Name;
}
else
{
return ((EntityContainer)item).Name;
}
}
public IEnumerable<EdmProperty> GetSimpleProperties(EntityType type)
{
return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type);
}
public IEnumerable<EdmProperty> GetSimpleProperties(ComplexType type)
{
return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type);
}
public IEnumerable<EdmProperty> GetComplexProperties(EntityType type)
{
return type.Properties.Where(p => p.TypeUsage.EdmType is ComplexType && p.DeclaringType == type);
}
public IEnumerable<EdmProperty> GetComplexProperties(ComplexType type)
{
return type.Properties.Where(p => p.TypeUsage.EdmType is ComplexType && p.DeclaringType == type);
}
public IEnumerable<EdmProperty> GetPropertiesWithDefaultValues(EntityType type)
{
return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type && p.DefaultValue != null);
}
public IEnumerable<EdmProperty> GetPropertiesWithDefaultValues(ComplexType type)
{
return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type && p.DefaultValue != null);
}
public IEnumerable<NavigationProperty> GetNavigationProperties(EntityType type)
{
return type.NavigationProperties.Where(np => np.DeclaringType == type);
}
public IEnumerable<NavigationProperty> GetCollectionNavigationProperties(EntityType type)
{
return type.NavigationProperties.Where(np => np.DeclaringType == type && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many);
}
public FunctionParameter GetReturnParameter(EdmFunction edmFunction)
{
ArgumentNotNull(edmFunction, "edmFunction");
var returnParamsProperty = edmFunction.GetType().GetProperty("ReturnParameters");
return returnParamsProperty == null
? edmFunction.ReturnParameter
: ((IEnumerable<FunctionParameter>)returnParamsProperty.GetValue(edmFunction, null)).FirstOrDefault();
}
public bool IsComposable(EdmFunction edmFunction)
{
ArgumentNotNull(edmFunction, "edmFunction");
var isComposableProperty = edmFunction.GetType().GetProperty("IsComposableAttribute");
return isComposableProperty != null && (bool)isComposableProperty.GetValue(edmFunction, null);
}
public IEnumerable<FunctionImportParameter> GetParameters(EdmFunction edmFunction)
{
return FunctionImportParameter.Create(edmFunction.Parameters, _code, _ef);
}
public TypeUsage GetReturnType(EdmFunction edmFunction)
{
var returnParam = GetReturnParameter(edmFunction);
return returnParam == null ? null : _ef.GetElementType(returnParam.TypeUsage);
}
public bool GenerateMergeOptionFunction(EdmFunction edmFunction, bool includeMergeOption)
{
var returnType = GetReturnType(edmFunction);
return !includeMergeOption && returnType != null && returnType.EdmType.BuiltInTypeKind == BuiltInTypeKind.EntityType;
}
}
public static void ArgumentNotNull<T>(T arg, string name) where T : class
{
if (arg == null)
{
throw new ArgumentNullException(name);
}
}
#>

View File

@@ -1,10 +0,0 @@
// 모델 'D:\Source\##### 완료아이템\(014) GroupWare\Source\JobReportMailService\Model1.edmx'에 대해 T4 코드 생성이 사용됩니다.
// 레거시 코드 생성을 사용하려면 '코드 생성 전략' 디자이너 속성의 값을
// 'Legacy ObjectContext'로 변경하십시오. 이 속성은 모델이 디자이너에서 열릴 때
// 속성 창에서 사용할 수 있습니다.
// 컨텍스트 및 엔터티 클래스가 생성되지 않은 경우 빈 모델을 만들었기 때문일 수도 있지만
// 사용할 Entity Framework 버전을 선택하지 않았기 때문일 수도 있습니다. 모델에 맞는 컨텍스트 클래스 및
// 엔터티 클래스를 생성하려면 디자이너에서 모델을 열고 디자이너 화면에서 마우스 오른쪽 단추를 클릭한
// 다음 '데이터베이스에서 모델 업데이트...', '모델에서 데이터베이스 생성...' 또는 '코드 생성 항목 추가...'를
// 선택하십시오.

View File

@@ -1,9 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 이 코드는 템플릿에서 생성되었습니다.
//
// 이 파일을 수동으로 변경하면 응용 프로그램에서 예기치 않은 동작이 발생할 수 있습니다.
// 이 파일을 수동으로 변경하면 코드가 다시 생성될 때 변경 내용을 덮어씁니다.
// </auto-generated>
//------------------------------------------------------------------------------

View File

@@ -1,887 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="3.0" xmlns:edmx="http://schemas.microsoft.com/ado/2009/11/edmx">
<!-- EF Runtime content -->
<edmx:Runtime>
<!-- SSDL content -->
<edmx:StorageModels>
<Schema Namespace="EEModel.Store" Provider="System.Data.SqlClient" ProviderManifestToken="2008" Alias="Self" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm/ssdl">
<EntityType Name="EETGW_ProjectsSchedule">
<Key>
<PropertyRef Name="idx" />
</Key>
<Property Name="idx" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />
<Property Name="gcode" Type="varchar" MaxLength="20" />
<Property Name="project" Type="int" />
<Property Name="no" Type="int" />
<Property Name="seq" Type="int" />
<Property Name="title" Type="varchar" MaxLength="100" />
<Property Name="cate" Type="varchar" MaxLength="20" />
<Property Name="sw" Type="varchar" MaxLength="10" />
<Property Name="ew" Type="varchar" MaxLength="10" />
<Property Name="swa" Type="varchar" MaxLength="10" />
<Property Name="ewa" Type="varchar" MaxLength="10" />
<Property Name="uid" Type="varchar" MaxLength="50" />
<Property Name="memo" Type="varchar(max)" />
<Property Name="appoval" Type="int" />
<Property Name="progress" Type="int" />
<Property Name="wuid" Type="varchar" MaxLength="20" Nullable="false" />
<Property Name="wdate" Type="smalldatetime" Nullable="false" />
</EntityType>
<EntityType Name="EETGW_ProjectToDo">
<Key>
<PropertyRef Name="idx" />
</Key>
<Property Name="idx" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />
<Property Name="gcode" Type="varchar" MaxLength="10" />
<Property Name="pidx" Type="int" Nullable="false" />
<Property Name="pseq" Type="int" />
<Property Name="no" Type="int" />
<Property Name="sw" Type="int" />
<Property Name="ww" Type="int" />
<Property Name="sort" Type="varchar" MaxLength="2" />
<Property Name="cate" Type="nvarchar" MaxLength="100" />
<Property Name="title" Type="nvarchar" MaxLength="255" />
<Property Name="pdate" Type="varchar" MaxLength="10" />
<Property Name="edate" Type="varchar" MaxLength="10" />
<Property Name="process" Type="int" />
<Property Name="remark" Type="varchar(max)" />
<Property Name="remark2" Type="varchar(max)" />
<Property Name="wuid" Type="varchar" MaxLength="20" Nullable="false" />
<Property Name="wdate" Type="smalldatetime" Nullable="false" />
</EntityType>
<EntityType Name="HolidayLIst">
<Key>
<PropertyRef Name="idx" />
</Key>
<Property Name="idx" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />
<Property Name="pdate" Type="varchar" MaxLength="10" />
<Property Name="free" Type="bit" />
<Property Name="memo" Type="nvarchar" MaxLength="255" />
<Property Name="wuid" Type="varchar" MaxLength="20" Nullable="false" />
<Property Name="wdate" Type="smalldatetime" Nullable="false" />
</EntityType>
<EntityType Name="JobReport">
<Key>
<PropertyRef Name="idx" />
</Key>
<Property Name="idx" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />
<Property Name="gcode" Type="varchar" MaxLength="10" Nullable="false" />
<Property Name="pdate" Type="varchar" MaxLength="10" />
<Property Name="pidx" Type="int" />
<Property Name="projectName" Type="nvarchar" MaxLength="255" />
<Property Name="uid" Type="varchar" MaxLength="20" />
<Property Name="requestpart" Type="varchar" MaxLength="50" />
<Property Name="package" Type="varchar" MaxLength="50" />
<Property Name="status" Type="varchar" MaxLength="20" />
<Property Name="type" Type="varchar" MaxLength="50" />
<Property Name="process" Type="varchar" MaxLength="50" />
<Property Name="description" Type="nvarchar(max)" />
<Property Name="remark" Type="nvarchar" MaxLength="255" />
<Property Name="hrs" Type="float" />
<Property Name="ot" Type="float" />
<Property Name="otStart" Type="datetime" />
<Property Name="otEnd" Type="datetime" />
<Property Name="import" Type="bit" />
<Property Name="wuid" Type="varchar" MaxLength="20" Nullable="false" />
<Property Name="wdate" Type="smalldatetime" Nullable="false" />
<Property Name="description2" Type="nvarchar(max)" />
<Property Name="tag" Type="varchar" MaxLength="255" />
<Property Name="autoinput" Type="bit" />
<Property Name="kisullv" Type="varchar" MaxLength="10" />
<Property Name="kisuldiv" Type="varchar" MaxLength="100" />
<Property Name="kisulamt" Type="decimal" Precision="18" Scale="3" />
<Property Name="ot2" Type="float" />
<Property Name="otReason" Type="varchar" MaxLength="255" />
<Property Name="otwuid" Type="varchar" MaxLength="20" />
<Property Name="ottime" Type="datetime" />
</EntityType>
<EntityType Name="MailData">
<Key>
<PropertyRef Name="idx" />
</Key>
<Property Name="idx" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />
<Property Name="project" Type="int" />
<Property Name="gcode" Type="varchar" MaxLength="10" Nullable="false" />
<Property Name="cate" Type="varchar" MaxLength="20" />
<Property Name="pdate" Type="varchar" MaxLength="10" />
<Property Name="subject" Type="varchar(max)" />
<Property Name="fromlist" Type="varchar(max)" />
<Property Name="tolist" Type="varchar(max)" />
<Property Name="bcc" Type="varchar(max)" />
<Property Name="cc" Type="varchar(max)" />
<Property Name="body" Type="varchar(max)" />
<Property Name="SendOK" Type="bit" />
<Property Name="SendMsg" Type="varchar" MaxLength="255" />
<Property Name="aidx" Type="int" />
<Property Name="atime" Type="varchar" MaxLength="20" />
<Property Name="wuid" Type="varchar" MaxLength="20" Nullable="false" />
<Property Name="wdate" Type="smalldatetime" Nullable="false" />
</EntityType>
<EntityType Name="MailForm">
<Key>
<PropertyRef Name="idx" />
</Key>
<Property Name="idx" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />
<Property Name="gcode" Type="varchar" MaxLength="10" Nullable="false" />
<Property Name="cate" Type="varchar" MaxLength="2" />
<Property Name="title" Type="varchar" MaxLength="100" />
<Property Name="tolist" Type="varchar(max)" />
<Property Name="bcc" Type="varchar(max)" />
<Property Name="cc" Type="varchar(max)" />
<Property Name="subject" Type="varchar(max)" />
<Property Name="tail" Type="varchar(max)" />
<Property Name="body" Type="varchar(max)" />
<Property Name="selfTo" Type="bit" />
<Property Name="selfCC" Type="bit" />
<Property Name="selfBCC" Type="bit" />
<Property Name="wuid" Type="varchar" MaxLength="20" Nullable="false" />
<Property Name="wdate" Type="smalldatetime" Nullable="false" />
<Property Name="exceptmail" Type="varchar(max)" />
<Property Name="exceptmailcc" Type="varchar(max)" />
</EntityType>
<EntityType Name="Projects">
<Key>
<PropertyRef Name="idx" />
</Key>
<Property Name="idx" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />
<Property Name="pidx" Type="int" />
<Property Name="gcode" Type="varchar" MaxLength="10" Nullable="false" />
<Property Name="isdel" Type="bit" />
<Property Name="category" Type="varchar" MaxLength="50" />
<Property Name="status" Type="varchar" MaxLength="50" />
<Property Name="asset" Type="varchar" MaxLength="100" />
<Property Name="level" Type="int" />
<Property Name="rev" Type="int" />
<Property Name="process" Type="varchar" MaxLength="50" />
<Property Name="part" Type="varchar" MaxLength="50" />
<Property Name="pdate" Type="varchar" MaxLength="10" />
<Property Name="name" Type="nvarchar" MaxLength="255" />
<Property Name="userManager" Type="varchar" MaxLength="50" />
<Property Name="usermain" Type="varchar" MaxLength="50" />
<Property Name="usersub" Type="varchar" MaxLength="50" />
<Property Name="userhw2" Type="varchar" MaxLength="50" />
<Property Name="reqstaff" Type="varchar" MaxLength="50" />
<Property Name="costo" Type="float" />
<Property Name="costn" Type="float" />
<Property Name="cnt" Type="int" />
<Property Name="remark_req" Type="varchar(max)" />
<Property Name="remark_ans" Type="varchar(max)" />
<Property Name="sdate" Type="varchar" MaxLength="50" />
<Property Name="ddate" Type="varchar" MaxLength="50" />
<Property Name="edate" Type="varchar" MaxLength="50" />
<Property Name="odate" Type="varchar" MaxLength="50" />
<Property Name="progress" Type="int" />
<Property Name="memo" Type="nvarchar" MaxLength="255" />
<Property Name="wuid" Type="varchar" MaxLength="20" Nullable="false" />
<Property Name="wdate" Type="smalldatetime" Nullable="false" />
<Property Name="orderno" Type="varchar" MaxLength="50" />
<Property Name="crdue" Type="varchar" MaxLength="10" />
<Property Name="import" Type="bit" />
<Property Name="path" Type="varchar" MaxLength="300" />
<Property Name="userprocess" Type="nvarchar" MaxLength="100" />
<Property Name="CMP_Background" Type="nvarchar(max)" />
<Property Name="CMP_Description" Type="nvarchar(max)" />
<Property Name="CMP_Before" Type="nvarchar(max)" />
<Property Name="CMP_After" Type="nvarchar(max)" />
<Property Name="CMP_After2" Type="nvarchar(max)" />
<Property Name="bCost" Type="bit" />
<Property Name="bFanOut" Type="bit" />
<Property Name="div" Type="varchar" MaxLength="2" />
<Property Name="model" Type="varchar" MaxLength="50" />
<Property Name="serial" Type="varchar" MaxLength="50" />
<Property Name="EB_Site" Type="varchar" MaxLength="20" />
<Property Name="EB_Line" Type="varchar" MaxLength="10" />
<Property Name="EB_Team" Type="varchar" MaxLength="10" />
<Property Name="EB_Model" Type="varchar" MaxLength="100" />
<Property Name="EB_OutSourceName" Type="varchar" MaxLength="100" />
<Property Name="EB_RepairTime" Type="float" />
<Property Name="EB_ConstNew" Type="float" />
<Property Name="EB_BoardName" Type="nvarchar" MaxLength="255" />
<Property Name="bAlert" Type="bit" />
</EntityType>
<!--생성 중 오류 발생:
경고 6002: 테이블/뷰 'EE.dbo.vGroupUser'에 기본 키가 정의되지 않았습니다. 키가 유추되었고 읽기 전용 테이블/뷰로 정의되었습니다.-->
<EntityType Name="vGroupUser">
<Key>
<PropertyRef Name="gcode" />
</Key>
<Property Name="gcode" Type="varchar" MaxLength="10" Nullable="false" />
<Property Name="dept" Type="varchar" MaxLength="100" />
<Property Name="level" Type="smallint" />
<Property Name="name" Type="nvarchar" MaxLength="100" />
<Property Name="nameE" Type="nvarchar" MaxLength="100" />
<Property Name="grade" Type="varchar" MaxLength="10" />
<Property Name="email" Type="varchar" MaxLength="100" />
<Property Name="tel" Type="varchar" MaxLength="20" />
<Property Name="indate" Type="varchar" MaxLength="20" />
<Property Name="outdate" Type="varchar" MaxLength="20" />
<Property Name="hp" Type="varchar" MaxLength="20" />
<Property Name="place" Type="varchar" MaxLength="100" />
<Property Name="ads_employNo" Type="varchar" MaxLength="50" />
<Property Name="ads_title" Type="nvarchar" MaxLength="100" />
<Property Name="ads_created" Type="varchar" MaxLength="50" />
<Property Name="memo" Type="nvarchar" MaxLength="255" />
<Property Name="processs" Type="varchar" MaxLength="50" Nullable="false" />
<Property Name="id" Type="varchar" MaxLength="20" />
<Property Name="state" Type="varchar" MaxLength="20" />
<Property Name="useJobReport" Type="bit" />
<Property Name="useUserState" Type="bit" />
<Property Name="password" Type="varchar" MaxLength="50" />
</EntityType>
<!--생성 중 오류 발생:
경고 6002: 테이블/뷰 'EE.dbo.vJobReportForUser'에 기본 키가 정의되지 않았습니다. 키가 유추되었고 읽기 전용 테이블/뷰로 정의되었습니다.-->
<EntityType Name="vJobReportForUser">
<Key>
<PropertyRef Name="idx" />
<PropertyRef Name="gcode" />
<PropertyRef Name="process" />
<PropertyRef Name="requestpart" />
<PropertyRef Name="package" />
</Key>
<Property Name="idx" Type="int" Nullable="false" />
<Property Name="pdate" Type="varchar" MaxLength="10" />
<Property Name="gcode" Type="varchar" MaxLength="10" Nullable="false" />
<Property Name="id" Type="varchar" MaxLength="20" />
<Property Name="name" Type="nvarchar" MaxLength="100" />
<Property Name="process" Type="varchar" MaxLength="50" Nullable="false" />
<Property Name="type" Type="varchar" MaxLength="50" />
<Property Name="svalue" Type="varchar" MaxLength="255" />
<Property Name="hrs" Type="float" />
<Property Name="ot" Type="float" />
<Property Name="requestpart" Type="varchar" MaxLength="50" Nullable="false" />
<Property Name="package" Type="varchar" MaxLength="50" Nullable="false" />
<Property Name="userProcess" Type="varchar" MaxLength="50" />
<Property Name="status" Type="varchar" MaxLength="20" />
<Property Name="projectName" Type="nvarchar" MaxLength="255" />
<Property Name="description" Type="nvarchar(max)" />
<Property Name="ww" Type="varchar" MaxLength="6" />
<Property Name="otStart" Type="datetime" />
<Property Name="otEnd" Type="datetime" />
<Property Name="ot2" Type="float" />
<Property Name="otReason" Type="varchar" MaxLength="255" />
<Property Name="grade" Type="varchar" MaxLength="10" />
<Property Name="indate" Type="varchar" MaxLength="20" />
<Property Name="outdate" Type="varchar" MaxLength="20" />
</EntityType>
<EntityContainer Name="EEModelStoreContainer">
<EntitySet Name="EETGW_ProjectsSchedule" EntityType="Self.EETGW_ProjectsSchedule" Schema="dbo" store:Type="Tables" />
<EntitySet Name="EETGW_ProjectToDo" EntityType="Self.EETGW_ProjectToDo" Schema="dbo" store:Type="Tables" />
<EntitySet Name="HolidayLIst" EntityType="Self.HolidayLIst" Schema="dbo" store:Type="Tables" />
<EntitySet Name="JobReport" EntityType="Self.JobReport" Schema="dbo" store:Type="Tables" />
<EntitySet Name="MailData" EntityType="Self.MailData" Schema="dbo" store:Type="Tables" />
<EntitySet Name="MailForm" EntityType="Self.MailForm" Schema="dbo" store:Type="Tables" />
<EntitySet Name="Projects" EntityType="Self.Projects" Schema="dbo" store:Type="Tables" />
<EntitySet Name="vGroupUser" EntityType="Self.vGroupUser" store:Type="Views" store:Schema="dbo">
<DefiningQuery>SELECT
[vGroupUser].[gcode] AS [gcode],
[vGroupUser].[dept] AS [dept],
[vGroupUser].[level] AS [level],
[vGroupUser].[name] AS [name],
[vGroupUser].[nameE] AS [nameE],
[vGroupUser].[grade] AS [grade],
[vGroupUser].[email] AS [email],
[vGroupUser].[tel] AS [tel],
[vGroupUser].[indate] AS [indate],
[vGroupUser].[outdate] AS [outdate],
[vGroupUser].[hp] AS [hp],
[vGroupUser].[place] AS [place],
[vGroupUser].[ads_employNo] AS [ads_employNo],
[vGroupUser].[ads_title] AS [ads_title],
[vGroupUser].[ads_created] AS [ads_created],
[vGroupUser].[memo] AS [memo],
[vGroupUser].[processs] AS [processs],
[vGroupUser].[id] AS [id],
[vGroupUser].[state] AS [state],
[vGroupUser].[useJobReport] AS [useJobReport],
[vGroupUser].[useUserState] AS [useUserState],
[vGroupUser].[password] AS [password]
FROM [dbo].[vGroupUser] AS [vGroupUser]</DefiningQuery>
</EntitySet>
<EntitySet Name="vJobReportForUser" EntityType="Self.vJobReportForUser" store:Type="Views" store:Schema="dbo">
<DefiningQuery>SELECT
[vJobReportForUser].[idx] AS [idx],
[vJobReportForUser].[pdate] AS [pdate],
[vJobReportForUser].[gcode] AS [gcode],
[vJobReportForUser].[id] AS [id],
[vJobReportForUser].[name] AS [name],
[vJobReportForUser].[process] AS [process],
[vJobReportForUser].[type] AS [type],
[vJobReportForUser].[svalue] AS [svalue],
[vJobReportForUser].[hrs] AS [hrs],
[vJobReportForUser].[ot] AS [ot],
[vJobReportForUser].[requestpart] AS [requestpart],
[vJobReportForUser].[package] AS [package],
[vJobReportForUser].[userProcess] AS [userProcess],
[vJobReportForUser].[status] AS [status],
[vJobReportForUser].[projectName] AS [projectName],
[vJobReportForUser].[description] AS [description],
[vJobReportForUser].[ww] AS [ww],
[vJobReportForUser].[otStart] AS [otStart],
[vJobReportForUser].[otEnd] AS [otEnd],
[vJobReportForUser].[ot2] AS [ot2],
[vJobReportForUser].[otReason] AS [otReason],
[vJobReportForUser].[grade] AS [grade],
[vJobReportForUser].[indate] AS [indate],
[vJobReportForUser].[outdate] AS [outdate]
FROM [dbo].[vJobReportForUser] AS [vJobReportForUser]</DefiningQuery>
</EntitySet>
</EntityContainer>
</Schema></edmx:StorageModels>
<!-- CSDL content -->
<edmx:ConceptualModels>
<Schema Namespace="EEModel" Alias="Self" annotation:UseStrongSpatialTypes="false" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm">
<EntityType Name="JobReport">
<Key>
<PropertyRef Name="idx" />
</Key>
<Property Name="idx" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
<Property Name="gcode" Type="String" MaxLength="10" FixedLength="false" Unicode="false" Nullable="false" />
<Property Name="pdate" Type="String" MaxLength="10" FixedLength="false" Unicode="false" />
<Property Name="pidx" Type="Int32" />
<Property Name="projectName" Type="String" MaxLength="255" FixedLength="false" Unicode="true" />
<Property Name="uid" Type="String" MaxLength="20" FixedLength="false" Unicode="false" />
<Property Name="requestpart" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="package" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="status" Type="String" MaxLength="20" FixedLength="false" Unicode="false" />
<Property Name="type" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="process" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="description" Type="String" MaxLength="Max" FixedLength="false" Unicode="true" />
<Property Name="remark" Type="String" MaxLength="255" FixedLength="false" Unicode="true" />
<Property Name="hrs" Type="Double" />
<Property Name="ot" Type="Double" />
<Property Name="import" Type="Boolean" />
<Property Name="wuid" Type="String" MaxLength="20" FixedLength="false" Unicode="false" Nullable="false" />
<Property Name="wdate" Type="DateTime" Nullable="false" Precision="0" />
<Property Name="description2" Type="String" MaxLength="Max" FixedLength="false" Unicode="true" />
<Property Name="tag" Type="String" MaxLength="255" FixedLength="false" Unicode="false" />
<Property Name="autoinput" Type="Boolean" />
<Property Name="otStart" Type="DateTime" Precision="3" />
<Property Name="otEnd" Type="DateTime" Precision="3" />
<Property Name="kisullv" Type="String" MaxLength="10" FixedLength="false" Unicode="false" />
<Property Name="kisuldiv" Type="String" MaxLength="100" FixedLength="false" Unicode="false" />
<Property Name="kisulamt" Type="Decimal" Precision="18" Scale="3" />
<Property Name="ot2" Type="Double" />
<Property Name="otReason" Type="String" MaxLength="255" FixedLength="false" Unicode="false" />
<Property Name="otwuid" Type="String" MaxLength="20" FixedLength="false" Unicode="false" />
<Property Name="ottime" Type="DateTime" Precision="3" />
</EntityType>
<EntityType Name="MailData">
<Key>
<PropertyRef Name="idx" />
</Key>
<Property Name="idx" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
<Property Name="project" Type="Int32" />
<Property Name="gcode" Type="String" MaxLength="10" FixedLength="false" Unicode="false" Nullable="false" />
<Property Name="cate" Type="String" MaxLength="20" FixedLength="false" Unicode="false" />
<Property Name="pdate" Type="String" MaxLength="10" FixedLength="false" Unicode="false" />
<Property Name="subject" Type="String" MaxLength="Max" FixedLength="false" Unicode="false" />
<Property Name="fromlist" Type="String" MaxLength="Max" FixedLength="false" Unicode="false" />
<Property Name="tolist" Type="String" MaxLength="Max" FixedLength="false" Unicode="false" />
<Property Name="bcc" Type="String" MaxLength="Max" FixedLength="false" Unicode="false" />
<Property Name="cc" Type="String" MaxLength="Max" FixedLength="false" Unicode="false" />
<Property Name="body" Type="String" MaxLength="Max" FixedLength="false" Unicode="false" />
<Property Name="SendOK" Type="Boolean" />
<Property Name="SendMsg" Type="String" MaxLength="255" FixedLength="false" Unicode="false" />
<Property Name="aidx" Type="Int32" />
<Property Name="atime" Type="String" MaxLength="20" FixedLength="false" Unicode="false" />
<Property Name="wuid" Type="String" MaxLength="20" FixedLength="false" Unicode="false" Nullable="false" />
<Property Name="wdate" Type="DateTime" Nullable="false" Precision="0" />
</EntityType>
<EntityType Name="vGroupUser">
<Key>
<PropertyRef Name="gcode" />
</Key>
<Property Name="gcode" Type="String" MaxLength="10" FixedLength="false" Unicode="false" Nullable="false" />
<Property Name="dept" Type="String" MaxLength="100" FixedLength="false" Unicode="false" />
<Property Name="level" Type="Int16" />
<Property Name="name" Type="String" MaxLength="100" FixedLength="false" Unicode="true" />
<Property Name="nameE" Type="String" MaxLength="100" FixedLength="false" Unicode="true" />
<Property Name="grade" Type="String" MaxLength="10" FixedLength="false" Unicode="false" />
<Property Name="email" Type="String" MaxLength="100" FixedLength="false" Unicode="false" />
<Property Name="tel" Type="String" MaxLength="20" FixedLength="false" Unicode="false" />
<Property Name="indate" Type="String" MaxLength="20" FixedLength="false" Unicode="false" />
<Property Name="outdate" Type="String" MaxLength="20" FixedLength="false" Unicode="false" />
<Property Name="hp" Type="String" MaxLength="20" FixedLength="false" Unicode="false" />
<Property Name="place" Type="String" MaxLength="100" FixedLength="false" Unicode="false" />
<Property Name="ads_employNo" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="ads_title" Type="String" MaxLength="100" FixedLength="false" Unicode="true" />
<Property Name="ads_created" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="memo" Type="String" MaxLength="255" FixedLength="false" Unicode="true" />
<Property Name="processs" Type="String" MaxLength="50" FixedLength="false" Unicode="false" Nullable="false" />
<Property Name="id" Type="String" MaxLength="20" FixedLength="false" Unicode="false" />
<Property Name="state" Type="String" MaxLength="20" FixedLength="false" Unicode="false" />
<Property Name="useJobReport" Type="Boolean" />
<Property Name="useUserState" Type="Boolean" />
<Property Name="password" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
</EntityType>
<EntityContainer Name="EEEntities" annotation:LazyLoadingEnabled="true">
<EntitySet Name="JobReport" EntityType="Self.JobReport" />
<EntitySet Name="MailData" EntityType="Self.MailData" />
<EntitySet Name="vGroupUser" EntityType="Self.vGroupUser" />
<EntitySet Name="HolidayLIst" EntityType="EEModel.HolidayLIst" />
<EntitySet Name="MailForm" EntityType="EEModel.MailForm" />
<EntitySet Name="EETGW_ProjectToDo" EntityType="EEModel.EETGW_ProjectToDo" />
<EntitySet Name="Projects" EntityType="EEModel.Projects" />
<EntitySet Name="EETGW_ProjectsSchedule" EntityType="EEModel.EETGW_ProjectsSchedule" />
<EntitySet Name="vJobReportForUser" EntityType="EEModel.vJobReportForUser" />
</EntityContainer>
<EntityType Name="HolidayLIst">
<Key>
<PropertyRef Name="idx" />
</Key>
<Property Name="idx" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
<Property Name="pdate" Type="String" MaxLength="10" FixedLength="false" Unicode="false" />
<Property Name="free" Type="Boolean" />
<Property Name="memo" Type="String" MaxLength="255" FixedLength="false" Unicode="true" />
<Property Name="wuid" Type="String" Nullable="false" MaxLength="20" FixedLength="false" Unicode="false" />
<Property Name="wdate" Type="DateTime" Nullable="false" Precision="0" />
</EntityType>
<EntityType Name="MailForm">
<Key>
<PropertyRef Name="idx" />
</Key>
<Property Name="idx" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
<Property Name="gcode" Type="String" Nullable="false" MaxLength="10" FixedLength="false" Unicode="false" />
<Property Name="cate" Type="String" MaxLength="2" FixedLength="false" Unicode="false" />
<Property Name="title" Type="String" MaxLength="100" FixedLength="false" Unicode="false" />
<Property Name="tolist" Type="String" MaxLength="Max" FixedLength="false" Unicode="false" />
<Property Name="bcc" Type="String" MaxLength="Max" FixedLength="false" Unicode="false" />
<Property Name="cc" Type="String" MaxLength="Max" FixedLength="false" Unicode="false" />
<Property Name="subject" Type="String" MaxLength="Max" FixedLength="false" Unicode="false" />
<Property Name="tail" Type="String" MaxLength="Max" FixedLength="false" Unicode="false" />
<Property Name="body" Type="String" MaxLength="Max" FixedLength="false" Unicode="false" />
<Property Name="selfTo" Type="Boolean" />
<Property Name="selfCC" Type="Boolean" />
<Property Name="selfBCC" Type="Boolean" />
<Property Name="wuid" Type="String" Nullable="false" MaxLength="20" FixedLength="false" Unicode="false" />
<Property Name="wdate" Type="DateTime" Nullable="false" Precision="0" />
<Property Name="exceptmail" Type="String" MaxLength="Max" FixedLength="false" Unicode="false" />
<Property Name="exceptmailcc" Type="String" MaxLength="Max" FixedLength="false" Unicode="false" />
</EntityType>
<EntityType Name="EETGW_ProjectToDo">
<Key>
<PropertyRef Name="idx" />
</Key>
<Property Name="idx" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
<Property Name="pidx" Type="Int32" Nullable="false" />
<Property Name="pseq" Type="Int32" />
<Property Name="sw" Type="Int32" />
<Property Name="ww" Type="Int32" />
<Property Name="sort" Type="String" MaxLength="2" FixedLength="false" Unicode="false" />
<Property Name="cate" Type="String" MaxLength="100" FixedLength="false" Unicode="true" />
<Property Name="title" Type="String" MaxLength="255" FixedLength="false" Unicode="true" />
<Property Name="pdate" Type="String" MaxLength="10" FixedLength="false" Unicode="false" />
<Property Name="edate" Type="String" MaxLength="10" FixedLength="false" Unicode="false" />
<Property Name="process" Type="Int32" />
<Property Name="remark" Type="String" MaxLength="Max" FixedLength="false" Unicode="false" />
<Property Name="remark2" Type="String" MaxLength="Max" FixedLength="false" Unicode="false" />
<Property Name="wuid" Type="String" Nullable="false" MaxLength="20" FixedLength="false" Unicode="false" />
<Property Name="wdate" Type="DateTime" Nullable="false" Precision="0" />
<Property Name="gcode" Type="String" MaxLength="10" FixedLength="false" Unicode="false" />
<Property Name="no" Type="Int32" />
</EntityType>
<EntityType Name="Projects">
<Key>
<PropertyRef Name="idx" />
</Key>
<Property Name="idx" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
<Property Name="pidx" Type="Int32" />
<Property Name="gcode" Type="String" Nullable="false" MaxLength="10" FixedLength="false" Unicode="false" />
<Property Name="isdel" Type="Boolean" />
<Property Name="category" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="status" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="asset" Type="String" MaxLength="100" FixedLength="false" Unicode="false" />
<Property Name="level" Type="Int32" />
<Property Name="rev" Type="Int32" />
<Property Name="process" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="part" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="pdate" Type="String" MaxLength="10" FixedLength="false" Unicode="false" />
<Property Name="name" Type="String" MaxLength="255" FixedLength="false" Unicode="true" />
<Property Name="userManager" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="usermain" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="usersub" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="userhw2" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="reqstaff" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="costo" Type="Double" />
<Property Name="costn" Type="Double" />
<Property Name="cnt" Type="Int32" />
<Property Name="remark_req" Type="String" MaxLength="Max" FixedLength="false" Unicode="false" />
<Property Name="remark_ans" Type="String" MaxLength="Max" FixedLength="false" Unicode="false" />
<Property Name="sdate" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="ddate" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="edate" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="odate" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="progress" Type="Int32" />
<Property Name="memo" Type="String" MaxLength="255" FixedLength="false" Unicode="true" />
<Property Name="wuid" Type="String" Nullable="false" MaxLength="20" FixedLength="false" Unicode="false" />
<Property Name="wdate" Type="DateTime" Nullable="false" Precision="0" />
<Property Name="orderno" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="crdue" Type="String" MaxLength="10" FixedLength="false" Unicode="false" />
<Property Name="import" Type="Boolean" />
<Property Name="path" Type="String" MaxLength="300" FixedLength="false" Unicode="false" />
<Property Name="userprocess" Type="String" MaxLength="100" FixedLength="false" Unicode="true" />
<Property Name="CMP_Background" Type="String" MaxLength="Max" FixedLength="false" Unicode="true" />
<Property Name="CMP_Description" Type="String" MaxLength="Max" FixedLength="false" Unicode="true" />
<Property Name="CMP_Before" Type="String" MaxLength="Max" FixedLength="false" Unicode="true" />
<Property Name="CMP_After" Type="String" MaxLength="Max" FixedLength="false" Unicode="true" />
<Property Name="bCost" Type="Boolean" />
<Property Name="bFanOut" Type="Boolean" />
<Property Name="div" Type="String" MaxLength="2" FixedLength="false" Unicode="false" />
<Property Name="EB_Site" Type="String" MaxLength="20" FixedLength="false" Unicode="false" />
<Property Name="EB_Line" Type="String" MaxLength="10" FixedLength="false" Unicode="false" />
<Property Name="EB_Team" Type="String" MaxLength="10" FixedLength="false" Unicode="false" />
<Property Name="EB_Model" Type="String" MaxLength="100" FixedLength="false" Unicode="false" />
<Property Name="EB_OutSourceName" Type="String" MaxLength="100" FixedLength="false" Unicode="false" />
<Property Name="EB_RepairTime" Type="Double" />
<Property Name="EB_ConstNew" Type="Double" />
<Property Name="EB_BoardName" Type="String" MaxLength="255" FixedLength="false" Unicode="true" />
<Property Name="CMP_After2" Type="String" MaxLength="Max" FixedLength="false" Unicode="true" />
<Property Name="model" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="serial" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="bAlert" Type="Boolean" />
</EntityType>
<EntityType Name="EETGW_ProjectsSchedule">
<Key>
<PropertyRef Name="idx" />
</Key>
<Property Name="idx" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
<Property Name="gcode" Type="String" MaxLength="20" FixedLength="false" Unicode="false" />
<Property Name="project" Type="Int32" />
<Property Name="no" Type="Int32" />
<Property Name="seq" Type="Int32" />
<Property Name="title" Type="String" MaxLength="100" FixedLength="false" Unicode="false" />
<Property Name="cate" Type="String" MaxLength="20" FixedLength="false" Unicode="false" />
<Property Name="sw" Type="String" MaxLength="10" FixedLength="false" Unicode="false" />
<Property Name="ew" Type="String" MaxLength="10" FixedLength="false" Unicode="false" />
<Property Name="swa" Type="String" MaxLength="10" FixedLength="false" Unicode="false" />
<Property Name="ewa" Type="String" MaxLength="10" FixedLength="false" Unicode="false" />
<Property Name="uid" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="memo" Type="String" MaxLength="Max" FixedLength="false" Unicode="false" />
<Property Name="appoval" Type="Int32" />
<Property Name="progress" Type="Int32" />
<Property Name="wuid" Type="String" Nullable="false" MaxLength="20" FixedLength="false" Unicode="false" />
<Property Name="wdate" Type="DateTime" Nullable="false" Precision="0" />
</EntityType>
<EntityType Name="vJobReportForUser">
<Key>
<PropertyRef Name="idx" />
<PropertyRef Name="gcode" />
<PropertyRef Name="process" />
<PropertyRef Name="requestpart" />
<PropertyRef Name="package" />
</Key>
<Property Name="idx" Type="Int32" Nullable="false" />
<Property Name="pdate" Type="String" MaxLength="10" FixedLength="false" Unicode="false" />
<Property Name="gcode" Type="String" Nullable="false" MaxLength="10" FixedLength="false" Unicode="false" />
<Property Name="id" Type="String" MaxLength="20" FixedLength="false" Unicode="false" />
<Property Name="name" Type="String" MaxLength="100" FixedLength="false" Unicode="true" />
<Property Name="process" Type="String" Nullable="false" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="type" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="svalue" Type="String" MaxLength="255" FixedLength="false" Unicode="false" />
<Property Name="hrs" Type="Double" />
<Property Name="ot" Type="Double" />
<Property Name="requestpart" Type="String" Nullable="false" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="package" Type="String" Nullable="false" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="userProcess" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
<Property Name="status" Type="String" MaxLength="20" FixedLength="false" Unicode="false" />
<Property Name="projectName" Type="String" MaxLength="255" FixedLength="false" Unicode="true" />
<Property Name="description" Type="String" MaxLength="Max" FixedLength="false" Unicode="true" />
<Property Name="ww" Type="String" MaxLength="6" FixedLength="false" Unicode="false" />
<Property Name="otStart" Type="DateTime" Precision="3" />
<Property Name="otEnd" Type="DateTime" Precision="3" />
<Property Name="ot2" Type="Double" />
<Property Name="otReason" Type="String" MaxLength="255" FixedLength="false" Unicode="false" />
<Property Name="grade" Type="String" MaxLength="10" FixedLength="false" Unicode="false" />
<Property Name="indate" Type="String" MaxLength="20" FixedLength="false" Unicode="false" />
<Property Name="outdate" Type="String" MaxLength="20" FixedLength="false" Unicode="false" />
</EntityType>
</Schema>
</edmx:ConceptualModels>
<!-- C-S mapping content -->
<edmx:Mappings>
<Mapping Space="C-S" xmlns="http://schemas.microsoft.com/ado/2009/11/mapping/cs">
<EntityContainerMapping StorageEntityContainer="EEModelStoreContainer" CdmEntityContainer="EEEntities">
<EntitySetMapping Name="JobReport">
<EntityTypeMapping TypeName="EEModel.JobReport">
<MappingFragment StoreEntitySet="JobReport">
<ScalarProperty Name="ottime" ColumnName="ottime" />
<ScalarProperty Name="otwuid" ColumnName="otwuid" />
<ScalarProperty Name="otReason" ColumnName="otReason" />
<ScalarProperty Name="ot2" ColumnName="ot2" />
<ScalarProperty Name="kisulamt" ColumnName="kisulamt" />
<ScalarProperty Name="kisuldiv" ColumnName="kisuldiv" />
<ScalarProperty Name="kisullv" ColumnName="kisullv" />
<ScalarProperty Name="otEnd" ColumnName="otEnd" />
<ScalarProperty Name="otStart" ColumnName="otStart" />
<ScalarProperty Name="autoinput" ColumnName="autoinput" />
<ScalarProperty Name="idx" ColumnName="idx" />
<ScalarProperty Name="gcode" ColumnName="gcode" />
<ScalarProperty Name="pdate" ColumnName="pdate" />
<ScalarProperty Name="pidx" ColumnName="pidx" />
<ScalarProperty Name="projectName" ColumnName="projectName" />
<ScalarProperty Name="uid" ColumnName="uid" />
<ScalarProperty Name="requestpart" ColumnName="requestpart" />
<ScalarProperty Name="package" ColumnName="package" />
<ScalarProperty Name="status" ColumnName="status" />
<ScalarProperty Name="type" ColumnName="type" />
<ScalarProperty Name="process" ColumnName="process" />
<ScalarProperty Name="description" ColumnName="description" />
<ScalarProperty Name="remark" ColumnName="remark" />
<ScalarProperty Name="hrs" ColumnName="hrs" />
<ScalarProperty Name="ot" ColumnName="ot" />
<ScalarProperty Name="import" ColumnName="import" />
<ScalarProperty Name="wuid" ColumnName="wuid" />
<ScalarProperty Name="wdate" ColumnName="wdate" />
<ScalarProperty Name="description2" ColumnName="description2" />
<ScalarProperty Name="tag" ColumnName="tag" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
<EntitySetMapping Name="MailData">
<EntityTypeMapping TypeName="EEModel.MailData">
<MappingFragment StoreEntitySet="MailData">
<ScalarProperty Name="idx" ColumnName="idx" />
<ScalarProperty Name="project" ColumnName="project" />
<ScalarProperty Name="gcode" ColumnName="gcode" />
<ScalarProperty Name="cate" ColumnName="cate" />
<ScalarProperty Name="pdate" ColumnName="pdate" />
<ScalarProperty Name="subject" ColumnName="subject" />
<ScalarProperty Name="fromlist" ColumnName="fromlist" />
<ScalarProperty Name="tolist" ColumnName="tolist" />
<ScalarProperty Name="bcc" ColumnName="bcc" />
<ScalarProperty Name="cc" ColumnName="cc" />
<ScalarProperty Name="body" ColumnName="body" />
<ScalarProperty Name="SendOK" ColumnName="SendOK" />
<ScalarProperty Name="SendMsg" ColumnName="SendMsg" />
<ScalarProperty Name="aidx" ColumnName="aidx" />
<ScalarProperty Name="atime" ColumnName="atime" />
<ScalarProperty Name="wuid" ColumnName="wuid" />
<ScalarProperty Name="wdate" ColumnName="wdate" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
<EntitySetMapping Name="vGroupUser">
<EntityTypeMapping TypeName="EEModel.vGroupUser">
<MappingFragment StoreEntitySet="vGroupUser">
<ScalarProperty Name="password" ColumnName="password" />
<ScalarProperty Name="useUserState" ColumnName="useUserState" />
<ScalarProperty Name="useJobReport" ColumnName="useJobReport" />
<ScalarProperty Name="state" ColumnName="state" />
<ScalarProperty Name="gcode" ColumnName="gcode" />
<ScalarProperty Name="dept" ColumnName="dept" />
<ScalarProperty Name="level" ColumnName="level" />
<ScalarProperty Name="name" ColumnName="name" />
<ScalarProperty Name="nameE" ColumnName="nameE" />
<ScalarProperty Name="grade" ColumnName="grade" />
<ScalarProperty Name="email" ColumnName="email" />
<ScalarProperty Name="tel" ColumnName="tel" />
<ScalarProperty Name="indate" ColumnName="indate" />
<ScalarProperty Name="outdate" ColumnName="outdate" />
<ScalarProperty Name="hp" ColumnName="hp" />
<ScalarProperty Name="place" ColumnName="place" />
<ScalarProperty Name="ads_employNo" ColumnName="ads_employNo" />
<ScalarProperty Name="ads_title" ColumnName="ads_title" />
<ScalarProperty Name="ads_created" ColumnName="ads_created" />
<ScalarProperty Name="memo" ColumnName="memo" />
<ScalarProperty Name="processs" ColumnName="processs" />
<ScalarProperty Name="id" ColumnName="id" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
<EntitySetMapping Name="HolidayLIst">
<EntityTypeMapping TypeName="EEModel.HolidayLIst">
<MappingFragment StoreEntitySet="HolidayLIst">
<ScalarProperty Name="wdate" ColumnName="wdate" />
<ScalarProperty Name="wuid" ColumnName="wuid" />
<ScalarProperty Name="memo" ColumnName="memo" />
<ScalarProperty Name="free" ColumnName="free" />
<ScalarProperty Name="pdate" ColumnName="pdate" />
<ScalarProperty Name="idx" ColumnName="idx" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
<EntitySetMapping Name="MailForm">
<EntityTypeMapping TypeName="EEModel.MailForm">
<MappingFragment StoreEntitySet="MailForm">
<ScalarProperty Name="exceptmailcc" ColumnName="exceptmailcc" />
<ScalarProperty Name="exceptmail" ColumnName="exceptmail" />
<ScalarProperty Name="wdate" ColumnName="wdate" />
<ScalarProperty Name="wuid" ColumnName="wuid" />
<ScalarProperty Name="selfBCC" ColumnName="selfBCC" />
<ScalarProperty Name="selfCC" ColumnName="selfCC" />
<ScalarProperty Name="selfTo" ColumnName="selfTo" />
<ScalarProperty Name="body" ColumnName="body" />
<ScalarProperty Name="tail" ColumnName="tail" />
<ScalarProperty Name="subject" ColumnName="subject" />
<ScalarProperty Name="cc" ColumnName="cc" />
<ScalarProperty Name="bcc" ColumnName="bcc" />
<ScalarProperty Name="tolist" ColumnName="tolist" />
<ScalarProperty Name="title" ColumnName="title" />
<ScalarProperty Name="cate" ColumnName="cate" />
<ScalarProperty Name="gcode" ColumnName="gcode" />
<ScalarProperty Name="idx" ColumnName="idx" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
<EntitySetMapping Name="EETGW_ProjectToDo">
<EntityTypeMapping TypeName="EEModel.EETGW_ProjectToDo">
<MappingFragment StoreEntitySet="EETGW_ProjectToDo">
<ScalarProperty Name="no" ColumnName="no" />
<ScalarProperty Name="gcode" ColumnName="gcode" />
<ScalarProperty Name="wdate" ColumnName="wdate" />
<ScalarProperty Name="wuid" ColumnName="wuid" />
<ScalarProperty Name="remark2" ColumnName="remark2" />
<ScalarProperty Name="remark" ColumnName="remark" />
<ScalarProperty Name="process" ColumnName="process" />
<ScalarProperty Name="edate" ColumnName="edate" />
<ScalarProperty Name="pdate" ColumnName="pdate" />
<ScalarProperty Name="title" ColumnName="title" />
<ScalarProperty Name="cate" ColumnName="cate" />
<ScalarProperty Name="sort" ColumnName="sort" />
<ScalarProperty Name="ww" ColumnName="ww" />
<ScalarProperty Name="sw" ColumnName="sw" />
<ScalarProperty Name="pseq" ColumnName="pseq" />
<ScalarProperty Name="pidx" ColumnName="pidx" />
<ScalarProperty Name="idx" ColumnName="idx" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
<EntitySetMapping Name="Projects">
<EntityTypeMapping TypeName="EEModel.Projects">
<MappingFragment StoreEntitySet="Projects">
<ScalarProperty Name="bAlert" ColumnName="bAlert" />
<ScalarProperty Name="serial" ColumnName="serial" />
<ScalarProperty Name="model" ColumnName="model" />
<ScalarProperty Name="CMP_After2" ColumnName="CMP_After2" />
<ScalarProperty Name="EB_BoardName" ColumnName="EB_BoardName" />
<ScalarProperty Name="EB_ConstNew" ColumnName="EB_ConstNew" />
<ScalarProperty Name="EB_RepairTime" ColumnName="EB_RepairTime" />
<ScalarProperty Name="EB_OutSourceName" ColumnName="EB_OutSourceName" />
<ScalarProperty Name="EB_Model" ColumnName="EB_Model" />
<ScalarProperty Name="EB_Team" ColumnName="EB_Team" />
<ScalarProperty Name="EB_Line" ColumnName="EB_Line" />
<ScalarProperty Name="EB_Site" ColumnName="EB_Site" />
<ScalarProperty Name="div" ColumnName="div" />
<ScalarProperty Name="bFanOut" ColumnName="bFanOut" />
<ScalarProperty Name="bCost" ColumnName="bCost" />
<ScalarProperty Name="CMP_After" ColumnName="CMP_After" />
<ScalarProperty Name="CMP_Before" ColumnName="CMP_Before" />
<ScalarProperty Name="CMP_Description" ColumnName="CMP_Description" />
<ScalarProperty Name="CMP_Background" ColumnName="CMP_Background" />
<ScalarProperty Name="userprocess" ColumnName="userprocess" />
<ScalarProperty Name="path" ColumnName="path" />
<ScalarProperty Name="import" ColumnName="import" />
<ScalarProperty Name="crdue" ColumnName="crdue" />
<ScalarProperty Name="orderno" ColumnName="orderno" />
<ScalarProperty Name="wdate" ColumnName="wdate" />
<ScalarProperty Name="wuid" ColumnName="wuid" />
<ScalarProperty Name="memo" ColumnName="memo" />
<ScalarProperty Name="progress" ColumnName="progress" />
<ScalarProperty Name="odate" ColumnName="odate" />
<ScalarProperty Name="edate" ColumnName="edate" />
<ScalarProperty Name="ddate" ColumnName="ddate" />
<ScalarProperty Name="sdate" ColumnName="sdate" />
<ScalarProperty Name="remark_ans" ColumnName="remark_ans" />
<ScalarProperty Name="remark_req" ColumnName="remark_req" />
<ScalarProperty Name="cnt" ColumnName="cnt" />
<ScalarProperty Name="costn" ColumnName="costn" />
<ScalarProperty Name="costo" ColumnName="costo" />
<ScalarProperty Name="reqstaff" ColumnName="reqstaff" />
<ScalarProperty Name="userhw2" ColumnName="userhw2" />
<ScalarProperty Name="usersub" ColumnName="usersub" />
<ScalarProperty Name="usermain" ColumnName="usermain" />
<ScalarProperty Name="userManager" ColumnName="userManager" />
<ScalarProperty Name="name" ColumnName="name" />
<ScalarProperty Name="pdate" ColumnName="pdate" />
<ScalarProperty Name="part" ColumnName="part" />
<ScalarProperty Name="process" ColumnName="process" />
<ScalarProperty Name="rev" ColumnName="rev" />
<ScalarProperty Name="level" ColumnName="level" />
<ScalarProperty Name="asset" ColumnName="asset" />
<ScalarProperty Name="status" ColumnName="status" />
<ScalarProperty Name="category" ColumnName="category" />
<ScalarProperty Name="isdel" ColumnName="isdel" />
<ScalarProperty Name="gcode" ColumnName="gcode" />
<ScalarProperty Name="pidx" ColumnName="pidx" />
<ScalarProperty Name="idx" ColumnName="idx" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
<EntitySetMapping Name="EETGW_ProjectsSchedule">
<EntityTypeMapping TypeName="EEModel.EETGW_ProjectsSchedule">
<MappingFragment StoreEntitySet="EETGW_ProjectsSchedule">
<ScalarProperty Name="wdate" ColumnName="wdate" />
<ScalarProperty Name="wuid" ColumnName="wuid" />
<ScalarProperty Name="progress" ColumnName="progress" />
<ScalarProperty Name="appoval" ColumnName="appoval" />
<ScalarProperty Name="memo" ColumnName="memo" />
<ScalarProperty Name="uid" ColumnName="uid" />
<ScalarProperty Name="ewa" ColumnName="ewa" />
<ScalarProperty Name="swa" ColumnName="swa" />
<ScalarProperty Name="ew" ColumnName="ew" />
<ScalarProperty Name="sw" ColumnName="sw" />
<ScalarProperty Name="cate" ColumnName="cate" />
<ScalarProperty Name="title" ColumnName="title" />
<ScalarProperty Name="seq" ColumnName="seq" />
<ScalarProperty Name="no" ColumnName="no" />
<ScalarProperty Name="project" ColumnName="project" />
<ScalarProperty Name="gcode" ColumnName="gcode" />
<ScalarProperty Name="idx" ColumnName="idx" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
<EntitySetMapping Name="vJobReportForUser">
<EntityTypeMapping TypeName="EEModel.vJobReportForUser">
<MappingFragment StoreEntitySet="vJobReportForUser">
<ScalarProperty Name="outdate" ColumnName="outdate" />
<ScalarProperty Name="indate" ColumnName="indate" />
<ScalarProperty Name="grade" ColumnName="grade" />
<ScalarProperty Name="otReason" ColumnName="otReason" />
<ScalarProperty Name="ot2" ColumnName="ot2" />
<ScalarProperty Name="otEnd" ColumnName="otEnd" />
<ScalarProperty Name="otStart" ColumnName="otStart" />
<ScalarProperty Name="ww" ColumnName="ww" />
<ScalarProperty Name="description" ColumnName="description" />
<ScalarProperty Name="projectName" ColumnName="projectName" />
<ScalarProperty Name="status" ColumnName="status" />
<ScalarProperty Name="userProcess" ColumnName="userProcess" />
<ScalarProperty Name="package" ColumnName="package" />
<ScalarProperty Name="requestpart" ColumnName="requestpart" />
<ScalarProperty Name="ot" ColumnName="ot" />
<ScalarProperty Name="hrs" ColumnName="hrs" />
<ScalarProperty Name="svalue" ColumnName="svalue" />
<ScalarProperty Name="type" ColumnName="type" />
<ScalarProperty Name="process" ColumnName="process" />
<ScalarProperty Name="name" ColumnName="name" />
<ScalarProperty Name="id" ColumnName="id" />
<ScalarProperty Name="gcode" ColumnName="gcode" />
<ScalarProperty Name="pdate" ColumnName="pdate" />
<ScalarProperty Name="idx" ColumnName="idx" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
</EntityContainerMapping>
</Mapping>
</edmx:Mappings>
</edmx:Runtime>
<!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) -->
<Designer xmlns="http://schemas.microsoft.com/ado/2009/11/edmx">
<Connection>
<DesignerInfoPropertySet>
<DesignerProperty Name="MetadataArtifactProcessing" Value="EmbedInOutputAssembly" />
</DesignerInfoPropertySet>
</Connection>
<Options>
<DesignerInfoPropertySet>
<DesignerProperty Name="ValidateOnBuild" Value="true" />
<DesignerProperty Name="EnablePluralization" Value="false" />
<DesignerProperty Name="IncludeForeignKeysInModel" Value="true" />
<DesignerProperty Name="UseLegacyProvider" Value="false" />
<DesignerProperty Name="CodeGenerationStrategy" Value="없음" />
</DesignerInfoPropertySet>
</Options>
<!-- Diagram content (shape and connector positions) -->
<Diagrams></Diagrams>
</Designer>
</edmx:Edmx>

View File

@@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="3.0" xmlns:edmx="http://schemas.microsoft.com/ado/2009/11/edmx">
<!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) -->
<edmx:Designer xmlns="http://schemas.microsoft.com/ado/2009/11/edmx">
<!-- Diagram content (shape and connector positions) -->
<edmx:Diagrams>
<Diagram DiagramId="c8b8f2389aab4dbe8db51886b86fe9b4" Name="Diagram1">
<EntityTypeShape EntityType="EEModel.JobReport" Width="1.5" PointX="0.75" PointY="0.75" IsExpanded="true" />
<EntityTypeShape EntityType="EEModel.MailData" Width="1.5" PointX="2.75" PointY="0.75" IsExpanded="true" />
<EntityTypeShape EntityType="EEModel.vGroupUser" Width="1.5" PointX="4.75" PointY="5.75" IsExpanded="true" />
<EntityTypeShape EntityType="EEModel.HolidayLIst" Width="1.5" PointX="0.75" PointY="6.75" />
<EntityTypeShape EntityType="EEModel.MailForm" Width="1.5" PointX="7.375" PointY="5.75" />
<EntityTypeShape EntityType="EEModel.EETGW_ProjectToDo" Width="2.875" PointX="10.125" PointY="5.75" />
<EntityTypeShape EntityType="EEModel.Projects" Width="1.5" PointX="9.75" PointY="10.75" />
<EntityTypeShape EntityType="EEModel.EETGW_ProjectsSchedule" Width="1.5" PointX="3.375" PointY="11.75" />
<EntityTypeShape EntityType="EEModel.vJobReportForUser" Width="1.75" PointX="0.75" PointY="9.75" />
</Diagram>
</edmx:Diagrams>
</edmx:Designer>
</edmx:Edmx>

View File

@@ -1,733 +0,0 @@
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF6.Utility.CS.ttinclude"#><#@
output extension=".cs"#><#
const string inputFile = @"Model1.edmx";
var textTransform = DynamicTextTransformation.Create(this);
var code = new CodeGenerationTools(this);
var ef = new MetadataTools(this);
var typeMapper = new TypeMapper(code, ef, textTransform.Errors);
var fileManager = EntityFrameworkTemplateFileManager.Create(this);
var itemCollection = new EdmMetadataLoader(textTransform.Host, textTransform.Errors).CreateEdmItemCollection(inputFile);
var codeStringGenerator = new CodeStringGenerator(code, typeMapper, ef);
if (!typeMapper.VerifyCaseInsensitiveTypeUniqueness(typeMapper.GetAllGlobalItems(itemCollection), inputFile))
{
return string.Empty;
}
WriteHeader(codeStringGenerator, fileManager);
foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))
{
fileManager.StartNewFile(entity.Name + ".cs");
BeginNamespace(code);
#>
<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
<#=codeStringGenerator.EntityClassOpening(entity)#>
{
<#
var propertiesWithDefaultValues = typeMapper.GetPropertiesWithDefaultValues(entity);
var collectionNavigationProperties = typeMapper.GetCollectionNavigationProperties(entity);
var complexProperties = typeMapper.GetComplexProperties(entity);
if (propertiesWithDefaultValues.Any() || collectionNavigationProperties.Any() || complexProperties.Any())
{
#>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public <#=code.Escape(entity)#>()
{
<#
foreach (var edmProperty in propertiesWithDefaultValues)
{
#>
this.<#=code.Escape(edmProperty)#> = <#=typeMapper.CreateLiteral(edmProperty.DefaultValue)#>;
<#
}
foreach (var navigationProperty in collectionNavigationProperties)
{
#>
this.<#=code.Escape(navigationProperty)#> = new HashSet<<#=typeMapper.GetTypeName(navigationProperty.ToEndMember.GetEntityType())#>>();
<#
}
foreach (var complexProperty in complexProperties)
{
#>
this.<#=code.Escape(complexProperty)#> = new <#=typeMapper.GetTypeName(complexProperty.TypeUsage)#>();
<#
}
#>
}
<#
}
var simpleProperties = typeMapper.GetSimpleProperties(entity);
if (simpleProperties.Any())
{
foreach (var edmProperty in simpleProperties)
{
#>
<#=codeStringGenerator.Property(edmProperty)#>
<#
}
}
if (complexProperties.Any())
{
#>
<#
foreach(var complexProperty in complexProperties)
{
#>
<#=codeStringGenerator.Property(complexProperty)#>
<#
}
}
var navigationProperties = typeMapper.GetNavigationProperties(entity);
if (navigationProperties.Any())
{
#>
<#
foreach (var navigationProperty in navigationProperties)
{
if (navigationProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many)
{
#>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
<#
}
#>
<#=codeStringGenerator.NavigationProperty(navigationProperty)#>
<#
}
}
#>
}
<#
EndNamespace(code);
}
foreach (var complex in typeMapper.GetItemsToGenerate<ComplexType>(itemCollection))
{
fileManager.StartNewFile(complex.Name + ".cs");
BeginNamespace(code);
#>
<#=codeStringGenerator.UsingDirectives(inHeader: false, includeCollections: false)#>
<#=Accessibility.ForType(complex)#> partial class <#=code.Escape(complex)#>
{
<#
var complexProperties = typeMapper.GetComplexProperties(complex);
var propertiesWithDefaultValues = typeMapper.GetPropertiesWithDefaultValues(complex);
if (propertiesWithDefaultValues.Any() || complexProperties.Any())
{
#>
public <#=code.Escape(complex)#>()
{
<#
foreach (var edmProperty in propertiesWithDefaultValues)
{
#>
this.<#=code.Escape(edmProperty)#> = <#=typeMapper.CreateLiteral(edmProperty.DefaultValue)#>;
<#
}
foreach (var complexProperty in complexProperties)
{
#>
this.<#=code.Escape(complexProperty)#> = new <#=typeMapper.GetTypeName(complexProperty.TypeUsage)#>();
<#
}
#>
}
<#
}
var simpleProperties = typeMapper.GetSimpleProperties(complex);
if (simpleProperties.Any())
{
foreach(var edmProperty in simpleProperties)
{
#>
<#=codeStringGenerator.Property(edmProperty)#>
<#
}
}
if (complexProperties.Any())
{
#>
<#
foreach(var edmProperty in complexProperties)
{
#>
<#=codeStringGenerator.Property(edmProperty)#>
<#
}
}
#>
}
<#
EndNamespace(code);
}
foreach (var enumType in typeMapper.GetEnumItemsToGenerate(itemCollection))
{
fileManager.StartNewFile(enumType.Name + ".cs");
BeginNamespace(code);
#>
<#=codeStringGenerator.UsingDirectives(inHeader: false, includeCollections: false)#>
<#
if (typeMapper.EnumIsFlags(enumType))
{
#>
[Flags]
<#
}
#>
<#=codeStringGenerator.EnumOpening(enumType)#>
{
<#
var foundOne = false;
foreach (MetadataItem member in typeMapper.GetEnumMembers(enumType))
{
foundOne = true;
#>
<#=code.Escape(typeMapper.GetEnumMemberName(member))#> = <#=typeMapper.GetEnumMemberValue(member)#>,
<#
}
if (foundOne)
{
this.GenerationEnvironment.Remove(this.GenerationEnvironment.Length - 3, 1);
}
#>
}
<#
EndNamespace(code);
}
fileManager.Process();
#>
<#+
public void WriteHeader(CodeStringGenerator codeStringGenerator, EntityFrameworkTemplateFileManager fileManager)
{
fileManager.StartHeader();
#>
//------------------------------------------------------------------------------
// <auto-generated>
// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine1")#>
//
// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine2")#>
// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine3")#>
// </auto-generated>
//------------------------------------------------------------------------------
<#=codeStringGenerator.UsingDirectives(inHeader: true)#>
<#+
fileManager.EndBlock();
}
public void BeginNamespace(CodeGenerationTools code)
{
var codeNamespace = code.VsNamespaceSuggestion();
if (!String.IsNullOrEmpty(codeNamespace))
{
#>
namespace <#=code.EscapeNamespace(codeNamespace)#>
{
<#+
PushIndent(" ");
}
}
public void EndNamespace(CodeGenerationTools code)
{
if (!String.IsNullOrEmpty(code.VsNamespaceSuggestion()))
{
PopIndent();
#>
}
<#+
}
}
public const string TemplateId = "CSharp_DbContext_Types_EF6";
public class CodeStringGenerator
{
private readonly CodeGenerationTools _code;
private readonly TypeMapper _typeMapper;
private readonly MetadataTools _ef;
public CodeStringGenerator(CodeGenerationTools code, TypeMapper typeMapper, MetadataTools ef)
{
ArgumentNotNull(code, "code");
ArgumentNotNull(typeMapper, "typeMapper");
ArgumentNotNull(ef, "ef");
_code = code;
_typeMapper = typeMapper;
_ef = ef;
}
public string Property(EdmProperty edmProperty)
{
return string.Format(
CultureInfo.InvariantCulture,
"{0} {1} {2} {{ {3}get; {4}set; }}",
Accessibility.ForProperty(edmProperty),
_typeMapper.GetTypeName(edmProperty.TypeUsage),
_code.Escape(edmProperty),
_code.SpaceAfter(Accessibility.ForGetter(edmProperty)),
_code.SpaceAfter(Accessibility.ForSetter(edmProperty)));
}
public string NavigationProperty(NavigationProperty navProp)
{
var endType = _typeMapper.GetTypeName(navProp.ToEndMember.GetEntityType());
return string.Format(
CultureInfo.InvariantCulture,
"{0} {1} {2} {{ {3}get; {4}set; }}",
AccessibilityAndVirtual(Accessibility.ForNavigationProperty(navProp)),
navProp.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many ? ("ICollection<" + endType + ">") : endType,
_code.Escape(navProp),
_code.SpaceAfter(Accessibility.ForGetter(navProp)),
_code.SpaceAfter(Accessibility.ForSetter(navProp)));
}
public string AccessibilityAndVirtual(string accessibility)
{
return accessibility + (accessibility != "private" ? " virtual" : "");
}
public string EntityClassOpening(EntityType entity)
{
return string.Format(
CultureInfo.InvariantCulture,
"{0} {1}partial class {2}{3}",
Accessibility.ForType(entity),
_code.SpaceAfter(_code.AbstractOption(entity)),
_code.Escape(entity),
_code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)));
}
public string EnumOpening(SimpleType enumType)
{
return string.Format(
CultureInfo.InvariantCulture,
"{0} enum {1} : {2}",
Accessibility.ForType(enumType),
_code.Escape(enumType),
_code.Escape(_typeMapper.UnderlyingClrType(enumType)));
}
public void WriteFunctionParameters(EdmFunction edmFunction, Action<string, string, string, string> writeParameter)
{
var parameters = FunctionImportParameter.Create(edmFunction.Parameters, _code, _ef);
foreach (var parameter in parameters.Where(p => p.NeedsLocalVariable))
{
var isNotNull = parameter.IsNullableOfT ? parameter.FunctionParameterName + ".HasValue" : parameter.FunctionParameterName + " != null";
var notNullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", " + parameter.FunctionParameterName + ")";
var nullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", typeof(" + TypeMapper.FixNamespaces(parameter.RawClrTypeName) + "))";
writeParameter(parameter.LocalVariableName, isNotNull, notNullInit, nullInit);
}
}
public string ComposableFunctionMethod(EdmFunction edmFunction, string modelNamespace)
{
var parameters = _typeMapper.GetParameters(edmFunction);
return string.Format(
CultureInfo.InvariantCulture,
"{0} IQueryable<{1}> {2}({3})",
AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction)),
_typeMapper.GetTypeName(_typeMapper.GetReturnType(edmFunction), modelNamespace),
_code.Escape(edmFunction),
string.Join(", ", parameters.Select(p => TypeMapper.FixNamespaces(p.FunctionParameterType) + " " + p.FunctionParameterName).ToArray()));
}
public string ComposableCreateQuery(EdmFunction edmFunction, string modelNamespace)
{
var parameters = _typeMapper.GetParameters(edmFunction);
return string.Format(
CultureInfo.InvariantCulture,
"return ((IObjectContextAdapter)this).ObjectContext.CreateQuery<{0}>(\"[{1}].[{2}]({3})\"{4});",
_typeMapper.GetTypeName(_typeMapper.GetReturnType(edmFunction), modelNamespace),
edmFunction.NamespaceName,
edmFunction.Name,
string.Join(", ", parameters.Select(p => "@" + p.EsqlParameterName).ToArray()),
_code.StringBefore(", ", string.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray())));
}
public string FunctionMethod(EdmFunction edmFunction, string modelNamespace, bool includeMergeOption)
{
var parameters = _typeMapper.GetParameters(edmFunction);
var returnType = _typeMapper.GetReturnType(edmFunction);
var paramList = String.Join(", ", parameters.Select(p => TypeMapper.FixNamespaces(p.FunctionParameterType) + " " + p.FunctionParameterName).ToArray());
if (includeMergeOption)
{
paramList = _code.StringAfter(paramList, ", ") + "MergeOption mergeOption";
}
return string.Format(
CultureInfo.InvariantCulture,
"{0} {1} {2}({3})",
AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction)),
returnType == null ? "int" : "ObjectResult<" + _typeMapper.GetTypeName(returnType, modelNamespace) + ">",
_code.Escape(edmFunction),
paramList);
}
public string ExecuteFunction(EdmFunction edmFunction, string modelNamespace, bool includeMergeOption)
{
var parameters = _typeMapper.GetParameters(edmFunction);
var returnType = _typeMapper.GetReturnType(edmFunction);
var callParams = _code.StringBefore(", ", String.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray()));
if (includeMergeOption)
{
callParams = ", mergeOption" + callParams;
}
return string.Format(
CultureInfo.InvariantCulture,
"return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction{0}(\"{1}\"{2});",
returnType == null ? "" : "<" + _typeMapper.GetTypeName(returnType, modelNamespace) + ">",
edmFunction.Name,
callParams);
}
public string DbSet(EntitySet entitySet)
{
return string.Format(
CultureInfo.InvariantCulture,
"{0} virtual DbSet<{1}> {2} {{ get; set; }}",
Accessibility.ForReadOnlyProperty(entitySet),
_typeMapper.GetTypeName(entitySet.ElementType),
_code.Escape(entitySet));
}
public string UsingDirectives(bool inHeader, bool includeCollections = true)
{
return inHeader == string.IsNullOrEmpty(_code.VsNamespaceSuggestion())
? string.Format(
CultureInfo.InvariantCulture,
"{0}using System;{1}" +
"{2}",
inHeader ? Environment.NewLine : "",
includeCollections ? (Environment.NewLine + "using System.Collections.Generic;") : "",
inHeader ? "" : Environment.NewLine)
: "";
}
}
public class TypeMapper
{
private const string ExternalTypeNameAttributeName = @"http://schemas.microsoft.com/ado/2006/04/codegeneration:ExternalTypeName";
private readonly System.Collections.IList _errors;
private readonly CodeGenerationTools _code;
private readonly MetadataTools _ef;
public TypeMapper(CodeGenerationTools code, MetadataTools ef, System.Collections.IList errors)
{
ArgumentNotNull(code, "code");
ArgumentNotNull(ef, "ef");
ArgumentNotNull(errors, "errors");
_code = code;
_ef = ef;
_errors = errors;
}
public static string FixNamespaces(string typeName)
{
return typeName.Replace("System.Data.Spatial.", "System.Data.Entity.Spatial.");
}
public string GetTypeName(TypeUsage typeUsage)
{
return typeUsage == null ? null : GetTypeName(typeUsage.EdmType, _ef.IsNullable(typeUsage), modelNamespace: null);
}
public string GetTypeName(EdmType edmType)
{
return GetTypeName(edmType, isNullable: null, modelNamespace: null);
}
public string GetTypeName(TypeUsage typeUsage, string modelNamespace)
{
return typeUsage == null ? null : GetTypeName(typeUsage.EdmType, _ef.IsNullable(typeUsage), modelNamespace);
}
public string GetTypeName(EdmType edmType, string modelNamespace)
{
return GetTypeName(edmType, isNullable: null, modelNamespace: modelNamespace);
}
public string GetTypeName(EdmType edmType, bool? isNullable, string modelNamespace)
{
if (edmType == null)
{
return null;
}
var collectionType = edmType as CollectionType;
if (collectionType != null)
{
return String.Format(CultureInfo.InvariantCulture, "ICollection<{0}>", GetTypeName(collectionType.TypeUsage, modelNamespace));
}
var typeName = _code.Escape(edmType.MetadataProperties
.Where(p => p.Name == ExternalTypeNameAttributeName)
.Select(p => (string)p.Value)
.FirstOrDefault())
?? (modelNamespace != null && edmType.NamespaceName != modelNamespace ?
_code.CreateFullName(_code.EscapeNamespace(edmType.NamespaceName), _code.Escape(edmType)) :
_code.Escape(edmType));
if (edmType is StructuralType)
{
return typeName;
}
if (edmType is SimpleType)
{
var clrType = UnderlyingClrType(edmType);
if (!IsEnumType(edmType))
{
typeName = _code.Escape(clrType);
}
typeName = FixNamespaces(typeName);
return clrType.IsValueType && isNullable == true ?
String.Format(CultureInfo.InvariantCulture, "Nullable<{0}>", typeName) :
typeName;
}
throw new ArgumentException("edmType");
}
public Type UnderlyingClrType(EdmType edmType)
{
ArgumentNotNull(edmType, "edmType");
var primitiveType = edmType as PrimitiveType;
if (primitiveType != null)
{
return primitiveType.ClrEquivalentType;
}
if (IsEnumType(edmType))
{
return GetEnumUnderlyingType(edmType).ClrEquivalentType;
}
return typeof(object);
}
public object GetEnumMemberValue(MetadataItem enumMember)
{
ArgumentNotNull(enumMember, "enumMember");
var valueProperty = enumMember.GetType().GetProperty("Value");
return valueProperty == null ? null : valueProperty.GetValue(enumMember, null);
}
public string GetEnumMemberName(MetadataItem enumMember)
{
ArgumentNotNull(enumMember, "enumMember");
var nameProperty = enumMember.GetType().GetProperty("Name");
return nameProperty == null ? null : (string)nameProperty.GetValue(enumMember, null);
}
public System.Collections.IEnumerable GetEnumMembers(EdmType enumType)
{
ArgumentNotNull(enumType, "enumType");
var membersProperty = enumType.GetType().GetProperty("Members");
return membersProperty != null
? (System.Collections.IEnumerable)membersProperty.GetValue(enumType, null)
: Enumerable.Empty<MetadataItem>();
}
public bool EnumIsFlags(EdmType enumType)
{
ArgumentNotNull(enumType, "enumType");
var isFlagsProperty = enumType.GetType().GetProperty("IsFlags");
return isFlagsProperty != null && (bool)isFlagsProperty.GetValue(enumType, null);
}
public bool IsEnumType(GlobalItem edmType)
{
ArgumentNotNull(edmType, "edmType");
return edmType.GetType().Name == "EnumType";
}
public PrimitiveType GetEnumUnderlyingType(EdmType enumType)
{
ArgumentNotNull(enumType, "enumType");
return (PrimitiveType)enumType.GetType().GetProperty("UnderlyingType").GetValue(enumType, null);
}
public string CreateLiteral(object value)
{
if (value == null || value.GetType() != typeof(TimeSpan))
{
return _code.CreateLiteral(value);
}
return string.Format(CultureInfo.InvariantCulture, "new TimeSpan({0})", ((TimeSpan)value).Ticks);
}
public bool VerifyCaseInsensitiveTypeUniqueness(IEnumerable<string> types, string sourceFile)
{
ArgumentNotNull(types, "types");
ArgumentNotNull(sourceFile, "sourceFile");
var hash = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
if (types.Any(item => !hash.Add(item)))
{
_errors.Add(
new CompilerError(sourceFile, -1, -1, "6023",
String.Format(CultureInfo.CurrentCulture, CodeGenerationTools.GetResourceString("Template_CaseInsensitiveTypeConflict"))));
return false;
}
return true;
}
public IEnumerable<SimpleType> GetEnumItemsToGenerate(IEnumerable<GlobalItem> itemCollection)
{
return GetItemsToGenerate<SimpleType>(itemCollection)
.Where(e => IsEnumType(e));
}
public IEnumerable<T> GetItemsToGenerate<T>(IEnumerable<GlobalItem> itemCollection) where T: EdmType
{
return itemCollection
.OfType<T>()
.Where(i => !i.MetadataProperties.Any(p => p.Name == ExternalTypeNameAttributeName))
.OrderBy(i => i.Name);
}
public IEnumerable<string> GetAllGlobalItems(IEnumerable<GlobalItem> itemCollection)
{
return itemCollection
.Where(i => i is EntityType || i is ComplexType || i is EntityContainer || IsEnumType(i))
.Select(g => GetGlobalItemName(g));
}
public string GetGlobalItemName(GlobalItem item)
{
if (item is EdmType)
{
return ((EdmType)item).Name;
}
else
{
return ((EntityContainer)item).Name;
}
}
public IEnumerable<EdmProperty> GetSimpleProperties(EntityType type)
{
return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type);
}
public IEnumerable<EdmProperty> GetSimpleProperties(ComplexType type)
{
return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type);
}
public IEnumerable<EdmProperty> GetComplexProperties(EntityType type)
{
return type.Properties.Where(p => p.TypeUsage.EdmType is ComplexType && p.DeclaringType == type);
}
public IEnumerable<EdmProperty> GetComplexProperties(ComplexType type)
{
return type.Properties.Where(p => p.TypeUsage.EdmType is ComplexType && p.DeclaringType == type);
}
public IEnumerable<EdmProperty> GetPropertiesWithDefaultValues(EntityType type)
{
return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type && p.DefaultValue != null);
}
public IEnumerable<EdmProperty> GetPropertiesWithDefaultValues(ComplexType type)
{
return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type && p.DefaultValue != null);
}
public IEnumerable<NavigationProperty> GetNavigationProperties(EntityType type)
{
return type.NavigationProperties.Where(np => np.DeclaringType == type);
}
public IEnumerable<NavigationProperty> GetCollectionNavigationProperties(EntityType type)
{
return type.NavigationProperties.Where(np => np.DeclaringType == type && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many);
}
public FunctionParameter GetReturnParameter(EdmFunction edmFunction)
{
ArgumentNotNull(edmFunction, "edmFunction");
var returnParamsProperty = edmFunction.GetType().GetProperty("ReturnParameters");
return returnParamsProperty == null
? edmFunction.ReturnParameter
: ((IEnumerable<FunctionParameter>)returnParamsProperty.GetValue(edmFunction, null)).FirstOrDefault();
}
public bool IsComposable(EdmFunction edmFunction)
{
ArgumentNotNull(edmFunction, "edmFunction");
var isComposableProperty = edmFunction.GetType().GetProperty("IsComposableAttribute");
return isComposableProperty != null && (bool)isComposableProperty.GetValue(edmFunction, null);
}
public IEnumerable<FunctionImportParameter> GetParameters(EdmFunction edmFunction)
{
return FunctionImportParameter.Create(edmFunction.Parameters, _code, _ef);
}
public TypeUsage GetReturnType(EdmFunction edmFunction)
{
var returnParam = GetReturnParameter(edmFunction);
return returnParam == null ? null : _ef.GetElementType(returnParam.TypeUsage);
}
public bool GenerateMergeOptionFunction(EdmFunction edmFunction, bool includeMergeOption)
{
var returnType = GetReturnType(edmFunction);
return !includeMergeOption && returnType != null && returnType.EdmType.BuiltInTypeKind == BuiltInTypeKind.EntityType;
}
}
public static void ArgumentNotNull<T>(T arg, string name) where T : class
{
if (arg == null)
{
throw new ArgumentNullException(name);
}
}
#>

View File

@@ -1,28 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace JobReportMailService
{
static class Program
{
/// <summary>
/// 해당 애플리케이션의 주 진입점입니다.
/// </summary>
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (args != null && args.Length == 1 && args[0] == "DEBUG")
Pub.debugmode = true;
else
Pub.debugmode = false;
Application.Run(new MDIParent1());
}
}
}

View File

@@ -1,91 +0,0 @@
//using System;
//using System.Collections.Generic;
//using System.Data.SqlClient;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;
//namespace JobReportMailService
//{
// partial class Program_bak
// {
// static CSetting setting = new CSetting();
// static DateTime ChkAutoDate = DateTime.Now.AddDays(-1);
// static string vGcode = "EET1P";
// static bool cn = false;
// static DateTime LastUpdateTime = DateTime.Now.AddHours(-1);
// static DateTime ConsoleTime = DateTime.Now.AddDays(-1);
// static void Main(string[] args)
// {
// setting = new CSetting();
// setting.Load();
// if (setting.Xml.Exist() == false)
// {
// Console.WriteLine("new setting file make");
// setting.Save();
// }
// while (true)
// {
// //등록된 날짜를 확인하여, 해당 일자가 일반 평일 이라면 8시간 체크해서 메일을 보낸다.
// //등록된 날짜가 토,일은 제외한다.
// var ts = DateTime.Now - LastUpdateTime;
// if (ts.TotalMinutes <= 15)
// {
// //15분 미만이면 동작하지 않는다
// if ((DateTime.Now - ConsoleTime).TotalHours >= 1.0)
// {
// Console.WriteLine("15분 미만이라 동작하지 않습니다");
// ConsoleTime = DateTime.Now;
// }
// }
// else if (DateTime.Now.DayOfWeek == DayOfWeek.Saturday || DateTime.Now.DayOfWeek == DayOfWeek.Sunday)
// {
// //토,일요일에는 동작하지 않는다
// if ((DateTime.Now - ConsoleTime).TotalHours >= 1.0)
// {
// Console.WriteLine("토/일에는 동작하지 않습니다");
// ConsoleTime = DateTime.Now;
// }
// }
// else if (DateTime.Now.Hour < 9)
// {
// if ((DateTime.Now - ConsoleTime).TotalHours >= 1.0)
// {
// Console.WriteLine("9시 이전에는 동작하지 않습니다");
// ConsoleTime = DateTime.Now;
// }
// }
// else
// {
// LastUpdateTime = DateTime.Now;
// try
// {
// WorkDay();
// }
// catch (Exception ex)
// {
// Console.WriteLine("일간업무알림 실패: " + ex.Message);
// }
// try
// {
// WorkWeek();
// }
// catch (Exception ex)
// {
// Console.WriteLine("주간업무알림 실패: " + ex.Message);
// }
// }
// System.Threading.Thread.Sleep(60000); //1분단위로 체크한다
// }
// }
// }
//}

View File

@@ -1,73 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 이 코드는 템플릿에서 생성되었습니다.
//
// 이 파일을 수동으로 변경하면 응용 프로그램에서 예기치 않은 동작이 발생할 수 있습니다.
// 이 파일을 수동으로 변경하면 코드가 다시 생성될 때 변경 내용을 덮어씁니다.
// </auto-generated>
//------------------------------------------------------------------------------
namespace JobReportMailService
{
using System;
using System.Collections.Generic;
public partial class Projects
{
public int idx { get; set; }
public Nullable<int> pidx { get; set; }
public string gcode { get; set; }
public Nullable<bool> isdel { get; set; }
public string category { get; set; }
public string status { get; set; }
public string asset { get; set; }
public Nullable<int> level { get; set; }
public Nullable<int> rev { get; set; }
public string process { get; set; }
public string part { get; set; }
public string pdate { get; set; }
public string name { get; set; }
public string userManager { get; set; }
public string usermain { get; set; }
public string usersub { get; set; }
public string userhw2 { get; set; }
public string reqstaff { get; set; }
public Nullable<double> costo { get; set; }
public Nullable<double> costn { get; set; }
public Nullable<int> cnt { get; set; }
public string remark_req { get; set; }
public string remark_ans { get; set; }
public string sdate { get; set; }
public string ddate { get; set; }
public string edate { get; set; }
public string odate { get; set; }
public Nullable<int> progress { get; set; }
public string memo { get; set; }
public string wuid { get; set; }
public System.DateTime wdate { get; set; }
public string orderno { get; set; }
public string crdue { get; set; }
public Nullable<bool> import { get; set; }
public string path { get; set; }
public string userprocess { get; set; }
public string CMP_Background { get; set; }
public string CMP_Description { get; set; }
public string CMP_Before { get; set; }
public string CMP_After { get; set; }
public Nullable<bool> bCost { get; set; }
public Nullable<bool> bFanOut { get; set; }
public string div { get; set; }
public string EB_Site { get; set; }
public string EB_Line { get; set; }
public string EB_Team { get; set; }
public string EB_Model { get; set; }
public string EB_OutSourceName { get; set; }
public Nullable<double> EB_RepairTime { get; set; }
public Nullable<double> EB_ConstNew { get; set; }
public string EB_BoardName { get; set; }
public string CMP_After2 { get; set; }
public string model { get; set; }
public string serial { get; set; }
public Nullable<bool> bAlert { get; set; }
}
}

View File

@@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해
// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
// 이러한 특성 값을 변경하세요.
[assembly: AssemblyTitle("JobReportMailService")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("JobReportMailService")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
[assembly: ComVisible(false)]
// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
[assembly: Guid("dbe5bd4a-09d3-4437-ad6c-81fe270c6458")]
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
//
// 주 버전
// 부 버전
// 빌드 번호
// 수정 버전
//
// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
// 기본값으로 할 수 있습니다.
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("22.05.30.0920")]
[assembly: AssemblyFileVersion("22.05.30.0920")]

View File

@@ -1,37 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 이 코드는 도구를 사용하여 생성되었습니다.
// 런타임 버전:4.0.30319.42000
//
// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
// 이러한 변경 내용이 손실됩니다.
// </auto-generated>
//------------------------------------------------------------------------------
namespace JobReportMailService.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.10.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]
[global::System.Configuration.DefaultSettingValueAttribute("Data Source=10.131.15.18;Initial Catalog=EE;Persist Security Info=True;User ID=ee" +
"user;Password=Amkor123!")]
public string CS {
get {
return ((string)(this["CS"]));
}
}
}
}

View File

@@ -1,14 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="JobReportMailService.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
<Setting Name="CS" Type="(Connection string)" Scope="Application">
<DesignTimeValue Profile="(Default)">&lt;?xml version="1.0" encoding="utf-16"?&gt;
&lt;SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
&lt;ConnectionString&gt;Data Source=10.131.15.18;Initial Catalog=EE;Persist Security Info=True;User ID=eeuser;Password=Amkor123!&lt;/ConnectionString&gt;
&lt;ProviderName&gt;System.Data.SqlClient&lt;/ProviderName&gt;
&lt;/SerializableConnectionString&gt;</DesignTimeValue>
<Value Profile="(Default)">Data Source=10.131.15.18;Initial Catalog=EE;Persist Security Info=True;User ID=eeuser;Password=Amkor123!</Value>
</Setting>
</Settings>
</SettingsFile>

View File

@@ -1,31 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace JobReportMailService
{
public static class Pub
{
// public static string vGcode = "EET1P";
public static CSetting setting;
public static Boolean debugmode = false;
public static string MailSort(string addr, string except)
{
if (string.IsNullOrEmpty(except)) return addr;
var alist = addr.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).ToList();
var elist = except.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).ToList();
foreach (var item in elist)
alist.Remove(item);
if (alist.Count < 1) return string.Empty;
return string.Join(";", alist);
}
public static void init()
{
setting = new CSetting();
setting.Load();
}
}
}

View File

@@ -1 +0,0 @@
200607 EETGW_GroupUser 에 업무일지 미사용 체크된 인원은 sendmail 에서 제외하게 변경

View File

@@ -1,16 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace JobReportMailService
{
public class ReportUserData
{
public DateTime date { get; set; }
public string uid { get; set; }
public string uname { get; set; }
public double hrs { get; set; }
}
}

View File

@@ -1,69 +0,0 @@

namespace JobReportMailService
{
partial class fChildBase
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.richTextBox1 = new System.Windows.Forms.RichTextBox();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.SuspendLayout();
//
// richTextBox1
//
this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill;
this.richTextBox1.Location = new System.Drawing.Point(0, 0);
this.richTextBox1.Name = "richTextBox1";
this.richTextBox1.Size = new System.Drawing.Size(704, 491);
this.richTextBox1.TabIndex = 1;
this.richTextBox1.Text = "";
//
// timer1
//
this.timer1.Interval = 250;
//
// fChildBase
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(704, 491);
this.Controls.Add(this.richTextBox1);
this.Name = "fChildBase";
this.Text = "fChildBase";
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.fChildBase_FormClosed);
this.Load += new System.EventHandler(this.fChildBase_Load);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.RichTextBox richTextBox1;
protected System.Windows.Forms.Timer timer1;
}
}

View File

@@ -1,69 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace JobReportMailService
{
public partial class fChildBase : Form
{
protected Boolean taskrun = true;
protected DateTime ChkMakeSchDayWeekTime;
protected DateTime ConsoleTime;
protected Task task = null;
protected int Delaytime = 60000;
protected Boolean taskwait = true;
public fChildBase()
{
InitializeComponent();
ChkMakeSchDayWeekTime = DateTime.Now.AddDays(-1);
ConsoleTime = ChkMakeSchDayWeekTime;
}
private void fChildBase_Load(object sender, EventArgs e)
{
//taskwait = Pub.debugmode;
}
protected void addmsg(string m)
{
if (this.richTextBox1.InvokeRequired)
{
this.richTextBox1.BeginInvoke(new Action(() =>
{
if (this.richTextBox1.Lines.Length > 1000) this.richTextBox1.Clear();
this.richTextBox1.AppendText(DateTime.Now.ToString("HH:mm:ss.fff") + "] " + m + "\n");
this.richTextBox1.ScrollToCaret();
}));
return;
}
if (this.richTextBox1.Lines.Length > 1000) this.richTextBox1.Clear();
this.richTextBox1.AppendText(DateTime.Now.ToString("HH:mm:ss.fff") + "] " + m + "\n");
this.richTextBox1.ScrollToCaret();
}
private void fChildBase_FormClosed(object sender, FormClosedEventArgs e)
{
if(this.task != null)
{
taskwait = true;
taskrun = false;
task.Wait(1000);
try
{
task.Dispose();
}
catch (Exception ex)
{
}
}
}
}
}

View File

@@ -1,123 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@@ -1,95 +0,0 @@

namespace JobReportMailService
{
partial class fJobReportDay
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(fJobReportDay));
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.btRun = new System.Windows.Forms.ToolStripButton();
this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
this.toolStrip1.SuspendLayout();
this.SuspendLayout();
//
// timer1
//
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// toolStrip1
//
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.btRun,
this.toolStripButton1});
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(473, 25);
this.toolStrip1.TabIndex = 2;
this.toolStrip1.Text = "toolStrip1";
//
// btRun
//
this.btRun.Image = ((System.Drawing.Image)(resources.GetObject("btRun.Image")));
this.btRun.ImageTransparentColor = System.Drawing.Color.Magenta;
this.btRun.Name = "btRun";
this.btRun.Size = new System.Drawing.Size(48, 22);
this.btRun.Text = "Run";
this.btRun.Click += new System.EventHandler(this.toolStripButton1_Click);
//
// toolStripButton1
//
this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image")));
this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton1.Name = "toolStripButton1";
this.toolStripButton1.Size = new System.Drawing.Size(67, 22);
this.toolStripButton1.Text = "manual";
this.toolStripButton1.Click += new System.EventHandler(this.toolStripButton1_Click_1);
//
// fJobReportDay
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(473, 416);
this.Controls.Add(this.toolStrip1);
this.Name = "fJobReportDay";
this.Text = "업무일지(일보고)";
this.Load += new System.EventHandler(this.fJobReportDay_Load);
this.Controls.SetChildIndex(this.toolStrip1, 0);
this.toolStrip1.ResumeLayout(false);
this.toolStrip1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.ToolStrip toolStrip1;
private System.Windows.Forms.ToolStripButton btRun;
private System.Windows.Forms.ToolStripButton toolStripButton1;
}
}

View File

@@ -1,454 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace JobReportMailService
{
public partial class fJobReportDay : fChildBase
{
public fJobReportDay()
{
InitializeComponent();
}
private void fJobReportDay_Load(object sender, EventArgs e)
{
task = Task.Run(() =>
{
while (taskrun)
{
if (taskwait)
{
task.Wait(1000);
continue;
}
var ts = DateTime.Now - ChkMakeSchDayWeekTime;
if (ts.TotalMinutes <= 15)
{
if ((DateTime.Now - ConsoleTime).TotalHours >= 1.0)
{
addmsg("15분 미만이라 동작하지 않습니다");
ConsoleTime = DateTime.Now;
}
}
else if (DateTime.Now.DayOfWeek == DayOfWeek.Saturday ||
DateTime.Now.DayOfWeek == DayOfWeek.Sunday ||
DateTime.Now.DayOfWeek == DayOfWeek.Monday)
{
//토,일요일에는 동작하지 않는다
if ((DateTime.Now - ConsoleTime).TotalHours >= 1.0)
{
addmsg("토/일/월에는 동작하지 않습니다");
ConsoleTime = DateTime.Now;
}
}
else if (DateTime.Now.Hour < 9)
{
if ((DateTime.Now - ConsoleTime).TotalHours >= 1.0)
{
addmsg("9시 이전에는 동작하지 않습니다");
ConsoleTime = DateTime.Now;
}
}
else
{
ChkMakeSchDayWeekTime = DateTime.Now;
try
{
RunData();
}
catch (Exception ex)
{
addmsg(ex.Message);
using(var ta = new DataSet1TableAdapters.MailDataTableAdapter())
{
using (var dt = new DataSet1.MailDataDataTable())
{
var newdr = dt.NewMailDataRow();
newdr.gcode = "EET1P";
newdr.cate = "ER";
newdr.subject = "[ERROR] 업무일지 메일작성 실패";
newdr.fromlist = "chikyun.kim@amkor.co.kr";
newdr.tolist = "chikyun.kim@amkor.co.kr";
newdr.bcc = string.Empty;
newdr.cc = string.Empty;
newdr.pdate = DateTime.Now.ToShortDateString();
newdr.body = ex.Message;
newdr.wuid = "dev";
newdr.wdate = DateTime.Now;
newdr.EndEdit();
dt.AddMailDataRow(newdr);
var cnt = ta.Update(dt);
}
}
task.Wait(5000);
}
}
Task.Delay(Delaytime).Wait();
}
});
timer1.Start();
if (Pub.setting.autoRunData)
btRun.PerformClick();
}
void RunData()
{
addmsg("업무일지 미 작성자 추출 작업을 시작 합니다");
//var db = new EEEntities();
//기준일자는 오늘부터 -15일이다
//var basedate = new DateTime(2022, 05, 20);// DateTime.Now;
var basedate = DateTime.Now;
var sd = basedate.AddDays(-15);
var ed = basedate.AddDays(-1);
var str_sd = sd.ToShortDateString();
var str_ed = ed.ToShortDateString();
var str_dt = basedate.ToShortDateString();
var taMailForm = new DataSet1TableAdapters.MailFormTableAdapter();
var taMailData = new DataSet1TableAdapters.MailDataTableAdapter();
var taJobReportUserList = new DataSet1TableAdapters.vJobReportUserListTableAdapter();
var taJobReport = new DataSet1TableAdapters.JobReportTableAdapter();
var taHolidayList = new DataSet1TableAdapters.HolidayLIstTableAdapter();
var taGroupUser = new DataSet1TableAdapters.vGroupUserTableAdapter();
var taJobReportDateList = new DataSet1TableAdapters.JobReportDateListTableAdapter();
var dtMailForm = new DataSet1.MailFormDataTable();
var dtMailData = new DataSet1.MailDataDataTable();
var dtDateList = new DataSet1.JobReportDateListDataTable();
taMailForm.Fill(dtMailForm);
var gcodelist = dtMailForm.GroupBy(t => t.gcode).Select(t => t.Key).ToList();
//gcodelist = new List<string>();
//gcodelist.Add("EETK5");
foreach (var gcodedata in gcodelist)
{
//메일양식이 지정되어있는지 체크
var vGcode = gcodedata;
if (string.IsNullOrEmpty(vGcode)) continue;
if (vGcode.Contains("K5") == false) continue;
var MailJD = dtMailForm.Where(t => t.gcode == vGcode & t.cate == "JD").FirstOrDefault();
if (MailJD == null)
{
addmsg($"[{vGcode}]업무일지 미작성 메일 양식이 입력되지 않았습니다");
continue;
}
if (MailJD.exceptmail == null) MailJD.exceptmail = string.Empty;
if (MailJD.exceptmailcc == null) MailJD.exceptmailcc = string.Empty;
//오늘날짜로 주간 데이터가 등록되어있느지 확인한다.
// db.MailData.Where(t => t.gcode == vGcode && t.cate == "JD" && t.pdate == str_dt).Any();
var Existweek = taMailData.GetDataExistDay(vGcode, "JD", str_dt).Any();
if (Existweek)
{
addmsg($"[{vGcode}] 업무일지(일간({str_dt}) 보고 메일이 이미 등록되어 있습니다");
continue;
}
List<string> NoMailList = new List<string>();
NoMailList.Add($"그룹\t사번\t성명\t경고일");
//대상 사용자 목록을 추출한다;
var users = taJobReportUserList.GetData(vGcode);
//var users = db.vJobReportForUser.Where(t => t.gcode == vGcode).GroupBy(t => t.id);
Dictionary<string, string> uids = new Dictionary<string, string>();
foreach (var userinfo in users)
{
//해당 사용자의 오늘 날짜로 등록된 자동 데이터가 있다면 대상에 넣지 않는다
//var userinfo = user.FirstOrDefault();
if (userinfo == null || string.IsNullOrEmpty(userinfo.id) == true) continue;
//퇴사자 확인
var = userinfo.outdate;
if (string.IsNullOrEmpty() == false)
{
//퇴사자
if (.CompareTo(str_dt) < 1) continue;
}
var Exists = taMailData.GetDataByUserData(vGcode, userinfo.id, str_dt, "JD").Any();
// db.MailData.Where(t => t.gcode == vGcode && t.wuid == userinfo.id && t.pdate == str_dt && t.cate == "JD").Any();
if (Exists == false) uids.Add(userinfo.id, userinfo.name); //자동생성된 자료가 없는 경우에만 처리한다
}
addmsg($"[{vGcode}] {uids.Count} 명의 전체 사용자가 확인 되었습니다");
//먼저 날짜목록을 가져온다
dtDateList = taJobReportDateList.GetData(vGcode, str_sd, str_ed);//
//db = new EEEntities();
//var lstDate = db.JobReport
// .Where(t => t.gcode == vGcode && t.pdate.CompareTo(str_sd) >= 0 && t.pdate.CompareTo(str_ed) < 0)
// .OrderBy(t => t.pdate)
// .GroupBy(t => t.pdate).ToList();
//날짜대로 루프를 돈다
List<DateTime> days = new List<DateTime>();
foreach (var jobdata in dtDateList)
{
// var jobdata = dateitem.FirstOrDefault();
var dt = DateTime.Parse(jobdata.pdate);
if (dt.DayOfWeek == DayOfWeek.Sunday || dt.DayOfWeek == DayOfWeek.Saturday) continue;
//이 날짜가 휴일인지 체크한다.
//db = new EEEntities();
var Holyinfo = taHolidayList.GetData(jobdata.pdate).FirstOrDefault();
// db.HolidayLIst.Where(t => t.pdate == jobdata.pdate).FirstOrDefault();
if (Holyinfo != null && Holyinfo.free == true) continue;
//이날짜에는 8시간을 근무 해야 한다
days.Add(DateTime.Parse(jobdata.pdate));
}
addmsg($"[{vGcode}] {days.Count} 건의 일자가 확인 되었습니다(기간:{str_sd}~{str_ed}");
//사용자 목록과 날짜 목록을 모두 수집했다
List<ReportUserData> totWarnList = new List<ReportUserData>();
foreach (var uid in uids)
{
if (uid.Key == "71188")
Console.WriteLine("테스트");
//이사용자의 날짜별 근무시간을 확인한다.
//db = new EEEntities();
var UserDatas = taJobReport.GetUserDates(vGcode, uid.Key, str_sd, str_ed);
// db.JobReport.Where(t => t.gcode == vGcode && t.uid == uid.Key && t.pdate.CompareTo(str_sd) >= 0 && t.pdate.CompareTo(str_ed) < 0).ToList();
Dictionary<DateTime, double?> WarnList = new Dictionary<DateTime, double?>();
foreach (var dt in days.OrderBy(t => t))
{
var dtstr = dt.ToShortDateString();
var userdata = UserDatas.Where(t => t.pdate == dtstr); //해당날짜의 데이터를 확인한다.
var hrs = 0.0;
if (userdata.Any()) hrs = (double)userdata.Sum(t => t.hrs);
//else continue; //동작하지 않게함.
//자료를 입력하지 않았거나, 입력시간이 8시간 미만이면 경고한다
if (hrs < 8.0)
{
WarnList.Add(dt, hrs);
totWarnList.Add(new ReportUserData { date = dt, hrs = hrs, uid = uid.Key, uname = uid.Value }); //전체알림시에 사용하는 목록
}
}
if (WarnList.Count > 0)
{
addmsg($"[{vGcode}] {uid.Value}({uid.Key}) 의 경고 일수는 {WarnList.Count} 건 입니다");
//db = new EEEntities();
var userinfo = taGroupUser.GetData(vGcode, uid.Key).FirstOrDefault();
// db.vGroupUser.Where(t => t.gcode == vGcode && t.id == uid.Key).FirstOrDefault();
if (userinfo == null)
{
addmsg($"[{vGcode}] {uid.Value}({uid.Key}) 의 사용자 정보를 확인 할 수 없습니다");
}
else if (string.IsNullOrEmpty(userinfo.email))
{
NoMailList.Add($"{vGcode}\t{uid.Key}\t{uid.Value}\t{WarnList.Count}");
addmsg($"[{vGcode}] {uid.Value}({uid.Key}) 의 메일 정보가 존재하지 않습니다");
}
else
{
//일별경고(월요일제외)
if (DateTime.Now.DayOfWeek != DayOfWeek.Monday && MailJD != null)
{
var mail_subject = MailJD.subject.Replace("{담당자}", userinfo.name).Replace("{사번}", userinfo.id);
var mail_to = MailJD.tolist.Replace("{담당자}", userinfo.email);
var mail_cc = string.Empty; //
if (MailJD.cc != null) mail_cc = MailJD.cc.Replace("{담당자}", userinfo.email);
var mail_bcc = string.Empty;
if (MailJD.bcc != null) mail_bcc = MailJD.bcc.Replace("{담당자}", userinfo.email);
var mail_body = MailJD.body.Replace("{담당자}", userinfo.name);
mail_body = mail_body.Replace("{사번}", userinfo.id);
//메일본문을 생성해서 진행해야함
var mail_content = "<p>일자별 정보</p>";
mail_content += $"<br/>조회기간 : {str_sd}~{str_ed}";
mail_content += "<br/><table border='1' cellspacing='1' cellpadding='1'><tr><td>날짜</td><td>요일</td><td>시간</td></tr>";
foreach (var warnitem in WarnList)
{
mail_content += $"<tr><td>{warnitem.Key.ToShortDateString()}</td><td>{warnitem.Key.DayOfWeek.ToString()}</td><td>{warnitem.Value.ToString()}</td></tr>";
}
mail_content += "</table>";
//메일데이터를 생성한다.
//mail_to = "chikyun.kim@amkor.co.kr";
//mail_bcc = string.Empty;
//mail_cc = string.Empty;
mail_to = Pub.MailSort(mail_to, MailJD.exceptmail);
if (string.IsNullOrEmpty(mail_to) == false)
{
//db = new EEEntities();
using (var dt = new DataSet1.MailDataDataTable())
{
var newdr = dt.NewMailDataRow();
newdr.gcode = vGcode;
newdr.cate = "JD";
newdr.subject = mail_subject;
newdr.fromlist = userinfo.email;
newdr.tolist = Pub.MailSort(mail_to, MailJD.exceptmail);
newdr.bcc = mail_bcc;
newdr.cc = Pub.MailSort(mail_cc, MailJD.exceptmailcc);
newdr.pdate = DateTime.Now.ToShortDateString();
newdr.body = mail_body.Replace("{내용}", mail_content);
newdr.wuid = "dev";
newdr.wdate = DateTime.Now;
newdr.EndEdit();
dt.AddMailDataRow(newdr);
var cnt = taMailData.Update(dt);
if (cnt == 1)
{
addmsg($"[{vGcode}] {userinfo.name}({userinfo.email}) 메일 생성 완료(day)");
System.Threading.Thread.Sleep(10000);
}
}
//taMailData.Insert()
//db.MailData.Add(new MailData
//{
// gcode = vGcode,
// cate = "JD",
// subject = mail_subject,
// fromlist = userinfo.email,
// tolist = Pub.MailSort(mail_to, MailJD.exceptmail),
// bcc = mail_bcc,
// cc = Pub.MailSort(mail_cc, MailJD.exceptmailcc),
// pdate = DateTime.Now.ToShortDateString(),
// body = mail_body.Replace("{내용}", mail_content),
// wuid = "dev",
// wdate = DateTime.Now,
//});
//db.SaveChanges();
}
else
{
addmsg($"[{vGcode}] 받는사람이 소거되어 메일을 생성하지 않습니다");
}
}
}
System.Threading.Thread.Sleep(3000);
}
else
{
addmsg($"[{vGcode}] {uid.Value}({uid.Key}) 미 작성 일자가 없습니다");
}
}
//첫줄은 제목이므로 2줄이상 있어야 한다
if (NoMailList.Count > 1)
{
using (var dt = new DataSet1.MailDataDataTable())
{
var newdr = dt.NewMailDataRow();
newdr.gcode = "EET1P";
newdr.cate = "ERR";
newdr.subject = $"[GW] {vGcode} - 업무일지 담당자 이메일 경고";
newdr.fromlist = "chikyun.kim@amkor.co.kr";
newdr.tolist = "chikyun.kim@amkor.co.kr";
newdr.bcc = string.Empty;
newdr.cc = string.Empty;
newdr.pdate = DateTime.Now.ToShortDateString();
newdr.body = string.Join("<br/>", NoMailList.ToList());
newdr.wuid = "dev";
newdr.wdate = DateTime.Now;
newdr.EndEdit();
dt.AddMailDataRow(newdr);
var cnt = taMailData.Update(dt);
if (cnt == 1)
{
addmsg($"업무일지 메일없는 대상자 생성 완료(day)");
System.Threading.Thread.Sleep(10000);
}
}
}
System.Threading.Thread.Sleep(500);
}
dtMailForm.Dispose();
dtMailData.Dispose();
dtDateList.Dispose();
taMailForm.Dispose();// = new DataSet1TableAdapters.MailFormTableAdapter();
taMailData.Dispose();// = new DataSet1TableAdapters.MailDataTableAdapter();
taJobReportUserList.Dispose();// = new DataSet1TableAdapters.vJobReportUserListTableAdapter();
taJobReport.Dispose();// = new DataSet1TableAdapters.JobReportTableAdapter();
taHolidayList.Dispose();// = new DataSet1TableAdapters.HolidayLIstTableAdapter();
taGroupUser.Dispose();// = new DataSet1TableAdapters.vGroupUserTableAdapter();
taJobReportDateList.Dispose();
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
taskwait = !taskwait;
if (taskwait == false)
ChkMakeSchDayWeekTime = DateTime.Now.AddHours(-1);
}
private void timer1_Tick(object sender, EventArgs e)
{
if (task != null)
{
if (task.IsCompleted) this.btRun.Text = "완료";
else if (task.IsCanceled) this.btRun.Text = "취소";
else if (taskwait) this.btRun.Text = "대기상태";
else this.btRun.Text = "가동중";
this.btRun.Enabled = true;
}
else
{
this.btRun.Text = "사용불가";
this.btRun.Enabled = false;
}
}
private void toolStripButton1_Click_1(object sender, EventArgs e)
{
RunData();
}
}
}

View File

@@ -1,157 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>104, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="btRun.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
TgDQASA1MVpwzwAAAABJRU5ErkJggg==
</value>
</data>
<data name="toolStripButton1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
TgDQASA1MVpwzwAAAABJRU5ErkJggg==
</value>
</data>
</root>

View File

@@ -1,95 +0,0 @@

namespace JobReportMailService
{
partial class fJobReportWeek
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(fJobReportWeek));
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.btRun = new System.Windows.Forms.ToolStripButton();
this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
this.toolStrip1.SuspendLayout();
this.SuspendLayout();
//
// timer1
//
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// toolStrip1
//
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.btRun,
this.toolStripButton1});
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(473, 25);
this.toolStrip1.TabIndex = 3;
this.toolStrip1.Text = "toolStrip1";
//
// btRun
//
this.btRun.Image = ((System.Drawing.Image)(resources.GetObject("btRun.Image")));
this.btRun.ImageTransparentColor = System.Drawing.Color.Magenta;
this.btRun.Name = "btRun";
this.btRun.Size = new System.Drawing.Size(48, 22);
this.btRun.Text = "Run";
this.btRun.Click += new System.EventHandler(this.toolStripButton1_Click);
//
// toolStripButton1
//
this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image")));
this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton1.Name = "toolStripButton1";
this.toolStripButton1.Size = new System.Drawing.Size(67, 22);
this.toolStripButton1.Text = "manual";
this.toolStripButton1.Click += new System.EventHandler(this.toolStripButton1_Click_1);
//
// fJobReportWeek
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(473, 416);
this.Controls.Add(this.toolStrip1);
this.Name = "fJobReportWeek";
this.Text = "업무일지(주간보고)";
this.Load += new System.EventHandler(this.fJobReportDay_Load);
this.Controls.SetChildIndex(this.toolStrip1, 0);
this.toolStrip1.ResumeLayout(false);
this.toolStrip1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.ToolStrip toolStrip1;
private System.Windows.Forms.ToolStripButton btRun;
private System.Windows.Forms.ToolStripButton toolStripButton1;
}
}

View File

@@ -1,385 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace JobReportMailService
{
public partial class fJobReportWeek : fChildBase
{
public fJobReportWeek()
{
InitializeComponent();
}
private void fJobReportDay_Load(object sender, EventArgs e)
{
task = Task.Run(() =>
{
while (taskrun)
{
if (taskwait)
{
task.Wait(1000);
continue;
}
var ts = DateTime.Now - ChkMakeSchDayWeekTime;
if (ts.TotalMinutes <= 15)
{
if ((DateTime.Now - ConsoleTime).TotalHours >= 1.0)
{
addmsg("15분 미만이라 동작하지 않습니다");
ConsoleTime = DateTime.Now;
}
}
else if (DateTime.Now.DayOfWeek != DayOfWeek.Monday)
{
//토,일요일에는 동작하지 않는다
if ((DateTime.Now - ConsoleTime).TotalHours >= 1.0)
{
addmsg("월요일에만 동작 함");
ConsoleTime = DateTime.Now;
}
}
else if (DateTime.Now.Hour < 9)
{
if ((DateTime.Now - ConsoleTime).TotalHours >= 1.0)
{
addmsg("9시 이전에는 동작하지 않습니다");
ConsoleTime = DateTime.Now;
}
}
else
{
ChkMakeSchDayWeekTime = DateTime.Now;
try
{
RunData();
}
catch (Exception ex)
{
addmsg(ex.Message);
using (var ta = new DataSet1TableAdapters.MailDataTableAdapter())
{
using (var dt = new DataSet1.MailDataDataTable())
{
var newdr = dt.NewMailDataRow();
newdr.gcode = "EET1P";
newdr.cate = "ER";
newdr.subject = "[ERROR] 업무일지(주간) 메일작성 실패";
newdr.fromlist = "chikyun.kim@amkor.co.kr";
newdr.tolist = "chikyun.kim@amkor.co.kr";
newdr.bcc = string.Empty;
newdr.cc = string.Empty;
newdr.pdate = DateTime.Now.ToShortDateString();
newdr.body = ex.Message;
newdr.wuid = "dev";
newdr.wdate = DateTime.Now;
newdr.EndEdit();
dt.AddMailDataRow(newdr);
var cnt = ta.Update(dt);
}
}
task.Wait(5000);
}
}
Task.Delay(Delaytime).Wait();
}
});
timer1.Start();
if (Pub.setting.autoRunData)
btRun.PerformClick();
}
void RunData()
{
addmsg("업무일지 미 작성자(주간) 추출 작업을 시작 합니다");
var taMailForm = new DataSet1TableAdapters.MailFormTableAdapter();
var taMailData = new DataSet1TableAdapters.MailDataTableAdapter();
var taJobReportUserList = new DataSet1TableAdapters.vJobReportUserListTableAdapter();
var taJobReport = new DataSet1TableAdapters.JobReportTableAdapter();
var taHolidayList = new DataSet1TableAdapters.HolidayLIstTableAdapter();
var taGroupUser = new DataSet1TableAdapters.vGroupUserTableAdapter();
var taJobReportDateList = new DataSet1TableAdapters.JobReportDateListTableAdapter();
var dtMailForm = new DataSet1.MailFormDataTable();
var dtMailData = new DataSet1.MailDataDataTable();
var dtDateList = new DataSet1.JobReportDateListDataTable();
taMailForm.Fill(dtMailForm);
//기준일자는 오늘부터 -15일이다
var sd = DateTime.Now.AddDays(-15);
var ed = DateTime.Now.AddDays(-1);
var str_sd = sd.ToShortDateString();
var str_ed = ed.ToShortDateString();
var str_dt = DateTime.Now.ToShortDateString();
var gcodelist = dtMailForm.GroupBy(t => t.gcode).Select(t => t.Key).ToList();
foreach (var gcodedata in gcodelist)
{
//메일양식이 지정되어있는지 체크
var vGcode = gcodedata;
if (string.IsNullOrEmpty(vGcode)) continue;
//메일양식이 지정되어있는지 체크
var MailJW = dtMailForm.Where(t => t.gcode == vGcode & t.cate == "JW").FirstOrDefault();
if (MailJW == null)
{
addmsg($"[{vGcode}] 업무일지 미작성(주간) 메일 양식이 입력되지 않았습니다");
continue;
}
if (MailJW.exceptmail == null) MailJW.exceptmail = string.Empty;
if (MailJW.exceptmailcc == null) MailJW.exceptmailcc = string.Empty;
//오늘날짜로 주간 데이터가 등록되어있느지 확인한다.
var Existweek = taMailData.GetDataExistDay(vGcode, "JW", str_dt).Any();
if (Existweek)
{
addmsg($"[{vGcode}] 업무일지({str_dt}) (주간)보고 메일이 이미 등록되어 있습니다");
continue;
}
//대상 사용자 목록을 추출한다
var users = taJobReportUserList.GetData(vGcode);
Dictionary<string, string> uids = new Dictionary<string, string>();
foreach (var userinfo in users)
{
//해당 사용자의 오늘 날짜로 등록된 자동 데이터가 있다면 대상에 넣지 않는다
// var userinfo = user.FirstOrDefault();
if (userinfo == null || string.IsNullOrEmpty(userinfo.id)) continue; //null인게 있네? 220110
//퇴사자 확인
var = userinfo.outdate;
if (string.IsNullOrEmpty() == false)
{
//퇴사자
if (.CompareTo(str_dt) < 1) continue;
}
//이 대상의 이메일이 받는 사람에 제외되어있다면 처리하지 않는다.
if (MailJW.exceptmail == null) MailJW.exceptmail = string.Empty;
var exxptolist = MailJW.exceptmail.ToUpper().Split(';');
if (exxptolist.Contains(userinfo.email.ToUpper()) == false)
{
//모두대상으로 처리한다
//if (userdata.email.ToUpper() != ("BongSeok.Jung@amkor.co.kr").ToUpper())
uids.Add(userinfo.id, userinfo.name);
}
else addmsg($"[{vGcode}] 주간 제외대상자임 " + userinfo.email);
}
addmsg($"[{vGcode}] {uids.Count} 명의 전체 사용자가 확인 되었습니다");
//먼저 날짜목록을 가져온다
//db = new EEEntities();
//var lstDate = db.JobReport
// .Where(t => t.gcode == vGcode && t.pdate.CompareTo(str_sd) >= 0 && t.pdate.CompareTo(str_ed) < 0)
// .OrderBy(t => t.pdate)
// .GroupBy(t => t.pdate).ToList();
dtDateList = taJobReportDateList.GetData(vGcode, str_sd, str_ed);//
//날짜대로 루프를 돈다
List<DateTime> days = new List<DateTime>();
foreach (var jobdata in dtDateList)
{
// var jobdata = dateitem.FirstOrDefault();
var dt = DateTime.Parse(jobdata.pdate);
if (dt.DayOfWeek == DayOfWeek.Sunday || dt.DayOfWeek == DayOfWeek.Saturday) continue;
//이 날짜가 휴일인지 체크한다.
var Holyinfo = taHolidayList.GetData(jobdata.pdate).FirstOrDefault();
//var Holyinfo = db.HolidayLIst.Where(t => t.pdate == jobdata.pdate).FirstOrDefault();
if (Holyinfo != null && Holyinfo.free == true) continue;
//이날짜에는 8시간을 근무 해야 한다
days.Add(DateTime.Parse(jobdata.pdate));
}
addmsg($"[{vGcode}] {days.Count} 건의 일자가 확인 되었습니다(기간:{str_sd}~{str_ed}");
//사용자 목록과 날짜 목록을 모두 수집했다
List<ReportUserData> totWarnList = new List<ReportUserData>();
foreach (var uid in uids)
{
//이사용자의 날짜별 근무시간을 확인한다.
var UserDatas = taJobReport.GetUserDates(vGcode, uid.Key, str_sd, str_ed);
Dictionary<DateTime, double?> WarnList = new Dictionary<DateTime, double?>();
foreach (var dt in days.OrderBy(t => t))
{
var dtstr = dt.ToShortDateString();
var userdata = UserDatas.Where(t => t.pdate == dtstr); //해당날짜의 데이터를 확인한다.
var hrs = 0.0;
if (userdata.Any()) hrs = (double)userdata.Sum(t => t.hrs);
//자료를 입력하지 않았거나, 입력시간이 8시간 미만이면 경고한다
if (hrs < 8.0)
{
//WarnList.Add(dt, hrs);
totWarnList.Add(new ReportUserData { date = dt, hrs = hrs, uid = uid.Key, uname = uid.Value }); //전체알림시에 사용하는 목록
}
}
}
if (totWarnList.Count > 0)
{
addmsg($"[{vGcode}] 주간 경고 데이터는 {totWarnList.Count} 건 입니다");
//오늘잘짜로 등록된 자료가 있으면 처리하지 안흔다.
//해당 사용자의 오늘 날짜로 등록된 자동 데이터가 있다면 대상에 넣지 않는다
//db = new EEEntities();
var mail_subject = MailJW.subject;
var mail_to = MailJW.tolist;//.Replace("{담당자}", userinfo.email);
var pmail_cc = new List<string>(); //
if (MailJW.cc != null) pmail_cc = MailJW.cc.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).ToList();//.Replace("{담당자}", userinfo.email);
var mail_bcc = string.Empty;
if (MailJW.bcc != null) mail_bcc = MailJW.bcc;//.Replace("{담당자}", userinfo.email);
var mail_body = MailJW.body;//.Replace("{담당자}", userinfo.name);
//메일본문을 생성해서 진행해야함
var vmail_body = "<p>담당자별 정보</p>";
vmail_body += "<br/>조회기간 : " + sd.ToShortDateString() + "~" + ed.ToShortDateString();
////참고데이터를 추가한다
var usergrplist = totWarnList.OrderBy(t => t.uname).GroupBy(t => t.uid).ToList();
//foreach (var item in usergrplist)
//{
// //var fitem = item.FirstOrDefault();
// //db = new EEEntities();
// var userinfo = item.FirstOrDefault();// db.vGroupUser.Where(t => t.gcode == vGcode && t.id == fitem.uid).FirstOrDefault();
// var username = string.Empty;
// if (userinfo != null)
// {
// if (string.IsNullOrEmpty(userinfo.email) == false)
// {
// //if (pmail_cc.Contains(userinfo.email) == false)
// // pmail_cc.Add(userinfo.email);
// }
// username = userinfo.name;
// }
//}
vmail_body += "<br/><table border='1' cellspacing='1' cellpadding='1'><tr><td>담당자</td><td>일자별시간</td></tr>";
var mail_cc = string.Join(";", pmail_cc); //모든 대상을 세미콜론으로 붙인다.
foreach (var warnitem in usergrplist)
{
var item = warnitem.FirstOrDefault();
vmail_body += $"<tr><td>{item.uname}({item.uid})</td><td>";
foreach (var ii in warnitem.OrderBy(t => t.date))
{
vmail_body += $" {ii.date.ToString("MM/dd")}({ii.hrs}h)";
}
vmail_body += "</td></tr>";
}
vmail_body += "</table>";
//메일데이터를 생성한다.
//mail_bcc = string.Empty;
//mail_cc = string.Empty;
//mail_to = "chikyun.kim@amkor.co.kr";
//db = new EEEntities();
mail_to = Pub.MailSort(mail_to, MailJW.exceptmail);
if (string.IsNullOrEmpty(mail_to) == false)
{
using (var dt = new DataSet1.MailDataDataTable())
{
var newdr = dt.NewMailDataRow();
newdr.gcode = vGcode;
newdr.cate = "JW";
newdr.subject = mail_subject;
newdr.fromlist = "EETGW@amkor.co.kr";
newdr.tolist = Pub.MailSort(mail_to, MailJW.exceptmail);
newdr.bcc = mail_bcc;
newdr.cc = Pub.MailSort(mail_cc, MailJW.exceptmailcc);
newdr.pdate = DateTime.Now.ToShortDateString();
newdr.body = mail_body.Replace("{내용}", vmail_body);
newdr.wuid = "dev";
newdr.wdate = DateTime.Now;
newdr.EndEdit();
dt.AddMailDataRow(newdr);
var cnt = taMailData.Update(dt);
if (cnt == 1)
{
addmsg($"[{vGcode}] {cnt}건) 메일 생성 완료(week)");
System.Threading.Thread.Sleep(10000);
}
}
}
else
{
addmsg($"[{vGcode}] 받는사람이 소거되어 메일을 생성하지 않습니다");
}
}
System.Threading.Thread.Sleep(500);
}
dtMailForm.Dispose();
dtMailData.Dispose();
dtDateList.Dispose();
taMailForm.Dispose();// = new DataSet1TableAdapters.MailFormTableAdapter();
taMailData.Dispose();// = new DataSet1TableAdapters.MailDataTableAdapter();
taJobReportUserList.Dispose();// = new DataSet1TableAdapters.vJobReportUserListTableAdapter();
taJobReport.Dispose();// = new DataSet1TableAdapters.JobReportTableAdapter();
taHolidayList.Dispose();// = new DataSet1TableAdapters.HolidayLIstTableAdapter();
taGroupUser.Dispose();// = new DataSet1TableAdapters.vGroupUserTableAdapter();
taJobReportDateList.Dispose();
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
taskwait = !taskwait;
}
private void timer1_Tick(object sender, EventArgs e)
{
if (task != null)
{
if (task.IsCompleted) this.btRun.Text = "완료";
else if (task.IsCanceled) this.btRun.Text = "취소";
else if (taskwait) this.btRun.Text = "대기상태";
else this.btRun.Text = "가동중";
this.btRun.Enabled = true;
}
else
{
this.btRun.Text = "사용불가";
this.btRun.Enabled = false;
}
}
private void toolStripButton1_Click_1(object sender, EventArgs e)
{
RunData();
}
}
}

View File

@@ -1,157 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>104, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="btRun.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
TgDQASA1MVpwzwAAAABJRU5ErkJggg==
</value>
</data>
<data name="toolStripButton1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
TgDQASA1MVpwzwAAAABJRU5ErkJggg==
</value>
</data>
</root>

View File

@@ -1,83 +0,0 @@

namespace JobReportMailService
{
partial class fNoScheduleDayWeek
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(fNoScheduleDayWeek));
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.btRun = new System.Windows.Forms.ToolStripButton();
this.toolStrip1.SuspendLayout();
this.SuspendLayout();
//
// timer1
//
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// toolStrip1
//
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.btRun});
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(473, 25);
this.toolStrip1.TabIndex = 2;
this.toolStrip1.Text = "toolStrip1";
//
// btRun
//
this.btRun.Image = ((System.Drawing.Image)(resources.GetObject("btRun.Image")));
this.btRun.ImageTransparentColor = System.Drawing.Color.Magenta;
this.btRun.Name = "btRun";
this.btRun.Size = new System.Drawing.Size(48, 22);
this.btRun.Text = "Run";
this.btRun.Click += new System.EventHandler(this.toolStripButton1_Click);
//
// fNoScheduleDayWeek
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(473, 416);
this.Controls.Add(this.toolStrip1);
this.Name = "fNoScheduleDayWeek";
this.Text = "스케쥴없음(주보고)";
this.Load += new System.EventHandler(this.fJobReportDay_Load);
this.Controls.SetChildIndex(this.toolStrip1, 0);
this.toolStrip1.ResumeLayout(false);
this.toolStrip1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.ToolStrip toolStrip1;
private System.Windows.Forms.ToolStripButton btRun;
}
}

View File

@@ -1,280 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace JobReportMailService
{
public partial class fNoScheduleDayWeek : fChildBase
{
public fNoScheduleDayWeek()
{
InitializeComponent();
}
private void fJobReportDay_Load(object sender, EventArgs e)
{
task = Task.Run(() =>
{
while (taskrun)
{
if (taskwait)
{
if (task != null)
task.Wait(1000);
continue;
}
var ts = DateTime.Now - ChkMakeSchDayWeekTime;
if (ts.TotalMinutes <= 15)
{
if ((DateTime.Now - ConsoleTime).TotalHours >= 1.0)
{
addmsg("15분 미만이라 동작하지 않습니다");
ConsoleTime = DateTime.Now;
}
}
else if (DateTime.Now.DayOfWeek != DayOfWeek.Monday)
{
//토,일요일에는 동작하지 않는다
if ((DateTime.Now - ConsoleTime).TotalHours >= 1.0)
{
addmsg("월요일에만 동작 합니다");
ConsoleTime = DateTime.Now;
}
}
else if (DateTime.Now.Hour < 10) //10시부터 동작한다
{
if ((DateTime.Now - ConsoleTime).TotalHours >= 1.0)
{
addmsg("9시 이전에는 동작하지 않습니다");
ConsoleTime = DateTime.Now;
}
}
else
{
ChkMakeSchDayWeekTime = DateTime.Now;
try
{
RunData();
}
catch (Exception ex)
{
addmsg(ex.Message);
using (var ta = new DataSet1TableAdapters.MailDataTableAdapter())
{
using (var dt = new DataSet1.MailDataDataTable())
{
var newdr = dt.NewMailDataRow();
newdr.gcode = "EET1P";
newdr.cate = "ER";
newdr.subject = "[ERROR] 스케쥴없음 메일작성 실패";
newdr.fromlist = "chikyun.kim@amkor.co.kr";
newdr.tolist = "chikyun.kim@amkor.co.kr";
newdr.bcc = string.Empty;
newdr.cc = string.Empty;
newdr.pdate = DateTime.Now.ToShortDateString();
newdr.body = ex.Message;
newdr.wuid = "dev";
newdr.wdate = DateTime.Now;
newdr.EndEdit();
dt.AddMailDataRow(newdr);
var cnt = ta.Update(dt);
}
}
task.Wait(5000);
}
}
Task.Delay(Delaytime).Wait();
}
});
timer1.Start();
if (Pub.setting.autoRunData)
btRun.PerformClick();
}
void RunData()
{
addmsg("스케쥴입력(주) 미 작성자 추출 작업을 시작 합니다");
var db = new EEEntities();
//기준일자는 오늘부터 -15일이다
var sd = DateTime.Now.AddDays(-15);
var ed = DateTime.Now;
var str_sd = sd.ToShortDateString();
var str_ed = ed.ToShortDateString();
var str_dt = DateTime.Now.ToShortDateString();
var gcodelist = db.MailForm.GroupBy(t => t.gcode).ToList();
foreach (var gcodedata in gcodelist)
{
//메일양식이 지정되어있는지 체크
var vGcode = gcodedata.Key;
if (string.IsNullOrEmpty(vGcode)) continue;
//메일양식이 지정되어있는지 체크
var MailJD = db.MailForm.AsNoTracking().Where(t => t.gcode == vGcode & t.cate == "SN").FirstOrDefault();
if (MailJD == null)
{
//토,일요일에는 동작하지 않는다
addmsg($"[{vGcode}] 메일 양식(SN)이 입력되지 않았습니다");
continue;
}
if (MailJD.exceptmail == null) MailJD.exceptmail = string.Empty;
if (MailJD.exceptmailcc == null) MailJD.exceptmailcc = string.Empty;
//오늘날짜로 데이터가 등록되어있느지 확인한다.
db = new EEEntities();
var Existweek = db.MailData.AsNoTracking().Where(t => t.gcode == vGcode && t.cate == "SN" && t.pdate == str_dt).Any();
if (Existweek)
{
addmsg($"[{vGcode}] 스케쥴(day)({str_dt}) 보고 메일이 이미 등록되어 있습니다");
continue;
}
//대상 사용자 목록을 추출한다
//var ta = new DataSet1TableAdapters.vMailingProjectScheduleTableAdapter();
//var users = new DataSet1.vMailingProjectScheduleDataTable();
//ta.Fill(users);
db = new EEEntities();
var projects = db.Projects.AsNoTracking().Where(t => t.gcode == vGcode && t.status == "진행" && (t.isdel == null || t.isdel == false)).OrderBy(t => t.sdate).ToList();
// db.vMailingProjectSchedule.ToList();// .vJobReportForUser.Where(t => t.gcode == Pub.vGcode).GroupBy(t => t.id);
addmsg($"[{vGcode}] {projects.Count} 건의 데이터가 확인 되었습니다");
//메일데이터 생성
var body = new System.Text.StringBuilder();
body.AppendLine("<table border='1' cellspacing='1' cellpadding='1' style='text-align:center;'>");
body.AppendLine("<tr>");
body.AppendLine("<td>시작일</td>");
body.AppendLine("<td>상태</td>");
body.AppendLine("<td>번호</td>");
body.AppendLine("<td>Project</td>");
body.AppendLine("<td>요청</td>");
body.AppendLine("<td>Champion</td>");
body.AppendLine("<td>협업</td>");
body.AppendLine("<td>만료일</td>");
body.AppendLine("<td>수량</td>");
body.AppendLine("<td>외주금액</td>");
body.AppendLine("<td>자체금액</td>");
body.AppendLine("<td>절감액</td>");
body.AppendLine("<td>CR/CF</td>");
body.AppendLine("</tr>");
//var gp = projects.GroupBy(t => t.idx);
foreach (var row in projects)
{
//스케쥴에서 데이터를 찾는다.
var cnt = db.EETGW_ProjectsSchedule.AsNoTracking().Where(t => t.gcode == vGcode && t.project == row.idx).Any();
if (cnt == true) continue; //등록되었다
body.AppendLine($"<tr>");
body.AppendLine($"<td>{row.sdate}</td>");
body.AppendLine($"<td>{row.status}</td>");
body.AppendLine($"<td>{row.idx}</td>");
body.AppendLine($"<td>{row.name}</td>");
body.AppendLine($"<td>{row.reqstaff}</td>");
body.AppendLine($"<td>{row.userManager}</td>");
body.AppendLine($"<td>{row.usermain}/{row.usersub}/{row.userhw2}</td>");
body.AppendLine($"<td>{row.edate}</td>");
body.AppendLine($"<td>{row.cnt}</td>");
body.AppendLine($"<td>{row.costo}</td>");
body.AppendLine($"<td>{row.costn}</td>");
body.AppendLine($"<td>{row.costo - row.costn}</td>");
body.AppendLine($"<td>{row.orderno}</td>");
body.AppendLine($"</tr>");
}
body.AppendLine("</table>");
//일별경고(월요일제외)
if (MailJD != null)
{
var mail_subject = MailJD.subject;//.Replace("{담당자}", userinfo.name).Replace("{사번}", userinfo.id);
var mail_to = MailJD.tolist;//.Replace("{담당자}", userinfo.email);
var mail_cc = string.Empty; //
if (MailJD.cc != null) mail_cc = MailJD.cc;//.Replace("{담당자}", userinfo.email);
var mail_bcc = string.Empty;
if (MailJD.bcc != null) mail_bcc = MailJD.bcc;//.Replace("{담당자}", userinfo.email);
var mail_body = MailJD.body;//.Replace("{담당자}", userinfo.name);
//mail_body = mail_body.Replace("{사번}", userinfo.id);
//메일본문을 생성해서 진행해야함
var mail_content = mail_body.Replace("{data}", body.ToString());
//메일데이터를 생성한다.
//mail_to = "chikyun.kim@amkor.co.kr";
//mail_bcc = string.Empty;
//mail_cc = string.Empty;
mail_to = Pub.MailSort(mail_to, MailJD.exceptmail);
if (string.IsNullOrEmpty(mail_to) == false)
{
db = new EEEntities();
db.MailData.Add(new MailData
{
gcode = vGcode,
cate = "SN",
subject = mail_subject,
fromlist = "EETGW@amkor.co.kr",
tolist = Pub.MailSort(mail_to, MailJD.exceptmail),
bcc = mail_bcc,
cc = Pub.MailSort(mail_cc, MailJD.exceptmailcc),
pdate = DateTime.Now.ToShortDateString(),
body = mail_content,
wuid = "DEV",
wdate = DateTime.Now,
});
db.SaveChanges();
addmsg($"[{vGcode}] 메일 전송 완료(no스케쥴week)");
System.Threading.Thread.Sleep(10000);
}
else
{
addmsg($"[{vGcode}] 받는사람이 소거되어 메일을 생성하지 않습니다");
}
}
System.Threading.Thread.Sleep(500);
}
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
taskwait = !taskwait;
}
private void timer1_Tick(object sender, EventArgs e)
{
if (task != null)
{
if (task.IsCompleted) this.btRun.Text = "완료";
else if (task.IsCanceled) this.btRun.Text = "취소";
else if (taskwait) this.btRun.Text = "대기상태";
else this.btRun.Text = "가동중";
this.btRun.Enabled = true;
}
else
{
this.btRun.Text = "사용불가";
this.btRun.Enabled = false;
}
}
}
}

View File

@@ -1,142 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>104, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="btRun.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
TgDQASA1MVpwzwAAAABJRU5ErkJggg==
</value>
</data>
</root>

View File

@@ -1,83 +0,0 @@

namespace JobReportMailService
{
partial class fScheduleDay
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(fScheduleDay));
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.btRun = new System.Windows.Forms.ToolStripButton();
this.toolStrip1.SuspendLayout();
this.SuspendLayout();
//
// timer1
//
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// toolStrip1
//
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.btRun});
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(473, 25);
this.toolStrip1.TabIndex = 2;
this.toolStrip1.Text = "toolStrip1";
//
// btRun
//
this.btRun.Image = ((System.Drawing.Image)(resources.GetObject("btRun.Image")));
this.btRun.ImageTransparentColor = System.Drawing.Color.Magenta;
this.btRun.Name = "btRun";
this.btRun.Size = new System.Drawing.Size(48, 22);
this.btRun.Text = "Run";
this.btRun.Click += new System.EventHandler(this.toolStripButton1_Click);
//
// fScheduleDay
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(473, 416);
this.Controls.Add(this.toolStrip1);
this.Name = "fScheduleDay";
this.Text = "프로젝트 스케쥴(일보고)";
this.Load += new System.EventHandler(this.fJobReportDay_Load);
this.Controls.SetChildIndex(this.toolStrip1, 0);
this.toolStrip1.ResumeLayout(false);
this.toolStrip1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.ToolStrip toolStrip1;
private System.Windows.Forms.ToolStripButton btRun;
}
}

View File

@@ -1,283 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace JobReportMailService
{
public partial class fScheduleDay : fChildBase
{
public fScheduleDay()
{
InitializeComponent();
}
private void fJobReportDay_Load(object sender, EventArgs e)
{
task = Task.Run(() =>
{
while (taskrun)
{
if (taskwait)
{
if (task != null)
task.Wait(1000);
continue;
}
var ts = DateTime.Now - ChkMakeSchDayWeekTime;
if (ts.TotalMinutes <= 15)
{
if ((DateTime.Now - ConsoleTime).TotalHours >= 1.0)
{
addmsg("15분 미만이라 동작하지 않습니다");
ConsoleTime = DateTime.Now;
}
}
else if (DateTime.Now.DayOfWeek == DayOfWeek.Saturday ||
DateTime.Now.DayOfWeek == DayOfWeek.Sunday)
{
//토,일요일에는 동작하지 않는다
if ((DateTime.Now - ConsoleTime).TotalHours >= 1.0)
{
addmsg("토/일/월에는 동작하지 않습니다");
ConsoleTime = DateTime.Now;
}
}
else if (DateTime.Now.Hour < 10) //10시부터 동작한다
{
if ((DateTime.Now - ConsoleTime).TotalHours >= 1.0)
{
addmsg("10시 이전에는 동작하지 않습니다");
ConsoleTime = DateTime.Now;
}
}
else
{
ChkMakeSchDayWeekTime = DateTime.Now;
try
{
RunData();
}
catch (Exception ex)
{
addmsg(ex.Message);
using (var ta = new DataSet1TableAdapters.MailDataTableAdapter())
{
using (var dt = new DataSet1.MailDataDataTable())
{
var newdr = dt.NewMailDataRow();
newdr.gcode = "EET1P";
newdr.cate = "ER";
newdr.subject = "[ERROR] 스케쥴(day) 메일작성 실패";
newdr.fromlist = "chikyun.kim@amkor.co.kr";
newdr.tolist = "chikyun.kim@amkor.co.kr";
newdr.bcc = string.Empty;
newdr.cc = string.Empty;
newdr.pdate = DateTime.Now.ToShortDateString();
newdr.body = ex.Message;
newdr.wuid = "dev";
newdr.wdate = DateTime.Now;
newdr.EndEdit();
dt.AddMailDataRow(newdr);
var cnt = ta.Update(dt);
}
}
task.Wait(5000);
}
}
Task.Delay(Delaytime).Wait();
}
});
timer1.Start();
if (Pub.setting.autoRunData)
btRun.PerformClick();
}
void RunData()
{
addmsg("업무일지 미 작성자 추출 작업을 시작 합니다");
var db = new EEEntities();
//기준일자는 오늘부터 -15일이다
var sd = DateTime.Now.AddDays(-15);
var ed = DateTime.Now;
var str_sd = sd.ToShortDateString();
var str_ed = ed.ToShortDateString();
var str_dt = DateTime.Now.ToShortDateString();
var gcodelist = db.MailForm.GroupBy(t => t.gcode).ToList();
foreach (var gcodedata in gcodelist)
{
//메일양식이 지정되어있는지 체크
var vGcode = gcodedata.Key;
if (string.IsNullOrEmpty(vGcode)) continue;
//메일양식이 지정되어있는지 체크
var MailJD = db.MailForm.Where(t => t.gcode == vGcode & t.cate == "SJ").FirstOrDefault();
if (MailJD == null)
{
//토,일요일에는 동작하지 않는다
addmsg($"[{vGcode}] 메일 양식(SJ)이 입력되지 않았습니다");
continue;
}
if (MailJD.exceptmail == null) MailJD.exceptmail = string.Empty;
if (MailJD.exceptmailcc == null) MailJD.exceptmailcc = string.Empty;
//오늘날짜로 데이터가 등록되어있느지 확인한다.
db = new EEEntities();
var Existweek = db.MailData.Where(t => t.gcode == vGcode && t.cate == "SJ" && t.pdate == str_dt).Any();
if (Existweek)
{
addmsg($"[{vGcode}] 스케쥴(day)({str_dt}) 보고 메일이 이미 등록되어 있습니다");
continue;
}
//대상 사용자 목록을 추출한다
var ta = new DataSet1TableAdapters.vMailingProjectScheduleTableAdapter();
var users = new DataSet1.vMailingProjectScheduleDataTable();
ta.Fill(users,vGcode);
//var users = db.vMailingProjectSchedule.ToList();// .vJobReportForUser.Where(t => t.gcode == Pub.vGcode).GroupBy(t => t.id);
addmsg($"[{vGcode}] {users.Count} 명의 데이터가 확인 되었습니다");
//메일데이터 생성
var body = new System.Text.StringBuilder();
body.AppendLine("<table border='1' cellspacing='1' cellpadding='1' style='text-align:center;'>");
body.AppendLine("<tr>");
body.AppendLine("<td>진행(%)</td>");
body.AppendLine("<td>Project</td>");
body.AppendLine("<td>Champion</td>");
body.AppendLine("<td>등록일</td>");
body.AppendLine("<td>스케쥴</td>");
body.AppendLine("</tr>");
var gp = users.GroupBy(t => t.idx);
foreach (var row in gp)
{
var prc = row.Sum(t => t.progress) / row.Count();
var dr = row.FirstOrDefault();
body.AppendLine($"<tr>");
body.AppendLine($"<td>{prc}</td>");
body.AppendLine($"<td>[{dr.idx}] {dr.name}</td>");
body.AppendLine($"<td>{dr.userManager}</td>");
body.AppendLine($"<td>{dr.pdate}</td>");
body.AppendLine("<td>");
body.AppendLine("<table border='1' cellspacing='1' cellpadding='1' style='text-align:center;'>");
body.AppendLine("<tr>");
body.AppendLine("<td rowspan='2'>No</td><td rowspan='2'>Title</td><td colspan='2'>Plan(ww)</td><td colspan='2'>Actual(ww)</td><td>진행</td><td>비고</td>");
body.AppendLine("</tr>");
body.AppendLine("<tr>");
body.AppendLine("<td>시작</td><td>완료</td><td>시작</td><td>완료</td><td>%</td><td>&nbsp;</td>");
body.AppendLine("</tr>");
var ll = row.OrderBy(t => t.seq).ToList();
foreach (var srow in ll)
{
body.AppendLine($"<tr>");
body.AppendLine($"<td>{srow.seq}</td>");
body.AppendLine($"<td>{srow.title}</td>");
body.AppendLine($"<td>{srow.sw}</td>");
body.AppendLine($"<td>{srow.ew}</td>");
body.AppendLine($"<td>{srow.swa}</td>");
body.AppendLine($"<td>{srow.ewa}</td>");
body.AppendLine($"<td>{srow.progress}</td>");
body.AppendLine($"<td>{srow.memo}</td>");
body.AppendLine($"</tr>");
}
body.AppendLine("</table>");
body.AppendLine("</td>");
//여기에 스케쥴이 들어가야한다
body.AppendLine($"</tr>");
}
body.AppendLine("</table>");
//일별경고(월요일제외)
if (MailJD != null)
{
var mail_subject = MailJD.subject;//.Replace("{담당자}", userinfo.name).Replace("{사번}", userinfo.id);
var mail_to = MailJD.tolist;//.Replace("{담당자}", userinfo.email);
var mail_cc = string.Empty; //
if (MailJD.cc != null) mail_cc = MailJD.cc;//.Replace("{담당자}", userinfo.email);
var mail_bcc = string.Empty;
if (MailJD.bcc != null) mail_bcc = MailJD.bcc;//.Replace("{담당자}", userinfo.email);
var mail_body = MailJD.body;//.Replace("{담당자}", userinfo.name);
//mail_body = mail_body.Replace("{사번}", userinfo.id);
//메일본문을 생성해서 진행해야함
var mail_content = mail_body.Replace("{data}", body.ToString());
//메일데이터를 생성한다.
//mail_to = "chikyun.kim@amkor.co.kr";
//mail_bcc = string.Empty;
//mail_cc = string.Empty;
mail_to = Pub.MailSort(mail_to, MailJD.exceptmail);
if (string.IsNullOrEmpty(mail_to) == false)
{
db = new EEEntities();
db.MailData.Add(new MailData
{
gcode = vGcode,
cate = "SJ",
subject = mail_subject,
fromlist = "eetgw@amkor.co.kr",
tolist = Pub.MailSort(mail_to, MailJD.exceptmail),
bcc = mail_bcc,
cc = Pub.MailSort(mail_cc, MailJD.exceptmailcc),
pdate = DateTime.Now.ToShortDateString(),
body = mail_content,
wuid = "DEV",
wdate = DateTime.Now,
});
db.SaveChanges();
addmsg($"[{vGcode}] 메일 전송 완료(스케쥴day)");
System.Threading.Thread.Sleep(10000);
}
else
{
addmsg($"[{vGcode}] 받는사람이 소거되어 메일을 생성하지 않습니다");
}
}
System.Threading.Thread.Sleep(500);
}
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
taskwait = !taskwait;
}
private void timer1_Tick(object sender, EventArgs e)
{
if (task != null)
{
if (task.IsCompleted) this.btRun.Text = "완료";
else if (task.IsCanceled) this.btRun.Text = "취소";
else if (taskwait) this.btRun.Text = "대기상태";
else this.btRun.Text = "가동중";
this.btRun.Enabled = true;
}
else
{
this.btRun.Text = "사용불가";
this.btRun.Enabled = false;
}
}
}
}

View File

@@ -1,142 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>104, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="btRun.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
TgDQASA1MVpwzwAAAABJRU5ErkJggg==
</value>
</data>
</root>

View File

@@ -1,83 +0,0 @@

namespace JobReportMailService
{
partial class fScheduleDayWeek
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(fScheduleDayWeek));
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.btRun = new System.Windows.Forms.ToolStripButton();
this.toolStrip1.SuspendLayout();
this.SuspendLayout();
//
// timer1
//
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// toolStrip1
//
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.btRun});
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(473, 25);
this.toolStrip1.TabIndex = 2;
this.toolStrip1.Text = "toolStrip1";
//
// btRun
//
this.btRun.Image = ((System.Drawing.Image)(resources.GetObject("btRun.Image")));
this.btRun.ImageTransparentColor = System.Drawing.Color.Magenta;
this.btRun.Name = "btRun";
this.btRun.Size = new System.Drawing.Size(48, 22);
this.btRun.Text = "Run";
this.btRun.Click += new System.EventHandler(this.toolStripButton1_Click);
//
// fScheduleDayWeek
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(473, 416);
this.Controls.Add(this.toolStrip1);
this.Name = "fScheduleDayWeek";
this.Text = "프로젝트 스케쥴(주보고)";
this.Load += new System.EventHandler(this.fJobReportDay_Load);
this.Controls.SetChildIndex(this.toolStrip1, 0);
this.toolStrip1.ResumeLayout(false);
this.toolStrip1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.ToolStrip toolStrip1;
private System.Windows.Forms.ToolStripButton btRun;
}
}

View File

@@ -1,287 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace JobReportMailService
{
public partial class fScheduleDayWeek : fChildBase
{
public fScheduleDayWeek()
{
InitializeComponent();
}
private void fJobReportDay_Load(object sender, EventArgs e)
{
task = Task.Run(() =>
{
while (taskrun)
{
if (taskwait)
{
if (task != null)
task.Wait(1000);
continue;
}
var ts = DateTime.Now - ChkMakeSchDayWeekTime;
if (ts.TotalMinutes <= 15)
{
if ((DateTime.Now - ConsoleTime).TotalHours >= 1.0)
{
addmsg("15분 미만이라 동작하지 않습니다");
ConsoleTime = DateTime.Now;
}
}
else if (DateTime.Now.DayOfWeek != DayOfWeek.Monday)
{
//토,일요일에는 동작하지 않는다
if ((DateTime.Now - ConsoleTime).TotalHours >= 1.0)
{
addmsg("월요일에만 동작 합니다");
ConsoleTime = DateTime.Now;
}
}
else if (DateTime.Now.Hour < 10) //10시부터 동작한다
{
if ((DateTime.Now - ConsoleTime).TotalHours >= 1.0)
{
addmsg("9시 이전에는 동작하지 않습니다");
ConsoleTime = DateTime.Now;
}
}
else
{
ChkMakeSchDayWeekTime = DateTime.Now;
try
{
RunData();
}
catch (Exception ex)
{
addmsg(ex.Message);
using (var ta = new DataSet1TableAdapters.MailDataTableAdapter())
{
using (var dt = new DataSet1.MailDataDataTable())
{
var newdr = dt.NewMailDataRow();
newdr.gcode = "EET1P";
newdr.cate = "ER";
newdr.subject = "[ERROR] 스케쥴(주) 메일작성 실패";
newdr.fromlist = "chikyun.kim@amkor.co.kr";
newdr.tolist = "chikyun.kim@amkor.co.kr";
newdr.bcc = string.Empty;
newdr.cc = string.Empty;
newdr.pdate = DateTime.Now.ToShortDateString();
newdr.body = ex.Message;
newdr.wuid = "dev";
newdr.wdate = DateTime.Now;
newdr.EndEdit();
dt.AddMailDataRow(newdr);
var cnt = ta.Update(dt);
}
}
task.Wait(5000);
}
}
Task.Delay(Delaytime).Wait();
}
});
timer1.Start();
if (Pub.setting.autoRunData)
btRun.PerformClick();
}
void RunData()
{
addmsg("스케쥴관리(주) 미 작성자 추출 작업을 시작 합니다");
var db = new EEEntities();
//기준일자는 오늘부터 -15일이다
var sd = DateTime.Now.AddDays(-15);
var ed = DateTime.Now;
var str_sd = sd.ToShortDateString();
var str_ed = ed.ToShortDateString();
var str_dt = DateTime.Now.ToShortDateString();
var gcodelist = db.MailForm.GroupBy(t => t.gcode).ToList();
foreach (var gcodedata in gcodelist)
{
//메일양식이 지정되어있는지 체크
var vGcode = gcodedata.Key;
if (string.IsNullOrEmpty(vGcode)) continue;
//메일양식이 지정되어있는지 체크
var MailJD = db.MailForm.Where(t => t.gcode == vGcode & t.cate == "SP").FirstOrDefault();
if (MailJD == null)
{
//토,일요일에는 동작하지 않는다
addmsg($"[{vGcode}] 메일 양식(SP)이 입력되지 않았습니다");
continue;
}
if (MailJD.exceptmail == null) MailJD.exceptmail = string.Empty;
if (MailJD.exceptmailcc == null) MailJD.exceptmailcc = string.Empty;
//오늘날짜로 데이터가 등록되어있느지 확인한다.
db = new EEEntities();
var Existweek = db.MailData.Where(t => t.gcode == vGcode && t.cate == "SP" && t.pdate == str_dt).Any();
if (Existweek)
{
addmsg($"[{vGcode}] 스케쥴(day)({str_dt}) 보고 메일이 이미 등록되어 있습니다");
continue;
}
//대상 사용자 목록을 추출한다
var ta = new DataSet1TableAdapters.vMailingProjectScheduleTableAdapter();
var users = new DataSet1.vMailingProjectScheduleDataTable();
ta.Fill(users,vGcode);
//var users = db.vMailingProjectSchedule.ToList();// .vJobReportForUser.Where(t => t.gcode == Pub.vGcode).GroupBy(t => t.id);
addmsg($"[{vGcode}] {users.Count} 명의 데이터가 확인 되었습니다");
//메일데이터 생성
var body = new System.Text.StringBuilder();
body.AppendLine("<table border='1' cellspacing='1' cellpadding='1' style='text-align:center;'>");
body.AppendLine("<tr>");
body.AppendLine("<td>진행(%)</td>");
body.AppendLine("<td>Project</td>");
body.AppendLine("<td>Champion</td>");
body.AppendLine("<td>등록일</td>");
body.AppendLine("<td>스케쥴</td>");
body.AppendLine("</tr>");
var gp = users.GroupBy(t => t.idx);
foreach (var row in gp)
{
var prc = row.Sum(t => t.progress) / row.Count();
var dr = row.FirstOrDefault();
body.AppendLine($"<tr>");
body.AppendLine($"<td>{prc}</td>");
body.AppendLine($"<td>[{dr.idx}] {dr.name}</td>");
body.AppendLine($"<td>{dr.userManager}</td>");
body.AppendLine($"<td>{dr.pdate}</td>");
body.AppendLine("<td>");
body.AppendLine("<table border='1' cellspacing='1' cellpadding='1' style='text-align:center;'>");
body.AppendLine("<tr>");
body.AppendLine("<td rowspan='2'>No</td><td rowspan='2'>Title</td><td colspan='2'>Plan(ww)</td><td colspan='2'>Actual(ww)</td><td>진행</td><td>비고</td>");
body.AppendLine("</tr>");
body.AppendLine("<tr>");
body.AppendLine("<td>시작</td><td>완료</td><td>시작</td><td>완료</td><td>%</td><td>&nbsp;</td>");
body.AppendLine("</tr>");
var ll = row.OrderBy(t => t.seq).ToList();
foreach (var srow in ll)
{
body.AppendLine($"<tr>");
body.AppendLine($"<td>{srow.seq}</td>");
body.AppendLine($"<td>{srow.title}</td>");
body.AppendLine($"<td>{srow.sw}</td>");
body.AppendLine($"<td>{srow.ew}</td>");
body.AppendLine($"<td>{srow.swa}</td>");
body.AppendLine($"<td>{srow.ewa}</td>");
body.AppendLine($"<td>{srow.progress}</td>");
body.AppendLine($"<td>{srow.memo}</td>");
body.AppendLine($"</tr>");
}
body.AppendLine("</table>");
body.AppendLine("</td>");
//여기에 스케쥴이 들어가야한다
body.AppendLine($"</tr>");
}
body.AppendLine("</table>");
//일별경고(월요일제외)
if (MailJD != null)
{
var mail_subject = MailJD.subject;//.Replace("{담당자}", userinfo.name).Replace("{사번}", userinfo.id);
var mail_to = MailJD.tolist;//.Replace("{담당자}", userinfo.email);
var mail_cc = string.Empty; //
if (MailJD.cc != null) mail_cc = MailJD.cc;//.Replace("{담당자}", userinfo.email);
var mail_bcc = string.Empty;
if (MailJD.bcc != null) mail_bcc = MailJD.bcc;//.Replace("{담당자}", userinfo.email);
var mail_body = MailJD.body;//.Replace("{담당자}", userinfo.name);
//mail_body = mail_body.Replace("{사번}", userinfo.id);
//메일본문을 생성해서 진행해야함
var mail_content = mail_body.Replace("{data}", body.ToString());
//메일데이터를 생성한다.
//mail_to = "chikyun.kim@amkor.co.kr";
//mail_bcc = string.Empty;
//mail_cc = string.Empty;
mail_to = Pub.MailSort(mail_to, MailJD.exceptmail);
if (string.IsNullOrEmpty(mail_to) == false)
{
db = new EEEntities();
db.MailData.Add(new MailData
{
gcode = vGcode,
cate = "SP",
subject = mail_subject,
fromlist = "eetgw@amkor.co.kr",
tolist = Pub.MailSort(mail_to, MailJD.exceptmail),
bcc = mail_bcc,
cc = Pub.MailSort(mail_cc, MailJD.exceptmailcc),
pdate = DateTime.Now.ToShortDateString(),
body = mail_content,
wuid = "DEV",
wdate = DateTime.Now,
});
db.SaveChanges();
addmsg($"[{vGcode}] 메일 전송 완료(스케쥴day)");
System.Threading.Thread.Sleep(10000);
}
else
{
addmsg($"[{vGcode}] 받는사람이 소거되어 메일을 생성하지 않습니다");
}
}
System.Threading.Thread.Sleep(500);
}
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
taskwait = !taskwait;
}
private void timer1_Tick(object sender, EventArgs e)
{
if (task != null)
{
if (task.IsCompleted) this.btRun.Text = "완료";
else if (task.IsCanceled) this.btRun.Text = "취소";
else if (taskwait) this.btRun.Text = "대기상태";
else this.btRun.Text = "가동중";
this.btRun.Enabled = true;
}
else
{
this.btRun.Text = "사용불가";
this.btRun.Enabled = false;
}
}
}
}

View File

@@ -1,142 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>104, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="btRun.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
TgDQASA1MVpwzwAAAABJRU5ErkJggg==
</value>
</data>
</root>

View File

@@ -1,83 +0,0 @@

namespace JobReportMailService
{
partial class fSendMail
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(fSendMail));
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.btRun = new System.Windows.Forms.ToolStripButton();
this.toolStrip1.SuspendLayout();
this.SuspendLayout();
//
// timer1
//
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// toolStrip1
//
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.btRun});
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(473, 25);
this.toolStrip1.TabIndex = 2;
this.toolStrip1.Text = "toolStrip1";
//
// btRun
//
this.btRun.Image = ((System.Drawing.Image)(resources.GetObject("btRun.Image")));
this.btRun.ImageTransparentColor = System.Drawing.Color.Magenta;
this.btRun.Name = "btRun";
this.btRun.Size = new System.Drawing.Size(48, 22);
this.btRun.Text = "Run";
this.btRun.Click += new System.EventHandler(this.toolStripButton1_Click);
//
// fSendMail
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(473, 416);
this.Controls.Add(this.toolStrip1);
this.Name = "fSendMail";
this.Text = "Send Mail";
this.Load += new System.EventHandler(this.fJobReportDay_Load);
this.Controls.SetChildIndex(this.toolStrip1, 0);
this.toolStrip1.ResumeLayout(false);
this.toolStrip1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.ToolStrip toolStrip1;
private System.Windows.Forms.ToolStripButton btRun;
}
}

View File

@@ -1,274 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace JobReportMailService
{
public partial class fSendMail : fChildBase
{
public fSendMail()
{
InitializeComponent();
}
private void fJobReportDay_Load(object sender, EventArgs e)
{
this.Delaytime = 3000;
task = Task.Run(() =>
{
while (taskrun)
{
if (taskwait)
{
task.Wait(1000);
continue;
}
var ts = DateTime.Now - ChkMakeSchDayWeekTime;
if (ts.TotalMilliseconds <= 1000)
{
continue;
}
else
{
ChkMakeSchDayWeekTime = DateTime.Now;
try
{
RunData();
}
catch (Exception ex)
{
addmsg(ex.Message);
task.Wait(5000);
}
}
Task.Delay(Delaytime).Wait();
}
});
timer1.Start();
if (Pub.setting.autoRunData)
btRun.PerformClick();
}
void RunData()
{
SendMail();
System.Threading.Thread.Sleep(1000);
MakeAutoMail();
}
void SendMail()
{
//그룹무관하게 모든 자료를 전송처리한다
var ta = new DataSet1TableAdapters.MailDataTableAdapter();
var sendList = ta.GetData(); //발송되지않은 메일목록
if (sendList.Rows.Count > 0) addmsg("Found : " + sendList.Rows.Count.ToString());
else addmsg("전송할 메일이 없습니다");
foreach (DataSet1.MailDataRow dr in sendList)
{
//전자메일 검증을 한다.
var list_from = getMaillist(dr.fromlist);
var list_to = getMaillist(dr.tolist);
var list_bcc = getMaillist(dr.bcc);
var list_cc = getMaillist(dr.cc);
string sendMsg = "";
if (list_from == "")
{
sendMsg = ("보내는 주소가 없습니다");
}
else if (dr.subject.Trim() == "")
{
sendMsg = ("메일 제목이 없습니다");
}
else if (dr.body.Trim() == "")
{
sendMsg = ("본문이 없습니다");
}
else if (list_to == "")
{
sendMsg = ("받는 주소가 없습니다");
}
else
{
var body = dr.body;
body +=
"<p>" +
"<br />이 메일은 EET 프로그램에서 자동 발신 되었습니다." +
"<br />메일이 잘못 전송 되었다면 [<a href='chikyun.kim@amkor.co.kr'>chikyun.kim@amkor.co.kr</a>] 로 문의 주시기 바랍니다" +
"</p>";
//전송을 해야 함
var mc = new System.Net.Mail.SmtpClient("10.101.10.6");
var msg = new System.Net.Mail.MailMessage
(list_from,
list_to,
dr.subject,
body);
if (list_bcc != "") msg.Bcc.Add(list_bcc);
if (list_cc != "") msg.CC.Add(list_cc);
msg.IsBodyHtml = true;
try
{
mc.Send(msg);
Console.WriteLine("send mail to" + list_to + ",subject=" + dr.subject);
sendMsg = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
catch (Exception eX)
{
sendMsg = eX.Message;
}
}
Console.WriteLine(string.Format("Send Complete index={0},Msg={1}", dr.idx, sendMsg));
ta.UpdateSendOK(sendMsg, dr.idx);
break;
}
}
static DateTime ChkAutoDate = DateTime.Now.AddDays(-1);
void MakeAutoMail()
{
var ts = DateTime.Now - ChkAutoDate;
if (ts.TotalMinutes < 1) return; //10분마다 자동 생성 데이터를 처리한다
Console.WriteLine("Check Auto Make Mail");
var taData = new DataSet1TableAdapters.MailDataTableAdapter();
var taList = new DataSet1TableAdapters.MailAutoTableAdapter();
var dtList = taList.GetByAutoSend();
var dtInsert = new DataSet1.MailDataDataTable();
//대상
Console.WriteLine("Make Auto Send Mail Data (" + dtList.Rows.Count.ToString() + ")");
foreach (DataSet1.MailAutoRow dr in dtList)
{
//시간정보가 없는 애들은 처리 하지 않음
if (dr.stime.IndexOf(":") == -1) continue;
if (dr.sday == null || dr.sday.Length < 2) continue;
//발신시간을 넘어야 한다
var curTime = DateTime.Now.ToString("HH:mm");
if (string.Compare(curTime, dr.stime) < 0) continue; //지정된 시간 이전이면 생성 안한다
//자동생성 구분용 카테고리
var cate = string.Format("{0},{1}", dr.sday[0], dr.sday[1]);
//동륵일
var pdate = DateTime.Now.ToString("yyyy-MM-dd");
//같은날, 같은 atime aidx pdate 의 같이 있으면 이미 생성된것이므로 추가하지 않는다
var existData = taData.FindAutoData(dr.idx, dr.stime, pdate, cate);
var PreMakeCount = (int)(existData);
if (PreMakeCount > 0) continue;
//전송간격과 대상
if (dr.sday[0] == 1)
{
//week
var bitString = Convert.ToString(dr.sday[1], 2).PadLeft(8, '0').ToArray();
var weeknum = (int)(DateTime.Now.DayOfWeek);
if (bitString[weeknum + 1] == '0') continue;
}
else
{
//month
if (dr.sday[1] != DateTime.Now.Day) continue;
}
//같은날, 같은 atime aidx pdate 의 같이 있으면 이미 생성된것이므로 추가하지 않는다
//생성해야할 자료라면 만들어 준다
var newdr = dtInsert.NewMailDataRow();
newdr.pdate = pdate;// DateTime.Now.ToString("yyyy-MM-dd");
newdr.gcode = dr.gcode;
newdr.fromlist = dr.fromlist;
newdr.tolist = dr.tolist;
newdr.bcc = dr.bcc;
newdr.cate = cate;// string.Format("{0},{1}", dr.sday[0], dr.sday[1]); //cate에 해당 자료를 기록한다.
newdr.cc = dr.cc;
newdr.subject = dr.subject;
newdr.body = dr.body;
newdr.aidx = dr.idx;
newdr.atime = dr.stime;
newdr.wuid = "DEV";
newdr.wdate = DateTime.Now;
dtInsert.AddMailDataRow(newdr);
try
{
taData.Update(newdr);
Console.WriteLine("auto make : " + newdr.tolist + ",subject=" + newdr.subject);
}
catch (Exception eX)
{
Console.WriteLine("auto make error : " + eX.Message);
}
}
ChkAutoDate = DateTime.Now;
}
string getMaillist(string org)
{
org = org.Replace(";", ",").Replace(":", ",");
string list_to = "";
foreach (var item in org.Split(','))
{
if (item.Trim() != "")
{
var atindex = item.IndexOf("@");
if (atindex != -1)
{
var dotindex = item.IndexOf(".", atindex + 1);
if (dotindex != -1)
{
//정상이므로 추가한다.
if (list_to != "") list_to += ",";
list_to += item.Trim();
}
}
}
}
return list_to;
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
taskwait = !taskwait;
if (taskwait == false)
ChkMakeSchDayWeekTime = DateTime.Now.AddHours(-1);
}
private void timer1_Tick(object sender, EventArgs e)
{
if (task != null)
{
if (task.IsCompleted) this.btRun.Text = "완료";
else if (task.IsCanceled) this.btRun.Text = "취소";
else if (taskwait) this.btRun.Text = "대기상태";
else this.btRun.Text = "가동중";
this.btRun.Enabled = true;
}
else
{
this.btRun.Text = "사용불가";
this.btRun.Enabled = false;
}
}
}
}

View File

@@ -1,142 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>104, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="btRun.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
TgDQASA1MVpwzwAAAABJRU5ErkJggg==
</value>
</data>
</root>

View File

@@ -1,75 +0,0 @@

namespace JobReportMailService
{
partial class fSetup
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.propertyGrid1 = new System.Windows.Forms.PropertyGrid();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// propertyGrid1
//
this.propertyGrid1.Dock = System.Windows.Forms.DockStyle.Fill;
this.propertyGrid1.Location = new System.Drawing.Point(0, 0);
this.propertyGrid1.Name = "propertyGrid1";
this.propertyGrid1.Size = new System.Drawing.Size(457, 486);
this.propertyGrid1.TabIndex = 0;
//
// button1
//
this.button1.Dock = System.Windows.Forms.DockStyle.Bottom;
this.button1.Location = new System.Drawing.Point(0, 486);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(457, 68);
this.button1.TabIndex = 1;
this.button1.Text = "button1";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// fSetup
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(457, 554);
this.Controls.Add(this.propertyGrid1);
this.Controls.Add(this.button1);
this.Name = "fSetup";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "fSetup";
this.Load += new System.EventHandler(this.fSetup_Load);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.PropertyGrid propertyGrid1;
private System.Windows.Forms.Button button1;
}
}

View File

@@ -1,33 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace JobReportMailService
{
public partial class fSetup : Form
{
public fSetup()
{
InitializeComponent();
this.propertyGrid1.SelectedObject = Pub.setting;
}
private void button1_Click(object sender, EventArgs e)
{
this.Validate();
Pub.setting.Save();
DialogResult = DialogResult.OK;
}
private void fSetup_Load(object sender, EventArgs e)
{
}
}
}

View File

@@ -1,120 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -1,36 +0,0 @@
<html>
<head>
<style>
* {
font-family:"맑은 고딕";
font-weight:bold;
font-size:50px;
}
</style>
<body>
<table border="1" cellpadding="1" cellspacing="1" style='text-align: center;'>
<tr>
<td rowspan="2">
fdasf
</td>
<td>
맑은 고딕 테스트
</td>
<td>
fdasf
</td>
</tr>
<tr>
<td>
fdasf
</td>
<td>
fdasf
</td>
</tr>
</table>
</body>
</html>

View File

@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="EntityFramework" version="6.2.0" targetFramework="net45" />
<package id="EntityFramework.ko" version="6.2.0" targetFramework="net45" />
</packages>

View File

@@ -1,40 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 이 코드는 템플릿에서 생성되었습니다.
//
// 이 파일을 수동으로 변경하면 응용 프로그램에서 예기치 않은 동작이 발생할 수 있습니다.
// 이 파일을 수동으로 변경하면 코드가 다시 생성될 때 변경 내용을 덮어씁니다.
// </auto-generated>
//------------------------------------------------------------------------------
namespace JobReportMailService
{
using System;
using System.Collections.Generic;
public partial class vGroupUser
{
public string gcode { get; set; }
public string dept { get; set; }
public Nullable<short> level { get; set; }
public string name { get; set; }
public string nameE { get; set; }
public string grade { get; set; }
public string email { get; set; }
public string tel { get; set; }
public string indate { get; set; }
public string outdate { get; set; }
public string hp { get; set; }
public string place { get; set; }
public string ads_employNo { get; set; }
public string ads_title { get; set; }
public string ads_created { get; set; }
public string memo { get; set; }
public string processs { get; set; }
public string id { get; set; }
public string state { get; set; }
public Nullable<bool> useJobReport { get; set; }
public Nullable<bool> useUserState { get; set; }
public string password { get; set; }
}
}

View File

@@ -1,42 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 이 코드는 템플릿에서 생성되었습니다.
//
// 이 파일을 수동으로 변경하면 응용 프로그램에서 예기치 않은 동작이 발생할 수 있습니다.
// 이 파일을 수동으로 변경하면 코드가 다시 생성될 때 변경 내용을 덮어씁니다.
// </auto-generated>
//------------------------------------------------------------------------------
namespace JobReportMailService
{
using System;
using System.Collections.Generic;
public partial class vJobReportForUser
{
public int idx { get; set; }
public string pdate { get; set; }
public string gcode { get; set; }
public string id { get; set; }
public string name { get; set; }
public string process { get; set; }
public string type { get; set; }
public string svalue { get; set; }
public Nullable<double> hrs { get; set; }
public Nullable<double> ot { get; set; }
public string requestpart { get; set; }
public string package { get; set; }
public string userProcess { get; set; }
public string status { get; set; }
public string projectName { get; set; }
public string description { get; set; }
public string ww { get; set; }
public Nullable<System.DateTime> otStart { get; set; }
public Nullable<System.DateTime> otEnd { get; set; }
public Nullable<double> ot2 { get; set; }
public string otReason { get; set; }
public string grade { get; set; }
public string indate { get; set; }
public string outdate { get; set; }
}
}

View File

@@ -1,13 +0,0 @@
using System;
namespace AR
{
public class MemoryMap
{
public MemoryMap()
{
}
}
}

View File

@@ -1,19 +0,0 @@
using Microsoft.Owin.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OwinProject
{
public static class OwinServer
{
public static void Run()
{
// Start OWIN host
WebApp.Start<OWIN.Startup>(url: "http://127.0.0.1:9000");
Console.WriteLine("start webapp");
}
}
}

View File

@@ -1,76 +0,0 @@
using Microsoft.Owin;
using Owin;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Web.Http;
using System.Web.Http.Routing;
namespace OwinProject.OWIN
{
public class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
// Configure Web API for Self-Host
HttpConfiguration config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
//메인파일 처리 방법
IHttpRoute defaultRoute =
config.Routes.CreateRoute("{controller}/{action}/{id}",
new { controller = "home", action = "index", id = RouteParameter.Optional },
null);
//기타파일들 처리 방법
IHttpRoute cssRoute =
config.Routes.CreateRoute("{path}/{subdir}/{resource}.{ext}",
new { controller = "resource", action = "file", id = RouteParameter.Optional },
null);
IHttpRoute mifRoute =
config.Routes.CreateRoute("{path}/{resource}.{ext}",
new { controller = "resource", action = "file", id = RouteParameter.Optional },
null);
IHttpRoute icoRoute =
config.Routes.CreateRoute("{resource}.{ext}",
new { controller = "resource", action = "file", id = RouteParameter.Optional },
null);
config.Routes.Add("mifRoute", mifRoute);
config.Routes.Add("icoRoute", icoRoute);
config.Routes.Add("cssRoute", cssRoute);
config.Routes.Add("defaultRoute", defaultRoute);
appBuilder.UseWebApi(config);
//appBuilder.UseFileServer(new FileServerOptions
//{
// RequestPath = new PathString(string.Empty),
// FileSystem = new PhysicalFileSystem("./MySubFolder"),
// EnableDirectoryBrowsing = true,
//});
//appBuilder.UseStageMarker(PipelineStage.MapHandler);
//config.Routes.MapHttpRoute(
// name: "ignore",
// routeTemplate: @".*\.(css|js|gif|jpg)(/.*)?",
// defaults: new
// {
// controller = "file",
// action = "readtext",
// id = RouteParameter.Optional
// }
// );
}
}
}

View File

@@ -1,101 +0,0 @@
using Microsoft.Owin;
using Owin;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Web.Http;
namespace OwinProject.OWIN
{
public class StartupSSE
{
public void Configuration(IAppBuilder app)
{
var api = new Api();
app.Run(context => api.Invoke(context));
}
public class Subscriber
{
private StreamWriter _writer;
private TaskCompletionSource<bool> _tcs;
public Subscriber(Stream body, TaskCompletionSource<bool> tcs)
{
this._writer = new StreamWriter(body);
this._tcs = tcs;
}
public async void WriteAsync(string message)
{
try
{
_writer.Write(message);
_writer.Flush();
}
catch (Exception e)
{
if (e.HResult == -2146232800) // non-existent connection
_tcs.SetResult(true);
else
_tcs.SetException(e);
}
}
}
public class Api
{
System.Timers.Timer _timer = new System.Timers.Timer(500);
List<Subscriber> _subscribers = new List<Subscriber>();
public Api()
{
_timer.Elapsed += _timer_Elapsed;
}
void _timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
UpdateSubscribers();
}
public void UpdateSubscribers()
{
Console.WriteLine("updating {0} subscribers", _subscribers.Count);
var subscribersCopy = _subscribers.ToList<Subscriber>();
var msg = String.Format("Hello async at {0}\n", DateTime.Now);
subscribersCopy.ForEach(w => w.WriteAsync(msg));
_timer.Start();
}
public Task Invoke(IOwinContext context)
{
SetEventHeaders(context);
System.IO.Stream responseStream = context.Environment["owin.ResponseBody"] as Stream;
var tcs = new TaskCompletionSource<bool>();
var s = CreateSubscriber(responseStream, tcs);
tcs.Task.ContinueWith(_ => _subscribers.Remove(s));
Console.WriteLine("Add subscriber. Now have {0}", _subscribers.Count);
s.WriteAsync("Registered\n");
_timer.Start();
return tcs.Task;
}
private Subscriber CreateSubscriber(System.IO.Stream responseStream, TaskCompletionSource<bool> tcs)
{
var s = new Subscriber(responseStream, tcs);
_subscribers.Add(s);
return s;
}
private static void SetEventHeaders(IOwinContext context)
{
context.Response.ContentType = "text/eventstream";
context.Response.Headers["Transfer-Encoding"] = "chunked";
context.Response.Headers["cache-control"] = "no-cache";
}
}
}
}

View File

@@ -1,78 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{0C3DC465-73BB-4086-BED4-5EAA100F082A}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>OwinProject</RootNamespace>
<AssemblyName>OwinProject</AssemblyName>
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.Owin, Version=4.1.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Owin.4.1.1\lib\net45\Microsoft.Owin.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Owin.Host.HttpListener, Version=4.1.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Owin.Host.HttpListener.4.1.1\lib\net45\Microsoft.Owin.Host.HttpListener.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Owin.Hosting, Version=2.0.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Owin.Hosting.2.0.2\lib\net45\Microsoft.Owin.Hosting.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
<HintPath>..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Net.Http.Formatting, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebApi.Client.5.2.7\lib\net45\System.Net.Http.Formatting.dll</HintPath>
</Reference>
<Reference Include="System.Web.Http, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebApi.Core.5.2.7\lib\net45\System.Web.Http.dll</HintPath>
</Reference>
<Reference Include="System.Web.Http.Owin, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebApi.Owin.5.2.7\lib\net45\System.Web.Http.Owin.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Class1.cs" />
<Compile Include="OWIN\Startup.cs" />
<Compile Include="OWIN\StartupSSE.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

Some files were not shown because too many files have changed in this diff Show More