파일정리

This commit is contained in:
ChiKyun Kim
2025-12-19 17:17:51 +09:00
parent 116af44965
commit ccac7790d3
193 changed files with 35 additions and 41661 deletions

View File

@@ -1,16 +0,0 @@
{
"$schema": "https://json.schemastore.org/claude-code-settings.json",
"permissions": {
"allow": [
"Bash(curl:*)",
"Bash(mkdir:*)",
"Bash(copy \"C:\\Data\\Source\\(0014) GroupWare\\Source\\Project\\Web\\Controller\\BaseController.cs\" \"C:\\Data\\Source\\(0014) GroupWare\\Source\\EETGW.Shared\\Controllers\"\")",
"Bash(copy:*)",
"Bash(powershell:*)",
"Bash(git add:*)",
"Bash(git checkout:*)",
"Bash(dir \"C:\\Data\\Source\\(0014) GroupWare\\Source\\Project\\Web\\wwwroot\\lib\\js\")"
],
"deny": []
}
}

267
CLAUDE.md
View File

@@ -1,267 +0,0 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
This is a Korean Enterprise GroupWare system built with C# .NET Framework 4.6 and Windows Forms. The application serves as a comprehensive business management system that includes project management, purchasing, attendance tracking, reporting, and web-based functionality. The project runs on port 7979 (previously 9000) and includes both desktop and web components.
## Architecture
### Main Application (Project/EETGW.csproj)
- **Entry Point**: `Project/Program.cs` - Handles WebView2Runtime extraction and starts the main form
- **Main Form**: `Project/fMain.cs` - Primary application window
- **Web Server**: Integrated OWIN-based web server for HTTP API and static files
- **Database**: Microsoft SQL Server with Entity Framework 6.2.0
- **Target Framework**: .NET Framework 4.6
### Key Components
1. **Web Layer** (`Project/Web/`):
- **Startup.cs**: OWIN configuration for HTTP API and static file serving
- **Controllers**: API controllers for various business functions (Home, Project, Purchase, Item, etc.)
- **wwwroot**: Static web assets (HTML, CSS, JS files)
2. **SubProjects**: Modular components with specific business functionality:
- **FPJ0000**: Project management module
- **FCM0000**: Customer management
- **FEQ0000**: Equipment management
- **FBS0000**: Holiday/attendance management
- **FCOMMON**: Shared common functionality
- **WebServer**: Additional web services
- **AmkorRestfulService**: REST API services
3. **Sub Components** (`Sub/`):
- **arCtl**: Custom controls library
- **arftp**: FTP functionality
- **tcpservice**: TCP communication services
- **YARTE**: HTML editor component
- **StaffLayoutCtl**: Staff layout controls
### Technology Stack
- **UI Framework**: Windows Forms with custom controls (FarPoint Spread grids)
- **Web Framework**: OWIN with ASP.NET Web API 5.2.9
- **Database ORM**: Entity Framework 6.2.0
- **JSON Processing**: Newtonsoft.Json 13.0.3
- **Web Browser**: Microsoft WebView2 1.0.2210.55
- **Reports**: Microsoft ReportViewer 15.0
- **Excel Processing**: libxl.net and CsvHelper 30.0.1
### Running the Application
- **Debug Mode**: Run from Visual Studio or build and execute the output from `Project/bin/Debug/`
- **Web Server**: Automatically starts on port 7979 when the application launches
- **Database**: Ensure SQL Server connection string is configured in app.config
### Package Management
- Uses NuGet packages defined in `packages.config` files throughout the solution
- Restore packages using: `nuget restore EETGW.sln`
## Configuration
### Database Connection
- Connection strings configured in individual `app.config` files
- Primary database connection in `Project/app.config`
- Uses Entity Framework with SQL Server
### Web Server Configuration
- **Port**: 7979 (configured in startup)
- **Static Files**: Served from `Project/Web/wwwroot/`
- **API Routes**: Configured in `Project/Web/Startup.cs`
- **CORS**: Enabled for all origins
### Build Configurations
- **Debug**: Outputs to `Project/bin/Debug/` with x86 platform target
- **Release**: Optimized build configuration
- Different output paths for various configurations (see EETGW.csproj)
## Key Conventions
### Code Organization
- Korean comments and variable names are common throughout the codebase
- Business logic separated into modular SubProjects
- Shared functionality centralized in FCOMMON project
- Custom controls and utilities in Sub/ directory
### File Structure
- Each SubProject has its own namespace and assembly
- Form files follow naming convention: `f[FormName].cs` with corresponding `.Designer.cs` and `.resx`
- Dataset files use `.xsd` schemas with generated code
### Dependencies
- Heavy use of FarPoint Spread controls for data grids
- Custom logging via ArLog.Net4.dll
- Settings management through ArSetting.Net4.dll
- Multiple third-party libraries for Excel, FTP, and web functionality
## Development Notes
- WebView2Runtime is automatically extracted on first run from WebView2Runtime.zip
- The application includes comprehensive error handling and logging
- Multiple authentication methods including AD integration
- Supports both Korean and English localization
- Includes extensive reporting capabilities with RDLC files
## React Development Guidelines
### 파일 생성 및 프로젝트 등록 규칙
**❗ CRITICAL RULE**: 새로운 파일을 생성할 때마다 반드시 EETGW.csproj에 등록해야 합니다.
#### 자동 등록 필수사항
1. **새 파일 생성 시**: Write 도구 사용 후 즉시 프로젝트 파일에 등록
2. **등록 형식**:
```xml
<None Include="Web\wwwroot\[파일경로]">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
```
3. **빌드 작업**: 없음 (`<None>` 태그 사용)
4. **출력 디렉터리**: `PreserveNewest` (새 파일이면 복사)
#### 등록 대상 파일들
- `Web\wwwroot\react\*.jsx` - React 컴포넌트
- `Web\wwwroot\react-*.html` - React 페이지
- `Web\wwwroot\*.html` - HTML 파일
- `Web\wwwroot\*.js`, `Web\wwwroot\*.css` - 정적 자원
### React 아키텍처 패턴
#### 파일 구조
- **컴포넌트**: `/Web/wwwroot/react/[ComponentName].jsx`
- **페이지**: `/Web/wwwroot/react-[pagename].html`
- **라우팅**: `ReactController`에서 `/react/[pagename]` 경로로 서빙
#### React 컴포넌트 구조
```jsx
// React 컴포넌트 기본 구조
const { useState, useEffect, useRef } = React;
function ComponentName() {
// 상태 관리
const [data, setData] = useState({});
const [loading, setLoading] = useState(false);
// API 연동
const loadData = async () => {
try {
const response = await fetch('/Controller/Action');
const result = await response.json();
setData(result);
} catch (error) {
console.error('데이터 로드 실패:', error);
}
};
// 생명주기
useEffect(() => {
loadData();
}, []);
return (
<div>
{/* JSX 컨텐츠 */}
</div>
);
}
```
#### HTML 페이지 구조
```html
<!DOCTYPE html>
<html lang="ko">
<head>
<title>페이지명 (React)</title>
<script src="https://cdn.tailwindcss.com"></script>
<!-- Tailwind 설정 -->
<!-- 스타일 정의 -->
</head>
<body>
<div id="react-app-id">
<!-- 로딩 스켈레톤 UI -->
</div>
<!-- React CDN -->
<script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<!-- 컴포넌트 로드 -->
<script type="text/babel" src="/react/component/ComponentName"></script>
<!-- 앱 초기화 -->
<script type="text/babel">
const root = ReactDOM.createRoot(document.getElementById('react-app-id'));
root.render(<ComponentName />);
</script>
</body>
</html>
```
### ReactController 패턴
```csharp
[HttpGet]
[Route("react/pagename")]
public HttpResponseMessage PageName()
{
try
{
var wwwrootPath = GetWwwRootPath();
var filePath = Path.Combine(wwwrootPath, "react-pagename.html");
if (!File.Exists(filePath))
{
return Request.CreateErrorResponse(HttpStatusCode.NotFound,
$"React page not found: {filePath}");
}
var content = File.ReadAllText(filePath, Encoding.UTF8);
var response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StringContent(content, Encoding.UTF8, "text/html");
return response;
}
catch (Exception ex)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError,
$"Error serving React page: {ex.Message}");
}
}
```
### 개발 워크플로우
1. **컴포넌트 생성**: `/react/ComponentName.jsx` 파일 생성
2. **페이지 생성**: `/react-pagename.html` 파일 생성
3. **프로젝트 등록**: EETGW.csproj에 두 파일 모두 등록
4. **라우트 추가**: ReactController에 새 라우트 추가
5. **테스트**: 빌드 후 `/react/pagename`으로 접근 테스트
### API 연동 가이드라인
- **병렬 호출**: `Promise.all()` 사용으로 성능 최적화
- **에러 처리**: try-catch로 모든 API 호출 감싸기
- **로딩 상태**: 사용자 경험을 위한 로딩 인디케이터 필수
- **실시간 업데이트**: 중요한 데이터는 자동 새로고침 구현
### 디자인 시스템
- **CSS 프레임워크**: Tailwind CSS 사용
- **색상 팔레트**: primary, success, warning, danger 정의
- **글래스 효과**: `glass-effect` 클래스 활용
- **애니메이션**: `animate-fade-in`, `animate-slide-up` 등
- **반응형**: 모바일 퍼스트 접근법
### 품질 기준
- **접근성**: 키보드 네비게이션, 스크린 리더 지원
- **성능**: 30초 자동 새로고침, 로딩 최적화
- **에러 처리**: 사용자 친화적 오류 메시지
- **호환성**: 모든 주요 브라우저 지원
### 주의사항
- 기존 시스템과 병행 개발 (`/react/` 하위에서 개발)
- 기존 API 컨트롤러 최대한 재사용
- 동일한 디자인 언어 유지 (색상, 폰트, 레이아웃)
- 단계적 전환을 위한 라우팅 분리

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,327 +0,0 @@
-- =============================================
-- EETGW_Board 테이블 구조 변경: 댓글/답글 시스템 추가
-- 작성일: 2025-12-03
-- 설명: 계층형 댓글/답글을 효율적으로 관리하기 위한 컬럼 추가
-- =============================================
USE [EETGW]
GO
PRINT '=== Starting EETGW_Board structure update ===';
PRINT 'Timestamp: ' + CONVERT(VARCHAR(20), GETDATE(), 120);
GO
-- 1. 기존 테이블 백업
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'EETGW_Board_Backup_20251203')
BEGIN
SELECT * INTO EETGW_Board_Backup_20251203 FROM EETGW_Board;
PRINT '✓ Backup created: EETGW_Board_Backup_20251203';
END
ELSE
BEGIN
PRINT '⚠ Backup already exists: EETGW_Board_Backup_20251203';
END
GO
-- 2. 새로운 컬럼 추가
PRINT '';
PRINT '--- Adding new columns ---';
-- root_idx: 최상위 원글의 idx (답글/댓글이 어느 글에 속하는지)
IF NOT EXISTS (SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('EETGW_Board') AND name = 'root_idx')
BEGIN
ALTER TABLE EETGW_Board ADD root_idx INT NULL;
PRINT '✓ Added column: root_idx (최상위 원글 idx)';
END
ELSE
BEGIN
PRINT '⊙ Column already exists: root_idx';
END
GO
-- depth: 댓글 깊이 (0=원글, 1=1차댓글, 2=2차댓글...)
IF NOT EXISTS (SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('EETGW_Board') AND name = 'depth')
BEGIN
ALTER TABLE EETGW_Board ADD depth INT NOT NULL DEFAULT 0;
PRINT '✓ Added column: depth (댓글 깊이)';
END
ELSE
BEGIN
PRINT '⊙ Column already exists: depth';
END
GO
-- sort_order: 같은 레벨에서의 정렬 순서
IF NOT EXISTS (SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('EETGW_Board') AND name = 'sort_order')
BEGIN
ALTER TABLE EETGW_Board ADD sort_order INT NOT NULL DEFAULT 0;
PRINT '✓ Added column: sort_order (정렬 순서)';
END
ELSE
BEGIN
PRINT '⊙ Column already exists: sort_order';
END
GO
-- thread_path: 계층 경로 (예: "1/5/12" - 빠른 정렬과 조회용)
IF NOT EXISTS (SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('EETGW_Board') AND name = 'thread_path')
BEGIN
ALTER TABLE EETGW_Board ADD thread_path VARCHAR(1000) NULL;
PRINT '✓ Added column: thread_path (계층 경로)';
END
ELSE
BEGIN
PRINT '⊙ Column already exists: thread_path';
END
GO
-- is_comment: 댓글 여부 (true=댓글형식, false=답글형식)
IF NOT EXISTS (SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('EETGW_Board') AND name = 'is_comment')
BEGIN
ALTER TABLE EETGW_Board ADD is_comment BIT NOT NULL DEFAULT 0;
PRINT '✓ Added column: is_comment (댓글/답글 구분)';
END
ELSE
BEGIN
PRINT '⊙ Column already exists: is_comment';
END
GO
-- reply_count: 하위 댓글/답글 개수 (캐시용)
IF NOT EXISTS (SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('EETGW_Board') AND name = 'reply_count')
BEGIN
ALTER TABLE EETGW_Board ADD reply_count INT NOT NULL DEFAULT 0;
PRINT '✓ Added column: reply_count (댓글 개수 캐시)';
END
ELSE
BEGIN
PRINT '⊙ Column already exists: reply_count';
END
GO
-- 3. 기존 데이터 마이그레이션
PRINT '';
PRINT '--- Migrating existing data ---';
-- 원글(pidx가 0이거나 NULL인 경우)
UPDATE EETGW_Board
SET
root_idx = idx,
depth = 0,
thread_path = CAST(idx AS VARCHAR(20)),
sort_order = 0,
is_comment = 0
WHERE ISNULL(pidx, 0) = 0 AND (root_idx IS NULL OR thread_path IS NULL);
DECLARE @originalCount INT = @@ROWCOUNT;
PRINT '✓ Updated ' + CAST(@originalCount AS VARCHAR(10)) + ' original posts (depth=0)';
-- 답글(pidx가 있는 경우) - 1depth만 처리
UPDATE b
SET
root_idx = ISNULL(p.root_idx, b.pidx),
depth = CASE WHEN p.depth IS NULL THEN 1 ELSE p.depth + 1 END,
thread_path = ISNULL(p.thread_path, CAST(b.pidx AS VARCHAR(20))) + '/' + CAST(b.idx AS VARCHAR(20)),
sort_order = 0,
is_comment = 0
FROM EETGW_Board b
LEFT JOIN EETGW_Board p ON b.pidx = p.idx
WHERE ISNULL(b.pidx, 0) > 0 AND (b.root_idx IS NULL OR b.thread_path IS NULL);
DECLARE @replyCount INT = @@ROWCOUNT;
PRINT '✓ Updated ' + CAST(@replyCount AS VARCHAR(10)) + ' reply posts';
GO
-- 4. 인덱스 추가 (성능 최적화)
PRINT '';
PRINT '--- Creating indexes ---';
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_EETGW_Board_root_idx_thread_path')
BEGIN
CREATE INDEX IX_EETGW_Board_root_idx_thread_path
ON EETGW_Board(root_idx, thread_path);
PRINT '✓ Created index: IX_EETGW_Board_root_idx_thread_path';
END
ELSE
BEGIN
PRINT '⊙ Index already exists: IX_EETGW_Board_root_idx_thread_path';
END
GO
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_EETGW_Board_pidx')
BEGIN
CREATE INDEX IX_EETGW_Board_pidx
ON EETGW_Board(pidx);
PRINT '✓ Created index: IX_EETGW_Board_pidx';
END
ELSE
BEGIN
PRINT '⊙ Index already exists: IX_EETGW_Board_pidx';
END
GO
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_EETGW_Board_bidx_wdate')
BEGIN
CREATE INDEX IX_EETGW_Board_bidx_wdate
ON EETGW_Board(bidx, wdate DESC);
PRINT '✓ Created index: IX_EETGW_Board_bidx_wdate';
END
ELSE
BEGIN
PRINT '⊙ Index already exists: IX_EETGW_Board_bidx_wdate';
END
GO
-- 5. reply_count 업데이트 (기존 데이터 기준)
PRINT '';
PRINT '--- Updating reply counts ---';
UPDATE p
SET reply_count = (
SELECT COUNT(*)
FROM EETGW_Board c
WHERE c.root_idx = p.idx AND c.depth > 0
)
FROM EETGW_Board p
WHERE p.depth = 0;
DECLARE @updatedRootPosts INT = @@ROWCOUNT;
PRINT '✓ Updated reply_count for ' + CAST(@updatedRootPosts AS VARCHAR(10)) + ' root posts';
GO
-- 6. 트리거 생성 (reply_count 자동 업데이트)
PRINT '';
PRINT '--- Creating triggers ---';
IF EXISTS (SELECT * FROM sys.triggers WHERE name = 'TR_EETGW_Board_AfterInsert')
BEGIN
DROP TRIGGER TR_EETGW_Board_AfterInsert;
PRINT '⊙ Dropped existing trigger: TR_EETGW_Board_AfterInsert';
END
GO
CREATE TRIGGER TR_EETGW_Board_AfterInsert
ON EETGW_Board
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
-- 댓글/답글이 추가된 경우 root_idx의 reply_count 증가
UPDATE b
SET b.reply_count = b.reply_count + 1
FROM EETGW_Board b
INNER JOIN inserted i ON b.idx = i.root_idx
WHERE i.root_idx IS NOT NULL AND i.depth > 0;
END
GO
PRINT '✓ Created trigger: TR_EETGW_Board_AfterInsert';
GO
IF EXISTS (SELECT * FROM sys.triggers WHERE name = 'TR_EETGW_Board_AfterDelete')
BEGIN
DROP TRIGGER TR_EETGW_Board_AfterDelete;
PRINT '⊙ Dropped existing trigger: TR_EETGW_Board_AfterDelete';
END
GO
CREATE TRIGGER TR_EETGW_Board_AfterDelete
ON EETGW_Board
AFTER DELETE
AS
BEGIN
SET NOCOUNT ON;
-- 댓글/답글이 삭제된 경우 root_idx의 reply_count 감소
UPDATE b
SET b.reply_count = b.reply_count - 1
FROM EETGW_Board b
INNER JOIN deleted d ON b.idx = d.root_idx
WHERE d.root_idx IS NOT NULL AND d.depth > 0 AND b.reply_count > 0;
END
GO
PRINT '✓ Created trigger: TR_EETGW_Board_AfterDelete';
GO
-- 7. 조회용 뷰 생성 (옵션)
PRINT '';
PRINT '--- Creating views ---';
IF EXISTS (SELECT * FROM sys.views WHERE name = 'vEETGW_Board_WithReplies')
BEGIN
DROP VIEW vEETGW_Board_WithReplies;
PRINT '⊙ Dropped existing view: vEETGW_Board_WithReplies';
END
GO
CREATE VIEW vEETGW_Board_WithReplies
AS
SELECT
b.idx,
b.bidx,
b.header,
b.cate,
b.title,
b.contents,
b.[file],
b.guid,
b.url,
b.wuid,
b.wdate,
b.project,
b.pidx,
b.gcode,
b.[close],
b.remark,
b.root_idx,
b.depth,
b.sort_order,
b.thread_path,
b.is_comment,
b.reply_count,
dbo.getUserName(b.wuid) AS wuid_name,
CASE WHEN b.depth = 0 THEN b.idx ELSE b.root_idx END AS display_root_idx
FROM EETGW_Board b;
GO
PRINT '✓ Created view: vEETGW_Board_WithReplies';
GO
-- 8. 검증 쿼리
PRINT '';
PRINT '--- Verification ---';
DECLARE @totalPosts INT = (SELECT COUNT(*) FROM EETGW_Board);
DECLARE @rootPosts INT = (SELECT COUNT(*) FROM EETGW_Board WHERE depth = 0);
DECLARE @replyPosts INT = (SELECT COUNT(*) FROM EETGW_Board WHERE depth > 0);
PRINT 'Total posts: ' + CAST(@totalPosts AS VARCHAR(10));
PRINT 'Root posts (depth=0): ' + CAST(@rootPosts AS VARCHAR(10));
PRINT 'Reply posts (depth>0): ' + CAST(@replyPosts AS VARCHAR(10));
GO
PRINT '';
PRINT '=== EETGW_Board structure update completed successfully ===';
PRINT '';
PRINT '📋 New columns added:';
PRINT ' • root_idx: 최상위 원글 idx';
PRINT ' • depth: 댓글 깊이 (0=원글, 1=1차댓글, 2=2차댓글...)';
PRINT ' • sort_order: 같은 레벨에서 정렬 순서';
PRINT ' • thread_path: 계층 경로 (빠른 정렬용)';
PRINT ' • is_comment: 댓글 타입 (0=답글, 1=댓글)';
PRINT ' • reply_count: 하위 댓글 개수';
PRINT '';
PRINT '📝 Usage examples:';
PRINT ' -- 원글 목록 (댓글 개수 포함)';
PRINT ' SELECT * FROM EETGW_Board WHERE bidx = 5 AND depth = 0 ORDER BY wdate DESC;';
PRINT '';
PRINT ' -- 특정 글의 전체 댓글 (계층 구조 유지)';
PRINT ' SELECT * FROM EETGW_Board WHERE root_idx = 123 ORDER BY thread_path, wdate;';
PRINT '';
PRINT ' -- 1depth 댓글만 조회';
PRINT ' SELECT * FROM EETGW_Board WHERE root_idx = 123 AND depth = 1 ORDER BY wdate;';
PRINT '';
PRINT '✅ Migration completed at: ' + CONVERT(VARCHAR(20), GETDATE(), 120);
GO

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.36324.19
# 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,25 +21,12 @@ 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}"
@@ -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
@@ -187,12 +144,8 @@ 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}
EndGlobalSection

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,86 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" 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>{BECE73DE-15C8-42B0-9F93-9484D745DF3A}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>FTP_DB_Adapt</RootNamespace>
<AssemblyName>FTP_DB_Adapt</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</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>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="ArLog.Net4">
<HintPath>..\..\DLL\ArLog.Net4.dll</HintPath>
</Reference>
<Reference Include="ArSetting.Net4">
<HintPath>..\..\DLL\ArSetting.Net4.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json">
<HintPath>..\..\DLL\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="CSetting.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
<DependentUpon>Settings.settings</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Sub\arftp\FTPClass.csproj">
<Project>{150859d3-1c5d-4e20-b324-f9ebe188d893}</Project>
<Name>FTPClass</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

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,37 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 이 코드는 도구를 사용하여 생성되었습니다.
// 런타임 버전:4.0.30319.42000
//
// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
// 이러한 변경 내용이 손실됩니다.
// </auto-generated>
//------------------------------------------------------------------------------
namespace FTP_DB_Adapt.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.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=EEmicro123!")]
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="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");
}
}
}

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