chore: 將 branches 目錄移出版控並加入 .gitignore
@@ -43,6 +43,9 @@ packages/
|
|||||||
# Subversion (此專案曾用 SVN)
|
# Subversion (此專案曾用 SVN)
|
||||||
.svn/
|
.svn/
|
||||||
|
|
||||||
|
# 分支備份目錄(僅保留在本機)
|
||||||
|
branches/
|
||||||
|
|
||||||
# ASP.NET / IIS
|
# ASP.NET / IIS
|
||||||
*.Cache
|
*.Cache
|
||||||
*.dll.refresh
|
*.dll.refresh
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
|
|
||||||
# All files
|
|
||||||
[*]
|
|
||||||
indent_style = space
|
|
||||||
|
|
||||||
# Xml files
|
|
||||||
[*.xml]
|
|
||||||
indent_size = 2
|
|
||||||
|
|
||||||
# 設定所有文字檔案使用 UTF-8 編碼
|
|
||||||
[*]
|
|
||||||
charset = utf-8-bom
|
|
||||||
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
<!--
|
|
||||||
您可以在 <windir>\Microsoft.NET\Framework\<ver>\CONFIG\Browsers 找到現有的瀏覽器定義
|
|
||||||
-->
|
|
||||||
<browsers>
|
|
||||||
<browser id="Safari" parentID="Safari1Plus">
|
|
||||||
<identification>
|
|
||||||
<userAgent match="Safari/\d+\.\d+" />
|
|
||||||
</identification>
|
|
||||||
<capture>
|
|
||||||
<userAgent match="Version/(?'version'\d+\.\d+)" />
|
|
||||||
</capture>
|
|
||||||
<capabilities>
|
|
||||||
<capability name="browser" value="Safari" />
|
|
||||||
<capability name="version" value="${version}" />
|
|
||||||
</capabilities>
|
|
||||||
<controlAdapters>
|
|
||||||
<adapter controlType="System.Web.UI.WebControls.Menu"
|
|
||||||
adapterType="" />
|
|
||||||
</controlAdapters>
|
|
||||||
</browser>
|
|
||||||
<browser id="GoogleChrome" parentID="Safari">
|
|
||||||
<identification>
|
|
||||||
<userAgent match="Chrome/(?'version'\d+\.\d+)" />
|
|
||||||
</identification>
|
|
||||||
<capabilities>
|
|
||||||
<capability name="browser" value="Googlebot" />
|
|
||||||
</capabilities>
|
|
||||||
</browser>
|
|
||||||
</browsers>
|
|
||||||
@@ -1,547 +0,0 @@
|
|||||||
a.button, button, input[type=button], submit, input[type=submit] {
|
|
||||||
color: #000000;
|
|
||||||
padding: 0;
|
|
||||||
margin: 2px;
|
|
||||||
/* height: 25px; */
|
|
||||||
line-height: 25px;
|
|
||||||
display: inline-block;
|
|
||||||
font-family: Arial, Helvetica, sans-serif, "Microsoft JhengHei", "Microsoft YaHei", MingLiU, SimSun;
|
|
||||||
font-size: 12pt;
|
|
||||||
text-decoration: none;
|
|
||||||
vertical-align: top;
|
|
||||||
text-align: center;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
background-position: 0 0;
|
|
||||||
/* 圓角 */
|
|
||||||
-webkit-border-radius: 2px;
|
|
||||||
-moz-border-radius: 2px;
|
|
||||||
border-radius: 2px
|
|
||||||
}
|
|
||||||
|
|
||||||
a.button:hover, button:hover, input[type=button]:hover, submit:hover, input[type=submit]:hover {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
a.blue120, button.blue120, input[type=button].blue120, submit.blue120, input[type=submit].blue120 {
|
|
||||||
width: 120px;
|
|
||||||
color: #2172B5;
|
|
||||||
border: 1px solid #2172B5;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#8CC6EF,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #8CC6EF, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #8CC6EF, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #8CC6EF, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#8CC6EF), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #8CC6EF, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.orange120, button.orange120, input[type=button].orange120, submit.orange120, input[type=submit].orange120 {
|
|
||||||
width: 120px;
|
|
||||||
color: #B25300;
|
|
||||||
border: 1px solid #B25300;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#FFAA5F,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #FFAA5F, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #FFAA5F, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #FFAA5F, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#FFAA5F), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #FFAA5F, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.red120, button.red120, input[type=button].red120, submit.red120, input[type=submit].red120 {
|
|
||||||
width: 120px;
|
|
||||||
color: #A71717;
|
|
||||||
border: 1px solid #A71717;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#F4B4B4,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #F4B4B4, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #F4B4B4, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #F4B4B4, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#F4B4B4), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #F4B4B4, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.green120, button.green120, input[type=button].green120, submit.green120, input[type=submit].green120 {
|
|
||||||
width: 120px;
|
|
||||||
color: #055705;
|
|
||||||
border: 1px solid #055705;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#6EF66E,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #6EF66E, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #6EF66E, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #6EF66E, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#6EF66E), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #6EF66E, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.purple120, button.purple120, input[type=button].purple120, submit.purple120, input[type=submit].purple120 {
|
|
||||||
width: 120px;
|
|
||||||
color: #800080;
|
|
||||||
border: 1px solid #800080;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#F694F4,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #F694F4, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #F694F4, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #F694F4, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#F694F4), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #F694F4, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.gray120, button.gray120, input[type=button].gray120, submit.gray120, input[type=submit].gray120 {
|
|
||||||
width: 120px;
|
|
||||||
color: #303030;
|
|
||||||
border: 1px solid #A7A7A7;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#D0D0D0,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #D0D0D0, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #D0D0D0, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #D0D0D0, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#D0D0D0), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #D0D0D0, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.yellow120, button.yellow120, input[type=button].yellow120, submit.yellow120, input[type=submit].yellow120 {
|
|
||||||
width: 120px;
|
|
||||||
color: #97A004;
|
|
||||||
border: 1px solid #97A004;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#FAFFA3,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #FAFFA3, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #FAFFA3, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #FAFFA3, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#FAFFA3), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #FAFFA3, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.blue100, button.blue100, input[type=button].blue100, submit.blue100, input[type=submit].blue100 {
|
|
||||||
width: 100px;
|
|
||||||
color: #2172B5;
|
|
||||||
border: 1px solid #2172B5;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#8CC6EF,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #8CC6EF, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #8CC6EF, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #8CC6EF, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#8CC6EF), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #8CC6EF, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.orange100, button.orange100, input[type=button].orange100, submit.orange100, input[type=submit].orange100 {
|
|
||||||
width: 100px;
|
|
||||||
color: #B25300;
|
|
||||||
border: 1px solid #B25300;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#FFAA5F,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #FFAA5F, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #FFAA5F, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #FFAA5F, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#FFAA5F), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #FFAA5F, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.red100, button.red100, input[type=button].red100, submit.red100, input[type=submit].red100 {
|
|
||||||
width: 100px;
|
|
||||||
color: #A71717;
|
|
||||||
border: 1px solid #A71717;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#F4B4B4,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #F4B4B4, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #F4B4B4, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #F4B4B4, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#F4B4B4), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #F4B4B4, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.green100, button.green100, input[type=button].green100, submit.green100, input[type=submit].green100 {
|
|
||||||
width: 100px;
|
|
||||||
color: #055705;
|
|
||||||
border: 1px solid #055705;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#6EF66E,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #6EF66E, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #6EF66E, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #6EF66E, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#6EF66E), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #6EF66E, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.purple100, button.purple100, input[type=button].purple100, submit.purple100, input[type=submit].purple100 {
|
|
||||||
width: 100px;
|
|
||||||
color: #800080;
|
|
||||||
border: 1px solid #800080;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#F694F4,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #F694F4, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #F694F4, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #F694F4, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#F694F4), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #F694F4, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.gray100, button.gray100, input[type=button].gray100, submit.gray100, input[type=submit].gray100 {
|
|
||||||
width: 100px;
|
|
||||||
color: #303030;
|
|
||||||
border: 1px solid #A7A7A7;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#D0D0D0,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #D0D0D0, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #D0D0D0, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #D0D0D0, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#D0D0D0), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #D0D0D0, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.yellow100, button.yellow100, input[type=button].yellow100, submit.yellow100, input[type=submit].yellow100 {
|
|
||||||
width: 100px;
|
|
||||||
color: #97A004;
|
|
||||||
border: 1px solid #97A004;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#FAFFA3,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #FAFFA3, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #FAFFA3, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #FAFFA3, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#FAFFA3), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #FAFFA3, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.blue80, button.blue80, input[type=button].blue80, submit.blue80, input[type=submit].blue80 {
|
|
||||||
width: 80px;
|
|
||||||
color: #2172B5;
|
|
||||||
border: 1px solid #2172B5;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#8CC6EF,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #8CC6EF, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #8CC6EF, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #8CC6EF, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#8CC6EF), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #8CC6EF, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.orange80, button.orange80, input[type=button].orange80, submit.orange80, input[type=submit].orange80 {
|
|
||||||
width: 80px;
|
|
||||||
color: #B25300;
|
|
||||||
border: 1px solid #B25300;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#FFAA5F,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #FFAA5F, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #FFAA5F, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #FFAA5F, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#FFAA5F), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #FFAA5F, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.red80, button.red80, input[type=button].red80, submit.red80, input[type=submit].red80 {
|
|
||||||
width: 80px;
|
|
||||||
color: #A71717;
|
|
||||||
border: 1px solid #A71717;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#F4B4B4,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #F4B4B4, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #F4B4B4, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #F4B4B4, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#F4B4B4), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #F4B4B4, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.green80, button.green80, input[type=button].green80, submit.green80, input[type=submit].green80 {
|
|
||||||
width: 80px;
|
|
||||||
color: #055705;
|
|
||||||
border: 1px solid #055705;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#6EF66E,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #6EF66E, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #6EF66E, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #6EF66E, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#6EF66E), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #6EF66E, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.purple80, button.purple80, input[type=button].purple80, submit.purple80, input[type=submit].purple80 {
|
|
||||||
width: 80px;
|
|
||||||
color: #800080;
|
|
||||||
border: 1px solid #800080;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#F694F4,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #F694F4, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #F694F4, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #F694F4, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#F694F4), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #F694F4, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.gray80, button.gray80, input[type=button].gray80, submit.gray80, input[type=submit].gray80 {
|
|
||||||
width: 80px;
|
|
||||||
color: #303030;
|
|
||||||
border: 1px solid #A7A7A7;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#D0D0D0,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #D0D0D0, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #D0D0D0, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #D0D0D0, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#D0D0D0), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #D0D0D0, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.yellow80, button.yellow80, input[type=button].yellow80, submit.yellow80, input[type=submit].yellow80 {
|
|
||||||
width: 80px;
|
|
||||||
color: #97A004;
|
|
||||||
border: 1px solid #97A004;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#FAFFA3,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #FAFFA3, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #FAFFA3, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #FAFFA3, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#FAFFA3), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #FAFFA3, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.blue60, button.blue60, input[type=button].blue60, submit.blue60, input[type=submit].blue60 {
|
|
||||||
width: 60px;
|
|
||||||
color: #2172B5;
|
|
||||||
border: 1px solid #2172B5;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#8CC6EF,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #8CC6EF, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #8CC6EF, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #8CC6EF, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#8CC6EF), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #8CC6EF, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.orange60, button.orange60, input[type=button].orange60, submit.orange60, input[type=submit].orange60 {
|
|
||||||
width: 60px;
|
|
||||||
color: #B25300;
|
|
||||||
border: 1px solid #B25300;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#FFAA5F,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #FFAA5F, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #FFAA5F, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #FFAA5F, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#FFAA5F), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #FFAA5F, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.red60, button.red60, input[type=button].red60, submit.red60, input[type=submit].red60 {
|
|
||||||
width: 60px;
|
|
||||||
color: #A71717;
|
|
||||||
border: 1px solid #A71717;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#F4B4B4,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #F4B4B4, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #F4B4B4, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #F4B4B4, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#F4B4B4), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #F4B4B4, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.green60, button.green60, input[type=button].green60, submit.green60, input[type=submit].green60 {
|
|
||||||
width: 60px;
|
|
||||||
color: #055705;
|
|
||||||
border: 1px solid #055705;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#6EF66E,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #6EF66E, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #6EF66E, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #6EF66E, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#6EF66E), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #6EF66E, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.purple60, button.purple60, input[type=button].purple60, submit.purple60, input[type=submit].purple60 {
|
|
||||||
width: 60px;
|
|
||||||
color: #800080;
|
|
||||||
border: 1px solid #800080;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#F694F4,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #F694F4, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #F694F4, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #F694F4, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#F694F4), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #F694F4, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.gray60, button.gray60, input[type=button].gray60, submit.gray60, input[type=submit].gray60 {
|
|
||||||
width: 60px;
|
|
||||||
color: #303030;
|
|
||||||
border: 1px solid #A7A7A7;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#D0D0D0,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #D0D0D0, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #D0D0D0, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #D0D0D0, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#D0D0D0), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #D0D0D0, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.yellow60, button.yellow60, input[type=button].yellow60, submit.yellow60, input[type=submit].yellow60 {
|
|
||||||
width: 60px;
|
|
||||||
color: #97A004;
|
|
||||||
border: 1px solid #97A004;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#FAFFA3,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #FAFFA3, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #D0D0D0, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #FAFFA3, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#FAFFA3), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #FAFFA3, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.blue40, button.blue40, input[type=button].blue40, submit.blue40, input[type=submit].blue40 {
|
|
||||||
width: 40px;
|
|
||||||
color: #2172B5;
|
|
||||||
border: 1px solid #2172B5;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#8CC6EF,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #8CC6EF, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #8CC6EF, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #8CC6EF, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#8CC6EF), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #8CC6EF, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.orange40, button.orange40, input[type=button].orange40, submit.orange40, input[type=submit].orange40 {
|
|
||||||
width: 40px;
|
|
||||||
color: #B25300;
|
|
||||||
border: 1px solid #B25300;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#FFAA5F,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #FFAA5F, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #FFAA5F, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #FFAA5F, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#FFAA5F), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #FFAA5F, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.red40, button.red40, input[type=button].red40, submit.red40, input[type=submit].red40 {
|
|
||||||
width: 40px;
|
|
||||||
color: #A71717;
|
|
||||||
border: 1px solid #A71717;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#F4B4B4,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #F4B4B4, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #F4B4B4, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #F4B4B4, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#F4B4B4), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #F4B4B4, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.green40, button.green40, input[type=button].green40, submit.green40, input[type=submit].green40 {
|
|
||||||
width: 40px;
|
|
||||||
color: #055705;
|
|
||||||
border: 1px solid #055705;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#6EF66E,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #6EF66E, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #6EF66E, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #6EF66E, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#6EF66E), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #6EF66E, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.purple40, button.purple40, input[type=button].purple40, submit.purple40, input[type=submit].purple40 {
|
|
||||||
width: 40px;
|
|
||||||
color: #800080;
|
|
||||||
border: 1px solid #800080;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#F694F4,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #F694F4, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #F694F4, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #F694F4, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#F694F4), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #F694F4, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.gray40, button.gray40, input[type=button].gray40, submit.gray40, input[type=submit].gray40 {
|
|
||||||
width: 40px;
|
|
||||||
color: #303030;
|
|
||||||
border: 1px solid #A7A7A7;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#D0D0D0,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #D0D0D0, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #D0D0D0, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #D0D0D0, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#D0D0D0), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #D0D0D0, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.yellow40, button.yellow40, input[type=button].yellow40, submit.yellow40, input[type=submit].yellow40 {
|
|
||||||
width: 40px;
|
|
||||||
color: #97A004;
|
|
||||||
border: 1px solid #97A004;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#FAFFA3,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #FAFFA3, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #FAFFA3, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #FAFFA3, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#FAFFA3), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #FAFFA3, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.blue28, button.blue28, input[type=button].blue28, submit.blue28, input[type=submit].blue28 {
|
|
||||||
width: 28px;
|
|
||||||
color: #2172B5;
|
|
||||||
border: 1px solid #2172B5;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#8CC6EF,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #8CC6EF, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #8CC6EF, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #8CC6EF, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#8CC6EF), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #8CC6EF, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.orange28, button.orange28, input[type=button].orange28, submit.orange28, input[type=submit].orange28 {
|
|
||||||
width: 28px;
|
|
||||||
color: #B25300;
|
|
||||||
border: 1px solid #B25300;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#FFAA5F,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #FFAA5F, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #FFAA5F, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #FFAA5F, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#FFAA5F), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #FFAA5F, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.red28, button.red28, input[type=button].red28, submit.red28, input[type=submit].red28 {
|
|
||||||
width: 28px;
|
|
||||||
color: #A71717;
|
|
||||||
border: 1px solid #A71717;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#F4B4B4,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #F4B4B4, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #F4B4B4, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #F4B4B4, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#F4B4B4), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #F4B4B4, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.green28, button.green28, input[type=button].green28, submit.green28, input[type=submit].green28 {
|
|
||||||
width: 28px;
|
|
||||||
color: #055705;
|
|
||||||
border: 1px solid #055705;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#6EF66E,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #6EF66E, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #6EF66E, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #6EF66E, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#6EF66E), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #6EF66E, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.purple28, button.purple28, input[type=button].purple28, submit.purple28, input[type=submit].purple28 {
|
|
||||||
width: 28px;
|
|
||||||
color: #800080;
|
|
||||||
border: 1px solid #800080;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#F694F4,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #F694F4, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #F694F4, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #F694F4, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#F694F4), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #F694F4, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.gray28, button.gray28, input[type=button].gray28, submit.gray28, input[type=submit].gray28 {
|
|
||||||
width: 28px;
|
|
||||||
color: #303030;
|
|
||||||
border: 1px solid #A7A7A7;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#D0D0D0,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #D0D0D0, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #D0D0D0, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #D0D0D0, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#D0D0D0), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #D0D0D0, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.yellow28, button.yellow28, input[type=button].yellow28, submit.yellow28, input[type=submit].yellow28 {
|
|
||||||
width: 28px;
|
|
||||||
color: #97A004;
|
|
||||||
border: 1px solid #97A004;
|
|
||||||
FILTER: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#FAFFA3,endColorStr=#FFFFFF,gradientType=0);
|
|
||||||
background: -moz-linear-gradient(top, #FAFFA3, #FFFFFF);
|
|
||||||
background: -ms-linear-gradient(top, #FAFFA3, #FFFFFF);
|
|
||||||
background: -linear-gradient(top, #FAFFA3, #FFFFFF);
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#FAFFA3), to(#FFFFFF));
|
|
||||||
background: -o-linear-gradient(top, #FAFFA3, #FFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
a.pickupbutton {
|
|
||||||
width: 16px;
|
|
||||||
height: 16px;
|
|
||||||
background-image: Url("Img/pickup.gif");
|
|
||||||
}
|
|
||||||
|
|
||||||
a[disabled="disabled"], a.button[disabled="disabled"], button[disabled="disabled"], input[type=button][disabled="disabled"], submit[disabled="disabled"], input[type=submit][disabled="disabled"] {
|
|
||||||
color: #808080;
|
|
||||||
border: 1px solid #909090;
|
|
||||||
FILTER: initial;
|
|
||||||
background: none;
|
|
||||||
background-color: #E0E0E0;
|
|
||||||
}
|
|
||||||
|
|
||||||
a[disabled="disabled"]:hover {
|
|
||||||
font-weight: normal;
|
|
||||||
cursor: default;
|
|
||||||
}
|
|
||||||
|
Before Width: | Height: | Size: 328 B |
|
Before Width: | Height: | Size: 334 B |
|
Before Width: | Height: | Size: 314 B |
|
Before Width: | Height: | Size: 324 B |
|
Before Width: | Height: | Size: 336 B |
|
Before Width: | Height: | Size: 337 B |
|
Before Width: | Height: | Size: 323 B |
|
Before Width: | Height: | Size: 328 B |
|
Before Width: | Height: | Size: 323 B |
|
Before Width: | Height: | Size: 314 B |
|
Before Width: | Height: | Size: 324 B |
|
Before Width: | Height: | Size: 322 B |
|
Before Width: | Height: | Size: 324 B |
|
Before Width: | Height: | Size: 321 B |
|
Before Width: | Height: | Size: 231 B |
|
Before Width: | Height: | Size: 222 B |
|
Before Width: | Height: | Size: 213 B |
|
Before Width: | Height: | Size: 223 B |
|
Before Width: | Height: | Size: 221 B |
|
Before Width: | Height: | Size: 223 B |
|
Before Width: | Height: | Size: 223 B |
|
Before Width: | Height: | Size: 267 B |
|
Before Width: | Height: | Size: 262 B |
|
Before Width: | Height: | Size: 252 B |
|
Before Width: | Height: | Size: 264 B |
|
Before Width: | Height: | Size: 262 B |
|
Before Width: | Height: | Size: 263 B |
|
Before Width: | Height: | Size: 262 B |
|
Before Width: | Height: | Size: 272 B |
|
Before Width: | Height: | Size: 267 B |
|
Before Width: | Height: | Size: 257 B |
|
Before Width: | Height: | Size: 267 B |
|
Before Width: | Height: | Size: 266 B |
|
Before Width: | Height: | Size: 268 B |
|
Before Width: | Height: | Size: 265 B |
|
Before Width: | Height: | Size: 320 B |
|
Before Width: | Height: | Size: 314 B |
|
Before Width: | Height: | Size: 305 B |
|
Before Width: | Height: | Size: 315 B |
|
Before Width: | Height: | Size: 314 B |
|
Before Width: | Height: | Size: 316 B |
|
Before Width: | Height: | Size: 315 B |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 566 B |
|
Before Width: | Height: | Size: 664 B |
|
Before Width: | Height: | Size: 190 B |
|
Before Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 846 B |
|
Before Width: | Height: | Size: 865 B |
|
Before Width: | Height: | Size: 826 B |
|
Before Width: | Height: | Size: 882 B |
|
Before Width: | Height: | Size: 860 B |
|
Before Width: | Height: | Size: 885 B |
|
Before Width: | Height: | Size: 861 B |
|
Before Width: | Height: | Size: 807 B |
|
Before Width: | Height: | Size: 805 B |
|
Before Width: | Height: | Size: 806 B |
|
Before Width: | Height: | Size: 806 B |
|
Before Width: | Height: | Size: 804 B |
@@ -1,49 +0,0 @@
|
|||||||
/* Loading 遮罩樣式 */
|
|
||||||
.loading-overlay {
|
|
||||||
position: fixed;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
bottom: 0;
|
|
||||||
background-color: rgba(0, 0, 0, 0);
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
z-index: 10000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.loading-spinner {
|
|
||||||
background-color: white;
|
|
||||||
padding: 40px;
|
|
||||||
border-radius: 8px;
|
|
||||||
text-align: center;
|
|
||||||
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2);
|
|
||||||
}
|
|
||||||
|
|
||||||
.loading-spinner p {
|
|
||||||
margin-top: 15px;
|
|
||||||
color: #333;
|
|
||||||
font-size: 16px;
|
|
||||||
font-weight: 500;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 轉圈圈動畫 */
|
|
||||||
.spinner {
|
|
||||||
width: 50px;
|
|
||||||
height: 50px;
|
|
||||||
border: 4px solid #cccccc;
|
|
||||||
border-top: 4px solid #ffffff;
|
|
||||||
border-radius: 50%;
|
|
||||||
animation: spin 1s linear infinite;
|
|
||||||
margin: 0 auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes spin {
|
|
||||||
0% {
|
|
||||||
transform: rotate(0deg);
|
|
||||||
}
|
|
||||||
|
|
||||||
100% {
|
|
||||||
transform: rotate(360deg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
a.menu {
|
|
||||||
display: inline-block;
|
|
||||||
color: Black;
|
|
||||||
width: 100%;
|
|
||||||
height: 27px;
|
|
||||||
line-height: 26px;
|
|
||||||
vertical-align: top;
|
|
||||||
overflow: hidden;
|
|
||||||
text-align: left;
|
|
||||||
cursor: pointer !important;
|
|
||||||
z-index: 999;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.menu_toplevel {
|
|
||||||
display: inline-block;
|
|
||||||
color: White;
|
|
||||||
width: 100%;
|
|
||||||
height: 27px;
|
|
||||||
line-height: 26px;
|
|
||||||
vertical-align: top;
|
|
||||||
text-align: left;
|
|
||||||
cursor: pointer !important;
|
|
||||||
z-index: 999;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.menuSelected {
|
|
||||||
display: inline-block;
|
|
||||||
color: White;
|
|
||||||
width: 100%;
|
|
||||||
height: 27px;
|
|
||||||
line-height: 26px;
|
|
||||||
vertical-align: top;
|
|
||||||
text-align: left;
|
|
||||||
z-index: 999;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.menu:hover {
|
|
||||||
color: White;
|
|
||||||
background-color: #007ACC;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.menu_toplevel:hover {
|
|
||||||
color: White;
|
|
||||||
background-color: #007ACC;
|
|
||||||
}
|
|
||||||
@@ -1,105 +0,0 @@
|
|||||||
div.popup_title_left_corner
|
|
||||||
{
|
|
||||||
padding:0;
|
|
||||||
margin:0;
|
|
||||||
width: 3px;
|
|
||||||
height:27px;
|
|
||||||
background-image:url("Img/window_caption_left_corner.gif");
|
|
||||||
background-repeat:no-repeat;
|
|
||||||
float:left;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.popup_title_right_corner
|
|
||||||
{
|
|
||||||
padding:0;
|
|
||||||
margin:0;
|
|
||||||
width: 3px;
|
|
||||||
height: 27px;
|
|
||||||
background-image:url("Img/window_caption_right_corner.gif");
|
|
||||||
background-repeat:no-repeat;
|
|
||||||
float:left;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.popup_title_left
|
|
||||||
{
|
|
||||||
padding:0;
|
|
||||||
margin:0;
|
|
||||||
width: 4px;
|
|
||||||
height:27px;
|
|
||||||
background-image:url("Img/window_caption_left.gif");
|
|
||||||
background-repeat:no-repeat;
|
|
||||||
float:left;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.popup_title_right
|
|
||||||
{
|
|
||||||
padding:0;
|
|
||||||
margin:0;
|
|
||||||
width: 4px;
|
|
||||||
height:27px;
|
|
||||||
background-image:url("Img/window_caption_right.gif");
|
|
||||||
background-repeat:no-repeat;
|
|
||||||
float:left;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.popup_title
|
|
||||||
{
|
|
||||||
padding:0;
|
|
||||||
margin:0;
|
|
||||||
height:27px;
|
|
||||||
background-image:url("Img/window_caption.gif");
|
|
||||||
background-repeat:repeat-x;
|
|
||||||
float:left;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.popup_left_border
|
|
||||||
{
|
|
||||||
padding:0;
|
|
||||||
margin:0;
|
|
||||||
width:3px;
|
|
||||||
background-image:url("Img/window_left_border.gif");
|
|
||||||
background-repeat:repeat-y;
|
|
||||||
float:left;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.popup_right_border
|
|
||||||
{
|
|
||||||
padding:0;
|
|
||||||
margin:0;
|
|
||||||
width:3px;
|
|
||||||
background-image:url("Img/window_right_border.gif");
|
|
||||||
background-repeat:repeat-y;
|
|
||||||
float:left;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.popup_lower_left_corner
|
|
||||||
{
|
|
||||||
padding:0;
|
|
||||||
margin:0;
|
|
||||||
width:3px;
|
|
||||||
height:3px;
|
|
||||||
background-image:url("Img/window_lower_left_corner.gif");
|
|
||||||
background-repeat:no-repeat;
|
|
||||||
float:left;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.popup_lower_right_corner
|
|
||||||
{
|
|
||||||
padding:0;
|
|
||||||
margin:0;
|
|
||||||
width:3px;
|
|
||||||
height:3px;
|
|
||||||
background-image:url("Img/window_lower_right_corner.gif");
|
|
||||||
background-repeat:no-repeat;
|
|
||||||
float:left;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.popup_lower_border
|
|
||||||
{
|
|
||||||
padding:0;
|
|
||||||
margin:0;
|
|
||||||
height:3px;
|
|
||||||
background-image:url("Img/window_lower_border.gif");
|
|
||||||
background-repeat:repeat-x;
|
|
||||||
float:left;
|
|
||||||
}
|
|
||||||
@@ -1,107 +0,0 @@
|
|||||||
<%--
|
|
||||||
預設面板範本。下列面板僅提供做為範例的用途。
|
|
||||||
|
|
||||||
1. 具名控制面板。SkinId 應為唯一定義,因為在相同主題中,一個控制項型別不能具有重複的 SkinId。
|
|
||||||
|
|
||||||
<asp:GridView runat="server" SkinId="gridviewSkin" BackColor="White" >
|
|
||||||
<AlternatingRowStyle BackColor="Blue" />
|
|
||||||
</asp:GridView>
|
|
||||||
|
|
||||||
2. 預設面板。SkinId 未定義。在相同主題中,每個控制項型別只能有一個預設控制面板。
|
|
||||||
|
|
||||||
<asp:Image runat="server" ImageUrl="~/images/image1.jpg" />
|
|
||||||
--%>
|
|
||||||
|
|
||||||
<%@ Register Assembly="WebLib" Namespace="WebLib" TagPrefix="weblib" %>
|
|
||||||
|
|
||||||
<asp:GridView runat="server"
|
|
||||||
BackColor="White"
|
|
||||||
BorderColor="#B0B0B0"
|
|
||||||
BorderStyle="Solid"
|
|
||||||
BorderWidth="1px"
|
|
||||||
CellPadding="3"
|
|
||||||
EnableModelValidation="True"
|
|
||||||
ForeColor="Black"
|
|
||||||
GridLines="Vertical"
|
|
||||||
CSSClass="gridview">
|
|
||||||
<RowStyle
|
|
||||||
BorderColor="#B0B0B0" />
|
|
||||||
<AlternatingRowStyle
|
|
||||||
BorderColor="#B0B0B0"
|
|
||||||
BackColor="#EEEEEE" />
|
|
||||||
<FooterStyle
|
|
||||||
BorderColor="#B0B0B0"
|
|
||||||
BackColor="#B7DEFC" />
|
|
||||||
<HeaderStyle
|
|
||||||
BorderColor="#B0B0B0"
|
|
||||||
BackColor="#B7DEFC" />
|
|
||||||
<PagerStyle
|
|
||||||
BorderWidth="1px"
|
|
||||||
BorderColor="#B0B0B0"
|
|
||||||
BackColor="#DDDDDD"
|
|
||||||
HorizontalAlign="Right" />
|
|
||||||
<SelectedRowStyle
|
|
||||||
BorderColor="#B0B0B0"
|
|
||||||
BackColor="#95D1FF" />
|
|
||||||
<EditRowStyle
|
|
||||||
BorderColor="#B0B0B0"
|
|
||||||
BackColor="#95D1FF" />
|
|
||||||
</asp:GridView>
|
|
||||||
|
|
||||||
<asp:TreeView
|
|
||||||
runat="server">
|
|
||||||
<HoverNodeStyle
|
|
||||||
Font-Underline="False"
|
|
||||||
ForeColor="#FFFFFF"
|
|
||||||
BackColor="#007ACC" />
|
|
||||||
<NodeStyle
|
|
||||||
Font-Size="12pt"
|
|
||||||
ForeColor="Black"
|
|
||||||
HorizontalPadding="4px"
|
|
||||||
NodeSpacing="0px"
|
|
||||||
VerticalPadding="0px"
|
|
||||||
Height="22px"
|
|
||||||
CssClass="menu"
|
|
||||||
Width="100%" />
|
|
||||||
<ParentNodeStyle
|
|
||||||
CssClass="menu"
|
|
||||||
Width="100%"
|
|
||||||
Font-Bold="False" />
|
|
||||||
<SelectedNodeStyle
|
|
||||||
Font-Underline="False"
|
|
||||||
ForeColor="#FFFFFF"
|
|
||||||
BackColor="#007ACC"
|
|
||||||
HorizontalPadding="4px"
|
|
||||||
VerticalPadding="0px"
|
|
||||||
CssClass="menuSelected" />
|
|
||||||
<RootNodeStyle
|
|
||||||
CssClass="menu"
|
|
||||||
Width="100%" />
|
|
||||||
</asp:TreeView>
|
|
||||||
|
|
||||||
<asp:FormView runat="server"
|
|
||||||
CssClass="formview">
|
|
||||||
</asp:FormView>
|
|
||||||
|
|
||||||
<asp:Menu runat="server"
|
|
||||||
Orientation="Horizontal"
|
|
||||||
Font-Overline="False"
|
|
||||||
StaticEnableDefaultPopOutImage="False"
|
|
||||||
StaticSubMenuIndent="0"
|
|
||||||
DynamicHorizontalOffset="0"
|
|
||||||
DynamicVerticalOffset="0"
|
|
||||||
StaticItemFormatString=" {0} "
|
|
||||||
DynamicItemFormatString=" {0} "
|
|
||||||
SkipLinkText="" >
|
|
||||||
<StaticMenuItemStyle CssClass="menu_toplevel" />
|
|
||||||
<StaticSelectedStyle BackColor="#007ACC" ForeColor="White" />
|
|
||||||
<DynamicMenuItemStyle CssClass="menu" BackColor="#89CEFF" ForeColor="White" />
|
|
||||||
<DynamicSelectedStyle BackColor="#007ACC" ForeColor="White" />
|
|
||||||
</asp:Menu>
|
|
||||||
|
|
||||||
<weblib:DateTextBox runat="server"
|
|
||||||
DateSeparator=""
|
|
||||||
DateOrder="YMD" />
|
|
||||||
|
|
||||||
<weblib:GridViewPager runat="server"
|
|
||||||
ButtonCssClass="button gray60" />
|
|
||||||
@@ -1,372 +0,0 @@
|
|||||||
body, div, table {
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
font-family: Arial, Helvetica, sans-serif, "Microsoft JhengHei", "Microsoft YaHei", MingLiU, SimSun;
|
|
||||||
font-size: 12pt;
|
|
||||||
background-color: #eee;
|
|
||||||
}
|
|
||||||
|
|
||||||
input:where([type="text"], [type="password"], [type="date"], [type="datetime"], [type="number"]),
|
|
||||||
textarea,
|
|
||||||
select {
|
|
||||||
padding: 3px;
|
|
||||||
border: solid 1px #ccc;
|
|
||||||
border-radius: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
input:where([type="text"], [type="password"], [type="date"], [type="datetime"], [type="number"])[readonly],
|
|
||||||
input:where([type="text"], [type="password"], [type="date"], [type="datetime"], [type="number"])[disabled],
|
|
||||||
textarea[readonly],
|
|
||||||
textarea[disabled],
|
|
||||||
select[disabled] {
|
|
||||||
background-color: #ccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*select {
|
|
||||||
padding: 3px;
|
|
||||||
height: 1.7em;
|
|
||||||
background-color: #FFF;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
.hide {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.background {
|
|
||||||
width: 100%;
|
|
||||||
text-align: center;
|
|
||||||
background-image: url('img/outbg.gif');
|
|
||||||
}
|
|
||||||
|
|
||||||
.ta-center {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ta-left {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ta-right {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.timeText {
|
|
||||||
font-size: 12pt;
|
|
||||||
color: Black;
|
|
||||||
}
|
|
||||||
|
|
||||||
.labelCell {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.displayCell {
|
|
||||||
background-color: #C6E8FF;
|
|
||||||
}
|
|
||||||
|
|
||||||
.inputCell {
|
|
||||||
background-color: White;
|
|
||||||
}
|
|
||||||
|
|
||||||
input {
|
|
||||||
font-family: Arial, Helvetica, sans-serif, "Microsoft JhengHei", "Microsoft YaHei", MingLiU, SimSun;
|
|
||||||
font-size: 12pt;
|
|
||||||
word-break: break-all;
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type="text"]:focus {
|
|
||||||
background-color: #FFFFD0;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type="password"]:focus {
|
|
||||||
background-color: #FFFFD0;
|
|
||||||
}
|
|
||||||
|
|
||||||
textarea {
|
|
||||||
font-family: Arial, Helvetica, sans-serif, "Microsoft JhengHei", "Microsoft YaHei", MingLiU, SimSun;
|
|
||||||
font-size: 12pt;
|
|
||||||
word-break: break-all;
|
|
||||||
line-height: 1.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
textarea:focus {
|
|
||||||
background-color: #FFFFD0;
|
|
||||||
}
|
|
||||||
|
|
||||||
select {
|
|
||||||
font-family: Arial, Helvetica, sans-serif, "Microsoft JhengHei", "Microsoft YaHei", MingLiU, SimSun;
|
|
||||||
font-size: 12pt;
|
|
||||||
margin-right: 0;
|
|
||||||
height: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.inputFull {
|
|
||||||
width: 100%;
|
|
||||||
margin: 0;
|
|
||||||
box-sizing: border-box;
|
|
||||||
-moz-box-sizing: border-box;
|
|
||||||
-webkit-box-sizing: border-box;
|
|
||||||
_box-sizing: border-box;
|
|
||||||
word-break: break-all;
|
|
||||||
-ms-word-break: break-all;
|
|
||||||
}
|
|
||||||
|
|
||||||
.inputFullBlock {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
margin: 0;
|
|
||||||
box-sizing: border-box;
|
|
||||||
-moz-box-sizing: border-box;
|
|
||||||
-webkit-box-sizing: border-box;
|
|
||||||
_box-sizing: border-box;
|
|
||||||
font-size: 12pt;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.hiddenLink {
|
|
||||||
text-decoration: none;
|
|
||||||
color: Black;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.hiddenLink:hover {
|
|
||||||
color: Blue;
|
|
||||||
}
|
|
||||||
|
|
||||||
.functionTitle {
|
|
||||||
font-size: 14pt;
|
|
||||||
font-weight: bold;
|
|
||||||
color: #004d7a;
|
|
||||||
padding-top: 6px;
|
|
||||||
padding-bottom: 6px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.marqueeText {
|
|
||||||
font-size: 12pt;
|
|
||||||
font-weight: bolder;
|
|
||||||
color: Red;
|
|
||||||
}
|
|
||||||
|
|
||||||
.groupHeaderCell {
|
|
||||||
text-align: center;
|
|
||||||
border-bottom-style: solid;
|
|
||||||
border-bottom-width: 1px;
|
|
||||||
border-bottom-color: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
.FunctionName {
|
|
||||||
color: #2472B2;
|
|
||||||
font-size: 12pt;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ErrorMessage {
|
|
||||||
color: red;
|
|
||||||
font-size: 12pt;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.LogoutButton {
|
|
||||||
height: 32px;
|
|
||||||
width: 32px;
|
|
||||||
background-image: Url("Img/logout.png");
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
background-position: 0 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.election {
|
|
||||||
color: Blue;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.cancelelection {
|
|
||||||
color: Blue;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.padding0 {
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.padding3 {
|
|
||||||
padding: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.padding5 {
|
|
||||||
padding: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.minwidth10 {
|
|
||||||
min-width: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.minwidth20 {
|
|
||||||
min-width: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.minwidth30 {
|
|
||||||
min-width: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.minwidth40 {
|
|
||||||
min-width: 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.minwidth50 {
|
|
||||||
min-width: 50px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.minwidth60 {
|
|
||||||
min-width: 60px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.minwidth70 {
|
|
||||||
min-width: 70px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.minwidth80 {
|
|
||||||
min-width: 80px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.minwidth90 {
|
|
||||||
min-width: 90px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.minwidth100 {
|
|
||||||
min-width: 100px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.minwidth110 {
|
|
||||||
min-width: 110px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.minwidth120 {
|
|
||||||
min-width: 120px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.minwidth130 {
|
|
||||||
min-width: 130px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.minwidth140 {
|
|
||||||
min-width: 140px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.minwidth150 {
|
|
||||||
min-width: 150px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.minwidth160 {
|
|
||||||
min-width: 160px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.minwidth170 {
|
|
||||||
min-width: 170px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.minwidth180 {
|
|
||||||
min-width: 180px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.minwidth190 {
|
|
||||||
min-width: 190px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.minwidth200 {
|
|
||||||
min-width: 200px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.maxwidth10 {
|
|
||||||
max-width: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.maxwidth20 {
|
|
||||||
max-width: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.maxwidth30 {
|
|
||||||
max-width: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.maxwidth40 {
|
|
||||||
max-width: 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.maxwidth50 {
|
|
||||||
max-width: 50px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.maxwidth60 {
|
|
||||||
max-width: 60px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.maxwidth70 {
|
|
||||||
max-width: 70px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.maxwidth80 {
|
|
||||||
max-width: 80px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.maxwidth90 {
|
|
||||||
max-width: 90px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.maxwidth100 {
|
|
||||||
max-width: 100px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.maxwidth110 {
|
|
||||||
max-width: 110px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.maxwidth120 {
|
|
||||||
max-width: 120px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.maxwidth130 {
|
|
||||||
max-width: 130px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.maxwidth140 {
|
|
||||||
max-width: 140px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.maxwidth150 {
|
|
||||||
max-width: 150px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.maxwidth160 {
|
|
||||||
max-width: 160px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.maxwidth170 {
|
|
||||||
max-width: 170px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.maxwidth180 {
|
|
||||||
max-width: 180px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.maxwidth190 {
|
|
||||||
max-width: 190px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.maxwidth200 {
|
|
||||||
max-width: 200px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.phraselink {
|
|
||||||
text-decoration: none;
|
|
||||||
margin-right: 1em;
|
|
||||||
color: #007ACC;
|
|
||||||
cursor: pointer;
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.phraselink:hover {
|
|
||||||
background-color: #007ACC;
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
/* 頁籤樣式 */
|
|
||||||
a.tabButton
|
|
||||||
{
|
|
||||||
font-size: 12pt;
|
|
||||||
text-decoration : none;
|
|
||||||
text-align:center;
|
|
||||||
padding-top: 0px;
|
|
||||||
display: inline-block;
|
|
||||||
vertical-align: top;
|
|
||||||
width: 179px;
|
|
||||||
height: 27px;
|
|
||||||
line-height: 24px;
|
|
||||||
background-image: Url("Img/TabYellow.png");
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
background-position: 0 0;
|
|
||||||
color : Black;
|
|
||||||
font-weight: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.tabButtonSelected
|
|
||||||
{
|
|
||||||
font-size: 12pt;
|
|
||||||
text-decoration : none;
|
|
||||||
text-align: center;
|
|
||||||
padding-top: 0px;
|
|
||||||
display: inline-block;
|
|
||||||
vertical-align: top;
|
|
||||||
width: 179px;
|
|
||||||
height: 27px;
|
|
||||||
line-height: 24px;
|
|
||||||
background-image: Url("Img/TabYellow.png");
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
background-position: 0 -27px;
|
|
||||||
color : Black;
|
|
||||||
font-weight: normal;
|
|
||||||
}
|
|
||||||
@@ -1,90 +0,0 @@
|
|||||||
table {
|
|
||||||
font-family: Arial, Helvetica, sans-serif, "Microsoft JhengHei", "Microsoft YaHei", MingLiU, SimSun;
|
|
||||||
font-size: 12pt;
|
|
||||||
border-collapse: separate;
|
|
||||||
border-spacing: 0;
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.formview table {
|
|
||||||
border-collapse: separate;
|
|
||||||
border-spacing: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.fixedwithborder {
|
|
||||||
table-layout: fixed;
|
|
||||||
border-collapse: collapse;
|
|
||||||
border: 1px solid #DDD;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.fixedwithoutborder {
|
|
||||||
table-layout: fixed;
|
|
||||||
border-collapse: collapse;
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.autowidth {
|
|
||||||
table-layout: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
th {
|
|
||||||
padding: 3px;
|
|
||||||
text-align: center;
|
|
||||||
background-color: #DDDDDD;
|
|
||||||
font-weight: normal;
|
|
||||||
color: Black;
|
|
||||||
border: 1px solid #DDD;
|
|
||||||
word-break: break-all;
|
|
||||||
}
|
|
||||||
|
|
||||||
td {
|
|
||||||
word-break: break-all;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.caption {
|
|
||||||
padding: 3px;
|
|
||||||
text-align: right;
|
|
||||||
background-color: #FFFFFF;
|
|
||||||
word-break: break-all;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.captionCenter {
|
|
||||||
padding: 3px;
|
|
||||||
text-align: center;
|
|
||||||
background-color: #FFFFFF;
|
|
||||||
word-break: break-all;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.captionLeft {
|
|
||||||
padding: 3px;
|
|
||||||
text-align: left;
|
|
||||||
background-color: #FFFFFF;
|
|
||||||
word-break: break-all;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.datainput {
|
|
||||||
padding: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.datadisplay {
|
|
||||||
padding: 5px;
|
|
||||||
background-color: #DEF0FC;
|
|
||||||
word-wrap: break-word;
|
|
||||||
word-break: break-all;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.widthcontrol {
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
height: 0;
|
|
||||||
font-size: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.gridview {
|
|
||||||
border-collapse: collapse;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.gridview tr th, td {
|
|
||||||
border-left-color: #DDD;
|
|
||||||
border-right-color: #DDD;
|
|
||||||
}
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
/* 警告訊息進入動畫 */
|
|
||||||
@keyframes slideDown {
|
|
||||||
from {
|
|
||||||
opacity: 0;
|
|
||||||
transform: translateY(-10px);
|
|
||||||
}
|
|
||||||
|
|
||||||
to {
|
|
||||||
opacity: 1;
|
|
||||||
transform: translateY(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Toast 進入動畫 */
|
|
||||||
@keyframes slideIn {
|
|
||||||
from {
|
|
||||||
transform: translateX(400px);
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
to {
|
|
||||||
transform: translateX(0);
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Toast 訊息容器樣式 */
|
|
||||||
.toast-message {
|
|
||||||
position: fixed;
|
|
||||||
top: 20px;
|
|
||||||
right: 20px;
|
|
||||||
padding: 15px 20px;
|
|
||||||
border-radius: 4px;
|
|
||||||
color: white;
|
|
||||||
font-weight: 500;
|
|
||||||
z-index: 9999;
|
|
||||||
animation: slideIn 0.3s ease-out;
|
|
||||||
max-width: 400px;
|
|
||||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
||||||
word-wrap: break-word;
|
|
||||||
word-break: break-word;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Toast 訊息類型樣式 */
|
|
||||||
.toast-success {
|
|
||||||
background-color: #28a745;
|
|
||||||
}
|
|
||||||
|
|
||||||
.toast-error {
|
|
||||||
background-color: #dc3545;
|
|
||||||
}
|
|
||||||
|
|
||||||
.toast-warning {
|
|
||||||
background-color: #ffc107;
|
|
||||||
color: #333;
|
|
||||||
}
|
|
||||||
|
|
||||||
.toast-info {
|
|
||||||
background-color: #17a2b8;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Vue transition 動畫 */
|
|
||||||
.toast-enter-active, .toast-leave-active {
|
|
||||||
transition: all 0.3s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
.toast-enter, .toast-leave-to {
|
|
||||||
transform: translateX(100%);
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Web;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace Education
|
|
||||||
{
|
|
||||||
public class EncDec
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// WLIB 新版密碼的加密函數
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="S">欲加密之密碼字串,最大長度 8 位,僅可包含A-Z、a-z、0-9</param>
|
|
||||||
/// <returns>加密後之密碼字串</returns>
|
|
||||||
public static string KeyEnc(string S)
|
|
||||||
{
|
|
||||||
int k1 = 0;
|
|
||||||
int k2 = 0;
|
|
||||||
int i, j;
|
|
||||||
Random rnd = new Random(DateTime.UtcNow.AddHours(8).Millisecond);
|
|
||||||
byte[] inBuf = new byte[8];
|
|
||||||
byte[] outBuf = new byte[10];
|
|
||||||
string tmp;
|
|
||||||
|
|
||||||
while (true)
|
|
||||||
{
|
|
||||||
k1 = rnd.Next(31);
|
|
||||||
k2 = rnd.Next(31);
|
|
||||||
outBuf[0] = (byte)(k1 + 44);
|
|
||||||
outBuf[9] = (byte)(k2 + 66);
|
|
||||||
|
|
||||||
if (S.Length < 8)
|
|
||||||
inBuf = Encoding.ASCII.GetBytes(S.PadRight(8));
|
|
||||||
else
|
|
||||||
inBuf = Encoding.ASCII.GetBytes(S);
|
|
||||||
|
|
||||||
for (i = 1; i <= 8; i++)
|
|
||||||
{
|
|
||||||
j = (k1 % 31) + i;
|
|
||||||
j = ((k2 + j) % 31) + 1;
|
|
||||||
|
|
||||||
outBuf[i] = (byte)(inBuf[i - 1] ^ j);
|
|
||||||
}
|
|
||||||
tmp = Encoding.ASCII.GetString(outBuf);
|
|
||||||
if (tmp.IndexOf('\'') < 0 && tmp.IndexOf('"') < 0)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// WLIB 新版密碼的解密函數
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="S">欲解密之密碼字串,固定 10 位</param>
|
|
||||||
/// <returns>解密後之密碼字串。若參數 S 長度不是 10 位,則傳回".." + S + ".."</returns>
|
|
||||||
public static string KeyDec(string S)
|
|
||||||
{
|
|
||||||
int i, j;
|
|
||||||
int Key1, Key2;
|
|
||||||
byte[] inBuf;
|
|
||||||
byte[] outBuf = new byte[8];
|
|
||||||
|
|
||||||
if (S.Length != 10)
|
|
||||||
return ".." + S + "..";
|
|
||||||
|
|
||||||
//解密
|
|
||||||
inBuf = Encoding.ASCII.GetBytes(S);
|
|
||||||
Key1 = inBuf[0] - 44;
|
|
||||||
Key2 = inBuf[9] - 66;
|
|
||||||
|
|
||||||
for (i = 1; i <= 8; i++)
|
|
||||||
{
|
|
||||||
j = Key1 % 31 + i;
|
|
||||||
j = (Key2 + j) % 31 + 1;
|
|
||||||
outBuf[i - 1] = (byte)(inBuf[i] ^ j);
|
|
||||||
}
|
|
||||||
return Encoding.ASCII.GetString(outBuf).Trim();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,211 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Web;
|
|
||||||
using System.Timers;
|
|
||||||
using System.IO;
|
|
||||||
using System.Data;
|
|
||||||
using System.Data.Common;
|
|
||||||
using System.Data.SqlClient;
|
|
||||||
using WebLib;
|
|
||||||
|
|
||||||
namespace Education
|
|
||||||
{
|
|
||||||
public class FollowService
|
|
||||||
{
|
|
||||||
private static FollowService _instance = null;
|
|
||||||
private Timer _timer = null;
|
|
||||||
private static int _interval = 30;
|
|
||||||
private static string _doWorkTime = "00:00";
|
|
||||||
private static bool _enabled = false;
|
|
||||||
private static bool _busy = false;
|
|
||||||
private static 發送郵件 發送郵件 = new 發送郵件();
|
|
||||||
private DAC_BPSN Dao員工;
|
|
||||||
private DbConnection conn;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 發動時間,預設值為 00:00
|
|
||||||
/// </summary>
|
|
||||||
public static string DoWorkTime
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _doWorkTime;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_doWorkTime = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 郵件模版路徑
|
|
||||||
/// </summary>
|
|
||||||
public static string TemplatePath { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 設定或取得簽核跟催服務是否啟動
|
|
||||||
/// </summary>
|
|
||||||
public static bool Enabled
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _enabled;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value)
|
|
||||||
{
|
|
||||||
if (_enabled)
|
|
||||||
return;
|
|
||||||
|
|
||||||
Instance._timer.Interval = _interval * 1000;
|
|
||||||
Instance._timer.AutoReset = true;
|
|
||||||
Instance._timer.Enabled = true;
|
|
||||||
_enabled = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!_enabled)
|
|
||||||
return;
|
|
||||||
|
|
||||||
_enabled = false;
|
|
||||||
Instance._timer.Enabled = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private FollowService()
|
|
||||||
{
|
|
||||||
_timer = new Timer();
|
|
||||||
_timer.Enabled = false;
|
|
||||||
_timer.Elapsed += new ElapsedEventHandler(DoFollowWork);
|
|
||||||
conn = DAC.NewConnection();
|
|
||||||
Dao員工 = new DAC_BPSN(conn);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static FollowService Instance
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (_instance == null)
|
|
||||||
_instance = new FollowService();
|
|
||||||
return _instance;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void DoFollowWork(object sender, ElapsedEventArgs e)
|
|
||||||
{
|
|
||||||
string nowTime = DateTime.UtcNow.AddHours(8).ToString("HH:mm");
|
|
||||||
if (nowTime.CompareTo(_doWorkTime) == 0 && !_busy)
|
|
||||||
{
|
|
||||||
_busy = true;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
DAC_表單簽核明細 dao表單簽核明細 = new DAC_表單簽核明細(conn);
|
|
||||||
表單簽核明細List first = dao表單簽核明細.Select第一次稽催();
|
|
||||||
表單簽核明細List second = dao表單簽核明細.Select第二次稽催();
|
|
||||||
表單簽核明細List third = dao表單簽核明細.Select第三次稽催();
|
|
||||||
|
|
||||||
foreach (表單簽核明細 item in first)
|
|
||||||
{
|
|
||||||
SendFollowMail(item, 3);
|
|
||||||
item.稽催狀態 = 1;
|
|
||||||
dao表單簽核明細.UpdateOne(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (表單簽核明細 item in second)
|
|
||||||
{
|
|
||||||
SendFollowMail(item, 7);
|
|
||||||
item.稽催狀態 = 2;
|
|
||||||
dao表單簽核明細.UpdateOne(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (表單簽核明細 item in third)
|
|
||||||
{
|
|
||||||
SendFollowMail(item, 14);
|
|
||||||
item.稽催狀態 = 3;
|
|
||||||
dao表單簽核明細.UpdateOne(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
DoSurveyReminderWork();
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
_busy = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SendFollowMail(表單簽核明細 item, int 天數)
|
|
||||||
{
|
|
||||||
string 電子郵件 = Dao員工.Get電子郵件(item.簽核人員);
|
|
||||||
string 員工姓名 = Dao員工.Get員工姓名(item.簽核人員);
|
|
||||||
發送郵件 發送郵件 = new 發送郵件();
|
|
||||||
發送郵件.發送簽核跟催郵件(item.簽核ID, 員工姓名, 電子郵件, 天數, TemplatePath);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void DoSurveyReminderWork()
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(PublicVariable.SiteBaseUrl))
|
|
||||||
return;
|
|
||||||
|
|
||||||
string 手機版網址 = PublicVariable.SiteBaseUrl + "/MobileSurvey/Login.aspx";
|
|
||||||
int deadlineDays = PublicVariable.SurveyReminderDeadlineDays;
|
|
||||||
DateTime minDate = PublicVariable.SurveyReminderMinCourseDate;
|
|
||||||
string[] excludeEmps = PublicVariable.SurveyReminderExcludeEmployees
|
|
||||||
.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
|
|
||||||
|
|
||||||
DbCommand cmd = conn.CreateCommand();
|
|
||||||
cmd.CommandText =
|
|
||||||
@"select A.學員編號, A.訓練課程編號, C.BPNME as 學員姓名, C.BPEML as 電子郵件,
|
|
||||||
B.顯示編號, B.訓練名稱, B.訓練日期, B.訓練日期迄
|
|
||||||
from 課程報名 A
|
|
||||||
inner join 訓練課程企劃 B on A.訓練課程編號 = B.編號
|
|
||||||
inner join BPSNView C on A.學員編號 = C.BPENO
|
|
||||||
where (A.報名狀態 = 'Y' or A.報名狀態 = 'R')
|
|
||||||
and B.訓練日期 >= @MinCourseDate
|
|
||||||
and (A.滿意度催填狀態 is null or A.滿意度催填狀態 = '')
|
|
||||||
and not exists (
|
|
||||||
select 1 from 滿意度調查 D
|
|
||||||
where D.訓練課程企劃編號 = A.訓練課程編號 and D.學員編號 = A.學員編號
|
|
||||||
)
|
|
||||||
and dateadd(day, @DeadlineDays, B.訓練日期迄) < getdate()
|
|
||||||
order by A.學員編號";
|
|
||||||
cmd.Parameters.Add(new SqlParameter("@MinCourseDate", minDate));
|
|
||||||
cmd.Parameters.Add(new SqlParameter("@DeadlineDays", deadlineDays));
|
|
||||||
|
|
||||||
DataTable dt = new DataTable();
|
|
||||||
using (var reader = cmd.ExecuteReader())
|
|
||||||
{
|
|
||||||
dt.Load(reader);
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (DataRow row in dt.Rows)
|
|
||||||
{
|
|
||||||
string 學員編號 = DAC.GetString(row["學員編號"]);
|
|
||||||
if (excludeEmps.Contains(學員編號))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
string 學員姓名 = DAC.GetString(row["學員姓名"]);
|
|
||||||
string 電子郵件 = DAC.GetString(row["電子郵件"]);
|
|
||||||
string 訓練名稱 = DAC.GetString(row["訓練名稱"]);
|
|
||||||
DateTime 訓練日期 = DAC.GetDateTime(row["訓練日期"]);
|
|
||||||
DateTime 訓練日期迄 = DAC.GetDateTime(row["訓練日期迄"]);
|
|
||||||
int 訓練課程編號 = DAC.GetInt32(row["訓練課程編號"]);
|
|
||||||
|
|
||||||
發送郵件 發送郵件 = new 發送郵件();
|
|
||||||
發送郵件.發送滿意度催填郵件(學員姓名, 電子郵件, 訓練名稱, 訓練日期, 訓練日期迄, 手機版網址);
|
|
||||||
|
|
||||||
DbCommand cmdUpd = conn.CreateCommand();
|
|
||||||
cmdUpd.CommandText =
|
|
||||||
"update 課程報名 set 滿意度催填狀態 = 'Y'" +
|
|
||||||
" where 訓練課程編號 = @訓練課程編號 and 學員編號 = @學員編號";
|
|
||||||
cmdUpd.Parameters.Add(new SqlParameter("@訓練課程編號", 訓練課程編號));
|
|
||||||
cmdUpd.Parameters.Add(new SqlParameter("@學員編號", 學員編號));
|
|
||||||
cmdUpd.ExecuteNonQuery();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,255 +0,0 @@
|
|||||||
using NPOI.SS.Formula.Functions;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Web;
|
|
||||||
using System.Web.UI.WebControls;
|
|
||||||
using WebLib;
|
|
||||||
|
|
||||||
namespace Education
|
|
||||||
{
|
|
||||||
public class PublicVariable : WebLib.PublicVariable
|
|
||||||
{
|
|
||||||
private static Random r = new Random();
|
|
||||||
|
|
||||||
// 常用變數
|
|
||||||
public static string[] 換行分隔 = { "\r\n" };
|
|
||||||
|
|
||||||
#region SESSION 變數名稱
|
|
||||||
public const string CompanyId = "CompanyId";
|
|
||||||
public const string EmployeeId = "EmployeeId";
|
|
||||||
public const string EmployeeName = "EmployeeName";
|
|
||||||
public const string EmployeeFunction = "EmployeeFunction";
|
|
||||||
public const string CurrentPlace = "CurrentPlace";
|
|
||||||
public const string CurrentPlaceName = "CurrentPlaceName";
|
|
||||||
public const string UserGroups = "UserGroups";
|
|
||||||
public const string EventPicturePath = "~/Upload/Event/";
|
|
||||||
public const string BulletinAttachPath = "~/Upload/Attach/";
|
|
||||||
public const string IsManager = "IsManager";
|
|
||||||
public const string IsWorker = "IsWorker";
|
|
||||||
public const string IsBackend = "IsBackend";
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region 檔案上傳/圖檔上傳路徑
|
|
||||||
public const string 講師照片路徑 = "~/PhotoUpload/Teacher/";
|
|
||||||
public const string 場地照片路徑 = "~/PhotoUpload/Place/";
|
|
||||||
public const string 課程剪影路徑 = "~/PhotoUpload/Class/";
|
|
||||||
public const string 證照上傳路徑 = "~/DocUpload/Certificate/";
|
|
||||||
public const string 溝通記錄上傳路徑 = "~/DocUpload/Communication/";
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region 系統設定變數,由 Global.asax 讀取 web.config 中的設定
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 系統名稱
|
|
||||||
/// </summary>
|
|
||||||
public static string SystemName = "Education";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 未登入時開放某些功能
|
|
||||||
/// </summary>
|
|
||||||
public static bool NoLoginFunction = false;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 是否為偵錯模式,會將系統錯誤訊息顯示在網頁上
|
|
||||||
/// </summary>
|
|
||||||
public static bool DEBUG = true;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 管理員群組
|
|
||||||
/// </summary>
|
|
||||||
public static string ManagerGroup = "'TR01'";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 承辦人群組
|
|
||||||
/// </summary>
|
|
||||||
public static string WorkerGroup = "'TR02'";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 總管理處ID
|
|
||||||
/// </summary>
|
|
||||||
public static int 總管理處ID = 2;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 人資部ID
|
|
||||||
/// </summary>
|
|
||||||
public static int 人資部ID = 56;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 財務部ID
|
|
||||||
/// </summary>
|
|
||||||
public static int 財務部ID = 60;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 是否使用 SSL 登入發郵件
|
|
||||||
/// </summary>
|
|
||||||
public static bool SendMailBySSL = false;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 郵件發送主機
|
|
||||||
/// </summary>
|
|
||||||
public static string SendMailHost = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 郵件發送通訊埠,不使用 SSL 的通常是 25,使用 SSL 的通常是 465
|
|
||||||
/// </summary>
|
|
||||||
public static int SendMailPort = 25;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 郵件發送帳號
|
|
||||||
/// </summary>
|
|
||||||
public static string SendMailUserName = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 郵件發送密碼
|
|
||||||
/// </summary>
|
|
||||||
public static string SendMailPassword = "";
|
|
||||||
|
|
||||||
#region 滿意度調查催填設定
|
|
||||||
public const string SurveyReminderDeadlineDaysKey = "SurveyReminderDeadlineDays";
|
|
||||||
public const string SurveyReminderExcludeEmployeesKey = "SurveyReminderExcludeEmployees";
|
|
||||||
public const string SurveyReminderMinCourseDateKey = "SurveyReminderMinCourseDate";
|
|
||||||
public const string SiteBaseUrlKey = "SiteBaseUrl";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 上課後幾天內要填寫滿意度調查
|
|
||||||
/// </summary>
|
|
||||||
public static int SurveyReminderDeadlineDays = 10;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 排除催填的員工編號(逗號分隔)
|
|
||||||
/// </summary>
|
|
||||||
public static string SurveyReminderExcludeEmployees = "00002,00003";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 只催填此日期之後的課程
|
|
||||||
/// </summary>
|
|
||||||
public static DateTime SurveyReminderMinCourseDate = new DateTime(2026, 7, 1);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 站台基礎 URL(如 http://hostname:port)
|
|
||||||
/// </summary>
|
|
||||||
public static string SiteBaseUrl = "";
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
public static string SystemVersion
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
|
|
||||||
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location);
|
|
||||||
return fvi.FileVersion;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static DateTime? _領據關帳年月UpdateTime = null;
|
|
||||||
private static string _領據關帳年月 = string.Empty;
|
|
||||||
public static string 領據關帳年月
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(_領據關帳年月) || !_領據關帳年月UpdateTime.HasValue || _領據關帳年月UpdateTime < DateTime.Now.AddMinutes(-10))
|
|
||||||
{
|
|
||||||
using (var conn = DAC.NewConnection())
|
|
||||||
{
|
|
||||||
var daoBWEX = new DAC_BWEX(conn);
|
|
||||||
_領據關帳年月 = daoBWEX.Read領據關帳年月;
|
|
||||||
_領據關帳年月UpdateTime = DateTime.Now;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _領據關帳年月;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_領據關帳年月 = value;
|
|
||||||
_領據關帳年月UpdateTime = DateTime.Now;
|
|
||||||
using (var conn = DAC.NewConnection())
|
|
||||||
{
|
|
||||||
new DAC_BWEX(conn).WriteSetting("領據關帳年月", 1, value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static decimal? _領據執行業務所得課稅門檻 = null;
|
|
||||||
public static decimal 領據執行業務所得課稅門檻
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (!_領據執行業務所得課稅門檻.HasValue)
|
|
||||||
{
|
|
||||||
using (var conn = DAC.NewConnection())
|
|
||||||
{
|
|
||||||
_領據執行業務所得課稅門檻 = new DAC_BRTE(conn).領據執行業務所得課稅門檻;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _領據執行業務所得課稅門檻.Value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static decimal? _領據薪資課稅門檻 = null;
|
|
||||||
public static decimal 領據薪資課稅門檻
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (!_領據薪資課稅門檻.HasValue)
|
|
||||||
{
|
|
||||||
using (var conn = DAC.NewConnection())
|
|
||||||
{
|
|
||||||
_領據薪資課稅門檻 = new DAC_BRTE(conn).領據薪資課稅門檻;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _領據薪資課稅門檻.Value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static decimal? _領據基本工資 = null;
|
|
||||||
public static decimal 領據基本工資
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (!_領據基本工資.HasValue)
|
|
||||||
{
|
|
||||||
using (var conn = DAC.NewConnection())
|
|
||||||
{
|
|
||||||
_領據基本工資 = new DAC_BRTE(conn).領據基本工資;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _領據基本工資.Value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static decimal? _領據執行業務所得稅率 = null;
|
|
||||||
public static decimal 領據執行業務所得稅率
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (!_領據執行業務所得稅率.HasValue)
|
|
||||||
{
|
|
||||||
using (var conn = DAC.NewConnection())
|
|
||||||
{
|
|
||||||
_領據執行業務所得稅率 = new DAC_BRTE(conn).領據執行業務所得稅率;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _領據執行業務所得稅率.Value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static decimal? _領據薪資稅率 = null;
|
|
||||||
public static decimal 領據薪資稅率
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (!_領據薪資稅率.HasValue)
|
|
||||||
{
|
|
||||||
using (var conn = DAC.NewConnection())
|
|
||||||
{
|
|
||||||
_領據薪資稅率 = new DAC_BRTE(conn).領據薪資稅率;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _領據薪資稅率.Value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,220 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Data;
|
|
||||||
using System.Data.Common;
|
|
||||||
using System.Text;
|
|
||||||
using WebLib;
|
|
||||||
|
|
||||||
namespace Education
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 取得權限設定
|
|
||||||
/// </summary>
|
|
||||||
public class MWEB: DAC
|
|
||||||
{
|
|
||||||
public MWEB()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 檢查目前登入的員工是否有某程式的權限
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="programId">程式編號</param>
|
|
||||||
/// <param name="rightName">權限名稱</param>
|
|
||||||
/// <param name="employeeId">員工編號</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public bool CheckRight(string programId, WRightName rightName, string employeeId)
|
|
||||||
{
|
|
||||||
if (programId == null)
|
|
||||||
programId = "NO PROGRAM ID";
|
|
||||||
if (employeeId == null)
|
|
||||||
employeeId = "NOBODY";
|
|
||||||
|
|
||||||
// 取得員工權限
|
|
||||||
string right1 = BWCPE_GetRight(programId, employeeId, rightName);
|
|
||||||
|
|
||||||
// 取得這個員工隸屬的群組
|
|
||||||
string[] bpglps = BWEH_GetBpglpListByBpeno(employeeId);
|
|
||||||
|
|
||||||
// 取得各群組權限
|
|
||||||
string[] right2 = new string[bpglps.Length];
|
|
||||||
for (int i = 0; i < right2.Length; i++)
|
|
||||||
{
|
|
||||||
right2[i] = BWCPG_GetRight(programId, bpglps[i], rightName);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 綜合判斷權限
|
|
||||||
string right = "";
|
|
||||||
|
|
||||||
if (right1 != "")
|
|
||||||
right = right1;
|
|
||||||
|
|
||||||
if (right != "Y")
|
|
||||||
for (int i = 0; i < right2.Length; i++)
|
|
||||||
{
|
|
||||||
if (right2[i] != "")
|
|
||||||
{
|
|
||||||
if (right != "Y" && right2[i] == "Y")
|
|
||||||
right = "Y";
|
|
||||||
else if (right != "Y" && right2[i] == "N")
|
|
||||||
right = "N";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return right == "Y";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 取員工權限
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="rightId">權限編號</param>
|
|
||||||
/// <param name="employId">員工編號</param>
|
|
||||||
/// <param name="functionName">功能名稱</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
private string BWCPE_GetRight(string rightId, string employId, WRightName functionName)
|
|
||||||
{
|
|
||||||
string funcName = "";
|
|
||||||
switch (functionName)
|
|
||||||
{
|
|
||||||
case WRightName.Execute:
|
|
||||||
funcName = "BPRT1";
|
|
||||||
break;
|
|
||||||
case WRightName.Insert:
|
|
||||||
funcName = "BPRTI";
|
|
||||||
break;
|
|
||||||
case WRightName.Update:
|
|
||||||
funcName = "BPRTM";
|
|
||||||
break;
|
|
||||||
case WRightName.Delete:
|
|
||||||
funcName = "BPRTD";
|
|
||||||
break;
|
|
||||||
case WRightName.Search:
|
|
||||||
funcName = "BPRTF";
|
|
||||||
break;
|
|
||||||
case WRightName.Print:
|
|
||||||
funcName = "BPRTP";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
DbCommand cmd = NewCommand();
|
|
||||||
cmd.CommandText = @"SELECT BPRT1, BPRTI, BPRTM, BPRTD, BPRTF, BPRTP FROM BWCPE WHERE BPPRG=@BPPRG AND BPENO=@BPENO";
|
|
||||||
|
|
||||||
AddParam(cmd, "BPPRG", rightId);
|
|
||||||
AddParam(cmd, "BPENO", employId);
|
|
||||||
|
|
||||||
DataTable data = Select(cmd);
|
|
||||||
if (data.Rows.Count != 0)
|
|
||||||
{
|
|
||||||
return data.Rows[0][funcName].ToString();
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 取員工所屬群組
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="employeeId"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
private string[] BWEH_GetBpglpListByBpeno(string employeeId)
|
|
||||||
{
|
|
||||||
DbCommand cmd = NewCommand();
|
|
||||||
cmd.CommandText = @"SELECT E.BPGLP AS BPGLP
|
|
||||||
FROM BWEG E, BWEH G
|
|
||||||
WHERE E.BPGLP=G.BPGLP AND G.BPENO=@BPENO
|
|
||||||
ORDER BY E.BPGLP ";
|
|
||||||
AddParam(cmd, "BPENO", employeeId);
|
|
||||||
|
|
||||||
DataTable inGroup = Select(cmd);
|
|
||||||
if (inGroup.Rows.Count == 0)
|
|
||||||
return new string[0];
|
|
||||||
else
|
|
||||||
{
|
|
||||||
string[] result = new string[inGroup.Rows.Count];
|
|
||||||
for (int i = 0; i < inGroup.Rows.Count; i++)
|
|
||||||
{
|
|
||||||
result[i] = inGroup.Rows[i][0].ToString();
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 取群組權限
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="rightId">權限編號</param>
|
|
||||||
/// <param name="groupId">群組編號</param>
|
|
||||||
/// <param name="functionName">功能名稱</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
/// <exception cref="NotImplementedException"></exception>
|
|
||||||
private string BWCPG_GetRight(string rightId, string groupId, WRightName functionName)
|
|
||||||
{
|
|
||||||
string funcName = "";
|
|
||||||
switch (functionName)
|
|
||||||
{
|
|
||||||
case WRightName.Execute:
|
|
||||||
funcName = "BPRT1";
|
|
||||||
break;
|
|
||||||
case WRightName.Insert:
|
|
||||||
funcName = "BPRTI";
|
|
||||||
break;
|
|
||||||
case WRightName.Update:
|
|
||||||
funcName = "BPRTM";
|
|
||||||
break;
|
|
||||||
case WRightName.Delete:
|
|
||||||
funcName = "BPRTD";
|
|
||||||
break;
|
|
||||||
case WRightName.Search:
|
|
||||||
funcName = "BPRTF";
|
|
||||||
break;
|
|
||||||
case WRightName.Print:
|
|
||||||
funcName = "BPRTP";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
DbCommand cmd = NewCommand();
|
|
||||||
cmd.CommandText = @"SELECT BPRT1, BPRTI, BPRTM, BPRTD, BPRTF, BPRTP FROM BWCPG WHERE BPPRG=@BPPRG AND BPGLP=@BPGLP";
|
|
||||||
|
|
||||||
AddParam(cmd, "BPPRG", rightId);
|
|
||||||
AddParam(cmd, "BPGLP", groupId);
|
|
||||||
|
|
||||||
DataTable data = Select(cmd);
|
|
||||||
if (data.Rows.Count != 0)
|
|
||||||
{
|
|
||||||
return data.Rows[0][funcName].ToString();
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum WRightName
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 主檔
|
|
||||||
/// </summary>
|
|
||||||
Execute,
|
|
||||||
/// <summary>
|
|
||||||
/// 新增
|
|
||||||
/// </summary>
|
|
||||||
Insert,
|
|
||||||
/// <summary>
|
|
||||||
/// 更正
|
|
||||||
/// </summary>
|
|
||||||
Update,
|
|
||||||
/// <summary>
|
|
||||||
/// 刪除
|
|
||||||
/// </summary>
|
|
||||||
Delete,
|
|
||||||
/// <summary>
|
|
||||||
/// 查詢
|
|
||||||
/// </summary>
|
|
||||||
Search,
|
|
||||||
/// <summary>
|
|
||||||
/// 印表
|
|
||||||
/// </summary>
|
|
||||||
Print
|
|
||||||
}
|
|
||||||
|
|
||||||
public class ProgramID
|
|
||||||
{
|
|
||||||
public const string 匯出基本資料 = "TR_EXPORT";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,173 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
using System.Collections;
|
|
||||||
using System.Timers;
|
|
||||||
using System.IO;
|
|
||||||
|
|
||||||
namespace Wellan.Service
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 檔案定時清除服務
|
|
||||||
/// </summary>
|
|
||||||
public class WDeleteFileService
|
|
||||||
{
|
|
||||||
private WDeleteFileService()
|
|
||||||
{
|
|
||||||
_deleteFilePatterns = new List<string>();
|
|
||||||
_timer = new Timer();
|
|
||||||
_timer.Enabled = false;
|
|
||||||
_timer.Elapsed += new ElapsedEventHandler(DoDeleteFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static WDeleteFileService GetInstance()
|
|
||||||
{
|
|
||||||
if (_instance == null)
|
|
||||||
_instance = new WDeleteFileService();
|
|
||||||
return _instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 檔案刪除間隔時間,單位為秒。預設值為 600 秒
|
|
||||||
/// </summary>
|
|
||||||
public int Interval
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _interval;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_interval = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 要刪除多久之前的檔案,單位為秒。預設值為 600 秒
|
|
||||||
/// </summary>
|
|
||||||
public int FileAgeToDelete
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return Convert.ToInt32(_fileAge.TotalSeconds);
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_fileAge = new TimeSpan(value * TimeSpan.TicksPerSecond);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 設定或取得檔案定時清除服務是否啟動
|
|
||||||
/// </summary>
|
|
||||||
public bool Enabled
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _enabled;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value)
|
|
||||||
{
|
|
||||||
if (_enabled)
|
|
||||||
return;
|
|
||||||
|
|
||||||
_timer.Interval = _interval * 1000;
|
|
||||||
_timer.AutoReset = true;
|
|
||||||
_timer.Enabled = true;
|
|
||||||
_enabled = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!_enabled)
|
|
||||||
return;
|
|
||||||
|
|
||||||
_enabled = false;
|
|
||||||
_timer.Enabled = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para>欲清除的檔案路徑及檔案名稱,檔案名稱可以使用萬用字元</para>
|
|
||||||
/// <para>需要多個檔案路徑及檔案名稱時,請將所需的檔案路徑及檔案名稱一一加入</para>
|
|
||||||
/// <para>例如:c:\temp\*.mdb 表示要清除 c:\temp 目錄下的 *.mdb</para>
|
|
||||||
/// </summary>
|
|
||||||
public List<string> DeletePatterns
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _deleteFilePatterns;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 實際執行刪除的動作
|
|
||||||
/// </summary>
|
|
||||||
private void DoDeleteFile(object sender, ElapsedEventArgs e)
|
|
||||||
{
|
|
||||||
if (!_enabled)
|
|
||||||
{
|
|
||||||
_timer.Enabled = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
_timer.Enabled = false;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
foreach (string pattern in _deleteFilePatterns)
|
|
||||||
{
|
|
||||||
string namepart = Path.GetFileName(pattern);
|
|
||||||
string pathPart = pattern.Substring(0, pattern.Length - namepart.Length);
|
|
||||||
try
|
|
||||||
{
|
|
||||||
DirectoryInfo dirInfo = new DirectoryInfo(pathPart);
|
|
||||||
FileInfo[] matchFiles = dirInfo.GetFiles(namepart);
|
|
||||||
foreach (FileInfo file in matchFiles)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (DateTime.Now - file.LastWriteTime > _fileAge)
|
|
||||||
file.Delete();
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
// do nothing
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
// do nothing
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
_timer.Enabled = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static WDeleteFileService _instance = null;
|
|
||||||
private List<string> _deleteFilePatterns = null;
|
|
||||||
private Timer _timer = null;
|
|
||||||
private int _interval = 600;
|
|
||||||
private TimeSpan _fileAge = new TimeSpan(TimeSpan.TicksPerSecond * 600);
|
|
||||||
private bool _enabled = false;
|
|
||||||
|
|
||||||
#region UNIT TEST
|
|
||||||
public static void Main()
|
|
||||||
{
|
|
||||||
WDeleteFileService delSrv = WDeleteFileService.GetInstance();
|
|
||||||
delSrv.DeletePatterns.Add(@"c:\temp\*.*");
|
|
||||||
delSrv.Interval = 5;
|
|
||||||
delSrv.FileAgeToDelete = 1;
|
|
||||||
delSrv.Enabled = true;
|
|
||||||
Console.WriteLine("Press ENTER to end program");
|
|
||||||
Console.ReadLine();
|
|
||||||
delSrv.Enabled = false;
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,129 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Data;
|
|
||||||
using System.Configuration;
|
|
||||||
using System.Net;
|
|
||||||
using System.Net.Mail;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Timers;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 郵件傳送服務
|
|
||||||
/// </summary>
|
|
||||||
public class WMailSender
|
|
||||||
{
|
|
||||||
private static WMailSender _instance = null;
|
|
||||||
private Queue<MailMessage> _queue = null;
|
|
||||||
private bool _enabled = false;
|
|
||||||
private int _interval = 30;
|
|
||||||
private Timer _timer = null;
|
|
||||||
private string _host = "";
|
|
||||||
|
|
||||||
private WMailSender()
|
|
||||||
{
|
|
||||||
_queue = new Queue<MailMessage>();
|
|
||||||
|
|
||||||
_timer = new Timer();
|
|
||||||
_timer.Enabled = false;
|
|
||||||
_timer.Elapsed += new ElapsedEventHandler(SendMailLoop);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static WMailSender GetInstance()
|
|
||||||
{
|
|
||||||
if (_instance == null)
|
|
||||||
_instance = new WMailSender();
|
|
||||||
return _instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Host
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_host = value;
|
|
||||||
}
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _host;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Send(MailMessage message)
|
|
||||||
{
|
|
||||||
_queue.Enqueue(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SendMailLoop(object sender, ElapsedEventArgs e)
|
|
||||||
{
|
|
||||||
if (!_enabled)
|
|
||||||
{
|
|
||||||
_timer.Enabled = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
_timer.Enabled = false;
|
|
||||||
|
|
||||||
SmtpClient _client = new SmtpClient();
|
|
||||||
//_client.DeliveryMethod = SmtpDeliveryMethod.Network;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
while (_queue.Count > 0)
|
|
||||||
{
|
|
||||||
MailMessage message = _queue.Dequeue();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_client.Send(message);
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
// 如果傳送失敗,需重傳
|
|
||||||
_queue.Enqueue(message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
_timer.Enabled = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int Interval
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _interval;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_interval = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool Enabled
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _enabled;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value)
|
|
||||||
{
|
|
||||||
if (_enabled)
|
|
||||||
return;
|
|
||||||
|
|
||||||
_timer.Interval = _interval * 1000;
|
|
||||||
_timer.AutoReset = true;
|
|
||||||
_timer.Enabled = true;
|
|
||||||
_enabled = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!_enabled)
|
|
||||||
return;
|
|
||||||
|
|
||||||
_enabled = false;
|
|
||||||
_timer.Enabled = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,187 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" ?>
|
|
||||||
<LookupConfig xmlns="http://www.maolaoda.com.tw/LookupConfig.xsd">
|
|
||||||
<Appearence dataTextColor="#000000"
|
|
||||||
dataBackgroundColor="#FFFFFF"
|
|
||||||
dataAltBackgroundColor="#CCCCCC"
|
|
||||||
titleTextColor="#FFFFFF"
|
|
||||||
titleBackgroundColor="#2472B2"
|
|
||||||
titleTextSize="12pt"
|
|
||||||
dataTextSize="12pt"/>
|
|
||||||
|
|
||||||
<Lookup name="BDPT"
|
|
||||||
sql="SELECT BDNUM,BDNAM FROM BDPT WHERE :WHERE ORDER BY :ORDER"
|
|
||||||
keyFields="BDNUM,BDMAN"
|
|
||||||
listFields="BDNUM,BDNAM"
|
|
||||||
outputFields="BDNUM,BDNAM"
|
|
||||||
listTitles="部門編號,部門名稱"
|
|
||||||
listTitleMids=""
|
|
||||||
listWidths="80,150"
|
|
||||||
maxRecord="20"
|
|
||||||
notShowOnlyOneRecord="true"/>
|
|
||||||
|
|
||||||
<Lookup name="BPSN"
|
|
||||||
sql="SELECT BPENO, BPNME, BPEML FROM BPSNView WHERE :WHERE ORDER BY :ORDER"
|
|
||||||
keyFields="BPENO,BPNME,BPEML"
|
|
||||||
listFields="BPENO,BPNME,BPEML"
|
|
||||||
outputFields="BPENO,BPNME,BPEML"
|
|
||||||
listTitles="員工編號,員工姓名,電子郵件"
|
|
||||||
listTitleMids=""
|
|
||||||
listWidths="80,150,200"
|
|
||||||
maxRecord="20"
|
|
||||||
notShowOnlyOneRecord="true"/>
|
|
||||||
|
|
||||||
<Lookup name="BPSN1"
|
|
||||||
sql="SELECT BPENO, BPNME FROM BPSNView WHERE :WHERE AND (BPEDY IS NULL OR BPEDY >= CONVERT(DATETIME, CONVERT(VARCHAR, DATEADD(Month, -1, DATEADD(Day, -DAY(GETDATE()) + 1, GETDATE())), 112), 112)) ORDER BY :ORDER"
|
|
||||||
keyFields="BPENO,BPNME"
|
|
||||||
listFields="BPENO,BPNME"
|
|
||||||
outputFields="BPENO,BPNME"
|
|
||||||
listTitles="員工編號,員工姓名"
|
|
||||||
listTitleMids=""
|
|
||||||
listWidths="80,150"
|
|
||||||
maxRecord="20"
|
|
||||||
notShowOnlyOneRecord="true"/>
|
|
||||||
|
|
||||||
<Lookup name="BPSN2"
|
|
||||||
sql="SELECT BPENO, BPNME, BPEML FROM BPSNView WHERE :WHERE AND BPEDY IS NULL AND BPDPT != 'F01' ORDER BY :ORDER"
|
|
||||||
keyFields="BPENO,BPNME,BPEML"
|
|
||||||
listFields="BPENO,BPNME,BPEML"
|
|
||||||
outputFields="BPENO,BPNME,BPEML"
|
|
||||||
listTitles="員工編號,員工姓名,電子郵件"
|
|
||||||
listTitleMids=""
|
|
||||||
listWidths="80,150,200"
|
|
||||||
maxRecord="20"
|
|
||||||
notShowOnlyOneRecord="true"/>
|
|
||||||
|
|
||||||
<Lookup name="BPSNEML"
|
|
||||||
sql="SELECT BPENO, BPNME, BPEML FROM BPSNView WHERE :WHERE AND (BPEDY IS NULL OR BPEDY >= CONVERT(DATETIME, CONVERT(VARCHAR, DATEADD(Month, -1, DATEADD(Day, -DAY(GETDATE()) + 1, GETDATE())), 112), 112)) ORDER BY :ORDER"
|
|
||||||
keyFields="BPNME,BPEML"
|
|
||||||
listFields="BPNME,BPEML"
|
|
||||||
outputFields="BPNME,BPEML"
|
|
||||||
listTitles="員工姓名,電子郵件"
|
|
||||||
listTitleMids=""
|
|
||||||
listWidths="100,180"
|
|
||||||
maxRecord="20"
|
|
||||||
notShowOnlyOneRecord="true"/>
|
|
||||||
|
|
||||||
<Lookup name="BCLS"
|
|
||||||
sql="SELECT BSCLS,BSSCR FROM BCLS WHERE :WHERE ORDER BY :ORDER"
|
|
||||||
keyFields="BSCLS,BSSCR"
|
|
||||||
listFields="BSCLS,BSSCR"
|
|
||||||
outputFields="BSCLS,BSSCR"
|
|
||||||
listTitles="類別編號,類別內容"
|
|
||||||
listTitleMids=""
|
|
||||||
listWidths="80,300"
|
|
||||||
maxRecord="20"
|
|
||||||
notShowOnlyOneRecord="true"/>
|
|
||||||
|
|
||||||
<Lookup name="BCLSEDIT"
|
|
||||||
sql="SELECT '' BSCLS, '' BSSCR UNION SELECT BSCLS,BSSCR FROM BCLS WHERE :WHERE ORDER BY :ORDER"
|
|
||||||
keyFields="BSCLS,BSSCR"
|
|
||||||
listFields="BSCLS,BSSCR"
|
|
||||||
outputFields="BSCLS,BSSCR"
|
|
||||||
listTitles="類別編號,類別內容"
|
|
||||||
listTitleMids=""
|
|
||||||
listWidths="80,300"
|
|
||||||
maxRecord="20"
|
|
||||||
notShowOnlyOneRecord="true"/>
|
|
||||||
|
|
||||||
<Lookup name="BPNO"
|
|
||||||
sql="SELECT BPPNO,BPNAM FROM BPNO WHERE :WHERE ORDER BY :ORDER"
|
|
||||||
keyFields="BPPNO,BPNAM"
|
|
||||||
listFields="BPPNO,BPNAM"
|
|
||||||
outputFields="BPPNO,BPNAM"
|
|
||||||
listTitles="專案編號,專案名稱"
|
|
||||||
listTitleMids=""
|
|
||||||
listWidths="80,150"
|
|
||||||
maxRecord="20"
|
|
||||||
notShowOnlyOneRecord="true"/>
|
|
||||||
|
|
||||||
<Lookup name="BCUS"
|
|
||||||
sql="SELECT BCNUM,BCNAM FROM BCUS WHERE :WHERE ORDER BY :ORDER"
|
|
||||||
keyFields="BCNUM,BCNAM"
|
|
||||||
listFields="BCNUM,BCNAM"
|
|
||||||
outputFields="BCNUM,BCNAM"
|
|
||||||
listTitles="客戶編號,客戶名稱"
|
|
||||||
listTitleMids=""
|
|
||||||
listWidths="80,300"
|
|
||||||
maxRecord="20"
|
|
||||||
notShowOnlyOneRecord="true"/>
|
|
||||||
|
|
||||||
<Lookup name="BPRJ"
|
|
||||||
sql="SELECT BPPNM, BPPME FROM BPRJ WHERE :WHERE ORDER BY :ORDER"
|
|
||||||
keyFields="BPPNM,BPPME"
|
|
||||||
listFields="BPPNM,BPPME"
|
|
||||||
outputFields="BPPNM,BPPME"
|
|
||||||
listTitles="專案編號,專案名稱"
|
|
||||||
listTitleMids=""
|
|
||||||
listWidths="80,300"
|
|
||||||
maxRecord="20"
|
|
||||||
notShowOnlyOneRecord="true"/>
|
|
||||||
|
|
||||||
<Lookup name="BPAA"
|
|
||||||
sql="SELECT BPPYN, BPPYM FROM BPAA WHERE :WHERE ORDER BY :ORDER"
|
|
||||||
keyFields="BPPYN,BPPYM"
|
|
||||||
listFields="BPPYN,BPPYM"
|
|
||||||
outputFields="BPPYN,BPPYM"
|
|
||||||
listTitles="專案年度編號,專案年度名稱"
|
|
||||||
listTitleMids=""
|
|
||||||
listWidths="120,300"
|
|
||||||
maxRecord="20"
|
|
||||||
notShowOnlyOneRecord="true"/>
|
|
||||||
|
|
||||||
<Lookup name="BRML"
|
|
||||||
sql="SELECT BCNUM, BCNAM FROM BRML WHERE :WHERE ORDER BY :ORDER"
|
|
||||||
keyFields="BCNUM,BCNAM"
|
|
||||||
listFields="BCNUM,BCNAM"
|
|
||||||
outputFields="BCNUM,BCNAM"
|
|
||||||
listTitles="銀行代號,銀行名稱"
|
|
||||||
listTitleMids=""
|
|
||||||
listWidths="120,300"
|
|
||||||
maxRecord="20"
|
|
||||||
notShowOnlyOneRecord="true"/>
|
|
||||||
|
|
||||||
<Lookup name="BFRM"
|
|
||||||
sql="SELECT BFNUM, BFNAM, BFFRM FROM BFRM WHERE :WHERE ORDER BY :ORDER"
|
|
||||||
keyFields="BFNUM,BFNAM"
|
|
||||||
listFields="BFNUM,BFNAM"
|
|
||||||
outputFields="BFNUM,BFNAM,BFFRM"
|
|
||||||
listTitles="公式代號,公式名稱"
|
|
||||||
listTitleMids=""
|
|
||||||
listWidths="120,300"
|
|
||||||
maxRecord="20"
|
|
||||||
notShowOnlyOneRecord="true"/>
|
|
||||||
|
|
||||||
<Lookup name="BPAP"
|
|
||||||
sql="SELECT BPENO, BPNME FROM BPAP WHERE :WHERE ORDER BY :ORDER"
|
|
||||||
keyFields="BPENO,BPNME"
|
|
||||||
listFields="BPENO,BPNME"
|
|
||||||
outputFields="BPENO,BPNME"
|
|
||||||
listTitles="人員編號,人員姓名"
|
|
||||||
listTitleMids=""
|
|
||||||
listWidths="80,150"
|
|
||||||
maxRecord="20"
|
|
||||||
notShowOnlyOneRecord="true"/>
|
|
||||||
|
|
||||||
<Lookup name="組織類別"
|
|
||||||
sql="SELECT 組織類別ID,組織類別名稱 FROM 組織類別 WHERE :WHERE ORDER BY :ORDER"
|
|
||||||
keyFields="組織類別ID,組織類別名稱"
|
|
||||||
listFields="組織類別ID,組織類別名稱"
|
|
||||||
outputFields="組織類別ID,組織類別名稱"
|
|
||||||
listTitles="組織類別ID,組織類別名稱"
|
|
||||||
listTitleMids=""
|
|
||||||
listWidths="80,150"
|
|
||||||
maxRecord="20"
|
|
||||||
notShowOnlyOneRecord="true"/>
|
|
||||||
|
|
||||||
<Lookup name="職務"
|
|
||||||
sql="SELECT 職務ID, 職務名稱 FROM 職務 WHERE :WHERE ORDER BY :ORDER"
|
|
||||||
keyFields="職務ID,職務名稱"
|
|
||||||
listFields="職務ID,職務名稱"
|
|
||||||
outputFields="職務ID,職務名稱"
|
|
||||||
listTitles="職務ID,職務名稱"
|
|
||||||
listTitleMids=""
|
|
||||||
listWidths="80,150"
|
|
||||||
maxRecord="20"
|
|
||||||
notShowOnlyOneRecord="true"/>
|
|
||||||
</LookupConfig>
|
|
||||||
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<xs:schema id="LookupConfig" targetNamespace="http://www.maolaoda.com.tw/LookupConfig.xsd"
|
|
||||||
elementFormDefault="qualified" xmlns="http://www.maolaoda.com.tw/LookupConfig.xsd"
|
|
||||||
xmlns:mstns="http://www.maolaoda.com.tw/LookupConfig.xsd"
|
|
||||||
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
|
||||||
xmlns:msprop="urn:schemas-microsoft-com:xml-msprop">
|
|
||||||
<xs:complexType name="Lookup">
|
|
||||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
|
||||||
<xs:attribute name="sql" type="xs:string" use="required"/>
|
|
||||||
<xs:attribute name="keyFields" type="xs:string" use="required"/>
|
|
||||||
<xs:attribute name="listFields" type="xs:string" use="required"/>
|
|
||||||
<xs:attribute name="outputFields" type="xs:string" use="required"/>
|
|
||||||
<xs:attribute name="listTitles" type="xs:string" use="required"/>
|
|
||||||
<xs:attribute name="listTitleMids" type="xs:string" use="optional"/>
|
|
||||||
<xs:attribute name="listWidths" type="xs:string" use="optional"/>
|
|
||||||
<xs:attribute name="maxRecord" type="xs:int" use="required"/>
|
|
||||||
<xs:attribute name="notShowOnlyOneRecord" type="xs:boolean" use="optional"/>
|
|
||||||
</xs:complexType>
|
|
||||||
<xs:complexType name="Appearence">
|
|
||||||
<xs:attribute name="titleBackgroundColor" type="xs:string"/>
|
|
||||||
<xs:attribute name="dataBackgroundColor" type="xs:string"/>
|
|
||||||
<xs:attribute name="dataTextColor" type="xs:string"/>
|
|
||||||
<xs:attribute name="dataAltBackgroundColor" type="xs:string"/>
|
|
||||||
<xs:attribute name="titleTextColor" type="xs:string"/>
|
|
||||||
<xs:attribute name="titleTextSize" type="xs:string"/>
|
|
||||||
<xs:attribute name="dataTextSize" type="xs:string"/>
|
|
||||||
</xs:complexType>
|
|
||||||
<xs:element name="LookupConfig">
|
|
||||||
<xs:complexType>
|
|
||||||
<xs:sequence>
|
|
||||||
<xs:element name="Appearence" maxOccurs="1" minOccurs="0" type="Appearence"/>
|
|
||||||
<xs:element name="Lookup" type="Lookup" maxOccurs="unbounded" minOccurs="0"/>
|
|
||||||
</xs:sequence>
|
|
||||||
</xs:complexType>
|
|
||||||
</xs:element>
|
|
||||||
</xs:schema>
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!--This file is auto-generated by the XML Schema Designer. It holds layout information for components on the designer surface.-->
|
|
||||||
<XSDDesignerLayout Style="TopDown" layoutVersion="2" viewPortLeft="-659" viewPortTop="0" zoom="100">
|
|
||||||
<Lookup_XmlComplexType left="0" top="715" width="10054" height="6614" selected="0" zOrder="1" index="0" expanded="1" />
|
|
||||||
<LookupConfig_XmlElement left="13785" top="848" width="7196" height="3280" selected="0" zOrder="2" index="1" expanded="1">
|
|
||||||
<Appearence_XmlElement left="11774" top="4636" width="5292" height="3281" selected="0" zOrder="4" index="0" expanded="0" />
|
|
||||||
<Lookup_XmlElement left="17700" top="4636" width="5292" height="3281" selected="0" zOrder="7" index="1" expanded="0" />
|
|
||||||
</LookupConfig_XmlElement>
|
|
||||||
<Appearence_XmlComplexType left="-26" top="8203" width="8890" height="6138" selected="0" zOrder="10" index="2" expanded="1" />
|
|
||||||
</XSDDesignerLayout>
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Web;
|
|
||||||
using WebLib;
|
|
||||||
|
|
||||||
namespace Education
|
|
||||||
{
|
|
||||||
public class DAC_檔案圖示: NameValueList
|
|
||||||
{
|
|
||||||
public DAC_檔案圖示()
|
|
||||||
{
|
|
||||||
Add("doc.png", "doc");
|
|
||||||
Add("doc.png", "docx");
|
|
||||||
Add("xls.png", "xls");
|
|
||||||
Add("xls.png", "xlsx");
|
|
||||||
Add("txt.png", "txt");
|
|
||||||
Add("exe.png", "exe");
|
|
||||||
Add("gif.png", "gif");
|
|
||||||
Add("html.png", "htm");
|
|
||||||
Add("html.png", "html");
|
|
||||||
Add("jpg.png", "jpg");
|
|
||||||
Add("jpg.png", "jpeg");
|
|
||||||
Add("pdf.png", "pdf");
|
|
||||||
Add("png.png", "png");
|
|
||||||
Add("ppt.png", "ppt");
|
|
||||||
Add("rar.png", "rar");
|
|
||||||
Add("rtf.png", "rtf");
|
|
||||||
Add("swf.png", "swf");
|
|
||||||
Add("zip.png", "zip");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Web;
|
|
||||||
using System.Data.Common;
|
|
||||||
using WebLib;
|
|
||||||
|
|
||||||
namespace Education
|
|
||||||
{
|
|
||||||
public class DAC_GetData : DAC
|
|
||||||
{
|
|
||||||
public DAC_GetData()
|
|
||||||
: base()
|
|
||||||
{ }
|
|
||||||
|
|
||||||
public DAC_GetData(DbConnection conn)
|
|
||||||
: base(conn)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
public 場地 取得選定場地(int 課程企劃id)
|
|
||||||
{
|
|
||||||
DAC_場地 Dao場地 = new DAC_場地(conn);
|
|
||||||
DAC_訓練課程企劃 Dao訓練課程企劃 = new DAC_訓練課程企劃(conn);
|
|
||||||
int 場地編號 = Dao訓練課程企劃.Select選定場地(課程企劃id);
|
|
||||||
if (場地編號 > 0)
|
|
||||||
{
|
|
||||||
場地List d = Dao場地.SelectOne(場地編號);
|
|
||||||
if (d.Count > 0)
|
|
||||||
return d[0];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
string 場地名稱 = Dao訓練課程企劃.Select選定場地名稱(課程企劃id);
|
|
||||||
if (!string.IsNullOrEmpty(場地名稱))
|
|
||||||
{
|
|
||||||
場地 result = new 場地();
|
|
||||||
result.場地名稱 = 場地名稱;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return new 場地();
|
|
||||||
}
|
|
||||||
|
|
||||||
public 講師 取得選定講師(int 課程企劃id, int 課程序號)
|
|
||||||
{
|
|
||||||
DAC_講師 Dao講師 = new DAC_講師(conn);
|
|
||||||
DAC_訓練課程企劃 Dao訓練課程企劃 = new DAC_訓練課程企劃(conn);
|
|
||||||
int 講師編號 = Dao訓練課程企劃.Select選定講師(課程企劃id, 課程序號);
|
|
||||||
if (講師編號 > 0)
|
|
||||||
{
|
|
||||||
講師List d = Dao講師.SelectOne(講師編號);
|
|
||||||
if (d.Count > 0)
|
|
||||||
return d[0];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
string 講師姓名 = Dao訓練課程企劃.Select選定講師名稱(課程企劃id, 課程序號);
|
|
||||||
if (!string.IsNullOrEmpty(講師姓名))
|
|
||||||
{
|
|
||||||
講師 result = new 講師();
|
|
||||||
result.姓名 = 講師姓名;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return new 講師();
|
|
||||||
}
|
|
||||||
|
|
||||||
public 講師 取得選定講師(object 課程企劃id, object 課程序號)
|
|
||||||
{
|
|
||||||
return 取得選定講師(DAC.GetInt32(課程企劃id), DAC.GetInt32(課程序號));
|
|
||||||
}
|
|
||||||
|
|
||||||
public string 取得檢附資料參考(string id)
|
|
||||||
{
|
|
||||||
return new DAC_BCLS().Get類別名稱(DAC_檢附資料參考.BSPAR, id).Replace("\r\n", "<br/>").Replace("\r", "<br/>").Replace("\n", "<br/>");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,235 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
using Wellan.Common;
|
|
||||||
using System.Data;
|
|
||||||
using System.Data.Common;
|
|
||||||
|
|
||||||
namespace Education
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 員工權限
|
|
||||||
/// </summary>
|
|
||||||
public class BWCPE_DAC : DAC
|
|
||||||
{
|
|
||||||
private DbCommand cmdSelect = null;
|
|
||||||
private DbCommand cmdSelectRight = null;
|
|
||||||
private DbCommand cmdCheckExist = null;
|
|
||||||
private DbCommand cmdInsert = null;
|
|
||||||
private DbCommand cmdUpdate = null;
|
|
||||||
|
|
||||||
public BWCPE_DAC()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public BWCPE_DAC(string connectionConfig, string connectionConfigName)
|
|
||||||
: base(connectionConfig, connectionConfigName)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
private void PrepareSql()
|
|
||||||
{
|
|
||||||
EnsureQuery();
|
|
||||||
string tblBwcpe = WGuard1.WCFA("BWCPE");
|
|
||||||
|
|
||||||
if (cmdSelect == null)
|
|
||||||
{
|
|
||||||
cmdSelect = Query.NewCommand(Query.ReplaceParamNamePrefix(
|
|
||||||
"SELECT B.BPPRG AS BPPRG, B.BPENO AS BPENO, A.BPENO AS BBPENO, A.BPNME AS BBPNME, "
|
|
||||||
+ " B.BPRT1 AS BPRT1, B.BPRTI AS BPRTI, B.BPRTM AS BPRTM, B.BPRTD AS BPRTD, "
|
|
||||||
+ " B.BPRTF AS BPRTF, B.BPRTP AS BPRTP, B.TRDAT AS TRDAT, B.TRMOD AS TRMOD, "
|
|
||||||
+ " B.TRUSR AS TRUSR "
|
|
||||||
+ " FROM " + WGuard1.WCFA("BPSN") + " A "
|
|
||||||
+ " LEFT OUTER JOIN " + tblBwcpe + " B ON A.BPENO=B.BPENO AND B.BPPRG=@BPPRG "
|
|
||||||
+ " WHERE A.BPEDY IS NULL AND A.BPENO <> ' ' "
|
|
||||||
+ " ORDER BY A.BPENO "));
|
|
||||||
cmdSelect.Parameters.Add(Query.NewParameter("BPPRG", DbType.AnsiString));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cmdCheckExist == null)
|
|
||||||
{
|
|
||||||
cmdCheckExist = Query.NewCommand(Query.ReplaceParamNamePrefix("SELECT COUNT(1) FROM " + tblBwcpe + " WHERE BPPRG=@BPPRG AND BPENO=@BPENO"));
|
|
||||||
cmdCheckExist.Parameters.Add(Query.NewParameter("BPPRG", DbType.AnsiString));
|
|
||||||
cmdCheckExist.Parameters.Add(Query.NewParameter("BPENO", DbType.AnsiString));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cmdInsert == null)
|
|
||||||
{
|
|
||||||
cmdInsert = Query.NewCommand(Query.ReplaceParamNamePrefix(
|
|
||||||
"INSERT INTO " + tblBwcpe + " (BPPRG, BPENO, BPRT1, BPRTI, BPRTM, BPRTD, BPRTF, BPRTP, TRDAT, TRMOD, TRUSR) "
|
|
||||||
+ " VALUES (@BPPRG, @BPENO, @BPRT1, @BPRTI, @BPRTM, @BPRTD, @BPRTF, @BPRTP, @TRDAT, 'INSERT', @TRUSR)"));
|
|
||||||
cmdInsert.Parameters.Add(Query.NewParameter("BPPRG", DbType.AnsiString));
|
|
||||||
cmdInsert.Parameters.Add(Query.NewParameter("BPENO", DbType.AnsiString));
|
|
||||||
cmdInsert.Parameters.Add(Query.NewParameter("BPRT1", DbType.AnsiString));
|
|
||||||
cmdInsert.Parameters.Add(Query.NewParameter("BPRTI", DbType.AnsiString));
|
|
||||||
cmdInsert.Parameters.Add(Query.NewParameter("BPRTM", DbType.AnsiString));
|
|
||||||
cmdInsert.Parameters.Add(Query.NewParameter("BPRTD", DbType.AnsiString));
|
|
||||||
cmdInsert.Parameters.Add(Query.NewParameter("BPRTF", DbType.AnsiString));
|
|
||||||
cmdInsert.Parameters.Add(Query.NewParameter("BPRTP", DbType.AnsiString));
|
|
||||||
cmdInsert.Parameters.Add(Query.NewParameter("TRDAT", DbType.DateTime));
|
|
||||||
cmdInsert.Parameters.Add(Query.NewParameter("TRUSR", DbType.AnsiString));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cmdUpdate == null)
|
|
||||||
{
|
|
||||||
cmdUpdate = Query.NewCommand(Query.ReplaceParamNamePrefix(
|
|
||||||
"UPDATE " + tblBwcpe
|
|
||||||
+ " SET BPRT1=@BPRT1, BPRTI=@BPRTI, BPRTM=@BPRTM, BPRTD=@BPRTD, BPRTF=@BPRTF,"
|
|
||||||
+ " BPRTP=@BPRTP, TRDAT=@TRDAT, TRMOD='UPDATE', TRUSR=@TRUSR"
|
|
||||||
+ " WHERE BPPRG=@BPPRG AND BPENO=@BPENO"));
|
|
||||||
cmdUpdate.Parameters.Add(Query.NewParameter("BPPRG", DbType.AnsiString));
|
|
||||||
cmdUpdate.Parameters.Add(Query.NewParameter("BPENO", DbType.AnsiString));
|
|
||||||
cmdUpdate.Parameters.Add(Query.NewParameter("BPRT1", DbType.AnsiString));
|
|
||||||
cmdUpdate.Parameters.Add(Query.NewParameter("BPRTI", DbType.AnsiString));
|
|
||||||
cmdUpdate.Parameters.Add(Query.NewParameter("BPRTM", DbType.AnsiString));
|
|
||||||
cmdUpdate.Parameters.Add(Query.NewParameter("BPRTD", DbType.AnsiString));
|
|
||||||
cmdUpdate.Parameters.Add(Query.NewParameter("BPRTF", DbType.AnsiString));
|
|
||||||
cmdUpdate.Parameters.Add(Query.NewParameter("BPRTP", DbType.AnsiString));
|
|
||||||
cmdUpdate.Parameters.Add(Query.NewParameter("TRDAT", DbType.DateTime));
|
|
||||||
cmdUpdate.Parameters.Add(Query.NewParameter("TRUSR", DbType.AnsiString));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cmdSelectRight == null)
|
|
||||||
{
|
|
||||||
cmdSelectRight = Query.NewCommand(Query.ReplaceParamNamePrefix(
|
|
||||||
"SELECT BPRT1, BPRTI, BPRTM, BPRTD, BPRTF, BPRTP "
|
|
||||||
+ " FROM " + tblBwcpe + " WHERE BPPRG=@BPPRG AND BPENO=@BPENO "));
|
|
||||||
cmdSelectRight.Parameters.Add(Query.NewParameter("BPPRG", DbType.AnsiString));
|
|
||||||
cmdSelectRight.Parameters.Add(Query.NewParameter("BPENO", DbType.AnsiString));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public DataTable Select(string bpprg)
|
|
||||||
{
|
|
||||||
PrepareSql();
|
|
||||||
cmdSelect.Parameters["BPPRG"].Value = bpprg;
|
|
||||||
return Query.Select(cmdSelect);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool CheckExist(string bpprg, string bpeno)
|
|
||||||
{
|
|
||||||
PrepareSql();
|
|
||||||
cmdCheckExist.Parameters["BPPRG"].Value = bpprg;
|
|
||||||
cmdCheckExist.Parameters["BPENO"].Value = bpeno;
|
|
||||||
int i = Convert.ToInt16(Query.ExecuteScalar(cmdCheckExist));
|
|
||||||
return !(i == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Insert(string bpprg, string bpeno, string bprt1, string bprti,
|
|
||||||
string bprtm, string bprtd, string bprtf, string bprtp)
|
|
||||||
{
|
|
||||||
PrepareSql();
|
|
||||||
FillParameters(cmdInsert, bpprg, bpeno, bprt1, bprti, bprtm, bprtd, bprtf, bprtp);
|
|
||||||
Query.ExecuteNonQuery(cmdInsert);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Update(string bpprg, string bpeno, string bprt1, string bprti,
|
|
||||||
string bprtm, string bprtd, string bprtf, string bprtp)
|
|
||||||
{
|
|
||||||
PrepareSql();
|
|
||||||
FillParameters(cmdUpdate, bpprg, bpeno, bprt1, bprti, bprtm, bprtd, bprtf, bprtp);
|
|
||||||
Query.ExecuteNonQuery(cmdUpdate);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetAllRight(string bpprg, string bpeno, bool right)
|
|
||||||
{
|
|
||||||
string r = right ? "Y" : "N";
|
|
||||||
if (!CheckExist(bpprg, bpeno))
|
|
||||||
{
|
|
||||||
Insert(bpprg, bpeno, r, r, r, r, r, r);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Update(bpprg, bpeno, r, r, r, r, r, r);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void FillParameters(DbCommand cmd, string bpprg, string bpeno, string bprt1, string bprti,
|
|
||||||
string bprtm, string bprtd, string bprtf, string bprtp)
|
|
||||||
{
|
|
||||||
cmd.Parameters["BPPRG"].Value = bpprg;
|
|
||||||
cmd.Parameters["BPENO"].Value = bpeno;
|
|
||||||
cmd.Parameters["BPRT1"].Value = bprt1 == "Y" || bprt1 == "N" ? bprt1 : "N";
|
|
||||||
cmd.Parameters["BPRTI"].Value = bprti == "Y" || bprti == "N" ? bprti : "N";
|
|
||||||
cmd.Parameters["BPRTM"].Value = bprtm == "Y" || bprtm == "N" ? bprtm : "N";
|
|
||||||
cmd.Parameters["BPRTD"].Value = bprtd == "Y" || bprtd == "N" ? bprtd : "N";
|
|
||||||
cmd.Parameters["BPRTF"].Value = bprtf == "Y" || bprtf == "N" ? bprtf : "N";
|
|
||||||
cmd.Parameters["BPRTP"].Value = bprtp == "Y" || bprtp == "N" ? bprtp : "N";
|
|
||||||
cmd.Parameters["TRDAT"].Value = DateTime.UtcNow.AddHours(8);
|
|
||||||
cmd.Parameters["TRUSR"].Value = WGuard1.CUSR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 取得員工權限<para></para>
|
|
||||||
/// "Y" 表示有權限 "N" 表示無權限 "" 表示未設定
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="bpprg">程式名稱</param>
|
|
||||||
/// <param name="bpeno">員工編號</param>
|
|
||||||
/// <param name="right">權限</param>
|
|
||||||
/// <returns>"Y" 表示有權限 "N" 表示無權限 "" 表示未設定</returns>
|
|
||||||
public string GetRight(string bpprg, string bpeno, WRightName right)
|
|
||||||
{
|
|
||||||
PrepareSql();
|
|
||||||
string funcName = "";
|
|
||||||
switch (right)
|
|
||||||
{
|
|
||||||
case WRightName.Execute:
|
|
||||||
funcName = "BPRT1";
|
|
||||||
break;
|
|
||||||
case WRightName.Insert:
|
|
||||||
funcName = "BPRTI";
|
|
||||||
break;
|
|
||||||
case WRightName.Update:
|
|
||||||
funcName = "BPRTM";
|
|
||||||
break;
|
|
||||||
case WRightName.Delete:
|
|
||||||
funcName = "BPRTD";
|
|
||||||
break;
|
|
||||||
case WRightName.Search:
|
|
||||||
funcName = "BPRTF";
|
|
||||||
break;
|
|
||||||
case WRightName.Print:
|
|
||||||
funcName = "BPRTP";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
cmdSelectRight.Parameters["BPPRG"].Value = bpprg;
|
|
||||||
cmdSelectRight.Parameters["BPENO"].Value = bpeno;
|
|
||||||
DataTable data = Query.Select(cmdSelectRight);
|
|
||||||
|
|
||||||
if (data.Rows.Count != 0)
|
|
||||||
{
|
|
||||||
return data.Rows[0][funcName].ToString();
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum WRightName
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 主檔
|
|
||||||
/// </summary>
|
|
||||||
Execute,
|
|
||||||
/// <summary>
|
|
||||||
/// 新增
|
|
||||||
/// </summary>
|
|
||||||
Insert,
|
|
||||||
/// <summary>
|
|
||||||
/// 更正
|
|
||||||
/// </summary>
|
|
||||||
Update,
|
|
||||||
/// <summary>
|
|
||||||
/// 刪除
|
|
||||||
/// </summary>
|
|
||||||
Delete,
|
|
||||||
/// <summary>
|
|
||||||
/// 查詢
|
|
||||||
/// </summary>
|
|
||||||
Search,
|
|
||||||
/// <summary>
|
|
||||||
/// 印表
|
|
||||||
/// </summary>
|
|
||||||
Print
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,206 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
using Wellan.Common;
|
|
||||||
using System.Data;
|
|
||||||
using System.Data.Common;
|
|
||||||
|
|
||||||
namespace Education
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 群組權限
|
|
||||||
/// </summary>
|
|
||||||
public class BWCPG_DAC : DAC
|
|
||||||
{
|
|
||||||
private DbCommand cmdSelect = null;
|
|
||||||
private DbCommand cmdSelectRight = null;
|
|
||||||
private DbCommand cmdCheckExist = null;
|
|
||||||
private DbCommand cmdInsert = null;
|
|
||||||
private DbCommand cmdUpdate = null;
|
|
||||||
|
|
||||||
public BWCPG_DAC()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public BWCPG_DAC(string connectionConfig, string connectionConfigName)
|
|
||||||
: base(connectionConfig, connectionConfigName)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
private void PrepareSql()
|
|
||||||
{
|
|
||||||
EnsureQuery();
|
|
||||||
string tblBwcpg = WGuard1.WCFA("BWCPG");
|
|
||||||
|
|
||||||
if (cmdSelect == null)
|
|
||||||
{
|
|
||||||
cmdSelect = Query.NewCommand(Query.ReplaceParamNamePrefix(
|
|
||||||
"SELECT B.BPPRG AS BPPRG, B.BPGLP AS BPGLP, A.BPGLP AS BBPGLP, A.BPDSP AS BBPDSP, "
|
|
||||||
+ " B.BPRT1 AS BPRT1, B.BPRTI AS BPRTI, B.BPRTM AS BPRTM, B.BPRTD AS BPRTD, "
|
|
||||||
+ " B.BPRTF AS BPRTF, B.BPRTP AS BPRTP, B.TRDAT AS TRDAT, B.TRMOD AS TRMOD, "
|
|
||||||
+ " B.TRUSR AS TRUSR "
|
|
||||||
+ " FROM " + WGuard1.WCFA("BWEG") + " A "
|
|
||||||
+ " LEFT OUTER JOIN " + tblBwcpg + " B ON A.BPGLP=B.BPGLP AND B.BPPRG=@BPPRG "
|
|
||||||
+ " ORDER BY A.BPGLP "));
|
|
||||||
cmdSelect.Parameters.Add(Query.NewParameter("BPPRG", DbType.AnsiString));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cmdCheckExist == null)
|
|
||||||
{
|
|
||||||
cmdCheckExist = Query.NewCommand(Query.ReplaceParamNamePrefix("SELECT COUNT(1) FROM " + tblBwcpg + " WHERE BPPRG=@BPPRG AND BPGLP=@BPGLP"));
|
|
||||||
cmdCheckExist.Parameters.Add(Query.NewParameter("BPPRG", DbType.AnsiString));
|
|
||||||
cmdCheckExist.Parameters.Add(Query.NewParameter("BPGLP", DbType.AnsiString));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cmdInsert == null)
|
|
||||||
{
|
|
||||||
cmdInsert = Query.NewCommand(Query.ReplaceParamNamePrefix(
|
|
||||||
"INSERT INTO " + tblBwcpg + " (BPPRG, BPGLP, BPRT1, BPRTI, BPRTM, BPRTD, BPRTF, BPRTP, TRDAT, TRMOD, TRUSR) "
|
|
||||||
+ " VALUES (@BPPRG, @BPGLP, @BPRT1, @BPRTI, @BPRTM, @BPRTD, @BPRTF, @BPRTP, @TRDAT, 'INSERT', @TRUSR)"));
|
|
||||||
cmdInsert.Parameters.Add(Query.NewParameter("BPPRG", DbType.AnsiString));
|
|
||||||
cmdInsert.Parameters.Add(Query.NewParameter("BPGLP", DbType.AnsiString));
|
|
||||||
cmdInsert.Parameters.Add(Query.NewParameter("BPRT1", DbType.AnsiString));
|
|
||||||
cmdInsert.Parameters.Add(Query.NewParameter("BPRTI", DbType.AnsiString));
|
|
||||||
cmdInsert.Parameters.Add(Query.NewParameter("BPRTM", DbType.AnsiString));
|
|
||||||
cmdInsert.Parameters.Add(Query.NewParameter("BPRTD", DbType.AnsiString));
|
|
||||||
cmdInsert.Parameters.Add(Query.NewParameter("BPRTF", DbType.AnsiString));
|
|
||||||
cmdInsert.Parameters.Add(Query.NewParameter("BPRTP", DbType.AnsiString));
|
|
||||||
cmdInsert.Parameters.Add(Query.NewParameter("TRDAT", DbType.DateTime));
|
|
||||||
cmdInsert.Parameters.Add(Query.NewParameter("TRUSR", DbType.AnsiString));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cmdUpdate == null)
|
|
||||||
{
|
|
||||||
cmdUpdate = Query.NewCommand(Query.ReplaceParamNamePrefix(
|
|
||||||
"UPDATE " + tblBwcpg
|
|
||||||
+ " SET BPRT1=@BPRT1, BPRTI=@BPRTI, BPRTM=@BPRTM, BPRTD=@BPRTD, BPRTF=@BPRTF,"
|
|
||||||
+ " BPRTP=@BPRTP, TRDAT=@TRDAT, TRMOD='UPDATE', TRUSR=@TRUSR"
|
|
||||||
+ " WHERE BPPRG=@BPPRG AND BPGLP=@BPGLP"));
|
|
||||||
cmdUpdate.Parameters.Add(Query.NewParameter("BPPRG", DbType.AnsiString));
|
|
||||||
cmdUpdate.Parameters.Add(Query.NewParameter("BPGLP", DbType.AnsiString));
|
|
||||||
cmdUpdate.Parameters.Add(Query.NewParameter("BPRT1", DbType.AnsiString));
|
|
||||||
cmdUpdate.Parameters.Add(Query.NewParameter("BPRTI", DbType.AnsiString));
|
|
||||||
cmdUpdate.Parameters.Add(Query.NewParameter("BPRTM", DbType.AnsiString));
|
|
||||||
cmdUpdate.Parameters.Add(Query.NewParameter("BPRTD", DbType.AnsiString));
|
|
||||||
cmdUpdate.Parameters.Add(Query.NewParameter("BPRTF", DbType.AnsiString));
|
|
||||||
cmdUpdate.Parameters.Add(Query.NewParameter("BPRTP", DbType.AnsiString));
|
|
||||||
cmdUpdate.Parameters.Add(Query.NewParameter("TRDAT", DbType.DateTime));
|
|
||||||
cmdUpdate.Parameters.Add(Query.NewParameter("TRUSR", DbType.AnsiString));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cmdSelectRight == null)
|
|
||||||
{
|
|
||||||
cmdSelectRight = Query.NewCommand(Query.ReplaceParamNamePrefix(
|
|
||||||
"SELECT BPRT1, BPRTI, BPRTM, BPRTD, BPRTF, BPRTP "
|
|
||||||
+ " FROM " + tblBwcpg + " WHERE BPPRG=@BPPRG AND BPGLP=@BPGLP "));
|
|
||||||
cmdSelectRight.Parameters.Add(Query.NewParameter("BPPRG", DbType.AnsiString));
|
|
||||||
cmdSelectRight.Parameters.Add(Query.NewParameter("BPGLP", DbType.AnsiString));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public DataTable Select(string bpprg)
|
|
||||||
{
|
|
||||||
PrepareSql();
|
|
||||||
cmdSelect.Parameters["BPPRG"].Value = bpprg;
|
|
||||||
return Query.Select(cmdSelect);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool CheckExist(string bpprg, string bpglp)
|
|
||||||
{
|
|
||||||
PrepareSql();
|
|
||||||
cmdCheckExist.Parameters["BPPRG"].Value = bpprg;
|
|
||||||
cmdCheckExist.Parameters["BPGLP"].Value = bpglp;
|
|
||||||
int i = Convert.ToInt16(Query.ExecuteScalar(cmdCheckExist));
|
|
||||||
return i != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Insert(string bpprg, string bpglp, string bprt1, string bprti,
|
|
||||||
string bprtm, string bprtd, string bprtf, string bprtp)
|
|
||||||
{
|
|
||||||
PrepareSql();
|
|
||||||
FillParameters(cmdInsert, bpprg, bpglp, bprt1, bprti, bprtm, bprtd, bprtf, bprtp);
|
|
||||||
Query.ExecuteNonQuery(cmdInsert);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Update(string bpprg, string bpglp, string bprt1, string bprti,
|
|
||||||
string bprtm, string bprtd, string bprtf, string bprtp)
|
|
||||||
{
|
|
||||||
PrepareSql();
|
|
||||||
FillParameters(cmdUpdate, bpprg, bpglp, bprt1, bprti, bprtm, bprtd, bprtf, bprtp);
|
|
||||||
Query.ExecuteNonQuery(cmdUpdate);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetAllRight(string bpprg, string bpglp, bool right)
|
|
||||||
{
|
|
||||||
string r = right ? "Y" : "N";
|
|
||||||
if (!CheckExist(bpprg, bpglp))
|
|
||||||
{
|
|
||||||
Insert(bpprg, bpglp, r, r, r, r, r, r);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Update(bpprg, bpglp, r, r, r, r, r, r);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void FillParameters(DbCommand cmd, string bpprg, string bpglp, string bprt1, string bprti,
|
|
||||||
string bprtm, string bprtd, string bprtf, string bprtp)
|
|
||||||
{
|
|
||||||
cmd.Parameters["BPPRG"].Value = bpprg;
|
|
||||||
cmd.Parameters["BPGLP"].Value = bpglp;
|
|
||||||
cmd.Parameters["BPRT1"].Value = bprt1 == "Y" || bprt1 == "N" ? bprt1 : "N";
|
|
||||||
cmd.Parameters["BPRTI"].Value = bprti == "Y" || bprti == "N" ? bprti : "N";
|
|
||||||
cmd.Parameters["BPRTM"].Value = bprtm == "Y" || bprtm == "N" ? bprtm : "N";
|
|
||||||
cmd.Parameters["BPRTD"].Value = bprtd == "Y" || bprtd == "N" ? bprtd : "N";
|
|
||||||
cmd.Parameters["BPRTF"].Value = bprtf == "Y" || bprtf == "N" ? bprtf : "N";
|
|
||||||
cmd.Parameters["BPRTP"].Value = bprtp == "Y" || bprtp == "N" ? bprtp : "N";
|
|
||||||
cmd.Parameters["TRDAT"].Value = DateTime.UtcNow.AddHours(8);
|
|
||||||
cmd.Parameters["TRUSR"].Value = WGuard1.CUSR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 取得群組權限<para></para>
|
|
||||||
/// "Y" 表示有權限 "N" 表示無權限 "" 表示未設定
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="bpprg">程式名稱</param>
|
|
||||||
/// <param name="bpglp">群組編號</param>
|
|
||||||
/// <param name="right">權限</param>
|
|
||||||
/// <returns>"Y" 表示有權限 "N" 表示無權限 "" 表示未設定</returns>
|
|
||||||
public string GetRight(string bpprg, string bpglp, WRightName right)
|
|
||||||
{
|
|
||||||
PrepareSql();
|
|
||||||
string funcName = "";
|
|
||||||
switch (right)
|
|
||||||
{
|
|
||||||
case WRightName.Execute:
|
|
||||||
funcName = "BPRT1";
|
|
||||||
break;
|
|
||||||
case WRightName.Insert:
|
|
||||||
funcName = "BPRTI";
|
|
||||||
break;
|
|
||||||
case WRightName.Update:
|
|
||||||
funcName = "BPRTM";
|
|
||||||
break;
|
|
||||||
case WRightName.Delete:
|
|
||||||
funcName = "BPRTD";
|
|
||||||
break;
|
|
||||||
case WRightName.Search:
|
|
||||||
funcName = "BPRTF";
|
|
||||||
break;
|
|
||||||
case WRightName.Print:
|
|
||||||
funcName = "BPRTP";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
cmdSelectRight.Parameters["BPPRG"].Value = bpprg;
|
|
||||||
cmdSelectRight.Parameters["BPGLP"].Value = bpglp;
|
|
||||||
DataTable data = Query.Select(cmdSelectRight);
|
|
||||||
|
|
||||||
if (data.Rows.Count != 0)
|
|
||||||
{
|
|
||||||
return data.Rows[0][funcName].ToString();
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,215 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
using System.Data;
|
|
||||||
using System.Data.Common;
|
|
||||||
using Wellan.Common;
|
|
||||||
|
|
||||||
namespace Education
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 員工群組
|
|
||||||
/// </summary>
|
|
||||||
public class BWEH_DAC : DAC
|
|
||||||
{
|
|
||||||
DbCommand cmdInsert = null;
|
|
||||||
DbCommand cmdDelete = null;
|
|
||||||
|
|
||||||
public BWEH_DAC()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public BWEH_DAC(string connectionConfig, string connectionConfigName)
|
|
||||||
: base(connectionConfig, connectionConfigName)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
private void PrepareSql()
|
|
||||||
{
|
|
||||||
EnsureQuery();
|
|
||||||
|
|
||||||
if (cmdInsert == null)
|
|
||||||
{
|
|
||||||
cmdInsert = Query.NewCommand("INSERT INTO " + WGuard1.WCFA("BWEH") + " (BPGLP, BPENO) VALUES (@BPGLP, @BPENO)");
|
|
||||||
cmdInsert.Parameters.Add(Query.NewParameter("BPGLP", DbType.String));
|
|
||||||
cmdInsert.Parameters.Add(Query.NewParameter("BPENO", DbType.String));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cmdDelete == null)
|
|
||||||
{
|
|
||||||
cmdDelete = Query.NewCommand("DELETE FROM " + WGuard1.WCFA("BWEH") + " WHERE BPGLP=@BPGLP AND BPENO=@BPENO");
|
|
||||||
cmdDelete.Parameters.Add(Query.NewParameter("BPGLP", DbType.String));
|
|
||||||
cmdDelete.Parameters.Add(Query.NewParameter("BPENO", DbType.String));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SelectByBpglp(string bpglp, out DataTable inGroup, out DataTable outGroup)
|
|
||||||
{
|
|
||||||
PrepareSql();
|
|
||||||
inGroup = Query.Select(
|
|
||||||
"SELECT E.BPENO AS BPENO, E.BPNME AS BPNME "
|
|
||||||
+ " FROM " + WGuard1.WCFA("BPSN") + " E," + WGuard1.WCFA("BWEH") + " G"
|
|
||||||
+ " WHERE G.BPENO=E.BPENO AND G.BPGLP='" + bpglp +"' "
|
|
||||||
+ " AND E.BPEDY IS NULL "
|
|
||||||
+ " ORDER BY E.BPENO ");
|
|
||||||
|
|
||||||
outGroup = Query.Select(
|
|
||||||
"SELECT BPENO, BPNME FROM " + WGuard1.WCFA("BPSN")
|
|
||||||
+ " WHERE BPENO<>' ' "
|
|
||||||
+ " AND BPEDY IS NULL "
|
|
||||||
+ " AND BPENO NOT IN (SELECT E.BPENO AS BPENO "
|
|
||||||
+ " FROM " + WGuard1.WCFA("BPSN") + " E," + WGuard1.WCFA("BWEH") + " G"
|
|
||||||
+ " WHERE G.BPENO=E.BPENO AND G.BPGLP='" + bpglp + "' "
|
|
||||||
+ " AND E.BPEDY IS NULL ) "
|
|
||||||
+ " ORDER BY BPENO");
|
|
||||||
}
|
|
||||||
|
|
||||||
public string[] GetBpenoListByBpglp(string bpglp)
|
|
||||||
{
|
|
||||||
PrepareSql();
|
|
||||||
DataTable inGroup = Query.Select(
|
|
||||||
"SELECT E.BPENO AS BPENO "
|
|
||||||
+ " FROM " + WGuard1.WCFA("BPSN") + " E," + WGuard1.WCFA("BWEH") + " G"
|
|
||||||
+ " WHERE G.BPENO=E.BPENO AND G.BPGLP='" + bpglp + "' "
|
|
||||||
+ " AND E.BPEDY IS NULL "
|
|
||||||
+ " ORDER BY E.BPENO ");
|
|
||||||
|
|
||||||
if (inGroup.Rows.Count == 0)
|
|
||||||
return new string[0];
|
|
||||||
else
|
|
||||||
{
|
|
||||||
string[] result = new string[inGroup.Rows.Count];
|
|
||||||
for (int i = 0; i < inGroup.Rows.Count; i++)
|
|
||||||
{
|
|
||||||
result[i] = inGroup.Rows[i][0].ToString();
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void UpdateByBpglp(string bpglp, DataTable updateTable)
|
|
||||||
{
|
|
||||||
PrepareSql();
|
|
||||||
DbConnection conn = Query.NewConnection();
|
|
||||||
cmdDelete.Connection = conn;
|
|
||||||
cmdInsert.Connection = conn;
|
|
||||||
conn.Open();
|
|
||||||
|
|
||||||
DbTransaction tran = conn.BeginTransaction();
|
|
||||||
cmdDelete.Transaction = tran;
|
|
||||||
cmdInsert.Transaction = tran;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
foreach (DataRow row in updateTable.Rows)
|
|
||||||
{
|
|
||||||
if (row.RowState == DataRowState.Added)
|
|
||||||
{
|
|
||||||
cmdInsert.Parameters["BPGLP"].Value = bpglp;
|
|
||||||
cmdInsert.Parameters["BPENO"].Value = row["BPENO", DataRowVersion.Current];
|
|
||||||
cmdInsert.ExecuteNonQuery();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (row.RowState == DataRowState.Deleted)
|
|
||||||
{
|
|
||||||
cmdDelete.Parameters["BPGLP"].Value = bpglp;
|
|
||||||
cmdDelete.Parameters["BPENO"].Value = row["BPENO", DataRowVersion.Original];
|
|
||||||
cmdDelete.ExecuteNonQuery();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tran.Commit();
|
|
||||||
updateTable.AcceptChanges();
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
tran.Rollback();
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
conn.Close();
|
|
||||||
cmdInsert.Dispose();
|
|
||||||
cmdDelete.Dispose();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SelectByBpeno(string bpeno, out DataTable inGroup, out DataTable outGroup)
|
|
||||||
{
|
|
||||||
PrepareSql();
|
|
||||||
inGroup = Query.Select(
|
|
||||||
"SELECT E.BPGLP AS BPGLP, E.BPDSP AS BPDSP "
|
|
||||||
+ " FROM " + WGuard1.WCFA("BWEG") + " E," + WGuard1.WCFA("BWEH") + " G"
|
|
||||||
+ " WHERE E.BPGLP=G.BPGLP AND G.BPENO='" + bpeno + "' "
|
|
||||||
+ " ORDER BY E.BPGLP ");
|
|
||||||
|
|
||||||
outGroup = Query.Select(
|
|
||||||
"SELECT BPGLP, BPDSP FROM " + WGuard1.WCFA("BWEG")
|
|
||||||
+ " WHERE BPGLP NOT IN (SELECT BPGLP FROM " + WGuard1.WCFA("BWEH") + " WHERE BPENO='" + bpeno + "')"
|
|
||||||
+ " ORDER BY BPGLP");
|
|
||||||
}
|
|
||||||
|
|
||||||
public string[] GetBpglpListByBpeno(string bpeno)
|
|
||||||
{
|
|
||||||
PrepareSql();
|
|
||||||
DataTable inGroup = Query.Select(
|
|
||||||
"SELECT E.BPGLP AS BPGLP "
|
|
||||||
+ " FROM " + WGuard1.WCFA("BWEG") + " E," + WGuard1.WCFA("BWEH") + " G"
|
|
||||||
+ " WHERE E.BPGLP=G.BPGLP AND G.BPENO='" + bpeno + "' "
|
|
||||||
+ " ORDER BY E.BPGLP ");
|
|
||||||
|
|
||||||
if (inGroup.Rows.Count == 0)
|
|
||||||
return new string[0];
|
|
||||||
else
|
|
||||||
{
|
|
||||||
string[] result = new string[inGroup.Rows.Count];
|
|
||||||
for (int i = 0; i < inGroup.Rows.Count; i++)
|
|
||||||
{
|
|
||||||
result[i] = inGroup.Rows[i][0].ToString();
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void UpdateByBpeno(string bpeno, DataTable updateTable)
|
|
||||||
{
|
|
||||||
PrepareSql();
|
|
||||||
DbConnection conn = Query.NewConnection();
|
|
||||||
cmdDelete.Connection = conn;
|
|
||||||
cmdInsert.Connection = conn;
|
|
||||||
conn.Open();
|
|
||||||
|
|
||||||
DbTransaction tran = conn.BeginTransaction();
|
|
||||||
cmdDelete.Transaction = tran;
|
|
||||||
cmdInsert.Transaction = tran;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
foreach (DataRow row in updateTable.Rows)
|
|
||||||
{
|
|
||||||
if (row.RowState == DataRowState.Added)
|
|
||||||
{
|
|
||||||
cmdInsert.Parameters["BPENO"].Value = bpeno;
|
|
||||||
cmdInsert.Parameters["BPGLP"].Value = row["BPGLP", DataRowVersion.Current];
|
|
||||||
cmdInsert.ExecuteNonQuery();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (row.RowState == DataRowState.Deleted)
|
|
||||||
{
|
|
||||||
cmdDelete.Parameters["BPENO"].Value = bpeno;
|
|
||||||
cmdDelete.Parameters["BPGLP"].Value = row["BPGLP", DataRowVersion.Original];
|
|
||||||
cmdDelete.ExecuteNonQuery();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tran.Commit();
|
|
||||||
updateTable.AcceptChanges();
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
tran.Rollback();
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
conn.Close();
|
|
||||||
cmdDelete.Dispose();
|
|
||||||
cmdInsert.Dispose();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,139 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Web;
|
|
||||||
using System.Data;
|
|
||||||
using System.Data.Common;
|
|
||||||
using System.ComponentModel;
|
|
||||||
using WebLib;
|
|
||||||
|
|
||||||
namespace Education
|
|
||||||
{
|
|
||||||
[DataObject]
|
|
||||||
public class DAC_BCLS : DAC
|
|
||||||
{
|
|
||||||
public DAC_BCLS()
|
|
||||||
{ }
|
|
||||||
|
|
||||||
public DAC_BCLS(DbConnection conn)
|
|
||||||
: base(conn)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
|
||||||
public NameValueList Get類別資料By大類ForList(string 大類)
|
|
||||||
{
|
|
||||||
NameValueList result = new NameValueList();
|
|
||||||
|
|
||||||
DbCommand cmd = NewCommand();
|
|
||||||
cmd.CommandText = @"SELECT BSCLS, BSSCR FROM BCLS WHERE BSPAR=@BSPAR AND (BLOCK='' OR BLOCK IS NULL)";
|
|
||||||
AddParam(cmd, "BSPAR", 大類);
|
|
||||||
|
|
||||||
bool wantClose;
|
|
||||||
IDataReader reader = ExecuteReader(cmd, out wantClose);
|
|
||||||
try
|
|
||||||
{
|
|
||||||
result.Fill(reader, 1, 0);
|
|
||||||
cmd.Cancel();
|
|
||||||
reader.Close();
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
cmd.Dispose();
|
|
||||||
reader.Dispose();
|
|
||||||
CloseConnection(wantClose);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
|
||||||
public NameValueList Get類別資料By大類ForDropDown(string 大類)
|
|
||||||
{
|
|
||||||
NameValueList result = new NameValueList();
|
|
||||||
result.Add("(請選擇)", DBNull.Value);
|
|
||||||
|
|
||||||
DbCommand cmd = NewCommand();
|
|
||||||
cmd.CommandText = @"SELECT BSCLS, BSSCR FROM BCLS WHERE BSPAR=@BSPAR AND (BLOCK='' OR BLOCK IS NULL)";
|
|
||||||
AddParam(cmd, "BSPAR", 大類);
|
|
||||||
|
|
||||||
bool wantClose;
|
|
||||||
IDataReader reader = ExecuteReader(cmd, out wantClose);
|
|
||||||
try
|
|
||||||
{
|
|
||||||
result.Fill(reader, 1, 0, false);
|
|
||||||
cmd.Cancel();
|
|
||||||
reader.Close();
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
cmd.Dispose();
|
|
||||||
reader.Dispose();
|
|
||||||
CloseConnection(wantClose);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Get類別名稱(object 大類, object 類別編號)
|
|
||||||
{
|
|
||||||
if (大類 == null)
|
|
||||||
大類 = DBNull.Value;
|
|
||||||
if (類別編號 == null)
|
|
||||||
類別編號 = DBNull.Value;
|
|
||||||
|
|
||||||
DbCommand cmd = NewCommand();
|
|
||||||
cmd.CommandText = @"SELECT BSSCR FROM BCLS WHERE BSPAR=@BSPAR AND BSCLS=@BSCLS";
|
|
||||||
AddParam(cmd, "BSPAR", 大類);
|
|
||||||
AddParam(cmd, "BSCLS", 類別編號);
|
|
||||||
string result;
|
|
||||||
ExecuteScalar(cmd, out result);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void UpdateOne(object 大類, object 類別編號, object 類別值)
|
|
||||||
{
|
|
||||||
if (大類 == null)
|
|
||||||
大類 = DBNull.Value;
|
|
||||||
if (類別編號 == null)
|
|
||||||
類別編號 = DBNull.Value;
|
|
||||||
if (類別值 == null)
|
|
||||||
類別值 = DBNull.Value;
|
|
||||||
|
|
||||||
DbCommand cmd = NewCommand();
|
|
||||||
cmd.CommandText = @"SELECT COUNT(1) FROM BCLS WHERE BSPAR=@BSPAR AND BSCLS=@BSCLS";
|
|
||||||
AddParam(cmd, "BSPAR", 大類);
|
|
||||||
AddParam(cmd, "BSCLS", 類別編號);
|
|
||||||
int count;
|
|
||||||
ExecuteScalar(cmd, out count);
|
|
||||||
|
|
||||||
if (count == 0)
|
|
||||||
{
|
|
||||||
cmd.CommandText =
|
|
||||||
@"INSERT INTO BCLS (BSPAR, BSCLS, BSSCR, BLOCK, TRDAT, TRMOD, TRUSR, BSRMK, DB_APPNO)
|
|
||||||
VALUES (@BSPAR, @BSCLS, @BSSCR, '', GETDATE(), 'INSERT', @TRUSR, '', 1)";
|
|
||||||
AddParam(cmd, "BSPAR", 大類);
|
|
||||||
AddParam(cmd, "BSCLS", 類別編號);
|
|
||||||
AddParam(cmd, "BSSCR", 類別值);
|
|
||||||
AddParam(cmd, "TRUSR", CurrentUserId);
|
|
||||||
ExecuteNonQuery(cmd);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cmd.CommandText =
|
|
||||||
@"UPDATE BCLS
|
|
||||||
SET BSSCR = @BSSCR ,
|
|
||||||
TRDAT = GETDATE() ,
|
|
||||||
TRMOD = 'UPDATE' ,
|
|
||||||
TRUSR = @TRUSR ,
|
|
||||||
DB_APPNO = DB_APPNO + 1
|
|
||||||
WHERE BSPAR = @BSPAR
|
|
||||||
AND BSCLS = @BSCLS";
|
|
||||||
|
|
||||||
AddParam(cmd, "BSPAR", 大類);
|
|
||||||
AddParam(cmd, "BSCLS", 類別編號);
|
|
||||||
AddParam(cmd, "BSSCR", 類別值);
|
|
||||||
AddParam(cmd, "TRUSR", CurrentUserId);
|
|
||||||
ExecuteNonQuery(cmd);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,129 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Web;
|
|
||||||
using System.Data;
|
|
||||||
using System.Data.Common;
|
|
||||||
using System.ComponentModel;
|
|
||||||
using WebLib;
|
|
||||||
|
|
||||||
namespace Education
|
|
||||||
{
|
|
||||||
[DataObject]
|
|
||||||
public class DAC_BPAA: DAC
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 取得指定年度專案計畫代號與名稱,不含總公司
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="year">指定年度</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public DataTable GetBpaa(int year)
|
|
||||||
{
|
|
||||||
DbCommand cmd = NewCommand();
|
|
||||||
cmd.CommandText =
|
|
||||||
@"SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM
|
|
||||||
FROM BPAA WHERE (BPYER=@BPYER) AND (BPCSD IS NULL) AND (BPPYN <> '000000001') AND (BPPYN <> '103JYB00001') AND (BPPYN <> '103TYB00001')
|
|
||||||
ORDER BY BPPYN";
|
|
||||||
AddParam(cmd, "BPYER", year - PublicVariable.CY11);
|
|
||||||
return Select(cmd);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 取得所有年度專案計畫代號與名稱,含總公司
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
public DataTable GetBpaaWithTY()
|
|
||||||
{
|
|
||||||
DbCommand cmd = NewCommand();
|
|
||||||
cmd.CommandText =
|
|
||||||
@"SELECT '000000001' BPPYN, '【非專案人員】' BPPYM
|
|
||||||
UNION
|
|
||||||
SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM
|
|
||||||
FROM BPAA WHERE (BPCSD IS NULL) AND (BPPYN <> '000000001') AND (BPPYN <> '103JYB00001') AND (BPPYN <> '103TYB00001') AND (BPPYN <> '102JYB00001') AND (BPPYN <> '102TYB00001')
|
|
||||||
UNION
|
|
||||||
SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM
|
|
||||||
FROM BPAA WHERE (BPCSD IS NULL) AND (BPPYN = '103JYB00001' OR BPPYN = '103TYB00001')
|
|
||||||
ORDER BY BPPYN";
|
|
||||||
return Select(cmd);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 取得所有年度專案計畫代號與名稱,含總公司,並加上一個空項目
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
public DataTable GetBpaaWithTYPlusNone()
|
|
||||||
{
|
|
||||||
DbCommand cmd = NewCommand();
|
|
||||||
cmd.CommandText =
|
|
||||||
@"SELECT '' BPPYN, '【全部】' BPPYM
|
|
||||||
UNION
|
|
||||||
SELECT '000000001' BPPYN, '【非專案人員】' BPPYM
|
|
||||||
UNION
|
|
||||||
SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM
|
|
||||||
FROM BPAA WHERE (BPCSD IS NULL) AND (BPPYN <> '000000001') AND (BPPYN <> '103JYB00001') AND (BPPYN <> '103TYB00001') AND (BPPYN <> '103JYB00001') AND (BPPYN <> '103TYB00001')
|
|
||||||
UNION
|
|
||||||
SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM
|
|
||||||
FROM BPAA WHERE (BPCSD IS NULL) AND (BPPYN = '103JYB00001' OR BPPYN = '103TYB00001')
|
|
||||||
ORDER BY BPPYN";
|
|
||||||
return Select(cmd);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 取得指定年度專案計畫代號與名稱,含總公司
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="year">指定年度</param>
|
|
||||||
/// <param name="companyID">公司別</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public DataTable GetBpaaWithTY(int year, string companyID)
|
|
||||||
{
|
|
||||||
DbCommand cmd = NewCommand();
|
|
||||||
cmd.CommandText =
|
|
||||||
@"SELECT '000000001' AS BPPYN, '【非專案人員】' AS BPPYM
|
|
||||||
UNION
|
|
||||||
SELECT BPPYN, BPPYM FROM
|
|
||||||
(
|
|
||||||
SELECT BPPYN,
|
|
||||||
ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM AS BPPYM,
|
|
||||||
(SELECT TOP 1 BPCPY FROM BPRJ WHERE BPRJ.BPPNM=BPAA.BPPNM) AS BPCPY
|
|
||||||
FROM BPAA WHERE (BPYER=@BPYER) AND (BPPYN <> '000000001') AND (BPPYN <> '103JYB00001') AND (BPPYN <> '103TYB00001') AND (BPPYN <> '102JYB00001') AND (BPPYN <> '102TYB00001')
|
|
||||||
UNION
|
|
||||||
SELECT BPPYN,
|
|
||||||
ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM AS BPPYM,
|
|
||||||
(SELECT TOP 1 BPCPY FROM BPRJ WHERE BPRJ.BPPNM=BPAA.BPPNM) AS BPCPY
|
|
||||||
FROM BPAA WHERE (BPPYN = '103JYB00001') OR (BPPYN = '103TYB00001')
|
|
||||||
) AS TMP1 WHERE BPCPY=@BPCPY
|
|
||||||
ORDER BY BPPYN";
|
|
||||||
|
|
||||||
// @"SELECT '000000001' BPPYN, '【非專案人員】' BPPYM
|
|
||||||
// UNION
|
|
||||||
// SELECT BPPYN, '【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】' + BPPYM BPPYM
|
|
||||||
// FROM BPAA WHERE (BPYER=@BPYER) AND (BPPYN <> '000000001')
|
|
||||||
// ORDER BY BPPYN";
|
|
||||||
AddParam(cmd, "BPYER", year);
|
|
||||||
AddParam(cmd, "BPCPY", companyID);
|
|
||||||
return Select(cmd);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 取得指定年度專案計畫代號與名稱,含總公司,並加上一個空項目
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="year">指定年度</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public DataTable GetBpaaWithTYPlusNone(int year)
|
|
||||||
{
|
|
||||||
DbCommand cmd = NewCommand();
|
|
||||||
cmd.CommandText =
|
|
||||||
@"SELECT '' BPPYN, '【全部】' BPPYM
|
|
||||||
UNION
|
|
||||||
SELECT '000000001' BPPYN, '【非專案人員】' BPPYM
|
|
||||||
UNION
|
|
||||||
SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM
|
|
||||||
FROM BPAA WHERE (BPYER=@BPYER) AND (BPPYN <> '000000001') AND (BPPYN <> '103JYB00001') AND (BPPYN <> '103TYB00001') AND (BPPYN <> '102JYB00001') AND (BPPYN <> '102TYB00001')
|
|
||||||
UNION
|
|
||||||
SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM
|
|
||||||
FROM BPAA WHERE (BPPYN = '103JYB00001' OR BPPYN = '103TYB00001')
|
|
||||||
ORDER BY BPPYN";
|
|
||||||
AddParam(cmd, "BPYER", year - PublicVariable.CY11);
|
|
||||||
return Select(cmd);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,124 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Web;
|
|
||||||
using System.Data;
|
|
||||||
using System.Data.Common;
|
|
||||||
using System.ComponentModel;
|
|
||||||
using WebLib;
|
|
||||||
|
|
||||||
namespace Education
|
|
||||||
{
|
|
||||||
[DataObject]
|
|
||||||
public class DAC_BPSN : DAC
|
|
||||||
{
|
|
||||||
public DAC_BPSN()
|
|
||||||
{ }
|
|
||||||
|
|
||||||
public DAC_BPSN(DbConnection conn)
|
|
||||||
: base(conn)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
public string Get員工姓名(object BPENO)
|
|
||||||
{
|
|
||||||
if (BPENO == null)
|
|
||||||
BPENO = DBNull.Value;
|
|
||||||
|
|
||||||
DbCommand cmd = NewCommand();
|
|
||||||
cmd.CommandText = @"SELECT BPNME FROM BPSNView WHERE BPENO=@BPENO";
|
|
||||||
AddParam(cmd, "BPENO", BPENO);
|
|
||||||
string result;
|
|
||||||
ExecuteScalar(cmd, out result);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Get電子郵件(object BPENO)
|
|
||||||
{
|
|
||||||
if (BPENO == null)
|
|
||||||
BPENO = DBNull.Value;
|
|
||||||
|
|
||||||
DbCommand cmd = NewCommand();
|
|
||||||
cmd.CommandText = @"SELECT BPEML FROM BPSNView WHERE BPENO=@BPENO";
|
|
||||||
AddParam(cmd, "BPENO", BPENO);
|
|
||||||
string result;
|
|
||||||
ExecuteScalar(cmd, out result);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Get公司電話(object BPENO)
|
|
||||||
{
|
|
||||||
if (BPENO == null)
|
|
||||||
BPENO = DBNull.Value;
|
|
||||||
|
|
||||||
DbCommand cmd = NewCommand();
|
|
||||||
cmd.CommandText = @"SELECT BPOTL FROM BPSNView WHERE BPENO=@BPENO";
|
|
||||||
AddParam(cmd, "BPENO", BPENO);
|
|
||||||
string result;
|
|
||||||
ExecuteScalar(cmd, out result);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool Is管理群組(object BPENO)
|
|
||||||
{
|
|
||||||
if (BPENO == null)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
DbCommand cmd = NewCommand();
|
|
||||||
cmd.CommandText =
|
|
||||||
String.Format(@"SELECT COUNT(1) FROM BWEH WHERE BPENO=@BPENO AND BPGLP IN ({0})", PublicVariable.ManagerGroup);
|
|
||||||
AddParam(cmd, "BPENO", BPENO);
|
|
||||||
int i;
|
|
||||||
ExecuteScalar(cmd, out i);
|
|
||||||
return i > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool Is承辦人群組(object BPENO)
|
|
||||||
{
|
|
||||||
if (BPENO == null)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
DbCommand cmd = NewCommand();
|
|
||||||
cmd.CommandText =
|
|
||||||
String.Format(@"SELECT COUNT(1) FROM BWEH WHERE BPENO=@BPENO AND BPGLP IN ({0})", PublicVariable.WorkerGroup);
|
|
||||||
AddParam(cmd, "BPENO", BPENO);
|
|
||||||
int i;
|
|
||||||
ExecuteScalar(cmd, out i);
|
|
||||||
return i > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
|
||||||
public DataTable Select(string BPENO, string BPNME)
|
|
||||||
{
|
|
||||||
DbCommand cmdSelect = NewCommand();
|
|
||||||
cmdSelect.CommandText =
|
|
||||||
@"select C.BPENO AS 員工編號, C.BPNME as 員工姓名, C.BPEML as 電子郵件,
|
|
||||||
D.RAPYN AS 計畫年度編號, ISNULL('【' + I.BSSCR + '】', '') + E.BPPYM AS 計畫年度名稱,
|
|
||||||
D.RABRH AS 站別編號, F.BSSCR AS 站別名稱,
|
|
||||||
D.RAJNO AS 職務編號, G.BPJME AS 職務名稱,
|
|
||||||
D.RACNO AS 等級編號, H.BPCME AS 等級名稱
|
|
||||||
from BPSNView C
|
|
||||||
left outer join RASN D on C.BPENO = D.RANUM and D.RAEDT is NULL
|
|
||||||
left outer join BPAA E on D.RAPYN = E.BPPYN
|
|
||||||
left outer join BCLS F on F.BSCLS = D.RABRH and F.BSPAR = 'BPSNBRH'
|
|
||||||
left outer join BPJA G on G.BPPYN = D.RAPYN and G.BPJNO = D.RAJNO
|
|
||||||
left outer join BPJB H on H.BPPYN = D.RAPYN and H.BPJNO = D.RAJNO and H.BPCNO = D.RACNO
|
|
||||||
left outer join BCLS I on I.BSCLS = SUBSTRING(D.RAPYN, LEN(D.RAPYN)-5,1) and I.BSPAR = 'BCUSZON'
|
|
||||||
where C.BPEDY is null ";
|
|
||||||
|
|
||||||
if (BPENO != null && BPENO.Length > 0)
|
|
||||||
{
|
|
||||||
cmdSelect.CommandText += " and C.BPENO like @BPENO ";
|
|
||||||
AddParam(cmdSelect, "BPENO", BPENO + "%");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (BPNME != null && BPNME.Length > 0)
|
|
||||||
{
|
|
||||||
cmdSelect.CommandText += " and C.BPNME like @BPNME ";
|
|
||||||
AddParam(cmdSelect, "BPNME", BPNME + "%");
|
|
||||||
}
|
|
||||||
|
|
||||||
cmdSelect.CommandText += " order by C.BPENO";
|
|
||||||
return Select(cmdSelect);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Data.Common;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Web;
|
|
||||||
using WebLib;
|
|
||||||
|
|
||||||
namespace Education
|
|
||||||
{
|
|
||||||
public class DAC_BRTE : DAC
|
|
||||||
{
|
|
||||||
public DAC_BRTE()
|
|
||||||
{ }
|
|
||||||
|
|
||||||
public DAC_BRTE(DbConnection conn)
|
|
||||||
: base(conn)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
private decimal GetValue(string brtyp)
|
|
||||||
{
|
|
||||||
DbCommand cmd = NewCommand();
|
|
||||||
cmd.CommandText = @"SELECT TOP 1 BRRTE FROM BRTE WHERE BRTYP=@BRTYP AND BRSDT <= @TODAY ORDER BY BRSDT DESC";
|
|
||||||
AddParam(cmd, "BRTYP", brtyp);
|
|
||||||
AddParam(cmd, "TODAY", PublicVariable.TaiwanNow.Date);
|
|
||||||
ExecuteScalar<decimal>(cmd, out decimal value);
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public decimal 領據執行業務所得課稅門檻
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return GetValue("領據執行業務所得課稅門檻");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public decimal 領據薪資課稅門檻
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return GetValue("領據薪資課稅門檻");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public decimal 領據基本工資
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return GetValue("領據基本工資");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public decimal 領據執行業務所得稅率
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return GetValue("領據執行業務所得稅率");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public decimal 領據薪資稅率
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return GetValue("領據薪資稅率");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,92 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Data.Common;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Web;
|
|
||||||
using WebLib;
|
|
||||||
|
|
||||||
namespace Education
|
|
||||||
{
|
|
||||||
public class DAC_BWEX: DAC
|
|
||||||
{
|
|
||||||
private const string _tableName = "BWEX";
|
|
||||||
private const string 領據關帳年月 = "領據關帳年月";
|
|
||||||
|
|
||||||
public DAC_BWEX()
|
|
||||||
{ }
|
|
||||||
|
|
||||||
public DAC_BWEX(DbConnection conn)
|
|
||||||
: base(conn)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 讀取設定
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="bsnum"></param>
|
|
||||||
/// <param name="bsitm"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public string ReadSetting(string bsnum, int bsitm)
|
|
||||||
{
|
|
||||||
var cmd = NewCommand($"SELECT BSNAM FROM {_tableName} WHERE BSNUM=@BSNUM AND BSITM=@BSITM");
|
|
||||||
AddParam(cmd, "BSNUM", bsnum);
|
|
||||||
AddParam(cmd, "BSITM", $"{bsitm,4}");
|
|
||||||
if (ExecuteScalar<string>(cmd, out string value))
|
|
||||||
{
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 寫入設定
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="bsnum"></param>
|
|
||||||
/// <param name="bsitm"></param>
|
|
||||||
/// <param name="bsnam"></param>
|
|
||||||
public void WriteSetting(string bsnum, int bsitm, string bsnam)
|
|
||||||
{
|
|
||||||
var cmdRead = NewCommand($"SELECT COUNT(*) FROM {_tableName} WHERE BSNUM=@BSNUM AND BSITM=@BSITM");
|
|
||||||
AddParam(cmdRead, "BSNUM", bsnum);
|
|
||||||
AddParam(cmdRead, "BSITM", $"{bsitm,4}");
|
|
||||||
ExecuteScalar(cmdRead, out int count);
|
|
||||||
|
|
||||||
if (count > 0)
|
|
||||||
{
|
|
||||||
var cmd = NewCommand($"UPDATE {_tableName} SET BSNAM=@BSNAM, TRDAT=@TRDAT, TRMOD=@TRMOD, TRUSR=@TRUSR WHERE BSNUM=@BSNUM AND BSITM=@BSITM");
|
|
||||||
AddParam(cmd, "BSNAM", bsnam);
|
|
||||||
AddParam(cmd, "TRDAT", DateTime.Now);
|
|
||||||
AddParam(cmd, "TRMOD", "UPDATE");
|
|
||||||
AddParam(cmd, "TRUSR", CurrentUserId);
|
|
||||||
AddParam(cmd, "BSNUM", bsnum);
|
|
||||||
AddParam(cmd, "BSITM", $"{bsitm,4}");
|
|
||||||
ExecuteNonQuery(cmd);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var cmd = NewCommand($"INSERT INTO {_tableName} (BSNUM, BSITM, BSNAM, TRDAT, TRMOD, TRUSR) VALUES (@BSNUM, @BSITM, @BSNAM, @TRDAT, @TRMOD, @TRUSR)");
|
|
||||||
AddParam(cmd, "BSNUM", bsnum);
|
|
||||||
AddParam(cmd, "BSITM", $"{bsitm,4}");
|
|
||||||
AddParam(cmd, "BSNAM", bsnam);
|
|
||||||
AddParam(cmd, "TRDAT", DateTime.Now);
|
|
||||||
AddParam(cmd, "TRMOD", "INSERT");
|
|
||||||
AddParam(cmd, "TRUSR", CurrentUserId);
|
|
||||||
ExecuteNonQuery(cmd);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Read領據關帳年月
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
using (var conn = DAC.NewConnection())
|
|
||||||
{
|
|
||||||
var daoBWEX = new DAC_BWEX(conn);
|
|
||||||
return daoBWEX.ReadSetting(領據關帳年月, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,83 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Web;
|
|
||||||
using System.Data;
|
|
||||||
using System.Data.Common;
|
|
||||||
using System.ComponentModel;
|
|
||||||
using WebLib;
|
|
||||||
|
|
||||||
namespace Education
|
|
||||||
{
|
|
||||||
[DataObject]
|
|
||||||
public class DAC_RASN : DAC
|
|
||||||
{
|
|
||||||
public DAC_RASN()
|
|
||||||
{ }
|
|
||||||
|
|
||||||
public DAC_RASN(DbConnection conn)
|
|
||||||
: base(conn)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
/*
|
|
||||||
SELECT B.BPENO AS 員工編號, B.BPENO + ' ' + B.BPNME AS 員工姓名,
|
|
||||||
ISNULL(D.RPCPY, C.RPCPY) AS 公司別,
|
|
||||||
A.RAPYN AS 專案編號, F.BPPYM AS 專案名稱,
|
|
||||||
A.RAJNO AS 職稱編號, E.BPJME AS 職稱名稱
|
|
||||||
FROM BPSN B
|
|
||||||
INNER JOIN RASN A ON A.RANUM=B.BPENO AND B.BPEDY IS NULL -- 派遣紀錄
|
|
||||||
LEFT JOIN RPIR C ON A.RANUM=C.RPENO AND C.RPREN=(SELECT MAX(RPREN) FROM RPIR WHERE RPENO=A.RANUM) -- 勞健保紀錄
|
|
||||||
LEFT JOIN RPIB D ON C.RPREN=D.RPREN AND D.RPITM=(SELECT MAX(RPITM) FROM RPIB WHERE RPREN=D.RPREN) -- 勞健保異動紀錄
|
|
||||||
LEFT JOIN BPJA E ON E.BPPYN=A.RAPYN AND E.BPJNO=A.RAJNO -- 專案年度職稱
|
|
||||||
LEFT JOIN BPAA F ON F.BPPYN=A.RAPYN -- 專案年度接單
|
|
||||||
WHERE RAEDT IS NULL
|
|
||||||
ORDER BY BPENO
|
|
||||||
*/
|
|
||||||
|
|
||||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
|
||||||
public NameValueList Select專案人員(string 專案年度編號, string 公司別)
|
|
||||||
{
|
|
||||||
NameValueList result = new NameValueList();
|
|
||||||
|
|
||||||
DbCommand cmd = NewCommand();
|
|
||||||
cmd.CommandText =
|
|
||||||
@"SELECT 員工編號, 員工姓名 FROM
|
|
||||||
(
|
|
||||||
SELECT A.RANUM AS 員工編號, A.RANUM + ' ' + B.BPNME AS 員工姓名, ISNULL(D.RPCPY, C.RPCPY) AS 公司別
|
|
||||||
FROM RASN A
|
|
||||||
INNER JOIN BPSNView B ON A.RANUM=B.BPENO AND B.BPEDY IS NULL
|
|
||||||
LEFT JOIN RPIR C ON A.RANUM=C.RPENO AND C.RPREN=(SELECT MAX(RPREN) FROM RPIR WHERE RPENO=A.RANUM)
|
|
||||||
LEFT JOIN RPIB D ON C.RPREN=D.RPREN AND D.RPITM=(SELECT MAX(RPITM) FROM RPIB WHERE RPREN=D.RPREN)
|
|
||||||
WHERE A.RAPYN=@專案年度編號
|
|
||||||
AND RAEDT IS NULL
|
|
||||||
) AS TMP1
|
|
||||||
WHERE 公司別=@公司別
|
|
||||||
ORDER BY 員工編號";
|
|
||||||
|
|
||||||
// @"SELECT A.RANUM AS 員工編號, A.RANUM + ' ' + B.BPNME AS 員工姓名
|
|
||||||
// FROM RASN A
|
|
||||||
// INNER JOIN BPSN B ON A.RANUM=B.BPENO AND B.BPEDY IS NULL
|
|
||||||
// WHERE A.RAPYN=@RAPYN
|
|
||||||
// AND RAEDT IS NULL
|
|
||||||
// ORDER BY A.RANUM";
|
|
||||||
AddParam(cmd, "專案年度編號", 專案年度編號);
|
|
||||||
AddParam(cmd, "公司別", 公司別);
|
|
||||||
|
|
||||||
bool wantClose;
|
|
||||||
IDataReader reader = ExecuteReader(cmd, out wantClose);
|
|
||||||
try
|
|
||||||
{
|
|
||||||
result.Fill(reader, 1, 0);
|
|
||||||
cmd.Cancel();
|
|
||||||
reader.Close();
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
cmd.Dispose();
|
|
||||||
reader.Dispose();
|
|
||||||
CloseConnection(wantClose);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,132 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Data;
|
|
||||||
using System.Data.Common;
|
|
||||||
using WebLib;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Summary description for Login
|
|
||||||
/// </summary>
|
|
||||||
namespace Education
|
|
||||||
{
|
|
||||||
public class LoginBPAP : DAC
|
|
||||||
{
|
|
||||||
private string _userId = "";
|
|
||||||
private string _password = "";
|
|
||||||
private string _userName = "";
|
|
||||||
private string _errMessage = "";
|
|
||||||
private string _userLang = "";
|
|
||||||
private bool _noPassword = false;
|
|
||||||
|
|
||||||
public LoginBPAP()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public string UserId
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _userId;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_userId = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Password
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _password;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_password = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public string UserName
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _userName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public string ErrorMessage
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _errMessage;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool NoPassword
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _noPassword;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public string UserLang
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _userLang;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_userLang = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 取得是否登入成功
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>登入成功與否。若回傳 false,錯誤訊息將儲存在 ErrorMessage 屬性中</returns>
|
|
||||||
public bool GetResult()
|
|
||||||
{
|
|
||||||
DbConnection conn = NewConnection();
|
|
||||||
DbCommand cmd = NewCommand("SELECT BPENO, BPNME, BPPWD FROM BPAP WHERE BPENO=@BPENO");
|
|
||||||
AddParam(cmd, "BPENO", _userId);
|
|
||||||
DataTable rs = Select(cmd);
|
|
||||||
_noPassword = false;
|
|
||||||
|
|
||||||
if (rs.Rows.Count == 0)
|
|
||||||
{
|
|
||||||
_errMessage = "無此使用者代號或是密碼錯誤";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
string pwd1 = GetString(rs.Rows[0]["BPPWD"]);
|
|
||||||
string pwd2 = EncDec.KeyDec(pwd1);
|
|
||||||
|
|
||||||
if (pwd1.CompareTo("\u007f\u007f\u007f\u007f") == 0)
|
|
||||||
{
|
|
||||||
_noPassword = true;
|
|
||||||
pwd2 = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_password.CompareTo(pwd2) != 0)
|
|
||||||
{
|
|
||||||
_errMessage = "無此使用者代號或是密碼錯誤";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
if (rs.Rows[0]["BPEDY"] != DBNull.Value)
|
|
||||||
{
|
|
||||||
_errMessage = "您沒有使用這個系統的權限";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
_errMessage = "";
|
|
||||||
_userName = GetString(rs.Rows[0]["BPNME"]);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,155 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Data;
|
|
||||||
using System.Data.Common;
|
|
||||||
using WebLib;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Summary description for Login
|
|
||||||
/// </summary>
|
|
||||||
namespace Education
|
|
||||||
{
|
|
||||||
public class LoginBPSN : DAC
|
|
||||||
{
|
|
||||||
private string _userId = "";
|
|
||||||
private string _password = "";
|
|
||||||
private string _userName = "";
|
|
||||||
private string _errMessage = "";
|
|
||||||
private string _userLang = "";
|
|
||||||
private bool _noPassword = false;
|
|
||||||
private bool _isManager = false;
|
|
||||||
private bool _isWorker = false;
|
|
||||||
|
|
||||||
public LoginBPSN()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public string UserId
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _userId;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_userId = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Password
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _password;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_password = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public string UserName
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _userName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public string ErrorMessage
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _errMessage;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool NoPassword
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _noPassword;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public string UserLang
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _userLang;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_userLang = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 是否是管理員
|
|
||||||
/// </summary>
|
|
||||||
public bool IsManager
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _isManager;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 是否是承辦人
|
|
||||||
/// </summary>
|
|
||||||
public bool IsWorker
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _isWorker;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 取得是否登入成功
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>登入成功與否。若回傳 false,錯誤訊息將儲存在 ErrorMessage 屬性中</returns>
|
|
||||||
public bool GetResult()
|
|
||||||
{
|
|
||||||
DbCommand cmd = NewCommand("SELECT BPENO, BPNME, BPEDY, BPAWD FROM BPSNView WHERE BPENO=@BPENO");
|
|
||||||
AddParam(cmd, "BPENO", _userId);
|
|
||||||
DataTable rs = Select(cmd);
|
|
||||||
_noPassword = false;
|
|
||||||
|
|
||||||
if (rs.Rows.Count == 0)
|
|
||||||
{
|
|
||||||
_errMessage = "無此使用者代號或是密碼錯誤";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
string pwd1 = GetString(rs.Rows[0]["BPAWD"]);
|
|
||||||
string pwd2 = EncDec.KeyDec(pwd1);
|
|
||||||
|
|
||||||
if (pwd1.CompareTo("\u007f\u007f\u007f\u007f") == 0)
|
|
||||||
{
|
|
||||||
_noPassword = true;
|
|
||||||
pwd2 = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_password.CompareTo(pwd2) != 0)
|
|
||||||
{
|
|
||||||
_errMessage = "無此使用者代號或是密碼錯誤";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rs.Rows[0]["BPEDY"] != DBNull.Value)
|
|
||||||
{
|
|
||||||
_errMessage = "您沒有使用這個系統的權限";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_errMessage = "";
|
|
||||||
_userName = GetString(rs.Rows[0]["BPNME"]);
|
|
||||||
_isManager = new DAC_BPSN(conn).Is管理群組(_userId);
|
|
||||||
_isWorker = new DAC_BPSN(conn).Is承辦人群組(_userId);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Web;
|
|
||||||
using WebLib;
|
|
||||||
|
|
||||||
namespace Education
|
|
||||||
{
|
|
||||||
public class DAC_公司別 : NameValueList
|
|
||||||
{
|
|
||||||
public DAC_公司別()
|
|
||||||
{
|
|
||||||
this.Add("新譽管理有限公司", "TY");
|
|
||||||
this.Add("展譽職涯管理顧問有限公司", "JY");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,897 +0,0 @@
|
|||||||
//
|
|
||||||
// 這個檔案是 場地 資料表的資料存取類別 檔案一
|
|
||||||
// 請不要修改這個檔案,重新產生資料存取類別時,這個檔案會被覆蓋掉
|
|
||||||
//
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
using System.ComponentModel;
|
|
||||||
using System.Data;
|
|
||||||
using System.Data.Common;
|
|
||||||
using System.Transactions;
|
|
||||||
using WebLib;
|
|
||||||
using System.Data.SqlClient;
|
|
||||||
|
|
||||||
namespace Education
|
|
||||||
{
|
|
||||||
///<summary>
|
|
||||||
/// 場地 資料存取類別
|
|
||||||
///</ summary>
|
|
||||||
[DataObject]
|
|
||||||
public partial class DAC_場地 : WebLib.DAC
|
|
||||||
{
|
|
||||||
private string _tableName = "場地";
|
|
||||||
private string _select = "select 編號, 單位名稱, 場地名稱, 場地類型, 價格, 坪數, 容納人數, 地址_郵編, 地址_縣市, 地址_鄉鎮市區, 地址_街道地址, 捷運可到, 捷運分鐘, 公車可到, 公車分鐘, 火車可到, 火車分鐘, 步行可到, 步行分鐘, 設備提供, 聯絡人, 聯絡人電話, 電子郵件, 傳真, 備註, DB_APPNO, DB_CRDAT, DB_CRUSR, DB_TRDAT, DB_TRUSR";
|
|
||||||
private string _insert = "單位名稱, 場地名稱, 場地類型, 價格, 坪數, 容納人數, 地址_郵編, 地址_縣市, 地址_鄉鎮市區, 地址_街道地址, 捷運可到, 捷運分鐘, 公車可到, 公車分鐘, 火車可到, 火車分鐘, 步行可到, 步行分鐘, 設備提供, 聯絡人, 聯絡人電話, 電子郵件, 傳真, 備註, DB_APPNO, DB_CRDAT, DB_CRUSR, DB_TRDAT, DB_TRUSR";
|
|
||||||
private string _insertValue = "@單位名稱, @場地名稱, @場地類型, @價格, @坪數, @容納人數, @地址_郵編, @地址_縣市, @地址_鄉鎮市區, @地址_街道地址, @捷運可到, @捷運分鐘, @公車可到, @公車分鐘, @火車可到, @火車分鐘, @步行可到, @步行分鐘, @設備提供, @聯絡人, @聯絡人電話, @電子郵件, @傳真, @備註, @DB_APPNO, @DB_CRDAT, @DB_CRUSR, @DB_TRDAT, @DB_TRUSR";
|
|
||||||
private string _from = " from 場地 ";
|
|
||||||
private string _where = " where 1=1 ";
|
|
||||||
private string _order = " order by 編號 ";
|
|
||||||
|
|
||||||
public DAC_場地()
|
|
||||||
: base()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public DAC_場地(DbConnection conn)
|
|
||||||
: base(conn)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
|
||||||
public 場地List SelectAll()
|
|
||||||
{
|
|
||||||
場地List result = new 場地List();
|
|
||||||
IDataList list = result as IDataList;
|
|
||||||
DbCommand cmdSelect = NewCommand();
|
|
||||||
cmdSelect.CommandText = _select + _from + _where + _order;
|
|
||||||
Select(cmdSelect, ref list);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
|
||||||
public 場地List SelectOne(int 編號)
|
|
||||||
{
|
|
||||||
場地List result = new 場地List();
|
|
||||||
IDataList list = result as IDataList;
|
|
||||||
DbCommand cmdSelect = NewCommand();
|
|
||||||
cmdSelect.CommandText = _select + _from + _where
|
|
||||||
+ " and 編號 = @編號 "
|
|
||||||
;
|
|
||||||
AddParam(cmdSelect, "編號", 編號);
|
|
||||||
Select(cmdSelect, ref list);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
[DataObjectMethod(DataObjectMethodType.Insert)]
|
|
||||||
public int InsertOne(場地 value)
|
|
||||||
{
|
|
||||||
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required))
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (!BeforeInsertOne(value))
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
DbCommand cmdInsert = NewCommand();
|
|
||||||
cmdInsert.CommandText =
|
|
||||||
"insert into 場地"
|
|
||||||
+ " (" + _insert + ")"
|
|
||||||
+ "values "
|
|
||||||
+ " (" + _insertValue + ");"
|
|
||||||
+ "select @@identity"
|
|
||||||
;
|
|
||||||
AddParam(cmdInsert, "單位名稱", value.單位名稱);
|
|
||||||
AddParam(cmdInsert, "場地名稱", value.場地名稱);
|
|
||||||
AddParam(cmdInsert, "場地類型", value.場地類型);
|
|
||||||
AddParam(cmdInsert, "價格", value.價格);
|
|
||||||
AddParam(cmdInsert, "坪數", value.坪數);
|
|
||||||
AddParam(cmdInsert, "容納人數", value.容納人數);
|
|
||||||
AddParam(cmdInsert, "地址_郵編", value.地址_郵編);
|
|
||||||
AddParam(cmdInsert, "地址_縣市", value.地址_縣市);
|
|
||||||
AddParam(cmdInsert, "地址_鄉鎮市區", value.地址_鄉鎮市區);
|
|
||||||
AddParam(cmdInsert, "地址_街道地址", value.地址_街道地址);
|
|
||||||
AddParam(cmdInsert, "捷運可到", value.捷運可到);
|
|
||||||
AddParam(cmdInsert, "捷運分鐘", value.捷運分鐘);
|
|
||||||
AddParam(cmdInsert, "公車可到", value.公車可到);
|
|
||||||
AddParam(cmdInsert, "公車分鐘", value.公車分鐘);
|
|
||||||
AddParam(cmdInsert, "火車可到", value.火車可到);
|
|
||||||
AddParam(cmdInsert, "火車分鐘", value.火車分鐘);
|
|
||||||
AddParam(cmdInsert, "步行可到", value.步行可到);
|
|
||||||
AddParam(cmdInsert, "步行分鐘", value.步行分鐘);
|
|
||||||
AddParam(cmdInsert, "設備提供", value.設備提供);
|
|
||||||
AddParam(cmdInsert, "聯絡人", value.聯絡人);
|
|
||||||
AddParam(cmdInsert, "聯絡人電話", value.聯絡人電話);
|
|
||||||
AddParam(cmdInsert, "電子郵件", value.電子郵件);
|
|
||||||
AddParam(cmdInsert, "傳真", value.傳真);
|
|
||||||
AddParam(cmdInsert, "備註", value.備註);
|
|
||||||
AddParam(cmdInsert, "DB_APPNO", 1);
|
|
||||||
AddParam(cmdInsert, "DB_CRDAT", DateTime.UtcNow.AddHours(8));
|
|
||||||
AddParam(cmdInsert, "DB_CRUSR", CurrentUserId);
|
|
||||||
AddParam(cmdInsert, "DB_TRDAT", DBNull.Value);
|
|
||||||
AddParam(cmdInsert, "DB_TRUSR", DBNull.Value);
|
|
||||||
int newId;
|
|
||||||
ExecuteScalar(cmdInsert, out newId);
|
|
||||||
AfterInsertOne(value);
|
|
||||||
ts.Complete();
|
|
||||||
return newId;
|
|
||||||
}
|
|
||||||
catch (Exception error)
|
|
||||||
{
|
|
||||||
bool handled;
|
|
||||||
OnInsertOneError(error, out handled);
|
|
||||||
if(!handled)
|
|
||||||
throw error;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[DataObjectMethod(DataObjectMethodType.Update)]
|
|
||||||
public int UpdateOne(場地 value)
|
|
||||||
{
|
|
||||||
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required))
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (!BeforeUpdateOne(value))
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
場地List oldValues = SelectOne(value.編號);
|
|
||||||
if (oldValues.Count == 0 || oldValues[0].DB_APPNO != value.DB_APPNO)
|
|
||||||
{
|
|
||||||
throw new DBConcurrencyException("在更新 \"場地\" 資料表時發生並行例外:找不到要更新的資料列");
|
|
||||||
}
|
|
||||||
DbCommand cmdUpdate = NewCommand();
|
|
||||||
cmdUpdate.CommandText =
|
|
||||||
@"update 場地
|
|
||||||
set
|
|
||||||
單位名稱 = @單位名稱 ,
|
|
||||||
場地名稱 = @場地名稱 ,
|
|
||||||
場地類型 = @場地類型 ,
|
|
||||||
價格 = @價格 ,
|
|
||||||
坪數 = @坪數 ,
|
|
||||||
容納人數 = @容納人數 ,
|
|
||||||
地址_郵編 = @地址_郵編 ,
|
|
||||||
地址_縣市 = @地址_縣市 ,
|
|
||||||
地址_鄉鎮市區 = @地址_鄉鎮市區 ,
|
|
||||||
地址_街道地址 = @地址_街道地址 ,
|
|
||||||
捷運可到 = @捷運可到 ,
|
|
||||||
捷運分鐘 = @捷運分鐘 ,
|
|
||||||
公車可到 = @公車可到 ,
|
|
||||||
公車分鐘 = @公車分鐘 ,
|
|
||||||
火車可到 = @火車可到 ,
|
|
||||||
火車分鐘 = @火車分鐘 ,
|
|
||||||
步行可到 = @步行可到 ,
|
|
||||||
步行分鐘 = @步行分鐘 ,
|
|
||||||
設備提供 = @設備提供 ,
|
|
||||||
聯絡人 = @聯絡人 ,
|
|
||||||
聯絡人電話 = @聯絡人電話 ,
|
|
||||||
電子郵件 = @電子郵件 ,
|
|
||||||
傳真 = @傳真 ,
|
|
||||||
備註 = @備註 ,
|
|
||||||
DB_APPNO = DB_APPNO + 1,
|
|
||||||
DB_TRDAT = @DB_TRDAT,
|
|
||||||
DB_TRUSR = @DB_TRUSR
|
|
||||||
where 1=1
|
|
||||||
and 編號 = @original_編號
|
|
||||||
and DB_APPNO = @original_DB_APPNO
|
|
||||||
";
|
|
||||||
AddParam(cmdUpdate, "單位名稱", value.單位名稱);
|
|
||||||
AddParam(cmdUpdate, "場地名稱", value.場地名稱);
|
|
||||||
AddParam(cmdUpdate, "場地類型", value.場地類型);
|
|
||||||
AddParam(cmdUpdate, "價格", value.價格);
|
|
||||||
AddParam(cmdUpdate, "坪數", value.坪數);
|
|
||||||
AddParam(cmdUpdate, "容納人數", value.容納人數);
|
|
||||||
AddParam(cmdUpdate, "地址_郵編", value.地址_郵編);
|
|
||||||
AddParam(cmdUpdate, "地址_縣市", value.地址_縣市);
|
|
||||||
AddParam(cmdUpdate, "地址_鄉鎮市區", value.地址_鄉鎮市區);
|
|
||||||
AddParam(cmdUpdate, "地址_街道地址", value.地址_街道地址);
|
|
||||||
AddParam(cmdUpdate, "捷運可到", value.捷運可到);
|
|
||||||
AddParam(cmdUpdate, "捷運分鐘", value.捷運分鐘);
|
|
||||||
AddParam(cmdUpdate, "公車可到", value.公車可到);
|
|
||||||
AddParam(cmdUpdate, "公車分鐘", value.公車分鐘);
|
|
||||||
AddParam(cmdUpdate, "火車可到", value.火車可到);
|
|
||||||
AddParam(cmdUpdate, "火車分鐘", value.火車分鐘);
|
|
||||||
AddParam(cmdUpdate, "步行可到", value.步行可到);
|
|
||||||
AddParam(cmdUpdate, "步行分鐘", value.步行分鐘);
|
|
||||||
AddParam(cmdUpdate, "設備提供", value.設備提供);
|
|
||||||
AddParam(cmdUpdate, "聯絡人", value.聯絡人);
|
|
||||||
AddParam(cmdUpdate, "聯絡人電話", value.聯絡人電話);
|
|
||||||
AddParam(cmdUpdate, "電子郵件", value.電子郵件);
|
|
||||||
AddParam(cmdUpdate, "傳真", value.傳真);
|
|
||||||
AddParam(cmdUpdate, "備註", value.備註);
|
|
||||||
AddParam(cmdUpdate, "DB_TRDAT", DateTime.UtcNow.AddHours(8));
|
|
||||||
AddParam(cmdUpdate, "DB_TRUSR", CurrentUserId);
|
|
||||||
AddParam(cmdUpdate, "original_編號", value.編號);
|
|
||||||
AddParam(cmdUpdate, "original_DB_APPNO", value.DB_APPNO);
|
|
||||||
int rowsAffected = ExecuteNonQuery(cmdUpdate);
|
|
||||||
AfterUpdateOne(value);
|
|
||||||
ts.Complete();
|
|
||||||
return rowsAffected;
|
|
||||||
}
|
|
||||||
catch (Exception error)
|
|
||||||
{
|
|
||||||
bool handled;
|
|
||||||
OnUpdateOneError(error, out handled);
|
|
||||||
if(!handled)
|
|
||||||
throw error;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[DataObjectMethod(DataObjectMethodType.Delete)]
|
|
||||||
public int DeleteOne(int 編號, int DB_APPNO)
|
|
||||||
{
|
|
||||||
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required))
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (!BeforeDeleteOne(編號, DB_APPNO))
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
場地List oldValues = SelectOne(編號);
|
|
||||||
if (oldValues.Count == 0 || oldValues[0].DB_APPNO != DB_APPNO)
|
|
||||||
{
|
|
||||||
throw new DBConcurrencyException("在刪除 \"場地\" 資料表時發生並行例外:找不到要刪除的資料列");
|
|
||||||
}
|
|
||||||
DbCommand cmdDelete = NewCommand();
|
|
||||||
cmdDelete.CommandText =
|
|
||||||
@"delete from 場地
|
|
||||||
where 1=1
|
|
||||||
and 編號 = @編號
|
|
||||||
and DB_APPNO = @DB_APPNO
|
|
||||||
";
|
|
||||||
AddParam(cmdDelete, "編號", 編號);
|
|
||||||
AddParam(cmdDelete, "DB_APPNO", DB_APPNO);
|
|
||||||
int rowsAffected = ExecuteNonQuery(cmdDelete);
|
|
||||||
AfterDeleteOne(編號, DB_APPNO);
|
|
||||||
ts.Complete();
|
|
||||||
return rowsAffected;
|
|
||||||
}
|
|
||||||
catch (Exception error)
|
|
||||||
{
|
|
||||||
bool handled;
|
|
||||||
OnDeleteOneError(error, out handled);
|
|
||||||
if(!handled)
|
|
||||||
throw error;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[DataObjectMethod(DataObjectMethodType.Delete)]
|
|
||||||
public int DeleteOne(場地 value)
|
|
||||||
{
|
|
||||||
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required))
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (!BeforeDeleteOne(value))
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
場地List oldValues = SelectOne(value.編號);
|
|
||||||
if (oldValues.Count == 0 || oldValues[0].DB_APPNO != value.DB_APPNO)
|
|
||||||
{
|
|
||||||
throw new DBConcurrencyException("在刪除 \"場地\" 資料表時發生並行例外:找不到要刪除的資料列");
|
|
||||||
}
|
|
||||||
DbCommand cmdDelete = NewCommand();
|
|
||||||
cmdDelete.CommandText =
|
|
||||||
@"delete from 場地
|
|
||||||
where 1=1
|
|
||||||
and 編號 = @編號
|
|
||||||
and DB_APPNO = @DB_APPNO
|
|
||||||
";
|
|
||||||
AddParam(cmdDelete, "編號", value.編號);
|
|
||||||
AddParam(cmdDelete, "DB_APPNO", value.DB_APPNO);
|
|
||||||
int rowsAffected = ExecuteNonQuery(cmdDelete);
|
|
||||||
AfterDeleteOne(value);
|
|
||||||
ts.Complete();
|
|
||||||
return rowsAffected;
|
|
||||||
}
|
|
||||||
catch (Exception error)
|
|
||||||
{
|
|
||||||
bool handled;
|
|
||||||
OnDeleteOneError(error, out handled);
|
|
||||||
if(!handled)
|
|
||||||
throw error;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsDuplicate(int 編號)
|
|
||||||
{
|
|
||||||
DbCommand cmdSelect = NewCommand();
|
|
||||||
cmdSelect.CommandText = "select count(1)" + _from + _where
|
|
||||||
+ " and 編號 = @編號 "
|
|
||||||
;
|
|
||||||
AddParam(cmdSelect, "編號", 編號);
|
|
||||||
int count;
|
|
||||||
ExecuteScalar(cmdSelect, out count);
|
|
||||||
return count > 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 場地 資料集合類別
|
|
||||||
///</summary>
|
|
||||||
public partial class 場地List : List<場地>, IDataList
|
|
||||||
{
|
|
||||||
public void Fill(DbDataReader reader)
|
|
||||||
{
|
|
||||||
while (reader.Read())
|
|
||||||
{
|
|
||||||
場地 newItem = new 場地();
|
|
||||||
newItem.編號 = DAC.GetInt32(reader[0]);
|
|
||||||
newItem.單位名稱 = DAC.GetString(reader[1]);
|
|
||||||
newItem.場地名稱 = DAC.GetString(reader[2]);
|
|
||||||
newItem.場地類型 = DAC.GetString(reader[3]);
|
|
||||||
newItem.價格 = DAC.GetInt32(reader[4]);
|
|
||||||
newItem.坪數 = DAC.GetInt32(reader[5]);
|
|
||||||
newItem.容納人數 = DAC.GetInt32(reader[6]);
|
|
||||||
newItem.地址_郵編 = DAC.GetString(reader[7]);
|
|
||||||
newItem.地址_縣市 = DAC.GetString(reader[8]);
|
|
||||||
newItem.地址_鄉鎮市區 = DAC.GetString(reader[9]);
|
|
||||||
newItem.地址_街道地址 = DAC.GetString(reader[10]);
|
|
||||||
newItem.捷運可到 = DAC.GetString(reader[11]);
|
|
||||||
newItem.捷運分鐘 = DAC.GetInt32(reader[12]);
|
|
||||||
newItem.公車可到 = DAC.GetString(reader[13]);
|
|
||||||
newItem.公車分鐘 = DAC.GetInt32(reader[14]);
|
|
||||||
newItem.火車可到 = DAC.GetString(reader[15]);
|
|
||||||
newItem.火車分鐘 = DAC.GetInt32(reader[16]);
|
|
||||||
newItem.步行可到 = DAC.GetString(reader[17]);
|
|
||||||
newItem.步行分鐘 = DAC.GetInt32(reader[18]);
|
|
||||||
newItem.設備提供 = DAC.GetString(reader[19]);
|
|
||||||
newItem.聯絡人 = DAC.GetString(reader[20]);
|
|
||||||
newItem.聯絡人電話 = DAC.GetString(reader[21]);
|
|
||||||
newItem.電子郵件 = DAC.GetString(reader[22]);
|
|
||||||
newItem.傳真 = DAC.GetString(reader[23]);
|
|
||||||
newItem.備註 = DAC.GetString(reader[24]);
|
|
||||||
newItem.DB_APPNO = DAC.GetInt32(reader[25]);
|
|
||||||
newItem.DB_CRDAT = DAC.GetDateTime(reader[26]);
|
|
||||||
newItem.DB_CRUSR = DAC.GetString(reader[27]);
|
|
||||||
newItem.DB_TRDAT = DAC.GetDateTime(reader[28]);
|
|
||||||
newItem.DB_TRUSR = DAC.GetString(reader[29]);
|
|
||||||
Add(newItem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 場地 資料紀錄類別
|
|
||||||
///</summary>
|
|
||||||
[Serializable]
|
|
||||||
public partial class 場地 : DataItemBase
|
|
||||||
{
|
|
||||||
private int _編號;
|
|
||||||
private string _單位名稱;
|
|
||||||
private string _場地名稱;
|
|
||||||
private string _場地類型;
|
|
||||||
private int _價格;
|
|
||||||
private int _坪數;
|
|
||||||
private int _容納人數;
|
|
||||||
private string _地址_郵編;
|
|
||||||
private string _地址_縣市;
|
|
||||||
private string _地址_鄉鎮市區;
|
|
||||||
private string _地址_街道地址;
|
|
||||||
private string _捷運可到;
|
|
||||||
private int _捷運分鐘;
|
|
||||||
private string _公車可到;
|
|
||||||
private int _公車分鐘;
|
|
||||||
private string _火車可到;
|
|
||||||
private int _火車分鐘;
|
|
||||||
private string _步行可到;
|
|
||||||
private int _步行分鐘;
|
|
||||||
private string _設備提供;
|
|
||||||
private string _聯絡人;
|
|
||||||
private string _聯絡人電話;
|
|
||||||
private string _電子郵件;
|
|
||||||
private string _傳真;
|
|
||||||
private string _備註;
|
|
||||||
|
|
||||||
#region 資料欄位
|
|
||||||
///<summary>
|
|
||||||
/// 編號
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(true, false, false)]
|
|
||||||
public int 編號
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _編號;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _編號)
|
|
||||||
{
|
|
||||||
_編號 = value;
|
|
||||||
OnPropertyChanged("編號");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 單位名稱
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(false, false, true, 50)]
|
|
||||||
public string 單位名稱
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _單位名稱;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _單位名稱)
|
|
||||||
{
|
|
||||||
_單位名稱 = value;
|
|
||||||
OnPropertyChanged("單位名稱");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 場地名稱
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(false, false, true, 50)]
|
|
||||||
public string 場地名稱
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _場地名稱;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _場地名稱)
|
|
||||||
{
|
|
||||||
_場地名稱 = value;
|
|
||||||
OnPropertyChanged("場地名稱");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 場地類型
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(false, false, true, 20)]
|
|
||||||
public string 場地類型
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _場地類型;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _場地類型)
|
|
||||||
{
|
|
||||||
_場地類型 = value;
|
|
||||||
OnPropertyChanged("場地類型");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 價格
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(false, false, true)]
|
|
||||||
public int 價格
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _價格;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _價格)
|
|
||||||
{
|
|
||||||
_價格 = value;
|
|
||||||
OnPropertyChanged("價格");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 坪數
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(false, false, true)]
|
|
||||||
public int 坪數
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _坪數;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _坪數)
|
|
||||||
{
|
|
||||||
_坪數 = value;
|
|
||||||
OnPropertyChanged("坪數");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 容納人數
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(false, false, true)]
|
|
||||||
public int 容納人數
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _容納人數;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _容納人數)
|
|
||||||
{
|
|
||||||
_容納人數 = value;
|
|
||||||
OnPropertyChanged("容納人數");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 地址_郵編
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(false, false, true, 5)]
|
|
||||||
public string 地址_郵編
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _地址_郵編;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _地址_郵編)
|
|
||||||
{
|
|
||||||
_地址_郵編 = value;
|
|
||||||
OnPropertyChanged("地址_郵編");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 地址_縣市
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(false, false, true, 10)]
|
|
||||||
public string 地址_縣市
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _地址_縣市;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _地址_縣市)
|
|
||||||
{
|
|
||||||
_地址_縣市 = value;
|
|
||||||
OnPropertyChanged("地址_縣市");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 地址_鄉鎮市區
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(false, false, true, 10)]
|
|
||||||
public string 地址_鄉鎮市區
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _地址_鄉鎮市區;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _地址_鄉鎮市區)
|
|
||||||
{
|
|
||||||
_地址_鄉鎮市區 = value;
|
|
||||||
OnPropertyChanged("地址_鄉鎮市區");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 地址_街道地址
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(false, false, true, 30)]
|
|
||||||
public string 地址_街道地址
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _地址_街道地址;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _地址_街道地址)
|
|
||||||
{
|
|
||||||
_地址_街道地址 = value;
|
|
||||||
OnPropertyChanged("地址_街道地址");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 捷運可到
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(false, false, true, 1)]
|
|
||||||
public string 捷運可到
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _捷運可到;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _捷運可到)
|
|
||||||
{
|
|
||||||
_捷運可到 = value;
|
|
||||||
OnPropertyChanged("捷運可到");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 捷運分鐘
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(false, false, true)]
|
|
||||||
public int 捷運分鐘
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _捷運分鐘;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _捷運分鐘)
|
|
||||||
{
|
|
||||||
_捷運分鐘 = value;
|
|
||||||
OnPropertyChanged("捷運分鐘");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 公車可到
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(false, false, true, 1)]
|
|
||||||
public string 公車可到
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _公車可到;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _公車可到)
|
|
||||||
{
|
|
||||||
_公車可到 = value;
|
|
||||||
OnPropertyChanged("公車可到");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 公車分鐘
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(false, false, true)]
|
|
||||||
public int 公車分鐘
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _公車分鐘;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _公車分鐘)
|
|
||||||
{
|
|
||||||
_公車分鐘 = value;
|
|
||||||
OnPropertyChanged("公車分鐘");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 火車可到
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(false, false, true, 1)]
|
|
||||||
public string 火車可到
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _火車可到;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _火車可到)
|
|
||||||
{
|
|
||||||
_火車可到 = value;
|
|
||||||
OnPropertyChanged("火車可到");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 火車分鐘
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(false, false, true)]
|
|
||||||
public int 火車分鐘
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _火車分鐘;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _火車分鐘)
|
|
||||||
{
|
|
||||||
_火車分鐘 = value;
|
|
||||||
OnPropertyChanged("火車分鐘");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 步行可到
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(false, false, true, 1)]
|
|
||||||
public string 步行可到
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _步行可到;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _步行可到)
|
|
||||||
{
|
|
||||||
_步行可到 = value;
|
|
||||||
OnPropertyChanged("步行可到");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 步行分鐘
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(false, false, true)]
|
|
||||||
public int 步行分鐘
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _步行分鐘;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _步行分鐘)
|
|
||||||
{
|
|
||||||
_步行分鐘 = value;
|
|
||||||
OnPropertyChanged("步行分鐘");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 設備提供
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(false, false, true, 1000)]
|
|
||||||
public string 設備提供
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _設備提供;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _設備提供)
|
|
||||||
{
|
|
||||||
_設備提供 = value;
|
|
||||||
OnPropertyChanged("設備提供");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 聯絡人
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(false, false, true, 50)]
|
|
||||||
public string 聯絡人
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _聯絡人;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _聯絡人)
|
|
||||||
{
|
|
||||||
_聯絡人 = value;
|
|
||||||
OnPropertyChanged("聯絡人");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 聯絡人電話
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(false, false, true, 50)]
|
|
||||||
public string 聯絡人電話
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _聯絡人電話;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _聯絡人電話)
|
|
||||||
{
|
|
||||||
_聯絡人電話 = value;
|
|
||||||
OnPropertyChanged("聯絡人電話");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 電子郵件
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(false, false, true, 50)]
|
|
||||||
public string 電子郵件
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _電子郵件;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _電子郵件)
|
|
||||||
{
|
|
||||||
_電子郵件 = value;
|
|
||||||
OnPropertyChanged("電子郵件");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 傳真
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(false, false, true, 50)]
|
|
||||||
public string 傳真
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _傳真;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _傳真)
|
|
||||||
{
|
|
||||||
_傳真 = value;
|
|
||||||
OnPropertyChanged("傳真");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 備註
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(false, false, true, 1000)]
|
|
||||||
public string 備註
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _備註;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _備註)
|
|
||||||
{
|
|
||||||
_備註 = value;
|
|
||||||
OnPropertyChanged("備註");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,347 +0,0 @@
|
|||||||
//
|
|
||||||
// 這個檔案是 場地 資料表的資料存取類別 檔案二
|
|
||||||
// 您可以修改這個檔案,加入您自訂的屬性與方法
|
|
||||||
//
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
using System.ComponentModel;
|
|
||||||
using System.Data;
|
|
||||||
using System.Data.Common;
|
|
||||||
using WebLib;
|
|
||||||
using System.Data.SqlClient;
|
|
||||||
|
|
||||||
namespace Education
|
|
||||||
{
|
|
||||||
///<summary>
|
|
||||||
/// 場地 資料存取類別
|
|
||||||
///</summary>
|
|
||||||
public partial class DAC_場地 : WebLib.DAC
|
|
||||||
{
|
|
||||||
///<summary>
|
|
||||||
/// 給查詢畫面用的 Select 方法
|
|
||||||
///</summary>
|
|
||||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
|
||||||
public 場地List Select(bool noInputReturnAll, string 單位名稱, string 場地名稱, string 場地類型, string 聯絡人, string 聯絡人電話)
|
|
||||||
{
|
|
||||||
場地List result = new 場地List();
|
|
||||||
|
|
||||||
if (!noInputReturnAll
|
|
||||||
&& 單位名稱 == null
|
|
||||||
&& 場地名稱 == null
|
|
||||||
&& 場地類型 == null
|
|
||||||
&& 聯絡人 == null
|
|
||||||
&& 聯絡人電話 == null)
|
|
||||||
return result;
|
|
||||||
|
|
||||||
IDataList list = result as IDataList;
|
|
||||||
DbCommand cmdSelect = NewCommand();
|
|
||||||
cmdSelect.CommandText = _select + _from + _where;
|
|
||||||
|
|
||||||
if (單位名稱 != null && 單位名稱.Length > 0)
|
|
||||||
{
|
|
||||||
cmdSelect.CommandText += " and 單位名稱 like @單位名稱 ";
|
|
||||||
AddParam(cmdSelect, "單位名稱", "%" + 單位名稱 + "%");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (場地名稱 != null && 場地名稱.Length > 0)
|
|
||||||
{
|
|
||||||
cmdSelect.CommandText += " and 場地名稱 like @場地名稱 ";
|
|
||||||
AddParam(cmdSelect, "場地名稱", "%" + 場地名稱 + "%");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (場地類型 != null && 場地類型.Length > 0)
|
|
||||||
{
|
|
||||||
cmdSelect.CommandText += " and 場地類型 like @場地類型 ";
|
|
||||||
AddParam(cmdSelect, "場地類型", "%" + 場地類型 + "%");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (聯絡人 != null && 聯絡人.Length > 0)
|
|
||||||
{
|
|
||||||
cmdSelect.CommandText += " and 聯絡人 like @聯絡人 ";
|
|
||||||
AddParam(cmdSelect, "聯絡人", "%" + 聯絡人 + "%");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (聯絡人電話 != null && 聯絡人電話.Length > 0)
|
|
||||||
{
|
|
||||||
cmdSelect.CommandText += " and 聯絡人電話 like @聯絡人電話 ";
|
|
||||||
AddParam(cmdSelect, "聯絡人電話", "%" + 聯絡人電話 + "%");
|
|
||||||
}
|
|
||||||
|
|
||||||
cmdSelect.CommandText += _order;
|
|
||||||
Select(cmdSelect, ref list);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// InsertOne 之前會執行此方法
|
|
||||||
/// 在這裡可以做一些檢查或是自動編號等動作
|
|
||||||
/// 回傳 false 會打斷 InsertOne 的執行
|
|
||||||
///</summary>
|
|
||||||
protected virtual bool BeforeInsertOne(場地 value)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// InsertOne 之後會執行此方法
|
|
||||||
///</summary>
|
|
||||||
protected virtual void AfterInsertOne(場地 value)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// InsertOne 發生錯誤時會執行此方法
|
|
||||||
///</summary>
|
|
||||||
protected virtual void OnInsertOneError(Exception error, out bool handled)
|
|
||||||
{
|
|
||||||
handled = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// UpdateOne 之前會執行此方法
|
|
||||||
/// 在這裡可以做一些檢查
|
|
||||||
/// 回傳 false 會打斷 UpdateOne 的執行
|
|
||||||
///</summary>
|
|
||||||
protected virtual bool BeforeUpdateOne(場地 value)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// UpdateOne 之後會執行此方法
|
|
||||||
///</summary>
|
|
||||||
protected virtual void AfterUpdateOne(場地 value)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// UpdateOne 發生錯誤時會執行此方法
|
|
||||||
///</summary>
|
|
||||||
protected virtual void OnUpdateOneError(Exception error, out bool handled)
|
|
||||||
{
|
|
||||||
handled = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// DeleteOne 之前會執行此方法
|
|
||||||
/// 在這裡可以做一些檢查
|
|
||||||
/// 回傳 false 會打斷 DeleteOne 的執行
|
|
||||||
///</summary>
|
|
||||||
protected virtual bool BeforeDeleteOne(場地 value)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// DeleteOne 之後會執行此方法
|
|
||||||
///</summary>
|
|
||||||
protected virtual void AfterDeleteOne(場地 value)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// DeleteOne 之前會執行此方法
|
|
||||||
/// 在這裡可以做一些檢查
|
|
||||||
/// 回傳 false 會打斷 DeleteOne 的執行
|
|
||||||
///</summary>
|
|
||||||
protected virtual bool BeforeDeleteOne(int 編號, int DB_APPNO)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// DeleteOne 之後會執行此方法
|
|
||||||
///</summary>
|
|
||||||
protected virtual void AfterDeleteOne(int 編號, int DB_APPNO)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// DeleteOne 發生錯誤時會執行此方法
|
|
||||||
///</summary>
|
|
||||||
protected virtual void OnDeleteOneError(Exception error, out bool handled)
|
|
||||||
{
|
|
||||||
handled = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 有另外加上去的屬性及方法,請加在這裡
|
|
||||||
/// <summary>
|
|
||||||
/// 取得場地名稱
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="職務ID"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public string Get場地名稱(object 編號)
|
|
||||||
{
|
|
||||||
DbCommand cmd = NewCommand("SELECT 場地名稱 FROM " + _tableName
|
|
||||||
+ " WHERE 編號=@編號");
|
|
||||||
AddParam(cmd, "編號", 編號);
|
|
||||||
string s;
|
|
||||||
ExecuteScalar(cmd, out s);
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
public NameValueList Select地區ForDropDown()
|
|
||||||
{
|
|
||||||
NameValueList result = new NameValueList();
|
|
||||||
DbCommand cmd = NewCommand("SELECT DISTINCT 地址_縣市 FROM " + _tableName + " ORDER BY 地址_縣市");
|
|
||||||
|
|
||||||
result.Add("(請選擇)", "");
|
|
||||||
result.Fill(Select(cmd), "地址_縣市", "地址_縣市", false);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public NameValueList Select教室類型ForDropDown()
|
|
||||||
{
|
|
||||||
NameValueList result = new NameValueList();
|
|
||||||
DbCommand cmd = NewCommand("SELECT DISTINCT 場地類型 FROM " + _tableName + " ORDER BY 場地類型");
|
|
||||||
|
|
||||||
result.Add("(請選擇)", "");
|
|
||||||
result.Fill(Select(cmd), "場地類型", "場地類型", false);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
|
||||||
public 場地List 查詢作業(bool noInputReturnAll, string 地區, int 價格1, int 價格2, int 人數1, int 人數2,
|
|
||||||
string 場地類型, int 滿意度1, int 滿意度2)
|
|
||||||
{
|
|
||||||
場地List result = new 場地List();
|
|
||||||
|
|
||||||
if (!noInputReturnAll
|
|
||||||
&& 地區 == null
|
|
||||||
&& 場地類型 == null
|
|
||||||
&& 價格1 == 0
|
|
||||||
&& 價格2 == 0
|
|
||||||
&& 人數1 == 0
|
|
||||||
&& 人數2 == 0
|
|
||||||
&& 滿意度1 == 0
|
|
||||||
&& 滿意度2 == 0)
|
|
||||||
return result;
|
|
||||||
|
|
||||||
IDataList list = result as IDataList;
|
|
||||||
DbCommand cmdSelect = NewCommand();
|
|
||||||
cmdSelect.CommandText = _select +
|
|
||||||
@" FROM
|
|
||||||
( SELECT A.*,
|
|
||||||
ISNULL(( SELECT CAST(SUM(場地滿意度分數) AS FLOAT) / COUNT(1)
|
|
||||||
FROM 滿意度調查課程企劃
|
|
||||||
WHERE 場地編號 = A.編號), 0) AS 滿意度
|
|
||||||
FROM 場地 A
|
|
||||||
) AS TMP1"
|
|
||||||
+ _where;
|
|
||||||
|
|
||||||
if (地區 != null && 地區.Length > 0)
|
|
||||||
{
|
|
||||||
cmdSelect.CommandText += " and 地址_縣市 like @地區 ";
|
|
||||||
AddParam(cmdSelect, "地區", "%" + 地區 + "%");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (場地類型 != null && 場地類型.Length > 0)
|
|
||||||
{
|
|
||||||
cmdSelect.CommandText += " and 場地類型 like @場地類型 ";
|
|
||||||
AddParam(cmdSelect, "場地類型", "%" + 場地類型 + "%");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (價格1 > 0 && 價格2 > 0)
|
|
||||||
{
|
|
||||||
cmdSelect.CommandText += " and 價格 >= @價格1 and 價格 <= @價格2 ";
|
|
||||||
AddParam(cmdSelect, "價格1", 價格1);
|
|
||||||
AddParam(cmdSelect, "價格2", 價格2);
|
|
||||||
}
|
|
||||||
else if (價格1 > 0 && 價格2 == 0)
|
|
||||||
{
|
|
||||||
cmdSelect.CommandText += " and 價格 >= @價格1 ";
|
|
||||||
AddParam(cmdSelect, "價格1", 價格1);
|
|
||||||
}
|
|
||||||
else if (價格1 == 0 && 價格2 < 0)
|
|
||||||
{
|
|
||||||
cmdSelect.CommandText += " and 價格 <= @價格2 ";
|
|
||||||
AddParam(cmdSelect, "價格2", 價格2);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (人數1 > 0 && 人數2 > 0)
|
|
||||||
{
|
|
||||||
cmdSelect.CommandText += " and 容納人數 >= @人數1 and 容納人數 <= @人數2 ";
|
|
||||||
AddParam(cmdSelect, "人數1", 人數1);
|
|
||||||
AddParam(cmdSelect, "人數2", 人數2);
|
|
||||||
}
|
|
||||||
else if (人數1 > 0 && 人數2 == 0)
|
|
||||||
{
|
|
||||||
cmdSelect.CommandText += " and 容納人數 >= @人數1 ";
|
|
||||||
AddParam(cmdSelect, "人數1", 人數1);
|
|
||||||
}
|
|
||||||
else if (人數1 == 0 && 人數2 < 0)
|
|
||||||
{
|
|
||||||
cmdSelect.CommandText += " and 容納人數 <= @人數2 ";
|
|
||||||
AddParam(cmdSelect, "人數2", 人數2);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (滿意度1 != 0 && 滿意度2 != 0)
|
|
||||||
{
|
|
||||||
cmdSelect.CommandText += " and 滿意度 between @滿意度1 and @滿意度2 ";
|
|
||||||
AddParam(cmdSelect, "滿意度1", 滿意度1);
|
|
||||||
AddParam(cmdSelect, "滿意度2", 滿意度2);
|
|
||||||
}
|
|
||||||
else if (滿意度1 != 0 && 滿意度2 == 0)
|
|
||||||
{
|
|
||||||
cmdSelect.CommandText += " and 滿意度 >= @滿意度1 ";
|
|
||||||
AddParam(cmdSelect, "滿意度1", 滿意度1);
|
|
||||||
}
|
|
||||||
else if (滿意度1 == 0 && 滿意度2 != 0)
|
|
||||||
{
|
|
||||||
cmdSelect.CommandText += " and 滿意度 <= @滿意度2 ";
|
|
||||||
AddParam(cmdSelect, "滿意度2", 滿意度2);
|
|
||||||
}
|
|
||||||
|
|
||||||
cmdSelect.CommandText += _order;
|
|
||||||
Select(cmdSelect, ref list);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public DataTable Select滿意度統計(int 場地編號)
|
|
||||||
{
|
|
||||||
DbCommand cmdSelect = NewCommand(
|
|
||||||
@"SELECT
|
|
||||||
(SELECT COUNT(1) FROM 滿意度調查課程企劃 WHERE 場地編號 = @場地編號 AND 場地滿意度填答 = 5) AS 場地滿意度5,
|
|
||||||
(SELECT COUNT(1) FROM 滿意度調查課程企劃 WHERE 場地編號 = @場地編號 AND 場地滿意度填答 = 4) AS 場地滿意度4,
|
|
||||||
(SELECT COUNT(1) FROM 滿意度調查課程企劃 WHERE 場地編號 = @場地編號 AND 場地滿意度填答 = 3) AS 場地滿意度3,
|
|
||||||
(SELECT COUNT(1) FROM 滿意度調查課程企劃 WHERE 場地編號 = @場地編號 AND 場地滿意度填答 = 2) AS 場地滿意度2,
|
|
||||||
(SELECT COUNT(1) FROM 滿意度調查課程企劃 WHERE 場地編號 = @場地編號 AND 場地滿意度填答 = 1) AS 場地滿意度1,
|
|
||||||
(SELECT ISNULL(AVG(CAST(場地滿意度分數 AS FLOAT)), 0) FROM 滿意度調查課程企劃 WHERE 場地編號 = @場地編號) AS 場地滿意度總分");
|
|
||||||
AddParam(cmdSelect, "場地編號", 場地編號);
|
|
||||||
return Select(cmdSelect);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsOccipued(int 場地編號)
|
|
||||||
{
|
|
||||||
DbCommand cmd = NewCommand(
|
|
||||||
@"SELECT
|
|
||||||
(SELECT COUNT(1) FROM 場地遴選 WHERE 場地編號_A = @場地編號 OR 場地編號_B = @場地編號 OR 場地編號_C = @場地編號)
|
|
||||||
+ (SELECT COUNT(1) FROM 場地異動 WHERE 場地編號 = @場地編號)");
|
|
||||||
AddParam(cmd, "場地編號", 場地編號);
|
|
||||||
int i;
|
|
||||||
ExecuteScalar(cmd, out i);
|
|
||||||
return i > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 場地 資料集合類別
|
|
||||||
///</summary>
|
|
||||||
public partial class 場地List : List<場地>
|
|
||||||
{
|
|
||||||
// 有另外加上去的屬性及方法,請加在這裡
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 場地 資料紀錄類別
|
|
||||||
///</summary>
|
|
||||||
public partial class 場地
|
|
||||||
{
|
|
||||||
// 有另外加上去的屬性及方法,請加在這裡
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,528 +0,0 @@
|
|||||||
//
|
|
||||||
// 這個檔案是 片語 資料表的資料存取類別 檔案一
|
|
||||||
// 請不要修改這個檔案,重新產生資料存取類別時,這個檔案會被覆蓋掉
|
|
||||||
//
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
using System.ComponentModel;
|
|
||||||
using System.Data;
|
|
||||||
using System.Data.Common;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Transactions;
|
|
||||||
using WebLib;
|
|
||||||
using System.Data.SqlClient;
|
|
||||||
|
|
||||||
namespace Education
|
|
||||||
{
|
|
||||||
///<summary>
|
|
||||||
/// 片語 資料存取類別
|
|
||||||
///</ summary>
|
|
||||||
[DataObject]
|
|
||||||
public partial class DAC_片語 : WebLib.DAC
|
|
||||||
{
|
|
||||||
private const string _tableName = "[片語]";
|
|
||||||
private const string _allFields = "[編號], [適用欄位], [片語內容], [DB_APPNO], [DB_CRDAT], [DB_CRUSR], [DB_TRDAT], [DB_TRUSR]";
|
|
||||||
private string _orderBy = "[編號]";
|
|
||||||
private string _select = "select " + _allFields;
|
|
||||||
private string _insert = "[適用欄位], [片語內容], [DB_APPNO], [DB_CRDAT], [DB_CRUSR], [DB_TRDAT], [DB_TRUSR]";
|
|
||||||
private string _insertBak = "[編號], [適用欄位], [片語內容], [DB_APPNO], [DB_CRDAT], [DB_CRUSR], [DB_TRDAT], [DB_TRUSR], [DB_TRMOD]";
|
|
||||||
private string _insertValue = "@適用欄位, @片語內容, @DB_APPNO, @DB_CRDAT, @DB_CRUSR, @DB_TRDAT, @DB_TRUSR";
|
|
||||||
private string _insertBakValue = "@編號, @適用欄位, @片語內容, @DB_APPNO, @DB_CRDAT, @DB_CRUSR, @DB_TRDAT, @DB_TRUSR, @DB_TRMOD";
|
|
||||||
private string _from = " from " + _tableName + " ";
|
|
||||||
private string _where = " where 1=1 ";
|
|
||||||
private string _order = " order by [編號] ";
|
|
||||||
|
|
||||||
public DAC_片語()
|
|
||||||
: base()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public DAC_片語(DbConnection conn)
|
|
||||||
: base(conn)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
|
||||||
public 片語List SelectAll(string orderBy = "")
|
|
||||||
{
|
|
||||||
片語List result = new 片語List();
|
|
||||||
IDataList list = result as IDataList;
|
|
||||||
DbCommand cmdSelect = NewCommand();
|
|
||||||
cmdSelect.CommandText = _select + _from + _where + (orderBy == null || orderBy.Length == 0 ? _order : " order by " + orderBy);
|
|
||||||
Select(cmdSelect, ref list);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int SelectAllCount()
|
|
||||||
{
|
|
||||||
DbCommand cmdSelect = NewCommand();
|
|
||||||
cmdSelect.CommandText = "select count(1) " + _from;
|
|
||||||
int i;
|
|
||||||
ExecuteScalar(cmdSelect, out i);
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
|
||||||
public 片語List SelectAllPage(int startRowIndex, int maximumRows, string orderBy = "")
|
|
||||||
{
|
|
||||||
片語List result = new 片語List();
|
|
||||||
IDataList list = result as IDataList;
|
|
||||||
DbCommand cmdSelect = NewCommand();
|
|
||||||
cmdSelect.CommandText =
|
|
||||||
String.Format("select top {0} * from (", maximumRows)
|
|
||||||
+ "select " + _allFields
|
|
||||||
+ ", row_number() over (order by " + (orderBy == null || orderBy.Length == 0 ? _orderBy : orderBy) + ") as rowid "
|
|
||||||
+ _from + _where
|
|
||||||
+ ") as TMP1 where rowid > @startRowIndex ";
|
|
||||||
AddParam(cmdSelect, "startRowIndex", startRowIndex);
|
|
||||||
Select(cmdSelect, ref list);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
|
||||||
public 片語List SelectOne(int 編號)
|
|
||||||
{
|
|
||||||
片語List result = new 片語List();
|
|
||||||
IDataList list = result as IDataList;
|
|
||||||
DbCommand cmdSelect = NewCommand();
|
|
||||||
cmdSelect.CommandText = _select + _from + _where
|
|
||||||
+ " and 編號 = @編號 "
|
|
||||||
;
|
|
||||||
AddParam(cmdSelect, "編號", 編號);
|
|
||||||
Select(cmdSelect, ref list);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 給查詢畫面用的增加 Where 條件的方法
|
|
||||||
///</summary>
|
|
||||||
private void AddWhere(DbCommand cmdSelect, ref bool noInput, string 適用欄位, string 片語內容)
|
|
||||||
{
|
|
||||||
if (適用欄位 != null && 適用欄位.Length > 0)
|
|
||||||
{
|
|
||||||
noInput = false;
|
|
||||||
cmdSelect.CommandText += " and 適用欄位 like @適用欄位 ";
|
|
||||||
AddParam(cmdSelect, "適用欄位", "%" + 適用欄位 + "%");
|
|
||||||
}
|
|
||||||
if (片語內容 != null && 片語內容.Length > 0)
|
|
||||||
{
|
|
||||||
noInput = false;
|
|
||||||
cmdSelect.CommandText += " and 片語內容 like @片語內容 ";
|
|
||||||
AddParam(cmdSelect, "片語內容", "%" + 片語內容 + "%");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 給查詢畫面用的 Select 方法
|
|
||||||
///</summary>
|
|
||||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
|
||||||
public 片語List Select(bool noInputReturnAll, string 適用欄位, string 片語內容, string orderBy = "")
|
|
||||||
{
|
|
||||||
片語List result = new 片語List();
|
|
||||||
bool noInput = true;
|
|
||||||
IDataList list = result as IDataList;
|
|
||||||
DbCommand cmdSelect = NewCommand();
|
|
||||||
cmdSelect.CommandText = _select + _from + _where;
|
|
||||||
AddWhere(cmdSelect, ref noInput, 適用欄位, 片語內容);
|
|
||||||
cmdSelect.CommandText += (orderBy == null || orderBy.Length == 0 ? _order : " order by " + orderBy);
|
|
||||||
|
|
||||||
if (!noInputReturnAll && noInput)
|
|
||||||
return result;
|
|
||||||
|
|
||||||
Select(cmdSelect, ref list);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 給查詢畫面用的 SelectCount 方法
|
|
||||||
///</summary>
|
|
||||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
|
||||||
public int SelectCount(bool noInputReturnAll, string 適用欄位, string 片語內容, string orderBy = "")
|
|
||||||
{
|
|
||||||
bool noInput = true;
|
|
||||||
DbCommand cmdSelect = NewCommand();
|
|
||||||
cmdSelect.CommandText = "select count(1) " + _from + _where;
|
|
||||||
AddWhere(cmdSelect, ref noInput, 適用欄位, 片語內容);
|
|
||||||
|
|
||||||
if (!noInputReturnAll && noInput)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
int i;
|
|
||||||
ExecuteScalar(cmdSelect, out i);
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 給查詢畫面用的 SelectPage 方法
|
|
||||||
///</summary>
|
|
||||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
|
||||||
public 片語List SelectPage(bool noInputReturnAll, int startRowIndex, int maximumRows, string 適用欄位, string 片語內容, string orderBy = "")
|
|
||||||
{
|
|
||||||
片語List result = new 片語List();
|
|
||||||
bool noInput = true;
|
|
||||||
IDataList list = result as IDataList;
|
|
||||||
DbCommand cmdSelect = NewCommand();
|
|
||||||
|
|
||||||
cmdSelect.CommandText =
|
|
||||||
String.Format("select top {0} * from (", maximumRows)
|
|
||||||
+ "select " + _allFields
|
|
||||||
+ ", row_number() over (order by " + (orderBy == null || orderBy.Length == 0 ? _orderBy : orderBy) + ") as rowid "
|
|
||||||
+ _from + _where;
|
|
||||||
AddWhere(cmdSelect, ref noInput, 適用欄位, 片語內容);
|
|
||||||
cmdSelect.CommandText += ") as TMP1 where rowid > @startRowIndex ";
|
|
||||||
AddParam(cmdSelect, "startRowIndex", startRowIndex);
|
|
||||||
|
|
||||||
if (!noInputReturnAll && noInput)
|
|
||||||
return result;
|
|
||||||
|
|
||||||
Select(cmdSelect, ref list);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
[DataObjectMethod(DataObjectMethodType.Insert)]
|
|
||||||
public 片語Item InsertOne(片語Item value)
|
|
||||||
{
|
|
||||||
using (TransactionScope ts = DAC.NewTransactionScope())
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (!BeforeInsertOne(value))
|
|
||||||
return value;
|
|
||||||
DbCommand cmdInsert = NewCommand();
|
|
||||||
cmdInsert.CommandText =
|
|
||||||
"insert into [片語]"
|
|
||||||
+ " (" + _insert + ")"
|
|
||||||
+ "values "
|
|
||||||
+ " (" + _insertValue + ");" + "select @@identity"
|
|
||||||
;
|
|
||||||
AddParam(cmdInsert, "適用欄位", value.適用欄位);
|
|
||||||
AddParam(cmdInsert, "片語內容", value.片語內容);
|
|
||||||
AddParam(cmdInsert, "DB_APPNO", 1);
|
|
||||||
AddParam(cmdInsert, "DB_CRDAT", DateTime.Now);
|
|
||||||
AddParam(cmdInsert, "DB_CRUSR", CurrentUserId);
|
|
||||||
AddParam(cmdInsert, "DB_TRDAT", DBNull.Value);
|
|
||||||
AddParam(cmdInsert, "DB_TRUSR", DBNull.Value);
|
|
||||||
int newId;
|
|
||||||
ExecuteScalar(cmdInsert, out newId);
|
|
||||||
value.編號 = newId;
|
|
||||||
AfterInsertOne(value);
|
|
||||||
ts.Complete();
|
|
||||||
}
|
|
||||||
catch (Exception error)
|
|
||||||
{
|
|
||||||
bool handled;
|
|
||||||
OnInsertOneError(error, out handled);
|
|
||||||
if(!handled)
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[DataObjectMethod(DataObjectMethodType.Update)]
|
|
||||||
public 片語Item UpdateOne(片語Item value)
|
|
||||||
{
|
|
||||||
using (TransactionScope ts = DAC.NewTransactionScope())
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (!BeforeUpdateOne(value))
|
|
||||||
return value;
|
|
||||||
|
|
||||||
片語List oldValues = SelectOne(value.編號);
|
|
||||||
if (oldValues.Count == 0 || oldValues[0].DB_APPNO != value.DB_APPNO)
|
|
||||||
{
|
|
||||||
throw new DBConcurrencyException("在更新 \"片語\" 資料表時發生並行例外:找不到要更新的資料列");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DoBackup(oldValues[0], "UPDATE");
|
|
||||||
}
|
|
||||||
|
|
||||||
DbCommand cmdUpdate = NewCommand();
|
|
||||||
cmdUpdate.CommandText =
|
|
||||||
@"update [片語]
|
|
||||||
set
|
|
||||||
[適用欄位] = @適用欄位 ,
|
|
||||||
[片語內容] = @片語內容 ,
|
|
||||||
DB_APPNO = DB_APPNO + 1,
|
|
||||||
DB_TRDAT = @DB_TRDAT,
|
|
||||||
DB_TRUSR = @DB_TRUSR
|
|
||||||
where 1=1
|
|
||||||
and [編號] = @original_編號
|
|
||||||
and DB_APPNO = @original_DB_APPNO
|
|
||||||
";
|
|
||||||
AddParam(cmdUpdate, "適用欄位", value.適用欄位);
|
|
||||||
AddParam(cmdUpdate, "片語內容", value.片語內容);
|
|
||||||
AddParam(cmdUpdate, "DB_TRDAT", DateTime.Now);
|
|
||||||
AddParam(cmdUpdate, "DB_TRUSR", CurrentUserId);
|
|
||||||
AddParam(cmdUpdate, "original_編號", value.編號);
|
|
||||||
AddParam(cmdUpdate, "original_DB_APPNO", value.DB_APPNO);
|
|
||||||
ExecuteNonQuery(cmdUpdate);
|
|
||||||
AfterUpdateOne(value);
|
|
||||||
ts.Complete();
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
catch (Exception error)
|
|
||||||
{
|
|
||||||
bool handled;
|
|
||||||
OnUpdateOneError(error, out handled);
|
|
||||||
if(!handled)
|
|
||||||
throw error;
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[DataObjectMethod(DataObjectMethodType.Update)]
|
|
||||||
public 片語Item UpdateOne(片語Item value, 片語Item original_value)
|
|
||||||
{
|
|
||||||
using (TransactionScope ts = DAC.NewTransactionScope())
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (!BeforeUpdateOne(value, original_value))
|
|
||||||
return value;
|
|
||||||
|
|
||||||
片語List oldValues = SelectOne(original_value.編號);
|
|
||||||
if (oldValues.Count == 0 || oldValues[0].DB_APPNO != value.DB_APPNO)
|
|
||||||
{
|
|
||||||
throw new DBConcurrencyException("在更新 \"片語\" 資料表時發生並行例外:找不到要更新的資料列");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DoBackup(oldValues[0], "UPDATE");
|
|
||||||
}
|
|
||||||
|
|
||||||
DbCommand cmdUpdate = NewCommand();
|
|
||||||
cmdUpdate.CommandText =
|
|
||||||
@"update [片語]
|
|
||||||
set
|
|
||||||
[適用欄位] = @適用欄位 ,
|
|
||||||
[片語內容] = @片語內容 ,
|
|
||||||
DB_APPNO = DB_APPNO + 1,
|
|
||||||
DB_TRDAT = @DB_TRDAT,
|
|
||||||
DB_TRUSR = @DB_TRUSR
|
|
||||||
where 1=1
|
|
||||||
and [編號] = @original_編號
|
|
||||||
and DB_APPNO = @original_DB_APPNO
|
|
||||||
";
|
|
||||||
AddParam(cmdUpdate, "適用欄位", value.適用欄位);
|
|
||||||
AddParam(cmdUpdate, "片語內容", value.片語內容);
|
|
||||||
AddParam(cmdUpdate, "DB_TRDAT", DateTime.Now);
|
|
||||||
AddParam(cmdUpdate, "DB_TRUSR", CurrentUserId);
|
|
||||||
AddParam(cmdUpdate, "original_編號", original_value.編號);
|
|
||||||
AddParam(cmdUpdate, "original_DB_APPNO", original_value.DB_APPNO);
|
|
||||||
ExecuteNonQuery(cmdUpdate);
|
|
||||||
AfterUpdateOne(value, original_value);
|
|
||||||
ts.Complete();
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
catch (Exception error)
|
|
||||||
{
|
|
||||||
bool handled;
|
|
||||||
OnUpdateOneError(error, out handled);
|
|
||||||
if(!handled)
|
|
||||||
throw error;
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[DataObjectMethod(DataObjectMethodType.Delete)]
|
|
||||||
public int DeleteOne(int 編號, int DB_APPNO)
|
|
||||||
{
|
|
||||||
using (TransactionScope ts = DAC.NewTransactionScope())
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (!BeforeDeleteOne(編號, DB_APPNO))
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
片語List oldValues = SelectOne(編號);
|
|
||||||
if (oldValues.Count == 0 || oldValues[0].DB_APPNO != DB_APPNO)
|
|
||||||
{
|
|
||||||
throw new DBConcurrencyException("在刪除 \"片語\" 資料表時發生並行例外:找不到要刪除的資料列");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DoBackup(oldValues[0], "DELETE");
|
|
||||||
}
|
|
||||||
|
|
||||||
DbCommand cmdDelete = NewCommand();
|
|
||||||
cmdDelete.CommandText =
|
|
||||||
@"delete from [片語]
|
|
||||||
where 1=1
|
|
||||||
and 編號 = @編號
|
|
||||||
and DB_APPNO = @DB_APPNO
|
|
||||||
";
|
|
||||||
AddParam(cmdDelete, "編號", 編號);
|
|
||||||
AddParam(cmdDelete, "DB_APPNO", DB_APPNO);
|
|
||||||
int rowsAffected = ExecuteNonQuery(cmdDelete);
|
|
||||||
AfterDeleteOne(編號, DB_APPNO);
|
|
||||||
ts.Complete();
|
|
||||||
return rowsAffected;
|
|
||||||
}
|
|
||||||
catch (Exception error)
|
|
||||||
{
|
|
||||||
bool handled;
|
|
||||||
OnDeleteOneError(error, out handled);
|
|
||||||
if(!handled)
|
|
||||||
throw error;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[DataObjectMethod(DataObjectMethodType.Delete)]
|
|
||||||
public int DeleteOne(片語Item value)
|
|
||||||
{
|
|
||||||
using (TransactionScope ts = DAC.NewTransactionScope())
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (!BeforeDeleteOne(value))
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
片語List oldValues = SelectOne(value.編號);
|
|
||||||
if (oldValues.Count == 0 || oldValues[0].DB_APPNO != value.DB_APPNO)
|
|
||||||
{
|
|
||||||
throw new DBConcurrencyException("在刪除 \"片語\" 資料表時發生並行例外:找不到要刪除的資料列");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DoBackup(oldValues[0], "DELETE");
|
|
||||||
}
|
|
||||||
|
|
||||||
DbCommand cmdDelete = NewCommand();
|
|
||||||
cmdDelete.CommandText =
|
|
||||||
@"delete from [片語]
|
|
||||||
where 1=1
|
|
||||||
and 編號 = @編號
|
|
||||||
and DB_APPNO = @DB_APPNO
|
|
||||||
";
|
|
||||||
AddParam(cmdDelete, "編號", value.編號);
|
|
||||||
AddParam(cmdDelete, "DB_APPNO", value.DB_APPNO);
|
|
||||||
int rowsAffected = ExecuteNonQuery(cmdDelete);
|
|
||||||
AfterDeleteOne(value);
|
|
||||||
ts.Complete();
|
|
||||||
return rowsAffected;
|
|
||||||
}
|
|
||||||
catch (Exception error)
|
|
||||||
{
|
|
||||||
bool handled;
|
|
||||||
OnDeleteOneError(error, out handled);
|
|
||||||
if(!handled)
|
|
||||||
throw error;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsDuplicate(int 編號)
|
|
||||||
{
|
|
||||||
DbCommand cmdSelect = NewCommand();
|
|
||||||
cmdSelect.CommandText = "select count(1)" + _from + _where
|
|
||||||
+ " and 編號 = @編號 "
|
|
||||||
;
|
|
||||||
AddParam(cmdSelect, "編號", 編號);
|
|
||||||
int count;
|
|
||||||
ExecuteScalar(cmdSelect, out count);
|
|
||||||
return count > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void DoBackup(片語Item value, string updateMode)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
///片語 資料集合類別
|
|
||||||
///</summary>
|
|
||||||
[Serializable]
|
|
||||||
public partial class 片語List : List<片語Item>, IDataList
|
|
||||||
{
|
|
||||||
public void Fill(DbDataReader reader)
|
|
||||||
{
|
|
||||||
DAC.FillData<片語Item>(reader, this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 片語 資料紀錄類別
|
|
||||||
///</summary>
|
|
||||||
[Serializable]
|
|
||||||
public partial class 片語Item : DataItemBase
|
|
||||||
{
|
|
||||||
private int _編號;
|
|
||||||
private string _適用欄位;
|
|
||||||
private string _片語內容;
|
|
||||||
|
|
||||||
#region 資料欄位
|
|
||||||
///<summary>
|
|
||||||
/// 編號
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(true, false, false)]
|
|
||||||
public int 編號
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _編號;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _編號)
|
|
||||||
{
|
|
||||||
_編號 = value;
|
|
||||||
OnPropertyChanged("編號");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 適用欄位
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(false, false, false, 100)]
|
|
||||||
public string 適用欄位
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _適用欄位;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _適用欄位)
|
|
||||||
{
|
|
||||||
_適用欄位 = value;
|
|
||||||
OnPropertyChanged("適用欄位");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 片語內容
|
|
||||||
///</summary>
|
|
||||||
[DataObjectField(false, false, false, 100)]
|
|
||||||
public string 片語內容
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _片語內容;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _片語內容)
|
|
||||||
{
|
|
||||||
_片語內容 = value;
|
|
||||||
OnPropertyChanged("片語內容");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||